diff --git a/agreement_legal_sale/__manifest__.py b/agreement_legal_sale/__manifest__.py index 665dc8736..85ebdd60d 100644 --- a/agreement_legal_sale/__manifest__.py +++ b/agreement_legal_sale/__manifest__.py @@ -12,6 +12,7 @@ 'depends': [ 'agreement_legal', 'agreement_sale', + 'agreement_serviceprofile' ], 'data': [ 'views/agreement.xml', diff --git a/agreement_legal_sale/models/sale_order.py b/agreement_legal_sale/models/sale_order.py index 53967e2f9..635f3aaed 100644 --- a/agreement_legal_sale/models/sale_order.py +++ b/agreement_legal_sale/models/sale_order.py @@ -17,34 +17,49 @@ class SaleOrder(models.Model): 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, - }) + 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, - }) + self.env['agreement.line'].\ + create(self._get_agreement_line_vals(line)) + # Create SP's based on product_id config + if line.product_id.is_serviceprofile: + self.create_sp_qty(line, order) return res + def create_sp_qty(self, line, order): + """ Create line.product_uom_qty SP's """ + if line.product_id.product_tmpl_id.is_serviceprofile: + for i in range(1, int(line.product_uom_qty)+1): + sp = self.env['agreement.serviceprofile'].\ + create(self._get_sp_vals(line, order, i)) + + def _get_agreement_line_vals(self, line): + return { + 'product_id': line.product_id.id, + 'name': line.name, + 'agreement_id': line.order_id.agreement_id.id, + 'qty': line.product_uom_qty, + 'sale_line_id': line.id, + 'uom_id': line.product_uom.id + } + + def _get_sp_vals(self, line, order, i): + return { + 'name': line.name + ' ' + str(i), + 'product_id': line.product_id.product_tmpl_id.id, + 'agreement_id': order.agreement_id.id, + } + def action_confirm(self): # If sale_timesheet is installed, the _action_confirm() # may be setting an Analytic Account on the SO.