Skip to content

Commit

Permalink
[MIG] l10n_it_account_stamp: Migration to 14.0
Browse files Browse the repository at this point in the history
  • Loading branch information
jado95 committed Mar 26, 2021
1 parent bbafd0d commit 0d9c911
Show file tree
Hide file tree
Showing 13 changed files with 156 additions and 191 deletions.
24 changes: 13 additions & 11 deletions l10n_it_account_stamp/README.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
=======================================
Italian Localization - Imposta di bollo
=======================================
======================
ITA - Imposta di bollo
======================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
Expand All @@ -14,13 +14,13 @@ Italian Localization - Imposta di bollo
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--italy-lightgray.png?logo=github
:target: https://github.com/OCA/l10n-italy/tree/12.0/l10n_it_account_stamp
:target: https://github.com/OCA/l10n-italy/tree/14.0--add-14.0-mig-l10n_it_account_stamp/l10n_it_account_stamp
:alt: OCA/l10n-italy
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/l10n-italy-12-0/l10n-italy-12-0-l10n_it_account_stamp
:target: https://translation.odoo-community.org/projects/l10n-italy-14-0--add-14-0-mig-l10n_it_account_stamp/l10n-italy-14-0--add-14-0-mig-l10n_it_account_stamp-l10n_it_account_stamp
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/122/12.0
:target: https://runbot.odoo-community.org/runbot/122/14.0--add-14.0-mig-l10n_it_account_stamp
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|
Expand Down Expand Up @@ -53,7 +53,7 @@ Modalità manuale:

- andare sul prodotto "Imposta di bollo 2 euro" e deselezionare la casella "Calcolo automatico".

- per ciascuna fattura, abilitare manualmente la casella di selezione "Imposta di bollo".
- per ciascuna fattura, abilitare manualmente la casella di selezione "Imposta di bollo". L'applicabilità dell'imposta di bollo verrà calcolata in base alla somma degli imponibili relativi alle imposte selezionate.

Impostare i conti di ricavo/costo nella scheda "Contabilità", generalmente ricavo="Debiti per bolli" e costo="Valori bollati".

Expand All @@ -63,13 +63,13 @@ Automatic mode:

- Go to 'Tax Stamp 2 euro' product and configure 'Stamp taxes' (exemption taxes).

- For each invoice, the base amount for each selected tax will be added up and used to determine the application of the account stamp.
- For each invoice, the base amount for each selected tax will be added up and used to automatically determine the application of the account stamp.

Manual mode:

- Go to 'Tax Stamp 2 euro' product and deselect 'Auto-compute' checkbox.

- For each invoice, manually enable 'Tax Stamp' checkbox.
- For each invoice, manually enable 'Tax Stamp' checkbox. The base amount for each selected tax will be added up and used to determine the application of the account stamp.

Also set income/expense accounts, typically income = 'Debiti per bolli' and expense = 'Valori bollati'.

Expand All @@ -94,7 +94,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/l10n-italy/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/l10n-italy/issues/new?body=module:%20l10n_it_account_stamp%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/l10n-italy/issues/new?body=module:%20l10n_it_account_stamp%0Aversion:%2014.0--add-14.0-mig-l10n_it_account_stamp%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand All @@ -116,6 +116,8 @@ Contributors
* Ermanno Gnan
* Enrico Ganzaroli
* Sergio Zanchetta <https://github.com/primes2h>
* Marco Colombo <https://github.com/TheMule71>
* Gianmarco Conte <gconte@dinamicheaziendali.it>

