From 221dc51fe857cc8a58953ce65d1495e16533064d Mon Sep 17 00:00:00 2001 From: "David Alonso (Solvos)" Date: Mon, 17 Aug 2020 15:35:31 +0200 Subject: [PATCH 01/14] [ADD] maintenance_stock --- maintenance_stock/README.rst | 122 +++++ maintenance_stock/__init__.py | 2 + maintenance_stock/__manifest__.py | 27 + .../data/demo_maintenance_stock.xml | 110 +++++ maintenance_stock/hooks.py | 22 + maintenance_stock/i18n/maintenance_stock.pot | 192 ++++++++ maintenance_stock/models/__init__.py | 6 + .../models/maintenance_equipment.py | 59 +++ .../models/maintenance_request.py | 59 +++ maintenance_stock/models/stock_move.py | 16 + maintenance_stock/models/stock_move_line.py | 16 + maintenance_stock/models/stock_picking.py | 16 + maintenance_stock/models/stock_warehouse.py | 83 ++++ maintenance_stock/readme/CONTRIBUTORS.rst | 1 + maintenance_stock/readme/DESCRIPTION.rst | 2 + maintenance_stock/readme/ROADMAP.rst | 4 + maintenance_stock/readme/USAGE.rst | 36 ++ .../static/description/equipment.png | Bin 0 -> 2975 bytes .../static/description/index.html | 461 ++++++++++++++++++ .../static/description/move-line.png | Bin 0 -> 17930 bytes .../static/description/pick-1.png | Bin 0 -> 9979 bytes .../static/description/pick-2.png | Bin 0 -> 15037 bytes .../static/description/request-1.png | Bin 0 -> 14687 bytes maintenance_stock/static/img/toner.png | Bin 0 -> 93762 bytes maintenance_stock/tests/__init__.py | 1 + .../tests/test_maintenance_stock.py | 148 ++++++ .../views/maintenance_equipment_views.xml | 65 +++ .../views/maintenance_request_views.xml | 57 +++ .../views/stock_move_line_views.xml | 73 +++ maintenance_stock/views/stock_move_views.xml | 75 +++ .../views/stock_picking_views.xml | 51 ++ 31 files changed, 1704 insertions(+) create mode 100644 maintenance_stock/README.rst create mode 100644 maintenance_stock/__init__.py create mode 100644 maintenance_stock/__manifest__.py create mode 100644 maintenance_stock/data/demo_maintenance_stock.xml create mode 100644 maintenance_stock/hooks.py create mode 100644 maintenance_stock/i18n/maintenance_stock.pot create mode 100644 maintenance_stock/models/__init__.py create mode 100644 maintenance_stock/models/maintenance_equipment.py create mode 100644 maintenance_stock/models/maintenance_request.py create mode 100644 maintenance_stock/models/stock_move.py create mode 100644 maintenance_stock/models/stock_move_line.py create mode 100644 maintenance_stock/models/stock_picking.py create mode 100644 maintenance_stock/models/stock_warehouse.py create mode 100644 maintenance_stock/readme/CONTRIBUTORS.rst create mode 100644 maintenance_stock/readme/DESCRIPTION.rst create mode 100644 maintenance_stock/readme/ROADMAP.rst create mode 100644 maintenance_stock/readme/USAGE.rst create mode 100644 maintenance_stock/static/description/equipment.png create mode 100644 maintenance_stock/static/description/index.html create mode 100644 maintenance_stock/static/description/move-line.png create mode 100644 maintenance_stock/static/description/pick-1.png create mode 100644 maintenance_stock/static/description/pick-2.png create mode 100644 maintenance_stock/static/description/request-1.png create mode 100644 maintenance_stock/static/img/toner.png create mode 100644 maintenance_stock/tests/__init__.py create mode 100644 maintenance_stock/tests/test_maintenance_stock.py create mode 100644 maintenance_stock/views/maintenance_equipment_views.xml create mode 100644 maintenance_stock/views/maintenance_request_views.xml create mode 100644 maintenance_stock/views/stock_move_line_views.xml create mode 100644 maintenance_stock/views/stock_move_views.xml create mode 100644 maintenance_stock/views/stock_picking_views.xml diff --git a/maintenance_stock/README.rst b/maintenance_stock/README.rst new file mode 100644 index 000000000..e8e1c81aa --- /dev/null +++ b/maintenance_stock/README.rst @@ -0,0 +1,122 @@ +================= +Maintenance Stock +================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github + :target: https://github.com/OCA/maintenance/tree/12.0/maintenance_stock + :alt: OCA/maintenance +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/maintenance-12-0/maintenance-12-0-maintenance_stock + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/240/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Odoo Maintenance module by allowing +link stock consumptions to maintenance requests. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Once installed, first you should enable consumptions for a certain equipment +and filling a default warehouse for the picking operations: + +.. figure:: https://raw.githubusercontent.com/OCA/maintenance/12.0/maintenance_stock/static/description/equipment.png + :alt: Kanban view + :width: 600 px + +Then, for every mainteance request of this equipment, *Picking List* button +allows us to make consumptions, that will be picking documents with their own +sequence: + +.. figure:: https://raw.githubusercontent.com/OCA/maintenance/12.0/maintenance_stock/static/description/request-1.png + :alt: Kanban view + :width: 600 px + +.. figure:: https://raw.githubusercontent.com/OCA/maintenance/12.0/maintenance_stock/static/description/pick-1.png + :alt: Kanban view + :width: 600 px + +By default, the origin location for this operations will be the stock location +for the default warehouse, and destination a new *Consumptions* location, that +will not compute for stock inventory, like e.g. partner locations: + +.. figure:: https://raw.githubusercontent.com/OCA/maintenance/12.0/maintenance_stock/static/description/move-line.png + :alt: Kanban view + :width: 600 px + +From both request and equipment forms these stock operations and *Product Moves* +are available. + +Return operations are also enabled, and will be linked to the request and +equipment as well: + +.. figure:: https://raw.githubusercontent.com/OCA/maintenance/12.0/maintenance_stock/static/description/pick-2.png + :alt: Kanban view + :width: 600 px + +Known issues / Roadmap +====================== + +* Product standard list. Enable defining product standard lists (at least, + product and quantity per line), and link them with equipments. Then, every + maintenance request could select one of them and automatically fill the + product and quantity list. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Solvos + +Contributors +~~~~~~~~~~~~ + +* David Alonso + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/maintenance_stock/__init__.py b/maintenance_stock/__init__.py new file mode 100644 index 000000000..cc6b6354a --- /dev/null +++ b/maintenance_stock/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import post_init_hook diff --git a/maintenance_stock/__manifest__.py b/maintenance_stock/__manifest__.py new file mode 100644 index 000000000..8a90d3ade --- /dev/null +++ b/maintenance_stock/__manifest__.py @@ -0,0 +1,27 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +{ + "name": "Maintenance Stock", + "summary": "Links maintenance requests to stock", + "author": "Odoo Community Association (OCA), Solvos", + "license": "AGPL-3", + "version": "12.0.1.0.0", + "category": "Warehouse", + "website": "https://github.com/OCA/maintenance", + "depends": [ + "base_maintenance", + "stock", + ], + "data": [ + "views/maintenance_equipment_views.xml", + "views/maintenance_request_views.xml", + "views/stock_move_views.xml", + "views/stock_move_line_views.xml", + "views/stock_picking_views.xml", + ], + "demo": [ + "data/demo_maintenance_stock.xml", + ], + "post_init_hook": "post_init_hook", + 'installable': True, +} diff --git a/maintenance_stock/data/demo_maintenance_stock.xml b/maintenance_stock/data/demo_maintenance_stock.xml new file mode 100644 index 000000000..e62fb61e5 --- /dev/null +++ b/maintenance_stock/data/demo_maintenance_stock.xml @@ -0,0 +1,110 @@ + + + + + + Maintenance Warehouse + + + Main + + + + + + + + TON_1234 + Toner + product + + 100.0 + 70.0 + + + + + + + + Inventory for Toner + product + + + + + + + + 50.0 + + + + + + + + + + + + + + Change toner + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maintenance_stock/hooks.py b/maintenance_stock/hooks.py new file mode 100644 index 000000000..d141dc071 --- /dev/null +++ b/maintenance_stock/hooks.py @@ -0,0 +1,22 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +import logging +from odoo import SUPERUSER_ID, api + + +def post_init_hook(cr, registry): + logging.getLogger('odoo.addons.maintenance_stock').info( + 'Adding pending locations, sequences and pìcking types to ' + 'current warehouses') + + env = api.Environment(cr, SUPERUSER_ID, {}) + PickingType = env["stock.picking.type"] + for warehouse in env["stock.warehouse"].search([]): + warehouse._create_missing_locations(vals={}) + new_vals = warehouse._create_or_update_sequences_and_picking_types() + warehouse.write(new_vals) + # return picking type workaround for existing warehouses + if "cons_type_id" in new_vals: + PickingType.browse(new_vals["cons_type_id"]).write({ + "return_picking_type_id": warehouse.in_type_id.id}) diff --git a/maintenance_stock/i18n/maintenance_stock.pot b/maintenance_stock/i18n/maintenance_stock.pot new file mode 100644 index 000000000..859c7419d --- /dev/null +++ b/maintenance_stock/i18n/maintenance_stock.pot @@ -0,0 +1,192 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-09-16 11:23+0000\n" +"PO-Revision-Date: 2020-09-16 11:23+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: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__allow_consumptions +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search +msgid "Allow Consumptions" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:42 +#: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons +#, python-format +msgid "Consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id +msgid "Consumption Location" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id +msgid "Consumption Type" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:79 +#, python-format +msgid "Consumptions" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "Create a new stock movement" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id +msgid "Default Consumption Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id +msgid "Equipment" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form +msgid "Maintenance Info" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search +msgid "Maintenance Request consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:65 +#, python-format +msgid "Sequence consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_menu +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids +msgid "Stock Picking" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action +msgid "There's no product move yet" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "This menu gives you the full traceability of inventory\n" +" operations on a specific product. You can filter on the product\n" +" to see all the past or future movements for the product." +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +msgid "To" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,name:maintenance_stock.product_toner +#: model:product.template,name:maintenance_stock.product_toner_product_template +msgid "Toner" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,uom_name:maintenance_stock.product_toner +#: model:product.template,uom_name:maintenance_stock.product_toner_product_template +msgid "Unit(s)" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,weight_uom_name:maintenance_stock.product_toner +#: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template +msgid "kg" +msgstr "" + diff --git a/maintenance_stock/models/__init__.py b/maintenance_stock/models/__init__.py new file mode 100644 index 000000000..6de126006 --- /dev/null +++ b/maintenance_stock/models/__init__.py @@ -0,0 +1,6 @@ +from . import maintenance_equipment +from . import maintenance_request +from . import stock_move +from . import stock_move_line +from . import stock_picking +from . import stock_warehouse diff --git a/maintenance_stock/models/maintenance_equipment.py b/maintenance_stock/models/maintenance_equipment.py new file mode 100644 index 000000000..575acbfcd --- /dev/null +++ b/maintenance_stock/models/maintenance_equipment.py @@ -0,0 +1,59 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import api, fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + stock_picking_ids = fields.One2many( + comodel_name="stock.picking", + inverse_name="maintenance_equipment_id", + groups="stock.group_stock_user", + ) + allow_consumptions = fields.Boolean( + groups="stock.group_stock_user", + ) + default_consumption_warehouse_id = fields.Many2one( + string="Default Consumption Warehouse", + comodel_name="stock.warehouse", + groups="stock.group_stock_user", + ) + + @api.onchange("allow_consumptions") + def _onchange_allow_consumptions(self): + if not self.allow_consumptions: + self.default_consumption_warehouse_id = False + + def action_view_stock_picking_ids(self): + self.ensure_one() + action = self.env.ref("stock.action_picking_tree_all").read()[0] + action["domain"] = [("maintenance_equipment_id", "=", self.id)] + action["context"] = { + "show_maintenance_request_id": True, + } + return action + + def action_view_stock_move_ids(self): + self.ensure_one() + action = self.env.ref('stock.stock_move_action').read()[0] + action['domain'] = [('maintenance_equipment_id', '=', self.id)] + return action + + def action_view_stock_move_line_ids(self): + self.ensure_one() + action = self.env.ref('stock.stock_move_line_action').read()[0] + action['domain'] = [('maintenance_equipment_id', '=', self.id)] + + # TODO Grouping by destination allows separating consumptions + # and returns. Look for a better system and remove this + show_groupby_to = len(self.env['stock.move.line'].search( + [('maintenance_equipment_id', '=', self.id)] + ).mapped('location_dest_id')) > 1 + + action['context'] = { + 'search_default_done': 1, + 'search_default_groupby_location_dest_id': show_groupby_to, + 'search_default_groupby_product_id': 1, + } + return action diff --git a/maintenance_stock/models/maintenance_request.py b/maintenance_stock/models/maintenance_request.py new file mode 100644 index 000000000..95a665a53 --- /dev/null +++ b/maintenance_stock/models/maintenance_request.py @@ -0,0 +1,59 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class MaintenanceRequest(models.Model): + _inherit = "maintenance.request" + + allow_consumptions = fields.Boolean( + related="equipment_id.allow_consumptions", + store=True, + groups="stock.group_stock_user", + ) + default_consumption_warehouse_id = fields.Many2one( + related="equipment_id.default_consumption_warehouse_id", + groups="stock.group_stock_user", + ) + stock_picking_ids = fields.One2many( + string="Picking list", + comodel_name="stock.picking", + inverse_name="maintenance_request_id", + groups="stock.group_stock_user", + ) + + def action_view_stock_picking_ids(self): + self.ensure_one() + action = self.env.ref( + 'stock.stock_picking_action_picking_type').read()[0] + action['domain'] = [('maintenance_request_id', '=', self.id)] + action['context'] = { + 'default_picking_type_id': + self.default_consumption_warehouse_id.cons_type_id.id, + 'default_maintenance_request_id': self.id, + } + return action + + def action_view_stock_move_ids(self): + self.ensure_one() + action = self.env.ref('stock.stock_move_action').read()[0] + action['domain'] = [('maintenance_request_id', '=', self.id)] + return action + + def action_view_stock_move_line_ids(self): + self.ensure_one() + action = self.env.ref('stock.stock_move_line_action').read()[0] + action['domain'] = [('maintenance_request_id', '=', self.id)] + + # TODO Grouping by destination allows separating consumptions + # and returns. Look for a better system and remove this + show_groupby_to = len(self.env['stock.move.line'].search( + [('maintenance_request_id', '=', self.id)] + ).mapped('location_dest_id')) > 1 + + action['context'] = { + 'search_default_done': 1, + 'search_default_groupby_location_dest_id': show_groupby_to, + 'search_default_groupby_product_id': 1, + } + return action diff --git a/maintenance_stock/models/stock_move.py b/maintenance_stock/models/stock_move.py new file mode 100644 index 000000000..e074b1057 --- /dev/null +++ b/maintenance_stock/models/stock_move.py @@ -0,0 +1,16 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class StockMove(models.Model): + _inherit = "stock.move" + + maintenance_request_id = fields.Many2one( + comodel_name="maintenance.request", + related="picking_id.maintenance_request_id", + ) + maintenance_equipment_id = fields.Many2one( + comodel_name="maintenance.equipment", + related="picking_id.maintenance_equipment_id", + ) diff --git a/maintenance_stock/models/stock_move_line.py b/maintenance_stock/models/stock_move_line.py new file mode 100644 index 000000000..daedb865b --- /dev/null +++ b/maintenance_stock/models/stock_move_line.py @@ -0,0 +1,16 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class StockMoveLine(models.Model): + _inherit = "stock.move.line" + + maintenance_request_id = fields.Many2one( + comodel_name="maintenance.request", + related="picking_id.maintenance_request_id", + ) + maintenance_equipment_id = fields.Many2one( + comodel_name="maintenance.equipment", + related="picking_id.maintenance_equipment_id", + ) diff --git a/maintenance_stock/models/stock_picking.py b/maintenance_stock/models/stock_picking.py new file mode 100644 index 000000000..201c7602e --- /dev/null +++ b/maintenance_stock/models/stock_picking.py @@ -0,0 +1,16 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + maintenance_request_id = fields.Many2one( + comodel_name="maintenance.request", + index=True, + ) + maintenance_equipment_id = fields.Many2one( + comodel_name="maintenance.equipment", + related="maintenance_request_id.equipment_id", + ) diff --git a/maintenance_stock/models/stock_warehouse.py b/maintenance_stock/models/stock_warehouse.py new file mode 100644 index 000000000..03fe4f90b --- /dev/null +++ b/maintenance_stock/models/stock_warehouse.py @@ -0,0 +1,83 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models, _ + + +class StockWarehouse(models.Model): + _inherit = "stock.warehouse" + + wh_cons_loc_id = fields.Many2one( + 'stock.location', + 'Consumption Location', + domain=[('usage', '=', 'inventory')]) + cons_type_id = fields.Many2one("stock.picking.type", "Consumption Type") + + def _create_or_update_sequences_and_picking_types(self): + warehouse_data = \ + super()._create_or_update_sequences_and_picking_types() + PickingType = self.env['stock.picking.type'] + + # TODO when is called for an existing warehouse (e.g. during the + # module installation in_type_id is not accesible). Temporary + # solved with a hook + if 'cons_type_id' in warehouse_data: + PickingType.browse(warehouse_data['cons_type_id']).write({ + 'return_picking_type_id': + warehouse_data.get('in_type_id', False), + }) + return warehouse_data + + def _update_name_and_code(self, new_name=False, new_code=False): + for warehouse in self: + sequence_data = warehouse._get_sequence_values() + warehouse.cons_type_id.sequence_id.write( + sequence_data['cons_type_id']) + + def _get_picking_type_create_values(self, max_sequence): + data, max_sequence_new = \ + super()._get_picking_type_create_values(max_sequence) + return { + **data, + 'cons_type_id': { + 'name': _('Consumption'), + 'code': 'outgoing', + 'use_create_lots': False, + 'use_existing_lots': True, + 'default_location_src_id': self.lot_stock_id.id, + 'default_location_dest_id': self.wh_cons_loc_id.id, + 'sequence': max_sequence_new, + 'barcode': self.code.replace(" ", "").upper() + "-CONS", + } + }, max_sequence_new + 1 + + def _get_picking_type_update_values(self): + data = super()._get_picking_type_update_values() + return { + **data, + "cons_type_id": {} + } + + def _get_sequence_values(self): + data = super()._get_sequence_values() + return { + **data, + 'cons_type_id': { + 'name': self.name + ' ' + _('Sequence consumption'), + 'prefix': self.code + '/CONS/', 'padding': 5, + 'company_id': self.company_id.id, + }, + } + + def _get_locations_values(self, vals): + sub_locations = super()._get_locations_values(vals) + code = vals.get('code') or self.code + code = code.replace(' ', '').upper() + company_id = vals.get('company_id', self.company_id.id) + return { + **sub_locations, + 'wh_cons_loc_id': { + 'name': _('Consumptions'), + 'usage': 'inventory', + 'barcode': self._valid_barcode(code + '-CONS', company_id) + }, + } diff --git a/maintenance_stock/readme/CONTRIBUTORS.rst b/maintenance_stock/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..423455dfe --- /dev/null +++ b/maintenance_stock/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* David Alonso diff --git a/maintenance_stock/readme/DESCRIPTION.rst b/maintenance_stock/readme/DESCRIPTION.rst new file mode 100644 index 000000000..2b7b355bf --- /dev/null +++ b/maintenance_stock/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of Odoo Maintenance module by allowing +link stock consumptions to maintenance requests. diff --git a/maintenance_stock/readme/ROADMAP.rst b/maintenance_stock/readme/ROADMAP.rst new file mode 100644 index 000000000..b36d2ff93 --- /dev/null +++ b/maintenance_stock/readme/ROADMAP.rst @@ -0,0 +1,4 @@ +* Product standard list. Enable defining product standard lists (at least, + product and quantity per line), and link them with equipments. Then, every + maintenance request could select one of them and automatically fill the + product and quantity list. \ No newline at end of file diff --git a/maintenance_stock/readme/USAGE.rst b/maintenance_stock/readme/USAGE.rst new file mode 100644 index 000000000..5f624f5a4 --- /dev/null +++ b/maintenance_stock/readme/USAGE.rst @@ -0,0 +1,36 @@ +Once installed, first you should enable consumptions for a certain equipment +and filling a default warehouse for the picking operations: + +.. figure:: ../static/description/equipment.png + :alt: Kanban view + :width: 600 px + +Then, for every mainteance request of this equipment, *Picking List* button +allows us to make consumptions, that will be picking documents with their own +sequence: + +.. figure:: ../static/description/request-1.png + :alt: Kanban view + :width: 600 px + +.. figure:: ../static/description/pick-1.png + :alt: Kanban view + :width: 600 px + +By default, the origin location for this operations will be the stock location +for the default warehouse, and destination a new *Consumptions* location, that +will not compute for stock inventory, like e.g. partner locations: + +.. figure:: ../static/description/move-line.png + :alt: Kanban view + :width: 600 px + +From both request and equipment forms these stock operations and *Product Moves* +are available. + +Return operations are also enabled, and will be linked to the request and +equipment as well: + +.. figure:: ../static/description/pick-2.png + :alt: Kanban view + :width: 600 px diff --git a/maintenance_stock/static/description/equipment.png b/maintenance_stock/static/description/equipment.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3358e0faa0b9f8ca125904956480a151e6ce0f GIT binary patch literal 2975 zcmb7Gc|6ox8y`Yhb8SHWOR=Y9Wq-}}co&w0*sKF|4{=Q+|j4YGE| zf?GjHANL(Lw-r{N)dLfsddZ<=Db~PIRI7;B4wZhn-w&JhmYc<+K&yQ9Qyjcn?+~e;D&w>px$(J|1bw9uH()qqY-3uX>bGv z*r#c1Q*)l<_<6?LW7VhSm66B&5Onl4Zq&~AE#4e;$1JyNmwp0OGzY4HY|^$Oa-=SK z$2A|V>Zz4qT7|Xoe8tlC>hIh*bM_5#ZUmD{whN@R@1SE)luM4f;BX5ctc1pBfnLhJ|v`otfS%?3HUxvasJ;gD~vM z+Jf4Hn9j5#9W!c2guHGZN@;4FT+4`pQDDznHCimT9qM0_o`%5}G^n3U2y8{J?@ZLz zf?3fLb?YH&uNzc92?%^26mG#`O6shfzS9b15Bw>SdJz>kTs$e9BV?!Ky3e}R)}z3d zJ3ZV(v3zrBy8t=C(no!wZMpN2qPaUfCX+XrM#azUERgS!Y;Nx|W!oJZr)PtkORHDqHMR8(H-Cm7{}iH5U}*$O%=)#t6jeN?zi6 z+>xErk*k}p)KR&h0r3D$dmPjY_6f7O^~a57~wxYrCptx0R1@$_sO(tCQDBVngZ zJyEa^_?YVGQ=1ot0LydVj_^;L;Uc-&ZwYHSBTxa(p}~vQbxemUcs$p@&oNgL*@;fe zfmO_b!eNQ?_})xzUn>bLGm1@R-vZ9@CZ|1=wi6H zQc2XUrL&lc>y0W1*7l|kK5Y9GKSA5P9+X(gX?eO(5h)gb_kCNfFKR4tdu^ie8vxrs zZ8jnduURyZsOcy4LdKk4w}T@9r%jhyJ-r@X2F+m?Dt}kVCFyL^`Y3OibLUKC5U@`> z!{~*7J0c3wyMd1??&mOheQbm46~(o_jBL-{?2o7CUto>aSO zo=$2;^={|YnJ%y*&2qD>F_3B|ZUPYn?X~9Qla#-hY^w$Dj0UGlMrupnmUT=ZJgbSL zmmfY3bwewJ!I}{R)51VT`qop~I=yItq1{w#xb(lju`NSF#+?c;eAGr7Hbc zXz|{ChdoS0j*#`hyCAhyeH#ra4Hs@S2jarNzHf0l7KAYD`)+$Tq65Psz=Yb)xDXP+ z!gJQGLyOQzh1s1B~q^IuJh zu%cYPEL@3Ml#yYd>*#7!2oE^qTpmAJ7QeoUL)((W7)uupXg=P!UgF|Cj!BCKP^39rKAUPXAkgVH}lGS zI4N|-5;qpRRw&^_O6=EzRg+?!^zXc#qq&@eBgzQ*LEF9A$FU)qq2Sbfpmbo`v<^uD zI${!FcP~P2zJLxf!wNC8W~p}R&v+&K?-&;tUbvC^^|yF>S7MnS0S?$7A1=7ExOK9+ zI3oXh5zUXJI47GzHB%(C5$$fw-88HoDS1&buof&Cq7rC7@d-Jrd zym8FMId(V1Z@XVFv=PFA16Ci?QrhXAGo-bH+bE|uJ0bPLo3xV-KWCroPcnKj(m8vH zmsnpOuIH{Mnj@A!LS?yTSdF-Tic?!;s%gm18abk6GrW};A)z{sCh-sNDlea2t+obc z8*u2Z@P?YzaYXACW5#zzyB82bb|jpda9r+M5Unz4#xkd*+&{0>07$oUb3N$;E9%j z!->qD@e9IQ{H0HdWT9J9g7@V=b4$!blp>R_M(n;{F{iBma9^}=?Y``bUBi>u%3mR$ zA?r-nj}fDvpa0W}psc`=$?qyJLa%gd@5sj9B30#SutkD0nqs%G(!QkY*MsFiRn z-hlbcm3Z5>62ZBWBF+=!N5@CuwscCCF_fF}I=fDvtD!67q@`nZ%D_H1IV{u9J~@SL3Z+|(Q8#X_&Ie%2%UlNX zMEQj9a$MN`?5VTevmu#N)UWLcj^|b+7A(oyf(3r{U&Zj|-K85#50LJ!7%jqhesVtq zCxD|1{|{pM?>`a*D&w + + + + + +Maintenance Stock + + + +
+

