Переглянути джерело

Vista con menú de lineas de inventario de stock

sebas 2 роки тому
коміт
cc5466a86e

+ 17 - 0
README.rst

@@ -0,0 +1,17 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+   :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+   :alt: License: AGPL-3
+
+====================
+Inventory line menus
+====================
+
+Adds new menu, search filters and shortcuts for inventory lines
+
+Credits
+=======
+
+Contributors
+------------
+* Mikel Arregi <mikelarregi@avanzosc.es>
+* Ana Juaristi <anajuaristi@avanzosc.es>

+ 4 - 0
__init__.py

@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import models


+ 25 - 0
__openerp__.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# © Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+{
+    "name": "Inventory lines menu",
+    "version": "8.0.1.0.0",
+    "license": "AGPL-3",
+    "depends": [
+        "stock",
+    ],
+    "author": "OdooMRP team, "
+              "AvanzOSC, "
+              "Odoo Community Association (OCA)",
+    "website": "http://www.odoomrp.com",
+    "contributors": [
+        "Mikel Arregi <mikelarregi@avanzosc.es>",
+        "Ana Juaristi <anajuaristi@avanzosc.es>",
+    ],
+    "category": "Warehouse Management",
+    "summary": "",
+    "data": [
+        "views/stock_view.xml",
+    ],
+    "installable": True,
+}

+ 53 - 0
i18n/es.po

@@ -0,0 +1,53 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* stock_inventory_line_menu
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-01-11 11:45+0000\n"
+"PO-Revision-Date: 2019-01-11 11:45+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_inventory_line_menu
+#: view:stock.inventory.line:stock_inventory_line_menu.inventory_line_search_view
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: stock_inventory_line_menu
+#: model:ir.model,name:stock_inventory_line_menu.model_stock_inventory
+msgid "Inventory"
+msgstr "Inventario"
+
+#. module: stock_inventory_line_menu
+#: view:stock.inventory:stock_inventory_line_menu.stock_inventory_lines_shortcut_form
+msgid "Inventory Lines"
+msgstr "Lineas de Inventario"
+
+#. module: stock_inventory_line_menu
+#: view:stock.inventory.line:stock_inventory_line_menu.inventory_line_search_view
+msgid "Inventory line search"
+msgstr "Buscar Lineas de Inventario"
+
+#. module: stock_inventory_line_menu
+#: model:ir.actions.act_window,name:stock_inventory_line_menu.action_inventory_line
+#: model:ir.ui.menu,name:stock_inventory_line_menu.menu_action_inventory_form
+msgid "Inventory lines"
+msgstr "Lineas de Inventario"
+
+#. module: stock_inventory_line_menu
+#: field:stock.inventory,inventory_lines_count:0
+msgid "Lines count"
+msgstr "Contar lineas"
+
+#. module: stock_inventory_line_menu
+#: view:stock.inventory.line:stock_inventory_line_menu.stock_inventory_line_tree
+msgid "Stock inventory line"
+msgstr "Stock inventory line"
+

+ 4 - 0
models/__init__.py

@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import stock_inventory

BIN
models/__init__.pyc


+ 41 - 0
models/stock_inventory.py

@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from openerp import api, fields, models
+
+
+class StockInventory(models.Model):
+    _inherit = "stock.inventory"
+
+    inventory_lines_count = fields.Integer(
+        string="Lines count", compute="_compute_inventory_lines_count")
+
+    @api.multi
+    def _compute_inventory_lines_count(self):
+        lines_obj = self.env['stock.inventory.line']
+        for inventory in self:
+            inventory.inventory_lines_count = lines_obj.search_count([
+                ('inventory_id', '=', inventory.id)])
+
+    @api.multi
+    def action_open_inventory_lines(self):
+        template_obj = self.env['product.template']
+        result = template_obj._get_act_window_dict(
+            'stock_inventory_line_menu.action_inventory_line')
+        result['domain'] = "[('inventory_id', '=', %d)]" % self.id
+        result['context'] = {'search_default_internal_loc': 1}
+        return result
+
+
+class StockInventoryLine(models.Model):
+    _inherit = "stock.inventory.line"
+
+    date = fields.Datetime(string="Date", related="inventory_id.date",
+                           store=True)
+    adjust_qty = fields.Float(string="Diferencia", compute="_compute_adjust_qty", store=True)
+
+    @api.depends("product_qty", "theoretical_qty", "inventory_id.state")
+    def _compute_adjust_qty(self):
+        for record in self:
+            adjust_qty = record.product_qty - record.theoretical_qty
+            record.adjust_qty = adjust_qty

