50 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class PurchaseOrder(models.Model):
_inherit = 'purchase.order'
auto_generated_so_id = fields.Many2one('sale.order', string='Generated Sale Order', readonly=True, copy=False)
def button_confirm(self):
res = super(PurchaseOrder, self).button_confirm()
for po in self:
# Check if vendor is linked to one of our internal companies
partner_company = self.env['res.company'].sudo().search([('partner_id', '=', po.partner_id.id)], limit=1)
if partner_company and partner_company.intercompany_auto_so:
# Need to run as superuser in the context of the partner company
so_vals = po._prepare_intercompany_so_vals(partner_company)
so = self.env['sale.order'].sudo().with_company(partner_company.id).create(so_vals)
po.write({'auto_generated_so_id': so.id})
# Optionally auto confirm SO
so.action_confirm()
# Link the source PO reference on the SO
so.order_line._link_to_po_lines(po)
return res
def _prepare_intercompany_so_vals(self, dest_company):
"""Prepare values to create the linked sale order in the destination company."""
self.ensure_one()
# Find this company's partner record to use as customer on the SO
customer = self.company_id.partner_id
# Prepare order lines
order_lines = []
for line in self.order_line:
line_vals = {
'product_id': line.product_id.id,
'name': line.name,
'product_uom_qty': line.product_qty,
'price_unit': line.price_unit, # Using PO price; can be overridden by priceless if needed
'product_uom': line.product_uom.id,
}
order_lines.append((0, 0, line_vals))
return {
'company_id': dest_company.id,
'partner_id': customer.id,
'client_order_ref': self.name,
'order_line': order_lines,
}