|
|
@ -6,29 +6,28 @@ class ResPartner(models.Model): |
|
|
|
_inherit = "res.partner" |
|
|
|
|
|
|
|
tot_sent_survey = fields.Integer("Sent survey count", compute="_count_survey_input") |
|
|
|
tot_comp_survey = fields.Integer( |
|
|
|
tot_done_survey = fields.Integer( |
|
|
|
"Completed survey count", compute="_count_survey_input" |
|
|
|
) |
|
|
|
tot_sent_comp_survey = fields.Integer( |
|
|
|
tot_sent_done_survey = fields.Integer( |
|
|
|
"Completed sent survey count", compute="_count_survey_input" |
|
|
|
) |
|
|
|
sent_comp_ratio = fields.Integer( |
|
|
|
string="Completed sent survey ratio", compute="_get_sent_comp_ratio" |
|
|
|
sent_done_ratio = fields.Integer( |
|
|
|
string="Completed sent survey ratio", compute="_get_sent_done_ratio" |
|
|
|
) |
|
|
|
|
|
|
|
# COMPUTES |
|
|
|
|
|
|
|
@api.multi |
|
|
|
def _count_survey_input(self): |
|
|
|
UserInput = self.env["survey.user_input"] |
|
|
|
partners_survey = UserInput |
|
|
|
in_onchange = self.env.in_onchange |
|
|
|
in_onchange = self.env.context.get("in_onchange", False) |
|
|
|
origin = in_onchange and self._origin or False |
|
|
|
if in_onchange: |
|
|
|
domain = [ |
|
|
|
("partner_id", "=", self._origin.id), |
|
|
|
"|", |
|
|
|
("type", "=", "link"), |
|
|
|
("invite_token", "not in", [False, None]), |
|
|
|
("state", "=", "dones"), |
|
|
|
] |
|
|
|
if self.email: |
|
|
@ -41,7 +40,7 @@ class ResPartner(models.Model): |
|
|
|
("partner_id", "in", self.ids), |
|
|
|
("email", "in", self.filtered("email").mapped("email")), |
|
|
|
"|", |
|
|
|
("type", "=", "link"), |
|
|
|
("invite_token", "not in", [False, None]), |
|
|
|
("state", "=", "done"), |
|
|
|
] |
|
|
|
) |
|
|
@ -60,25 +59,24 @@ class ResPartner(models.Model): |
|
|
|
or partner.email |
|
|
|
and sui.email == partner.email |
|
|
|
) |
|
|
|
and sui.type == "link" |
|
|
|
and sui.invite_token |
|
|
|
) |
|
|
|
partner.tot_sent_survey = len(link) |
|
|
|
partner.tot_comp_survey = len(done) |
|
|
|
partner.tot_sent_comp_survey = len(link & done) |
|
|
|
partner.tot_done_survey = len(done) |
|
|
|
partner.tot_sent_done_survey = len(link & done) |
|
|
|
|
|
|
|
@api.depends("tot_sent_comp_survey", "tot_sent_survey") |
|
|
|
def _get_sent_comp_ratio(self): |
|
|
|
@api.depends("tot_sent_done_survey", "tot_sent_survey") |
|
|
|
def _get_sent_done_ratio(self): |
|
|
|
for survey in self: |
|
|
|
if survey.tot_sent_survey == 0: |
|
|
|
survey.sent_comp_ratio = 0 |
|
|
|
survey.sent_done_ratio = 0 |
|
|
|
else: |
|
|
|
survey.sent_comp_ratio = int( |
|
|
|
round(100 * survey.tot_sent_comp_survey / survey.tot_sent_survey, 0) |
|
|
|
survey.sent_done_ratio = int( |
|
|
|
round(100 * survey.tot_sent_done_survey / survey.tot_sent_survey, 0) |
|
|
|
) |
|
|
|
|
|
|
|
# ACTIONS |
|
|
|
|
|
|
|
@api.multi |
|
|
|
def action_survey_user_input(self): |
|
|
|
self.ensure_one() |
|
|
|
action = self.env.ref("survey.action_survey_user_input").read()[0] |
|
|
@ -102,9 +100,14 @@ class ResPartner(models.Model): |
|
|
|
domain = ["|", ("partner_id", "=", self.id), ("email", "ilike", self.email)] |
|
|
|
if link_only: |
|
|
|
if len(domain) > 1: |
|
|
|
domain = AND([[("type", "=", "link")], normalize_domain(domain)]) |
|
|
|
domain = AND( |
|
|
|
[ |
|
|
|
[("invite_token", "not in", [False, None])], |
|
|
|
normalize_domain(domain), |
|
|
|
] |
|
|
|
) |
|
|
|
else: |
|
|
|
domain = [("type", "=", "link")] |
|
|
|
domain = [("invite_token", "not in", [False, None])] |
|
|
|
action["domain"] = domain |
|
|
|
# return updated action |
|
|
|
return action |
|
|
@ -115,4 +118,4 @@ class ResPartner(models.Model): |
|
|
|
def onchange_email(self): |
|
|
|
self.ensure_one() |
|
|
|
if isinstance(self._origin.id, int): |
|
|
|
self._count_survey_input() |
|
|
|
self.with_context(in_onchange=True)._count_survey_input() |