BIN
models/stock_inventory.pyc


+ 4 - 0
tests/__init__.py

@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from . import test_stock_inventory_line_menu

+ 35 - 0
tests/test_stock_inventory_line_menu.py

@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 Mikel Arregi Etxaniz - AvanzOSC
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+import openerp.tests.common as common
+
+
+class TestStockInventoryLineMenu(common.SavepointCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super(TestStockInventoryLineMenu, cls).setUpClass()
+        cls.product = cls.env['product.product'].create({
+            'name': 'Product to test',
+            'standard_price': 7.0,
+        })
+        cls.stock_move_obj = cls.env['stock.move']
+        cls.inventory = cls.env['stock.inventory'].create({
+            'name': 'Test Inventory',
+            'filter': 'product',
+            'product_id': cls.product.id
+            })
+        cls.quant = cls.env['stock.quant'].create({
+            'name': 'Test Quant',
+            'location_id': cls.inventory.location_id.id,
+            'product_id': cls.product.id,
+            'qty': 2,
+        })
+
+    def test_inventory_lines_open(self):
+        self.inventory.prepare_inventory()
+        self.assertEqual(self.inventory.inventory_lines_count, 1)
+        action_dict = self.inventory.action_open_inventory_lines()
+        self.assertEqual(
+            action_dict.get('domain'), "[('inventory_id', '=', %d)]" %
+                                       self.inventory.id)

+ 78 - 0
views/stock_view.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+    <data>
+        <record model="ir.ui.view" id="inventory_line_search_view">
+            <field name="name">inventory.line.search</field>
+            <field name="model">stock.inventory.line</field>
+            <field name="arch" type="xml">
+                <search string="Inventory line search">
+                    <group expand="0" string="Group By">
+                        <filter name="Inventory" string="Inventario" domain="[]"
+                                context="{'group_by': 'inventory_id'}"/>
+                        <filter name="Date" string="Fecha" domain="[]"
+                                context="{'group_by': 'date'}"/>
+                        <filter name="Location" string="Ubicación" domain="[]"
+                                context="{'group_by': 'location_id'}"/>
+                        <filter name="Product" string="Producto" domain="[]"
+                                context="{'group_by': 'product_id'}"/>
+                    </group>
+                </search>
+            </field>
+        </record>
+
+        <record model="ir.ui.view" id="stock_inventory_line_tree">
+            <field name="name">stock.inventory.line.tree</field>
+            <field name="model">stock.inventory.line</field>
+            <field name="arch" type="xml">
+                <tree string="Stock inventory line">
+                    <field name="date" string="Fecha"/>
+                    <field name="inventory_id" />
+                    <field name="location_id" />
+                    <field name="product_id" />
+                    <field name="package_id" invisible="1"/>
+                    <field name="product_uom_id" />
+                    <field name="product_qty" />
+                    <field name="theoretical_qty" />
+                    <field name="adjust_qty" />
+                    <field name="prod_lot_id" invisible="1"/>
+                    <field name="state" />
+                    <field name="company_id" />
+                </tree>
+            </field>
+        </record>
+
+        <record id="action_inventory_line" model="ir.actions.act_window">
+            <field name="name">Inventory lines</field>
+            <field name="res_model">stock.inventory.line</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">tree</field>
+            <field name="view_id" ref="stock_inventory_line_tree" />
+        </record>
+
+        <menuitem action="action_inventory_line" id="menu_action_inventory_form"
+           parent="stock.menu_stock_inventory_control" sequence="10"
+                  string="Inventory lines"/>
+
+        <record model="ir.ui.view" id="stock_inventory_lines_shortcut_form">
+            <field name="name">stock.inventory.lines.shortcut.form</field>
+            <field name="model">stock.inventory</field>
+            <field name="inherit_id" ref="stock.view_inventory_form" />
+            <field name="arch" type="xml">
+                <div class="oe_title" position="after">
+                    <div class="oe_right oe_button_box" name="button_box">
+                        <button class="oe_stat_button"
+                            name="action_open_inventory_lines"
+                            icon="fa-archive" type="object">
+                            <field string="Inventory Lines"
+                                   name="inventory_lines_count"
+                                   widget="statinfo" />
+                        </button>
+                    </div>
+                </div>
+            </field>
+        </record>
+
+
+
+    </data>
+</openerp>