Maintainers
~~~~~~~~~~~
Expand All @@ -130,6 +132,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/l10n-italy <https://github.com/OCA/l10n-italy/tree/12.0/l10n_it_account_stamp>`_ project on GitHub.
This module is part of the `OCA/l10n-italy <https://github.com/OCA/l10n-italy/tree/14.0--add-14.0-mig-l10n_it_account_stamp/l10n_it_account_stamp>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
7 changes: 4 additions & 3 deletions l10n_it_account_stamp/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
# Copyright 2018 Enrico Ganzaroli (enrico.gz@gmail.com)
# Copyright 2018 Ermanno Gnan (ermannognan@gmail.com)
# Copyright 2018 Lorenzo Battistini (https://github.com/eLBati)
# Copyright 2018-2019 Sergio Zanchetta (https://github.com/primes2h)
# Copyright 2018-2020 Sergio Zanchetta (https://github.com/primes2h)
# Copyright 2021 Gianmarco Conte <gconte@dinamicheaziendali.it>
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).

{
"name": "Italian Localization - Imposta di bollo",
"name": "ITA - Imposta di bollo",
"version": "14.0.1.0.0",
"category": "Localization/Italy",
"summary": "Gestione automatica dell'imposta di bollo",
Expand All @@ -20,7 +21,7 @@
],
"data": [
"data/data.xml",
"views/invoice_view.xml",
"views/account_move_view.xml",
"views/product_view.xml",
"views/company_view.xml",
],
Expand Down
24 changes: 12 additions & 12 deletions l10n_it_account_stamp/data/data.xml
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<odoo>
<data noupdate="1">

<record id="l10n_it_account_stamp_2_euro" model="product.product">
<field name="name">Tax Stamp 2 euro</field>
<field name="type">service</field>
<field name="list_price" eval="2.0" />
<field name="standard_price" eval="2.0" />
<field name="list_price" eval="2.0"/>
<field name="standard_price" eval="2.0"/>
<field
name="description_sale"
>Stamp duty payment under the terms of Art. 6, Subsection 2 of MEF Decree June
17, 2014</field>
<field name="is_stamp" eval="True" />
<field name="auto_compute" eval="True" />
<field name="stamp_apply_min_total_base" eval="77.47" />
<field name="taxes_id" eval="[(6, 0, [])]" />
<field name="supplier_taxes_id" eval="[(6, 0, [])]" />
17, 2014
</field>
<field name="is_stamp" eval="True"/>
<field name="auto_compute" eval="True"/>
<field name="stamp_apply_min_total_base" eval="77.47"/>
<field name="taxes_id" eval="[(6, 0, [])]"/>
<field name="supplier_taxes_id" eval="[(6, 0, [])]"/>
</record>

<record id="base.main_company" model="res.company">
<field
name="tax_stamp_product_id"
ref="l10n_it_account_stamp.l10n_it_account_stamp_2_euro"
/>
ref="l10n_it_account_stamp.l10n_it_account_stamp_2_euro"/>
</record>

</data>
</openerp>
</odoo>
2 changes: 1 addition & 1 deletion l10n_it_account_stamp/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).

from . import invoice
from . import account_move
from . import product
from . import company
Original file line number Diff line number Diff line change
Expand Up @@ -3,66 +3,63 @@
from odoo import _, api, exceptions, fields, models


class AccountInvoice(models.Model):
_inherit = "account.invoice"
tax_stamp = fields.Boolean(
"Tax Stamp",
readonly=True,
states={"draft": [("readonly", False)]},
compute="_compute_tax_stamp",
store=True,
)
class AccountMove(models.Model):
_inherit = "account.move"

tax_stamp = fields.Boolean("Tax Stamp", readonly=True,
states={"draft": [("readonly", False)]},
compute="_compute_tax_stamp", store=True)
auto_compute_stamp = fields.Boolean(
related="company_id.tax_stamp_product_id.auto_compute"
)

def is_tax_stamp_applicable(self):
stamp_product_id = self.env.user.with_context(
lang=self.partner_id.lang
).company_id.tax_stamp_product_id
stamp_product_id = self.env.company.with_context(
lang=self.partner_id.lang).tax_stamp_product_id
if not stamp_product_id:
raise exceptions.Warning(
_("Missing tax stamp product in company settings!")
)
total_tax_base = 0.0
for inv_tax in self.tax_line_ids:
if inv_tax.tax_id.id in stamp_product_id.stamp_apply_tax_ids.ids:
total_tax_base += inv_tax.base
for inv_tax in self.line_ids.filtered(lambda line: line.tax_line_id):
if inv_tax.tax_line_id.id in \
stamp_product_id.stamp_apply_tax_ids.ids:
total_tax_base += inv_tax.tax_base_amount
if total_tax_base >= stamp_product_id.stamp_apply_min_total_base:
return True
else:
return False

@api.depends(
"invoice_line_ids.price_subtotal",
"tax_line_ids.amount",
"tax_line_ids.amount_rounding",
"line_ids.price_total",
"currency_id",
"company_id",
"date_invoice",
"type",
"invoice_date",
"move_type",
)
def _compute_tax_stamp(self):
for invoice in self:
if invoice.auto_compute_stamp:
invoice.tax_stamp = invoice.is_tax_stamp_applicable()

@api.multi
def add_tax_stamp_line(self):
for inv in self:
if not inv.tax_stamp:
raise exceptions.Warning(_("Tax stamp is not applicable"))
stamp_product_id = self.env.user.with_context(
stamp_product_id = self.env.company.with_context(
lang=inv.partner_id.lang
).company_id.tax_stamp_product_id
).tax_stamp_product_id
if not stamp_product_id:
raise exceptions.Warning(
_("Missing tax stamp product in company settings!")
)
for line in inv.invoice_line_ids:
if line.product_id and line.product_id.is_stamp:
raise exceptions.Warning(
_("Tax stamp line %s already present. " "Remove it first.")
_(
"Tax stamp line %s already present. "
"Remove it first.")
% line.name
)
stamp_account = stamp_product_id.property_account_income_id
Expand All @@ -71,25 +68,24 @@ def add_tax_stamp_line(self):
_("Missing account income configuration for" " %s")
% stamp_product_id.name
)
self.env["account.invoice.line"].create(
{
"invoice_id": inv.id,
"product_id": stamp_product_id.id,
"name": stamp_product_id.description_sale,
"sequence": 99999,
"account_id": stamp_account.id,
"price_unit": stamp_product_id.list_price,
"quantity": 1,
"uom_id": stamp_product_id.uom_id.id,
"invoice_line_tax_ids": [(6, 0, stamp_product_id.taxes_id.ids)],
"account_analytic_id": None,
}
)
inv.compute_taxes()
invoice_line_vals = {
"move_id": inv.id,
"product_id": stamp_product_id.id,
"name": stamp_product_id.description_sale,
"sequence": 99999,
"account_id": stamp_account.id,
"price_unit": stamp_product_id.list_price,
"quantity": 1,
"product_uom_id": stamp_product_id.uom_id.id,
"tax_ids": [
(6, 0, stamp_product_id.taxes_id.ids)],
"analytic_account_id": None,
}
inv.write({'invoice_line_ids': [(0, 0, invoice_line_vals)]})

def is_tax_stamp_line_present(self):
for line in self.invoice_line_ids:
if line.product_id and line.product_id.is_stamp:
for line in self.line_ids:
if line.is_stamp_line:
return True
return False

Expand All @@ -99,66 +95,74 @@ def _build_tax_stamp_lines(self, product):
or not product.property_account_expense_id
):
raise exceptions.Warning(
_("Product %s must have income and expense accounts") % product.name
_(
"Product %s must have income and expense accounts")
% product.name
)

income_vals = {
"name": _("Tax Stamp Income"),
"is_stamp_line": True,
"partner_id": self.partner_id.id,
"account_id": product.property_account_income_id.id,
"journal_id": self.journal_id.id,
"date": self.date_invoice,
"date": self.invoice_date,
"debit": 0,
"credit": product.list_price,
"exclude_from_invoice_tab": True
}
if self.type == "out_refund":
if self.move_type == "out_refund":
income_vals["debit"] = product.list_price
income_vals["credit"] = 0

expense_vals = {
"name": _("Tax Stamp Expense"),
"is_stamp_line": True,
"partner_id": self.partner_id.id,
"account_id": product.property_account_expense_id.id,
"journal_id": self.journal_id.id,
"date": self.date_invoice,
"date": self.invoice_date,
"debit": product.list_price,
"credit": 0,
"exclude_from_invoice_tab": True
}
if self.type == "out_refund":
if self.move_type == "out_refund":
income_vals["debit"] = 0
income_vals["credit"] = product.list_price

return income_vals, expense_vals

@api.multi
def action_move_create(self):
res = super(AccountInvoice, self).action_move_create()
def _post(self, soft=True):
res = super(AccountMove, self)._post(soft=soft)
for inv in self:
posted = False
if inv.tax_stamp and not inv.is_tax_stamp_line_present():
if inv.move_id.state == "posted":
if inv.state == "posted":
posted = True
inv.move_id.state = "draft"
inv.state = "draft"
line_model = self.env["account.move.line"]
stamp_product_id = self.env.user.with_context(
stamp_product_id = self.env.company.with_context(
lang=inv.partner_id.lang
).company_id.tax_stamp_product_id
).tax_stamp_product_id
if not stamp_product_id:
raise exceptions.Warning(
_("Missing tax stamp product in company settings!")
)
income_vals, expense_vals = self._build_tax_stamp_lines(
stamp_product_id
)
income_vals["move_id"] = inv.move_id.id
expense_vals["move_id"] = inv.move_id.id
line_model.with_context(check_move_validity=False).create(income_vals)
line_model.with_context(check_move_validity=False).create(expense_vals)
stamp_product_id)
income_vals["move_id"] = inv.id
expense_vals["move_id"] = inv.id
line_model.with_context(check_move_validity=False).create(
income_vals)
line_model.with_context(check_move_validity=False).create(
expense_vals)
if posted:
inv.move_id.state = "posted"
inv.state = "posted"
return res


class AccountInvoiceLine(models.Model):
_inherit = "account.invoice.line"
_inherit = "account.move.line"

is_stamp_line = fields.Boolean(related="product_id.is_stamp", readonly=True)
is_stamp_line = fields.Boolean(
readonly=True) # used only with automatic tax stamp active
14 changes: 0 additions & 14 deletions l10n_it_account_stamp/models/company.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,3 @@ class AccountConfigSettings(models.TransientModel):
help="Product used as Tax Stamp in customer invoices.",
readonly=False,
)

@api.onchange("company_id")
def onchange_company_id(self):
res = super(AccountConfigSettings, self).onchange_company_id()
if self.company_id:
company = self.company_id
self.tax_stamp_product_id = (
company.tax_stamp_product_id
and company.tax_stamp_product_id.id
or False
)
else:
self.tax_stamp_product_id = False
return res
Loading

0 comments on commit 0d9c911

Please sign in to comment.