diff --git a/__manifest__.py b/__manifest__.py index 662f540e30bd6001599069df39f7632f523d777d..4966bf910aa3c77dc43fd4416d6d5c27b7d484e6 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -14,6 +14,7 @@ "data": [ "security/security_rules.xml", "security/ir.model.access.csv", + "datas/mail_data.xml", "views/account_invoice.xml", "views/res_config_settings.xml", "views/scop_bordereau_cg.xml", diff --git a/datas/mail_data.xml b/datas/mail_data.xml new file mode 100644 index 0000000000000000000000000000000000000000..74c5b65792b6d08c0e218f1d52cb894f9ee19593 --- /dev/null +++ b/datas/mail_data.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data noupdate="0"> + + <!-- Template and notification section --> + + <record id="email_template_cotisation_cg" model="mail.template"> + <field name="name">CG Scop - Mail cotisations CG</field> + <field name="model_id" ref="cgscop_cotisation_cg.model_scop_bordereau"/> + <field name="email_from">${object.env.user.email_formatted |safe}</field> + <field name="partner_to">${object.get_recipients()}</field> + <field name="subject">Appel de cotisations ${object.year}</field> + <field name="body_html" type="html"> + <div style="margin: 0px; padding: 0px;"> + <p style="margin: 0px; padding: 0px; font-size: 13px;"> + <p>Chère Coopératrice, Cher Coopérateur,</p> + + <p>Cotisation sur votre espace extranet : lien</p> + + <p>Nous vous prions d'agréer, Chère Coopératrice, Cher Coopérateur, nos sentiments les meilleurs.</p> + + <p>Pour la CG Scop,</p> + + <p>JACQUES LANDRIOT</p> + <p>Président</p> + </p> + </div> + </field> + <field name="lang">${object.partner_id.lang}</field> + <field name="user_signature" eval="False"/> + <field name="auto_delete" eval="False"/> + </record> + + +<!-- <record id="email_template_send_again" model="mail.template">--> +<!-- <field name="name">CG Scop - Liste Ministere: Renvoyer le dossier</field>--> +<!-- <field name="model_id" ref="cgscop_liste_ministere.model_liste_ministere"/>--> +<!-- <field name="email_from">${object.user_id.email_formatted |safe}</field>--> +<!-- <field name="partner_to">${object.get_recipients()}</field>--> +<!-- <field name="subject">Dossier incomplet</field>--> +<!-- <field name="body_html" type="html">--> +<!-- <div style="margin: 0px; padding: 0px;">--> +<!-- <p style="margin: 0px; padding: 0px; font-size: 13px;">--> +<!-- <p>Madame, Monsieur,</p>--> +<!-- --> +<!-- <p>Nous accusons réception de votre dossier de demande de renouvellement d’inscription sur la Liste Ministère, parvenu à la Confédération Générale des Scop qui n’est pas la année de clôture d’exercice demandé<br/>--> +<!-- Nous vous indiquons que votre dossier doit être complété par les pièces suivantes :</p>--> + +<!-- <p>Nous vous invitons à nous retourner ces documents dans les meilleurs délais.</p>--> +<!-- --> +<!-- <p>Dans l’attente de votre retour, nous restons à votre disposition pour toute précision utile.</p>--> +<!-- --> +<!-- <p>Très cordialement</p>--> +<!-- </p>--> +<!-- </div>--> +<!-- </field>--> +<!-- <field name="lang">${object.partner_id.lang}</field>--> +<!-- <field name="user_signature" eval="False"/>--> +<!-- <field name="auto_delete" eval="False"/>--> +<!-- </record>--> + + </data> +</odoo> diff --git a/models/scop_bordereau_cg.py b/models/scop_bordereau_cg.py index 52494f71566325bb9489c61352efa6fba9faf508..bfc1f344a405e1571bfae2b71a3bf0cd949dc9a9 100644 --- a/models/scop_bordereau_cg.py +++ b/models/scop_bordereau_cg.py @@ -97,9 +97,15 @@ class Bordereau(models.Model): # Emails management recipient_ids = fields.One2many( comodel_name='res.partner', - related='base_cotisation_cg.recipient_ids', + compute='_compute_recipient' ) + # TODO : Use when email active + # email_count = fields.Integer( + # string='Nombre de mails', + # compute='_compute_emails' + # ) + # ------------------------------------------------------ # Compute # ------------------------------------------------------ @@ -123,6 +129,18 @@ class Bordereau(models.Model): r.amount_total_cotiz = sum( r.invoice_ids.mapped('amount_total_signed')) + @api.multi + def _compute_recipient(self): + tag_cotiz_id = self.env.user.company_id.tag_cotiz_id + for bordereau in self: + child_ids = bordereau.partner_id.child_ids.filtered( + lambda child: + (tag_cotiz_id in child.category_id) and child.email) + if bordereau.partner_id.email: + bordereau.recipient_ids = bordereau.partner_id + child_ids + else: + bordereau.recipient_ids = child_ids + # ------------------------------------------------------ # Button functions # ------------------------------------------------------ @@ -196,13 +214,36 @@ class Bordereau(models.Model): report_action(bordereau) @api.multi - def get_bordereau_move_line(self): + def action_send_email(self): + template_id = self.env.ref( + 'cgscop_cotisation_cg.email_template_cotisation_cg') for bordereau in self: - totlines = bordereau.payment_term_id.with_context( - currency_id=self.base_cotisation_cg.company_currency_id.id). \ - compute(bordereau.amount_total_cotiz, - bordereau.date_cotisation)[0] - return totlines + # lm_publish_action = self._context.get('lm_publish_action', + # False) + ir_model_data = self.env['ir.model.data'] + try: + compose_form_id = ir_model_data.get_object_reference( + 'mail', 'email_compose_message_wizard_form')[1] + except ValueError: + compose_form_id = False + ctx = { + 'default_model': 'scop.bordereau', + 'default_res_id': bordereau.id, + 'default_use_template': True, + 'default_template_id': template_id.id, + 'default_composition_mode': 'comment', + # 'lm_publish_action': lm_publish_action, + } + return { + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'mail.compose.message', + 'views': [(compose_form_id, 'form')], + 'view_id': compose_form_id, + 'target': 'new', + 'context': ctx, + } # ------------------------------------------------------ # Override ORM @@ -225,3 +266,25 @@ class Bordereau(models.Model): 'statut "validé / ouvert".' ) return super(Bordereau, self).unlink() + + # ------------------------------------------------------ + # Global Functions + # ------------------------------------------------------ + @api.multi + def get_bordereau_move_line(self): + """ + Get payment dates for bordereau according to payment_term in bordereau + Use "compute" function from account.move + :return: dict with date as key and amount (float) as value + """ + for bordereau in self: + totlines = bordereau.payment_term_id.with_context( + currency_id=self.base_cotisation_cg.company_currency_id.id). \ + compute(bordereau.amount_total_cotiz, + bordereau.date_cotisation)[0] + return totlines + + # Email + def get_recipients(self): + recipients = ','.join(map(lambda x: str(x), self.recipient_ids.ids)) + return recipients diff --git a/views/scop_bordereau_cg.xml b/views/scop_bordereau_cg.xml index 97cf4b1243274fc4087d094431004c775e58c8cf..e6d202de3998ca3cd6db5a95753c0589cf2fe541 100644 --- a/views/scop_bordereau_cg.xml +++ b/views/scop_bordereau_cg.xml @@ -42,6 +42,7 @@ <button name="add_cotiz" string="Ajouter une ligne de cotisation" type="object" states="new"/> <button name="action_bordereau_paid" string="Passer le bordereau à payé" type="object" states="validated"/> <button name="print_bordereau" string="Imprimer" type="object" states="validated,paid"/> + <button name="action_send_email" string="Envoyer par mail" type="object" states="validated"/> </header> <sheet> <div class="oe_title">