Skip to content

Commit

Permalink
Merge branch '11.0' into 11.0-NFS-e
Browse files Browse the repository at this point in the history
  • Loading branch information
danimaribeiro committed Dec 19, 2017
2 parents 5393a2c + b5d0d41 commit d0079fb
Show file tree
Hide file tree
Showing 22 changed files with 10,558 additions and 10,752 deletions.
100 changes: 72 additions & 28 deletions br_account/models/account_fiscal_position.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ class AccountFiscalPositionTaxRule(models.Model):

state_ids = fields.Many2many('res.country.state', string=u"Estado Destino",
domain=[('country_id.code', '=', 'BR')])
product_category_ids = fields.Many2many(
'product.category', string=u"Categoria de Produtos")
fiscal_category_ids = fields.Many2many(
'br_account.fiscal.category', string=u"Categorias Fiscais")
tipo_produto = fields.Selection([('product', u'Produto'),
('service', u'Serviço')],
string=u"Tipo produto", default="product")

product_ids = fields.Many2many('product.product', string=u"Produtos")
partner_ids = fields.Many2many('res.partner', string=u"Parceiros")
product_fiscal_classification_ids = fields.Many2many(
'product.fiscal.classification', string=u"Classificação Fiscal",
relation="account_fiscal_position_tax_rule_prod_fiscal_clas_relation")

cst_icms = fields.Selection(CST_ICMS, string=u"CST ICMS")
csosn_icms = fields.Selection(CSOSN_SIMPLES, string=u"CSOSN ICMS")
Expand Down Expand Up @@ -86,15 +87,13 @@ class AccountFiscalPosition(models.Model):

product_serie_id = fields.Many2one(
'br_account.document.serie', string=u'Série Produto',
domain="[('fiscal_document_id', '=', product_document_id),\
('company_id','=',company_id)]")
domain="[('fiscal_document_id', '=', product_document_id)]")
product_document_id = fields.Many2one(
'br_account.fiscal.document', string='Documento Produto')

service_serie_id = fields.Many2one(
'br_account.document.serie', string=u'Série Serviço',
domain="[('fiscal_document_id', '=', service_document_id),\
('company_id','=',company_id)]")
domain="[('fiscal_document_id', '=', service_document_id)]")
service_document_id = fields.Many2one(
'br_account.fiscal.document', string='Documento Serviço')

Expand Down Expand Up @@ -137,28 +136,23 @@ def _filter_rules(self, fpos_id, type_tax, partner, product, state):
if rules:
rules_points = {}
for rule in rules:
rules_points[rule.id] = 0
if rule.tipo_produto == product.fiscal_type:
rules_points[rule.id] += 1
if state in rule.state_ids:
rules_points[rule.id] += 1
if product.categ_id in rule.product_category_ids:
rules_points[rule.id] += 1
if product in rule.product_ids:
rules_points[rule.id] += 1
if len(rule.product_ids) > 0:
rules_points[rule.id] -= 1
if not rule.tipo_produto:
rules_points[rule.id] -= 1
if len(rule.product_category_ids) > 0:
rules_points[rule.id] -= 1
if len(rule.state_ids) > 0:
rules_points[rule.id] -= 1

# Calcula a pontuacao da regra.
# Quanto mais alto, mais adequada está a regra em relacao ao
# faturamento
rules_points[rule.id] = self._calculate_points(
rule, product, state)

# Calcula o maior valor para os resultados obtidos
greater_rule = max([(v, k) for k, v in rules_points.items()])
if greater_rule[0] <= 0:
# Se o valor da regra for menor do que 0, a regra é descartada.
if greater_rule[0] < 0:
return {}

# Procura pela regra associada ao id -> (greater_rule[1])
rules = [rules.browse(greater_rule[1])]

# Retorna dicionario com o valores dos campos de acordo com a regra
return {
('%s_rule_id' % type_tax): rules[0],
'cfop_id': rules[0].cfop_id,
Expand Down Expand Up @@ -189,7 +183,7 @@ def _filter_rules(self, fpos_id, type_tax, partner, product, state):
'cofins_cst': rules[0].cst_cofins,
}
else:
return {}
return{}

@api.model
def map_tax_extra_values(self, company, product, partner):
Expand All @@ -202,5 +196,55 @@ def map_tax_extra_values(self, company, product, partner):
vals = self._filter_rules(
self.id, tax, partner, product, to_state)
res.update({k: v for k, v in vals.items() if v})

return res

