You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.6 KiB
61 lines
2.6 KiB
# Copyright (C) 2019 - TODAY, Open Source Integrators
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
agreement_template_id = fields.Many2one(
|
|
'agreement',
|
|
string="Agreement Template",
|
|
domain="[('is_template', '=', True)]")
|
|
|
|
@api.multi
|
|
def _action_confirm(self):
|
|
res = super(SaleOrder, self)._action_confirm()
|
|
for order in self:
|
|
if order.agreement_template_id:
|
|
order.agreement_id = order.agreement_template_id.copy(default={
|
|
'name': order.name,
|
|
'code': order.name,
|
|
'is_template': False,
|
|
'sale_id': order.id,
|
|
'partner_id': order.partner_id.id,
|
|
'analytic_account_id': order.analytic_account_id and
|
|
order.analytic_account_id.id or False,
|
|
})
|
|
for line in order.order_line:
|
|
# Create agreement line
|
|
self.env['agreement.line'].create({
|
|
'product_id': line.product_id.id,
|
|
'name': line.name,
|
|
'agreement_id': order.agreement_id.id,
|
|
'qty': line.product_uom_qty,
|
|
'sale_line_id': line.id,
|
|
'uom_id': line.product_uom.id
|
|
})
|
|
# If the product creates service profiles, create one
|
|
if line.product_id.product_tmpl_id.is_serviceprofile:
|
|
self.env['agreement.serviceprofile'].create({
|
|
'name': line.name,
|
|
'product_id': line.product_id.product_tmpl_id.id,
|
|
'agreement_id': order.agreement_id.id,
|
|
})
|
|
return res
|
|
|
|
def action_confirm(self):
|
|
# If sale_timesheet is installed, the _action_confirm()
|
|
# may be setting an Analytic Account on the SO.
|
|
# But since it is not a dependency, that can happen after
|
|
# we create the Agreement.
|
|
# To work around that, we check if that is the case,
|
|
# and make sure the SO Analytic Account is copied to the Agreement.
|
|
res = super(SaleOrder, self).action_confirm()
|
|
for order in self:
|
|
agreement = order.agreement_id
|
|
if (order.analytic_account_id and agreement and
|
|
not agreement.analytic_account_id):
|
|
agreement.analytic_account_id = order.analytic_account_id
|
|
return res
|