Perubahan di CRM

This commit is contained in:
2026-04-16 12:56:39 +07:00
parent f8ba29b2ff
commit de061dd2a1
13 changed files with 318 additions and 43 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ This enables different staging flow per business category through team pipelines
"author": "PT Gagak Rimang Teknologi",
"website": "https://rimang.id",
"category": "Sales/CRM",
"version": "14.0.2.11.0",
"version": "14.0.2.11.1",
"depends": ["crm", "grt_business_category_base"],
"data": [
"security/ir.model.access.csv",
@@ -107,49 +107,81 @@ class MailActivity(models.Model):
histories.write({"kilometer": vals.get("kilometer") or 0.0})
return result
def action_feedback(self, feedback=False, attachment_ids=None):
crm_activities = self.filtered(lambda a: a.res_model == "crm.lead")
if not crm_activities:
return super().action_feedback(feedback=feedback, attachment_ids=attachment_ids)
def _get_done_context_payload(self):
ctx = self.env.context
gps_captured = bool(ctx.get("gps_captured"))
gps_latitude = ctx.get("gps_latitude")
gps_longitude = ctx.get("gps_longitude")
gps_url = ctx.get("gps_openstreetmap_url")
gps_done_client_time = ctx.get("gps_done_client_time")
gps_done_client_tz = ctx.get("gps_done_client_tz")
client_time = ctx.get("gps_done_client_time")
client_tz = ctx.get("gps_done_client_tz")
extra_line = False
has_ctx_gps = self._has_valid_gps(gps_latitude, gps_longitude)
if has_ctx_gps:
gps_captured = True
if not gps_url:
gps_url = self._build_osm_url(gps_latitude, gps_longitude)
if gps_captured and gps_latitude is not None and gps_longitude is not None:
return {
"gps_captured": gps_captured,
"gps_latitude": gps_latitude,
"gps_longitude": gps_longitude,
"gps_url": gps_url,
"client_time": client_time,
"client_tz": client_tz,
}
def _prepare_done_feedback(self, feedback=False):
payload = self._get_done_context_payload()
extra_line = False
if payload["gps_captured"] and payload["gps_latitude"] is not None and payload["gps_longitude"] is not None:
extra_line = _(
"Update at GPS location: %(lat)s, %(lon)s%(url)s",
lat=gps_latitude,
lon=gps_longitude,
url=(" - %s" % gps_url) if gps_url else "",
lat=payload["gps_latitude"],
lon=payload["gps_longitude"],
url=(" - %s" % payload["gps_url"]) if payload["gps_url"] else "",
)
new_feedback = feedback or ""
if extra_line:
new_feedback = ("%s\n%s" % (new_feedback, extra_line)).strip()
return new_feedback, payload
def _mark_crm_activities_done_in_history(self, feedback=False):
crm_activities = self.filtered(lambda a: a.res_model == "crm.lead")
if not crm_activities:
return crm_activities, feedback
new_feedback, payload = self._prepare_done_feedback(feedback=feedback)
crm_activities._mark_crm_activity_history_done(
feedback=new_feedback,
gps_captured=gps_captured,
gps_latitude=gps_latitude,
gps_longitude=gps_longitude,
gps_url=gps_url,
client_time=gps_done_client_time,
client_tz=gps_done_client_tz,
gps_captured=payload["gps_captured"],
gps_latitude=payload["gps_latitude"],
gps_longitude=payload["gps_longitude"],
gps_url=payload["gps_url"],
client_time=payload["client_time"],
client_tz=payload["client_tz"],
)
return crm_activities, new_feedback
def action_feedback(self, feedback=False, attachment_ids=None):
crm_activities, new_feedback = self._mark_crm_activities_done_in_history(feedback=feedback)
if not crm_activities:
return super().action_feedback(feedback=feedback, attachment_ids=attachment_ids)
return super().action_feedback(feedback=new_feedback, attachment_ids=attachment_ids)
def action_done(self):
crm_activities, _new_feedback = self._mark_crm_activities_done_in_history(feedback=False)
if not crm_activities:
return super().action_done()
return super().action_done()
def action_done_schedule_next(self):
crm_activities, _new_feedback = self._mark_crm_activities_done_in_history(feedback=False)
if not crm_activities:
return super().action_done_schedule_next()
return super().action_done_schedule_next()
def _create_crm_activity_history(self):
history_model = self.env["crm.activity.history"].sudo()
histories = []
@@ -7,4 +7,4 @@ crm_team_business_category_rule_manager,CRM Team full access for manager in effe
crm_activity_history_rule_user,CRM Activity History by effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",crm.group_use_lead,1,0,0,0
crm_activity_history_rule_manager,CRM Activity History full access for manager in effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",sales_team.group_sale_manager,1,1,1,1
crm_team_business_category_rule_sysadmin,CRM Team full access for system admin,sales_team.model_crm_team,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
crm_activity_history_rule_sysadmin,CRM Activity History full access for system admin,model_crm_activity_history,"[('company_id','in',user.company_ids.ids)]",base.group_system,1,1,1,1
crm_activity_history_rule_sysadmin,CRM Activity History access for system admin in effective business category,model_crm_activity_history,"[('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)]",base.group_system,1,1,1,1
1 id name model_id:id domain_force groups:id perm_read perm_write perm_create perm_unlink
7 crm_activity_history_rule_user CRM Activity History by effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] crm.group_use_lead 1 0 0 0
8 crm_activity_history_rule_manager CRM Activity History full access for manager in effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] sales_team.group_sale_manager 1 1 1 1
9 crm_team_business_category_rule_sysadmin CRM Team full access for system admin sales_team.model_crm_team [('company_id','in',user.company_ids.ids)] base.group_system 1 1 1 1
10 crm_activity_history_rule_sysadmin CRM Activity History full access for system admin CRM Activity History access for system admin in effective business category model_crm_activity_history [('company_id','in',user.company_ids.ids)] [('company_id','in',user.company_ids.ids),('business_category_id','in',user.effective_business_category_ids.ids)] base.group_system 1 1 1 1
+1 -1
View File
@@ -6,7 +6,7 @@
"category": "Human Resources",
"author": "Custom",
"images": ["static/description/icon.png"],
"depends": ["base", "mail", "hr"],
"depends": ["base", "mail", "hr", "grt_business_category_base"],
"data": [
"security/kpi_security.xml",
"security/ir.model.access.csv",
+1 -1
View File
@@ -7,4 +7,4 @@ from . import kpi_value
from . import kpi_score
from . import kpi_team
from . import kpi_evidence
from . import res_users
+7
View File
@@ -7,6 +7,13 @@ class KpiAssignment(models.Model):
_order = "period_id desc, employee_id, id"
employee_id = fields.Many2one("hr.employee", required=True, ondelete="cascade", index=True)
business_category_id = fields.Many2one(
"crm.business.category",
related="employee_id.user_id.active_business_category_id",
store=True,
readonly=True,
index=True,
)
kpi_definition_id = fields.Many2one("kpi.definition", required=True, ondelete="cascade", index=True)
period_id = fields.Many2one("kpi.period", required=True, ondelete="cascade", index=True)
target_override = fields.Float()
+7 -1
View File
@@ -7,6 +7,12 @@ class KpiEvidence(models.Model):
_order = "id desc"
kpi_value_id = fields.Many2one("kpi.value", required=True, ondelete="cascade", index=True)
business_category_id = fields.Many2one(
"crm.business.category",
related="kpi_value_id.business_category_id",
store=True,
readonly=True,
index=True,
)
attachment = fields.Char(string="Attachment")
note = fields.Text()
+19
View File
@@ -7,6 +7,13 @@ class KpiScore(models.Model):
_order = "period_id desc, total_score desc, id desc"
employee_id = fields.Many2one("hr.employee", required=True, ondelete="cascade", index=True)
business_category_id = fields.Many2one(
"crm.business.category",
related="employee_id.user_id.active_business_category_id",
store=True,
readonly=True,
index=True,
)
period_id = fields.Many2one("kpi.period", required=True, ondelete="cascade", index=True)
total_score = fields.Float(default=0.0, required=True)
grade = fields.Char()
@@ -80,6 +87,13 @@ class KpiTeamScore(models.Model):
_order = "period_id desc, score desc, id desc"
team_id = fields.Many2one("kpi.team", required=True, ondelete="cascade", index=True)
business_category_ids = fields.Many2many(
"crm.business.category",
compute="_compute_business_category_ids",
store=True,
string="Business Categories",
readonly=True,
)
period_id = fields.Many2one("kpi.period", required=True, ondelete="cascade", index=True)
score = fields.Float(default=0.0, required=True)
calculated_at = fields.Datetime()
@@ -88,6 +102,11 @@ class KpiTeamScore(models.Model):
("kpi_team_score_uniq", "unique(team_id, period_id)", "Team score must be unique per period."),
]
@api.depends("team_id", "team_id.business_category_ids")
def _compute_business_category_ids(self):
for record in self:
record.business_category_ids = record.team_id.business_category_ids
@api.model
def calculate_team_score(self, period_ids=None):
score_model = self.env["kpi.score"]
+13 -2
View File
@@ -1,4 +1,4 @@
from odoo import fields, models
from odoo import api, fields, models
class KpiTeam(models.Model):
@@ -8,11 +8,23 @@ class KpiTeam(models.Model):
name = fields.Char(required=True, index=True)
department_id = fields.Many2one("kpi.department", required=True, ondelete="restrict")
member_ids = fields.One2many("kpi.team.member", "team_id", string="Members")
business_category_ids = fields.Many2many(
"crm.business.category",
compute="_compute_business_category_ids",
store=True,
string="Business Categories",
readonly=True,
)
_sql_constraints = [
("kpi_team_name_department_uniq", "unique(name, department_id)", "Team name must be unique per department."),
]
@api.depends("member_ids.employee_id.user_id.active_business_category_id")
def _compute_business_category_ids(self):
for team in self:
team.business_category_ids = team.member_ids.mapped("employee_id.user_id.active_business_category_id")
class KpiTeamMember(models.Model):
_name = "kpi.team.member"
@@ -24,4 +36,3 @@ class KpiTeamMember(models.Model):
_sql_constraints = [
("kpi_team_member_uniq", "unique(team_id, employee_id)", "Employee already exists in this team."),
]
+7
View File
@@ -28,6 +28,13 @@ class KpiValue(models.Model):
readonly=True,
index=True,
)
business_category_id = fields.Many2one(
"crm.business.category",
related="assignment_id.business_category_id",
store=True,
readonly=True,
index=True,
)
value = fields.Float(required=True, default=0.0)
source_module = fields.Char(help="Example: crm, sale, stock, mrp, manual")
reference_model = fields.Char()
+33
View File
@@ -0,0 +1,33 @@
from odoo import api, fields, models
class ResUsers(models.Model):
_inherit = "res.users"
kpi_team_ids = fields.Many2many(
"kpi.team",
compute="_compute_kpi_team_access",
string="KPI Teams",
readonly=True,
)
kpi_team_employee_ids = fields.Many2many(
"hr.employee",
compute="_compute_kpi_team_access",
string="KPI Team Employees",
readonly=True,
)
@api.depends("employee_ids")
def _compute_kpi_team_access(self):
team_model = self.env["kpi.team"].sudo()
empty_teams = team_model.browse()
empty_employees = self.env["hr.employee"].browse()
for user in self:
if not user.id:
user.kpi_team_ids = empty_teams
user.kpi_team_employee_ids = empty_employees
continue
teams = team_model.search([("member_ids.employee_id.user_id", "=", user.id)])
user.kpi_team_ids = teams
user.kpi_team_employee_ids = teams.mapped("member_ids.employee_id")
+159 -17
View File
@@ -23,9 +23,9 @@
</record>
<record id="rule_kpi_assignment_employee_own" model="ir.rule">
<field name="name">KPI Assignment - employee own</field>
<field name="name">KPI Assignment - employee category or team</field>
<field name="model_id" ref="model_kpi_assignment"/>
<field name="domain_force">[('employee_id.user_id', '=', user.id)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
@@ -34,9 +34,9 @@
</record>
<record id="rule_kpi_value_employee_own" model="ir.rule">
<field name="name">KPI Value - employee own</field>
<field name="name">KPI Value - employee category or team</field>
<field name="model_id" ref="model_kpi_value"/>
<field name="domain_force">[('employee_id.user_id', '=', user.id)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
@@ -45,9 +45,9 @@
</record>
<record id="rule_kpi_score_employee_own" model="ir.rule">
<field name="name">KPI Score - employee own</field>
<field name="name">KPI Score - employee category or team</field>
<field name="model_id" ref="model_kpi_score"/>
<field name="domain_force">[('employee_id.user_id', '=', user.id)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
@@ -56,9 +56,42 @@
</record>
<record id="rule_kpi_evidence_employee_own" model="ir.rule">
<field name="name">KPI Evidence - employee own</field>
<field name="name">KPI Evidence - employee category or team</field>
<field name="model_id" ref="model_kpi_evidence"/>
<field name="domain_force">[('kpi_value_id.employee_id.user_id', '=', user.id)]</field>
<field name="domain_force">['|', '|', ('kpi_value_id.employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('kpi_value_id.employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="0"/>
</record>
<record id="rule_kpi_team_employee_scope" model="ir.rule">
<field name="name">KPI Team - employee category or own team</field>
<field name="model_id" ref="model_kpi_team"/>
<field name="domain_force">['|', ('business_category_ids', 'in', user.effective_business_category_ids.ids), ('id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="0"/>
</record>
<record id="rule_kpi_team_member_employee_scope" model="ir.rule">
<field name="name">KPI Team Member - employee category or own team</field>
<field name="model_id" ref="model_kpi_team_member"/>
<field name="domain_force">['|', ('team_id.business_category_ids', 'in', user.effective_business_category_ids.ids), ('team_id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="0"/>
</record>
<record id="rule_kpi_team_score_employee_scope" model="ir.rule">
<field name="name">KPI Team Score - employee category or own team</field>
<field name="model_id" ref="model_kpi_team_score"/>
<field name="domain_force">['|', ('business_category_ids', 'in', user.effective_business_category_ids.ids), ('team_id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_employee'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="0"/>
@@ -67,9 +100,9 @@
</record>
<record id="rule_kpi_assignment_manager_all" model="ir.rule">
<field name="name">KPI Assignment - manager all</field>
<field name="name">KPI Assignment - manager category or team</field>
<field name="model_id" ref="model_kpi_assignment"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
@@ -78,9 +111,9 @@
</record>
<record id="rule_kpi_value_manager_all" model="ir.rule">
<field name="name">KPI Value - manager all</field>
<field name="name">KPI Value - manager category or team</field>
<field name="model_id" ref="model_kpi_value"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
@@ -89,9 +122,9 @@
</record>
<record id="rule_kpi_score_manager_all" model="ir.rule">
<field name="name">KPI Score - manager all</field>
<field name="name">KPI Score - manager category or team</field>
<field name="model_id" ref="model_kpi_score"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
@@ -100,14 +133,123 @@
</record>
<record id="rule_kpi_evidence_manager_all" model="ir.rule">
<field name="name">KPI Evidence - manager all</field>
<field name="name">KPI Evidence - manager category or team</field>
<field name="model_id" ref="model_kpi_evidence"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="domain_force">['|', '|', ('kpi_value_id.employee_id.user_id', '=', user.id), ('business_category_id', 'in', user.effective_business_category_ids.ids), ('kpi_value_id.employee_id', 'in', user.kpi_team_employee_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
</odoo>
<record id="rule_kpi_team_manager_scope" model="ir.rule">
<field name="name">KPI Team - manager category or own team</field>
<field name="model_id" ref="model_kpi_team"/>
<field name="domain_force">['|', ('business_category_ids', 'in', user.effective_business_category_ids.ids), ('id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_team_member_manager_scope" model="ir.rule">
<field name="name">KPI Team Member - manager category or own team</field>
<field name="model_id" ref="model_kpi_team_member"/>
<field name="domain_force">['|', ('team_id.business_category_ids', 'in', user.effective_business_category_ids.ids), ('team_id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_team_score_manager_scope" model="ir.rule">
<field name="name">KPI Team Score - manager category or own team</field>
<field name="model_id" ref="model_kpi_team_score"/>
<field name="domain_force">['|', ('business_category_ids', 'in', user.effective_business_category_ids.ids), ('team_id', 'in', user.kpi_team_ids.ids)]</field>
<field name="groups" eval="[(4, ref('group_kpi_manager'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_assignment_admin_all" model="ir.rule">
<field name="name">KPI Assignment - admin all</field>
<field name="model_id" ref="model_kpi_assignment"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_value_admin_all" model="ir.rule">
<field name="name">KPI Value - admin all</field>
<field name="model_id" ref="model_kpi_value"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_score_admin_all" model="ir.rule">
<field name="name">KPI Score - admin all</field>
<field name="model_id" ref="model_kpi_score"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_evidence_admin_all" model="ir.rule">
<field name="name">KPI Evidence - admin all</field>
<field name="model_id" ref="model_kpi_evidence"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_team_admin_all" model="ir.rule">
<field name="name">KPI Team - admin all</field>
<field name="model_id" ref="model_kpi_team"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_team_member_admin_all" model="ir.rule">
<field name="name">KPI Team Member - admin all</field>
<field name="model_id" ref="model_kpi_team_member"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
<record id="rule_kpi_team_score_admin_all" model="ir.rule">
<field name="name">KPI Team Score - admin all</field>
<field name="model_id" ref="model_kpi_team_score"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_kpi_admin'))]"/>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="1"/>
</record>
</odoo>
+19 -1
View File
@@ -4,7 +4,7 @@ from odoo import models
class MailActivity(models.Model):
_inherit = "mail.activity"
def action_feedback(self, feedback=False, attachment_ids=None):
def _prepare_kpi_crm_payload(self):
crm_payload = []
for activity in self:
if activity.res_model != "crm.lead" or not activity.res_id or not activity.activity_type_id:
@@ -17,9 +17,27 @@ class MailActivity(models.Model):
"user_id": activity.user_id.id,
}
)
return crm_payload
def action_feedback(self, feedback=False, attachment_ids=None):
crm_payload = self._prepare_kpi_crm_payload()
result = super().action_feedback(feedback=feedback, attachment_ids=attachment_ids)
if crm_payload:
self.env["kpi.crm.trigger.rule"].sudo().process_activity_feedback_payload(crm_payload)
return result
def action_done(self):
crm_payload = self._prepare_kpi_crm_payload()
result = super().action_done()
if crm_payload:
self.env["kpi.crm.trigger.rule"].sudo().process_activity_feedback_payload(crm_payload)
return result
def action_done_schedule_next(self):
crm_payload = self._prepare_kpi_crm_payload()
result = super().action_done_schedule_next()
if crm_payload:
self.env["kpi.crm.trigger.rule"].sudo().process_activity_feedback_payload(crm_payload)
return result