[IMP] contract: Add contract modification + contract: Add fields to contract page in portal

This commit is contained in:
Víctor Martínez
2020-12-28 09:47:21 +01:00
committed by Pedro M. Baeza
parent a3275a71f0
commit 632ef42207
84 changed files with 5584 additions and 3024 deletions

View File

@@ -7,6 +7,7 @@ from . import contract_template
from . import contract
from . import contract_template_line
from . import contract_line
from . import contract_modification
from . import account_move
from . import res_partner
from . import contract_tag

View File

@@ -99,20 +99,71 @@ class ContractContract(models.Model):
ondelete="restrict",
readonly=True,
copy=False,
track_visibility="onchange",
tracking=True,
)
terminate_comment = fields.Text(
string="Termination Comment",
readonly=True,
copy=False,
track_visibility="onchange",
string="Termination Comment", readonly=True, copy=False, tracking=True,
)
terminate_date = fields.Date(
string="Termination Date",
readonly=True,
copy=False,
track_visibility="onchange",
string="Termination Date", readonly=True, copy=False, tracking=True,
)
modification_ids = fields.One2many(
comodel_name="contract.modification",
inverse_name="contract_id",
string="Modifications",
)
@api.model_create_multi
def create(self, vals_list):
records = super().create(vals_list)
records._set_start_contract_modification()
return records
def write(self, vals):
if "modification_ids" in vals:
res = super(
ContractContract, self.with_context(bypass_modification_send=True)
).write(vals)
self._modification_mail_send()
else:
res = super(ContractContract, self).write(vals)
return res
@api.model
def _set_start_contract_modification(self):
for record in self:
if record.contract_line_ids:
date_start = min(record.contract_line_ids.mapped("date_start"))
else:
date_start = record.create_date
record.write(
{
"modification_ids": [
(0, 0, {"date": date_start, "description": _("Contract start")})
]
}
)
@api.model
def _modification_mail_send(self):
for record in self:
modification_ids_not_sent = record.modification_ids.filtered(
lambda x: not x.sent
)
if modification_ids_not_sent:
contract_modification_subtype = self.env.ref(
"contract.mail_message_subtype_contract_modification"
)
notified_partners = record.message_follower_ids.filtered(
lambda x: contract_modification_subtype in x.subtype_ids
).mapped("partner_id")
if notified_partners:
record.message_post_with_template(
self.env.ref("contract.mail_template_contract_modification").id,
partner_ids=[(4, x.id) for x in notified_partners],
email_layout_xmlid="contract.template_contract_modification",
)
modification_ids_not_sent.write({"sent": True})
def _compute_access_url(self):
for record in self:

View File

@@ -0,0 +1,38 @@
# Copyright 2020 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class ContractModification(models.Model):
_name = "contract.modification"
_description = "Contract Modification"
_order = "date desc"
date = fields.Date(required=True, string="Date")
description = fields.Text(required=True, string="Description")
contract_id = fields.Many2one(
string="Contract",
comodel_name="contract.contract",
required=True,
ondelete="cascade",
index=True,
)
sent = fields.Boolean(string="Sent", default=False,)
@api.model_create_multi
def create(self, vals_list):
records = super().create(vals_list)
if not self.env.context.get("bypass_modification_send"):
records.check_modification_ids_need_sent()
return records
def write(self, vals):
res = super().write(vals)
if not self.env.context.get("bypass_modification_send"):
self.check_modification_ids_need_sent()
return res
def check_modification_ids_need_sent(self):
self.mapped("contract_id")._modification_mail_send()

View File

@@ -9,7 +9,7 @@ class ContractTag(models.Model):
_name = "contract.tag"
_description = "Contract Tag"
name = fields.Char(requirment=True)
name = fields.Char(required=True)
company_id = fields.Many2one(
"res.company", string="Company", default=lambda self: self.env.company.id,
)