diff --git a/energy_communities/controllers/website_community_data.py b/energy_communities/controllers/website_community_data.py index dc5781e1bf45fd2ff987409fd1cfb4d3b8c616f1..30bf6230b6b98c0661709bfb231bde2d4787bf60 100644 --- a/energy_communities/controllers/website_community_data.py +++ b/energy_communities/controllers/website_community_data.py @@ -260,6 +260,7 @@ class WebsiteCommunityData(http.Controller): def _get_langs(self): return ( request.env["res.lang"] + .sudo() .search([("active", "=", 1)]) .mapped(lambda r: {"id": r.code, "name": r.name}) ) @@ -267,6 +268,7 @@ class WebsiteCommunityData(http.Controller): def _get_energy_service_tags(self): return ( request.env["crm.tag"] + .sudo() .search([("tag_type", "=", "energy_service")]) .mapped( lambda r: { @@ -286,6 +288,7 @@ class WebsiteCommunityData(http.Controller): def _get_energy_service_tag_ids(self): return ( request.env["crm.tag"] + .sudo() .search([("tag_type", "=", "energy_service")]) .mapped(lambda r: r.tag_ext_id.replace("energy_communities.", "")) ) @@ -503,16 +506,40 @@ class WebsiteCommunityData(http.Controller): # DATA PROCESSING # def _process_lead_metadata(self, values): + changed_data = [] related_lead = ( request.env["crm.lead"].sudo().search([("id", "=", values["lead_id"])]) ) for meta_key in _COMMUNITY_DATA__GENERAL_FIELDS.keys(): if meta_key in values.keys(): - related_lead.create_update_metadata(meta_key, values[meta_key]) + changed = related_lead.create_update_metadata( + meta_key, values[meta_key] + ) + if changed: + changed_data.append(meta_key) for meta_key in _COMMUNITY_DATA__IMAGE_FIELDS.keys(): if meta_key in values.keys(): attachment = self._create_attachment(related_lead, values[meta_key]) - related_lead.create_update_metadata(meta_key, attachment.id) + changed = related_lead.create_update_metadata(meta_key, attachment.id) + if changed: + changed_data.append(meta_key) + # notification message + if bool(changed_data): + changed_data_msg_body = "<h6>{}</h6><ul>".format( + _("Public community data changed:") + ) + for meta_key in changed_data: + changed_data_msg_body += "<li>{label}: {value}</li>".format( + label=_COMMUNITY_DATA__FIELDS[meta_key], value=values[meta_key] + ) + changed_data_msg_body += "</ul>" + related_lead.sudo().message_post( + subject="{} public form submission".format(related_lead.name), + body=changed_data_msg_body, + subtype_id=None, + message_type="notification", + subtype_xmlid="mail.mt_comment", + ) def _create_attachment(self, lead, value): return ( diff --git a/energy_communities/models/crm_lead.py b/energy_communities/models/crm_lead.py index 70ca05942b0ce55d09bba239e5bdfb847afb6d3b..db5fd737b70a2f0c8da80c55485301dc4eaedb29 100644 --- a/energy_communities/models/crm_lead.py +++ b/energy_communities/models/crm_lead.py @@ -229,11 +229,15 @@ class CrmLead(models.Model): lambda record: record.key == meta_key ) if existing_meta: - existing_meta.write({"value": meta_value}) + if existing_meta.value != meta_value: + existing_meta.write({"value": meta_value}) + return True else: self.env["crm.lead.metadata.line"].create( {"key": meta_key, "value": meta_value, "crm_lead_id": self.id} ) + return True + return False class CrmTags(models.Model):