Skip to content

Commit

Permalink
[ADD] l10n_br_mdfe_spec generated by xsdata-odoo
Browse files Browse the repository at this point in the history
  • Loading branch information
rvalyi committed Jul 9, 2023
1 parent 3240fa0 commit 8110945
Show file tree
Hide file tree
Showing 20 changed files with 4,650 additions and 0 deletions.
1 change: 1 addition & 0 deletions l10n_br_mdfe_spec/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
14 changes: 14 additions & 0 deletions l10n_br_mdfe_spec/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "mdfe spec",
"version": "14.0.1.0.0",
"author": "Akretion, Odoo Community Association (OCA)",
"license": "LGPL-3",
"category": "Accounting",
"summary": "CT-e spec",
"depends": ["base"],
"installable": True,
"application": False,
"development_status": "Alpha",
"maintainers": ["rvalyi"],
"website": "https://github.com/OCA/l10n-brazil",
}
2 changes: 2 additions & 0 deletions l10n_br_mdfe_spec/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import spec_models
from . import v3_0
37 changes: 37 additions & 0 deletions l10n_br_mdfe_spec/models/spec_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright 2023-TODAY Akretion - Raphael Valyi <raphael.valyi@akretion.com>
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html).

from odoo import fields, models


class MdfeSpecMixin(models.AbstractModel):
_description = "Abstract Model"
_name = "spec.mixin.mdfe"
_field_prefix = "mdfe30_"
_schema_name = "mdfe"
_schema_version = "3.0.0"
_odoo_module = "l10n_br_mdfe"
_spec_module = (
"odoo.addons.l10n_br_mdfe_spec.models.v3_0.mdfe_tipos_basico_v3_00.py"
)
_binding_module = "nfelib.mdfe.bindings.v3_0.mdfe_v3_00.py"
_spec_tab_name = "mdfe"

brl_currency_id = fields.Many2one(
comodel_name="res.currency",
string="Moeda",
# FIXME compute method is better, but not working in v14.
default=lambda self: self.env.ref("base.BRL"),
)

def _valid_field_parameter(self, field, name):
if name in (
"xsd_type",
"xsd_required",
"choice",
"xsd_implicit",
"xsd_choice_required",
):
return True
else:
return super()._valid_field_parameter(field, name)
5 changes: 5 additions & 0 deletions l10n_br_mdfe_spec/models/v3_0/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from . import mdfe_tipos_basico_v3_00
from . import mdfe_modal_aereo_v3_00
from . import mdfe_modal_aquaviario_v3_00
from . import mdfe_modal_ferroviario_v3_00
from . import mdfe_modal_rodoviario_v3_00
288 changes: 288 additions & 0 deletions l10n_br_mdfe_spec/models/v3_0/ev_pagto_oper_mdfe_v3_00.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@
# Copyright 2023 Akretion - Raphaël Valyi <raphael.valyi@akretion.com>
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html).
# Generated by https://github.com/akretion/xsdata-odoo
#
import textwrap
from odoo import fields, models

__NAMESPACE__ = "http://www.portalfiscal.inf.br/mdfe"

"Tipo do Componente"
COMP_TPCOMP = [
("01", "Vale Pedágio"),
("02", "Impostos, taxas e contribuições"),
("03", "Despesas (bancárias, meios de pagamento, outras)"),
("99", "Outros"),
]

"Descrição do Evento - “Pagamento Operação MDF-e”"
EVPAGTOOPERMDFE_DESCEVENTO = [
("Pagamento Operação MDF-e", "Pagamento Operação MDF-e"),
("Pagamento Operacao MDF-e", "Pagamento Operacao MDF-e"),
]

"Indicador da Forma de Pagamento"
INFPAG_INDPAG = [
("0", "Pagamento à Vista"),
("1", "Pagamento à Prazo"),
]


class EvPagtoOperMdfe(models.AbstractModel):
"""Schema XML de validação do evento de pagamento da operação de transporte
110116"""

_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.evpagtoopermdfe"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe"

mdfe30_descEvento = fields.Selection(
EVPAGTOOPERMDFE_DESCEVENTO,
string="Descrição do Evento",
xsd_required=True,
help="Descrição do Evento - “Pagamento Operação MDF-e”",
)

mdfe30_nProt = fields.Char(
string="Número do Protocolo de Status do MDF-e",
xsd_required=True,
xsd_type="TProt",
help=(
"Número do Protocolo de Status do MDF-e. \n1 posição tipo de "
"autorizador (9 - SEFAZ Nacional ); \n2 posições ano;\n10 "
"seqüencial no ano."
),
)

mdfe30_infViagens = fields.Many2one(
comodel_name="mdfe.30.infviagens",
string="Informações do total",
xsd_required=True,
help=(
"Informações do total de viagens acobertadas pelo Evento "
"“pagamento do frete”"
),
)

mdfe30_infPag = fields.One2many(
"mdfe.30.evpagtoopermdfe_infpag",
"mdfe30_infPag_evPagtoOperMDFe_id",
string="Informações do Pagamento do Frete",
)


class InfViagens(models.AbstractModel):
"""Informações do total de viagens acobertadas pelo Evento “pagamento do
frete”"""

_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.infviagens"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe.InfViagens"

mdfe30_qtdViagens = fields.Char(
string="Quantidade total",
xsd_required=True,
help=("Quantidade total de viagens realizadas com o pagamento do Frete"),
)

mdfe30_nroViagem = fields.Char(
string="Número de referência da viagem",
xsd_required=True,
help="Número de referência da viagem do MDFe referenciado.",
)


class EvPagtoOperMdfeInfPag(models.AbstractModel):
"Informações do Pagamento do Frete"
_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.evpagtoopermdfe_infpag"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe.InfPag"