def _calculate_points(self, rule, product, state):
rule_points = 0

# Verifica o tipo do produto. Se sim, avança para calculo da pontuação
# Se não, retorna o valor -1 (a regra será descartada)
if rule.tipo_produto == product.fiscal_type:

# Verifica a categoria fiscal. Se igual, adiciona 2 pontos
# Se não, subtrai 2 pontos
fiscal_cat_len = len(rule.fiscal_category_ids)
if product.fiscal_category_id in rule.fiscal_category_ids:
rule_points += 2
# Mesmo contendo a categoria fiscal do produto na regra,
# será descontado 1 ponto se houver mais de uma
# categoria associada à regra.
if fiscal_cat_len > 1:
rule_points -= 1
elif fiscal_cat_len > 0:
rule_points -= 2

# Verifica a classificacao fiscal. Se igual, adiciona 2 pontos
# Se não, subtrai 2 pontos
fiscal_class_len = len(rule.product_fiscal_classification_ids)
if product.fiscal_classification_id in\
rule.product_fiscal_classification_ids:
rule_points += 2
# Mesmo contendo a classificacao fiscal do produto na regra,
# será descontado 1 ponto se houver mais de uma
# categoria associada à regra.
if fiscal_class_len > 1:
rule_points -= 1
elif fiscal_class_len > 0:
rule_points -= 2

# Verifica o estado. Se igual, adiciona 2 pontos
# Se não, subtrai 2 pontos
state_len = len(rule.state_ids)
if state in rule.state_ids:
rule_points = 2
# Mesmo contendo o estado do produto na regra,
# será descontado 1 ponto se houver mais de uma
# categoria associada à regra.
if state_len > 1:
rule_points -= 1
elif state_len > 0:
rule_points -= 2
else:
rule_points = -1

return rule_points
7 changes: 7 additions & 0 deletions br_account/models/br_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,3 +329,10 @@ class BrAccountFiscalObservation(models.Model):
('observacao', 'Observação')], string=u"Tipo")
document_id = fields.Many2one(
'br_account.fiscal.document', string="Documento Fiscal")


class BrAccountCategoriaFiscal(models.Model):
_name = 'br_account.fiscal.category'
_description = 'Categoria Fiscal'

name = fields.Char('Descrição', required=True)
3 changes: 3 additions & 0 deletions br_account/models/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class ProductTemplate(models.Model):
help=u"Código Especificador da Substituição Tributária")
fiscal_observation_ids = fields.Many2many(
'br_account.fiscal.observation', string=u"Mensagens Doc. Eletrônico")
fiscal_category_id = fields.Many2one(
'br_account.fiscal.category',
string='Categoria Fiscal')

