Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[14.0] porting l10n_it_corrispettivi #2972

Closed
wants to merge 72 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
d97be77
[ADD] prima bozza
eLBati Jul 22, 2011
41c7a88
[ADD] l10n_it_corrispettivi
Feb 18, 2013
f9bef6b
[REF] Set all the modules of the master branches to "installable": False
eLBati Jul 6, 2014
559c302
[MOV] move addons out of __unported__ (they remain not installable)
sbidoul Oct 13, 2015
0728d3d
[MIG] Rename manifest files
pedrobaeza Oct 6, 2016
790bc06
OCA Transbot updated translations from Transifex
oca-transbot Nov 30, 2015
d814161
manually moving module from 7.0 branch beacause
eLBati Jun 3, 2016
35c3e61
Porting l10n_it_corrispettivi to 8.0
shakin89 Jun 3, 2016
902a9a6
IMP metadata
eLBati Jun 3, 2016
bd2e082
OCA Transbot updated translations from Transifex
oca-transbot Jul 30, 2016
6d651e9
[l10n_it_corrispettivi] Fix ValueError: "name 'partner_id' is not def…
tafaRU Aug 24, 2016
2089895
[FIX] remove en.po that was erroneously created by transbot
sbidoul Aug 26, 2016
b416da8
FIX
eLBati Sep 12, 2016
081fc18
OCA Transbot updated translations from Transifex
oca-transbot Nov 29, 2016
d765a57
[FIX] Add partner on search view (#343)
Jun 23, 2017
6e1710b
[MIG] l10n_it_corrispettivi: Migration to 10.0
SimoRubi May 22, 2018
d9ae481
OCA Transbot updated translations from Transifex
oca-transbot Jun 2, 2018
30f1d78
[IMP] Added fiscal position management
SimoRubi Jun 7, 2018
dada18d
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Jun 20, 2018
0521d9e
[FIX] group accounting_entries is not visible unless user is in accou…
SimoRubi Jul 5, 2018
83f2375
[MIG] l10n_it_corrispettivi: Migration to 11.0
SimoRubi Sep 3, 2018
6d0fced
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Sep 18, 2018
295d4c2
[UPD] README.rst
OCA-git-bot Sep 19, 2018
00694e7
Translated using Weblate (Italian)
primes2h Oct 13, 2018
df98c98
Update translation files
oca-transbot Nov 25, 2018
cea9da3
[MIG] l10n_it_corrispettivi: Migration to 12.0
monen17 Jan 19, 2019
301b5e4
[FIX] l10n_it_corrispettivi: Hide Send & Print button: it makes littl…
monen17 Jan 23, 2019
b9686bb
[FIX] l10n_it_corrispettivi: Hide partner and payment details
monen17 Jan 24, 2019
0cbaf04
[IMP] l10n_it_corrispettivi: Create a corrispettivi journal when inst…
monen17 Jan 26, 2019
18c84bd
[IMP] l10n_it_corrispettivi: Use Corrispettivi report for portal preview
monen17 Jan 31, 2019
6225918
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Feb 7, 2019
d401ff2
Update translation files
oca-transbot Feb 9, 2019
8b7e0aa
Translated using Weblate (Italian)
primes2h Feb 14, 2019
5eb0309
Translated using Weblate (Italian)
primes2h Feb 18, 2019
de96f2d
[FIX] l10n_it_corrispettivi use correct term 'receipt'
primes2h Feb 12, 2019
20700f9
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Feb 18, 2019
4490e45
Update translation files
oca-transbot Mar 3, 2019
1277ec3
Translated using Weblate (Italian)
primes2h Mar 7, 2019
1fcf1cc
[ADD] icon.png
OCA-git-bot Apr 3, 2019
6d302ad
[FIX] l10n_it_corrispettivi: Find fiscal positions without company
SimoRubi Apr 3, 2019
c269d42
[IMP] l10n_it_corrispettivi: Show the corrispettivi tree view as a re…
SimoRubi Apr 3, 2019
c81044c
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Apr 19, 2019
d39f192
Update translation files
oca-transbot May 20, 2019
dae5456
[UPD] README.rst
OCA-git-bot Jul 29, 2019
ba57dff
Translated using Weblate (Italian)
primes2h Aug 2, 2019
99c2f5d
[12.0][FIX] l10n_it_corrispettivi, fix account report
GSLabIt Jan 8, 2020
44ab1f6
[UPD] README.rst
OCA-git-bot Jan 9, 2020
bd9f765
l10n_it_corrispettivi 12.0.1.1.3
OCA-git-bot Jan 9, 2020
0c57e1b
- fix journal on partner change
GSLabIt Feb 6, 2020
5a7d2aa
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Feb 12, 2020
74c5265
[UPD] README.rst
OCA-git-bot Feb 12, 2020
d6800ff
l10n_it_corrispettivi 12.0.1.1.4
OCA-git-bot Feb 12, 2020
69c2a27
Update translation files
oca-transbot Feb 12, 2020
182d6e2
merge PR 1264 1717 1728 1737 1739
May 13, 2020
88e85e6
[12.0][FIX] refund and modify invoice
sergiocorato May 26, 2020
4042b11
l10n_it_corrispettivi 12.0.1.1.6
OCA-git-bot Jun 12, 2020
71b2794
Translated using Weblate (Italian)
sergiocorato Jul 5, 2020
9a53f7a
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Jul 6, 2020
fbb94b7
Update translation files
oca-transbot Jul 6, 2020
3f2e442
FIX license LGPL-3 conflicts
eLBati Sep 24, 2020
55634e9
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Sep 24, 2020
8202ea3
l10n_it_corrispettivi 12.0.1.1.7
OCA-git-bot Sep 24, 2020
626f0a5
Update translation files
oca-transbot Sep 24, 2020
ff00c65
[FIX][l10n_it_corrispettivi] fix partner in multi company partner
matteoopenf Apr 1, 2020
ad08ad6
[FIX] l10n_it_corrispettivi: Get user for corrispettivi for current c…
SimoRubi Jun 17, 2021
5e38f6b
[UPD] Update l10n_it_corrispettivi.pot
oca-travis Dec 15, 2021
820d67a
l10n_it_corrispettivi 12.0.1.1.8
OCA-git-bot Dec 15, 2021
d25f8d9
Update translation files
oca-transbot Dec 15, 2021
b2f7711
Reformatted after template update
SirTakobi Aug 5, 2022
12a455a
Manually fix manifest website key
SirTakobi Aug 5, 2022
19e87da
[IMP] l10n_it_corrispettivi: black, isort, prettier
eLBati Oct 10, 2022
4d96e15
REF l10n_it_corrispettivi: rename module and run upgrade script
eLBati Oct 10, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions l10n_it_receipt/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from . import models
from openupgradelib import openupgrade


def rename_old_italian_module(cr):

if not openupgrade.is_module_installed(cr, "l10n_it_corrispettivi"):
return

openupgrade.update_module_names(
cr,
[
("l10n_it_corrispettivi", "l10n_it_receipt"),
],
merge_modules=True,
)

if openupgrade.column_exists(
cr, "account_move", "old_invoice_id"
) and openupgrade.column_exists(cr, "account_invoice", "corrispettivo"):
# l10n_it_corrispettivi handled sale receipts only
openupgrade.logged_query(
cr,
"UPDATE account_move m "
"SET move_type = 'out_receipt' "
"FROM account_invoice i "
"WHERE i.corrispettivo = true AND i.id = m.old_invoice_id",
)

if openupgrade.column_exists(cr, "account_journal", "corrispettivi"):
openupgrade.logged_query(
cr,
"UPDATE account_journal "
"SET receipts = true "
"WHERE corrispettivi = true",
)

if openupgrade.column_exists(cr, "account_fiscal_position", "corrispettivi"):
openupgrade.logged_query(
cr,
"UPDATE account_fiscal_position "
"SET receipts = true "
"WHERE corrispettivi = true",
)

if openupgrade.column_exists(cr, "res_partner", "use_corrispettivi"):
openupgrade.logged_query(
cr,
"UPDATE res_partner "
"SET use_receipts = true "
"WHERE use_corrispettivi = true",
)
21 changes: 21 additions & 0 deletions l10n_it_receipt/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2016 Lorenzo Battistini
# Copyright 2018-2019 Simone Rubino
# Copyright 2019 Sergio Zanchetta (Associazione PNLUG - Gruppo Odoo)
# Copyright 2020 Giovanni Serra - GSLab.it
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
{
"name": "ITA - Ricevute",
"version": "14.0.1.0.0",
"category": "Accounting & Finance",
"author": "Odoo Italian Community, Agile Business Group, "
"Odoo Community Association (OCA), TAKOBI",
"website": "https://github.com/OCA/l10n-italy",
"license": "LGPL-3",
"depends": ["account_receipt_journal"],
"data": [
"views/partner_views.xml",
"views/account_fiscal_position_views.xml",
],
"installable": True,
"pre_init_hook": "rename_old_italian_module",
}
24 changes: 24 additions & 0 deletions l10n_it_receipt/migrations/13.0.1.0.0/post-migrate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
if openupgrade.column_exists(
env.cr, "account_move", "old_invoice_id"
) and openupgrade.column_exists(env.cr, "account_invoice", "corrispettivo"):
# l10n_it_corrispettivi handled sale receipts only
openupgrade.logged_query(
env.cr,
"UPDATE account_move m "
"SET move_type = 'out_receipt' "
"FROM account_invoice i "
"WHERE i.corrispettivo = true AND i.id = m.old_invoice_id",
)

if openupgrade.column_exists(env.cr, "account_journal", "corrispettivi"):
openupgrade.logged_query(
env.cr,
"UPDATE account_journal "
"SET receipts = true "
"WHERE corrispettivi = true",
)
2 changes: 2 additions & 0 deletions l10n_it_receipt/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import account_fiscal_position
from . import partner
29 changes: 29 additions & 0 deletions l10n_it_receipt/models/account_fiscal_position.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from odoo import models, fields, api


class Position(models.Model):
_inherit = "account.fiscal.position"
receipts = fields.Boolean(string='Receipts')

@api.model
def get_receipt_fiscal_pos(self, company_id=None):
if not company_id:
company_id = self.env.user.company_id
receipt_fiscal_pos = self.search(
[
('company_id', '=', company_id.id),
('receipts', '=', True),
],
limit=1
)
if not receipt_fiscal_pos:
# Fall back to fiscal positions without company
receipt_fiscal_pos = self.search(
[
('company_id', '=', False),
('receipts', '=', True),
],
limit=1
)

return receipt_fiscal_pos
22 changes: 22 additions & 0 deletions l10n_it_receipt/models/partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from odoo import models, fields, api


class Partner(models.Model):
_inherit = "res.partner"
use_receipts = fields.Boolean(string='Use Receipts')

@api.onchange('use_receipts')
def onchange_use_corrispettivi(self):
if self.use_receipts:
# Partner is receipts, assign a receipts
# fiscal position only if there is none
if not self.property_account_position_id:
company = self.company_id or \
self.default_get(['company_id'])['company_id']
self.property_account_position_id = \
self.env['account.fiscal.position'] \
.get_receipt_fiscal_pos(company)
else:
# Unset the fiscal position only if it was receipts
if self.property_account_position_id.receipts:
self.property_account_position_id = False
4 changes: 4 additions & 0 deletions l10n_it_receipt/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* Lorenzo Battistini
* Simone Rubino
* Sergio Zanchetta <https://github.com/primes2h>
* Giovanni Serra <[email protected]>
15 changes: 15 additions & 0 deletions l10n_it_receipt/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
**Italiano**

Questo modulo permette di generare le ricevute specificando le varie aliquote per riga
(le righe della ricevuta hanno gli stessi automatismi di quelle della fattura) e quindi registrare le ricevute una per una.
Un esempio tipico di questo caso d’uso è la vendita tramite sito di e-commerce.

Chi invece emette scontrini (e non ha un POS integrato con Odoo) dovrà registrare in contabilità, a fine giornata, gli incassi totali.

**English**

This module allows you to generate receipts by specifying the different taxes per line
(the receipt lines have the same automatisms as those on the invoice) and then record the receipts one by one.
A typical example of this use case is the sale via e-commerce site.

On the other hand, those who issue receipts (and do not have an integrated POS with Odoo) will have to record the total revenue at the end of the day.
Empty file.
157 changes: 157 additions & 0 deletions l10n_it_receipt/tests/test_receipts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# Copyright 2018 Simone Rubino
# Copyright 2022 Lorenzo Battistini

from odoo.addons.account_receipt_journal.tests.test_receipts \
import TestReceipts
from odoo.exceptions import UserError
from odoo.tests import tagged


@tagged("post_install", "-at_install")
class TestCorrispettivi(TestReceipts):

def setUp(self):
super(TestCorrispettivi, self).setUp()
partner_model = self.env['res.partner']
self.fiscal_pos_model = self.env['account.fiscal.position']
self.journal_model = self.env['account.journal']
self.corr_fiscal_position = self.fiscal_pos_model.create({
'name': 'receipts fiscal position',
'receipts': True,
'company_id': self.env.user.company_id.id
})
self.no_corr_fiscal_position = self.fiscal_pos_model.create({
'name': 'receipts fiscal position',
'receipts': False,
'company_id': self.env.user.company_id.id
})
self.corrispettivi_partner = partner_model.create({
'name': 'Receipts partner',
'use_receipts': True,
'property_account_position_id': self.corr_fiscal_position.id
})
self.no_corrispettivi_partner = partner_model.create({
'name': 'Receipts partner',
'use_receipts': False,
'property_account_position_id': self.no_corr_fiscal_position.id
})

self.account_receivable = self.env['account.account'].search(
[('user_type_id', '=', self.env.ref(
'account.data_account_type_receivable').id)], limit=1)

def create_corrispettivi_invoice(self):
corr_invoice = self.invoice_model \
.with_context(default_move_type="out_receipt") \
.create({'invoice_line_ids': [
(0, 0, {
'account_id': self.a_sale.id,
'product_id': self.env.ref('product.product_product_5').id,
'name': 'Corrispettivo',
'quantity': 1,
'price_unit': 10,
'tax_ids': [(6, 0, {self.tax22inc.id})]
}),
]})
return corr_invoice

def test_get_corr_journal(self):
""" Test that get_corr_journal gets a receipts journal
or raises an UserError if none found"""
corr_journal_id = self.journal_model.get_corr_journal()
self.assertEqual(corr_journal_id.type, 'sale')
self.assertTrue(corr_journal_id.corrispettivi)

corr_journal_id.unlink()
with self.assertRaises(UserError):
self.journal_model.get_corr_journal()

def test_get_corr_fiscal_pos(self):
""" Test that get_corr_fiscal_pos gets a receipts (corrispettivi)
fiscal position"""
corr_fiscal_pos = self.fiscal_pos_model.get_corr_fiscal_pos()
self.assertTrue(corr_fiscal_pos.corrispettivi)

def test_corrispettivi_partner_onchange(self):
""" Test onchange in partner. """
# If the partner uses receipts,
# the fiscal position must have the flag receipts (corrispettivi)
self.corrispettivi_partner.onchange_use_corrispettivi()
self.assertTrue(self.corrispettivi_partner
.property_account_position_id.corrispettivi)

# If the partner does not use receipts
# and it already has a fiscal position that is
# receipts (corrispettivi), it must be removed
self.no_corrispettivi_partner.write({
'property_account_position_id': self.corr_fiscal_position.id})
self.no_corrispettivi_partner.onchange_use_corrispettivi()
self.assertFalse(
self.no_corrispettivi_partner.property_account_position_id)

# If the partner does not use receipts
# and it already has a fiscal position that is
# not receipts (corrispettivi), it must not be removed
self.no_corrispettivi_partner.write({
'property_account_position_id': self.no_corr_fiscal_position.id})
self.no_corrispettivi_partner.onchange_use_corrispettivi()
self.assertEqual(
self.no_corrispettivi_partner.property_account_position_id,
self.no_corr_fiscal_position)

def test_invoice_creation_ok(self):
""" Test invoice creation. """
corr_invoice = self.create_corrispettivi_invoice()
self.assertTrue(corr_invoice)

def test_invoice_creation_ko(self):
""" Test invoice creation fails . """
self.journal_model.get_corr_journal().unlink()
# if no receipts journal exists, raise
# No journal found for receipts
with self.assertRaises(UserError):
self.create_corrispettivi_invoice()

def test_invoice_refund_ok(self):
""" Test invoice creation. """
corr_invoice = self.create_corrispettivi_invoice()
self.assertTrue(corr_invoice)
corr_invoice.action_invoice_open()
self.assertEqual(corr_invoice.state, 'open')
refund_invoice_dict = self.env['account.invoice.refund'].with_context(
active_ids=corr_invoice.ids).create({
'filter_refund': 'refund',
'description': 'A refund reason',
}).invoice_refund()
refund_invoice = self.invoice_model.search(refund_invoice_dict['domain'])
self.assertTrue(refund_invoice)
refund_invoice.action_invoice_open()

def test_invoice_refund_modify_ok(self):
""" Test invoice creation. """
corr_invoice = self.create_corrispettivi_invoice()
self.assertTrue(corr_invoice)
corr_invoice.action_invoice_open()
self.assertEqual(corr_invoice.state, 'open')
refund_invoice_dict = self.env['account.invoice.refund'].with_context(
active_ids=corr_invoice.ids).create({
'filter_refund': 'modify',
'description': 'A modify refund reason',
}).invoice_refund()
refund_invoice = self.invoice_model.search(refund_invoice_dict['domain'])
self.assertTrue(refund_invoice)
refund_invoice.action_invoice_open()

def test_invoice_refund_cancel_ok(self):
""" Test invoice creation. """
corr_invoice = self.create_corrispettivi_invoice()
self.assertTrue(corr_invoice)
corr_invoice.action_invoice_open()
self.assertEqual(corr_invoice.state, 'open')
refund_invoice_dict = self.env['account.invoice.refund'].with_context(
active_ids=corr_invoice.ids).create({
'filter_refund': 'cancel',
'description': 'A cancel refund reason',
}).invoice_refund()
refund_invoice = self.invoice_model.search(refund_invoice_dict['domain'])
self.assertTrue(refund_invoice)
14 changes: 14 additions & 0 deletions l10n_it_receipt/views/account_fiscal_position_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_account_position_form_receipts" model="ir.ui.view">
<field name="name">account.fiscal.position.form.receipts</field>
<field name="model">account.fiscal.position</field>
<field name="type">form</field>
<field name="inherit_id" ref="account.view_account_position_form"/>
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="receipts"/>
</field>
</field>
</record>
</odoo>
14 changes: 14 additions & 0 deletions l10n_it_receipt/views/partner_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_partner_form_receipts" model="ir.ui.view">
<field name="name">res.partner.form.receipts</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="account.view_partner_property_form"/>
<field name="groups_id" eval="[(4, ref('account.group_account_manager'))]"/>
<field name="arch" type="xml">
<group name="fiscal_information" position="inside">
<field name="use_receipts"/>
</group>
</field>
</record>
</odoo>
6 changes: 6 additions & 0 deletions setup/l10n_it_corrispettivi/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)