mdfe30_infPag_evPagtoOperMDFe_id = fields.Many2one(
comodel_name="mdfe.30.evpagtoopermdfe", xsd_implicit=True, ondelete="cascade"
)
mdfe30_xNome = fields.Char(
string="Razão social ou Nome do responsavel",
help="Razão social ou Nome do responsavel pelo pagamento",
)

mdfe30_CPF = fields.Char(
string="Número do CPF do responsável pelo pgto",
choice="infpag",
xsd_choice_required=True,
xsd_type="TCpf",
help=(
"Número do CPF do responsável pelo pgto\nInformar os zeros não "
"significativos."
),
)

mdfe30_CNPJ = fields.Char(
string="Número do CNPJ do responsável pelo pgto",
choice="infpag",
xsd_choice_required=True,
xsd_type="TCnpjOpc",
help=(
"Número do CNPJ do responsável pelo pgto\nInformar os zeros não "
"significativos."
),
)

mdfe30_idEstrangeiro = fields.Char(
string="Identificador do responsável pelo pgto",
choice="infpag",
xsd_choice_required=True,
help=("Identificador do responsável pelo pgto em caso de ser estrangeiro"),
)

mdfe30_comp = fields.One2many(
"mdfe.30.evpagtoopermdfe_comp",
"mdfe30_Comp_infPag_id",
string="Componentes do Pagamentoi do Frete",
)

mdfe30_vContrato = fields.Monetary(
string="Valor Total do Contrato",
xsd_required=True,
xsd_type="TDec_1302",
currency_field="brl_currency_id",
)

mdfe30_indPag = fields.Selection(
INFPAG_INDPAG,
string="Indicador da Forma",
xsd_required=True,
help=(
"Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à"
" Prazo;"
),
)

mdfe30_vAdiant = fields.Monetary(
string="Valor do Adiantamento",
xsd_type="TDec_1302",
currency_field="brl_currency_id",
help="Valor do Adiantamento (usar apenas em pagamento à Prazo",
)

mdfe30_infPrazo = fields.One2many(
"mdfe.30.evpagtoopermdfe_infprazo",
"mdfe30_infPrazo_infPag_id",
string="Informações do pagamento a prazo",
help=(
"Informações do pagamento a prazo.\nInformar somente se indPag for"
" à Prazo"
),
)

mdfe30_infBanc = fields.Many2one(
comodel_name="mdfe.30.evpagtoopermdfe_infbanc",
string="Informações bancárias",
xsd_required=True,
)


class EvPagtoOperMdfeComp(models.AbstractModel):
"Componentes do Pagamentoi do Frete"
_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.evpagtoopermdfe_comp"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe.InfPag.Comp"

mdfe30_Comp_infPag_id = fields.Many2one(
comodel_name="mdfe.30.evpagtoopermdfe_infpag",
xsd_implicit=True,
ondelete="cascade",
)
mdfe30_tpComp = fields.Selection(
COMP_TPCOMP,
string="Tipo do Componente",
xsd_required=True,
help=(
"Tipo do Componente\n01 - Vale Pedágio; \n02 - Impostos, taxas e "
"contribuições; \n03 - Despesas (bancárias, meios de pagamento, "
"outras)\n; 99 - Outros"
),
)

mdfe30_vComp = fields.Monetary(
string="Valor do componente",
xsd_required=True,
xsd_type="TDec_1302",
currency_field="brl_currency_id",
)

mdfe30_xComp = fields.Char(string="Descrição do componente do tipo Outros")


class EvPagtoOperMdfeInfPrazo(models.AbstractModel):
"""Informações do pagamento a prazo.
Informar somente se indPag for à Prazo"""

_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.evpagtoopermdfe_infprazo"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe.InfPag.InfPrazo"

mdfe30_infPrazo_infPag_id = fields.Many2one(
comodel_name="mdfe.30.evpagtoopermdfe_infpag",
xsd_implicit=True,
ondelete="cascade",
)
mdfe30_nParcela = fields.Char(string="Número da Parcela", xsd_required=True)

mdfe30_dVenc = fields.Date(
string="Data de vencimento da Parcela",
xsd_required=True,
xsd_type="TData",
help="Data de vencimento da Parcela (AAAA-MM-DD)",
)

mdfe30_vParcela = fields.Monetary(
string="Valor da Parcela",
xsd_required=True,
xsd_type="TDec_1302Opc",
currency_field="brl_currency_id",
)


class EvPagtoOperMdfeInfBanc(models.AbstractModel):
"Informações bancárias"
_description = textwrap.dedent(" %s" % (__doc__,))
_name = "mdfe.30.evpagtoopermdfe_infbanc"
_inherit = "spec.mixin.mdfe"
_binding_type = "EvPagtoOperMdfe.InfPag.InfBanc"

mdfe30_codBanco = fields.Char(
string="Número do banco", choice="infbanc", xsd_choice_required=True
)

mdfe30_codAgencia = fields.Char(
string="Número da agência bancária", choice="infbanc", xsd_choice_required=True
)

mdfe30_CNPJIPEF = fields.Char(
string="Número do CNPJ da Instituição",
choice="infbanc",
xsd_choice_required=True,
xsd_type="TCnpjOpc",
help=(
"Número do CNPJ da Instituição de Pagamento Eletrônico do "
"Frete\nInformar os zeros não significativos."
),
)

mdfe30_PIX = fields.Char(
string="Chave PIX",
choice="infbanc",
xsd_choice_required=True,
help=(
"Chave PIX\nInformar a chave PIX para recebimento do frete. \nPode"
" ser email, CPF/ CNPJ (somente numeros), Telefone com a seguinte "
"formatação (+5599999999999) ou a chave aleatória gerada pela "
"instituição."
),
)
Loading

0 comments on commit 8110945

Please sign in to comment.