summaryrefslogtreecommitdiff
path: root/addons/mrp_subcontracting
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-09-20 17:33:22 +0200
committerChristophe Simonis <chs@odoo.com>2019-09-20 17:34:45 +0200
commit64e43808b79badb5869a8d73cc1cc3f3b3aa8e12 (patch)
tree9a22d5f6c03073a4d10faedea8df23a5211e8b8f /addons/mrp_subcontracting
parent944891ced081cda3b8b3db5faf3b7ac23b6b4ce8 (diff)
parent58a83d12228fbbd4e9dde542e133d264204ee0f3 (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.po28
-rw-r--r--addons/mrp_subcontracting/i18n/lb.po219
-rw-r--r--addons/mrp_subcontracting/models/mrp_bom.py4
-rw-r--r--addons/mrp_subcontracting/models/stock_move.py25
-rw-r--r--addons/mrp_subcontracting/models/stock_picking.py23
-rw-r--r--addons/mrp_subcontracting/tests/test_subcontracting.py30
-rw-r--r--addons/mrp_subcontracting/views/stock_picking_views.xml2
-rw-r--r--addons/mrp_subcontracting/wizard/stock_picking_return.py24
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