diff --git a/README.rst b/README.rst index b2119363c6650560f51ae3bd0c652fa65192b46e..5b1b60c41bebb3b8c089fde474be9a69d6f56637 100644 --- a/README.rst +++ b/README.rst @@ -3,18 +3,33 @@ :alt: License: AGPL-3 -============================== -Finacoop - Automatisation de la lettre de coopération -============================== +=================================== +Finacoop - La lettre de coopération +=================================== + +Description +=========== + +Ce modue permet la création d'une lettre de coopération à patir d'une *sale.order*. +Il comprend les fonctionnalités suivantes : + +* Hérite *sale.order* pour ajouter des champs nécessaires à génération de la lettre de coop +* Ajoute un modèle *fina.lettre.coop* pour générer des modèles de C +* Hérite la formview *sale* pour ajouter les champs et filtrer *partner_id* sur les clients +* Ajoute les boutons d'impression et de validation de la LC +* Ajoute l'étape **Validation LC** avant envoi +* Ajoute un template de mail pour envoi de la LC Credits ======= -Contributors ------------ +Contributors +------------ * Juliana Poudou <juliana@le-filament.com> -Maintainer ---------- +Maintainer +---------- .. image:: https://le-filament.com/images/logo-lefilament.png :alt: Le Filament diff --git a/__manifest__.py b/__manifest__.py index 5750871bee686c19027b546d7f5b56f04aa6b358..c2340f4a2ee82f9f603233c80aa6376790e10137 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -4,30 +4,28 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Finacoop - Automatisation lettre de coopération', - 'version': '10.0.1.0', - 'description': """ - Automatisation de la lettre de coopération - """, - 'author': 'LE FILAMENT', - 'license': 'AGPL-3', - 'category': 'Finacoop', - 'depends': ['base','sale', 'mail'], - 'contributors': [ + 'name': 'Finacoop - Automatisation lettre de coopération', + 'version': '10.0.1.0', + 'author': 'LE FILAMENT', + 'license': 'AGPL-3', + 'category': 'Finacoop', + 'depends': ['base','sale', 'mail'], + 'contributors': [ 'Juliana Poudou <juliana@le-filament.com>', - ], - 'website': 'http://www.le-filament.com', - 'data': [ - 'security/ir.model.access.csv', - 'wizard/email_template_preview_view.xml', - 'views/finacoop_assets.xml', - 'views/sale_views.xml', - 'views/fina_lettre_coop_views.xml', - 'report/report_finacoop_layout.xml', - 'report/report_lettre_coop.xml', - 'data/data.xml', - ], - 'qweb': [ - 'static/src/xml/*.xml', - ], + ], + 'website': 'http://www.le-filament.com', + 'data': [ + 'security/ir.model.access.csv', + 'wizard/email_template_preview_view.xml', + 'views/finacoop_assets.xml', + 'views/sale_views.xml', + 'views/fina_lettre_coop_views.xml', + 'report/report_finacoop_layout.xml', + 'report/report_lettre_coop.xml', + 'data/data.xml', + 'data/mail_template.xml', + ], + 'qweb': [ + 'static/src/xml/*.xml', + ], } diff --git a/data/mail_template.xml b/data/mail_template.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a1a9dc8dffb526b60efbd5eaccccb72aae73cbd --- /dev/null +++ b/data/mail_template.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + + <!-- Mail template are declared in a NOUPDATE block + so users can freely customize/delete them --> + <data noupdate="1"> + <!--Email template --> + <record id="email_template_finacoop_lettre_coop" model="mail.template"> + <field name="name">Finacoop - Mail LC</field> + <field name="email_from">facturation@finacoop.fr</field> + <field name="subject">Lettre de coopération ${object.lettre_coop.name or ''} ${str(object.millesime) or ''} ${object.partner_id.display_name or ''}-FINACOOP</field> + <field name="partner_to">${object.partner_id.id}</field> + <field name="model_id" ref="sale.model_sale_order"/> + <field name="auto_delete" eval="False"/> + <field name="report_template" ref="finacoop_lettre_coop.report_finacoop_lettre_coop_pdf"/> + <field name="report_name">${object.partner_id.display_name} - Lettre Coopération ${object.name or ''}</field> + <field name="lang">${object.partner_id.lang}</field> + <field name="body_html"> + <![CDATA[ + <p>Salut ${object.contact.firstname or ''},<p> + <br/> + <p>Ravi de notre rencontre de la dernière fois.</p> + <p>Comme promis voici un récapitulatif pour aller de l'avant :</p> + <p><b>> Proposition de coopération</b></p> + <p>Tu trouveras ci-joint une proposition de coopération ${object.lettre_coop.name or ''} ${ ('pour'+ object.partner_id.display_name) or ''} ${('sur' + str(object.millesime)) or ''}.</p> + <br/> + <p>Cette proposition est basée sur un tarif horaire de 75€ HT valable pour toutes nos missions et tous les bénéficiaires que nous accompagnons, avec des salaires limités à 3 fois le salaire de branche dans les statuts de FINACOOP, taux horaire et rémunérations qui sont votés en AG par les salariés, bénéficiaires et partenaires de FINACOOP.</p> + <p>Dis-moi si tu souhaites plus d'éclaircissements, revoir les missions de la présente lettre, ou que je te transmette d'autres propositions pour des missions complémentaires.</p> + <br/> + <p><b>> Social/RH</b></p> + <p>S'agissant du Social-RH, je te laisse en PJ l'offre de cotraitance que nous avons conclus avec Extalea. Je me tiens disponible pour vous donner plus de détails sur <a href="https://www.extalea.net/">Extalea</a> et son outil collaboratif <a href="https://www.silaexpert.fr/">SILAE</a>.</p> + <p>Et si vous vous demandez à quoi ressemble <a href="http://www.finacoop.fr/blog/">notre blog</a>, voici un exemple d'article sur <a href="http://www.finacoop.fr/2017/03/13/tout-savoir-sur-la-reglementation-et-les-avantages-du-teletravail/">le télétravail</a> ou autres <a href="http://www.finacoop.fr/2016/05/26/6-idees-pour-optimiser-les-remunerations-de-vos-salaries/">remboursements de frais pro</a>.</p> + <br/> + <p><b>> Comptabilité associative</b></p> + <p>Voici quelques vidéos très courtes issues du MOOC <a href="http://moocasso-animafacavise.strikingly.com/#1">Aller + loin avec son asso</a> d'Animafac qui pourront être utiles sur les assos :</p> + <p> - <a href="https://www.youtube.com/watch?v=pUWYMWQHcDY&t=25s">Le plan comptable associatif</a></p> + <p> - <a href="https://www.youtube.com/watch?v=pl4ko7Hxg5E">Structurer ses fonds propres</a></p> + <p>Si vous avez des idées de contenus qu'on pourrait développer sous forme d'atelier/formation/MOOC, nous sommes preneurs !</p> + <br/> + <p><b>> EESS, ESUS, quezako ?</b></p> + <p>Tu trouveras dans notre <a href="http://www.finacoop.fr/boite-a-outils/">Boite à outils</a> une <a href="http://www.finacoop.fr/wp-content/uploads/2019/02/Avantages-EESS-ESUS-20190227.pdf">note sur les avantages</a> d'être Entreprise de l’Économie Sociale et Solidaire (EESS) & Entreprise Solidaire d'Utilité Sociale (ESUS), si un jour cela vous intéresserait de vous en revendiquer et d'aller jusqu'à l'ESUS.</p> + <p>+ une p’tite vidéo que nous avons tourné : <a href="https://www.youtube.com/watch?v=uSgshGjuhmM&t=14s">Qu'est-ce que l'agrément ESUS ?</a></p> + <br/> + <p><b>> Ce que nous pourrons faire gratuitement</b></p> + <p>Vérifier un modèle de devis et facture pour s'assurer que toutes les mentions obligatoires apparaissent.</p> + <br/> + <p><b>> Écosystème</b></p> + <p>Voici la liste de nos partenaires incluant <a href="https://docs.google.com/document/d/1tSrUbUOzM1vyM__TpuV0v7r-nMNPTDZ7i4EUT5IWQDw/edit">nos partenaires</a> financiers et bancaires. </p> + <br/> + <p><b>> Outils très pratiques (et gratuits !) pour une numérisation écolo</b></p> + <p> - <a href="https://get.adobe.com/fr/reader/">Adobe DC</a> pour écriture (ex : "Bon pour accord"), signature et tampon numériques sur PDF dans les relations fournisseurs, clients, partenaires, ... </p> + <p> - <a href="https://ecofont.fr.uptodown.com/windows/telecharger">EcoFont</a> pour écrire avec une police écologique</p> + <p> - <a href="https://pdfsam.org/">PDF SAM</a> pour retravailler des PDF (fusion, scission, rotation, ...)</p> + <p> - <a href="https://www.smartreceipts.co/">Smart Receipts</a> ou <a href="https://rca.fr/meg/facturation/">RCA</a> pour gérer ses notes de frais et les exporter dans un GDrive en format csv par exemple.</p> + <p>Pour s’orienter un peu plus vers une organisation socio-digitale !</p> + <br/> + <p>A dispo pour discuter de tout cela,</p> + <br/> + <p>Coop'</p> + <br/> + <img src="/finacoop_account/static/src/img/logo.png" alt="Logo Finacoop" /> + <p><b>Mathieu Castaings</b></p> + <p style="font-size: 10px; color: #aaa;"> + Adresse : 24 rue de l'Est 75020 PARIS + </p> + <p style="font-size: 10px; color: #aaa;"> + <a href="http://www.finacoop.fr/">finacoop.fr </a><br/> + <a href="https://twitter.com/FINACOOP_">Twitter </a> | <a href="https://www.facebook.com/FINACOOP">Facebook</a> | <a href="https://www.linkedin.com/company/finacoop">LinkedIn</a> | <a href="http://www.dailymotion.com/FINACOOP">Dailymotion</a> + </p> + ]]> + </field> + </record> + </data> +</odoo> \ No newline at end of file diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 0000000000000000000000000000000000000000..352468486284c33d16d26a3ccef3c8f624a2d96f --- /dev/null +++ b/i18n/fr.po @@ -0,0 +1,28 @@ +# Translation of Odoo Server for Finacoop. +# This file contains the translation of the following modules: +# * sale +# +# Translators: +# fr trans <benjamin@le-filament.com>, 2019 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-27 13:18+0000\n" +"PO-Revision-Date: 2019-02-27 13:18+0000\n" +"Language-Team: French (https://www.transifex.com/odoo/teams/41243/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: sale +#: selection:sale.report,state:0 +msgid "Draft Quotation" +msgstr "LC brouillon" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_quotation_form +msgid "New Quotation" +msgstr "Nouvelle LC" diff --git a/models/fina_lettre_coop.py b/models/fina_lettre_coop.py index 19a1db5a1a53263895b3fb2b9019724a6353fae5..415e1c90015ed8877102073f2d313aa95883579e 100644 --- a/models/fina_lettre_coop.py +++ b/models/fina_lettre_coop.py @@ -9,14 +9,14 @@ from odoo.addons.mail.models import mail_template class FinacoopLettreCoop(models.Model): - _name = "fina.lettre.coop" - _description = 'Lettre de Coop' + _name = "fina.lettre.coop" + _description = 'Lettre de Coop' - name = fields.Char('Nom de la lettre de coop') - subject = fields.Char('Objet', help="Objet") - body_html = fields.Html('Contenu', sanitize=False) - type_lettre = fields.Boolean('Type de lettre') - - def print_content(self, model_id): - converted_content = mail_template.mako_template_env.from_string(self.body_html).render({'object': model_id,}) - return converted_content \ No newline at end of file + name = fields.Char('Nom de la lettre de coop') + subject = fields.Char('Objet', help="Objet") + body_html = fields.Html('Contenu', sanitize=False) + type_lettre = fields.Boolean('Type de lettre') + + def print_content(self, model_id): + converted_content = mail_template.mako_template_env.from_string(self.body_html).render({'object': model_id,}) + return converted_content \ No newline at end of file diff --git a/models/sale.py b/models/sale.py index f37b1b597485c197301f6e85cc976f392ff2768e..f36d6a575ade9d3b4ec3395257b8880d1bd15a15 100644 --- a/models/sale.py +++ b/models/sale.py @@ -40,15 +40,22 @@ class FinacoopSaleOrder(models.Model): orga_comptable = fields.Char('Organisation comptable') volumes_annuels = fields.Integer('Volumes annuels') exercice_revise = fields.Integer('Exercice révisé') - tarifs_horaires = fields.Integer("Tarif horaire", default=70) + tarifs_horaires = fields.Integer("Tarif horaire", default=75) annexe1 = fields.Boolean('Annexe 1') annexe2 = fields.Boolean('Annexe 2') contact = fields.Many2one('res.partner', 'Contact', domain=[('is_company','=',False), ]) - lettre_coop_sale = fields.Boolean('Lettre de coopération') ## PDF lettre signé pdf_lettre_signe = fields.Binary("Lettre coop signé") pdf_filename = fields.Char('Lettre signé PDF') + @api.multi + def action_quotation_send(self): + res = super(FinacoopSaleOrder, self).action_quotation_send() + template = self.env.ref('finacoop_lettre_coop.email_template_finacoop_lettre_coop', False) + res['context']['default_template_id']=template and template.id or False + res['context']['custom_layout']="" + return res + @api.onchange('lettre_coop') def onchange_lettre_coop(self): if self.lettre_coop: diff --git a/static/src/less/style.less b/static/src/less/style.less index 49addd0bd6537be89fe7d9cdfd1c4972433a50f6..4e783d691a373c3ea824faf58acd1e1b33af658d 100644 --- a/static/src/less/style.less +++ b/static/src/less/style.less @@ -6,7 +6,6 @@ font-style: normal; } - .font1() { font-family: 'Ecofont Vera Sans'; } .text-middle { vertical-align: middle!important; } diff --git a/views/sale_views.xml b/views/sale_views.xml index 17c1e5070eabaf02d60ab88f04c86f101af7d0fe..bfc28711e212e6c9795d4e06cc9d94a74d8a6fbc 100644 --- a/views/sale_views.xml +++ b/views/sale_views.xml @@ -9,7 +9,7 @@ <field name="arch" type="xml"> <!-- HEADER FORM --> <xpath expr="//button[@name='action_cancel']" position="after"> - <button name="%(finacoop_wizard_lettre_preview)d" string="Prévisualiser lettre de Coop" type="action" attrs="{'invisible': ['|',('lettre_coop_sale', '=', False),('state', '!=', 'draft')]}" /> + <button name="%(finacoop_wizard_lettre_preview)d" string="Prévisualiser lettre de Coop" type="action" attrs="{'invisible': [('state', '!=', 'draft')]}" /> </xpath> <!-- Senb by email --> <xpath expr="//button[@name='action_quotation_send']" position="attributes"> @@ -40,16 +40,19 @@ </xpath> <!-- SHEET --> + <xpath expr="//field[@name='partner_id']" position="attributes"> + <attribute name="domain">[('is_company','=',True), ('customer','=',True)]</attribute> + </xpath> <xpath expr="//field[@name='partner_id']" position="after"> - <field name="contact"/> + <field name="contact" attrs="{'invisible': [('partner_id', '=', False)]}" domain="[('parent_id', '=', partner_id)]" /> </xpath> <xpath expr="//field[@name='payment_term_id']" position="after"> - <field name="lettre_coop_sale" attrs="{'readonly': [('state', '!=', 'draft')]}"/> - <field name="lettre_coop" attrs="{'invisible': [('lettre_coop_sale', '=', False)]}"/> + <field name="lettre_coop" required="1" /> + <field name="millesime" required="1" /> <field name="tarifs_horaires" attrs="{'readonly': [('state', '!=', 'draft')]}"/> </xpath> <xpath expr="//notebook" position="before"> - <div attrs="{'invisible': [('lettre_coop_sale', '=', False)]}"> + <div> <label for="pdf_lettre_signe"/>: <field name="pdf_filename" invisible="1"/><field widget="binary" name="pdf_lettre_signe" filename="pdf_filename"/> </div> </xpath> @@ -74,14 +77,13 @@ <field name="nb_rdv"/> <field name="orga_administrative"/> <field name="exercice_social"/> - <field name="millesime"/> <field name="orga_comptable"/> <field name="volumes_annuels"/> <field name="exercice_revise"/> </group> </group> </page> - <page string="Lettre de Coop" attrs="{'invisible': [('lettre_coop_sale', '=', False)]}" name="lc_preview"> + <page string="Lettre de Coop" name="lc_preview"> <group> <group> <field name="annexe1"/>