Settings to define if ISR and QR should be added to email template, and also if it should only be done when invoice is not paid

->l10n_ch_report_optional
This commit is contained in:
Renzo Meister 2022-04-19 12:26:12 +02:00
parent 681a0990eb
commit c10ba87c3f
7 changed files with 178 additions and 0 deletions

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from . import models

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
# Main contributor: Nicolas Bessi. Camptocamp SA
# Financial contributors: Hasa SA, Open Net SA,
# Prisme Solutions Informatique SA, Quod SA
# Translation contributors: brain-tec AG, Agile Business Group
{
'name': "Switzerland - Accounting Optional Reports as Attachments",
'description': """
Add some parameters to define if ISR or QR Bill should be added automatically
""",
'version': '1.0.1.0',
'category': 'Accounting',
'depends': ['l10n_ch'],
'data': [
'views/res_config_settings_views.xml',
],
'license': 'LGPL-3',
}

View File

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from . import res_config_settings
from . import mail_template
from . import res_company

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
import base64
from flectra import api, models
from flectra.addons.l10n_ch.models.mail_template import MailTemplate
def generate_email(self, res_ids, fields):
""" Method overridden in order to add an attachment containing the ISR
to the draft message when opening the 'send by mail' wizard on an invoice.
This attachment generation will only occur if all the required data are
present on the invoice. Otherwise, no ISR attachment will be created, and
the mail will only contain the invoice (as defined in the mother method).
"""
result = super(MailTemplate, self).generate_email(res_ids, fields)
if self.model != 'account.move':
return result
multi_mode = True
if isinstance(res_ids, int):
res_ids = [res_ids]
multi_mode = False
if self.model == 'account.move':
for record in self.env[self.model].browse(res_ids):
inv_print_name = self._render_field('report_name', record.ids, compute_lang=True)[record.id]
new_attachments = []
if not self.env.company.l10n_ignore_qr_when_reconciled or record.payment_state != 'paid':
if record.l10n_ch_isr_valid and self.env.company.l10n_add_isr_pdf:
# We add an attachment containing the ISR
isr_report_name = 'ISR-' + inv_print_name + '.pdf'
isr_pdf = self.env.ref('l10n_ch.l10n_ch_isr_report')._render_qweb_pdf(record.ids)[0]
isr_pdf = base64.b64encode(isr_pdf)
new_attachments.append((isr_report_name, isr_pdf))
if record.partner_bank_id._eligible_for_qr_code('ch_qr', record.partner_id, record.currency_id) and self.env.company.l10n_add_qr_pdf:
# We add an attachment containing the QR-bill
qr_report_name = 'QR-bill-' + inv_print_name + '.pdf'
qr_pdf = self.env.ref('l10n_ch.l10n_ch_qr_report')._render_qweb_pdf(record.ids)[0]
qr_pdf = base64.b64encode(qr_pdf)
new_attachments.append((qr_report_name, qr_pdf))
record_dict = multi_mode and result[record.id] or result
attachments_list = record_dict.get('attachments', False)
if attachments_list:
attachments_list.extend(new_attachments)
else:
record_dict['attachments'] = new_attachments
return result
# Patch / Override existing Method
MailTemplate.generate_email = generate_email

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from flectra import fields, models
class Company(models.Model):
_inherit = "res.company"
l10n_add_isr_pdf = fields.Boolean(
string='ISR-PDF',
)
l10n_add_qr_pdf = fields.Boolean(
string='QR-PDF',
)
l10n_ignore_qr_when_reconciled = fields.Boolean(
string='Ignore QR when reconciled',
help='Do not add QR Bill when invoice is reconciled',
)

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from flectra import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
l10n_add_isr_pdf = fields.Boolean(
related='company_id.l10n_add_isr_pdf',
readonly=False,
)
l10n_add_qr_pdf = fields.Boolean(
related='company_id.l10n_add_qr_pdf',
readonly=False,
)
l10n_ignore_qr_when_reconciled = fields.Boolean(
related='company_id.l10n_ignore_qr_when_reconciled',
readonly=False,
)

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<flectra>
<data>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.l10n.ch</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='pay_invoice_online_setting_container']" position="after">
<h2>Send &amp; Print: adds additional single pdf</h2>
<div class="row mt16 o_settings_container" id="add_pdfs_in_invoice_online_setting_container">
<div class="col-12 col-lg-6 o_setting_box"
title="Add a single attachment with QR-code as pdf in your mail so your customers have a seperate paper for the invoice.">
<div class="o_setting_left_pane">
<field name="l10n_add_isr_pdf" class="oe_inline"/>
</div>
<div class="o_setting_right_pane">
<label for="l10n_add_isr_pdf"/>
<div class="text-muted">
Add ISR-Invoice in mail
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box"
title="Add a single attachment with QR-code as pdf in your mail so your customers have a seperate paper for the invoice.">
<div class="o_setting_left_pane">
<field name="l10n_add_qr_pdf" class="oe_inline"/>
</div>
<div class="o_setting_right_pane">
<label for="l10n_add_qr_pdf"/>
<div class="text-muted">
Add QR-Invoice in mail
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box"
title="Do not add ISR or QR Invoice when invoice is already paid">
<div class="o_setting_left_pane">
<field name="l10n_ignore_qr_when_reconciled" class="oe_inline"/>
</div>
<div class="o_setting_right_pane">
<label for="l10n_ignore_qr_when_reconciled"/>
<div class="text-muted">
Only add ISR / QR Invoice when not yet paid
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</data>
</flectra>