1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# -*- coding:utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
TAX_SYSTEM = [
("RF01", "[RF01] Ordinario"),
("RF02", "[RF02] Contribuenti minimi (art.1, c.96-117, L. 244/07)"),
("RF04", "[RF04] Agricoltura e attività connesse e pesca (artt.34 e 34-bis, DPR 633/72)"),
("RF05", "[RF05] Vendita sali e tabacchi (art.74, c.1, DPR. 633/72)"),
("RF06", "[RF06] Commercio fiammiferi (art.74, c.1, DPR 633/72)"),
("RF07", "[RF07] Editoria (art.74, c.1, DPR 633/72)"),
("RF08", "[RF08] Gestione servizi telefonia pubblica (art.74, c.1, DPR 633/72)"),
("RF09", "[RF09] Rivendita documenti di trasporto pubblico e di sosta (art.74, c.1, DPR 633/72)"),
("RF10", "[RF10] Intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72 (art.74, c.6, DPR 633/72)"),
("RF11", "[RF11] Agenzie viaggi e turismo (art.74-ter, DPR 633/72)"),
("RF12", "[RF12] Agriturismo (art.5, c.2, L. 413/91)"),
("RF13", "[RF13] Vendite a domicilio (art.25-bis, c.6, DPR 600/73)"),
("RF14", "[RF14] Rivendita beni usati, oggetti d’arte, d’antiquariato o da collezione (art.36, DL 41/95)"),
("RF15", "[RF15] Agenzie di vendite all’asta di oggetti d’arte, antiquariato o da collezione (art.40-bis, DL 41/95)"),
("RF16", "[RF16] IVA per cassa P.A. (art.6, c.5, DPR 633/72)"),
("RF17", "[RF17] IVA per cassa (art. 32-bis, DL 83/2012)"),
("RF18", "[RF18] Altro"),
("RF19", "[RF19] Regime forfettario (art.1, c.54-89, L. 190/2014)"),
]
class ResCompany(models.Model):
_name = 'res.company'
_inherit = 'res.company'
l10n_it_codice_fiscale = fields.Char(string="Codice Fiscale", size=16, related='partner_id.l10n_it_codice_fiscale',
store=True, readonly=False, help="Fiscal code of your company")
l10n_it_tax_system = fields.Selection(selection=TAX_SYSTEM, string="Tax System",
help="Please select the Tax system to which you are subjected.")
# PEC server
l10n_it_mail_pec_server_id = fields.Many2one('ir.mail_server', string="Server PEC",
help="Configure your PEC-mail server to send electronic invoices.")
l10n_it_address_recipient_fatturapa = fields.Char(string="Government PEC-mail",
help="Enter Government PEC-mail address. Ex: sdi01@pec.fatturapa.it")
l10n_it_address_send_fatturapa = fields.Char(string="Company PEC-mail",
help="Enter your company PEC-mail address. Ex: yourcompany@pec.mail.it")
# Economic and Administrative Index
l10n_it_has_eco_index = fields.Boolean(default=False,
help="The seller/provider is a company listed on the register of companies and as\
such must also indicate the registration data on all documents (art. 2250, Italian\
Civil Code)")
l10n_it_eco_index_office = fields.Many2one('res.country.state', domain="[('country_id','=','IT')]",
string="Province of the register-of-companies office")
l10n_it_eco_index_number = fields.Char(string="Number in register of companies", size=20,
help="This field must contain the number under which the\
seller/provider is listed on the register of companies.")
l10n_it_eco_index_share_capital = fields.Float(default=0.0, string="Share capital actually paid up",
help="Mandatory if the seller/provider is a company with share\
capital (SpA, SApA, Srl), this field must contain the amount\
of share capital actually paid up as resulting from the last\
financial statement")
l10n_it_eco_index_sole_shareholder = fields.Selection(
[
("NO", "Not a limited liability company"),
("SU", "Socio unico"),
("SM", "Più soci")],
string="Shareholder")
l10n_it_eco_index_liquidation_state = fields.Selection(
[
("LS", "The company is in a state of liquidation"),
("LN", "The company is not in a state of liquidation")],
string="Liquidation state")
# Tax representative
l10n_it_has_tax_representative = fields.Boolean(default=False,
help="The seller/provider is a non-resident subject which\
carries out transactions in Italy with relevance for VAT\
purposes and which takes avail of a tax representative in\
Italy")
l10n_it_tax_representative_partner_id = fields.Many2one('res.partner', string='Tax representative partner')
@api.constrains('l10n_it_has_eco_index',
'l10n_it_eco_index_office',
'l10n_it_eco_index_number',
'l10n_it_eco_index_share_capital',
'l10n_it_eco_index_sole_shareholder',
'l10n_it_eco_index_liquidation_state')
def _check_eco_admin_index(self):
for record in self:
if not record.l10n_it_has_eco_index:
continue
if not record.l10n_it_eco_index_office\
or not record.l10n_it_eco_index_number\
or not record.l10n_it_eco_index_share_capital\
or not record.l10n_it_eco_index_sole_shareholder\
or not record.l10n_it_eco_index_liquidation_state:
raise ValidationError(_("All fields about the Economic and Administrative Index must be completed."))
@api.constrains('l10n_it_has_tax_representative',
'l10n_it_tax_representative_partner_id')
def _check_tax_representative(self):
for record in self:
if not record.l10n_it_has_tax_representative:
continue
if not record.l10n_it_tax_representative_partner_id:
raise ValidationError(_("You must select a tax representative."))
if not record.l10n_it_tax_representative_partner_id.vat:
raise ValidationError(_("Your tax representative partner must have a tax number."))
if not record.l10n_it_tax_representative_partner_id.country_id:
raise ValidationError(_("Your tax representative partner must have a country."))
|