Perubahan di CRM
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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",
|
||||
|
||||
@@ -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,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,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()
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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."),
|
||||
]
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user