diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-09-20 17:33:22 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-09-20 17:34:45 +0200 |
| commit | 64e43808b79badb5869a8d73cc1cc3f3b3aa8e12 (patch) | |
| tree | 9a22d5f6c03073a4d10faedea8df23a5211e8b8f /addons/mrp_subcontracting | |
| parent | 944891ced081cda3b8b3db5faf3b7ac23b6b4ce8 (diff) | |
| parent | 58a83d12228fbbd4e9dde542e133d264204ee0f3 (diff) | |
[MERGE] forward port branch saas-12.5 up to 58a83d12228
Diffstat (limited to 'addons/mrp_subcontracting')
| -rw-r--r-- | addons/mrp_subcontracting/i18n/cs.po | 28 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/i18n/lb.po | 219 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/models/mrp_bom.py | 4 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/models/stock_move.py | 25 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/models/stock_picking.py | 23 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/tests/test_subcontracting.py | 30 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/views/stock_picking_views.xml | 2 | ||||
| -rw-r--r-- | addons/mrp_subcontracting/wizard/stock_picking_return.py | 24 |
8 files changed, 323 insertions, 32 deletions
diff --git a/addons/mrp_subcontracting/i18n/cs.po b/addons/mrp_subcontracting/i18n/cs.po index ba6c5b022af..741b11edce9 100644 --- a/addons/mrp_subcontracting/i18n/cs.po +++ b/addons/mrp_subcontracting/i18n/cs.po @@ -2,12 +2,18 @@ # This file contains the translation of the following modules: # * mrp_subcontracting # +# Translators: +# Martin Trigaux, 2019 +# Jan Horzinka <jan.horzinka@centrum.cz>, 2019 +# trendspotter <j.podhorecky@volny.cz>, 2019 +# msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~12.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-26 08:16+0000\n" "PO-Revision-Date: 2019-08-26 09:12+0000\n" +"Last-Translator: trendspotter <j.podhorecky@volny.cz>, 2019\n" "Language-Team: Czech (https://www.transifex.com/odoo/teams/41243/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,12 +43,12 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_mrp_bom msgid "Bill of Material" -msgstr "" +msgstr "Kusovník" #. module: mrp_subcontracting #: model:ir.model.fields,field_description:mrp_subcontracting.field_mrp_bom__type msgid "BoM Type" -msgstr "" +msgstr "Druh kusovníku" #. module: mrp_subcontracting #: model:ir.model.fields,help:mrp_subcontracting.field_product_supplierinfo__is_subcontractor @@ -53,12 +59,12 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_res_company msgid "Companies" -msgstr "" +msgstr "Společnosti" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_res_partner msgid "Contact" -msgstr "" +msgstr "Kontakt" #. module: mrp_subcontracting #: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_picking__display_action_record_components @@ -69,7 +75,7 @@ msgstr "" #: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 #, python-format msgid "Make To Order" -msgstr "" +msgstr "Na objednávku - MTO" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_stock_move_line @@ -85,7 +91,7 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_mrp_product_produce msgid "Record Production" -msgstr "" +msgstr "Záznam výroby" #. module: mrp_subcontracting #: model_terms:ir.ui.view,arch_db:mrp_subcontracting.stock_picking_form_view @@ -124,7 +130,7 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_stock_return_picking msgid "Return Picking" -msgstr "" +msgstr "Vrátit dodávku" #. module: mrp_subcontracting #: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 @@ -140,7 +146,7 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Pohyb zásob" #. module: mrp_subcontracting #: model:ir.model.fields,field_description:mrp_subcontracting.field_product_supplierinfo__is_subcontractor @@ -188,7 +194,7 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_product_supplierinfo msgid "Supplier Pricelist" -msgstr "" +msgstr "Ceník dodavatele" #. module: mrp_subcontracting #: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_move__is_subcontract @@ -206,12 +212,12 @@ msgstr "" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_stock_picking msgid "Transfer" -msgstr "" +msgstr "Převod" #. module: mrp_subcontracting #: model:ir.model,name:mrp_subcontracting.model_stock_warehouse msgid "Warehouse" -msgstr "" +msgstr "Sklad" #. module: mrp_subcontracting #: model:ir.model.fields,field_description:mrp_subcontracting.field_mrp_product_produce__subcontract_move_id diff --git a/addons/mrp_subcontracting/i18n/lb.po b/addons/mrp_subcontracting/i18n/lb.po new file mode 100644 index 00000000000..2ea0cbb6429 --- /dev/null +++ b/addons/mrp_subcontracting/i18n/lb.po @@ -0,0 +1,219 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mrp_subcontracting +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-26 08:16+0000\n" +"PO-Revision-Date: 2019-08-26 09:12+0000\n" +"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_move.py:0 +#, python-format +msgid "" +"\n" +"You have to use 'Records Components' button in order to register quantity for a\n" +"subcontracted product(s) with tracked component(s):\n" +" %s.\n" +"If you want to process more than initially planned, you\n" +"can use the edit + unlock buttons in order to adapt the initial demand on the\n" +"operations." +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/res_company.py:0 +#, python-format +msgid "%s: Subcontracting Location" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_mrp_bom +msgid "Bill of Material" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_mrp_bom__type +msgid "BoM Type" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,help:mrp_subcontracting.field_product_supplierinfo__is_subcontractor +msgid "" +"Choose a vendor of type subcontractor if you want to subcontract the product" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_res_company +msgid "Companies" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_res_partner +msgid "Contact" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_picking__display_action_record_components +msgid "Display Action Record Components" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 +#, python-format +msgid "Make To Order" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_move.py:0 +#, python-format +msgid "Raw Materials for %s" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_mrp_product_produce +msgid "Record Production" +msgstr "" + +#. module: mrp_subcontracting +#: model_terms:ir.ui.view,arch_db:mrp_subcontracting.stock_picking_form_view +msgid "Record components" +msgstr "" + +#. module: mrp_subcontracting +#: model_terms:ir.ui.view,arch_db:mrp_subcontracting.stock_picking_form_view +msgid "Register components for subcontracted product" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_warehouse__subcontracting_route_id +#, python-format +msgid "Resupply Subcontractor" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 +#: model:stock.location.route,name:mrp_subcontracting.route_resupply_subcontractor_mto +#, python-format +msgid "Resupply Subcontractor on Order" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_warehouse__subcontracting_to_resupply +msgid "Resupply Subcontractors" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,help:mrp_subcontracting.field_stock_warehouse__subcontracting_to_resupply +msgid "Resupply subcontractors with components" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_stock_return_picking +msgid "Return Picking" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 +#, python-format +msgid "Sequence subcontracting" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_move__show_subcontracting_details_visible +msgid "Show Subcontracting Details Visible" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_product_supplierinfo__is_subcontractor +msgid "Subcontracted" +msgstr "" + +#. module: mrp_subcontracting +#: code:addons/mrp_subcontracting/models/stock_warehouse.py:0 +#: model:ir.model.fields.selection,name:mrp_subcontracting.selection__mrp_bom__type__subcontract +#, python-format +msgid "Subcontracting" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_res_company__subcontracting_location_id +msgid "Subcontracting Location" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_warehouse__subcontracting_mto_pull_id +msgid "Subcontracting MTO Rule" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_warehouse__subcontracting_pull_id +msgid "Subcontracting MTS Rule" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_warehouse__subcontracting_type_id +msgid "Subcontracting Operation Type" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_res_partner__property_stock_subcontractor +#: model:ir.model.fields,field_description:mrp_subcontracting.field_res_users__property_stock_subcontractor +msgid "Subcontractor Location" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_mrp_bom__subcontractor_ids +msgid "Subcontractors" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_product_supplierinfo +msgid "Supplier Pricelist" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_stock_move__is_subcontract +msgid "The move is a subcontract receipt" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,help:mrp_subcontracting.field_res_partner__property_stock_subcontractor +#: model:ir.model.fields,help:mrp_subcontracting.field_res_users__property_stock_subcontractor +msgid "" +"The stock location used as source and destination when sending goods " +"to this contact during a subcontracting process." +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model,name:mrp_subcontracting.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: mrp_subcontracting +#: model:ir.model.fields,field_description:mrp_subcontracting.field_mrp_product_produce__subcontract_move_id +msgid "stock move from the subcontract picking" +msgstr "" diff --git a/addons/mrp_subcontracting/models/mrp_bom.py b/addons/mrp_subcontracting/models/mrp_bom.py index 7088d4bb93d..3375653d737 100644 --- a/addons/mrp_subcontracting/models/mrp_bom.py +++ b/addons/mrp_subcontracting/models/mrp_bom.py @@ -14,4 +14,6 @@ class MrpBom(models.Model): domain = self._bom_find_domain(product_tmpl=product_tmpl, product=product, picking_type=picking_type, company_id=company_id, bom_type=bom_type) if subcontractor: domain = AND([domain, [('subcontractor_ids', 'in', subcontractor.id)]]) - return self.search(domain, order='sequence, product_id', limit=1) + return self.search(domain, order='sequence, product_id', limit=1) + else: + return self.env['mrp.bom'] diff --git a/addons/mrp_subcontracting/models/stock_move.py b/addons/mrp_subcontracting/models/stock_move.py index 80f8badbd24..9cb940781cf 100644 --- a/addons/mrp_subcontracting/models/stock_move.py +++ b/addons/mrp_subcontracting/models/stock_move.py @@ -11,7 +11,7 @@ from odoo.tools.float_utils import float_compare, float_is_zero class StockMove(models.Model): _inherit = 'stock.move' - is_subcontract = fields.Boolean('The move is a subcontract receipt', copy=False) + is_subcontract = fields.Boolean('The move is a subcontract receipt') show_subcontracting_details_visible = fields.Boolean( compute='_compute_show_subcontracting_details_visible' ) @@ -38,12 +38,23 @@ class StockMove(models.Model): move.show_details_visible = True return res + def copy(self, default=None): + self.ensure_one() + if not self.is_subcontract or 'location_id' in default: + return super(StockMove, self).copy(default=default) + if not default: + default = {} + default['location_id'] = self.picking_id.location_id.id + return super(StockMove, self).copy(default=default) + def write(self, values): """ If the initial demand is updated then also update the linked subcontract order to the new quantity. """ res = super(StockMove, self).write(values) if 'product_uom_qty' in values: + if self.env.context.get('cancel_backorder') is False: + return res self.filtered(lambda m: m.is_subcontract and m.state not in ['draft', 'cancel', 'done'])._update_subcontract_order_qty() return res @@ -88,15 +99,18 @@ class StockMove(models.Model): for move in self: if move.location_id.usage != 'supplier' or move.location_dest_id.usage == 'supplier': continue - if not move.picking_id or self.env.context.get('do_not_create_subcontract_order'): + if move.move_orig_ids.production_id: continue bom = move._get_subcontract_bom() if not bom: continue + if float_is_zero(move.product_qty, precision_rounding=move.product_uom.rounding) and\ + move.picking_id.immediate_transfer is True: + raise UserError(_("To subcontract, use a planned transfer.")) subcontract_details_per_picking[move.picking_id].append((move, bom)) move.write({ 'is_subcontract': True, - 'location_id': self.picking_id.partner_id.property_stock_subcontractor.id + 'location_id': move.picking_id.partner_id.with_context(force_company=move.company_id.id).property_stock_subcontractor.id }) for picking, subcontract_details in subcontract_details_per_picking.items(): picking._subcontracted_produce(subcontract_details) @@ -154,6 +168,11 @@ operations.""") % ('\n'.join(overprocessed_moves.mapped('product_id.display_name self.ensure_one() return any(m.has_tracking != 'none' for m in self.move_orig_ids.production_id.move_raw_ids) + def _prepare_extra_move_vals(self, qty): + vals = super(StockMove, self)._prepare_extra_move_vals(qty) + vals['location_id'] = self.location_id.id + return vals + def _should_bypass_reservation(self): """ If the move is subcontracted then ignore the reservation. """ should_bypass_reservation = super(StockMove, self)._should_bypass_reservation() diff --git a/addons/mrp_subcontracting/models/stock_picking.py b/addons/mrp_subcontracting/models/stock_picking.py index 734a0e51933..f638eda03a4 100644 --- a/addons/mrp_subcontracting/models/stock_picking.py +++ b/addons/mrp_subcontracting/models/stock_picking.py @@ -43,12 +43,7 @@ class StockPicking(models.Model): return super(StockPicking, self).action_cancel() def action_done(self): - # action_done with an extra move will trigger two methods that - # create/modify a subcontracting order, _action_confirm and a write on - # product_uom_qty. This context will be used by _action_confirm and it - # will not create a subcontract order. Instead the existing order will - # be updated in the stock.move write during the merge move. - res = super(StockPicking, self.with_context(do_not_create_subcontract_order=True)).action_done() + res = super(StockPicking, self).action_done() productions = self.env['mrp.production'] for picking in self: for move in picking.move_lines: @@ -56,8 +51,8 @@ class StockPicking(models.Model): continue production = move.move_orig_ids.production_id if move._has_tracked_subcontract_components(): - move.move_orig_ids.move_line_ids.unlink() - move_finished_ids = move.move_orig_ids + move.move_orig_ids.filtered(lambda m: m.state not in ('done', 'cancel')).move_line_ids.unlink() + move_finished_ids = move.move_orig_ids.filtered(lambda m: m.state not in ('done', 'cancel')) for ml in move.move_line_ids: ml.copy({ 'picking_id': False, @@ -81,7 +76,10 @@ class StockPicking(models.Model): produce._record_production() productions |= production for subcontracted_production in productions: - subcontracted_production.button_mark_done() + if subcontracted_production.state == 'progress': + subcontracted_production.post_inventory() + else: + subcontracted_production.button_mark_done() # For concistency, set the date on production move before the date # on picking. (Tracability report + Product Moves menu item) minimum_date = min(picking.move_line_ids.mapped('date')) @@ -123,12 +121,13 @@ class StockPicking(models.Model): product = subcontract_move.product_id warehouse = self._get_warehouse(subcontract_move) vals = { + 'company_id': subcontract_move.company_id.id, 'procurement_group_id': group.id, 'product_id': product.id, 'product_uom_id': subcontract_move.product_uom.id, 'bom_id': bom.id, - 'location_src_id': subcontract_move.picking_id.partner_id.property_stock_subcontractor.id, - 'location_dest_id': subcontract_move.picking_id.partner_id.property_stock_subcontractor.id, + 'location_src_id': subcontract_move.picking_id.partner_id.with_context(force_company=subcontract_move.company_id.id).property_stock_subcontractor.id, + 'location_dest_id': subcontract_move.picking_id.partner_id.with_context(force_company=subcontract_move.company_id.id).property_stock_subcontractor.id, 'product_qty': subcontract_move.product_uom_qty, 'picking_type_id': warehouse.subcontracting_type_id.id } @@ -137,7 +136,7 @@ class StockPicking(models.Model): def _subcontracted_produce(self, subcontract_details): self.ensure_one() for move, bom in subcontract_details: - mo = self.env['mrp.production'].create(self._prepare_subcontract_mo_vals(move, bom)) + mo = self.env['mrp.production'].with_context(force_company=move.company_id.id).create(self._prepare_subcontract_mo_vals(move, bom)) self.env['stock.move'].create(mo._get_moves_raw_values()) mo.action_confirm() diff --git a/addons/mrp_subcontracting/tests/test_subcontracting.py b/addons/mrp_subcontracting/tests/test_subcontracting.py index 148f99e1816..785599cff5c 100644 --- a/addons/mrp_subcontracting/tests/test_subcontracting.py +++ b/addons/mrp_subcontracting/tests/test_subcontracting.py @@ -510,6 +510,36 @@ class TestSubcontractingFlows(TestMrpSubcontractingCommon): self.assertEqual(move_comp1.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_produced_ids.name, 'LOT F2') self.assertEqual(move_comp2.move_line_ids.filtered(lambda ml: not ml.product_uom_qty).lot_produced_ids.name, 'LOT F2') + def test_flow_8(self): + resupply_sub_on_order_route = self.env['stock.location.route'].search([('name', '=', 'Resupply Subcontractor on Order')]) + (self.comp1 + self.comp2).write({'route_ids': [(4, resupply_sub_on_order_route.id, None)]}) + + # Create a receipt picking from the subcontractor + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = self.subcontractor_partner1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 5 + picking_receipt = picking_form.save() + picking_receipt.action_confirm() + + picking_receipt.move_lines.quantity_done = 3 + backorder_wiz = picking_receipt.button_validate() + backorder_wiz = self.env['stock.backorder.confirmation'].browse(backorder_wiz['res_id']) + backorder_wiz.process() + + backorder = self.env['stock.picking'].search([('backorder_id', '=', picking_receipt.id)]) + self.assertTrue(backorder) + self.assertEqual(backorder.move_lines.product_uom_qty, 2) + subcontract_order = backorder.move_lines.move_orig_ids.production_id.filtered(lambda p: p.state != 'done') + self.assertTrue(subcontract_order) + self.assertEqual(subcontract_order.product_uom_qty, 5) + self.assertEqual(subcontract_order.qty_produced, 3) + backorder.move_lines.quantity_done = 2 + backorder.action_done() + self.assertTrue(picking_receipt.move_lines.move_orig_ids.production_id.state == 'done') + class TestSubcontractingTracking(TransactionCase): def setUp(self): super(TestSubcontractingTracking, self).setUp() diff --git a/addons/mrp_subcontracting/views/stock_picking_views.xml b/addons/mrp_subcontracting/views/stock_picking_views.xml index 29a6e908953..2884cc3f6ef 100644 --- a/addons/mrp_subcontracting/views/stock_picking_views.xml +++ b/addons/mrp_subcontracting/views/stock_picking_views.xml @@ -12,7 +12,7 @@ <xpath expr="//field[@name='move_ids_without_package']//tree//button[@name='action_show_details']" position="after"> <field name="show_subcontracting_details_visible" invisible="1"/> <button name="action_show_subcontract_details" string="Register components for subcontracted product" type="object" icon="fa-sitemap" - attrs="{'invisible': [('show_subcontracting_details_visible', '=', False)]}"/> + width="0" attrs="{'invisible': [('show_subcontracting_details_visible', '=', False)]}"/> </xpath> </field> </record> diff --git a/addons/mrp_subcontracting/wizard/stock_picking_return.py b/addons/mrp_subcontracting/wizard/stock_picking_return.py index 2e55861c950..94162fe308d 100644 --- a/addons/mrp_subcontracting/wizard/stock_picking_return.py +++ b/addons/mrp_subcontracting/wizard/stock_picking_return.py @@ -1,14 +1,30 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models - +from odoo import api, models +from odoo.osv.expression import OR class ReturnPicking(models.TransientModel): _inherit = 'stock.return.picking' + @api.onchange('picking_id') + def _onchange_picking_id(self): + res = super(ReturnPicking, self)._onchange_picking_id() + if not any(self.product_return_moves.filtered(lambda r: r.quantity > 0).move_id.mapped('is_subcontract')): + return res + subcontract_location = self.picking_id.partner_id.with_context(force_company=self.picking_id.company_id.id).property_stock_subcontractor + self.location_id = subcontract_location.id + domain_location = OR([ + ['|', ('id', '=', self.original_location_id.id), ('return_location', '=', True)], + [('id', '=', subcontract_location.id)] + ]) + if not res: + res = {'domain': {'location_id': domain_location}} + else: + res['domain'] = {'location_id': domain_location} + return res + def _prepare_move_default_values(self, return_line, new_picking): vals = super(ReturnPicking, self)._prepare_move_default_values(return_line, new_picking) - if return_line.move_id.is_subcontract: - vals['location_dest_id'] = self.picking_id.partner_id.property_stock_subcontractor.id + vals['is_subcontract'] = False return vals |
