[IMP] mrp_subcontracting_dropshipping: subcontract dropship address

This commit shows the user Dropship address field in the PO when subcontractor resupply is
done with dropshipping mechanism.

closes odoo/odoo#95770

Related: odoo/upgrade#3852
Signed-off-by: Tiffany Chang <tic@odoo.com>
This commit is contained in:
Ahmed Khalaf (ahkh)
2022-09-09 00:02:17 +02:00
parent a99f75b043
commit 64f2b8aebb
7 changed files with 55 additions and 1 deletions
@@ -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,
@@ -6,3 +6,4 @@ from . import res_company
from . import stock_warehouse
from . import purchase
from . import stock_rule
from . import stock_orderpoint
@@ -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:
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,16 @@
<odoo>
<record id="view_purchase_order_inherit" model="ir.ui.view">
<field name="name">Purchase Order Inherit Dropship Subcontractor</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<field name="dest_address_id" position="before">
<field name="default_location_dest_id_is_subcontracting_loc" invisible="1"/>
</field>
<field name="dest_address_id" position="attributes">
<attribute name="attrs">{'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)]}</attribute>
</field>
</field>
</record>
</odoo>