@api.onchange('type')
def onchange_product_type(self):
Expand Down
3 changes: 3 additions & 0 deletions br_account/security/ir.model.access.csv
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"access_br_account_import_declaration","access_br_account_import_declaration","model_br_account_import_declaration","account.group_account_manager",1,1,1,1
"access_br_account_document_related","access_br_account_document_related","model_br_account_document_related","account.group_account_manager",1,1,1,1
"access_br_account_fiscal_observation","access_br_account_fiscal_observation","model_br_account_fiscal_observation","account.group_account_manager",1,1,1,1
"access_br_account_fiscal_category","access_br_account_fiscal_category","model_br_account_fiscal_category","account.group_account_manager",1,1,1,1
"br_account_fiscal_document_user","br_account.fiscal.document","model_br_account_fiscal_document","account.group_account_user",1,0,0,0
"br_account_document_serie_user","br_account.document.serie","model_br_account_document_serie","account.group_account_user",1,0,0,0
"br_account_cnae_user","br_account.cnae","model_br_account_cnae","account.group_account_user",1,0,0,0
Expand All @@ -21,6 +22,7 @@
"access_br_account_import_declaration_user","access_br_account_import_declaration","model_br_account_import_declaration","account.group_account_user",1,0,0,0
"access_br_account_document_related_user","access_br_account_document_related","model_br_account_document_related","account.group_account_user",1,0,0,0
"access_br_account_fiscal_observation_user","access_br_account_fiscal_observation","model_br_account_fiscal_observation","account.group_account_user",1,0,0,0
"access_br_account_fiscal_category_user","access_br_account_fiscal_category","model_br_account_fiscal_category","account.group_account_user",1,0,0,0
"br_account_fiscal_document_invoice","br_account.fiscal.document","model_br_account_fiscal_document","account.group_account_invoice",1,0,0,0
"br_account_document_serie_invoice","br_account.document.serie","model_br_account_document_serie","account.group_account_invoice",1,0,0,0
"br_account_cnae_invoice","br_account.cnae","model_br_account_cnae","account.group_account_invoice",1,0,0,0
Expand All @@ -32,3 +34,4 @@
"access_br_account_import_declaration_invoice","access_br_account_import_declaration","model_br_account_import_declaration","account.group_account_invoice",1,0,0,0
"access_br_account_document_related_user_invoice","access_br_account_document_related","model_br_account_document_related","account.group_account_invoice",1,0,0,0
"access_br_account_fiscal_observation_invoice","access_br_account_fiscal_observation","model_br_account_fiscal_observation","account.group_account_invoice",1,0,0,0
"access_br_account_fiscal_category_invoice","access_br_account_fiscal_category","model_br_account_fiscal_category","account.group_account_invoice",1,0,0,0
11 changes: 4 additions & 7 deletions br_account/views/account_fiscal_position_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,11 @@
<group string="Estados">
<field name="state_ids" widget="many2many_tags" nolabel="1"/>
</group>
<group string="Categorias de Produto">
<field name="product_category_ids" widget="many2many_tags" nolabel="1"/>
<group string="Categorias Fiscais">
<field name="fiscal_category_ids" widget="many2many_tags" nolabel="1"/>
</group>
<group string="Produtos">
<field name="product_ids" widget="many2many_tags" nolabel="1"/>
</group>
<group string="Parceiros">
<field name="partner_ids" widget="many2many_tags" nolabel="1"/>
<group string="Classificação Fiscal">
<field name="product_fiscal_classification_ids" widget="many2many_tags" nolabel="1"/>
</group>
</form>
</field>
Expand Down
3 changes: 2 additions & 1 deletion br_account/views/account_invoice_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
</xpath>
<field name="fiscal_position_id" position="replace"></field>
<field name="payment_term_id" position="after">
<field name="fiscal_position_id" domain="['|', ('fiscal_type', '=', None), ('fiscal_type', '=', 'saida')]" /></field>
<field name="fiscal_position_id" domain="['|', ('fiscal_type', '=', None), ('fiscal_type', '=', 'saida')]" />
</field>
<field name="partner_bank_id" position="after">
<field name="product_document_id" />
<field name="product_serie_id" />
Expand Down
112 changes: 97 additions & 15 deletions br_account/views/br_account_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,30 @@
</field>
</record>

<record id="view_br_account_fiscal_category_form" model="ir.ui.view">
<field name="name">br_account.fiscal.category.form</field>
<field name="model">br_account.fiscal.category</field>
<field name="arch" type="xml">
<form string="Categoria Fiscal">
<sheet>
<group>
<field name="name"/>
</group>
</sheet>
</form>
</field>
</record>

<record id="view_br_account_fiscal_category_tree" model="ir.ui.view">
<field name="name">br_account.fiscal.category.tree</field>
<field name="model">br_account.fiscal.category</field>
<field name="arch" type="xml">
<tree string="Categoria Fiscal">
<field name="name" />
</tree>
</field>
</record>

<record id="br_account_cfop_action" model="ir.actions.act_window">
<field name="name">CFOP</field>
<field name="type">ir.actions.act_window</field>
Expand Down Expand Up @@ -353,21 +377,79 @@
<field name="view_id" ref="view_br_account_service_type_structure"/>
</record>

<menuitem id="menu_br_account_fiscal_manager" name="Cadastros" parent="menu_br_account" sequence="0"/>

<menuitem id="br_account_cfop_menu" name="CFOP" parent="br_account.menu_br_account_fiscal_manager" action="br_account_cfop_action" sequence="10" />
<menuitem id="br_account_cfop_structure_menu" name="Estrutura do CFOP" parent="br_account.menu_br_account_fiscal_manager" action="br_account_cfop_structure_action" sequence="20" />

<menuitem id="menu_action_cnae_form" name="CNAE" parent="menu_br_account_fiscal_manager" action="action_br_account_cnae_form" sequence="30" />

<menuitem id="menu_action_cnae_structure" name="Estrutura do CNAE" parent="menu_br_account_fiscal_manager" action="action_br_account_cnae_structure" sequence="40" />

<menuitem id="menu_action_service_type_form" name="Tipo de Serviço" parent="menu_br_account_fiscal_manager" action="action_br_account_service_type_form" sequence="50" />

