Merge PR #90 into 12.0

Signed-off-by ps-tubtim
This commit is contained in:
OCA-git-bot
2020-03-18 08:37:39 +00:00
13 changed files with 273 additions and 0 deletions

View File

@@ -0,0 +1 @@
../../../../stock_analysis

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

View File

@@ -0,0 +1,4 @@
# © 2016 Lorenzo Battistini - Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import report

View File

@@ -0,0 +1,26 @@
# © 2016 Lorenzo Battistini - Agile Business Group
# © 2020 Lorenzo Battistini - TAKOBI
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Stock Analysis",
"summary": "Analysis view for stock",
"version": "12.0.1.0.0",
"development_status": "Beta",
"category": "Warehouse",
"website": "https://github.com/OCA/stock-logistics-reporting",
"author": "Agile Business Group, Odoo Community Association (OCA)",
"maintainers": ["eLBati"],
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"stock",
],
"data": [
'report/stock_analysis_view.xml',
'security/ir.model.access.csv',
],
'images': [
'images/demo_analysis.png',
],
}

119
stock_analysis/i18n/it.po Normal file
View File

@@ -0,0 +1,119 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * stock_analysis
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-26 09:33+0000\n"
"PO-Revision-Date: 2020-02-26 09:33+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__categ_id
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Category"
msgstr "Categoria"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__company_id
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Company"
msgstr "Azienda"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Consumable products"
msgstr "Prodotti consumabili"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Group By"
msgstr "Raggruppa per"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__id
msgid "ID"
msgstr ""
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__in_date
msgid "Incoming Date"
msgstr "Data di Arrivo"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Internal location"
msgstr "Ubicazione interna"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__location_id
msgid "Location"
msgstr "Ubicazione"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__lot_id
msgid "Lot"
msgstr "Lotto"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__package_id
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Package"
msgstr "Collo"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__product_id
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Product"
msgstr "Prodotto"
#. module: stock_analysis
#: model:ir.model.fields,field_description:stock_analysis.field_stock_analysis__quantity
msgid "Quantity"
msgstr "Quantità"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Serial Number"
msgstr "Numero seriale"
#. module: stock_analysis
#: model:ir.actions.act_window,name:stock_analysis.action_stock_analysis_pivot
#: model:ir.ui.menu,name:stock_analysis.menu_action_stock_analysis_pivot
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Stock Analysis"
msgstr "Analisi magazzino"
#. module: stock_analysis
#: model:ir.model,name:stock_analysis.model_stock_analysis
msgid "Stock analysis view"
msgstr "Vista analisi magazzino"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "Stockable products"
msgstr "Prodotti immagazzinabili"
#. module: stock_analysis
#: model_terms:ir.ui.view,arch_db:stock_analysis.stock_analysis_pivot_search
msgid "This Year"
msgstr "Quest'anno"

View File

@@ -0,0 +1 @@
* Lorenzo Battistini (https://takobi.online/)

View File

@@ -0,0 +1,4 @@
This module extends the stock reporting to allow better stock per location analysis.
By default, it adds a pivot table where lines are products and columns are locations.
.. figure:: ../static/description/demo_analysis.png

View File

@@ -0,0 +1,4 @@
# © 2016 Lorenzo Battistini - Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import stock_analysis

View File

@@ -0,0 +1,50 @@
# © 2016 Lorenzo Battistini - Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import tools
from odoo import models, fields, api
class StockAnalysis(models.Model):
_name = 'stock.analysis'
_auto = False
_rec_name = 'product_id'
_description = 'Stock analysis view'
product_id = fields.Many2one(
'product.product', string='Product', readonly=True)
location_id = fields.Many2one(
'stock.location', string='Location', readonly=True)
quantity = fields.Float(string='Quantity', readonly=True)
lot_id = fields.Many2one(
'stock.production.lot', string='Lot', readonly=True)
package_id = fields.Many2one(
'stock.quant.package', string='Package', readonly=True)
in_date = fields.Datetime('Incoming Date', readonly=True)
categ_id = fields.Many2one(
'product.category', string='Category', readonly=True)
company_id = fields.Many2one(
'res.company', string='Company', readonly=True)
@api.model_cr
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute(
"""CREATE or REPLACE VIEW %s as (
SELECT
quant.id AS id,
quant.product_id AS product_id,
quant.location_id AS location_id,
quant.quantity AS quantity,
quant.lot_id AS lot_id,
quant.package_id AS package_id,
quant.in_date AS in_date,
quant.company_id,
template.categ_id AS categ_id
FROM stock_quant AS quant
JOIN product_product prod ON prod.id = quant.product_id
JOIN product_template template
ON template.id = prod.product_tmpl_id
)"""
% (self._table)
)

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="stock_analysis_pivot" model="ir.ui.view">
<field name="name">stock.analysis.pivot</field>
<field name="model">stock.analysis</field>
<field name="arch" type="xml">
<pivot string="Stock Analysis" disable_linking="True">
<field name="product_id" type="row"/>
<field name="location_id" type="col"/>
<field name="quantity" type="measure"/>
</pivot>
</field>
</record>
<record id="stock_analysis_pivot_search" model="ir.ui.view">
<field name="name">stock.analysis.search</field>
<field name="model">stock.analysis</field>
<field name="arch" type="xml">
<search string="Stock Analysis">
<field name="product_id"/>
<field name="lot_id"/>
<field name="package_id"/>
<field name="location_id"/>
<field name="categ_id"/>
<field name="company_id"/>
<filter name="internal_location" string="Internal location" domain="[('location_id.usage', '=', 'internal')]"/>
<separator/>
<filter name="stockable" string="Stockable products" domain="[('product_id.type', '=', 'product')]"/>
<filter name="consumable" string="Consumable products" domain="[('product_id.type', '=', 'consu')]"/>
<separator/>
<filter string="This Year" name="year" domain="[('in_date','&lt;=', time.strftime('%%Y-12-31')),('in_date','&gt;=',time.strftime('%%Y-01-01'))]"/>
<group expand="1" string="Group By">
<filter string="Category" name="Category" context="{'group_by':'categ_id'}"/>
<filter string="Product" name="Product" context="{'group_by':'product_id'}"/>
<filter string="Serial Number" name="Lot" context="{'group_by':'lot_id'}"/>
<filter string="Package" name="Package" context="{'group_by':'package_id'}"/>
<filter string="Company" name="Company" context="{'group_by':'company_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_stock_analysis_pivot" model="ir.actions.act_window">
<field name="name">Stock Analysis</field>
<field name="res_model">stock.analysis</field>
<field name="view_type">form</field>
<field name="view_mode">pivot,graph</field>
<field name="search_view_id" ref="stock_analysis_pivot_search"/>
<field name="view_id" ref="stock_analysis_pivot"/>
<field name="context">{'search_default_internal_location':1}</field>
</record>
<menuitem action="action_stock_analysis_pivot" id="menu_action_stock_analysis_pivot" parent="stock.menu_warehouse_report"/>
</odoo>

View File

@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_stock_analysis_user,stock_analysis user,model_stock_analysis,stock.group_stock_user,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_stock_analysis_user stock_analysis user model_stock_analysis stock.group_stock_user 1 0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB