diff --git a/addons/mrp_subcontracting_dropshipping/models/purchase.py b/addons/mrp_subcontracting_dropshipping/models/purchase.py index c8cf393310c..9548e237699 100644 --- a/addons/mrp_subcontracting_dropshipping/models/purchase.py +++ b/addons/mrp_subcontracting_dropshipping/models/purchase.py @@ -18,30 +18,15 @@ class PurchaseOrder(models.Model): order.dest_address_id = subcontractor_ids if len(subcontractor_ids) == 1 else False super(PurchaseOrder, self - dropship_subcontract_pos)._compute_dest_address_id() + @api.onchange('picking_type_id') + def onchange_picking_type_id(self): + if self.default_location_dest_id_is_subcontracting_loc: + return { + 'warning': {'title': _('Warning'), 'message': _('Please note this purchase order is for subcontracting purposes.')} + } + def _get_destination_location(self): self.ensure_one() - if not self.dest_address_id: - return super()._get_destination_location() - - mrp_production_ids = self._get_mrp_productions(remove_archived_picking_types=False) - if mrp_production_ids: - if self.dest_address_id in mrp_production_ids.bom_id.subcontractor_ids: - return self.dest_address_id.property_stock_subcontractor.id - elif self.sale_order_count: - return super()._get_destination_location() - - in_bom_products = False - not_in_bom_products = self.env['purchase.order.line'] - for order_line in self.order_line: - if any(bom_line.bom_id.type == 'subcontract' and self.dest_address_id in bom_line.bom_id.subcontractor_ids for bom_line in order_line.product_id.bom_line_ids.filtered(lambda line: line.company_id == self.company_id)): - in_bom_products = True - elif not order_line.display_type: - not_in_bom_products |= order_line - if in_bom_products and not_in_bom_products: - raise UserError( - _("It appears some components in this RFQ are not meant for subcontracting. Please create a separate order for these.") + - '\n\n' + '\n'.join(not_in_bom_products.mapped('name')) - ) - elif in_bom_products: + if self.default_location_dest_id_is_subcontracting_loc: return self.dest_address_id.property_stock_subcontractor.id return super()._get_destination_location() diff --git a/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py b/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py index a776b38aee9..a24498d617f 100644 --- a/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py +++ b/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py @@ -324,15 +324,9 @@ class TestSubcontractingDropshippingFlows(TestMrpSubcontractingCommon): ], }]) - dropship_picking_type = self.env['stock.picking.type'].search([ - ('company_id', '=', self.env.company.id), - ('default_location_src_id.usage', '=', 'supplier'), - ('default_location_dest_id.usage', '=', 'customer'), - ], limit=1, order='sequence') - po = self.env['purchase.order'].create({ "partner_id": subcontractor.id, - "picking_type_id": dropship_picking_type.id, + "picking_type_id": self.env.company.dropship_subcontractor_pick_type_id.id, "dest_address_id": super_subcontractor.id, "order_line": [(0, 0, { 'product_id': product.id,