Skip to content
Snippets Groups Projects
Commit 3f5a6832f877 authored by aronabencherif.diatta@xcg.africa's avatar aronabencherif.diatta@xcg.africa
Browse files

Update change set ab0e2f73d041: add invoice template as standard

parent efe989234664
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,11 @@
Changelog
=========
16.0.1.3.0
----------
Update change set ab0e2f73d041: Add invoice template as standard
16.0.1.2.3
----------
......
......@@ -21,7 +21,7 @@
{
"name": "Redner",
"license": "AGPL-3",
"version": "16.0.1.2.3",
"version": "16.0.1.3.0",
"category": "Reporting",
"author": "XCG Consulting",
"website": "https://orbeet.io/",
......
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Function for making report template -->
<function model="ir.actions.report" name="_redner_demo_invoice_having_report">
<value
eval="[
ref('redner.redner_avoir_substitution'),
ref('redner.redner_avoir_logo_body_substitution'),
ref('redner.redner_avoir_logo_mime_type_substitution'),
ref('redner.redner_bic_societe_substitution'),
ref('redner.redner_condition_paiement_substitution'),
ref('redner.redner_facture_substitution'),
ref('redner.redner_facture_logo_body_substitution'),
ref('redner.redner_facture_logo_mime_type_substitution'),
ref('redner.redner_iban_societe_substitution'),
ref('redner.redner_invoice_line_ids_substitution'),
ref('redner.redner_invoice_line_ids_article_substitution'),
ref('redner.redner_invoice_line_ids_prixunitaire_substitution'),
ref('redner.redner_invoice_line_ids_quantity_substitution'),
ref('redner.redner_invoice_line_ids_totalht_substitution'),
ref('redner.redner_montant_ht_substitution'),
ref('redner.redner_montant_total_substitution'),
ref('redner.redner_montant_tva_substitution'),
ref('redner.redner_nom_banque_societe_substitution'),
ref('redner.redner_invoiceduedate_substitution'),
ref('redner.redner_logo_substitution'),
ref('redner.redner_num_AVOIR_substitution'),
ref('redner.redner_transaction_date_substitution'),
ref('redner.redner_date_invoice_substitution'),
ref('redner.redner_invoiceduedate_2_substitution'),
ref('redner.redner_logo_2_substitution'),
ref('redner.redner_num_facture_substitution'),
ref('redner.redner_codepostal_societe_substitution'),
ref('redner.redner_codepostalclient_substitution'),
ref('redner.redner_courriel_societe_substitution'),
ref('redner.redner_nomclient_substitution'),
ref('redner.redner_rue1_societe_substitution'),
ref('redner.redner_rue1client_substitution'),
ref('redner.redner_rue2_societe_substitution'),
ref('redner.redner_avoir_rue2_societe_rue2_societe_substitution'),
ref('redner.redner_rue2client_substitution'),
ref('redner.redner_avoir_rue2client_rue2client_substitution'),
ref('redner.redner_siret_societe_substitution'),
ref('redner.redner_tva_societe_substitution'),
ref('redner.redner_ville_societe_substitution'),
ref('redner.redner_villeclient_substitution'),
ref('redner.redner_codepostal_societe_2_substitution'),
ref('redner.redner_codepostalclient_2_substitution'),
ref('redner.redner_courriel_societe_2_substitution'),
ref('redner.redner_nomclient_2_substitution'),
ref('redner.redner_rue1_societe_2_substitution'),
ref('redner.redner_rue1client_2_substitution'),
ref('redner.redner_rue2_societe_2_substitution'),
ref('redner.redner_facture_rue2_societe_rue2_societe_substitution'),
ref('redner.redner_rue2client_2_substitution'),
ref('redner.redner_facture_rue2client_rue2client_substitution'),
ref('redner.redner_siret_societe_2_substitution'),
ref('redner.redner_tva_societe_2_substitution'),
ref('redner.redner_ville_societe_2_substitution'),
ref('redner.redner_villeclient_2_substitution'),
ref('redner.redner_invoice_line_ids_remise_substitution'),
ref('redner.redner_invoice_line_ids_unite_substitution'),
ref('redner.redner_lignes_tva_substitution'),
ref('redner.redner_lignes_tva_taxe_origine_substitution'),
ref('redner.redner_lignes_tva_amount_tax_ligne_substitution'),
ref('redner.redner_lignes_tva_base_taxe_substitution'),
ref('redner.redner_lignes_tva_montant_taxe_substitution'),
ref('redner.redner_ref_client_substitution'),
ref('redner.redner_invoice_line_ids_section_name_substitution'),
ref('redner.redner_invoice_line_ids_section_substitution'),
ref('redner.redner_invoice_line_ids_note_name_substitution'),
ref('redner.redner_invoice_line_ids_note_substitution'),
ref('redner.redner_invoice_line_ids_not_section_substitution'),]"
/>
</function>
</odoo>
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Making redner template without using redner -->
<record id="redner_invoice_having" model="redner.template">
<field name="name">facture_avoir_v9_test_130620241317.odt</field>
<field name="language">
application/vnd.oasis.opendocument.text|od+mustache
</field>
<field
name="template_data"
type="base64"
file="redner/static/odt/facture_avoir_v9.odt"
/>
<!-- Redner data record should not use Redner by default,
required configurations will be handled manually -->
<field name="use_redner">False</field>
</record>
<!-- Substitutions from redner template -->
<record id="redner_avoir_substitution" model="redner.substitution">
<field name="keyword">avoir</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.move_type=='out_refund' }}</field>
</record>
<record id="redner_avoir_logo_body_substitution" model="redner.substitution">
<field name="keyword">avoir.logo.body</field>
</record>
<record id="redner_avoir_logo_mime_type_substitution" model="redner.substitution">
<field name="keyword">avoir.logo.mime-type</field>
</record>
<record id="redner_bic_societe_substitution" model="redner.substitution">
<field name="keyword">bic_societe</field>
<field name="converter">mail_template</field>
<field name="value">
{{ object.company_id.partner_id.bank_ids[0].bank_id.bic }}
</field>
</record>
<record id="redner_condition_paiement_substitution" model="redner.substitution">
<field name="keyword">condition_paiement</field>
<field name="converter">field</field>
<field name="value">partner_id.property_payment_term_id.name</field>
</record>
<record id="redner_facture_substitution" model="redner.substitution">
<field name="keyword">facture</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.move_type=='out_invoice' }}</field>
</record>
<record id="redner_facture_logo_body_substitution" model="redner.substitution">
<field name="keyword">facture.logo.body</field>
</record>
<record id="redner_facture_logo_mime_type_substitution" model="redner.substitution">
<field name="keyword">facture.logo.mime-type</field>
</record>
<record id="redner_iban_societe_substitution" model="redner.substitution">
<field name="keyword">iban_societe</field>
<field name="converter">mail_template</field>
<field name="value">
{{ object.company_id.partner_id.bank_ids[0].acc_number }}
</field>
</record>
<record id="redner_invoice_line_ids_substitution" model="redner.substitution">
<field name="keyword">invoice_line_ids</field>
<field name="converter">relation-to-many</field>
<field name="value">invoice_line_ids</field>
</record>
<record
id="redner_invoice_line_ids_article_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.article</field>
<field name="converter">field</field>
<field name="value">name</field>
</record>
<record
id="redner_invoice_line_ids_prixunitaire_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.prixunitaire</field>
<field name="converter">field</field>
<field name="value">price_unit</field>
</record>
<record
id="redner_invoice_line_ids_quantity_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.quantity</field>
<field name="converter">field</field>
<field name="value">quantity</field>
</record>
<record
id="redner_invoice_line_ids_totalht_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.totalht</field>
<field name="converter">field</field>
<field name="value">price_subtotal</field>
</record>
<record id="redner_montant_ht_substitution" model="redner.substitution">
<field name="keyword">montant_ht</field>
<field name="converter">field</field>
<field name="value">amount_untaxed</field>
</record>
<record id="redner_montant_total_substitution" model="redner.substitution">
<field name="keyword">montant_total</field>
<field name="converter">field</field>
<field name="value">amount_total</field>
</record>
<record id="redner_montant_tva_substitution" model="redner.substitution">
<field name="keyword">montant_tva</field>
<field name="converter">field</field>
<field name="value">amount_tax</field>
</record>
<record id="redner_nom_banque_societe_substitution" model="redner.substitution">
<field name="keyword">nom_banque_societe</field>
<field name="converter">mail_template</field>
<field name="value">
{{ object.company_id.partner_id.bank_ids[0].bank_id.name }}
</field>
</record>
<record id="redner_invoiceduedate_substitution" model="redner.substitution">
<field name="keyword">invoiceduedate</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.invoice_date_due }}</field>
</record>
<record id="redner_logo_substitution" model="redner.substitution">
<field name="keyword">logo</field>
<field name="converter">image-file</field>
<field name="value">company_id.logo</field>
</record>
<record id="redner_num_AVOIR_substitution" model="redner.substitution">
<field name="keyword">num_AVOIR</field>
<field name="converter">field</field>
<field name="value">name</field>
</record>
<record id="redner_transaction_date_substitution" model="redner.substitution">
<field name="keyword">transaction_date</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.invoice_date }}</field>
</record>
<record id="redner_date_invoice_substitution" model="redner.substitution">
<field name="keyword">date_invoice</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.invoice_date }}</field>
</record>
<record id="redner_invoiceduedate_2_substitution" model="redner.substitution">
<field name="keyword">invoiceduedate</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.invoice_date_due }}</field>
</record>
<record id="redner_logo_2_substitution" model="redner.substitution">
<field name="keyword">logo</field>
<field name="converter">image-file</field>
<field name="value">company_id.logo</field>
</record>
<record id="redner_num_facture_substitution" model="redner.substitution">
<field name="keyword">num_facture</field>
<field name="converter">field</field>
<field name="value">name</field>
</record>
<record id="redner_codepostal_societe_substitution" model="redner.substitution">
<field name="keyword">codepostal_societe</field>
<field name="converter">field</field>
<field name="value">company_id.zip</field>
</record>
<record id="redner_codepostalclient_substitution" model="redner.substitution">
<field name="keyword">codepostalclient</field>
<field name="converter">field</field>
<field name="value">partner_id.zip</field>
</record>
<record id="redner_courriel_societe_substitution" model="redner.substitution">
<field name="keyword">courriel_societe</field>
<field name="converter">field</field>
<field name="value">company_id.email</field>
</record>
<record id="redner_nomclient_substitution" model="redner.substitution">
<field name="keyword">nomclient</field>
<field name="converter">field</field>
<field name="value">partner_id.name</field>
</record>
<record id="redner_rue1_societe_substitution" model="redner.substitution">
<field name="keyword">rue1_societe</field>
<field name="converter">field</field>
<field name="value">company_id.street</field>
</record>
<record id="redner_rue1client_substitution" model="redner.substitution">
<field name="keyword">rue1client</field>
<field name="converter">field</field>
<field name="value">partner_id.street</field>
</record>
<record id="redner_rue2_societe_substitution" model="redner.substitution">
<field name="keyword">rue2_societe</field>
<field name="converter">field</field>
<field name="value">company_id.street2</field>
</record>
<record
id="redner_avoir_rue2_societe_rue2_societe_substitution"
model="redner.substitution"
>
<field name="keyword">avoir.rue2_societe.rue2_societe</field>
</record>
<record id="redner_rue2client_substitution" model="redner.substitution">
<field name="keyword">rue2client</field>
<field name="converter">field</field>
<field name="value">partner_id.street2</field>
</record>
<record
id="redner_avoir_rue2client_rue2client_substitution"
model="redner.substitution"
>
<field name="keyword">avoir.rue2client.rue2client</field>
</record>
<record id="redner_siret_societe_substitution" model="redner.substitution">
<field name="keyword">siret_societe</field>
<field name="converter">field</field>
<field name="value">company_id.siret</field>
</record>
<record id="redner_tva_societe_substitution" model="redner.substitution">
<field name="keyword">tva_societe</field>
<field name="converter">field</field>
<field name="value">company_id.vat</field>
</record>
<record id="redner_ville_societe_substitution" model="redner.substitution">
<field name="keyword">ville_societe</field>
<field name="converter">field</field>
<field name="value">company_id.city</field>
</record>
<record id="redner_villeclient_substitution" model="redner.substitution">
<field name="keyword">villeclient</field>
<field name="converter">field</field>
<field name="value">partner_id.city</field>
</record>
<record id="redner_codepostal_societe_2_substitution" model="redner.substitution">
<field name="keyword">codepostal_societe</field>
<field name="converter">field</field>
<field name="value">company_id.zip</field>
</record>
<record id="redner_codepostalclient_2_substitution" model="redner.substitution">
<field name="keyword">codepostalclient</field>
<field name="converter">field</field>
<field name="value">partner_id.zip</field>
</record>
<record id="redner_courriel_societe_2_substitution" model="redner.substitution">
<field name="keyword">courriel_societe</field>
<field name="converter">field</field>
<field name="value">company_id.email</field>
</record>
<record id="redner_nomclient_2_substitution" model="redner.substitution">
<field name="keyword">nomclient</field>
<field name="converter">field</field>
<field name="value">partner_id.name</field>
</record>
<record id="redner_rue1_societe_2_substitution" model="redner.substitution">
<field name="keyword">rue1_societe</field>
<field name="converter">field</field>
<field name="value">company_id.street</field>
</record>
<record id="redner_rue1client_2_substitution" model="redner.substitution">
<field name="keyword">rue1client</field>
<field name="converter">field</field>
<field name="value">partner_id.street</field>
</record>
<record id="redner_rue2_societe_2_substitution" model="redner.substitution">
<field name="keyword">rue2_societe</field>
<field name="converter">field</field>
<field name="value">company_id.street2</field>
</record>
<record
id="redner_facture_rue2_societe_rue2_societe_substitution"
model="redner.substitution"
>
<field name="keyword">facture.rue2_societe.rue2_societe</field>
</record>
<record id="redner_rue2client_2_substitution" model="redner.substitution">
<field name="keyword">rue2client</field>
<field name="converter">field</field>
<field name="value">partner_id.street2</field>
</record>
<record
id="redner_facture_rue2client_rue2client_substitution"
model="redner.substitution"
>
<field name="keyword">facture.rue2client.rue2client</field>
</record>
<record id="redner_siret_societe_2_substitution" model="redner.substitution">
<field name="keyword">siret_societe</field>
<field name="converter">field</field>
<field name="value">company_id.siret</field>
</record>
<record id="redner_tva_societe_2_substitution" model="redner.substitution">
<field name="keyword">tva_societe</field>
<field name="converter">field</field>
<field name="value">company_id.vat</field>
</record>
<record id="redner_ville_societe_2_substitution" model="redner.substitution">
<field name="keyword">ville_societe</field>
<field name="converter">field</field>
<field name="value">company_id.city</field>
</record>
<record id="redner_villeclient_2_substitution" model="redner.substitution">
<field name="keyword">villeclient</field>
<field name="converter">field</field>
<field name="value">partner_id.city</field>
</record>
<record
id="redner_invoice_line_ids_remise_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.remise</field>
<field name="converter">field</field>
<field name="value">discount</field>
</record>
<record id="redner_invoice_line_ids_unite_substitution" model="redner.substitution">
<field name="keyword">invoice_line_ids.unite</field>
<field name="converter">mail_template</field>
<field name="value">
{{ object.product_uom_id.name if object.product_uom_id else "" }}
</field>
</record>
<record id="redner_lignes_tva_substitution" model="redner.substitution">
<field name="keyword">lignes_tva</field>
<field name="converter">relation-to-many</field>
<field name="value">line_ids</field>
</record>
<record
id="redner_lignes_tva_taxe_origine_substitution"
model="redner.substitution"
>
<field name="keyword">lignes_tva.taxe_origine</field>
<field name="converter">mail_template</field>
<field name="value">{{ bool(object.tax_line_id) }}</field>
</record>
<record
id="redner_lignes_tva_amount_tax_ligne_substitution"
model="redner.substitution"
>
<field name="keyword">lignes_tva.amount_tax_ligne</field>
<field name="converter">mail_template</field>
<field name="value">{{object.tax_line_id.tax_group_id.name}}</field>
</record>
<record id="redner_lignes_tva_base_taxe_substitution" model="redner.substitution">
<field name="keyword">lignes_tva.base_taxe</field>
<field name="converter">field</field>
<field name="value">tax_base_amount</field>
</record>
<record
id="redner_lignes_tva_montant_taxe_substitution"
model="redner.substitution"
>
<field name="keyword">lignes_tva.montant_taxe</field>
<field name="converter">field</field>
<field name="value">credit</field>
</record>
<record id="redner_ref_client_substitution" model="redner.substitution">
<field name="keyword">ref_client</field>
<field name="converter">field</field>
<field name="value">ref</field>
</record>
<record
id="redner_invoice_line_ids_section_name_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.section_name</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.name }}</field>
</record>
<record
id="redner_invoice_line_ids_section_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.section</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.display_type=='line_section' }}</field>
</record>
<record
id="redner_invoice_line_ids_note_name_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.note_name</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.name }}</field>
</record>
<record id="redner_invoice_line_ids_note_substitution" model="redner.substitution">
<field name="keyword">invoice_line_ids.note</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.display_type=='line_note' }}</field>
</record>
<record
id="redner_invoice_line_ids_not_section_substitution"
model="redner.substitution"
>
<field name="keyword">invoice_line_ids.not_section</field>
<field name="converter">mail_template</field>
<field name="value">{{ object.display_type=='product' }}</field>
</record>
</odoo>
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * redner
# * redner
# Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr>, 2021.
......@@ -4,5 +4,6 @@
# Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr>, 2021.
# Houzéfa Abbasbhay <houzefa.abba@xcg-consulting.fr>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
......@@ -5,13 +6,13 @@
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-03 16:15+0000\n"
"PO-Revision-Date: 2023-02-03 17:15+0100\n"
"Last-Translator: Houzéfa Abbasbhay <houzefa.abba@xcg-consulting.fr>\n"
"Language-Team: XCG Consulting\n"
"POT-Creation-Date: 2024-06-13 17:24+0000\n"
"PO-Revision-Date: 2024-06-13 17:37+0000\n"
"Last-Translator: Arona Ben Cherif Diatta <aronabencherif.diatta@xcg.africa>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
......@@ -13,9 +14,9 @@
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.0.6\n"
"X-Generator: Poedit 3.4.3\n"
#. module: redner
#. odoo-python
......@@ -56,6 +57,8 @@
"Cannot find redner config url. Please add it in odoo.conf or in ir."
"config_parameter"
msgstr ""
"Impossible de trouver l'url de configuration de redner. Veuillez l'ajouter "
"dans odoo.conf ou dans ir.config_parameter"
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__body
......@@ -111,7 +114,7 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_substitution__value
msgid "Expression"
msgstr "Expression"
msgstr ""
#. module: redner
#. odoo-python
......@@ -145,10 +148,10 @@
#. module: redner
#: model:ir.model.fields.selection,name:redner.selection__redner_template__language__text/html|mustache
msgid "HTML + mustache"
msgstr "HTML + mustache"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_report__id
#: model:ir.model.fields,field_description:redner.field_redner_substitution__id
#: model:ir.model.fields,field_description:redner.field_redner_template__id
msgid "ID"
......@@ -149,10 +152,10 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_report__id
#: model:ir.model.fields,field_description:redner.field_redner_substitution__id
#: model:ir.model.fields,field_description:redner.field_redner_template__id
msgid "ID"
msgstr "ID"
msgstr ""
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__active
......@@ -166,8 +169,9 @@
#: model:ir.model.fields,help:redner.field_ir_actions_report__redner_multi_in_one
msgid ""
"If you execute a report on several records, by default Odoo will generate a "
"ZIP file that contains as many files as selected records. If you enable this "
"option, Odoo will generate instead a single report for the selected records."
"ZIP file that contains as many files as selected records. If you enable "
"this option, Odoo will generate instead a single report for the selected "
"records."
msgstr ""
"Si vous exécutez un rapport sur plusieurs enregistrements, par défaut, Odoo "
"générera un fichier ZIP qui contiendra autant de fichiers que "
......@@ -185,6 +189,11 @@
msgstr ""
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__use_redner
msgid "Indicate whether this redner template is synchronized with redner"
msgstr "Indique si ce modèle redner est synchronisé avec redner"
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_report__ir_actions_report_id
msgid "Ir Actions Report"
msgstr ""
......@@ -244,7 +253,7 @@
#. module: redner
#: model:ir.model.fields.selection,name:redner.selection__redner_template__language__text/mjml|mustache
msgid "MJML + mustache"
msgstr "MJML + mustache"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_ir_actions_report__redner_multi_in_one
......@@ -279,7 +288,7 @@
#. module: redner
#: model:ir.ui.menu,name:redner.redner_menu
msgid "Redner"
msgstr "Redner"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__redner_id
......@@ -333,7 +342,7 @@
#. module: redner
#: model:ir.model,name:redner.model_ir_actions_report
msgid "Report Action"
msgstr ""
msgstr "Signaler l'action"
#. module: redner
#: model:ir.model,name:redner.model_redner_report
......@@ -343,7 +352,7 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_ir_actions_report__report_type
msgid "Report Type"
msgstr ""
msgstr "Type de rapport"
#. module: redner
#: model:ir.actions.server,name:redner.send_to_rednerd_server_action
......@@ -358,8 +367,8 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__slug
msgid "Slug"
msgstr "Slug"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_ir_actions_report__substitution_ids
msgid "Substitution"
......@@ -362,11 +371,11 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_ir_actions_report__substitution_ids
msgid "Substitution"
msgstr "Substitution"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_mail_template__redner_substitution_ids
#: model_terms:ir.ui.view,arch_db:redner.redner_report_view
#: model_terms:ir.ui.view,arch_db:redner.view_email_template_form
msgid "Substitutions"
......@@ -367,10 +376,15 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_mail_template__redner_substitution_ids
#: model_terms:ir.ui.view,arch_db:redner.redner_report_view
#: model_terms:ir.ui.view,arch_db:redner.view_email_template_form
msgid "Substitutions"
msgstr "Substitutions"
msgstr ""
#. module: redner
#: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form
msgid "Synchronize with Redner"
msgstr ""
#. module: redner
#: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form
......@@ -383,6 +397,13 @@
msgstr "Modèle Libreoffice"
#. module: redner
#. odoo-python
#: code:addons/redner/models/redner_template.py:0
#, python-format
msgid "Template has already been synced with redner !"
msgstr "Le modèle a déjà été synchronisé avec redner !"
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__body
msgid "Template remote Id"
msgstr ""
......@@ -393,6 +414,11 @@
msgstr "Nom de la variable du modèle"
#. module: redner
#: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form
msgid "Template will be synchronized with redner. Continue?"
msgstr "Template will be synchronisez with redner. Continue?"
#. module: redner
#: model:ir.ui.menu,name:redner.redner_template_menu
msgid "Templates"
msgstr "Modèles"
......@@ -416,6 +442,10 @@
"browser PDF means the report will be rendered using Wkhtmltopdf and "
"downloaded by the user."
msgstr ""
"Le type du rapport qui sera rendu, chacun ayant sa propre méthode de rendu. "
"HTML signifie que le rapport sera ouvert directement dans votre navigateur. "
"PDF signifie que le rapport sera rendu à l'aide de Wkhtmltopdf et "
"téléchargé par l'utilisateur."
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__name
......@@ -430,5 +460,10 @@
msgstr "Erreur redner : %r"
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__use_redner
msgid "Use redner"
msgstr "Utilise redner"
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_substitution__keyword
msgid "Variable"
......@@ -433,6 +468,6 @@
#: model:ir.model.fields,field_description:redner.field_redner_substitution__keyword
msgid "Variable"
msgstr "Variable"
msgstr ""
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__detected_keywords
......@@ -436,4 +471,5 @@
#. module: redner
#: model:ir.model.fields,field_description:redner.field_redner_template__detected_keywords
#: model_terms:ir.ui.view,arch_db:redner.redner_template_view_form
msgid "Variables"
......@@ -439,5 +475,5 @@
msgid "Variables"
msgstr "Variables"
msgstr ""
#. module: redner
#. odoo-python
......@@ -461,7 +497,7 @@
#. module: redner
#: model:ir.model.fields.selection,name:redner.selection__ir_actions_report__report_type__redner
msgid "redner"
msgstr "redner"
msgstr ""
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__is_mjml
......@@ -471,4 +507,4 @@
#. module: redner
#: model:ir.model.fields,help:redner.field_redner_template__language
msgid "templating language"
msgstr "langage du modèle"
msgstr "langage du modèle"
\ No newline at end of file
##############################################################################
#
# Redner Odoo module
# Copyright © 2016 XCG Consulting <https://xcg-consulting.fr>
# Copyright © 2016, 2024 XCG Consulting <https://xcg-consulting.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
......@@ -247,3 +247,22 @@
attachment_vals["name"],
)
return buffer
@api.model
def _redner_demo_invoice_having_report(self, substitutions_list):
# Check if account module is installed
check_account_module = self.env["ir.module.module"].search(
[("name", "=", "account")]
)
if check_account_module and check_account_module.state == "installed":
self.create(
{
"name": "Facture_Avoir",
"model": "account.move",
"report_type": "redner",
"report_name": "account_move",
"redner_filetype": "pdf",
"redner_tmpl_id": self.env.ref("redner.redner_invoice_having").id,
"substitution_ids": [(6, 0, substitutions_list)],
}
)
##############################################################################
#
# Redner Odoo module
# Copyright © 2016 XCG Consulting <https://xcg-consulting.fr>
# Copyright © 2016, 2024 XCG Consulting <https://xcg-consulting.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
......@@ -37,6 +37,13 @@
_name = "redner.template"
_description = "Redner Template"
use_redner = fields.Boolean(
string="Use redner",
default=True,
help="Indicate whether this redner template is synchronized with redner",
readonly=True,
)
name = fields.Char(
string="Name",
required=True,
......@@ -128,6 +135,8 @@
else (vals.get("body"), "text")
)
if not vals.get("use_redner"):
return super().create(vals_list)
# We depend on the API for consistency here
# So raised error should not result with a created template
vals["redner_id"] = self.redner.templates.account_template_add(
......@@ -196,6 +205,37 @@
return super().unlink()
def synchronize_template_with_redner(self):
"""This method is used to join a template without
redner with redner"""
self.ensure_one()
if not self.use_redner:
produces, language = self.language.split("|")
# Check if template data is of type bytes before decoding
if isinstance(self.template_data or "", bytes):
template_data = self.template_data.decode() # utf-8 by default
body, body_format = (
(template_data or "", "base64")
if language == "od+mustache"
else (self.body, "text")
)
# We depend on the API for consistency here
# So raised error should not result with a created template
redner_id = self.redner.templates.account_template_add(
language=language,
body=body,
name=self.name,
produces=produces,
body_format=body_format,
version=fields.Datetime.to_string(fields.Datetime.now()),
)
self.write({"redner_id": redner_id, "use_redner": True})
else:
raise ValidationError(_("Template has already been synced with redner !"))
def copy(self, default=None):
self.ensure_one()
default = dict(default or {}, name=_("%s (copy)") % self.name)
......
##############################################################################
#
# Redner Odoo module
# Copyright © 2023 XCG Consulting <https://xcg-consulting.fr>
# Copyright © 2023, 2024 XCG Consulting <https://xcg-consulting.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
......@@ -43,3 +43,19 @@
values = self.env["redner.template"].default_get(["language"])
values.update({"name": "test-name", "body": "hello {{ login }}"})
return self.env["redner.template"].create(values)
@mock.patch("requests.sessions.Session.post")
def _create_redner_template_without_redner(self, requests_post_mock):
"""Create a redner template without redner used in tests."""
requests_post_mock.return_value = mock.Mock(
status_code=200, json=lambda: {"name": "test-redner-id"}
)
values = self.env["redner.template"].default_get(["language"])
values.update(
{
"name": "test-name_without-redner",
"use_redner": False,
"body": "hello {{ login }}",
}
)
return self.env["redner.template"].create(values)
##############################################################################
#
# Redner Odoo module
# Copyright © 2023 XCG Consulting <https://xcg-consulting.fr>
# Copyright © 2023, 2024 XCG Consulting <https://xcg-consulting.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
......@@ -21,6 +21,7 @@
from unittest import mock
from odoo import fields
from odoo.exceptions import ValidationError
from .common import TestCommon
......@@ -82,3 +83,33 @@
timeout=20,
)
requests_put_mock.reset_mock()
def test_synchronization_with_redner(self):
redner_template = self._create_redner_template_without_redner()
self.assertFalse(
redner_template.use_redner, "Value of 'Use redner' has changed"
)
self.assertFalse(
redner_template.redner_id, "Template is created without redner"
)
self.assertFalse(
redner_template.detected_keywords, "Template is created without keywords"
)
# Join a template with redner
redner_template.synchronize_template_with_redner()
self.assertTrue(
redner_template.use_redner, "Value of 'Use redner' equals True after join"
)
self.assertTrue(redner_template.redner_id, "Template is updated with redner")
self.assertFalse(
redner_template.detected_keywords, "Template is updated with keywords"
)
with self.assertRaises(ValidationError), self.cr.savepoint():
# Template has already been synced with redner
redner_template.synchronize_template_with_redner()
......@@ -94,6 +94,16 @@
<group>
<field name="locale_id" />
</group>
<group class="d-flex align-items-start">
<field name="use_redner" />
<button
attrs="{'invisible': [('use_redner', '=', True)]}"
confirm="Template will be synchronized with redner. Continue?"
name="synchronize_template_with_redner"
string="Synchronize with Redner"
type="object"
/>
</group>
</page>
</notebook>
</sheet>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment