Skip to content

Commit

Permalink
[IMP] l10n_br_fiscal: Add modal info in document model
Browse files Browse the repository at this point in the history
  • Loading branch information
ygcarvalh authored and ODBreno committed Jul 21, 2023
1 parent ab41cb0 commit 93602e7
Show file tree
Hide file tree
Showing 10 changed files with 347 additions and 59 deletions.
1 change: 1 addition & 0 deletions l10n_br_cte/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"spec_driven_model",
],
"data": [
# "views/document_line.xml",
# 'views/document_related.xml',
# 'views/res_partner.xml',
"views/res_company.xml",
Expand Down
1 change: 1 addition & 0 deletions l10n_br_cte/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
from . import res_company
from . import res_partner
from . import document_related
from . import document_line
134 changes: 87 additions & 47 deletions l10n_br_cte/models/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def _inverse_cte40_Id(self):

cte40_UFEnv = fields.Char(
related="company_id.partner_id.state_id.code",
string="nfe40_UFEnv",
string="cte40_UFEnv",
)

cte40_tpServ = fields.Selection(related="tpServ")
Expand Down Expand Up @@ -175,63 +175,32 @@ def _inverse_cte40_Id(self):
string="Tomador de Serviço",
) # TODO

# View
retira = fields.Selection(selection=[("0", "Sim"), ("1", "Não")]) # TODO constantes

# toma = fields.Selection() # TODO

tpServ = fields.Selection(
selection=[
("6", "Transporte de Pessoas"),
("7", "Transporte de Valores"),
("8", "Excesso de Bagagem"),
],
)

tpCTe = fields.Selection(
selection=[
("0", "CTe Normal"),
("1", "CTe Complementar"),
("3", "CTe Substituição"),
],
)

cte_environment = fields.Selection(
selection=[("1", "Produção"), ("2", "Homologação")],
string="CTe Environment",
copy=False,
)

cte_transmission = fields.Selection(
selection=[
("1", "Normal"),
("3", "Regime Especial NFF"),
("4", "EPEC pela SVC"),
]
)

tpImp = fields.Selection(
selection=[("1", "Retrato"), ("2", "Paisagem")]
) # TODO constantes

##########################
# CT-e tag: ide
# Compute Methods
##########################

def _compute_toma(self):
for doc in self:
doc.cte40_toma4 = doc.partner_id
if self.service_provider in ["0", "1"]:
doc.cte40_toma3 = doc.company_id
doc.cte40_toma4 = None
elif self.service_provider in ["2", "3"]:
doc.cte40_toma3 = doc.partner_id
doc.cte40_toma4 = None
else:
doc.cte40_toma3 = None
doc.cte40_toma4 = doc.partner_id

@api.depends("partner_id", "company_id")
def _compute_cte40_exterior(self):
for doc in self:
if doc.company_id.partner_id.state_id == doc.partner_id.state_id:
doc.nfe40_idDest = "1"
doc.cte40_idDest = "1"
elif doc.company_id.partner_id.country_id == doc.partner_id.country_id:
doc.nfe40_idDest = "2"
doc.cte40_idDest = "2"
else:
doc.nfe40_idDest = "3"
doc.cte40_idDest = "3"

##########################
# CT-e tag: emit
Expand All @@ -246,7 +215,7 @@ def _compute_cte40_exterior(self):

cte40_CRT = fields.Selection(
related="company_tax_framework",
string="Código de Regime Tributário (NFe)",
string="Código de Regime Tributário (CTe)",
)

##########################
Expand Down Expand Up @@ -350,14 +319,85 @@ def _compute_dest_data(self):
string="vRec",
)

##########################
# CT-e tag: imp
##########################

# cte40_imp = fields.One2many(related="l10n_br_fiscal.document.line")

##########################
# CT-e tag: infCTeNorm
##########################

cte40_prodPred = fields.Char(string="prodPred")
# cte40_infCteNorm = fields.One2many(related="l10n_br_fiscal.document.related")

# TODO outros níveis infcteNorm
# cte40_infQ = fields.One2many(
# comodel_name="l10n_br_fiscal.document.related",
# string="Informações de quantidades da Carga do CTe"
# ) TODO

##########################
# CT-e tag: infCteComp
##########################

cte40_chCTe = fields.Char(string="chCte")

##########################
# CT-e tag: autXML
# Compute Methods
##########################

def _default_cte40_autxml(self):
company = self.env.company
authorized_partners = []
if company.accountant_id and company.cte_authorize_accountant_download_xml:
authorized_partners.append(company.accountant_id.id)
if (
company.technical_support_id
and company.cte_authorize_technical_download_xml
):
authorized_partners.append(company.technical_support_id.id)
return authorized_partners

##########################
# CT-e tag: autXML
##########################

cte40_autXML = fields.One2many(default=_default_cte40_autxml)

# View
retira = fields.Selection(selection=[("0", "Sim"), ("1", "Não")]) # TODO constantes

tpServ = fields.Selection(
selection=[
("6", "Transporte de Pessoas"),
("7", "Transporte de Valores"),
("8", "Excesso de Bagagem"),
],
)

