mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[IMP] agreement_legal: Define warning days cron and filter
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
"version": "14.0.2.4.1",
|
"version": "14.0.2.4.1",
|
||||||
"depends": ["contacts", "agreement", "product"],
|
"depends": ["contacts", "agreement", "product"],
|
||||||
"data": [
|
"data": [
|
||||||
|
"data/cron.xml",
|
||||||
"data/ir_sequence.xml",
|
"data/ir_sequence.xml",
|
||||||
"data/agreement_stage.xml",
|
"data/agreement_stage.xml",
|
||||||
"data/agreement_type.xml",
|
"data/agreement_type.xml",
|
||||||
|
|||||||
25
agreement_legal/data/cron.xml
Normal file
25
agreement_legal/data/cron.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo noupdate="1">
|
||||||
|
<!-- Add warning days -->
|
||||||
|
<record id="mail_activity_review_agreement" model="mail.activity.type">
|
||||||
|
<field name="name">Agreement needs a review</field>
|
||||||
|
<field name="summary">note</field>
|
||||||
|
<field name="category">default</field>
|
||||||
|
<field name="res_model_id" ref="model_agreement" />
|
||||||
|
<field name="icon">fa-tasks</field>
|
||||||
|
<field name="delay_count">0</field>
|
||||||
|
</record>
|
||||||
|
<!--Test warning days -->
|
||||||
|
<record model="ir.cron" forcecreate="True" id="ir_cron_test_acc_move_except">
|
||||||
|
<field name="name">Agreement: Check to Review Days</field>
|
||||||
|
<field name="model_id" ref="agreement_legal.model_agreement" />
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model._alert_to_review_date()</field>
|
||||||
|
<field name="user_id" ref="base.user_root" />
|
||||||
|
<field name="interval_number">20</field>
|
||||||
|
<field name="interval_type">minutes</field>
|
||||||
|
<field name="numbercall">-1</field>
|
||||||
|
<field name="doall" eval="False" />
|
||||||
|
<field name="active" eval="True" />
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
import ast
|
import ast
|
||||||
import json as simplejson
|
import json as simplejson
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
@@ -293,6 +294,44 @@ class Agreement(models.Model):
|
|||||||
readonly = fields.Boolean(
|
readonly = fields.Boolean(
|
||||||
related="stage_id.readonly",
|
related="stage_id.readonly",
|
||||||
)
|
)
|
||||||
|
readonly = fields.Boolean(
|
||||||
|
related="stage_id.readonly",
|
||||||
|
)
|
||||||
|
to_review_date = fields.Date(
|
||||||
|
compute="_compute_to_review_date",
|
||||||
|
store=True,
|
||||||
|
readonly=False,
|
||||||
|
help="Date used to warn us some days before agreement expires",
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends("agreement_type_id", "end_date")
|
||||||
|
def _compute_to_review_date(self):
|
||||||
|
for record in self:
|
||||||
|
if record.end_date:
|
||||||
|
record.to_review_date = record.end_date + timedelta(
|
||||||
|
days=-record.agreement_type_id.review_days
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _alert_to_review_date(self):
|
||||||
|
activities = self.search(
|
||||||
|
[
|
||||||
|
("to_review_date", "=", fields.datetime.today()),
|
||||||
|
("agreement_type_id.review_user_id", "!=", False),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
for activity in activities:
|
||||||
|
if (
|
||||||
|
self.env["mail.activity"].search_count(
|
||||||
|
[("res_id", "=", activity.id), ("res_model", "=", "agreement")]
|
||||||
|
)
|
||||||
|
== 0
|
||||||
|
):
|
||||||
|
activity.activity_schedule(
|
||||||
|
"agreement_legal.mail_activity_review_agreement",
|
||||||
|
user_id=activity.type_id.review_user_id.id,
|
||||||
|
note=_("Your activity is going to end soon"),
|
||||||
|
)
|
||||||
|
|
||||||
# compute the dynamic content for jinja expression
|
# compute the dynamic content for jinja expression
|
||||||
def _compute_dynamic_description(self):
|
def _compute_dynamic_description(self):
|
||||||
|
|||||||
@@ -11,3 +11,7 @@ class AgreementType(models.Model):
|
|||||||
agreement_subtypes_ids = fields.One2many(
|
agreement_subtypes_ids = fields.One2many(
|
||||||
"agreement.subtype", "agreement_type_id", string="Sub-Types"
|
"agreement.subtype", "agreement_type_id", string="Sub-Types"
|
||||||
)
|
)
|
||||||
|
review_user_id = fields.Many2one(
|
||||||
|
"res.users", help="User assigned automatically the activity on review date"
|
||||||
|
)
|
||||||
|
review_days = fields.Integer()
|
||||||
|
|||||||
@@ -226,6 +226,10 @@
|
|||||||
name="end_date"
|
name="end_date"
|
||||||
attrs="{'required': [('is_template', '=', False)], 'invisible': [('is_template', '=', True)]}"
|
attrs="{'required': [('is_template', '=', False)], 'invisible': [('is_template', '=', True)]}"
|
||||||
/>
|
/>
|
||||||
|
<field
|
||||||
|
name="to_review_date"
|
||||||
|
attrs="{'required': [('is_template', '=', False), ('end_date', '!=', False)], 'invisible': [('is_template', '=', True)]}"
|
||||||
|
/>
|
||||||
<field name="expiration_notice" />
|
<field name="expiration_notice" />
|
||||||
<field name="change_notice" />
|
<field name="change_notice" />
|
||||||
<field
|
<field
|
||||||
@@ -523,6 +527,11 @@
|
|||||||
string="Templates"
|
string="Templates"
|
||||||
domain="[('active','=',True),('is_template', '=', True)]"
|
domain="[('active','=',True),('is_template', '=', True)]"
|
||||||
/>
|
/>
|
||||||
|
<filter
|
||||||
|
name="filter_to_review"
|
||||||
|
string="Agreements to review"
|
||||||
|
domain="[('to_review_date', '<=', context_today().strftime('%Y-%m-%d')), ('end_date', '>=', context_today().strftime('%Y-%m-%d'))]"
|
||||||
|
/>
|
||||||
<filter
|
<filter
|
||||||
name="group_partner_id"
|
name="group_partner_id"
|
||||||
string="Partners"
|
string="Partners"
|
||||||
|
|||||||
@@ -18,6 +18,9 @@
|
|||||||
<field name="model">agreement.type</field>
|
<field name="model">agreement.type</field>
|
||||||
<field name="inherit_id" ref="agreement.agreement_type_form_view" />
|
<field name="inherit_id" ref="agreement.agreement_type_form_view" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//group[@name='main']" position="inside">
|
||||||
|
<field name="review_user_id" />
|
||||||
|
</xpath>
|
||||||
<xpath expr="//sheet" position="inside">
|
<xpath expr="//sheet" position="inside">
|
||||||
<field name="agreement_subtypes_ids" nolabel="1">
|
<field name="agreement_subtypes_ids" nolabel="1">
|
||||||
<tree editable="bottom">
|
<tree editable="bottom">
|
||||||
|
|||||||
Reference in New Issue
Block a user