[12.0][ADD] stock_location_empty

This commit is contained in:
Thierry Ducrest
2019-11-21 14:40:18 +01:00
committed by sonhd
parent 539d4bc41c
commit 5a012ba36d
9 changed files with 311 additions and 0 deletions

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,18 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
{'name': 'Stock Location Empty',
'version': '12.0.1.0.0',
'author': 'Camptocamp, Odoo Community Association (OCA)',
'license': 'AGPL-3',
'category': 'stock',
'depends': [
'stock',
],
"website": "https://github.com/OCA/stock-logistics-warehouse",
'data': [
'views/stock.xml',
],
'installable': True,
'application': False,
}

View File

@@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * stock_location_empty
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-22 07:37+0000\n"
"PO-Revision-Date: 2019-11-22 09:06+0100\n"
"Last-Translator: Thierry Ducrest <thierry.ducrest@camptocamp.com>\n"
"Language-Team: English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Customer"
msgstr "Client"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Customer Locations"
msgstr "Emplacements clients"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_inherit
msgid "Empty"
msgstr "Vide"
#. module: stock_location_empty
#: model:ir.ui.menu,name:stock_location_empty.stock_location_empty_menu
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_inherit
msgid "Empty stock"
msgstr "Emplacements vides"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Internal"
msgstr "Interne"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Internal Locations"
msgstr "Emplacements internes"
#. module: stock_location_empty
#: model:ir.model,name:stock_location_empty.model_stock_location
msgid "Inventory Locations"
msgstr "Emplacements de stock"
#. module: stock_location_empty
#: model:ir.actions.act_window,name:stock_location_empty.action_stock_location_empty
msgid "Locations"
msgstr "Emplacements"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Parent Location"
msgstr "Emplacement parent"
#. module: stock_location_empty
#: model:ir.model.fields,field_description:stock_location_empty.field_stock_location__stock_amount
msgid "Stock Amount"
msgstr "Quantité en stock"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_tree3
msgid "Stock Location"
msgstr "Emplacement de stock"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Stock Locations"
msgstr "Emplacements de stock"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Vendor"
msgstr "Fournisseur"
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Vendor Locations"
msgstr "Adresses du vendeur"

View File

@@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * stock_location_empty
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-22 07:37+0000\n"
"PO-Revision-Date: 2019-11-22 07:37+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_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Customer"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Customer Locations"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_inherit
msgid "Empty"
msgstr ""
#. module: stock_location_empty
#: model:ir.ui.menu,name:stock_location_empty.stock_location_empty_menu
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_inherit
msgid "Empty stock"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Internal"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Internal Locations"
msgstr ""
#. module: stock_location_empty
#: model:ir.model,name:stock_location_empty.model_stock_location
msgid "Inventory Locations"
msgstr ""
#. module: stock_location_empty
#: model:ir.actions.act_window,name:stock_location_empty.action_stock_location_empty
msgid "Locations"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Parent Location"
msgstr ""
#. module: stock_location_empty
#: model:ir.model.fields,field_description:stock_location_empty.field_stock_location__stock_amount
msgid "Stock Amount"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_tree3
msgid "Stock Location"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Stock Locations"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Vendor"
msgstr ""
#. module: stock_location_empty
#: model_terms:ir.ui.view,arch_db:stock_location_empty.view_location_search_empty_2
msgid "Vendor Locations"
msgstr ""

View File

@@ -0,0 +1 @@
from . import stock_location

View File

@@ -0,0 +1,45 @@
# Copyright 2018 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class StockLocation(models.Model):
_inherit = 'stock.location'
stock_amount = fields.Integer(
compute='_compute_location_amount', search='_search_location_amount'
)
@api.multi
def _search_location_amount(self, operator, value):
if operator not in ('=', '!=', '<', '<=', '>', '>='):
return []
# pylint: disable=sql-injection
self.env.cr.execute(
"""
SELECT loc.id FROM stock_location loc
LEFT OUTER JOIN stock_quant quant ON loc.id = quant.location_id
GROUP BY loc.id
HAVING coalesce(sum(quantity), 0) %s %%s;"""
% operator,
(value,),
)
ids = [row[0] for row in self.env.cr.fetchall()]
return [('id', 'in', ids)]
@api.multi
def _compute_location_amount(self):
self.env.cr.execute(
"""
SELECT location_id, sum(quantity)
FROM stock_quant
WHERE location_id IN %s
GROUP BY location_id;
""",
(tuple(self.ids),),
)
totals = dict(self.env.cr.fetchall())
for location in self:
location.stock_amount = totals.get(location.id, 0)

View File

@@ -0,0 +1,2 @@
* Patrick Tombez <patrick.tombez@camptocamp.com>
* Thierry Ducrest <thierry.ducrest@camptocamp.com>

View File

@@ -0,0 +1,2 @@
Adds a filter for empty stock location.
Adds a new list of stock location with a stock quantity.

View File

@@ -0,0 +1,62 @@
<?xml version="1.0"?>
<odoo>
<record id="view_location_tree3" model="ir.ui.view">
<field name="name">stock.location.tree</field>
<field name="model">stock.location</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<tree string="Stock Location" decoration-info="usage=='view'" decoration-danger="usage=='internal'">
<field name="display_name"/>
<field name="usage"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="stock_amount"/>
</tree>
</field>
</record>
<record id="view_location_search_inherit" model="ir.ui.view">
<field name="name">stock.location.search.inherit</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_search" />
<field name="arch" type="xml">
<field name="location_id" position="after">
<separator/>
<filter name="stock_amount" string="Empty" domain="[('stock_amount', '=', 0)]" help="Empty stock"/>
</field>
</field>
</record>
<record id="view_location_search_empty_2" model="ir.ui.view">
<field name="name">stock.location.search2</field>
<field name="model">stock.location</field>
<field name="arch" type="xml">
<search string="Stock Locations">
<field name="name" string="Stock Locations"/>
<field name="location_id" string="Parent Location"/>
<filter name="in_location" string="Internal" domain="[('usage', '=', 'internal')]" help="Internal Locations"/>
<filter name="customer" string="Customer" domain="[('usage', '=', 'customer')]" help="Customer Locations"/>
<filter name="supplier" string="Vendor" domain="[('usage', '=', 'supplier')]" help="Vendor Locations"/>
<separator />
<filter name="stock_amount" string="Empty" domain="[('stock_amount', '=', 0)]" help="Empty stock"/>
</search>
</field>
</record>
<record id="action_stock_location_empty" model="ir.actions.act_window">
<field name="name">Locations</field>
<field name="res_model">stock.location</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_location_tree3"/>
<field name="search_view_id" ref="view_location_search_empty_2"/>
<field name="context">{'search_default_in_location':1, 'search_default_stock_amount': 1}</field>
</record>
<menuitem
id="stock_location_empty_menu"
name="Empty stock"
parent="stock.menu_stock_inventory_control"
action="action_stock_location_empty"/>
</odoo>