From ab00f5a16225e6d64e437b08c00ac3962ba48968 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Tue, 12 Mar 2019 16:10:30 +0100
Subject: [PATCH 01/17] [MIG] repair_refurbish (mrp_repair_refurbish):
Migration to 12.0
---
repair_refurbish/README.rst | 106 ++++
repair_refurbish/__init__.py | 1 +
repair_refurbish/__manifest__.py | 22 +
repair_refurbish/data/stock_data.xml | 27 ++
repair_refurbish/i18n/de.po | 90 ++++
.../i18n/mrp_repair_refurbish.pot | 85 ++++
repair_refurbish/models/__init__.py | 4 +
repair_refurbish/models/product_product.py | 12 +
repair_refurbish/models/product_template.py | 43 ++
repair_refurbish/models/repair.py | 85 ++++
repair_refurbish/models/stock_move.py | 15 +
repair_refurbish/readme/CONFIGURE.rst | 4 +
repair_refurbish/readme/CONTRIBUTORS.rst | 3 +
repair_refurbish/readme/CREDITS.rst | 3 +
repair_refurbish/readme/DESCRIPTION.rst | 2 +
repair_refurbish/readme/USAGE.rst | 12 +
repair_refurbish/static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 455 ++++++++++++++++++
repair_refurbish/tests/__init__.py | 1 +
.../tests/test_repair_refurbish.py | 91 ++++
.../views/product_product_view.xml | 17 +
.../views/product_template_view.xml | 31 ++
repair_refurbish/views/repair_view.xml | 57 +++
23 files changed, 1166 insertions(+)
create mode 100644 repair_refurbish/README.rst
create mode 100644 repair_refurbish/__init__.py
create mode 100644 repair_refurbish/__manifest__.py
create mode 100644 repair_refurbish/data/stock_data.xml
create mode 100644 repair_refurbish/i18n/de.po
create mode 100644 repair_refurbish/i18n/mrp_repair_refurbish.pot
create mode 100644 repair_refurbish/models/__init__.py
create mode 100644 repair_refurbish/models/product_product.py
create mode 100644 repair_refurbish/models/product_template.py
create mode 100644 repair_refurbish/models/repair.py
create mode 100644 repair_refurbish/models/stock_move.py
create mode 100644 repair_refurbish/readme/CONFIGURE.rst
create mode 100644 repair_refurbish/readme/CONTRIBUTORS.rst
create mode 100644 repair_refurbish/readme/CREDITS.rst
create mode 100644 repair_refurbish/readme/DESCRIPTION.rst
create mode 100644 repair_refurbish/readme/USAGE.rst
create mode 100644 repair_refurbish/static/description/icon.png
create mode 100644 repair_refurbish/static/description/index.html
create mode 100644 repair_refurbish/tests/__init__.py
create mode 100644 repair_refurbish/tests/test_repair_refurbish.py
create mode 100644 repair_refurbish/views/product_product_view.xml
create mode 100644 repair_refurbish/views/product_template_view.xml
create mode 100644 repair_refurbish/views/repair_view.xml
diff --git a/repair_refurbish/README.rst b/repair_refurbish/README.rst
new file mode 100644
index 000000000..906d14db2
--- /dev/null
+++ b/repair_refurbish/README.rst
@@ -0,0 +1,106 @@
+====================
+MRP Repair Refurbish
+====================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! 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%2Fmanufacture-lightgray.png?logo=github
+ :target: https://github.com/OCA/manufacture/tree/11.0/mrp_repair_refurbish
+ :alt: OCA/manufacture
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/manufacture-11-0/manufacture-11-0-mrp_repair_refurbish
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/129/11.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds the ability to obtain refurbished product as a consequence
+of the repair of a product that was defective.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Configuration
+=============
+
+#. For each product that can potentially be refurbished, define the
+ refurbished version in the product form.
+#. A default 'Refurbished' virtual location is created during module install,
+ and proposed by default on each product.
+
+Usage
+=====
+
+#. Create an MRP repair.
+#. Indicate a product to repair, If the product has a proposed refurbished
+ version, it will be proposed to be used. The destination location
+#. Add operations if needed.
+#. Complete the repair.
+
+The initial product will be moved to the 'Scrap' location, and the
+refurbished product will be moved from a 'Refurbish' location to the desired
+destination location.
+
+The components that were added to the repair order will be moved to the
+'Refurbish' location.
+
+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
+~~~~~~~
+
+* Eficent
+
+Contributors
+~~~~~~~~~~~~
+
+* Jordi Ballester Alomar
+* Lois Rilo
+
+Other credits
+~~~~~~~~~~~~~
+
+The initial development of this module has been financially supported by:
+
+* Aleph Objects, Inc.
+
+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/manufacture `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/repair_refurbish/__init__.py b/repair_refurbish/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/repair_refurbish/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/repair_refurbish/__manifest__.py b/repair_refurbish/__manifest__.py
new file mode 100644
index 000000000..10b60bdbc
--- /dev/null
+++ b/repair_refurbish/__manifest__.py
@@ -0,0 +1,22 @@
+# Copyright 2016-18 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+{
+ "name": "MRP Repair Refurbish",
+ "summary": "Create refurbished products during repair",
+ "version": "12.0.1.0.1",
+ "category": "Manufacturing",
+ "website": "https://github.com/OCA/manufacture",
+ "author": "Eficent, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": [
+ 'repair',
+ ],
+ "data": [
+ "views/repair_view.xml",
+ "data/stock_data.xml",
+ "views/product_template_view.xml",
+ "views/product_product_view.xml",
+ ],
+}
diff --git a/repair_refurbish/data/stock_data.xml b/repair_refurbish/data/stock_data.xml
new file mode 100644
index 000000000..479c57699
--- /dev/null
+++ b/repair_refurbish/data/stock_data.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+ Refurbish
+
+ production
+
+
+
+
+
+
+
+
+ property_stock_refurbish
+
+
+
+
+
+
diff --git a/repair_refurbish/i18n/de.po b/repair_refurbish/i18n/de.po
new file mode 100644
index 000000000..62ee32573
--- /dev/null
+++ b/repair_refurbish/i18n/de.po
@@ -0,0 +1,90 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_repair_refurbish
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2018-12-09 10:43+0000\n"
+"Last-Translator: Maria Sparenberg \n"
+"Language-Team: none\n"
+"Language: de\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.3\n"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_product_product
+msgid "Product"
+msgstr "Produkt"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_product_template
+msgid "Product Template"
+msgstr "Produktvorlage"
+
+#. module: mrp_repair_refurbish
+#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_normal_form_view
+#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_template_only_form_view
+#: model:stock.location,name:mrp_repair_refurbish.stock_location_refurbish
+msgid "Refurbish"
+msgstr "Wiederaufbereiten"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_property_stock_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_property_stock_refurbish
+msgid "Refurbish Location"
+msgstr "Lagerort für Wiederaufbereitung"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_location_dest_id
+msgid "Refurbished Delivery Location"
+msgstr "Auslieferungslagerort"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_move_id
+msgid "Refurbished Inventory Move"
+msgstr "Lagerbewegung"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_lot_id
+msgid "Refurbished Lot"
+msgstr "Wiederaufbereitetes Los"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_refurbish_product_id
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_refurbish_product_id
+msgid "Refurbished Product"
+msgstr "Wiederaufbereitetes Produkt"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_product_id
+msgid "Refurbished product"
+msgstr "Wiederaufbereitetes Produkt"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair_line
+msgid "Repair Line"
+msgstr "Instandsetzungslinie"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair
+msgid "Repair Order"
+msgstr "Reparaturauftrag"
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_product_property_stock_refurbish
+#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_template_property_stock_refurbish
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by repair orders when refurbishing takes place."
+msgstr ""
+"Dieser Lagerort wird anstatt des Standardlagerortes als Quelllager für "
+"Lagerbewegungen verwendet, die durch Reparaturaufträge bei der "
+"Wiederaufbereitung erzeugt werden."
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_to_refurbish
+msgid "To Refurbish"
+msgstr "Wiederaufbereiten"
diff --git a/repair_refurbish/i18n/mrp_repair_refurbish.pot b/repair_refurbish/i18n/mrp_repair_refurbish.pot
new file mode 100644
index 000000000..7f331e052
--- /dev/null
+++ b/repair_refurbish/i18n/mrp_repair_refurbish.pot
@@ -0,0 +1,85 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_repair_refurbish
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \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: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_product_product
+msgid "Product"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_normal_form_view
+#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_template_only_form_view
+#: model:stock.location,name:mrp_repair_refurbish.stock_location_refurbish
+msgid "Refurbish"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_property_stock_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_property_stock_refurbish
+msgid "Refurbish Location"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_location_dest_id
+msgid "Refurbished Delivery Location"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_move_id
+msgid "Refurbished Inventory Move"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_lot_id
+msgid "Refurbished Lot"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_refurbish_product_id
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_refurbish_product_id
+msgid "Refurbished Product"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_product_id
+msgid "Refurbished product"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair_line
+msgid "Repair Line"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair
+msgid "Repair Order"
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_product_property_stock_refurbish
+#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_template_property_stock_refurbish
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by repair orders when refurbishing takes place."
+msgstr ""
+
+#. module: mrp_repair_refurbish
+#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_to_refurbish
+msgid "To Refurbish"
+msgstr ""
+
diff --git a/repair_refurbish/models/__init__.py b/repair_refurbish/models/__init__.py
new file mode 100644
index 000000000..9261e7fb8
--- /dev/null
+++ b/repair_refurbish/models/__init__.py
@@ -0,0 +1,4 @@
+from . import product_product
+from . import product_template
+from . import repair
+from . import stock_move
diff --git a/repair_refurbish/models/product_product.py b/repair_refurbish/models/product_product.py
new file mode 100644
index 000000000..4ab246863
--- /dev/null
+++ b/repair_refurbish/models/product_product.py
@@ -0,0 +1,12 @@
+# Copyright 2017-18 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class ProductProduct(models.Model):
+ _inherit = 'product.product'
+
+ refurbish_product_id = fields.Many2one(
+ comodel_name='product.product', string='Refurbished Product',
+ domain="[('type', '=', 'product')]")
diff --git a/repair_refurbish/models/product_template.py b/repair_refurbish/models/product_template.py
new file mode 100644
index 000000000..a41024d39
--- /dev/null
+++ b/repair_refurbish/models/product_template.py
@@ -0,0 +1,43 @@
+# Copyright 2017-18 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, fields, models
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ refurbish_product_id = fields.Many2one(
+ comodel_name='product.product', string='Refurbished Product',
+ compute='_compute_refurbish_product',
+ inverse='_set_refurbish_product', search='_search_refurbish_product',
+ domain="[('type', '=', 'product')]")
+
+ property_stock_refurbish = fields.Many2one(
+ comodel_name='stock.location', string="Refurbish Location",
+ company_dependent=True, domain=[('usage', 'like', 'production')],
+ help="This stock location will be used, instead of the "
+ "default one, as the source location for "
+ "stock moves generated by repair orders when refurbishing takes "
+ "place.")
+
+ @api.depends('product_variant_ids',
+ 'product_variant_ids.refurbish_product_id')
+ def _compute_refurbish_product(self):
+ unique_variants = self.filtered(lambda template:
+ len(template.product_variant_ids) == 1)
+ for template in unique_variants:
+ template.refurbish_product_id = \
+ template.product_variant_ids.refurbish_product_id
+
+ @api.multi
+ def _set_refurbish_product(self):
+ for rec in self:
+ if len(rec.product_variant_ids) == 1:
+ rec.product_variant_ids.refurbish_product_id = \
+ rec.refurbish_product_id
+
+ def _search_refurbish_product(self, operator, value):
+ products = self.env['product.product'].search([
+ ('refurbish_product_id', operator, value)], limit=None)
+ return [('id', 'in', products.mapped('product_tmpl_id').ids)]
diff --git a/repair_refurbish/models/repair.py b/repair_refurbish/models/repair.py
new file mode 100644
index 000000000..dc0033c11
--- /dev/null
+++ b/repair_refurbish/models/repair.py
@@ -0,0 +1,85 @@
+# Copyright 2017-18 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, fields, models
+
+
+class RepairOrder(models.Model):
+ _inherit = 'repair.order'
+
+ to_refurbish = fields.Boolean()
+ location_dest_id = fields.Many2one(
+ string='Delivery Location', comodel_name='stock.location')
+ refurbish_location_dest_id = fields.Many2one(
+ string='Refurbished Delivery Location', comodel_name='stock.location')
+ refurbish_product_id = fields.Many2one(
+ string='Refurbished product', comodel_name='product.product')
+ refurbish_lot_id = fields.Many2one(
+ string='Refurbished Lot', comodel_name='stock.production.lot')
+ refurbish_move_id = fields.Many2one(
+ string='Refurbished Inventory Move', comodel_name='stock.move')
+
+ @api.onchange('product_id')
+ def onchange_product_id(self):
+ res = super().onchange_product_id()
+ self.to_refurbish = True if \
+ self.product_id.refurbish_product_id else False
+ return res
+
+ @api.onchange('to_refurbish', 'product_id')
+ def _onchange_to_refurbish(self):
+ if self.to_refurbish:
+ self.refurbish_product_id = self.product_id.refurbish_product_id
+ self.refurbish_location_dest_id = self.location_dest_id
+ self.location_dest_id = self.product_id.property_stock_refurbish
+ else:
+ self.location_dest_id = self.refurbish_location_dest_id
+ self.refurbish_product_id = False
+ self.refurbish_location_dest_id = False
+
+ @api.multi
+ def _get_refurbish_stock_move_dict(self):
+ return {
+ 'name': self.name,
+ 'product_id': self.refurbish_product_id.id,
+ 'product_uom': self.product_uom.id or
+ self.refurbish_product_id.uom_id.id,
+ 'product_uom_qty': self.product_qty,
+ 'partner_id': self.address_id and
+ self.address_id.id or False,
+ 'location_id': self.location_dest_id.id,
+ 'location_dest_id': self.refurbish_location_dest_id.id,
+ 'restrict_lot_id': self.refurbish_lot_id.id,
+ }
+
+ @api.multi
+ def action_repair_done(self):
+ res = super(RepairOrder, self.with_context(
+ force_refurbish_location_dest_id=self.location_dest_id.id
+ )).action_repair_done()
+ for repair in self:
+ if repair.to_refurbish:
+ move = self.env['stock.move'].create(
+ repair._get_refurbish_stock_move_dict())
+ move.quantity_done = repair.product_qty
+ move._action_done()
+ repair.refurbish_move_id = move.id
+ return res
+
+
+class RepairLine(models.Model):
+ _inherit = 'repair.line'
+
+ @api.onchange('type', 'repair_id')
+ def onchange_operation_type(self):
+ res = super(RepairLine, self).onchange_operation_type()
+ context = self.env.context
+ if (self.type == 'add' and 'to_refurbish' in context and
+ context['to_refurbish']):
+ self.location_dest_id = context['refurbish_location_dest_id']
+ elif (self.type == 'add' and 'to_refurbish' in context and not
+ context['to_refurbish']):
+ scrap_location_id = self.env['stock.location'].search([
+ ('usage', '=', 'customer')], limit=1)
+ self.location_dest_id = scrap_location_id
+ return res
diff --git a/repair_refurbish/models/stock_move.py b/repair_refurbish/models/stock_move.py
new file mode 100644
index 000000000..fc25c6c0a
--- /dev/null
+++ b/repair_refurbish/models/stock_move.py
@@ -0,0 +1,15 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import models, api
+
+
+class StockMove(models.Model):
+
+ _inherit = 'stock.move'
+
+ @api.model
+ def create(self, vals):
+ if 'force_refurbish_location_dest_id' in self.env.context:
+ vals['location_dest_id'] = self.env.context[
+ 'force_refurbish_location_dest_id']
+ return super().create(vals)
diff --git a/repair_refurbish/readme/CONFIGURE.rst b/repair_refurbish/readme/CONFIGURE.rst
new file mode 100644
index 000000000..1f81d11d0
--- /dev/null
+++ b/repair_refurbish/readme/CONFIGURE.rst
@@ -0,0 +1,4 @@
+#. For each product that can potentially be refurbished, define the
+ refurbished version in the product form.
+#. A default 'Refurbished' virtual location is created during module install,
+ and proposed by default on each product.
diff --git a/repair_refurbish/readme/CONTRIBUTORS.rst b/repair_refurbish/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..30781998a
--- /dev/null
+++ b/repair_refurbish/readme/CONTRIBUTORS.rst
@@ -0,0 +1,3 @@
+* Jordi Ballester Alomar
+* Lois Rilo
+* Akim Juillerat
diff --git a/repair_refurbish/readme/CREDITS.rst b/repair_refurbish/readme/CREDITS.rst
new file mode 100644
index 000000000..259e3b85f
--- /dev/null
+++ b/repair_refurbish/readme/CREDITS.rst
@@ -0,0 +1,3 @@
+The initial development of this module has been financially supported by:
+
+* Aleph Objects, Inc.
diff --git a/repair_refurbish/readme/DESCRIPTION.rst b/repair_refurbish/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..3414dba2b
--- /dev/null
+++ b/repair_refurbish/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module adds the ability to obtain refurbished product as a consequence
+of the repair of a product that was defective.
diff --git a/repair_refurbish/readme/USAGE.rst b/repair_refurbish/readme/USAGE.rst
new file mode 100644
index 000000000..6cffafe8e
--- /dev/null
+++ b/repair_refurbish/readme/USAGE.rst
@@ -0,0 +1,12 @@
+#. Create an MRP repair.
+#. Indicate a product to repair, If the product has a proposed refurbished
+ version, it will be proposed to be used. The destination location
+#. Add operations if needed.
+#. Complete the repair.
+
+The initial product will be moved to the 'Scrap' location, and the
+refurbished product will be moved from a 'Refurbish' location to the desired
+destination location.
+
+The components that were added to the repair order will be moved to the
+'Refurbish' location.
diff --git a/repair_refurbish/static/description/icon.png b/repair_refurbish/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp
zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zls4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6#
z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f#
zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC
zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv!
zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG
z-wfS
zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9
z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE#
z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz
zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t
z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN
zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q
ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k
zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG
z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff
z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1
zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO
zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$
zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV(
z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb
zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4
z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{
zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx}
z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov
zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22
zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq
zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t<
z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k
z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp
z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{}
zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/repair_refurbish/static/description/index.html b/repair_refurbish/static/description/index.html
new file mode 100644
index 000000000..2f153b08c
--- /dev/null
+++ b/repair_refurbish/static/description/index.html
@@ -0,0 +1,455 @@
+
+
+
+
+
+
+MRP Repair Refurbish
+
+
+
+
+
MRP Repair Refurbish
+
+
+

+
This module adds the ability to obtain refurbished product as a consequence
+of the repair of a product that was defective.
+
Table of contents
+
+
+
+
+- For each product that can potentially be refurbished, define the
+refurbished version in the product form.
+- A default ‘Refurbished’ virtual location is created during module install,
+and proposed by default on each product.
+
+
+
+
+
+- Create an MRP repair.
+- Indicate a product to repair, If the product has a proposed refurbished
+version, it will be proposed to be used. The destination location
+- Add operations if needed.
+- Complete the repair.
+
+
The initial product will be moved to the ‘Scrap’ location, and the
+refurbished product will be moved from a ‘Refurbish’ location to the desired
+destination location.
+
The components that were added to the repair order will be moved to the
+‘Refurbish’ location.
+
+
+
+
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.
+
+
+
+
+
+
+
+
The initial development of this module has been financially supported by:
+
+
+
+
+
This module is maintained by the OCA.
+

+
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/manufacture project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/repair_refurbish/tests/__init__.py b/repair_refurbish/tests/__init__.py
new file mode 100644
index 000000000..4e9f9ec0c
--- /dev/null
+++ b/repair_refurbish/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_repair_refurbish
diff --git a/repair_refurbish/tests/test_repair_refurbish.py b/repair_refurbish/tests/test_repair_refurbish.py
new file mode 100644
index 000000000..28bfba265
--- /dev/null
+++ b/repair_refurbish/tests/test_repair_refurbish.py
@@ -0,0 +1,91 @@
+# Copyright 2018 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo.tests.common import TransactionCase
+
+
+class TestMrpMtoWithStock(TransactionCase):
+
+ def setUp(self, *args, **kwargs):
+ super(TestMrpMtoWithStock, self).setUp(*args, **kwargs)
+ self.repair_obj = self.env['repair.order']
+ self.repair_line_obj = self.env['repair.line']
+ self.product_obj = self.env['product.product']
+ self.move_obj = self.env['stock.move']
+
+ self.stock_location_stock = self.env.ref('stock.stock_location_stock')
+ self.customer_location = self.env.ref('stock.stock_location_customers')
+ self.refurbish_loc = self.env.ref(
+ 'repair_refurbish.stock_location_refurbish')
+
+ self.refurbish_product = self.product_obj.create({
+ 'name': 'Refurbished Awesome Screen',
+ 'type': 'product',
+ })
+ self.product = self.product_obj.create({
+ 'name': 'Awesome Screen',
+ 'type': 'product',
+ 'refurbish_product_id': self.refurbish_product.id,
+ })
+ self.material = self.product_obj.create({
+ 'name': 'Materials',
+ 'type': 'consu',
+ })
+ self._update_product_qty(self.product, self.stock_location_stock, 10.0)
+
+ def _update_product_qty(self, product, location, quantity):
+ product_qty = self.env['stock.change.product.qty'].create({
+ 'location_id': location.id,
+ 'product_id': product.id,
+ 'new_quantity': quantity,
+ })
+ product_qty.change_product_qty()
+ return product_qty
+
+ def test_01_repair_refurbish(self):
+ """Tests that locations are properly set with a product to
+ refurbish, then complete repair."""
+ repair = self.repair_obj.create({
+ 'product_id': self.product.id,
+ 'product_qty': 3.0,
+ 'product_uom': self.product.uom_id.id,
+ 'location_dest_id': self.customer_location.id,
+ })
+ repair.onchange_product_id()
+ self.assertTrue(repair.to_refurbish)
+ repair._onchange_to_refurbish()
+ self.assertEqual(repair.refurbish_location_dest_id,
+ self.customer_location)
+ self.assertEqual(repair.location_dest_id,
+ self.product.property_stock_refurbish)
+ line = self.repair_line_obj.with_context(
+ to_refurbish=repair.to_refurbish,
+ refurbish_location_dest_id=repair.refurbish_location_dest_id,
+ ).new({
+ 'name': 'consume stuff to repair',
+ 'repair_id': repair.id,
+ 'type': 'add',
+ 'product_id': self.material.id,
+ 'product_uom': self.material.uom_id.id,
+ 'product_uom_qty': 1.0,
+ })
+ line.onchange_product_id()
+ line.onchange_operation_type()
+ self.assertEqual(line.location_id, repair.location_id)
+ self.assertEqual(line.location_dest_id, self.customer_location)
+ # Complete repair:
+ repair.action_validate()
+ repair.action_repair_start()
+ repair.action_repair_end()
+ moves = self.move_obj.search([('reference', '=', repair.name)])
+ self.assertEqual(len(moves), 2)
+ for m in moves:
+ self.assertEqual(m.state, 'done')
+ if m.product_id == self.product:
+ self.assertEqual(m.location_id, self.stock_location_stock)
+ self.assertEqual(m.location_dest_id, self.refurbish_loc)
+ elif m.product_id == self.refurbish_product:
+ self.assertEqual(m.location_id, self.refurbish_loc)
+ self.assertEqual(m.location_dest_id, self.customer_location)
+ else:
+ self.assertTrue(False, "Unexpected move.")
diff --git a/repair_refurbish/views/product_product_view.xml b/repair_refurbish/views/product_product_view.xml
new file mode 100644
index 000000000..f418118fe
--- /dev/null
+++ b/repair_refurbish/views/product_product_view.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ product.product.form
+ product.product
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repair_refurbish/views/product_template_view.xml b/repair_refurbish/views/product_template_view.xml
new file mode 100644
index 000000000..cafa2730b
--- /dev/null
+++ b/repair_refurbish/views/product_template_view.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ product.template.product.form
+ product.template
+
+
+
+
+
+
+
+
+
+
+
+ product.template.stock.property.form.inherit
+ product.template
+
+
+
+
+
+
+
+
+
+
diff --git a/repair_refurbish/views/repair_view.xml b/repair_refurbish/views/repair_view.xml
new file mode 100644
index 000000000..f47ce2524
--- /dev/null
+++ b/repair_refurbish/views/repair_view.xml
@@ -0,0 +1,57 @@
+
+
+
+
+ repair.order.tree
+ repair.order
+
+
+
+
+
+
+
+
+
+ repair.order.form
+ repair.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {'default_product_uom_qty': product_qty, 'to_refurbish': to_refurbish, 'refurbish_location_dest_id': location_dest_id}
+
+
+
+
+
+ repair.order.select
+ repair.order
+
+
+
+
+
+
+
+
+
+
From 065b331eafc60e50aff00f30ac5d381f508a0d02 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Tue, 12 Mar 2019 19:17:07 +0100
Subject: [PATCH 02/17] fixup! [MIG] repair_refurbish (mrp_repair_refurbish):
Migration to 12.0
---
repair_refurbish/models/stock_move.py | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/repair_refurbish/models/stock_move.py b/repair_refurbish/models/stock_move.py
index fc25c6c0a..024b76f8d 100644
--- a/repair_refurbish/models/stock_move.py
+++ b/repair_refurbish/models/stock_move.py
@@ -7,9 +7,10 @@ class StockMove(models.Model):
_inherit = 'stock.move'
- @api.model
- def create(self, vals):
+ @api.model_create_multi
+ def create(self, vals_list):
if 'force_refurbish_location_dest_id' in self.env.context:
- vals['location_dest_id'] = self.env.context[
- 'force_refurbish_location_dest_id']
- return super().create(vals)
+ for vals in vals_list:
+ vals['location_dest_id'] = self.env.context[
+ 'force_refurbish_location_dest_id']
+ return super().create(vals_list)
From 731d91c6e3123e45e2cea490b4901169499ba5ba Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Thu, 28 Mar 2019 13:07:44 +0000
Subject: [PATCH 03/17] [UPD] README.rst
---
repair_refurbish/README.rst | 11 ++++++-----
repair_refurbish/static/description/index.html | 7 ++++---
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/repair_refurbish/README.rst b/repair_refurbish/README.rst
index 906d14db2..261d0a6e9 100644
--- a/repair_refurbish/README.rst
+++ b/repair_refurbish/README.rst
@@ -14,13 +14,13 @@ MRP Repair Refurbish
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github
- :target: https://github.com/OCA/manufacture/tree/11.0/mrp_repair_refurbish
+ :target: https://github.com/OCA/manufacture/tree/12.0/repair_refurbish
:alt: OCA/manufacture
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/manufacture-11-0/manufacture-11-0-mrp_repair_refurbish
+ :target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-repair_refurbish
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/129/11.0
+ :target: https://runbot.odoo-community.org/runbot/129/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -63,7 +63,7 @@ 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -80,6 +80,7 @@ Contributors
* Jordi Ballester Alomar
* Lois Rilo
+* Akim Juillerat
Other credits
~~~~~~~~~~~~~
@@ -101,6 +102,6 @@ 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/manufacture `_ project on GitHub.
+This module is part of the `OCA/manufacture `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/repair_refurbish/static/description/index.html b/repair_refurbish/static/description/index.html
index 2f153b08c..0e18cabfe 100644
--- a/repair_refurbish/static/description/index.html
+++ b/repair_refurbish/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module adds the ability to obtain refurbished product as a consequence
of the repair of a product that was defective.
Table of contents
@@ -414,7 +414,7 @@ destination location.
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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -430,6 +430,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
@@ -446,7 +447,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
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/manufacture project on GitHub.
+
This module is part of the OCA/manufacture project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From a6fef2d92daeb270281a6ea344bd60d74960ddf5 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Thu, 28 Mar 2019 21:34:46 +0000
Subject: [PATCH 04/17] [UPD] Update repair_refurbish.pot
---
repair_refurbish/i18n/de.po | 82 +++++++++++--------
repair_refurbish/i18n/repair_refurbish.pot | 94 ++++++++++++++++++++++
2 files changed, 142 insertions(+), 34 deletions(-)
create mode 100644 repair_refurbish/i18n/repair_refurbish.pot
diff --git a/repair_refurbish/i18n/de.po b/repair_refurbish/i18n/de.po
index 62ee32573..7e129bbea 100644
--- a/repair_refurbish/i18n/de.po
+++ b/repair_refurbish/i18n/de.po
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * mrp_repair_refurbish
+# * mrp_repair_refurbish
#
msgid ""
msgstr ""
@@ -16,75 +16,89 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.3\n"
-#. module: mrp_repair_refurbish
-#: model:ir.model,name:mrp_repair_refurbish.model_product_product
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__location_dest_id
+#, fuzzy
+msgid "Delivery Location"
+msgstr "Auslieferungslagerort"
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_product_product
msgid "Product"
msgstr "Produkt"
-#. module: mrp_repair_refurbish
-#: model:ir.model,name:mrp_repair_refurbish.model_product_template
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_product_template
msgid "Product Template"
msgstr "Produktvorlage"
-#. module: mrp_repair_refurbish
-#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_normal_form_view
-#: model:ir.ui.view,arch_db:mrp_repair_refurbish.product_template_only_form_view
-#: model:stock.location,name:mrp_repair_refurbish.stock_location_refurbish
+#. module: repair_refurbish
+#: model_terms:ir.ui.view,arch_db:repair_refurbish.product_normal_form_view
+#: model_terms:ir.ui.view,arch_db:repair_refurbish.product_template_only_form_view
msgid "Refurbish"
msgstr "Wiederaufbereiten"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_property_stock_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_property_stock_refurbish
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_product__property_stock_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_template__property_stock_refurbish
msgid "Refurbish Location"
msgstr "Lagerort für Wiederaufbereitung"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_location_dest_id
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_location_dest_id
msgid "Refurbished Delivery Location"
msgstr "Auslieferungslagerort"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_move_id
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_move_id
msgid "Refurbished Inventory Move"
msgstr "Lagerbewegung"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_lot_id
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_lot_id
msgid "Refurbished Lot"
msgstr "Wiederaufbereitetes Los"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_product_refurbish_product_id
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_product_template_refurbish_product_id
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_product__refurbish_product_id
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_template__refurbish_product_id
msgid "Refurbished Product"
msgstr "Wiederaufbereitetes Produkt"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_refurbish_product_id
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_product_id
msgid "Refurbished product"
msgstr "Wiederaufbereitetes Produkt"
-#. module: mrp_repair_refurbish
-#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair_line
-msgid "Repair Line"
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_repair_line
+#, fuzzy
+msgid "Repair Line (parts)"
msgstr "Instandsetzungslinie"
-#. module: mrp_repair_refurbish
-#: model:ir.model,name:mrp_repair_refurbish.model_mrp_repair
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_repair_order
msgid "Repair Order"
msgstr "Reparaturauftrag"
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_product_property_stock_refurbish
-#: model:ir.model.fields,help:mrp_repair_refurbish.field_product_template_property_stock_refurbish
-msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by repair orders when refurbishing takes place."
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_stock_move
+msgid "Stock Move"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,help:repair_refurbish.field_product_product__property_stock_refurbish
+#: model:ir.model.fields,help:repair_refurbish.field_product_template__property_stock_refurbish
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated by repair orders when refurbishing takes "
+"place."
msgstr ""
"Dieser Lagerort wird anstatt des Standardlagerortes als Quelllager für "
"Lagerbewegungen verwendet, die durch Reparaturaufträge bei der "
"Wiederaufbereitung erzeugt werden."
-#. module: mrp_repair_refurbish
-#: model:ir.model.fields,field_description:mrp_repair_refurbish.field_mrp_repair_to_refurbish
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__to_refurbish
msgid "To Refurbish"
msgstr "Wiederaufbereiten"
diff --git a/repair_refurbish/i18n/repair_refurbish.pot b/repair_refurbish/i18n/repair_refurbish.pot
new file mode 100644
index 000000000..5cbe0602e
--- /dev/null
+++ b/repair_refurbish/i18n/repair_refurbish.pot
@@ -0,0 +1,94 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * repair_refurbish
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \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: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__location_dest_id
+msgid "Delivery Location"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_product_product
+msgid "Product"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: repair_refurbish
+#: model_terms:ir.ui.view,arch_db:repair_refurbish.product_normal_form_view
+#: model_terms:ir.ui.view,arch_db:repair_refurbish.product_template_only_form_view
+msgid "Refurbish"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_product__property_stock_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_template__property_stock_refurbish
+msgid "Refurbish Location"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_location_dest_id
+msgid "Refurbished Delivery Location"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_move_id
+msgid "Refurbished Inventory Move"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_lot_id
+msgid "Refurbished Lot"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_product__refurbish_product_id
+#: model:ir.model.fields,field_description:repair_refurbish.field_product_template__refurbish_product_id
+msgid "Refurbished Product"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__refurbish_product_id
+msgid "Refurbished product"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_repair_line
+msgid "Repair Line (parts)"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_repair_order
+msgid "Repair Order"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model,name:repair_refurbish.model_stock_move
+msgid "Stock Move"
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,help:repair_refurbish.field_product_product__property_stock_refurbish
+#: model:ir.model.fields,help:repair_refurbish.field_product_template__property_stock_refurbish
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by repair orders when refurbishing takes place."
+msgstr ""
+
+#. module: repair_refurbish
+#: model:ir.model.fields,field_description:repair_refurbish.field_repair_order__to_refurbish
+msgid "To Refurbish"
+msgstr ""
+
From 20fe31b178effda26731d932592220bf4281a74c Mon Sep 17 00:00:00 2001
From: Bhavesh Odedra
Date: Fri, 12 Apr 2019 23:03:52 +0530
Subject: [PATCH 05/17] [FIX] repair_refurbish, product with tracking show
error when end repair order
---
repair_refurbish/__manifest__.py | 2 +-
repair_refurbish/models/repair.py | 13 +++++++++++--
repair_refurbish/readme/CONTRIBUTORS.rst | 1 +
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/repair_refurbish/__manifest__.py b/repair_refurbish/__manifest__.py
index 10b60bdbc..09ac4ed0f 100644
--- a/repair_refurbish/__manifest__.py
+++ b/repair_refurbish/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "MRP Repair Refurbish",
"summary": "Create refurbished products during repair",
- "version": "12.0.1.0.1",
+ "version": "12.0.1.1.1",
"category": "Manufacturing",
"website": "https://github.com/OCA/manufacture",
"author": "Eficent, Odoo Community Association (OCA)",
diff --git a/repair_refurbish/models/repair.py b/repair_refurbish/models/repair.py
index dc0033c11..01dcbe825 100644
--- a/repair_refurbish/models/repair.py
+++ b/repair_refurbish/models/repair.py
@@ -49,8 +49,17 @@ class RepairOrder(models.Model):
self.address_id.id or False,
'location_id': self.location_dest_id.id,
'location_dest_id': self.refurbish_location_dest_id.id,
- 'restrict_lot_id': self.refurbish_lot_id.id,
- }
+ 'move_line_ids': [(0, 0, {
+ 'product_id': self.refurbish_product_id.id,
+ 'lot_id': self.refurbish_lot_id.id,
+ 'product_uom_qty': self.product_qty,
+ 'product_uom_id': self.product_uom.id or
+ self.refurbish_product_id.uom_id.id,
+ 'qty_done': self.product_qty,
+ 'package_id': False,
+ 'result_package_id': False,
+ 'location_id': self.location_dest_id.id,
+ 'location_dest_id': self.refurbish_location_dest_id.id})]}
@api.multi
def action_repair_done(self):
diff --git a/repair_refurbish/readme/CONTRIBUTORS.rst b/repair_refurbish/readme/CONTRIBUTORS.rst
index 30781998a..2c6fe617d 100644
--- a/repair_refurbish/readme/CONTRIBUTORS.rst
+++ b/repair_refurbish/readme/CONTRIBUTORS.rst
@@ -1,3 +1,4 @@
* Jordi Ballester Alomar
* Lois Rilo
* Akim Juillerat
+* Bhavesh Odedra
From 3b1f53ecdbe3b8e8dafd28f580aa045e33d31c25 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 22 Apr 2019 07:07:44 +0000
Subject: [PATCH 06/17] [UPD] README.rst
---
repair_refurbish/README.rst | 1 +
repair_refurbish/static/description/index.html | 1 +
2 files changed, 2 insertions(+)
diff --git a/repair_refurbish/README.rst b/repair_refurbish/README.rst
index 261d0a6e9..72524df28 100644
--- a/repair_refurbish/README.rst
+++ b/repair_refurbish/README.rst
@@ -81,6 +81,7 @@ Contributors
* Jordi Ballester Alomar
* Lois Rilo
* Akim Juillerat
+* Bhavesh Odedra
Other credits
~~~~~~~~~~~~~
diff --git a/repair_refurbish/static/description/index.html b/repair_refurbish/static/description/index.html
index 0e18cabfe..802a7d570 100644
--- a/repair_refurbish/static/description/index.html
+++ b/repair_refurbish/static/description/index.html
@@ -431,6 +431,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
Jordi Ballester Alomar <jordi.ballester@eficent.com>
Lois Rilo <lois.rilo@eficent.com>
Akim Juillerat <akim.juillerat@camptocamp.com>
+Bhavesh Odedra <bodedra@opensourceintegrators.com>
From e50727eaf4c2d6141193f00cf719c285212b3a87 Mon Sep 17 00:00:00 2001
From: remi-filament <30716308+remi-filament@users.noreply.github.com>
Date: Mon, 29 Apr 2019 10:18:19 +0200
Subject: [PATCH 07/17] Fix pyflakes issue
---
repair_refurbish/models/product_template.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/repair_refurbish/models/product_template.py b/repair_refurbish/models/product_template.py
index a41024d39..3b6935e72 100644
--- a/repair_refurbish/models/product_template.py
+++ b/repair_refurbish/models/product_template.py
@@ -10,7 +10,8 @@ class ProductTemplate(models.Model):
refurbish_product_id = fields.Many2one(
comodel_name='product.product', string='Refurbished Product',
compute='_compute_refurbish_product',
- inverse='_set_refurbish_product', search='_search_refurbish_product',
+ inverse='_inverse_refurbish_product',
+ search='_search_refurbish_product',
domain="[('type', '=', 'product')]")
property_stock_refurbish = fields.Many2one(
@@ -31,7 +32,7 @@ class ProductTemplate(models.Model):
template.product_variant_ids.refurbish_product_id
@api.multi
- def _set_refurbish_product(self):
+ def _inverse_refurbish_product(self):
for rec in self:
if len(rec.product_variant_ids) == 1:
rec.product_variant_ids.refurbish_product_id = \
From 6581f8ca01262899962572657aa0e45a86efb86e Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 29 Jul 2019 03:10:43 +0000
Subject: [PATCH 08/17] [UPD] README.rst
---
repair_refurbish/static/description/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/repair_refurbish/static/description/index.html b/repair_refurbish/static/description/index.html
index 802a7d570..6799e77ed 100644
--- a/repair_refurbish/static/description/index.html
+++ b/repair_refurbish/static/description/index.html
@@ -3,7 +3,7 @@
-
+
MRP Repair Refurbish