tpCTe = fields.Selection(
selection=[
("0", "CTe Normal"),
("1", "CTe Complementar"),
("3", "CTe Substituição"),
],
)

cte_environment = fields.Selection(
selection=[("1", "Produção"), ("2", "Homologação")],
string="CTe Environment",
copy=False,
)

cte_transmission = fields.Selection(
selection=[
("1", "Normal"),
("3", "Regime Especial NFF"),
("4", "EPEC pela SVC"),
]
)

tpImp = fields.Selection(
selection=[("1", "Retrato"), ("2", "Paisagem")]
) # TODO constantes
123 changes: 123 additions & 0 deletions l10n_br_cte/models/document_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Copyright 2023 KMEE
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields

from odoo.addons.l10n_br_fiscal.constants.icms import ICMS_CST
from odoo.addons.spec_driven_model.models import spec_models


class CTeLine(spec_models.StackedModel):
_name = "l10n_br_fiscal.document.line"
_inherit = ["l10n_br_fiscal.document.line", "cte.40.tcte_imp"]
_stacked = "cte.40.tcte_imp"
_field_prefix = "cte40_"
_schema_name = "cte"
_schema_version = "4.0.0"
_odoo_module = "l10n_br_cte"
_spec_module = "odoo.addons.l10n_br_cte_spec.models.v4_0.cte_tipos_basico_v4_00"
_spec_tab_name = "CTe"

##################################################
# CT-e tag: ICMS
# Grupo N01. Grupo Tributação do ICMS= 00
# Grupo N02. Grupo Tributação do ICMS= 20
# Grupo N03. Grupo Tributação do ICMS= 45 (40, 41 e 51)
# Grupo N04. Grupo Tributação do ICMS= 60
# Grupo N05. Grupo Tributação do ICMS= 90 - ICMS outros
# Grupo N06. Grupo Tributação do ICMS= 90 - ICMS Outra UF
# Grupo N06. Grupo Tributação do ICMS= 01 - ISSN
#################################################

cte40_choice11 = fields.Selection(
selection=[
("cte40_ICMS00", "ICMS00"),
("cte40_ICMS20", "ICMS20"),
("cte40_ICMS40", "ICMS45"),
("cte40_ICMS60", "ICMS60"),
("cte40_ICMS90", "ICMS90"),
("cte40_ICMSOutraUF", "ICMSOutraUF"),
("cte40_ICMSSN", "ICMSSN"),
],
string="Tipo de ICMS",
compute="_compute_choice11",
store=True,
)

cte40_vTotTrib = fields.Monetary(related="estimate_tax")

cte40_pICMS = fields.Float(related="icms_percent", string="pICMS")

cte40_vICMS = fields.Monetary(related="amount_icms_value")

# ICMS20 - ICMS90
cte40_pRedBC = fields.Float(related="icms_reduction")

cte40_vBC = fields.Monetary(related="icms_base")

# ICMS60
cte40_vBCSTRet = fields.Monetary(related="icmsst_wh_base")

cte40_vICMSSTRet = fields.Monetary(related="icmsst_wh_value")

# ICMSSN
cte40_indSN = fields.Selection(related="indSN")

# ICMS NF
cte40_vBCST = fields.Monetary(related="icmsst_base")

# ICMSOutraUF
# TODO

##########################
# CT-e tag: ICMS
# Compute Methods
##########################

@api.depends("icms_cst_id")
def _compute_choice11(self):
for record in self:
icms_choice = ""
if record.icms_cst_id.code in ICMS_CST:
if record.icms_cst_id.code in ["40", "41", "50"]:
icms_choice = "cte40_ICMS45"
elif (
record.icms_cst_id.code == "90"
and self.partner_id.state_id != self.company_id.state_id
):
icms_choice = "cte40_ICMSOutraUF"
else:
icms_choice = "{}{}".format("cte40_ICMS", record.icms_cst_id.code)
record.cte40_choice11 = icms_choice

indSN = fields.Selection(
selection=[
("0", "Não é simples nacional"),
("1", "É simples nacional"),
]
)

##########################
# CT-e tag: ICMSUFFim
##########################

cte40_vBCUFFim = fields.Monetary(related="icms_destination_base")
cte40_pFCPUFFim = fields.Monetary(compute="_compute_cte40_ICMSUFFim")
cte40_pICMSUFFim = fields.Monetary(compute="_compute_cte40_ICMSUFFim")
# cte40_pICMSInter = fields.Selection(
# selection=[("0", "Teste")],
# compute="_compute_cte40_ICMSUFFim")

def _compute_cte40_ICMSUFFim(self):
for record in self:
# if record.icms_origin_percent:
# record.cte40_pICMSInter = str("%.02f" % record.icms_origin_percent)
# else:
# record.cte40_pICMSInter = False

record.cte40_pFCPUFFim = record.icmsfcp_percent
record.cte40_pICMSUFfim = record.icms_destination_percent

cte40_vFCPUFfim = fields.Monetary(related="icmsfcp_value")
cte40_vICMSUFfim = fields.Monetary(related="icms_destination_value")
cte40_vICMSUFIni = fields.Monetary(related="icms_origin_value")
Loading

0 comments on commit 93602e7

Please sign in to comment.