summaryrefslogtreecommitdiff
path: root/addons/l10n_cl
diff options
context:
space:
mode:
authorDaniel Blanco <daniel@blancomartin.cl>2020-09-15 21:18:45 +0000
committerSusana <susana@blancomartin.cl>2020-09-29 22:07:35 +0000
commitfaea1fec6b0a8571e5f61c1a891cfa708b0a9075 (patch)
tree293e18c088fe85f7ca8371909a2ac90e4d4a1d81 /addons/l10n_cl
parent654be58894c51d2c5384ead67a5a7c68fdebf0a7 (diff)
[ADD] l10n_cl: forward to 14.0
closes odoo/odoo#58441 Related: odoo/enterprise#13477 Signed-off-by: Josse Colpaert <jco@openerp.com>
Diffstat (limited to 'addons/l10n_cl')
-rw-r--r--addons/l10n_cl/__manifest__.py1
-rw-r--r--addons/l10n_cl/i18n/es.po5
-rw-r--r--addons/l10n_cl/i18n/l10n_cl.pot5
-rw-r--r--addons/l10n_cl/models/account_journal.py30
-rw-r--r--addons/l10n_cl/models/account_move.py26
-rw-r--r--addons/l10n_cl/models/l10n_latam_document_type.py23
-rw-r--r--addons/l10n_cl/views/account_journal_view.xml25
-rw-r--r--addons/l10n_cl/views/l10n_latam_document_type_view.xml13
-rw-r--r--addons/l10n_cl/views/report_invoice.xml191
9 files changed, 219 insertions, 100 deletions
diff --git a/addons/l10n_cl/__manifest__.py b/addons/l10n_cl/__manifest__.py
index f1941906f24..a23a5fb837c 100644
--- a/addons/l10n_cl/__manifest__.py
+++ b/addons/l10n_cl/__manifest__.py
@@ -19,7 +19,6 @@ Plan contable chileno e impuestos de acuerdo a disposiciones vigentes
'uom',
],
'data': [
- 'views/account_journal_view.xml',
'views/account_move_view.xml',
'views/account_tax_view.xml',
'views/ir_sequence_view.xml',
diff --git a/addons/l10n_cl/i18n/es.po b/addons/l10n_cl/i18n/es.po
index 80c15bba2b4..67f2d33e3ef 100644
--- a/addons/l10n_cl/i18n/es.po
+++ b/addons/l10n_cl/i18n/es.po
@@ -446,11 +446,6 @@ msgid "Sequence"
msgstr "Secuencia"
#. module: l10n_cl
-#: model:ir.model.fields,field_description:l10n_cl.field_account_journal__l10n_cl_sequence_ids
-msgid "Sequences (cl)"
-msgstr "Secuencias (CL)"
-
-#. module: l10n_cl
#: model:ir.model.fields,field_description:l10n_cl.field_res_currency__l10n_cl_short_name
msgid "Short Name"
msgstr "Nombre corto"
diff --git a/addons/l10n_cl/i18n/l10n_cl.pot b/addons/l10n_cl/i18n/l10n_cl.pot
index 43c90c6079a..7db8d03ab2a 100644
--- a/addons/l10n_cl/i18n/l10n_cl.pot
+++ b/addons/l10n_cl/i18n/l10n_cl.pot
@@ -430,11 +430,6 @@ msgid "Sequence"
msgstr ""
#. module: l10n_cl
-#: model:ir.model.fields,field_description:l10n_cl.field_account_journal__l10n_cl_sequence_ids
-msgid "Sequences (cl)"
-msgstr ""
-
-#. module: l10n_cl
#: model:ir.model.fields,field_description:l10n_cl.field_res_currency__l10n_cl_short_name
msgid "Short Name"
msgstr ""
diff --git a/addons/l10n_cl/models/account_journal.py b/addons/l10n_cl/models/account_journal.py
index 5d3fca43818..5917e688b5a 100644
--- a/addons/l10n_cl/models/account_journal.py
+++ b/addons/l10n_cl/models/account_journal.py
@@ -8,32 +8,4 @@ class AccountJournal(models.Model):
l10n_cl_sequence_ids = fields.Many2many(
'ir.sequence', 'l10n_cl_journal_sequence_rel', 'journal_id', 'sequence_id', string='Sequences (cl)',
- domain="[('l10n_latam_document_type_id', '!=', False)]")
-
- def button_create_new_sequences(self):
- self.ensure_one()
- internal_types = ['invoice', 'debit_note', 'credit_note']
- domain = [('country_id.code', '=', 'CL'), ('internal_type', 'in', internal_types)]
- if self.company_id.partner_id.l10n_cl_sii_taxpayer_type in ['1', False]:
- domain += [('code', 'not in', ['70', '71'])]
- elif self.company_id.partner_id.l10n_cl_sii_taxpayer_type == '2':
- domain += [('code', 'not in', ['33', '34'])]
- documents = self.env['l10n_latam.document.type'].search(domain)
- sequences = self.env['ir.sequence']
- for document in documents:
- sequences |= self.env['ir.sequence'].create(document._get_document_sequence_vals(self))
- self.write({'l10n_cl_sequence_ids': [(4, s.id) for s in sequences]})
-
- def create_document_sequences_cl(self):
- self.ensure_one()
- if (self.company_id.country_id != self.env.ref('base.cl')) or self.env['ir.sequence'].search(
- [('l10n_latam_document_type_id', '!=', False)]) or self.type != 'sale' or not self.l10n_latam_use_documents:
- return
- self.button_create_new_sequences()
-
- @api.model
- def create(self, values):
- """ Create Document sequences after create the journal """
- res = super().create(values)
- res.create_document_sequences_cl()
- return res
+ domain="[('l10n_latam_document_type_id', '!=', False)]") \ No newline at end of file
diff --git a/addons/l10n_cl/models/account_move.py b/addons/l10n_cl/models/account_move.py
index 2b1f2a0ebce..721c142c0b8 100644
--- a/addons/l10n_cl/models/account_move.py
+++ b/addons/l10n_cl/models/account_move.py
@@ -4,6 +4,8 @@ from odoo.exceptions import ValidationError
from odoo import models, fields, api, _
from odoo.osv import expression
+SII_VAT = '60805000-0'
+
class AccountMove(models.Model):
_inherit = "account.move"
@@ -19,16 +21,19 @@ class AccountMove(models.Model):
if (self.journal_id.l10n_latam_use_documents and
self.journal_id.company_id.country_id == self.env.ref('base.cl')):
if self.journal_id.type == 'sale':
- document_type_ids = self.journal_id.l10n_cl_sequence_ids.mapped('l10n_latam_document_type_id').ids
+ domain = [('country_id', '=', self.env.ref('base.cl').id), ('internal_type', '!=', 'invoice_in')]
+ if self.company_id.partner_id.l10n_cl_sii_taxpayer_type == '1':
+ domain += [('code', '!=', '71')] # Companies with VAT Affected doesn't have "Boleta de honorarios Electrónica"
+ document_type_ids = self.env['l10n_latam.document.type'].search(domain).ids
else:
partner_domain = [
('country_id.code', '=', 'CL'),
('internal_type', 'in', ['invoice', 'debit_note', 'credit_note', 'invoice_in'])]
if not self.partner_id:
pass
- elif self.partner_id.l10n_cl_sii_taxpayer_type == '1' and self.partner_id_vat != '60805000-0':
+ elif self.partner_id.l10n_cl_sii_taxpayer_type == '1' and self.partner_id_vat != SII_VAT:
partner_domain += [('code', 'not in', ['39', '70', '71', '914', '911'])]
- elif self.partner_id.l10n_cl_sii_taxpayer_type == '1' and self.partner_id_vat == '60805000-0':
+ elif self.partner_id.l10n_cl_sii_taxpayer_type == '1' and self.partner_id_vat == SII_VAT:
partner_domain += [('code', 'not in', ['39', '70', '71'])]
elif self.partner_id.l10n_cl_sii_taxpayer_type == '2':
partner_domain += [('code', 'in', ['70', '71', '56', '61'])]
@@ -61,7 +66,7 @@ class AccountMove(models.Model):
'Document types for foreign customers must be export type (codes 110, 111 or 112) or you \
should define the customer as an end consumer and use receipts (codes 39 or 41)'))
if rec.journal_id.type == 'purchase' and rec.journal_id.l10n_latam_use_documents:
- if vat != '60805000-0' and latam_document_type_code == '914':
+ if vat != SII_VAT and latam_document_type_code == '914':
raise ValidationError(_('The DIN document is intended to be used only with RUT 60805000-0'
' (Tesorería General de La República)'))
if not tax_payer_type or not vat:
@@ -96,11 +101,11 @@ class AccountMove(models.Model):
super()._post(soft)
def _l10n_cl_get_formatted_sequence(self, number=0):
- return "%s %06d" % (self.l10n_latam_document_type_id.doc_code_prefix, number)
+ return '%s %06d' % (self.l10n_latam_document_type_id.doc_code_prefix, number)
def _get_starting_sequence(self):
""" If use documents then will create a new starting sequence using the document type code prefix and the
- journal document number with a 8 padding number """
+ journal document number with a 6 padding number """
if self.journal_id.l10n_latam_use_documents and self.env.company.country_id == self.env.ref('base.cl'):
if self.l10n_latam_document_type_id:
return self._l10n_cl_get_formatted_sequence()
@@ -109,11 +114,10 @@ class AccountMove(models.Model):
def _get_last_sequence_domain(self, relaxed=False):
where_string, param = super(AccountMove, self)._get_last_sequence_domain(relaxed)
if self.company_id.country_id == self.env.ref('base.cl') and self.l10n_latam_use_documents:
- journals = self.journal_id.l10n_cl_sequence_ids.filtered(lambda s: s.l10n_latam_document_type_id == self.l10n_latam_document_type_id).l10n_cl_journal_ids.ids
- if len(journals) > 1:
- where_string.replace("journal_id = %(journal_ids)s", "journal_id in %(journal_ids)s")
- param['journal_ids'] = journals
- where_string += " AND l10n_latam_document_type_id = %(l10n_latam_document_type_id)s "
+ where_string = where_string.replace('journal_id = %(journal_id)s AND', '')
+ where_string += ' AND l10n_latam_document_type_id = %(l10n_latam_document_type_id)s AND ' \
+ 'company_id = %(company_id)s'
+ param['company_id'] = self.company_id.id or False
param['l10n_latam_document_type_id'] = self.l10n_latam_document_type_id.id or 0
return where_string, param
diff --git a/addons/l10n_cl/models/l10n_latam_document_type.py b/addons/l10n_cl/models/l10n_latam_document_type.py
index 083de809f42..0487f035d67 100644
--- a/addons/l10n_cl/models/l10n_latam_document_type.py
+++ b/addons/l10n_cl/models/l10n_latam_document_type.py
@@ -15,15 +15,16 @@ class L10nLatamDocumentType(models.Model):
('credit_note', 'Credit Notes'),
('receipt_invoice', 'Receipt Invoice')])
- def _get_document_sequence_vals(self, journal):
- values = {}
+ def _format_document_number(self, document_number):
+ """ Make validation of Import Dispatch Number
+ * making validations on the document_number. If it is wrong it should raise an exception
+ * format the document_number against a pattern and return it
+ """
+ self.ensure_one()
if self.country_id != self.env.ref('base.cl'):
- return values
- values.update({
- 'name': '%s - %s' % (journal.name, self.name),
- 'padding': 6,
- 'implementation': 'no_gap',
- 'l10n_latam_document_type_id': self.id,
- 'prefix': None
- })
- return values
+ return super()._format_document_number(document_number)
+
+ if not document_number:
+ return False
+
+ return document_number.zfill(6)
diff --git a/addons/l10n_cl/views/account_journal_view.xml b/addons/l10n_cl/views/account_journal_view.xml
deleted file mode 100644
index 8068da6f45e..00000000000
--- a/addons/l10n_cl/views/account_journal_view.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<odoo>
-
- <record id="view_account_journal_form_inherit_l10n_cl" model="ir.ui.view">
- <field name="model">account.journal</field>
- <field name="name">account.journal.form.inherit.cl</field>
- <field name="inherit_id" ref="l10n_latam_invoice_document.view_account_journal_form"/>
- <field name="arch" type="xml">
- <xpath expr="//field[@name='code']/.." position="inside">
- <button name="button_create_new_sequences" type="object" string="Create New Sequences"
- attrs="{'invisible': ['|', '|', '|', ('l10n_cl_sequence_ids', '!=', []), ('l10n_latam_use_documents', '=', False), ('type', '=', 'purchase'), ('country_code', '!=', 'CL')]}"
- class="btn btn-primary"/>
- <field name="l10n_cl_sequence_ids" nolabel="1" colspan="2"
- attrs="{'invisible': ['|', '|', ('l10n_latam_use_documents', '=', False), ('country_code', '!=', 'CL'), ('type', '=', 'purchase')]}">
- <tree default_order="id">
- <field name="name" readonly="True" string="Sequence"/>
- <field name="number_next_actual" string="Next Number"/>
- <field name="id" invisible="1"/>
- </tree>
- </field>
- </xpath>
- </field>
- </record>
-
-</odoo>
diff --git a/addons/l10n_cl/views/l10n_latam_document_type_view.xml b/addons/l10n_cl/views/l10n_latam_document_type_view.xml
new file mode 100644
index 00000000000..3d518e1df27
--- /dev/null
+++ b/addons/l10n_cl/views/l10n_latam_document_type_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="l10n_cl_latam_document_type_view" model="ir.ui.view">
+ <field name="name">l10n.cl.latam.document.type.view</field>
+ <field name="model">l10n_latam.document.type</field>
+ <field name="inherit_id" ref="l10n_latam_invoice_document.view_document_type_form"/>
+ <field name="arch" type="xml">
+ <field name="sequence" position="attributes">
+ <attribute name="widget">handle</attribute>
+ </field>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/l10n_cl/views/report_invoice.xml b/addons/l10n_cl/views/report_invoice.xml
index 0b72ba453d7..e0dfade0a02 100644
--- a/addons/l10n_cl/views/report_invoice.xml
+++ b/addons/l10n_cl/views/report_invoice.xml
@@ -1,27 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
+ <!-- this header can be used on any Chilean report -->
+ <template id="custom_header">
+
+ <t t-set="report_date" t-value="o.invoice_date"/>
+ <t t-set="report_number" t-value="int(o.l10n_latam_document_number)"/>
+ <t t-set="pre_printed_report" t-value="report_type == 'pdf'"/>
+ <t t-set="report_name" t-value="o.l10n_latam_document_type_id.name"/>
+ <t t-set="header_address" t-value="o.company_id.partner_id"/>
+ <t t-set="is_tax" t-value="o.l10n_latam_document_type_id.code not in ['39', '41', '110', '111', '112', '34']"/>
+ <t t-set="custom_footer">
+ <t t-call="l10n_cl.custom_footer"/>
+ </t>
+
+ <div>
+ <div class="row">
+ <div name="left-upper-side" class="col-8">
+ <img t-if="o.company_id.logo" t-att-src="image_data_uri(o.company_id.logo)"
+ style="max-height: 45px;" alt="Logo"/>
+ <br/>
+ <strong>
+ <span t-field="o.company_id.partner_id.name"/>
+ </strong>
+ <br/>
+ <span name="company_activity" class="font-italic" t-field="o.company_id.report_header"/>
+ <div/>
+ <t t-esc="' - '.join([item for item in [
+ ', '.join([item for item in [header_address.street, header_address.street2] if item]),
+ header_address.city,
+ header_address.state_id and header_address.state_id.name,
+ header_address.zip,
+ header_address.country_id and header_address.country_id.name] if item])"/>
+ <span t-if="header_address.phone">
+ <br/>
+ </span>
+ <span t-if="header_address.phone" style="white-space: nowrap;"
+ t-esc="'Tel: ' + header_address.phone"/>
+ <span t-if="header_address.website">
+ <span t-att-style="'color: %s;' % o.company_id.primary_color"
+ t-esc="'- Web: %s' %' - '.join([item for item in [header_address.website.replace('https://', '').replace('http://', ''), header_address.email] if item])"/>
+ </span>
+ </div>
+ <div name="right-upper-side" class="col-4">
+ <div class="row">
+ <div name="right-upper-side" class="col-12">
+ <div class="row border border-dark">
+ <div class="col-12 text-center">
+ <h6 t-att-style="'color: %s;' % o.company_id.primary_color">
+ <strong t-att-style="'color: %s;' % o.company_id.primary_color">
+ <br/>
+ <span style="line-height: 180%;">RUT:</span>
+ <span t-field="o.company_id.partner_id.vat"/>
+ <br/>
+ <span class="text-uppercase" t-esc="report_name"/>
+ <br/>
+ <span>Nº:</span>
+ <span style="line-height: 200%;" t-esc="report_number"/>
+ </strong>
+ </h6>
+ </div>
+ </div>
+ <!-- (6) Titulo de Documento -->
+ <div class="row text-center">
+ <div class="col-12 text-center" t-att-style="'color: %s;' % o.company_id.primary_color"
+ name="regional-office"/>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+ </template>
+
+
+ <template id="informations">
+ <div id="informations" class="row mt8 mb8">
+ <div class="col-6">
+ <strong>
+ <span t-att-style="'color: %s;' % o.company_id.secondary_color">Date:</span>
+ </strong>
+ <span t-esc="report_date" t-options='{"widget": "date"}'/>
+ <br/>
+
+ <strong>Customer:</strong>
+ <span t-field="o.partner_id.name"/>
+ <br/>
+
+ <t t-if="o.partner_id.vat and o.partner_id.l10n_latam_identification_type_id">
+ <strong>
+ <t t-esc="o.partner_id.l10n_latam_identification_type_id.name or o.company_id.country_id.vat_label" id="inv_tax_id_label"/>:
+ </strong>
+ <span t-esc="o.partner_id.vat"/>
+ <br/>
+ </t>
+ <strong>GIRO:</strong>
+ <span t-esc="o.partner_id.industry_id.name or ''"/>
+ <br/>
+ </div>
+ <div class="col-6">
+ <strong>Due Date:</strong>
+ <span t-esc="o.invoice_date_due" t-options='{"widget": "date"}'/>
+ <br/>
+ <strong>Address:</strong>
+ <span t-field="o.partner_id"
+ t-options="{'widget': 'contact', 'fields': ['address'], 'no_marker': true, 'no_tag_br': True}"/>
+
+ <strong>Payment Terms:</strong>
+ <span t-esc="o.invoice_payment_term_id.name or ''"/>
+
+
+ <t t-if="o.invoice_incoterm_id">
+ <br/>
+ <strong>Incoterm:</strong>
+ <span t-field="o.invoice_incoterm_id.name"/>
+ </t>
+
+ </div>
+ </div>
+ <div id="references" class="row">
+ <div name="references" class="col-12 text-center"/>
+ </div>
+ </template>
+
+ <template id="custom_footer">
+ <div name="footer_left_column" class="col-8 text-center"/>
+ </template>
+
<template id="report_invoice_document" inherit_id="account.report_invoice_document" primary="True">
- <xpath expr="//h2" position="attributes">
- <attribute name="t-if">not o.l10n_latam_document_type_id.report_name</attribute>
- </xpath>
+ <t t-set="o" position="after">
+ <t t-set="custom_header" t-value="'l10n_cl.custom_header'"/>
+ </t>
- <xpath expr="//h2" position="after">
- <h2 t-if="o.l10n_latam_document_type_id.report_name">
- <span t-field="o.l10n_latam_document_type_id.report_name"/>
- <span t-field="o.l10n_latam_document_number"/>
- </h2>
- </xpath>
+ <!-- remove default partner address -->
+ <t t-set="address" position="replace"/>
+
+ <xpath expr="//h2" position="replace"/>
<xpath expr="//span[@t-field='line.price_unit']" position="attributes">
<attribute name="t-field">line.l10n_latam_price_unit</attribute>
</xpath>
- <xpath expr="//span[@id='line_tax_ids']" position="attributes">
- <attribute name="t-esc">', '.join(map(lambda x: (x.description or x.name), line.l10n_latam_tax_ids))</attribute>
- </xpath>
-
<t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal" position="attributes">
<attribute name="t-value">current_subtotal + line.l10n_latam_price_subtotal</attribute>
</t>
@@ -30,10 +153,52 @@
<attribute name="t-field">line.l10n_latam_price_subtotal</attribute>
</span>
+
<span t-field="o.amount_untaxed" position="attributes">
<attribute name="t-field">o.l10n_latam_amount_untaxed</attribute>
</span>
+
+ <!-- we remove the taxes column in boletas -->
+ <xpath expr="//th[@name='th_taxes']/span" position="replace">
+ <t t-if="is_tax">
+ <span>Taxes</span>
+ </t>
+ </xpath>
+
+ <xpath expr="//span[@id='line_tax_ids']" position="replace">
+ <t t-if="is_tax">
+ <span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))" id="line_tax_ids"/>
+ </t>
+ </xpath>
+
+ <!-- remove payment term, this is added on information section -->
+ <p name="payment_term" position="replace"/>
+
+
+ <xpath expr="//span[@t-field='o.payment_reference']/../.." position="replace"/>
+
+ <div id="informations" position="replace">
+ <t t-call="l10n_cl.informations"/>
+ </div>
+
+ <!-- we remove the ml auto and also give more space to avoid multiple lines on tax detail -->
+ <xpath expr="//div[@id='total']/div" position="attributes">
+ <attribute name="t-attf-class">#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'}</attribute>
+ </xpath>
+
+ <xpath expr="//div[@id='total']/div" position="before">
+ <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'}"/>
+ </xpath>
+
+ <xpath expr="//div[@id='total']" position="after">
+ <div class="row">
+ <div name="stamp" class="col-4 text-center"/>
+ <div name="transferable-table" class="col-4"/>
+ <div name="transferable-legend" class="col-4 pull-right"/>
+ </div>
+ </xpath>
+
</template>
</odoo>