Hi everyone,
I have a situation with multiple companies within Odoo and I need some advice.
Here’s the setup:
• I have Company AAA, which operates in a B2C model and does not maintain its own stock.
• I also have Company BBB, which operates in a B2B model and has its own warehouse.
Company AAA sells products directly to end customers through dropshipping, using the stock from Company BBB’s warehouse. Both companies are set up within Odoo. I have configured Odoo to work with this dropshipping model and activated Intercompany Sync. When Company AAA sells a product, a Purchase Order is automatically created in Company AAA to buy from Company BBB, and a Sales Order is created in Company BBB to sell to Company AAA with the final customer’s data and shipping address.
The issue I’m encountering is that while the Purchase and Sales Orders are being created correctly, the Shipping Method and shipping details are not being passed to Company BBB.
Has anyone managed a similar configuration within Odoo? Could you share some insights or best practices for handling such a scenario, specifically regarding ensuring the Shipping Method and shipping details are correctly transferred between the companies?
Thanks in advance!
good question 🧐
Looking at the Enterprise source code, we found the delivery carrier is not being ported to the new Sales Order.
Either way, the delivery carrier should be bound to the Warehouse/Company. Hence, it will not be able to port the delivery carrier from the other company. So, we will probably add the delivery carrier details as a message to the new Sales Order.
File: odoo/addons/sale_purchase_inter_company_rules/models/purchase_order.py
```python
def _prepare_sale_order_data(self, name, partner, company, direct_delivery_address):
""" Generate the Sales Order values from the PO
:param name : the origin client reference
:rtype name : string
:param partner : the partner reprenseting the company
:rtype partner : res.partner record
:param company : the company of the created SO
:rtype company : res.company record
:param direct_delivery_address : the address of the SO
:rtype direct_delivery_address : res.partner record
"""
self.ensure_one()
partner_addr = partner.sudo().address_get(['invoice', 'delivery', 'contact'])
warehouse = company.warehouse_id and company.warehouse_id.company_id.id == company.id and company.warehouse_id or False
if not warehouse:
raise UserError(_('Configure correct warehouse for company(%s) from Menu: Settings/Users/Companies', company.name))
return {
'name': self.env['ir.sequence'].sudo().next_by_code('sale.order') or '/',
'company_id': company.id,
'team_id': self.env['crm.team'].with_context(allowed_company_ids=company.ids)._get_default_team_id(domain=[('company_id', '=', company.id)]).id,
'warehouse_id': warehouse.id,
'client_order_ref': name,
'partner_id': partner.id,
'pricelist_id': partner.property_product_pricelist.id,
'partner_invoice_id': partner_addr['invoice'],
'date_order': self.date_order,
'fiscal_position_id': partner.property_account_position_id.id,
'payment_term_id': partner.property_payment_term_id.id,
'user_id': False,
'auto_generated': True,
'auto_purchase_order_id': self.id,
'partner_shipping_id': direct_delivery_address or partner_addr['delivery'],
'order_line': [],
}
```