Maintenance Stock

+ + +

Beta License: AGPL-3 OCA/maintenance Translate me on Weblate Try me on Runbot

+

This module extends the functionality of Odoo Maintenance module by allowing +link stock consumptions to maintenance requests.

+

Table of contents

+ +
+

Usage

+

Once installed, first you should enable consumptions for a certain equipment +and filling a default warehouse for the picking operations:

+
+Kanban view +
+

Then, for every mainteance request of this equipment, Picking List button +allows us to make consumptions, that will be picking documents with their own +sequence:

+
+Kanban view +
+
+Kanban view +
+

By default, the origin location for this operations will be the stock location +for the default warehouse, and destination a new Consumptions location, that +will not compute for stock inventory, like e.g. partner locations:

+
+Kanban view +
+

From both request and equipment forms these stock operations and Product Moves +are available.

+

Return operations are also enabled, and will be linked to the request and +equipment as well:

+
+Kanban view +
+
+
+

Known issues / Roadmap

+
    +
  • Product standard list. Enable defining product standard lists (at least, +product and quantity per line), and link them with equipments. Then, every +maintenance request could select one of them and automatically fill the +product and quantity list.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Solvos
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/maintenance project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/maintenance_stock/static/description/move-line.png b/maintenance_stock/static/description/move-line.png new file mode 100644 index 0000000000000000000000000000000000000000..cf43e23dfce371590ae002c7cffcdf961dfdfa66 GIT binary patch literal 17930 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 aeGRdoO#cI5{=2TJ_k4{d2lDU&Y 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 literal 0 HcmV?d00001 diff --git a/maintenance_stock/static/description/request-1.png b/maintenance_stock/static/description/request-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcc847228d948a3e072782fb77267a195616a62 GIT binary patch literal 14687 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 N|E}Jha`ney{|(>-&?5i< literal 0 HcmV?d00001 diff --git a/maintenance_stock/static/img/toner.png b/maintenance_stock/static/img/toner.png new file mode 100644 index 0000000000000000000000000000000000000000..0a545967f912daa885dbe90f2b075a6cffa2ece0 GIT binary patch literal 93762 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%0A8!u-PJt*wh2o0F4M%mpzxNs`>aVk~HEId_5pzJi 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 z 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 literal 0 HcmV?d00001 diff --git a/maintenance_stock/tests/__init__.py b/maintenance_stock/tests/__init__.py new file mode 100644 index 000000000..5f7397844 --- /dev/null +++ b/maintenance_stock/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_stock diff --git a/maintenance_stock/tests/test_maintenance_stock.py b/maintenance_stock/tests/test_maintenance_stock.py new file mode 100644 index 000000000..d6d3b767e --- /dev/null +++ b/maintenance_stock/tests/test_maintenance_stock.py @@ -0,0 +1,148 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +import odoo.tests.common as test_common + + +class TestMaintenanceStock(test_common.TransactionCase): + + def setUp(self): + super().setUp() + + self.maintenance_warehouse = self.env["stock.warehouse"].create({ + "name": "Test warehouse", + "code": "TEST", + }) + + self.product1 = self.env["product.product"].create({ + "default_code": "TESTOPROD", + "name": "Test prod", + "type": "product", + "uom_id": self.env.ref("uom.product_uom_unit").id, + "uom_po_id": self.env.ref("uom.product_uom_unit").id, + }) + + self.equipment_1 = self.env["maintenance.equipment"].create({ + "name": 'Test equipment', + "allow_consumptions": True, + "default_consumption_warehouse_id": self.maintenance_warehouse.id, + }) + self.request_1 = self.env["maintenance.request"].create({ + 'name': 'Test request', + "user_id": self.env.ref("base.user_demo").id, + "owner_user_id": self.env.ref("base.user_admin").id, + "equipment_id": self.equipment_1.id, + "stage_id": self.env.ref("maintenance.stage_1").id, + "maintenance_team_id": + self.env.ref("maintenance.equipment_team_maintenance").id, + }) + + def test_warehouse(self): + self.assertTrue(self.maintenance_warehouse.wh_cons_loc_id) + + self.assertTrue(self.maintenance_warehouse.cons_type_id) + self.assertEqual( + self.maintenance_warehouse.cons_type_id.code, "outgoing") + self.assertEqual( + self.maintenance_warehouse.cons_type_id.default_location_src_id, + self.maintenance_warehouse.lot_stock_id) + self.assertEqual( + self.maintenance_warehouse.cons_type_id.default_location_dest_id, + self.maintenance_warehouse.wh_cons_loc_id) + self.assertEqual( + self.maintenance_warehouse.cons_type_id.barcode, + self.maintenance_warehouse.code.replace(" ", "").upper() + "-CONS") + self.assertEqual( + self.maintenance_warehouse.cons_type_id.sequence_id.prefix, + self.maintenance_warehouse.code + '/CONS/') + self.assertEqual( + self.maintenance_warehouse.cons_type_id.return_picking_type_id, + self.maintenance_warehouse.in_type_id) + + def test_equipment(self): + self.assertTrue(self.equipment_1.default_consumption_warehouse_id) + self.equipment_1.allow_consumptions = False + self.equipment_1._onchange_allow_consumptions() + self.assertFalse(self.equipment_1.default_consumption_warehouse_id) + + action1 = self.equipment_1.action_view_stock_picking_ids() + self.assertEqual(action1["domain"][0][2], self.equipment_1.id) + self.assertTrue(action1["context"]["show_maintenance_request_id"]) + + action2 = self.equipment_1.action_view_stock_move_ids() + self.assertEqual(action2["domain"][0][2], self.equipment_1.id) + + action3 = self.equipment_1.action_view_stock_move_line_ids() + self.assertEqual(action3["domain"][0][2], self.equipment_1.id) + self.assertFalse( + action3["context"]["search_default_groupby_location_dest_id"]) + + def test_request(self): + action1 = self.request_1.action_view_stock_picking_ids() + self.assertEqual(action1["domain"][0][2], self.request_1.id) + self.assertEqual( + action1["context"]["default_picking_type_id"], + self.request_1.default_consumption_warehouse_id.cons_type_id.id) + self.assertEqual( + action1["context"]["default_maintenance_request_id"], + self.request_1.id) + + action2 = self.request_1.action_view_stock_move_ids() + self.assertEqual(action2["domain"][0][2], self.request_1.id) + + action3 = self.request_1.action_view_stock_move_line_ids() + self.assertEqual(action3["domain"][0][2], self.request_1.id) + self.assertFalse( + action3["context"]["search_default_groupby_location_dest_id"]) + + def test_picking(self): + self.assertEqual(len(self.request_1.stock_picking_ids), 0) + self.assertEqual(len(self.equipment_1.stock_picking_ids), 0) + + qty_done = 5.0 + picking = self.env["stock.picking"].create({ + "maintenance_request_id": self.request_1.id, + "picking_type_id": self.maintenance_warehouse.cons_type_id.id, + "location_id": self.maintenance_warehouse.lot_stock_id.id, + "location_dest_id": self.maintenance_warehouse.wh_cons_loc_id.id, + "move_lines": [(0, 0, { + "name": "Test move", + "product_id": self.product1.id, + "product_uom": self.env.ref("uom.product_uom_unit").id, + "product_uom_qty": 5.0, + "picking_type_id": self.maintenance_warehouse.cons_type_id.id, + "location_id": self.maintenance_warehouse.lot_stock_id.id, + "location_dest_id": + self.maintenance_warehouse.wh_cons_loc_id.id, + "move_line_ids": [(0, 0, { + "product_id": self.product1.id, + "product_uom_id": self.env.ref("uom.product_uom_unit").id, + "qty_done": qty_done, + "location_id": self.maintenance_warehouse.lot_stock_id.id, + "location_dest_id": + self.maintenance_warehouse.wh_cons_loc_id.id, + })] + })] + }) + + self.assertEqual(len(self.request_1.stock_picking_ids), 1) + self.assertEqual(len(self.equipment_1.stock_picking_ids), 1) + + stock_quant_obj = self.env["stock.quant"] + domain_from = [ + ("product_id", "=", self.product1.id), + ("location_id", "=", self.maintenance_warehouse.lot_stock_id.id) + ] + domain_to = [ + ("product_id", "=", self.product1.id), + ("location_id", "=", self.maintenance_warehouse.wh_cons_loc_id.id) + ] + self.assertEqual(stock_quant_obj.search(domain_from).quantity, 0) + self.assertEqual(stock_quant_obj.search(domain_to).quantity, 0) + + picking.action_confirm() + picking.action_done() + + self.assertEqual( + stock_quant_obj.search(domain_from).quantity, -qty_done) + self.assertEqual( + stock_quant_obj.search(domain_to).quantity, qty_done) diff --git a/maintenance_stock/views/maintenance_equipment_views.xml b/maintenance_stock/views/maintenance_equipment_views.xml new file mode 100644 index 000000000..c78b947bc --- /dev/null +++ b/maintenance_stock/views/maintenance_equipment_views.xml @@ -0,0 +1,65 @@ + + + + + maintenance.equipment + + + + + + + + + + + + maintenance.equipment + + + + + + + + + + maintenance.equipment + + + + + + + + + + + + + + + + diff --git a/maintenance_stock/views/maintenance_request_views.xml b/maintenance_stock/views/maintenance_request_views.xml new file mode 100644 index 000000000..f28d2a515 --- /dev/null +++ b/maintenance_stock/views/maintenance_request_views.xml @@ -0,0 +1,57 @@ + + + + + maintenance.request + + + + + + + + + + + + maintenance.request + + + + + + + + + + maintenance.request + + + + + + + + + + + + + diff --git a/maintenance_stock/views/stock_move_line_views.xml b/maintenance_stock/views/stock_move_line_views.xml new file mode 100644 index 000000000..b0aab8ad8 --- /dev/null +++ b/maintenance_stock/views/stock_move_line_views.xml @@ -0,0 +1,73 @@ + + + + + stock.move.line + + + + + + + + + + + + + + + + + + stock.move.line + + + + + + + + + + stock.move.line + + + + + + + + + + + Product Moves + stock.move.line + ir.actions.act_window + form + tree,kanban,pivot,form + + [('maintenance_request_id', '!=', False)] + { + 'search_default_done': 1, + 'search_default_groupby_product_id': 1, + 'show_maintenance_request_id': True, + } + +

