From d4223da9d9c04c34948c45640a1aa214214b1e65 Mon Sep 17 00:00:00 2001 From: hsilvant <hsilvant@scop.coop> Date: Fri, 1 May 2020 17:35:20 +0200 Subject: [PATCH] Ajout des newletter auto --- models/res_partner.py | 69 ++++++++++++++++++++++++++++++++ models/res_partner_newsletter.py | 1 + views/scop_config_views.xml | 1 + 3 files changed, 71 insertions(+) diff --git a/models/res_partner.py b/models/res_partner.py index 42d4e43..4e025b4 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -524,6 +524,65 @@ class ScopPartner(models.Model): }) partner.scop_period_ids = new_period + # ------------------------------------------------------ + # Abonnement automatique aux newletter + # Point d'entrée commun à tous les type de partner + # ------------------------------------------------------ + def _newletter_auto(self, partner): + + # On ne garde que les partner de type contact + if partner.type != 'contact': + return + + # Cas d'une cie, on boucle sur les contacts + if (partner.is_company): + for cnt in partner.director_ids: + partner._newletter_auto_contact(cnt, partner.membership_status) + for cnt in partner.other_child_ids: + partner._newletter_auto_contact(cnt, partner.membership_status) + + # Cas d'un contact, on récupère le partner parent + else: + if (partner.parent_id): + parent_cie = self.search([('id','=',partner.parent_id.id)]) + if (parent_cie): + partner._newletter_auto_contact(partner, parent_cie.membership_status) + + return + + # ------------------------------------------------------ + # Abonnement automatique aux newletter + # Si appartient à une coopérative adhérentes + # ------------------------------------------------------ + def _newletter_auto_contact(self, partner, membership_status): + + # On ne garde que les partner de type contact + if partner.type != 'contact': + return + + # Si pas adhérent alors on arrete là + if membership_status != 'member': + return + + # On récupère la liste des newletters auto + nwltrs = self.env['res.partner.newsletter'].search([('auto','=',True)]) + for nwltr in nwltrs: + # On regarde si l'on n'est pas déjà abonné + for sub in partner.subscription_ids: + if sub.newsletter_id.id == nwltr.id: + return + # Si on est là c'est que l'on n'a pas trouvé l'abonnement + self.env['res.partner.newsletter.subscription'].create( + { + 'partner_id' : partner.id, + 'newsletter_id' : nwltr.id, + 'consent' : True + }) + + + return + + # ------------------------------------------------------ # Override ORM # ------------------------------------------------------ @@ -584,6 +643,12 @@ class ScopPartner(models.Model): partner.creation_delegate_id.partner_id.id ] partner.message_subscribe(partner_ids=partners_to_subscribe) + + # Abonnements + for partner in partners: + partner._newletter_auto(partner) + + return partners # ------------------------------------------------------ @@ -686,6 +751,8 @@ class ScopPartner(models.Model): and not last_membership_period.end): partner.membership_status = "member" partner.member_number = last_membership_period.number + # Abonnements + partner._newletter_auto(partner) elif (last_membership_period and last_membership_period.end_reason_id): partner.membership_status = "out" @@ -693,6 +760,8 @@ class ScopPartner(models.Model): else: partner.membership_status = "not_member" + + @api.depends('member_number') @api.multi def _compute_membership_int(self): diff --git a/models/res_partner_newsletter.py b/models/res_partner_newsletter.py index cea52ef..e0acbb4 100644 --- a/models/res_partner_newsletter.py +++ b/models/res_partner_newsletter.py @@ -27,3 +27,4 @@ class ResPartnerNewsletter(models.Model): name = fields.Char('Newsletter') id_riga = fields.Integer("Identifiant RIGA") + auto = fields.Boolean("Abonnement auto.") diff --git a/views/scop_config_views.xml b/views/scop_config_views.xml index f01bfde..296aba2 100644 --- a/views/scop_config_views.xml +++ b/views/scop_config_views.xml @@ -171,6 +171,7 @@ <field name="arch" type="xml"> <tree string="Newsletters" editable="top"> <field name="name"/> + <field name="auto"/> </tree> </field> </record> -- GitLab