[IMP] contract: add section and notes in contract line

This commit is contained in:
Ernesto Tejeda
2020-03-17 17:27:28 -04:00
committed by Pedro M. Baeza
parent c51ac90345
commit 69df8ed71a
13 changed files with 254 additions and 67 deletions

View File

@@ -17,13 +17,13 @@ class ContractAbstractContractLine(models.AbstractModel):
_description = 'Abstract Recurring Contract Line'
product_id = fields.Many2one(
'product.product', string='Product', required=True
'product.product', string='Product'
)
name = fields.Text(string='Description', required=True)
quantity = fields.Float(default=1.0, required=True)
uom_id = fields.Many2one(
'uom.uom', string='Unit of Measure', required=True
'uom.uom', string='Unit of Measure'
)
automatic_price = fields.Boolean(
string="Auto-price?",
@@ -125,6 +125,9 @@ class ContractAbstractContractLine(models.AbstractModel):
required=True,
ondelete='cascade',
)
display_type = fields.Selection([
('line_section', "Section"),
('line_note', "Note")], default=False, help="Technical field for UX purpose.")
@api.model
def _get_default_recurring_invoicing_offset(

View File

@@ -146,6 +146,9 @@ class ContractLine(models.Model):
def _compute_state(self):
today = fields.Date.context_today(self)
for rec in self:
if rec.display_type:
rec.state = False
continue
if rec.is_canceled:
rec.state = 'canceled'
continue
@@ -648,15 +651,15 @@ class ContractLine(models.Model):
@api.depends('recurring_next_date', 'date_start', 'date_end')
def _compute_create_invoice_visibility(self):
# TODO: depending on the lines, and their order, some sections
# have no meaning in certain invoices
today = fields.Date.context_today(self)
for rec in self:
if rec.date_start:
if today < rec.date_start:
rec.create_invoice_visibility = False
else:
rec.create_invoice_visibility = bool(
rec.recurring_next_date
)
if (not rec.display_type and
rec.date_start and today >= rec.date_start):
rec.create_invoice_visibility = bool(rec.recurring_next_date)
else:
rec.create_invoice_visibility = False
@api.multi
def _prepare_invoice_line(self, invoice_id=False, invoice_values=False):
@@ -665,6 +668,7 @@ class ContractLine(models.Model):
self.last_date_invoiced, self.recurring_next_date
)
invoice_line_vals = {
'display_type': self.display_type,
'product_id': self.product_id.id,
'quantity': self._get_quantity_to_invoice(*dates),
'uom_id': self.uom_id.id,
@@ -1299,10 +1303,11 @@ class ContractLine(models.Model):
@api.multi
def unlink(self):
"""stop unlink uncnacled lines"""
if not all(self.mapped('is_canceled')):
raise ValidationError(
_("Contract line must be canceled before delete")
)
for record in self:
if not (record.is_canceled or record.display_type):
raise ValidationError(
_("Contract line must be canceled before delete")
)
return super().unlink()
@api.multi