diff --git a/addons/mrp_subcontracting_dropshipping/__manifest__.py b/addons/mrp_subcontracting_dropshipping/__manifest__.py index c9da839f96f..069264d50ff 100644 --- a/addons/mrp_subcontracting_dropshipping/__manifest__.py +++ b/addons/mrp_subcontracting_dropshipping/__manifest__.py @@ -13,6 +13,7 @@ 'data': [ 'data/mrp_subcontracting_dropshipping_data.xml', 'views/stock_warehouse_views.xml', + 'views/purchase_order_views.xml', ], 'installable': True, 'auto_install': True, diff --git a/addons/mrp_subcontracting_dropshipping/models/__init__.py b/addons/mrp_subcontracting_dropshipping/models/__init__.py index e1335cac5a3..11ea5614f0f 100644 --- a/addons/mrp_subcontracting_dropshipping/models/__init__.py +++ b/addons/mrp_subcontracting_dropshipping/models/__init__.py @@ -6,3 +6,4 @@ from . import res_company from . import stock_warehouse from . import purchase from . import stock_rule +from . import stock_orderpoint diff --git a/addons/mrp_subcontracting_dropshipping/models/purchase.py b/addons/mrp_subcontracting_dropshipping/models/purchase.py index 411057b8787..dbed48c5e79 100644 --- a/addons/mrp_subcontracting_dropshipping/models/purchase.py +++ b/addons/mrp_subcontracting_dropshipping/models/purchase.py @@ -1,13 +1,23 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, _ +from odoo import api, fields, models, _ from odoo.exceptions import UserError class PurchaseOrder(models.Model): _inherit = 'purchase.order' + default_location_dest_id_is_subcontracting_loc = fields.Boolean(related='picking_type_id.default_location_dest_id.is_subcontracting_location') + + @api.depends('default_location_dest_id_is_subcontracting_loc') + def _compute_dest_address_id(self): + dropship_subcontract_pos = self.filtered(lambda po: po.default_location_dest_id_is_subcontracting_loc) + for order in dropship_subcontract_pos: + subcontractor_ids = order.picking_type_id.default_location_dest_id.subcontractor_ids + order.dest_address_id = subcontractor_ids if len(subcontractor_ids) == 1 else False + super(PurchaseOrder, self - dropship_subcontract_pos)._compute_dest_address_id() + def _get_destination_location(self): self.ensure_one() if not self.dest_address_id: diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_orderpoint.py b/addons/mrp_subcontracting_dropshipping/models/stock_orderpoint.py new file mode 100644 index 00000000000..a1b8f7e0bc6 --- /dev/null +++ b/addons/mrp_subcontracting_dropshipping/models/stock_orderpoint.py @@ -0,0 +1,15 @@ +# -*- encoding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class StockWarehouseOrderpoint(models.Model): + _inherit = 'stock.warehouse.orderpoint' + + def _prepare_procurement_values(self, date=False, group=False): + vals = super()._prepare_procurement_values(date, group) + if not vals.get('partner_id') and self.location_id.is_subcontracting_location: + subcontractors = self.location_id.subcontractor_ids + vals['partner_id'] = subcontractors.id if len(subcontractors) == 1 else False + return vals diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_picking.py b/addons/mrp_subcontracting_dropshipping/models/stock_picking.py index 4f337a3f039..b81c9cd2819 100644 --- a/addons/mrp_subcontracting_dropshipping/models/stock_picking.py +++ b/addons/mrp_subcontracting_dropshipping/models/stock_picking.py @@ -7,6 +7,11 @@ from odoo import models class StockPicking(models.Model): _inherit = 'stock.picking' + def _compute_is_dropship(self): + dropship_subcontract_pickings = self.filtered(lambda p: p.location_dest_id.is_subcontracting_location and p.location_id.usage == 'supplier') + dropship_subcontract_pickings.is_dropship = True + super(StockPicking, self - dropship_subcontract_pickings)._compute_is_dropship() + def _get_warehouse(self, subcontract_move): if subcontract_move.sale_line_id: return subcontract_move.sale_line_id.order_id.warehouse_id diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_rule.py b/addons/mrp_subcontracting_dropshipping/models/stock_rule.py index 906b60f73f8..91dac0321b2 100644 --- a/addons/mrp_subcontracting_dropshipping/models/stock_rule.py +++ b/addons/mrp_subcontracting_dropshipping/models/stock_rule.py @@ -11,3 +11,9 @@ class StockRule(models.Model): if 'partner_id' not in values[0] and self.location_dest_id.is_subcontracting_location: values[0]['partner_id'] = values[0]['group_id'].partner_id.id return super()._prepare_purchase_order(company_id, origins, values) + + def _make_po_get_domain(self, company_id, values, partner): + domain = super()._make_po_get_domain(company_id, values, partner) + if values.get('partner_id', False): + domain += (('dest_address_id', '=', values.get('partner_id')),) + return domain diff --git a/addons/mrp_subcontracting_dropshipping/views/purchase_order_views.xml b/addons/mrp_subcontracting_dropshipping/views/purchase_order_views.xml new file mode 100644 index 00000000000..a9cb83c353c --- /dev/null +++ b/addons/mrp_subcontracting_dropshipping/views/purchase_order_views.xml @@ -0,0 +1,16 @@ + + + Purchase Order Inherit Dropship Subcontractor + purchase.order + + + + + + + {'invisible': [('default_location_dest_id_usage', '!=', 'customer'), ('default_location_dest_id_is_subcontracting_loc', '=', False)], + 'required': ['|', ('default_location_dest_id_usage', '=', 'customer'), ('default_location_dest_id_is_subcontracting_loc', '=', True)]} + + + +