mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
70 lines
2.9 KiB
Python
70 lines
2.9 KiB
Python
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
def copy(self, default=None):
|
|
new_so = super(SaleOrder, self).copy(default=default)
|
|
for line in new_so.order_line.filtered(lambda l: l.product_id.core_ok and not l.core_line_id):
|
|
line.unlink()
|
|
return new_so
|
|
|
|
|
|
class SaleOrderLine(models.Model):
|
|
_inherit = 'sale.order.line'
|
|
|
|
qty_delivered = fields.Float(recursive=True)
|
|
core_line_id = fields.Many2one('sale.order.line', string='Core Sale Line', copy=False)
|
|
|
|
@api.model
|
|
def create(self, values):
|
|
res = super(SaleOrderLine, self).create(values)
|
|
if res.product_id.product_core_service_id:
|
|
other_product = res.product_id.product_core_service_id
|
|
values['product_id'] = other_product.id
|
|
values['name'] = other_product.name
|
|
values['price_unit'] = other_product.list_price
|
|
values['core_line_id'] = res.id
|
|
other_line = self.create(values)
|
|
other_line._compute_tax_id()
|
|
return res
|
|
|
|
def write(self, values):
|
|
res = super(SaleOrderLine, self).write(values)
|
|
if 'product_id' in values or 'product_uom_qty' in values or 'product_uom' in values:
|
|
for line in self.filtered(lambda l: not l.core_line_id):
|
|
line.mapped('order_id.order_line').filtered(lambda l: l.core_line_id == line)._update_core_line()
|
|
return res
|
|
|
|
def unlink(self):
|
|
for line in self:
|
|
if line.core_line_id and line.core_line_id and not self.env.user.has_group('sales_team.group_sale_manager'):
|
|
raise UserError(_('You cannot delete a core line while the original still exists.'))
|
|
# Unlink any linked core lines.
|
|
other_line = line.order_id.order_line.filtered(lambda l: l.core_line_id == line)
|
|
if other_line and other_line not in self:
|
|
other_line.write({'core_line_id': False})
|
|
other_line.unlink()
|
|
return super(SaleOrderLine, self).unlink()
|
|
|
|
def _update_core_line(self):
|
|
for line in self:
|
|
if line.core_line_id and line.core_line_id.product_id.product_core_service_id:
|
|
line.write({
|
|
'product_id': line.core_line_id.product_id.product_core_service_id.id,
|
|
'product_uom_qty': line.core_line_id.product_uom_qty,
|
|
'product_uom': line.core_line_id.product_uom.id,
|
|
})
|
|
elif line.core_line_id:
|
|
line.unlink()
|
|
|
|
@api.depends('core_line_id.qty_delivered')
|
|
def _compute_qty_delivered(self):
|
|
super(SaleOrderLine, self)._compute_qty_delivered()
|
|
for line in self.filtered(lambda l: l.core_line_id):
|
|
line.qty_delivered = line.core_line_id.qty_delivered
|