Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 15 additions & 0 deletions l10n_br_base/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def _get_company_address_field_names(self):
"state_tax_number_ids",
"street_number",
"street_name",
"street_number2",
]

def _inverse_legal_name(self):
Expand All @@ -41,6 +42,10 @@ def _inverse_street_number(self):
for company in self:
company.partner_id.street_number = company.street_number

def _inverse_street_number2(self):
for company in self:
company.partner_id.street_number2 = company.street_number2

def _inverse_cnpj_cpf(self):
for company in self:
company.partner_id.cnpj_cpf = company.cnpj_cpf
Expand Down Expand Up @@ -81,6 +86,10 @@ def _inverse_l10n_br_isuf_code(self):
inverse="_inverse_legal_name",
)

country_enforce_cities = fields.Boolean(
related="partner_id.country_id.enforce_cities", readonly=True
)

district = fields.Char(
compute="_compute_address",
inverse="_inverse_district",
Expand All @@ -96,12 +105,18 @@ def _inverse_l10n_br_isuf_code(self):
inverse="_inverse_street_number",
)

street_number2 = fields.Char(
compute="_compute_address", inverse="_inverse_street_number2"
)

city_id = fields.Many2one(
domain="[('state_id', '=', state_id)]",
compute="_compute_address",
inverse="_inverse_city_id",
)

type = fields.Selection(related="partner_id.type", readonly=False)

country_id = fields.Many2one(default=lambda self: self.env.ref("base.br"))

cnpj_cpf = fields.Char(
Expand Down
66 changes: 60 additions & 6 deletions l10n_br_fiscal/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,18 @@ class ResCompany(models.Model):

def _get_company_address_field_names(self):
partner_fields = super()._get_company_address_field_names()
return partner_fields + [
"tax_framework",
"legal_nature_id",
"cnae_main_id",
]
return partner_fields + ["tax_framework", "legal_nature_id", "cnae_main_id"]

def _inverse_br_address_data(self):
for company in self:
company.partner_id.write(
{
"street_name": company.street_name,
"street_number": company.street_number,
"street_number2": company.street_number2,
"city_id": company.city_id.id,
}
)

def _inverse_legal_nature_id(self):
"""Write the l10n_br specific functional fields."""
Expand All @@ -64,6 +71,49 @@ def _inverse_tax_framework(self):
for c in self:
c.partner_id.tax_framework = c.tax_framework

@api.depends("tax_framework")
def _compute_tax_domains(self):
try:
simples_piscofins = self.env.ref(
"l10n_br_fiscal.tax_pis_cofins_simples_nacional"
).id
ipi_outros = self.env.ref("l10n_br_fiscal.tax_ipi_outros").id
group_ipi = self.env.ref("l10n_br_fiscal.tax_group_ipi").id
group_icms = self.env.ref("l10n_br_fiscal.tax_group_icms").id
group_icmssn = self.env.ref("l10n_br_fiscal.tax_group_icmssn").id
except ValueError:
simples_piscofins = ipi_outros = group_ipi = False
group_icms = group_icmssn = False

for rec in self:
# PIS/COFINS
if rec.tax_framework == "3":
ps_dom = [
("piscofins_type", "=", "company"),
("id", "!=", simples_piscofins),
]
else:
ps_dom = [
("piscofins_type", "=", "company"),
("id", "=", simples_piscofins),
]

# IPI
if rec.tax_framework == "3":
ipi_dom = [("tax_group_id", "=", group_ipi), ("id", "!=", ipi_outros)]
else:
ipi_dom = [("id", "=", ipi_outros)]

# ICMS
if rec.tax_framework == "3":
icms_dom = [("tax_group_id", "=", group_icms)]
else:
icms_dom = [("tax_group_id", "=", group_icmssn)]

rec.piscofins_domain = str(ps_dom)
rec.ipi_domain = str(ipi_dom)
rec.icms_domain = str(icms_dom)

@api.depends("cnae_main_id", "annual_revenue", "payroll_amount")
def _compute_simplified_tax(self):
for record in self:
Expand Down Expand Up @@ -111,6 +161,10 @@ def _compute_simplified_tax(self):
record.currency_id.decimal_places,
)

piscofins_domain = fields.Char(compute="_compute_tax_domains")
ipi_domain = fields.Char(compute="_compute_tax_domains")
icms_domain = fields.Char(compute="_compute_tax_domains")

legal_nature_id = fields.Many2one(
comodel_name="l10n_br_fiscal.legal.nature",
string="Legal Nature",
Expand All @@ -129,7 +183,7 @@ def _compute_simplified_tax(self):

cnae_secondary_ids = fields.Many2many(
comodel_name="l10n_br_fiscal.cnae",
domain="[('internal_type', '=', 'normal'), " "('id', '!=', cnae_main_id)]",
domain="[('internal_type', '=', 'normal'), ('id', '!=', cnae_main_id)]",
string="Secondary CNAE",
)

Expand Down
9 changes: 6 additions & 3 deletions l10n_br_fiscal/views/res_company_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,12 @@
<page name="taxes" string="Taxes">
<group name="normal_taxes" string="Default Taxes">
<group name="piscofins_taxes" string="PIS/COFINS">
<field name="piscofins_domain" invisible="1" />
<field
name="piscofins_id"
required="1"
domain="[ ('piscofins_type', '=', 'company'), '|', '&amp;', ('parent.tax_framework', '=', 3), ('id', '!=', %(l10n_br_fiscal.tax_pis_cofins_simples_nacional)d), '&amp;', ('parent.tax_framework', '!=', 3), ('id', '=', %(l10n_br_fiscal.tax_pis_cofins_simples_nacional)d) ]"
options="{'no_create': True, 'no_create_edit': True}"
domain="piscofins_domain"
/>
<field name="tax_pis_wh_id" />
<field name="tax_cofins_wh_id" />
Expand All @@ -96,11 +97,12 @@
name="ripi"
invisible="tax_framework != '3'"
/>
<field name="ipi_domain" invisible="1" />
<field
name="tax_ipi_id"
invisible="tax_framework == '3' and ripi"
required="tax_framework != '3'"
domain="['|', '&amp;', ('parent.tax_framework', '=', 3), '&amp;', ('id', '!=', %(l10n_br_fiscal.tax_ipi_outros)d), ('tax_group_id', '=', %(l10n_br_fiscal.tax_group_ipi)d), '&amp;', ('parent.tax_framework', '!=', 3), ('id', '=', %(l10n_br_fiscal.tax_ipi_outros)d) ]"
domain="ipi_domain"
options="{'no_create': True, 'no_create_edit': True}"
/>
<div
Expand All @@ -110,11 +112,12 @@
>IPI tax will be calculed by Product NCM and Fiscal Operation.</div>
</group>
<group name="icms_taxes" string="ICMS">
<field name="icms_domain" invisible="1" />
<field
name="tax_icms_id"
invisible="tax_framework == '3'"
required="tax_framework in ('1', '2')"
domain="['|', '&amp;', ('parent.tax_framework', '=', 3), ('tax_group_id', '=', %(l10n_br_fiscal.tax_group_icms)d), '&amp;', ('parent.tax_framework', '!=', 3), ('tax_group_id', '=', %(l10n_br_fiscal.tax_group_icmssn)d) ]"
domain="icms_domain"
options="{'no_create': True, 'no_create_edit': True}"
/>
<field
Expand Down