+ There's no product move yet +

+
+
+ + + +
diff --git a/maintenance_stock/views/stock_move_views.xml b/maintenance_stock/views/stock_move_views.xml new file mode 100644 index 000000000..48b95aeb2 --- /dev/null +++ b/maintenance_stock/views/stock_move_views.xml @@ -0,0 +1,75 @@ + + + + + stock.move + + + + + + + + + + + + + + + stock.move + + + + + + + + + + stock.move + + + + + + + + + + + Stock Moves + stock.move + ir.actions.act_window + form + + + [('maintenance_request_id', '!=', False)] + { + 'search_default_done': 1, + 'search_default_groupby_location_id': 1, + 'show_maintenance_request_id': True, + } + +

+ Create a new stock movement +

+ This menu gives you the full traceability of inventory + operations on a specific product. You can filter on the product + to see all the past or future movements for the product. +

+
+
+ + + +
diff --git a/maintenance_stock/views/stock_picking_views.xml b/maintenance_stock/views/stock_picking_views.xml new file mode 100644 index 000000000..7ab63a3ff --- /dev/null +++ b/maintenance_stock/views/stock_picking_views.xml @@ -0,0 +1,51 @@ + + + + + stock.picking + + + + + + + + + + + + + + + stock.picking + + + + + + + + + + stock.picking + + + + + + + + + + + + + + + + + + From 654a31f4957e61bc5be5afe2a3c8093629127469 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 22 Sep 2020 15:43:49 +0000 Subject: [PATCH 02/14] [UPD] Update maintenance_stock.pot --- maintenance_stock/i18n/maintenance_stock.pot | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/maintenance_stock/i18n/maintenance_stock.pot b/maintenance_stock/i18n/maintenance_stock.pot index 859c7419d..64c7547ae 100644 --- a/maintenance_stock/i18n/maintenance_stock.pot +++ b/maintenance_stock/i18n/maintenance_stock.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-16 11:23+0000\n" -"PO-Revision-Date: 2020-09-16 11:23+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,19 +14,19 @@ msgstr "" "Plural-Forms: \n" #. module: maintenance_stock -#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Picking list" msgstr "" #. module: maintenance_stock -#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Product Moves" msgstr "" #. module: maintenance_stock -#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Stock Moves" msgstr "" From cdb71af33067ff0a1d0342f9fc7162d7531ce907 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 22 Sep 2020 16:01:31 +0000 Subject: [PATCH 03/14] [ADD] icon.png --- maintenance_stock/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 maintenance_stock/static/description/icon.png diff --git a/maintenance_stock/static/description/icon.png b/maintenance_stock/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From d3adf58df2beeb17f23d646951065db51daed292 Mon Sep 17 00:00:00 2001 From: "David Alonso (Solvos)" Date: Fri, 2 Oct 2020 13:19:01 +0000 Subject: [PATCH 04/14] Added translation using Weblate (Spanish) --- maintenance_stock/i18n/es.po | 190 +++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 maintenance_stock/i18n/es.po diff --git a/maintenance_stock/i18n/es.po b/maintenance_stock/i18n/es.po new file mode 100644 index 000000000..e2b4109d2 --- /dev/null +++ b/maintenance_stock/i18n/es.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__allow_consumptions +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search +msgid "Allow Consumptions" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:42 +#: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons +#, python-format +msgid "Consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id +msgid "Consumption Location" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id +msgid "Consumption Type" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:79 +#, python-format +msgid "Consumptions" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "Create a new stock movement" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id +msgid "Default Consumption Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id +msgid "Equipment" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form +msgid "Maintenance Info" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search +msgid "Maintenance Request consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:65 +#, python-format +msgid "Sequence consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_menu +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids +msgid "Stock Picking" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action +msgid "There's no product move yet" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "This menu gives you the full traceability of inventory\n" +" operations on a specific product. You can filter on the product\n" +" to see all the past or future movements for the product." +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +msgid "To" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,name:maintenance_stock.product_toner +#: model:product.template,name:maintenance_stock.product_toner_product_template +msgid "Toner" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,uom_name:maintenance_stock.product_toner +#: model:product.template,uom_name:maintenance_stock.product_toner_product_template +msgid "Unit(s)" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,weight_uom_name:maintenance_stock.product_toner +#: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template +msgid "kg" +msgstr "" From 11babdc679990ff636456d71dc7a5dfa5f5e6122 Mon Sep 17 00:00:00 2001 From: "David Alonso (Solvos)" Date: Fri, 2 Oct 2020 13:21:03 +0000 Subject: [PATCH 05/14] Translated using Weblate (Spanish) Currently translated at 96.7% (29 of 30 strings) Translation: maintenance-12.0/maintenance-12.0-maintenance_stock Translate-URL: https://translation.odoo-community.org/projects/maintenance-12-0/maintenance-12-0-maintenance_stock/es/ --- maintenance_stock/i18n/es.po | 62 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/maintenance_stock/i18n/es.po b/maintenance_stock/i18n/es.po index e2b4109d2..4f9a0ad32 100644 --- a/maintenance_stock/i18n/es.po +++ b/maintenance_stock/i18n/es.po @@ -6,31 +6,33 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-10-02 16:16+0000\n" +"Last-Translator: David Alonso (Solvos) \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Picking list" -msgstr "" +msgstr "Lista de albaranes" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Product Moves" -msgstr "" +msgstr "Movimientos de producto" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Stock Moves" -msgstr "" +msgstr "Movimientos de stock" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions @@ -38,58 +40,58 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search msgid "Allow Consumptions" -msgstr "" +msgstr "Permitir consumos" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:42 #: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons #, python-format msgid "Consumption" -msgstr "" +msgstr "Consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id msgid "Consumption Location" -msgstr "" +msgstr "Ubicación de consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id msgid "Consumption Type" -msgstr "" +msgstr "Tipo de consumo" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:79 #, python-format msgid "Consumptions" -msgstr "" +msgstr "Consumos" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action msgid "Create a new stock movement" -msgstr "" +msgstr "Crear nuevo movimiento de stock" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id msgid "Default Consumption Warehouse" -msgstr "" +msgstr "Almacén de consumo por defecto" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id msgid "Equipment" -msgstr "" +msgstr "Equipo" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_equipment msgid "Maintenance Equipment" -msgstr "" +msgstr "Equipo de mantenimiento" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form msgid "Maintenance Info" -msgstr "" +msgstr "Información de Mantenimiento" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_request @@ -97,57 +99,57 @@ msgstr "" #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id msgid "Maintenance Request" -msgstr "" +msgstr "Petición de mantenimiento" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search msgid "Maintenance Request consumption" -msgstr "" +msgstr "Consumo de la petición de mantenimiento" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids msgid "Picking list" -msgstr "" +msgstr "Lista de albaranes" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu msgid "Product Moves" -msgstr "" +msgstr "Movimientos de producto" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move_line msgid "Product Moves (Stock Move Line)" -msgstr "" +msgstr "Movimientos de producto (línea de movimiento de stock)" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:65 #, python-format msgid "Sequence consumption" -msgstr "" +msgstr "Secuencia del consumo" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Movimiento de stock" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_menu msgid "Stock Moves" -msgstr "" +msgstr "Movimientos de stock" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids msgid "Stock Picking" -msgstr "" +msgstr "Recolección de stock" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action msgid "There's no product move yet" -msgstr "" +msgstr "Aún no hay ningún movimiento de producto" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action @@ -159,32 +161,32 @@ msgstr "" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search msgid "To" -msgstr "" +msgstr "Destino" #. module: maintenance_stock #: model:product.product,name:maintenance_stock.product_toner #: model:product.template,name:maintenance_stock.product_toner_product_template msgid "Toner" -msgstr "" +msgstr "Tóner" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_picking msgid "Transfer" -msgstr "" +msgstr "Trasferencia" #. module: maintenance_stock #: model:product.product,uom_name:maintenance_stock.product_toner #: model:product.template,uom_name:maintenance_stock.product_toner_product_template msgid "Unit(s)" -msgstr "" +msgstr "Unidad(es)" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_warehouse msgid "Warehouse" -msgstr "" +msgstr "Almacén" #. module: maintenance_stock #: model:product.product,weight_uom_name:maintenance_stock.product_toner #: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template msgid "kg" -msgstr "" +msgstr "kg" From 7b81b045f098e81592ee06e884f6f01def687f1b Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Mon, 15 Mar 2021 04:42:05 +0000 Subject: [PATCH 06/14] Added translation using Weblate (Portuguese (Brazil)) --- maintenance_stock/i18n/pt_BR.po | 190 ++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 maintenance_stock/i18n/pt_BR.po diff --git a/maintenance_stock/i18n/pt_BR.po b/maintenance_stock/i18n/pt_BR.po new file mode 100644 index 000000000..487aa8038 --- /dev/null +++ b/maintenance_stock/i18n/pt_BR.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__allow_consumptions +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search +msgid "Allow Consumptions" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:42 +#: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons +#, python-format +msgid "Consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id +msgid "Consumption Location" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id +msgid "Consumption Type" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:79 +#, python-format +msgid "Consumptions" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "Create a new stock movement" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id +msgid "Default Consumption Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id +msgid "Equipment" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form +msgid "Maintenance Info" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search +msgid "Maintenance Request consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:65 +#, python-format +msgid "Sequence consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_menu +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids +msgid "Stock Picking" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action +msgid "There's no product move yet" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "This menu gives you the full traceability of inventory\n" +" operations on a specific product. You can filter on the product\n" +" to see all the past or future movements for the product." +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +msgid "To" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,name:maintenance_stock.product_toner +#: model:product.template,name:maintenance_stock.product_toner_product_template +msgid "Toner" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,uom_name:maintenance_stock.product_toner +#: model:product.template,uom_name:maintenance_stock.product_toner_product_template +msgid "Unit(s)" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,weight_uom_name:maintenance_stock.product_toner +#: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template +msgid "kg" +msgstr "" From 963d1effcafd2c738e57bf44abe1f47f6c2e2517 Mon Sep 17 00:00:00 2001 From: Marcel Savegnago Date: Mon, 15 Mar 2021 04:53:01 +0000 Subject: [PATCH 07/14] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (30 of 30 strings) Translation: maintenance-12.0/maintenance-12.0-maintenance_stock Translate-URL: https://translation.odoo-community.org/projects/maintenance-12-0/maintenance-12-0-maintenance_stock/pt_BR/ --- maintenance_stock/i18n/pt_BR.po | 67 ++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/maintenance_stock/i18n/pt_BR.po b/maintenance_stock/i18n/pt_BR.po index 487aa8038..cc0d56062 100644 --- a/maintenance_stock/i18n/pt_BR.po +++ b/maintenance_stock/i18n/pt_BR.po @@ -6,31 +6,33 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-03-15 06:45+0000\n" +"Last-Translator: Marcel Savegnago \n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Picking list" -msgstr "" +msgstr "Lista de escolha" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Product Moves" -msgstr "" +msgstr "Movimentos do Produto" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Stock Moves" -msgstr "" +msgstr "Movimentos de Ações" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions @@ -38,58 +40,58 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search msgid "Allow Consumptions" -msgstr "" +msgstr "Permitir Consumos" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:42 #: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons #, python-format msgid "Consumption" -msgstr "" +msgstr "Consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id msgid "Consumption Location" -msgstr "" +msgstr "Localização de Consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id msgid "Consumption Type" -msgstr "" +msgstr "Tipo de Consumo" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:79 #, python-format msgid "Consumptions" -msgstr "" +msgstr "Consumos" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action msgid "Create a new stock movement" -msgstr "" +msgstr "Crie um novo movimento de ações" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id msgid "Default Consumption Warehouse" -msgstr "" +msgstr "Armazém de Consumo Padrão" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id msgid "Equipment" -msgstr "" +msgstr "Equipamento" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_equipment msgid "Maintenance Equipment" -msgstr "" +msgstr "Equipamento de Manutenção" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form msgid "Maintenance Info" -msgstr "" +msgstr "Informações de Manutenção" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_request @@ -97,57 +99,57 @@ msgstr "" #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id msgid "Maintenance Request" -msgstr "" +msgstr "Requisição de Manutenção" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search msgid "Maintenance Request consumption" -msgstr "" +msgstr "Consumo de Requisição de Manutenção" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids msgid "Picking list" -msgstr "" +msgstr "Lista de separação" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu msgid "Product Moves" -msgstr "" +msgstr "Movimentos do Produto" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move_line msgid "Product Moves (Stock Move Line)" -msgstr "" +msgstr "Movimentos do Produto (Linha do Movimento do Estoque)" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:65 #, python-format msgid "Sequence consumption" -msgstr "" +msgstr "Consumo de sequência" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Movimento de Estoque" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_menu msgid "Stock Moves" -msgstr "" +msgstr "Movimentos de Estoque" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids msgid "Stock Picking" -msgstr "" +msgstr "Separação de Estoque" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action msgid "There's no product move yet" -msgstr "" +msgstr "Ainda não há nenhum movimento do produto" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action @@ -155,36 +157,41 @@ msgid "This menu gives you the full traceability of inventory\n" " operations on a specific product. You can filter on the product\n" " to see all the past or future movements for the product." msgstr "" +"Este menu oferece a você a rastreabilidade completa de operações\n" +" de inventário em um produto específico. Você pode filtrar o " +"produto\n" +" para ver todos as movimentações passadas ou futuras para o " +"produto." #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search msgid "To" -msgstr "" +msgstr "Para" #. module: maintenance_stock #: model:product.product,name:maintenance_stock.product_toner #: model:product.template,name:maintenance_stock.product_toner_product_template msgid "Toner" -msgstr "" +msgstr "Toner" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_picking msgid "Transfer" -msgstr "" +msgstr "Transferir" #. module: maintenance_stock #: model:product.product,uom_name:maintenance_stock.product_toner #: model:product.template,uom_name:maintenance_stock.product_toner_product_template msgid "Unit(s)" -msgstr "" +msgstr "UN" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_warehouse msgid "Warehouse" -msgstr "" +msgstr "Armazém" #. module: maintenance_stock #: model:product.product,weight_uom_name:maintenance_stock.product_toner #: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template msgid "kg" -msgstr "" +msgstr "kg" From 1a54a07c5f40fa57cd9716b4c7347ab3656813ab Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 23 Jul 2021 13:35:13 +0000 Subject: [PATCH 08/14] Added translation using Weblate (Italian) --- maintenance_stock/i18n/it.po | 190 +++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 maintenance_stock/i18n/it.po diff --git a/maintenance_stock/i18n/it.po b/maintenance_stock/i18n/it.po new file mode 100644 index 000000000..cd7d3b001 --- /dev/null +++ b/maintenance_stock/i18n/it.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__allow_consumptions +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search +msgid "Allow Consumptions" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:42 +#: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons +#, python-format +msgid "Consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id +msgid "Consumption Location" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id +msgid "Consumption Type" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:79 +#, python-format +msgid "Consumptions" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "Create a new stock movement" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id +msgid "Default Consumption Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id +msgid "Equipment" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form +msgid "Maintenance Info" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id +#: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search +#: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search +msgid "Maintenance Request consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids +msgid "Picking list" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu +msgid "Product Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: maintenance_stock +#: code:addons/maintenance_stock/models/stock_warehouse.py:65 +#, python-format +msgid "Sequence consumption" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: maintenance_stock +#: model:ir.actions.act_window,name:maintenance_stock.stock_move_action +#: model:ir.ui.menu,name:maintenance_stock.stock_move_menu +msgid "Stock Moves" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids +msgid "Stock Picking" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action +msgid "There's no product move yet" +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action +msgid "This menu gives you the full traceability of inventory\n" +" operations on a specific product. You can filter on the product\n" +" to see all the past or future movements for the product." +msgstr "" + +#. module: maintenance_stock +#: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search +msgid "To" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,name:maintenance_stock.product_toner +#: model:product.template,name:maintenance_stock.product_toner_product_template +msgid "Toner" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,uom_name:maintenance_stock.product_toner +#: model:product.template,uom_name:maintenance_stock.product_toner_product_template +msgid "Unit(s)" +msgstr "" + +#. module: maintenance_stock +#: model:ir.model,name:maintenance_stock.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: maintenance_stock +#: model:product.product,weight_uom_name:maintenance_stock.product_toner +#: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template +msgid "kg" +msgstr "" From 3b9638534dabe8bdb0d64a6c0d07462dcd059fa9 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 23 Jul 2021 13:42:18 +0000 Subject: [PATCH 09/14] Translated using Weblate (Italian) Currently translated at 100.0% (30 of 30 strings) Translation: maintenance-12.0/maintenance-12.0-maintenance_stock Translate-URL: https://translation.odoo-community.org/projects/maintenance-12-0/maintenance-12-0-maintenance_stock/it/ --- maintenance_stock/i18n/it.po | 66 ++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/maintenance_stock/i18n/it.po b/maintenance_stock/i18n/it.po index cd7d3b001..f062edd52 100644 --- a/maintenance_stock/i18n/it.po +++ b/maintenance_stock/i18n/it.po @@ -6,31 +6,33 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-07-23 15:49+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Picking list" -msgstr "" +msgstr "Lista prelievo" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Product Moves" -msgstr "" +msgstr "Movimento prodotto" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_form msgid "Stock Moves" -msgstr "" +msgstr "Movimento di magazzino" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__allow_consumptions @@ -38,58 +40,58 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_request_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.hr_equipment_view_search msgid "Allow Consumptions" -msgstr "" +msgstr "Consenti consumo" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:42 #: model:stock.picking.type,name:maintenance_stock.main_picking_type_cons #, python-format msgid "Consumption" -msgstr "" +msgstr "Consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__wh_cons_loc_id msgid "Consumption Location" -msgstr "" +msgstr "Ubicazione di consumo" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_warehouse__cons_type_id msgid "Consumption Type" -msgstr "" +msgstr "Tipi di consumo" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:79 #, python-format msgid "Consumptions" -msgstr "" +msgstr "Consumi" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action msgid "Create a new stock movement" -msgstr "" +msgstr "Crea un nuovo movimento di magazzino" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__default_consumption_warehouse_id #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__default_consumption_warehouse_id msgid "Default Consumption Warehouse" -msgstr "" +msgstr "Magazzino di consumo predefinito" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_equipment_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_equipment_id msgid "Equipment" -msgstr "" +msgstr "Attrezzatura" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_equipment msgid "Maintenance Equipment" -msgstr "" +msgstr "Attrezzatura manutenzione" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_form msgid "Maintenance Info" -msgstr "" +msgstr "Informazioni manutenzione" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_maintenance_request @@ -97,57 +99,57 @@ msgstr "" #: model:ir.model.fields,field_description:maintenance_stock.field_stock_move_line__maintenance_request_id #: model:ir.model.fields,field_description:maintenance_stock.field_stock_picking__maintenance_request_id msgid "Maintenance Request" -msgstr "" +msgstr "Richiesta manutenzione" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_move_search #: model_terms:ir.ui.view,arch_db:maintenance_stock.view_picking_internal_search msgid "Maintenance Request consumption" -msgstr "" +msgstr "Consumo richiesta manutenzione" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_request__stock_picking_ids msgid "Picking list" -msgstr "" +msgstr "Lista prelievo" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_line_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_line_menu msgid "Product Moves" -msgstr "" +msgstr "Movimenti prodotto" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move_line msgid "Product Moves (Stock Move Line)" -msgstr "" +msgstr "Movimenti prodotto (Riga movimento di magazzino)" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:65 #, python-format msgid "Sequence consumption" -msgstr "" +msgstr "Sequenza di consumo" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Movimento di magazzino" #. module: maintenance_stock #: model:ir.actions.act_window,name:maintenance_stock.stock_move_action #: model:ir.ui.menu,name:maintenance_stock.stock_move_menu msgid "Stock Moves" -msgstr "" +msgstr "Movimenti di magazzino" #. module: maintenance_stock #: model:ir.model.fields,field_description:maintenance_stock.field_maintenance_equipment__stock_picking_ids msgid "Stock Picking" -msgstr "" +msgstr "Prelievo di magazzino" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_line_action msgid "There's no product move yet" -msgstr "" +msgstr "Non ci sono ancora movimenti di prodotto" #. module: maintenance_stock #: model_terms:ir.actions.act_window,help:maintenance_stock.stock_move_action @@ -155,36 +157,40 @@ msgid "This menu gives you the full traceability of inventory\n" " operations on a specific product. You can filter on the product\n" " to see all the past or future movements for the product." msgstr "" +"Questo menu fornisce la completa tracciabilità delle operazioni\n" +" di magazzino per un prodotto specifico. Si può filtrare sul " +"prodotto\n" +" per visualizzare i movimenti passati o futuri del prodotto." #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.stock_move_line_view_search msgid "To" -msgstr "" +msgstr "A" #. module: maintenance_stock #: model:product.product,name:maintenance_stock.product_toner #: model:product.template,name:maintenance_stock.product_toner_product_template msgid "Toner" -msgstr "" +msgstr "Inchiostro" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_picking msgid "Transfer" -msgstr "" +msgstr "Trasferimento" #. module: maintenance_stock #: model:product.product,uom_name:maintenance_stock.product_toner #: model:product.template,uom_name:maintenance_stock.product_toner_product_template msgid "Unit(s)" -msgstr "" +msgstr "Unità" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_warehouse msgid "Warehouse" -msgstr "" +msgstr "Magazzino" #. module: maintenance_stock #: model:product.product,weight_uom_name:maintenance_stock.product_toner #: model:product.template,weight_uom_name:maintenance_stock.product_toner_product_template msgid "kg" -msgstr "" +msgstr "kg" From 3e11d113e8ed239791dce4476bc2383661b5695e Mon Sep 17 00:00:00 2001 From: Francesco Foresti Date: Thu, 18 May 2023 09:41:04 +0000 Subject: [PATCH 10/14] Translated using Weblate (Italian) Currently translated at 100.0% (30 of 30 strings) Translation: maintenance-12.0/maintenance-12.0-maintenance_stock Translate-URL: https://translation.odoo-community.org/projects/maintenance-12-0/maintenance-12-0-maintenance_stock/it/ --- maintenance_stock/i18n/it.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maintenance_stock/i18n/it.po b/maintenance_stock/i18n/it.po index f062edd52..dbde84c61 100644 --- a/maintenance_stock/i18n/it.po +++ b/maintenance_stock/i18n/it.po @@ -6,15 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-07-23 15:49+0000\n" -"Last-Translator: mymage \n" +"PO-Revision-Date: 2023-05-18 13:32+0000\n" +"Last-Translator: Francesco Foresti \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 4.16.4\n" #. module: maintenance_stock #: model_terms:ir.ui.view,arch_db:maintenance_stock.equipment_request_view_form @@ -122,7 +122,7 @@ msgstr "Movimenti prodotto" #. module: maintenance_stock #: model:ir.model,name:maintenance_stock.model_stock_move_line msgid "Product Moves (Stock Move Line)" -msgstr "Movimenti prodotto (Riga movimento di magazzino)" +msgstr "Movimenti prodotto (riga movimento di magazzino)" #. module: maintenance_stock #: code:addons/maintenance_stock/models/stock_warehouse.py:65 From 4a66cc0c8d38258ff64434b559b83ff35afe118f Mon Sep 17 00:00:00 2001 From: Manuel Marquez Date: Sat, 3 Jun 2023 18:17:07 -0400 Subject: [PATCH 11/14] [IMP] maintenance_stock: pre-commit execution --- maintenance_stock/__manifest__.py | 11 +- .../data/demo_maintenance_stock.xml | 99 +++++++---- maintenance_stock/hooks.py | 12 +- .../models/maintenance_equipment.py | 33 ++-- .../models/maintenance_request.py | 41 ++--- maintenance_stock/models/stock_move.py | 3 +- maintenance_stock/models/stock_move_line.py | 3 +- maintenance_stock/models/stock_picking.py | 3 +- maintenance_stock/models/stock_warehouse.py | 84 +++++---- maintenance_stock/readme/ROADMAP.rst | 8 +- maintenance_stock/readme/USAGE.rst | 4 +- .../tests/test_maintenance_stock.py | 160 ++++++++++-------- .../views/maintenance_equipment_views.xml | 51 ++++-- .../views/maintenance_request_views.xml | 42 +++-- .../views/stock_move_line_views.xml | 43 +++-- maintenance_stock/views/stock_move_views.xml | 36 ++-- .../views/stock_picking_views.xml | 26 ++- 17 files changed, 386 insertions(+), 273 deletions(-) diff --git a/maintenance_stock/__manifest__.py b/maintenance_stock/__manifest__.py index 8a90d3ade..fe7583686 100644 --- a/maintenance_stock/__manifest__.py +++ b/maintenance_stock/__manifest__.py @@ -8,10 +8,7 @@ "version": "12.0.1.0.0", "category": "Warehouse", "website": "https://github.com/OCA/maintenance", - "depends": [ - "base_maintenance", - "stock", - ], + "depends": ["base_maintenance", "stock",], "data": [ "views/maintenance_equipment_views.xml", "views/maintenance_request_views.xml", @@ -19,9 +16,7 @@ "views/stock_move_line_views.xml", "views/stock_picking_views.xml", ], - "demo": [ - "data/demo_maintenance_stock.xml", - ], + "demo": ["data/demo_maintenance_stock.xml",], "post_init_hook": "post_init_hook", - 'installable': True, + "installable": True, } diff --git a/maintenance_stock/data/demo_maintenance_stock.xml b/maintenance_stock/data/demo_maintenance_stock.xml index e62fb61e5..3a27934cf 100644 --- a/maintenance_stock/data/demo_maintenance_stock.xml +++ b/maintenance_stock/data/demo_maintenance_stock.xml @@ -1,16 +1,18 @@ - + Maintenance Warehouse - - + + Main - + }]" + /> TON_1234 Toner product - + 100.0 70.0 - - - - + + + + Inventory for Toner product - + - - - + + + 50.0 - + - + - - + + Change toner - - - + + + 7 - - + + - - - - - - + + + + + + })]" + /> - + - + diff --git a/maintenance_stock/hooks.py b/maintenance_stock/hooks.py index d141dc071..0e5c1af60 100644 --- a/maintenance_stock/hooks.py +++ b/maintenance_stock/hooks.py @@ -2,13 +2,14 @@ # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html import logging + from odoo import SUPERUSER_ID, api def post_init_hook(cr, registry): - logging.getLogger('odoo.addons.maintenance_stock').info( - 'Adding pending locations, sequences and pìcking types to ' - 'current warehouses') + logging.getLogger("odoo.addons.maintenance_stock").info( + "Adding pending locations, sequences and pìcking types to " "current warehouses" + ) env = api.Environment(cr, SUPERUSER_ID, {}) PickingType = env["stock.picking.type"] @@ -18,5 +19,6 @@ def post_init_hook(cr, registry): warehouse.write(new_vals) # return picking type workaround for existing warehouses if "cons_type_id" in new_vals: - PickingType.browse(new_vals["cons_type_id"]).write({ - "return_picking_type_id": warehouse.in_type_id.id}) + PickingType.browse(new_vals["cons_type_id"]).write( + {"return_picking_type_id": warehouse.in_type_id.id} + ) diff --git a/maintenance_stock/models/maintenance_equipment.py b/maintenance_stock/models/maintenance_equipment.py index 575acbfcd..edee0245b 100644 --- a/maintenance_stock/models/maintenance_equipment.py +++ b/maintenance_stock/models/maintenance_equipment.py @@ -11,9 +11,7 @@ class MaintenanceEquipment(models.Model): inverse_name="maintenance_equipment_id", groups="stock.group_stock_user", ) - allow_consumptions = fields.Boolean( - groups="stock.group_stock_user", - ) + allow_consumptions = fields.Boolean(groups="stock.group_stock_user",) default_consumption_warehouse_id = fields.Many2one( string="Default Consumption Warehouse", comodel_name="stock.warehouse", @@ -36,24 +34,29 @@ def action_view_stock_picking_ids(self): def action_view_stock_move_ids(self): self.ensure_one() - action = self.env.ref('stock.stock_move_action').read()[0] - action['domain'] = [('maintenance_equipment_id', '=', self.id)] + action = self.env.ref("stock.stock_move_action").read()[0] + action["domain"] = [("maintenance_equipment_id", "=", self.id)] return action def action_view_stock_move_line_ids(self): self.ensure_one() - action = self.env.ref('stock.stock_move_line_action').read()[0] - action['domain'] = [('maintenance_equipment_id', '=', self.id)] + action = self.env.ref("stock.stock_move_line_action").read()[0] + action["domain"] = [("maintenance_equipment_id", "=", self.id)] # TODO Grouping by destination allows separating consumptions # and returns. Look for a better system and remove this - show_groupby_to = len(self.env['stock.move.line'].search( - [('maintenance_equipment_id', '=', self.id)] - ).mapped('location_dest_id')) > 1 - - action['context'] = { - 'search_default_done': 1, - 'search_default_groupby_location_dest_id': show_groupby_to, - 'search_default_groupby_product_id': 1, + show_groupby_to = ( + len( + self.env["stock.move.line"] + .search([("maintenance_equipment_id", "=", self.id)]) + .mapped("location_dest_id") + ) + > 1 + ) + + action["context"] = { + "search_default_done": 1, + "search_default_groupby_location_dest_id": show_groupby_to, + "search_default_groupby_product_id": 1, } return action diff --git a/maintenance_stock/models/maintenance_request.py b/maintenance_stock/models/maintenance_request.py index 95a665a53..ad15702f0 100644 --- a/maintenance_stock/models/maintenance_request.py +++ b/maintenance_stock/models/maintenance_request.py @@ -24,36 +24,39 @@ class MaintenanceRequest(models.Model): def action_view_stock_picking_ids(self): self.ensure_one() - action = self.env.ref( - 'stock.stock_picking_action_picking_type').read()[0] - action['domain'] = [('maintenance_request_id', '=', self.id)] - action['context'] = { - 'default_picking_type_id': - self.default_consumption_warehouse_id.cons_type_id.id, - 'default_maintenance_request_id': self.id, + action = self.env.ref("stock.stock_picking_action_picking_type").read()[0] + action["domain"] = [("maintenance_request_id", "=", self.id)] + action["context"] = { + "default_picking_type_id": self.default_consumption_warehouse_id.cons_type_id.id, + "default_maintenance_request_id": self.id, } return action def action_view_stock_move_ids(self): self.ensure_one() - action = self.env.ref('stock.stock_move_action').read()[0] - action['domain'] = [('maintenance_request_id', '=', self.id)] + action = self.env.ref("stock.stock_move_action").read()[0] + action["domain"] = [("maintenance_request_id", "=", self.id)] return action def action_view_stock_move_line_ids(self): self.ensure_one() - action = self.env.ref('stock.stock_move_line_action').read()[0] - action['domain'] = [('maintenance_request_id', '=', self.id)] + action = self.env.ref("stock.stock_move_line_action").read()[0] + action["domain"] = [("maintenance_request_id", "=", self.id)] # TODO Grouping by destination allows separating consumptions # and returns. Look for a better system and remove this - show_groupby_to = len(self.env['stock.move.line'].search( - [('maintenance_request_id', '=', self.id)] - ).mapped('location_dest_id')) > 1 - - action['context'] = { - 'search_default_done': 1, - 'search_default_groupby_location_dest_id': show_groupby_to, - 'search_default_groupby_product_id': 1, + show_groupby_to = ( + len( + self.env["stock.move.line"] + .search([("maintenance_request_id", "=", self.id)]) + .mapped("location_dest_id") + ) + > 1 + ) + + action["context"] = { + "search_default_done": 1, + "search_default_groupby_location_dest_id": show_groupby_to, + "search_default_groupby_product_id": 1, } return action diff --git a/maintenance_stock/models/stock_move.py b/maintenance_stock/models/stock_move.py index e074b1057..26675e5dd 100644 --- a/maintenance_stock/models/stock_move.py +++ b/maintenance_stock/models/stock_move.py @@ -7,8 +7,7 @@ class StockMove(models.Model): _inherit = "stock.move" maintenance_request_id = fields.Many2one( - comodel_name="maintenance.request", - related="picking_id.maintenance_request_id", + comodel_name="maintenance.request", related="picking_id.maintenance_request_id", ) maintenance_equipment_id = fields.Many2one( comodel_name="maintenance.equipment", diff --git a/maintenance_stock/models/stock_move_line.py b/maintenance_stock/models/stock_move_line.py index daedb865b..8bbd20887 100644 --- a/maintenance_stock/models/stock_move_line.py +++ b/maintenance_stock/models/stock_move_line.py @@ -7,8 +7,7 @@ class StockMoveLine(models.Model): _inherit = "stock.move.line" maintenance_request_id = fields.Many2one( - comodel_name="maintenance.request", - related="picking_id.maintenance_request_id", + comodel_name="maintenance.request", related="picking_id.maintenance_request_id", ) maintenance_equipment_id = fields.Many2one( comodel_name="maintenance.equipment", diff --git a/maintenance_stock/models/stock_picking.py b/maintenance_stock/models/stock_picking.py index 201c7602e..da251cd84 100644 --- a/maintenance_stock/models/stock_picking.py +++ b/maintenance_stock/models/stock_picking.py @@ -7,8 +7,7 @@ class StockPicking(models.Model): _inherit = "stock.picking" maintenance_request_id = fields.Many2one( - comodel_name="maintenance.request", - index=True, + comodel_name="maintenance.request", index=True, ) maintenance_equipment_id = fields.Many2one( comodel_name="maintenance.equipment", diff --git a/maintenance_stock/models/stock_warehouse.py b/maintenance_stock/models/stock_warehouse.py index 03fe4f90b..96eac7899 100644 --- a/maintenance_stock/models/stock_warehouse.py +++ b/maintenance_stock/models/stock_warehouse.py @@ -1,83 +1,79 @@ # © 2020 Solvos Consultoría Informática () # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html -from odoo import fields, models, _ +from odoo import _, fields, models class StockWarehouse(models.Model): _inherit = "stock.warehouse" wh_cons_loc_id = fields.Many2one( - 'stock.location', - 'Consumption Location', - domain=[('usage', '=', 'inventory')]) + "stock.location", "Consumption Location", domain=[("usage", "=", "inventory")] + ) cons_type_id = fields.Many2one("stock.picking.type", "Consumption Type") def _create_or_update_sequences_and_picking_types(self): - warehouse_data = \ - super()._create_or_update_sequences_and_picking_types() - PickingType = self.env['stock.picking.type'] + warehouse_data = super()._create_or_update_sequences_and_picking_types() + PickingType = self.env["stock.picking.type"] # TODO when is called for an existing warehouse (e.g. during the # module installation in_type_id is not accesible). Temporary # solved with a hook - if 'cons_type_id' in warehouse_data: - PickingType.browse(warehouse_data['cons_type_id']).write({ - 'return_picking_type_id': - warehouse_data.get('in_type_id', False), - }) + if "cons_type_id" in warehouse_data: + PickingType.browse(warehouse_data["cons_type_id"]).write( + {"return_picking_type_id": warehouse_data.get("in_type_id", False),} + ) return warehouse_data def _update_name_and_code(self, new_name=False, new_code=False): for warehouse in self: sequence_data = warehouse._get_sequence_values() - warehouse.cons_type_id.sequence_id.write( - sequence_data['cons_type_id']) + warehouse.cons_type_id.sequence_id.write(sequence_data["cons_type_id"]) def _get_picking_type_create_values(self, max_sequence): - data, max_sequence_new = \ - super()._get_picking_type_create_values(max_sequence) - return { - **data, - 'cons_type_id': { - 'name': _('Consumption'), - 'code': 'outgoing', - 'use_create_lots': False, - 'use_existing_lots': True, - 'default_location_src_id': self.lot_stock_id.id, - 'default_location_dest_id': self.wh_cons_loc_id.id, - 'sequence': max_sequence_new, - 'barcode': self.code.replace(" ", "").upper() + "-CONS", - } - }, max_sequence_new + 1 + data, max_sequence_new = super()._get_picking_type_create_values(max_sequence) + return ( + { + **data, + "cons_type_id": { + "name": _("Consumption"), + "code": "outgoing", + "use_create_lots": False, + "use_existing_lots": True, + "default_location_src_id": self.lot_stock_id.id, + "default_location_dest_id": self.wh_cons_loc_id.id, + "sequence": max_sequence_new, + "barcode": self.code.replace(" ", "").upper() + "-CONS", + }, + }, + max_sequence_new + 1, + ) def _get_picking_type_update_values(self): data = super()._get_picking_type_update_values() - return { - **data, - "cons_type_id": {} - } + return {**data, "cons_type_id": {}} def _get_sequence_values(self): data = super()._get_sequence_values() return { **data, - 'cons_type_id': { - 'name': self.name + ' ' + _('Sequence consumption'), - 'prefix': self.code + '/CONS/', 'padding': 5, - 'company_id': self.company_id.id, + "cons_type_id": { + "name": self.name + " " + _("Sequence consumption"), + "prefix": self.code + "/CONS/", + "padding": 5, + "company_id": self.company_id.id, }, } def _get_locations_values(self, vals): sub_locations = super()._get_locations_values(vals) - code = vals.get('code') or self.code - code = code.replace(' ', '').upper() - company_id = vals.get('company_id', self.company_id.id) + code = vals.get("code") or self.code + code = code.replace(" ", "").upper() + company_id = vals.get("company_id", self.company_id.id) return { **sub_locations, - 'wh_cons_loc_id': { - 'name': _('Consumptions'), - 'usage': 'inventory', - 'barcode': self._valid_barcode(code + '-CONS', company_id) + "wh_cons_loc_id": { + "name": _("Consumptions"), + "usage": "inventory", + "barcode": self._valid_barcode(code + "-CONS", company_id), }, } diff --git a/maintenance_stock/readme/ROADMAP.rst b/maintenance_stock/readme/ROADMAP.rst index b36d2ff93..9b1044215 100644 --- a/maintenance_stock/readme/ROADMAP.rst +++ b/maintenance_stock/readme/ROADMAP.rst @@ -1,4 +1,4 @@ -* Product standard list. Enable defining product standard lists (at least, - product and quantity per line), and link them with equipments. Then, every - maintenance request could select one of them and automatically fill the - product and quantity list. \ No newline at end of file +* Product standard list. Enable defining product standard lists (at least, + product and quantity per line), and link them with equipments. Then, every + maintenance request could select one of them and automatically fill the + product and quantity list. diff --git a/maintenance_stock/readme/USAGE.rst b/maintenance_stock/readme/USAGE.rst index 5f624f5a4..40d6530da 100644 --- a/maintenance_stock/readme/USAGE.rst +++ b/maintenance_stock/readme/USAGE.rst @@ -6,7 +6,7 @@ and filling a default warehouse for the picking operations: :width: 600 px Then, for every mainteance request of this equipment, *Picking List* button -allows us to make consumptions, that will be picking documents with their own +allows us to make consumptions, that will be picking documents with their own sequence: .. figure:: ../static/description/request-1.png @@ -28,7 +28,7 @@ will not compute for stock inventory, like e.g. partner locations: From both request and equipment forms these stock operations and *Product Moves* are available. -Return operations are also enabled, and will be linked to the request and +Return operations are also enabled, and will be linked to the request and equipment as well: .. figure:: ../static/description/pick-2.png diff --git a/maintenance_stock/tests/test_maintenance_stock.py b/maintenance_stock/tests/test_maintenance_stock.py index d6d3b767e..816d3b724 100644 --- a/maintenance_stock/tests/test_maintenance_stock.py +++ b/maintenance_stock/tests/test_maintenance_stock.py @@ -4,59 +4,68 @@ class TestMaintenanceStock(test_common.TransactionCase): - def setUp(self): super().setUp() - self.maintenance_warehouse = self.env["stock.warehouse"].create({ - "name": "Test warehouse", - "code": "TEST", - }) - - self.product1 = self.env["product.product"].create({ - "default_code": "TESTOPROD", - "name": "Test prod", - "type": "product", - "uom_id": self.env.ref("uom.product_uom_unit").id, - "uom_po_id": self.env.ref("uom.product_uom_unit").id, - }) - - self.equipment_1 = self.env["maintenance.equipment"].create({ - "name": 'Test equipment', - "allow_consumptions": True, - "default_consumption_warehouse_id": self.maintenance_warehouse.id, - }) - self.request_1 = self.env["maintenance.request"].create({ - 'name': 'Test request', - "user_id": self.env.ref("base.user_demo").id, - "owner_user_id": self.env.ref("base.user_admin").id, - "equipment_id": self.equipment_1.id, - "stage_id": self.env.ref("maintenance.stage_1").id, - "maintenance_team_id": - self.env.ref("maintenance.equipment_team_maintenance").id, - }) + self.maintenance_warehouse = self.env["stock.warehouse"].create( + {"name": "Test warehouse", "code": "TEST",} + ) + + self.product1 = self.env["product.product"].create( + { + "default_code": "TESTOPROD", + "name": "Test prod", + "type": "product", + "uom_id": self.env.ref("uom.product_uom_unit").id, + "uom_po_id": self.env.ref("uom.product_uom_unit").id, + } + ) + + self.equipment_1 = self.env["maintenance.equipment"].create( + { + "name": "Test equipment", + "allow_consumptions": True, + "default_consumption_warehouse_id": self.maintenance_warehouse.id, + } + ) + self.request_1 = self.env["maintenance.request"].create( + { + "name": "Test request", + "user_id": self.env.ref("base.user_demo").id, + "owner_user_id": self.env.ref("base.user_admin").id, + "equipment_id": self.equipment_1.id, + "stage_id": self.env.ref("maintenance.stage_1").id, + "maintenance_team_id": self.env.ref( + "maintenance.equipment_team_maintenance" + ).id, + } + ) def test_warehouse(self): self.assertTrue(self.maintenance_warehouse.wh_cons_loc_id) self.assertTrue(self.maintenance_warehouse.cons_type_id) - self.assertEqual( - self.maintenance_warehouse.cons_type_id.code, "outgoing") + self.assertEqual(self.maintenance_warehouse.cons_type_id.code, "outgoing") self.assertEqual( self.maintenance_warehouse.cons_type_id.default_location_src_id, - self.maintenance_warehouse.lot_stock_id) + self.maintenance_warehouse.lot_stock_id, + ) self.assertEqual( self.maintenance_warehouse.cons_type_id.default_location_dest_id, - self.maintenance_warehouse.wh_cons_loc_id) + self.maintenance_warehouse.wh_cons_loc_id, + ) self.assertEqual( self.maintenance_warehouse.cons_type_id.barcode, - self.maintenance_warehouse.code.replace(" ", "").upper() + "-CONS") + self.maintenance_warehouse.code.replace(" ", "").upper() + "-CONS", + ) self.assertEqual( self.maintenance_warehouse.cons_type_id.sequence_id.prefix, - self.maintenance_warehouse.code + '/CONS/') + self.maintenance_warehouse.code + "/CONS/", + ) self.assertEqual( self.maintenance_warehouse.cons_type_id.return_picking_type_id, - self.maintenance_warehouse.in_type_id) + self.maintenance_warehouse.in_type_id, + ) def test_equipment(self): self.assertTrue(self.equipment_1.default_consumption_warehouse_id) @@ -73,56 +82,69 @@ def test_equipment(self): action3 = self.equipment_1.action_view_stock_move_line_ids() self.assertEqual(action3["domain"][0][2], self.equipment_1.id) - self.assertFalse( - action3["context"]["search_default_groupby_location_dest_id"]) + self.assertFalse(action3["context"]["search_default_groupby_location_dest_id"]) def test_request(self): action1 = self.request_1.action_view_stock_picking_ids() self.assertEqual(action1["domain"][0][2], self.request_1.id) self.assertEqual( action1["context"]["default_picking_type_id"], - self.request_1.default_consumption_warehouse_id.cons_type_id.id) + self.request_1.default_consumption_warehouse_id.cons_type_id.id, + ) self.assertEqual( - action1["context"]["default_maintenance_request_id"], - self.request_1.id) + action1["context"]["default_maintenance_request_id"], self.request_1.id + ) action2 = self.request_1.action_view_stock_move_ids() self.assertEqual(action2["domain"][0][2], self.request_1.id) action3 = self.request_1.action_view_stock_move_line_ids() self.assertEqual(action3["domain"][0][2], self.request_1.id) - self.assertFalse( - action3["context"]["search_default_groupby_location_dest_id"]) + self.assertFalse(action3["context"]["search_default_groupby_location_dest_id"]) def test_picking(self): self.assertEqual(len(self.request_1.stock_picking_ids), 0) self.assertEqual(len(self.equipment_1.stock_picking_ids), 0) qty_done = 5.0 - picking = self.env["stock.picking"].create({ - "maintenance_request_id": self.request_1.id, - "picking_type_id": self.maintenance_warehouse.cons_type_id.id, - "location_id": self.maintenance_warehouse.lot_stock_id.id, - "location_dest_id": self.maintenance_warehouse.wh_cons_loc_id.id, - "move_lines": [(0, 0, { - "name": "Test move", - "product_id": self.product1.id, - "product_uom": self.env.ref("uom.product_uom_unit").id, - "product_uom_qty": 5.0, + picking = self.env["stock.picking"].create( + { + "maintenance_request_id": self.request_1.id, "picking_type_id": self.maintenance_warehouse.cons_type_id.id, "location_id": self.maintenance_warehouse.lot_stock_id.id, - "location_dest_id": - self.maintenance_warehouse.wh_cons_loc_id.id, - "move_line_ids": [(0, 0, { - "product_id": self.product1.id, - "product_uom_id": self.env.ref("uom.product_uom_unit").id, - "qty_done": qty_done, - "location_id": self.maintenance_warehouse.lot_stock_id.id, - "location_dest_id": - self.maintenance_warehouse.wh_cons_loc_id.id, - })] - })] - }) + "location_dest_id": self.maintenance_warehouse.wh_cons_loc_id.id, + "move_lines": [ + ( + 0, + 0, + { + "name": "Test move", + "product_id": self.product1.id, + "product_uom": self.env.ref("uom.product_uom_unit").id, + "product_uom_qty": 5.0, + "picking_type_id": self.maintenance_warehouse.cons_type_id.id, + "location_id": self.maintenance_warehouse.lot_stock_id.id, + "location_dest_id": self.maintenance_warehouse.wh_cons_loc_id.id, + "move_line_ids": [ + ( + 0, + 0, + { + "product_id": self.product1.id, + "product_uom_id": self.env.ref( + "uom.product_uom_unit" + ).id, + "qty_done": qty_done, + "location_id": self.maintenance_warehouse.lot_stock_id.id, + "location_dest_id": self.maintenance_warehouse.wh_cons_loc_id.id, + }, + ) + ], + }, + ) + ], + } + ) self.assertEqual(len(self.request_1.stock_picking_ids), 1) self.assertEqual(len(self.equipment_1.stock_picking_ids), 1) @@ -130,11 +152,11 @@ def test_picking(self): stock_quant_obj = self.env["stock.quant"] domain_from = [ ("product_id", "=", self.product1.id), - ("location_id", "=", self.maintenance_warehouse.lot_stock_id.id) + ("location_id", "=", self.maintenance_warehouse.lot_stock_id.id), ] domain_to = [ ("product_id", "=", self.product1.id), - ("location_id", "=", self.maintenance_warehouse.wh_cons_loc_id.id) + ("location_id", "=", self.maintenance_warehouse.wh_cons_loc_id.id), ] self.assertEqual(stock_quant_obj.search(domain_from).quantity, 0) self.assertEqual(stock_quant_obj.search(domain_to).quantity, 0) @@ -142,7 +164,5 @@ def test_picking(self): picking.action_confirm() picking.action_done() - self.assertEqual( - stock_quant_obj.search(domain_from).quantity, -qty_done) - self.assertEqual( - stock_quant_obj.search(domain_to).quantity, qty_done) + self.assertEqual(stock_quant_obj.search(domain_from).quantity, -qty_done) + self.assertEqual(stock_quant_obj.search(domain_to).quantity, qty_done) diff --git a/maintenance_stock/views/maintenance_equipment_views.xml b/maintenance_stock/views/maintenance_equipment_views.xml index c78b947bc..ea038aabd 100644 --- a/maintenance_stock/views/maintenance_equipment_views.xml +++ b/maintenance_stock/views/maintenance_equipment_views.xml @@ -1,4 +1,4 @@ - + @@ -7,9 +7,12 @@ - - + + @@ -30,24 +33,36 @@ - - - - -