mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
[12.0][ADD] stock_location_empty
This commit is contained in:
1
stock_location_empty/__init__.py
Normal file
1
stock_location_empty/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import models
|
||||
18
stock_location_empty/__manifest__.py
Normal file
18
stock_location_empty/__manifest__.py
Normal 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,
|
||||
}
|
||||
90
stock_location_empty/i18n/fr.po
Normal file
90
stock_location_empty/i18n/fr.po
Normal 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"
|
||||
90
stock_location_empty/i18n/stock_location_empty.pot
Normal file
90
stock_location_empty/i18n/stock_location_empty.pot
Normal 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 ""
|
||||
|
||||
1
stock_location_empty/models/__init__.py
Normal file
1
stock_location_empty/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import stock_location
|
||||
45
stock_location_empty/models/stock_location.py
Normal file
45
stock_location_empty/models/stock_location.py
Normal 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)
|
||||
2
stock_location_empty/readme/CONTRIBUTORS.rst
Normal file
2
stock_location_empty/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1,2 @@
|
||||
* Patrick Tombez <patrick.tombez@camptocamp.com>
|
||||
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
|
||||
2
stock_location_empty/readme/DESCRIPTION.rst
Normal file
2
stock_location_empty/readme/DESCRIPTION.rst
Normal file
@@ -0,0 +1,2 @@
|
||||
Adds a filter for empty stock location.
|
||||
Adds a new list of stock location with a stock quantity.
|
||||
62
stock_location_empty/views/stock.xml
Normal file
62
stock_location_empty/views/stock.xml
Normal 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>
|
||||
Reference in New Issue
Block a user