<menuitem id="menu_action_service_type_structure" name="Estrutura de Tipo de Serviço" parent="menu_br_account_fiscal_manager" action="action_br_account_service_type_structure" sequence="60" />

<menuitem id="menu_action_br_account_fiscal_document_form" name="Documento Fiscal" parent="menu_br_account" action="action_br_account_fiscal_document_form"/>
<record id="action_br_account_fiscal_category" model="ir.actions.act_window">
<field name="name">Fiscal Category</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">br_account.fiscal.category</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_br_account_fiscal_category_tree"/>
</record>

<menuitem id="menu_action_document_serie_form" name="Serie de Documento Fiscal" parent="menu_br_account" action="action_br_account_document_serie_form"/>
<menuitem
id="menu_br_account_fiscal_manager"
name="Cadastros"
parent="menu_br_account"
sequence="0"/>

<menuitem
id="br_account_cfop_menu"
name="CFOP"
parent="br_account.menu_br_account_fiscal_manager"
action="br_account_cfop_action"
sequence="10" />

<menuitem
id="br_account_cfop_structure_menu"
name="Estrutura do CFOP"
parent="br_account.menu_br_account_fiscal_manager"
action="br_account_cfop_structure_action"
sequence="20" />

<menuitem
id="menu_action_cnae_form"
name="CNAE"
parent="menu_br_account_fiscal_manager"
action="action_br_account_cnae_form"
sequence="30" />

<menuitem
id="menu_action_cnae_structure"
name="Estrutura do CNAE"
parent="menu_br_account_fiscal_manager"
action="action_br_account_cnae_structure"
sequence="40" />

<menuitem
id="menu_action_service_type_form"
name="Tipo de Serviço"
parent="menu_br_account_fiscal_manager"
action="action_br_account_service_type_form"
sequence="50" />

<menuitem
id="menu_action_service_type_structure"
name="Estrutura de Tipo de Serviço"
parent="menu_br_account_fiscal_manager"
action="action_br_account_service_type_structure"
sequence="60" />

<menuitem
id="menu_action_br_account_fiscal_document_form"
name="Documento Fiscal"
parent="menu_br_account"
action="action_br_account_fiscal_document_form"/>

<menuitem
id="menu_action_document_serie_form"
name="Serie de Documento Fiscal"
parent="menu_br_account"
action="action_br_account_document_serie_form"/>

<menuitem
id="menu_action_fiscal_category_form"
name="Categoria Fiscal"
parent="br_account.menu_br_account_fiscal_manager"
action="action_br_account_fiscal_category"/>

</odoo>
1 change: 1 addition & 0 deletions br_account/views/product_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
</field>
<group name="accounting" position="inside">
<group>
<field name="fiscal_category_id" />
<field name="fiscal_type" />
<field name="origin" attrs="{'required': [('fiscal_type', '=', 'product')], 'invisible': [('fiscal_type', '=', 'service')]}" />
<field name="fiscal_classification_id" attrs="{'required': [('fiscal_type', '=', 'product')], 'invisible': [('fiscal_type', '=', 'service')]}" />
Expand Down
26 changes: 25 additions & 1 deletion br_account_einvoice/models/account_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,30 @@ def action_view_edocs(self):
vals = self.env['ir.actions.act_window'].browse(act_id).read()[0]
return vals

def _return_pdf_invoice(self, doc):
return None

def action_preview_danfe(self):

docs = self.env['invoice.eletronic'].search(
[('invoice_id', '=', self.id)])

if not docs:
raise UserError(u'Não existe um E-Doc relacionado à esta fatura')

for doc in docs:
if doc.state != 'done':
raise UserError('Nota Fiscal na fila de envio. Aguarde!')

report = self._return_pdf_invoice(docs[0])
if not report:
raise UserError(
'Nenhum relatório implementado para este modelo de documento')
if not isinstance(report, str):
return report
action = self.env.ref(report).report_action(docs)
return action

def _prepare_edoc_item_vals(self, line):
vals = {
'name': line.name,
Expand Down Expand Up @@ -146,7 +170,7 @@ def _prepare_edoc_vals(self, invoice, inv_lines):
num_controle = int(''.join([str(SystemRandom().randrange(9))
for i in range(8)]))
vals = {
'name': invoice.name,
'name': invoice.number,
'invoice_id': invoice.id,
'code': invoice.number,
'company_id': invoice.company_id.id,
Expand Down

0 comments on commit d0079fb

Please sign in to comment.