diff --git a/models/res_partner.py b/models/res_partner.py index 42d4e438c5726025280431f917ffffc21fb66985..4e025b4139b88a2f50aafa5e369a14207d05b2f9 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 cea52ef26d4b23291920e3ea861b42f39f79901d..e0acbb45be1fa4d3f22af769a108ceddcf7681e0 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 f01bfde097c7867644428cf7437fdcde93b64c1f..296aba27f8d2de6d5c6dd5d918655fe58c4f8beb 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>