Skip to content
Extraits de code Groupes Projets
Valider 31cf16aa rédigé par jordan's avatar jordan
Parcourir les fichiers

[update] init commit to send email from bordereau

parent 3b735646
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
"data": [ "data": [
"security/security_rules.xml", "security/security_rules.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
"datas/mail_data.xml",
"views/account_invoice.xml", "views/account_invoice.xml",
"views/res_config_settings.xml", "views/res_config_settings.xml",
"views/scop_bordereau_cg.xml", "views/scop_bordereau_cg.xml",
......
<?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>
...@@ -97,9 +97,15 @@ class Bordereau(models.Model): ...@@ -97,9 +97,15 @@ class Bordereau(models.Model):
# Emails management # Emails management
recipient_ids = fields.One2many( recipient_ids = fields.One2many(
comodel_name='res.partner', 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 # Compute
# ------------------------------------------------------ # ------------------------------------------------------
...@@ -123,6 +129,18 @@ class Bordereau(models.Model): ...@@ -123,6 +129,18 @@ class Bordereau(models.Model):
r.amount_total_cotiz = sum( r.amount_total_cotiz = sum(
r.invoice_ids.mapped('amount_total_signed')) 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 # Button functions
# ------------------------------------------------------ # ------------------------------------------------------
...@@ -196,13 +214,36 @@ class Bordereau(models.Model): ...@@ -196,13 +214,36 @@ class Bordereau(models.Model):
report_action(bordereau) report_action(bordereau)
@api.multi @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: for bordereau in self:
totlines = bordereau.payment_term_id.with_context( # lm_publish_action = self._context.get('lm_publish_action',
currency_id=self.base_cotisation_cg.company_currency_id.id). \ # False)
compute(bordereau.amount_total_cotiz, ir_model_data = self.env['ir.model.data']
bordereau.date_cotisation)[0] try:
return totlines 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 # Override ORM
...@@ -225,3 +266,25 @@ class Bordereau(models.Model): ...@@ -225,3 +266,25 @@ class Bordereau(models.Model):
'statut "validé / ouvert".' 'statut "validé / ouvert".'
) )
return super(Bordereau, self).unlink() 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
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
<button name="add_cotiz" string="Ajouter une ligne de cotisation" type="object" states="new"/> <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="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="print_bordereau" string="Imprimer" type="object" states="validated,paid"/>
<button name="action_send_email" string="Envoyer par mail" type="object" states="validated"/>
</header> </header>
<sheet> <sheet>
<div class="oe_title"> <div class="oe_title">
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter