odoo-addon-l10n-br-fiscal 16.0.14.0.5.1__py3-none-any.whl → 16.0.14.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of odoo-addon-l10n-br-fiscal might be problematic. Click here for more details.

@@ -11,7 +11,7 @@ Módulo fiscal brasileiro
11
11
  !! This file is generated by oca-gen-addon-readme !!
12
12
  !! changes will be overwritten. !!
13
13
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
- !! source digest: sha256:6ff86ea72740472f11f64c87a0aa0cdfc6ba73ecac825df6b354e43817900fc5
14
+ !! source digest: sha256:2e72394e7edc4b469e503409c49a2cca8d122192f24dda5617dca3242aeb3f25
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
@@ -10,7 +10,7 @@
10
10
  "maintainers": ["renatonlima", "rvalyi"],
11
11
  "website": "https://github.com/OCA/l10n-brazil",
12
12
  "development_status": "Production/Stable",
13
- "version": "16.0.14.0.5",
13
+ "version": "16.0.14.2.0",
14
14
  "depends": [
15
15
  "product",
16
16
  "uom_alias",
@@ -36,10 +36,6 @@
36
36
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
37
37
  </record>
38
38
 
39
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
40
- <value eval="[ref('demo_nfe_line_same_state_1-1')]" />
41
- </function>
42
-
43
39
  <record id="demo_nfe_line_same_state_1-1" model="l10n_br_fiscal.document.line">
44
40
  </record>
45
41
 
@@ -58,10 +54,6 @@
58
54
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
59
55
  </record>
60
56
 
61
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
62
- <value eval="[ref('demo_nfe_line_same_state_1-2')]" />
63
- </function>
64
-
65
57
  <record id="demo_nfe_line_same_state_1-2" model="l10n_br_fiscal.document.line">
66
58
  </record>
67
59
 
@@ -95,10 +87,6 @@
95
87
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
96
88
  </record>
97
89
 
98
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
99
- <value eval="[ref('demo_nfe_line_other_state_1-3')]" />
100
- </function>
101
-
102
90
  <record id="demo_nfe_line_other_state_1-3" model="l10n_br_fiscal.document.line">
103
91
  </record>
104
92
 
@@ -117,10 +105,6 @@
117
105
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
118
106
  </record>
119
107
 
120
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
121
- <value eval="[ref('demo_nfe_line_other_state_2-3')]" />
122
- </function>
123
-
124
108
  <record id="demo_nfe_line_other_state_2-3" model="l10n_br_fiscal.document.line">
125
109
  </record>
126
110
 
@@ -140,10 +124,6 @@
140
124
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
141
125
  </record>
142
126
 
143
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
144
- <value eval="[ref('demo_nfe_line_other_state_3-3')]" />
145
- </function>
146
-
147
127
  <record id="demo_nfe_line_other_state_3-3" model="l10n_br_fiscal.document.line">
148
128
  </record>
149
129
 
@@ -179,10 +159,6 @@
179
159
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
180
160
  </record>
181
161
 
182
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
183
- <value eval="[ref('demo_nfe_line_export_3-1')]" />
184
- </function>
185
-
186
162
  <record id="demo_nfe_line_export_3-1" model="l10n_br_fiscal.document.line">
187
163
  </record>
188
164
 
@@ -201,10 +177,6 @@
201
177
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
202
178
  </record>
203
179
 
204
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
205
- <value eval="[ref('demo_nfe_line_export_3-2')]" />
206
- </function>
207
-
208
180
  <record id="demo_nfe_line_export_3-2" model="l10n_br_fiscal.document.line">
209
181
  </record>
210
182
 
@@ -249,10 +221,6 @@
249
221
  <field name="manual_additional_data">manual comment test</field>
250
222
  </record>
251
223
 
252
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
253
- <value eval="[ref('demo_nfe_line_nao_contribuinte_4-1')]" />
254
- </function>
255
-
256
224
  <record
257
225
  id="demo_nfe_line_nao_contribuinte_4-1"
258
226
  model="l10n_br_fiscal.document.line"
@@ -280,10 +248,6 @@
280
248
  />
281
249
  </record>
282
250
 
283
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
284
- <value eval="[ref('demo_nfe_line_nao_contribuinte_4-2')]" />
285
- </function>
286
-
287
251
  <record
288
252
  id="demo_nfe_line_nao_contribuinte_4-2"
289
253
  model="l10n_br_fiscal.document.line"
@@ -328,10 +292,6 @@
328
292
  <field name="manual_additional_data">manual comment test</field>
329
293
  </record>
330
294
 
331
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
332
- <value eval="[ref('demo_nfe_tax_benefit_4-1')]" />
333
- </function>
334
-
335
295
  <record id="demo_nfe_tax_benefit_4-1" model="l10n_br_fiscal.document.line">
336
296
  </record>
337
297
 
@@ -368,10 +328,6 @@
368
328
  />
369
329
  </record>
370
330
 
371
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
372
- <value eval="[ref('demo_nfe_nao_contribuinte_pf_1-2')]" />
373
- </function>
374
-
375
331
  <record id="demo_nfe_nao_contribuinte_pf_1-2" model="l10n_br_fiscal.document.line">
376
332
  </record>
377
333
 
@@ -393,10 +349,6 @@
393
349
  />
394
350
  </record>
395
351
 
396
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
397
- <value eval="[ref('demo_nfe_nao_contribuinte_pf_2-2')]" />
398
- </function>
399
-
400
352
  <record id="demo_nfe_nao_contribuinte_pf_2-2" model="l10n_br_fiscal.document.line">
401
353
  </record>
402
354
 
@@ -430,10 +382,6 @@
430
382
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
431
383
  </record>
432
384
 
433
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
434
- <value eval="[ref('demo_nfe_line_sn_same_state_5-1')]" />
435
- </function>
436
-
437
385
  <record id="demo_nfe_line_sn_same_state_5-1" model="l10n_br_fiscal.document.line">
438
386
  </record>
439
387
 
@@ -452,10 +400,6 @@
452
400
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
453
401
  </record>
454
402
 
455
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
456
- <value eval="[ref('demo_nfe_line_sn_same_state_5-2')]" />
457
- </function>
458
-
459
403
  <record id="demo_nfe_line_sn_same_state_5-2" model="l10n_br_fiscal.document.line">
460
404
  </record>
461
405
 
@@ -489,10 +433,6 @@
489
433
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
490
434
  </record>
491
435
 
492
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
493
- <value eval="[ref('demo_nfe_line_sn_other_state_6-1')]" />
494
- </function>
495
-
496
436
  <record id="demo_nfe_line_sn_other_state_6-1" model="l10n_br_fiscal.document.line">
497
437
  </record>
498
438
 
@@ -511,10 +451,6 @@
511
451
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
512
452
  </record>
513
453
 
514
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
515
- <value eval="[ref('demo_nfe_line_sn_other_state_6-2')]" />
516
- </function>
517
-
518
454
  <record id="demo_nfe_line_sn_other_state_6-2" model="l10n_br_fiscal.document.line">
519
455
  </record>
520
456
 
@@ -548,10 +484,6 @@
548
484
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
549
485
  </record>
550
486
 
551
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
552
- <value eval="[ref('demo_nfe_line_sn_export_7-1')]" />
553
- </function>
554
-
555
487
  <record id="demo_nfe_line_sn_export_7-1" model="l10n_br_fiscal.document.line">
556
488
  </record>
557
489
 
@@ -570,10 +502,6 @@
570
502
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
571
503
  </record>
572
504
 
573
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
574
- <value eval="[ref('demo_nfe_line_sn_export_7-2')]" />
575
- </function>
576
-
577
505
  <record id="demo_nfe_line_sn_export_7-2" model="l10n_br_fiscal.document.line">
578
506
  </record>
579
507
 
@@ -610,10 +538,6 @@
610
538
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
611
539
  </record>
612
540
 
613
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
614
- <value eval="[ref('demo_nfe_line_sn_nao_contribuinte_7-1')]" />
615
- </function>
616
-
617
541
  <record
618
542
  id="demo_nfe_line_sn_nao_contribuinte_7-1"
619
543
  model="l10n_br_fiscal.document.line"
@@ -638,10 +562,6 @@
638
562
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_venda" />
639
563
  </record>
640
564
 
641
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
642
- <value eval="[ref('demo_nfe_line_sn_nao_contribuinte_7-2')]" />
643
- </function>
644
-
645
565
  <record
646
566
  id="demo_nfe_line_sn_nao_contribuinte_7-2"
647
567
  model="l10n_br_fiscal.document.line"
@@ -689,10 +609,6 @@
689
609
  <field name="cfop_id" ref="l10n_br_fiscal.cfop_5922" />
690
610
  </record>
691
611
 
692
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
693
- <value eval="[ref('demo_nfe_line_so_simples_faturamento_7-1')]" />
694
- </function>
695
-
696
612
  <record
697
613
  id="demo_nfe_line_so_simples_faturamento_7-1"
698
614
  model="l10n_br_fiscal.document.line"
@@ -733,10 +649,6 @@
733
649
  />
734
650
  </record>
735
651
 
736
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
737
- <value eval="[ref('demo_nfe_purchase_line_same_state_1-1')]" />
738
- </function>
739
-
740
652
  <record
741
653
  id="demo_nfe_purchase_line_same_state_1-1"
742
654
  model="l10n_br_fiscal.document.line"
@@ -23,8 +23,4 @@
23
23
  <field name="fiscal_operation_line_id" ref="l10n_br_fiscal.fo_venda_servico" />
24
24
  </record>
25
25
 
26
- <function model="l10n_br_fiscal.document.line" name="_onchange_product_id_fiscal">
27
- <value eval="[ref('l10n_br_fiscal.demo_nfse_line_same_state_1-1')]" />
28
- </function>
29
-
30
26
  </odoo>
@@ -8109,6 +8109,11 @@ msgstr ""
8109
8109
  msgid "Taxes Settings"
8110
8110
  msgstr ""
8111
8111
 
8112
+ #. module: l10n_br_fiscal
8113
+ #: model:ir.model.fields,help:l10n_br_fiscal.field_l10n_br_fiscal_document_line__product_id
8114
+ msgid "Technical Field."
8115
+ msgstr ""
8116
+
8112
8117
  #. module: l10n_br_fiscal
8113
8118
  #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_company__technical_support_id
8114
8119
  msgid "Technical Support"
@@ -1,7 +1,7 @@
1
1
  # Copyright (C) 2013 Renato Lima - Akretion
2
2
  # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
3
3
 
4
- from odoo import fields, models
4
+ from odoo import api, fields, models
5
5
 
6
6
 
7
7
  class DocumentLine(models.Model):
@@ -30,7 +30,12 @@ class DocumentLine(models.Model):
30
30
  ondelete="cascade",
31
31
  )
32
32
 
33
- name = fields.Char()
33
+ name = fields.Char(
34
+ compute="_compute_name",
35
+ store=True,
36
+ precompute=True,
37
+ readonly=False,
38
+ )
34
39
 
35
40
  company_id = fields.Many2one(
36
41
  comodel_name="res.company",
@@ -50,6 +55,15 @@ class DocumentLine(models.Model):
50
55
  precompute=True,
51
56
  )
52
57
 
58
+ uom_id = fields.Many2one(
59
+ comodel_name="uom.uom",
60
+ string="UOM",
61
+ compute="_compute_uom_id",
62
+ store=True,
63
+ readonly=False,
64
+ precompute=True,
65
+ )
66
+
53
67
  quantity = fields.Float(default=1.0)
54
68
 
55
69
  ind_final = fields.Selection(related="document_id.ind_final")
@@ -70,6 +84,22 @@ class DocumentLine(models.Model):
70
84
 
71
85
  additional_data = fields.Text()
72
86
 
87
+ @api.depends("product_id")
88
+ def _compute_name(self):
89
+ for line in self:
90
+ if line.product_id:
91
+ line.name = line.product_id.display_name
92
+ else:
93
+ line.name = False
94
+
95
+ @api.depends("product_id")
96
+ def _compute_uom_id(self):
97
+ for line in self:
98
+ if line.fiscal_operation_type == "in":
99
+ line.uom_id = line.product_id.uom_po_id
100
+ else:
101
+ line.uom_id = line.product_id.uom_id
102
+
73
103
  def __document_comment_vals(self):
74
104
  self.ensure_one()
75
105
  return {
@@ -80,7 +110,7 @@ class DocumentLine(models.Model):
80
110
  }
81
111
 
82
112
  def _document_comment(self):
83
- for d in self:
84
- d.additional_data = d.comment_ids.compute_message(
85
- d.__document_comment_vals(), d.manual_additional_data
113
+ for line in self:
114
+ line.additional_data = line.comment_ids.compute_message(
115
+ line.__document_comment_vals(), line.manual_additional_data
86
116
  )
@@ -36,7 +36,6 @@ from ..constants.icms import (
36
36
  ICMS_BASE_TYPE,
37
37
  ICMS_BASE_TYPE_DEFAULT,
38
38
  ICMS_ORIGIN,
39
- ICMS_ORIGIN_DEFAULT,
40
39
  ICMS_ST_BASE_TYPE,
41
40
  ICMS_ST_BASE_TYPE_DEFAULT,
42
41
  )
@@ -135,16 +134,31 @@ class FiscalDocumentLineMixin(models.AbstractModel):
135
134
 
136
135
  partner_company_type = fields.Selection(related="partner_id.company_type")
137
136
 
138
- uom_id = fields.Many2one(comodel_name="uom.uom", string="UOM")
137
+ uom_id = fields.Many2one(
138
+ comodel_name="uom.uom",
139
+ string="UOM",
140
+ )
139
141
 
140
142
  quantity = fields.Float(
141
143
  digits="Product Unit of Measure",
142
144
  )
143
145
 
144
- fiscal_type = fields.Selection(selection=PRODUCT_FISCAL_TYPE)
146
+ fiscal_type = fields.Selection(
147
+ selection=PRODUCT_FISCAL_TYPE,
148
+ compute="_compute_product_fiscal_fields",
149
+ store=True,
150
+ readonly=False,
151
+ precompute=True,
152
+ )
145
153
 
146
154
  ncm_id = fields.Many2one(
147
- comodel_name="l10n_br_fiscal.ncm", index=True, string="NCM"
155
+ comodel_name="l10n_br_fiscal.ncm",
156
+ index=True,
157
+ string="NCM",
158
+ compute="_compute_product_fiscal_fields",
159
+ store=True,
160
+ readonly=False,
161
+ precompute=True,
148
162
  )
149
163
 
150
164
  nbm_id = fields.Many2one(
@@ -152,6 +166,10 @@ class FiscalDocumentLineMixin(models.AbstractModel):
152
166
  index=True,
153
167
  string="NBM",
154
168
  domain="[('ncm_ids', '=', ncm_id)]",
169
+ compute="_compute_product_fiscal_fields",
170
+ store=True,
171
+ readonly=False,
172
+ precompute=True,
155
173
  )
156
174
 
157
175
  cest_id = fields.Many2one(
@@ -159,10 +177,20 @@ class FiscalDocumentLineMixin(models.AbstractModel):
159
177
  index=True,
160
178
  string="CEST",
161
179
  domain="[('ncm_ids', '=', ncm_id)]",
180
+ compute="_compute_product_fiscal_fields",
181
+ store=True,
182
+ readonly=False,
183
+ precompute=True,
162
184
  )
163
185
 
164
186
  nbs_id = fields.Many2one(
165
- comodel_name="l10n_br_fiscal.nbs", index=True, string="NBS"
187
+ comodel_name="l10n_br_fiscal.nbs",
188
+ index=True,
189
+ string="NBS",
190
+ compute="_compute_product_fiscal_fields",
191
+ store=True,
192
+ readonly=False,
193
+ precompute=True,
166
194
  )
167
195
 
168
196
  fiscal_operation_id = fields.Many2one(
@@ -296,7 +324,12 @@ class FiscalDocumentLineMixin(models.AbstractModel):
296
324
  amount_tax_withholding = fields.Monetary(string="Tax Withholding")
297
325
 
298
326
  fiscal_genre_id = fields.Many2one(
299
- comodel_name="l10n_br_fiscal.product.genre", string="Fiscal Product Genre"
327
+ comodel_name="l10n_br_fiscal.product.genre",
328
+ string="Fiscal Product Genre",
329
+ compute="_compute_product_fiscal_fields",
330
+ store=True,
331
+ readonly=False,
332
+ precompute=True,
300
333
  )
301
334
 
302
335
  fiscal_genre_code = fields.Char(
@@ -307,10 +340,19 @@ class FiscalDocumentLineMixin(models.AbstractModel):
307
340
  comodel_name="l10n_br_fiscal.service.type",
308
341
  string="Service Type LC 166",
309
342
  domain="[('internal_type', '=', 'normal')]",
343
+ compute="_compute_product_fiscal_fields",
344
+ store=True,
345
+ readonly=False,
346
+ precompute=True,
310
347
  )
311
348
 
312
349
  city_taxation_code_id = fields.Many2one(
313
- comodel_name="l10n_br_fiscal.city.taxation.code", string="City Taxation Code"
350
+ comodel_name="l10n_br_fiscal.city.taxation.code",
351
+ string="City Taxation Code",
352
+ compute="_compute_product_fiscal_fields",
353
+ store=True,
354
+ readonly=False,
355
+ precompute=True,
314
356
  )
315
357
 
316
358
  partner_order = fields.Char(string="Partner Order (xPed)", size=15)
@@ -331,6 +373,10 @@ class FiscalDocumentLineMixin(models.AbstractModel):
331
373
  issqn_fg_city_id = fields.Many2one(
332
374
  comodel_name="res.city",
333
375
  string="ISSQN City",
376
+ compute="_compute_product_fiscal_fields",
377
+ store=True,
378
+ readonly=False,
379
+ precompute=True,
334
380
  )
335
381
 
336
382
  # vDeducao
@@ -487,7 +533,12 @@ class FiscalDocumentLineMixin(models.AbstractModel):
487
533
  )
488
534
 
489
535
  icms_origin = fields.Selection(
490
- selection=ICMS_ORIGIN, string="ICMS Origin", default=ICMS_ORIGIN_DEFAULT
536
+ selection=ICMS_ORIGIN,
537
+ string="ICMS Origin",
538
+ compute="_compute_product_fiscal_fields",
539
+ store=True,
540
+ readonly=False,
541
+ precompute=True,
491
542
  )
492
543
 
493
544
  # vBC - Valor da base de cálculo do ICMS
@@ -7,8 +7,12 @@ from lxml import etree
7
7
 
8
8
  from odoo import Command, api, models
9
9
 
10
- from ..constants.fiscal import CFOP_DESTINATION_EXPORT, FISCAL_IN
11
- from ..constants.icms import ICMS_BASE_TYPE_DEFAULT, ICMS_ST_BASE_TYPE_DEFAULT
10
+ from ..constants.fiscal import CFOP_DESTINATION_EXPORT, FISCAL_IN, TAX_DOMAIN_ICMS
11
+ from ..constants.icms import (
12
+ ICMS_BASE_TYPE_DEFAULT,
13
+ ICMS_ORIGIN_DEFAULT,
14
+ ICMS_ST_BASE_TYPE_DEFAULT,
15
+ )
12
16
 
13
17
  FISCAL_TAX_ID_FIELDS = [
14
18
  "cofins_tax_id",
@@ -474,48 +478,50 @@ class FiscalDocumentLineMixinMethods(models.AbstractModel):
474
478
  self.ensure_one()
475
479
  return self.partner_id
476
480
 
477
- @api.onchange("product_id")
478
- def _onchange_product_id_fiscal(self):
479
- if not self.fiscal_operation_id:
481
+ @api.depends("product_id")
482
+ def _compute_product_fiscal_fields(self):
483
+ if self._context.get("skip_compute_product_fiscal_fields"):
480
484
  return
481
- if self.product_id:
482
- self.name = self.product_id.display_name
483
- self.fiscal_type = self.product_id.fiscal_type
484
- self.uom_id = self.product_id.uom_id
485
- self.ncm_id = self.product_id.ncm_id
486
- self.nbm_id = self.product_id.nbm_id
487
- self.tax_icms_or_issqn = self.product_id.tax_icms_or_issqn
488
- self.icms_origin = self.product_id.icms_origin
489
- self.cest_id = self.product_id.cest_id
490
- self.nbs_id = self.product_id.nbs_id
491
- self.fiscal_genre_id = self.product_id.fiscal_genre_id
492
- self.service_type_id = self.product_id.service_type_id
493
- self.uot_id = self.product_id.uot_id or self.product_id.uom_id
494
- if self.product_id.city_taxation_code_ids:
495
- company_city_id = self.company_id.city_id
496
- city_id = self.product_id.city_taxation_code_ids.filtered(
497
- lambda r: r.city_id == company_city_id
485
+ for line in self:
486
+ if not line.product_id:
487
+ # reset to default values:
488
+ line.fiscal_type = False
489
+ line.ncm_id = False
490
+ line.nbm_id = False
491
+ line.tax_icms_or_issqn = TAX_DOMAIN_ICMS
492
+ line.icms_origin = ICMS_ORIGIN_DEFAULT
493
+ line.cest_id = False
494
+ line.nbs_id = False
495
+ line.fiscal_genre_id = False
496
+ line.service_type_id = False
497
+ line.city_taxation_code_id = False
498
+ line.issqn_fg_city_id = False
499
+ continue
500
+
501
+ product = line.product_id
502
+ line.fiscal_type = product.fiscal_type
503
+ line.ncm_id = product.ncm_id
504
+ line.nbm_id = product.nbm_id
505
+ line.tax_icms_or_issqn = product.tax_icms_or_issqn
506
+ line.icms_origin = product.icms_origin
507
+ line.cest_id = product.cest_id
508
+ line.nbs_id = product.nbs_id
509
+ line.fiscal_genre_id = product.fiscal_genre_id
510
+ line.service_type_id = product.service_type_id
511
+ if product.city_taxation_code_ids and line.company_id:
512
+ city = product.city_taxation_code_ids.filtered(
513
+ lambda r, current_line=line: r.city_id
514
+ == current_line.company_id.city_id
498
515
  )
499
- if city_id:
500
- self.city_taxation_code_id = city_id
501
- self.issqn_fg_city_id = company_city_id
502
- else:
503
- self.name = False
504
- self.fiscal_type = False
505
- self.uom_id = False
506
- self.ncm_id = False
507
- self.nbm_id = False
508
- self.tax_icms_or_issqn = False
509
- self.icms_origin = False
510
- self.cest_id = False
511
- self.nbs_id = False
512
- self.fiscal_genre_id = False
513
- self.service_type_id = False
514
- self.city_taxation_code_id = False
515
- self.uot_id = False
516
-
517
- self._compute_price_unit_fiscal()
518
- self._onchange_fiscal_operation_id()
516
+ if city:
517
+ line.city_taxation_code_id = city
518
+ line.issqn_fg_city_id = line.company_id.city_id
519
+ else:
520
+ line.city_taxation_code_id = False
521
+ line.issqn_fg_city_id = False
522
+ else:
523
+ line.city_taxation_code_id = False
524
+ line.issqn_fg_city_id = False
519
525
 
520
526
  def _prepare_fields_issqn(self, tax_dict):
521
527
  self.ensure_one()
@@ -771,11 +777,18 @@ class FiscalDocumentLineMixinMethods(models.AbstractModel):
771
777
  )
772
778
  line.fiscal_tax_ids = fiscal_taxes + taxes
773
779
 
774
- @api.depends("uom_id")
780
+ @api.depends("product_id", "uom_id")
775
781
  def _compute_uot_id(self):
776
782
  for line in self:
777
- if not line.uot_id:
778
- line.uot_id = line.uom_id
783
+ if line.uom_id:
784
+ line.uot_id = line.uom_id.id
785
+ elif line.product_id:
786
+ if line.product_id.uot_id:
787
+ line.uot_id = line.product_id.uot_id.id
788
+ else:
789
+ line.uot_id = line.product_id.uom_id.id
790
+ else:
791
+ line.uot_id = False
779
792
 
780
793
  @api.onchange("price_unit")
781
794
  def _onchange_price_unit_fiscal(self):
@@ -199,152 +199,37 @@ class FiscalDocumentMixinMethods(models.AbstractModel):
199
199
  elif doc.comment_ids is None:
200
200
  doc.comment_ids = []
201
201
 
202
- def _inverse_amount_freight(self):
203
- for record in self.filtered(lambda doc: doc._get_product_amount_lines()):
204
- if (
202
+ def _distribute_amount_to_lines(self, amount_field_name, line_field_name):
203
+ for record in self:
204
+ if not (
205
205
  record.delivery_costs == "total"
206
206
  or record.force_compute_delivery_costs_by_total
207
207
  ):
208
- amount_freight_value = record.amount_freight_value
209
- if all(record._get_product_amount_lines().mapped("freight_value")):
210
- amount_freight_old = sum(
211
- record._get_product_amount_lines().mapped("freight_value")
212
- )
213
- for line in record._get_product_amount_lines()[:-1]:
214
- line.freight_value = amount_freight_value * (
215
- line.freight_value / amount_freight_old
216
- )
217
- record._get_product_amount_lines()[-1].freight_value = (
218
- amount_freight_value
219
- - sum(
220
- line.freight_value
221
- for line in record._get_product_amount_lines()[:-1]
222
- )
223
- )
224
- else:
225
- fiscal_amount_total = sum(
226
- record._get_product_amount_lines().mapped("price_gross")
208
+ continue
209
+ lines = record._get_product_amount_lines()
210
+ if not lines:
211
+ continue
212
+ amount_to_distribute = record[amount_field_name]
213
+ total_gross = sum(lines.mapped("price_gross"))
214
+ if total_gross > 0:
215
+ distributed_amount = 0
216
+ for line in lines[:-1]:
217
+ proportional_amount = record.currency_id.round(
218
+ amount_to_distribute * (line.price_gross / total_gross)
227
219
  )
228
- for line in record._get_product_amount_lines()[:-1]:
229
- if line.price_gross and fiscal_amount_total:
230
- line.freight_value = amount_freight_value * (
231
- line.price_gross / fiscal_amount_total
232
- )
233
- record._get_product_amount_lines()[-1].freight_value = (
234
- amount_freight_value
235
- - sum(
236
- line.freight_value
237
- for line in record._get_product_amount_lines()[:-1]
238
- )
239
- )
240
- for line in record._get_product_amount_lines():
241
- line._onchange_fiscal_taxes()
242
- record._fields["fiscal_amount_total"].compute_value(record)
243
- record.write(
244
- {
245
- name: value
246
- for name, value in record._cache.items()
247
- if record._fields[name].compute == "_amount_all"
248
- and not record._fields[name].inverse
249
- }
250
- )
220
+ line[line_field_name] = proportional_amount
221
+ distributed_amount += proportional_amount
222
+ lines[-1][line_field_name] = amount_to_distribute - distributed_amount
223
+ else:
224
+ lines.write({line_field_name: 0.0})
225
+ if lines:
226
+ lines[0][line_field_name] = amount_to_distribute
227
+
228
+ def _inverse_amount_freight(self):
229
+ self._distribute_amount_to_lines("amount_freight_value", "freight_value")
251
230
 
252
231
  def _inverse_amount_insurance(self):
253
- for record in self.filtered(lambda doc: doc._get_product_amount_lines()):
254
- if (
255
- record.delivery_costs == "total"
256
- or record.force_compute_delivery_costs_by_total
257
- ):
258
- amount_insurance_value = record.amount_insurance_value
259
- if all(record._get_product_amount_lines().mapped("insurance_value")):
260
- amount_insurance_old = sum(
261
- record._get_product_amount_lines().mapped("insurance_value")
262
- )
263
- for line in record._get_product_amount_lines()[:-1]:
264
- line.insurance_value = amount_insurance_value * (
265
- line.insurance_value / amount_insurance_old
266
- )
267
- record._get_product_amount_lines()[-1].insurance_value = (
268
- amount_insurance_value
269
- - sum(
270
- line.insurance_value
271
- for line in record._get_product_amount_lines()[:-1]
272
- )
273
- )
274
- else:
275
- fiscal_amount_total = sum(
276
- record._get_product_amount_lines().mapped("price_gross")
277
- )
278
- for line in record._get_product_amount_lines()[:-1]:
279
- if line.price_gross and fiscal_amount_total:
280
- line.insurance_value = amount_insurance_value * (
281
- line.price_gross / fiscal_amount_total
282
- )
283
- record._get_product_amount_lines()[-1].insurance_value = (
284
- amount_insurance_value
285
- - sum(
286
- line.insurance_value
287
- for line in record._get_product_amount_lines()[:-1]
288
- )
289
- )
290
- for line in record._get_product_amount_lines():
291
- line._onchange_fiscal_taxes()
292
- record._fields["fiscal_amount_total"].compute_value(record)
293
- record.write(
294
- {
295
- name: value
296
- for name, value in record._cache.items()
297
- if record._fields[name].compute == "_amount_all"
298
- and not record._fields[name].inverse
299
- }
300
- )
232
+ self._distribute_amount_to_lines("amount_insurance_value", "insurance_value")
301
233
 
302
234
  def _inverse_amount_other(self):
303
- for record in self.filtered(lambda doc: doc._get_product_amount_lines()):
304
- if (
305
- record.delivery_costs == "total"
306
- or record.force_compute_delivery_costs_by_total
307
- ):
308
- amount_other_value = record.amount_other_value
309
- if all(record._get_product_amount_lines().mapped("other_value")):
310
- amount_other_old = sum(
311
- record._get_product_amount_lines().mapped("other_value")
312
- )
313
- for line in record._get_product_amount_lines()[:-1]:
314
- line.other_value = amount_other_value * (
315
- line.other_value / amount_other_old
316
- )
317
- record._get_product_amount_lines()[-1].other_value = (
318
- amount_other_value
319
- - sum(
320
- line.other_value
321
- for line in record._get_product_amount_lines()[:-1]
322
- )
323
- )
324
- else:
325
- fiscal_amount_total = sum(
326
- record._get_product_amount_lines().mapped("price_gross")
327
- )
328
- for line in record._get_product_amount_lines()[:-1]:
329
- if line.price_gross and fiscal_amount_total:
330
- line.other_value = amount_other_value * (
331
- line.price_gross / fiscal_amount_total
332
- )
333
- record._get_product_amount_lines()[-1].other_value = (
334
- amount_other_value
335
- - sum(
336
- line.other_value
337
- for line in record._get_product_amount_lines()[:-1]
338
- )
339
- )
340
- for line in record._get_product_amount_lines():
341
- line._onchange_fiscal_taxes()
342
- record._fields["fiscal_amount_total"].compute_value(record)
343
- record.write(
344
- {
345
- name: value
346
- for name, value in record._cache.items()
347
- if record._fields[name].compute == "_amount_all"
348
- and not record._fields[name].inverse
349
- }
350
- )
235
+ self._distribute_amount_to_lines("amount_other_value", "other_value")
@@ -372,7 +372,7 @@ ul.auto-toc {
372
372
  !! This file is generated by oca-gen-addon-readme !!
373
373
  !! changes will be overwritten. !!
374
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375
- !! source digest: sha256:6ff86ea72740472f11f64c87a0aa0cdfc6ba73ecac825df6b354e43817900fc5
375
+ !! source digest: sha256:2e72394e7edc4b469e503409c49a2cca8d122192f24dda5617dca3242aeb3f25
376
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377
377
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_fiscal"><img alt="OCA/l10n-brazil" src="https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/l10n-brazil-16-0/l10n-brazil-16-0-l10n_br_fiscal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/l10n-brazil&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378
378
  <p><img alt="image" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" /></p>
@@ -12,6 +12,10 @@ class TestDocumentEdition(TransactionCase):
12
12
  def setUpClass(cls):
13
13
  super().setUpClass()
14
14
  cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
15
+ cls.user = cls.env.user
16
+ cls.company = cls.env.ref("l10n_br_base.empresa_lucro_presumido")
17
+ cls.user.company_ids |= cls.company
18
+ cls.user.company_id = cls.company.id
15
19
 
16
20
  def test_basic_doc_edition(self):
17
21
  doc_form = Form(
@@ -163,3 +167,112 @@ class TestDocumentEdition(TransactionCase):
163
167
  self.assertEqual(doc.fiscal_line_ids[0].fiscal_price, 112)
164
168
  self.assertEqual(doc.fiscal_line_ids[0].quantity, 10)
165
169
  self.assertEqual(doc.fiscal_line_ids[0].fiscal_quantity, 5)
170
+
171
+ def test_landed_costs_by_line_and_by_total(self):
172
+ """
173
+ Tests both landed cost scenarios: 'by line' and 'by total'.
174
+ 1. By Line: Enters costs on lines and verifies the header totals.
175
+ 2. By Total: Enters costs on the header and verifies lines distribution.
176
+ """
177
+ self.env.user.groups_id |= self.env.ref("l10n_br_fiscal.group_user")
178
+ product1 = self.env.ref("product.product_product_6")
179
+ product2 = self.env.ref("product.product_product_7")
180
+
181
+ # Part 1: Test with delivery_costs = 'line'
182
+ # ----------------------------------------------------
183
+ self.company.delivery_costs = "line"
184
+ doc_form = Form(self.env["l10n_br_fiscal.document"])
185
+ doc_form.company_id = self.company
186
+ doc_form.partner_id = self.env.ref("l10n_br_base.res_partner_cliente1_sp")
187
+ doc_form.fiscal_operation_id = self.env.ref("l10n_br_fiscal.fo_venda")
188
+
189
+ with doc_form.fiscal_line_ids.new() as line1:
190
+ line1.product_id = product1
191
+ line1.fiscal_operation_line_id = self.env.ref(
192
+ "l10n_br_fiscal.fo_venda_venda"
193
+ )
194
+ line1.price_unit = 1000.0
195
+ line1.quantity = 2.0 # Gross: 2000
196
+ line1.freight_value = 10.0
197
+ line1.insurance_value = 20.0
198
+ line1.other_value = 5.0
199
+
200
+ with doc_form.fiscal_line_ids.new() as line2:
201
+ line2.product_id = product2
202
+ line2.fiscal_operation_line_id = self.env.ref(
203
+ "l10n_br_fiscal.fo_venda_venda"
204
+ )
205
+ line2.price_unit = 500.0
206
+ line2.quantity = 1.0 # Gross: 500
207
+ line2.freight_value = 4.0
208
+ line2.insurance_value = 6.0
209
+ line2.other_value = 2.0
210
+
211
+ doc = doc_form.save()
212
+
213
+ self.assertEqual(doc.company_id.delivery_costs, "line")
214
+ # Assert header totals are the SUM of line values
215
+ self.assertAlmostEqual(doc.amount_freight_value, 14.0) # 10.0 + 4.0
216
+ self.assertAlmostEqual(doc.amount_insurance_value, 26.0) # 20.0 + 6.0
217
+ self.assertAlmostEqual(doc.amount_other_value, 7.0) # 5.0 + 2.0
218
+
219
+ # Assert final fiscal totals (bottom-up calculation)
220
+ # price_gross = (1000*2) + (500*1) = 2500
221
+ # landed_costs = 14 + 26 + 7 = 47
222
+ # fiscal_amount_untaxed (IPI Base) = 2500 + 47 = 2547
223
+ self.assertAlmostEqual(doc.fiscal_amount_untaxed, 2547.00)
224
+ # fiscal_amount_tax (IPI) = (2035 * 3.25%) + (512 * 5%) = 66.14 + 25.60 = 91.74
225
+ self.assertAlmostEqual(doc.fiscal_amount_tax, 91.74, places=2)
226
+ # fiscal_amount_total = 2547.00 + 91.74 = 2638.74
227
+ self.assertAlmostEqual(doc.fiscal_amount_total, 2638.74, places=2)
228
+
229
+ # Part 2: Test with delivery_costs = 'total'
230
+ # ----------------------------------------------------
231
+ self.company.delivery_costs = "total"
232
+ doc_form_edit = Form(doc)
233
+ # Set new header totals, which should trigger inverse methods to distribute
234
+ doc_form_edit.amount_freight_value = 30.0
235
+ doc_form_edit.amount_insurance_value = 60.0
236
+ doc_form_edit.amount_other_value = 90.0
237
+ doc_after_total_update = doc_form_edit.save()
238
+
239
+ line1 = doc_after_total_update.fiscal_line_ids[0]
240
+ line2 = doc_after_total_update.fiscal_line_ids[1]
241
+
242
+ # Assert values were distributed proportionally to price_gross
243
+ # (2000 vs 500 -> 80% vs 20%)
244
+ # Freight: 30.0 * 0.8 = 24.0 | 30.0 * 0.2 = 6.0
245
+ self.assertAlmostEqual(line1.freight_value, 24.0)
246
+ self.assertAlmostEqual(line2.freight_value, 6.0)
247
+ # Insurance: 60.0 * 0.8 = 48.0 | 60.0 * 0.2 = 12.0
248
+ self.assertAlmostEqual(line1.insurance_value, 48.0)
249
+ self.assertAlmostEqual(line2.insurance_value, 12.0)
250
+ # Other: 90.0 * 0.8 = 72.0 | 90.0 * 0.2 = 18.0
251
+ self.assertAlmostEqual(line1.other_value, 72.0)
252
+ self.assertAlmostEqual(line2.other_value, 18.0)
253
+
254
+ # Assert final fiscal totals are recomputed correctly (top-down calculation)
255
+ # price_gross = 2500
256
+ # landed_costs = 30 + 60 + 90 = 180
257
+ # fiscal_amount_untaxed (IPI Base) = 2500 + 180 = 2680
258
+ self.assertAlmostEqual(doc_after_total_update.fiscal_amount_untaxed, 2680.00)
259
+ # Line 1 IPI Base = 2000 (product) + 24 (freight) + 48 (insurance)
260
+ # + 72 (other) = 2144
261
+ # Line 1 IPI Value = 2144 * 3.25% = 69.68
262
+ self.assertAlmostEqual(line1.ipi_base, 2144.00)
263
+ self.assertAlmostEqual(line1.ipi_value, 69.68, places=2)
264
+
265
+ # Line 2 IPI Base = 500 (product) + 6 (freight) + 12 (insurance)
266
+ # + 18 (other) = 536
267
+ # Line 2 IPI Value = 536 * 5% = 26.80
268
+ self.assertAlmostEqual(line2.ipi_base, 536.00)
269
+ self.assertAlmostEqual(line2.ipi_value, 26.80, places=2)
270
+
271
+ # fiscal_amount_tax (IPI) = 69.68 + 26.80 = 96.48
272
+ self.assertAlmostEqual(
273
+ doc_after_total_update.fiscal_amount_tax, 96.48, places=2
274
+ )
275
+ # fiscal_amount_total = 2680.00 + 96.48 = 2776.48
276
+ self.assertAlmostEqual(
277
+ doc_after_total_update.fiscal_amount_total, 2776.48, places=2
278
+ )
@@ -40,8 +40,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
40
40
  def test_nfe_same_state(self):
41
41
  """Test NFe same state."""
42
42
  for line in self.nfe_same_state.fiscal_line_ids:
43
- line._onchange_product_id_fiscal()
44
-
45
43
  # Restore the original price_unit value,
46
44
  # as the product change might have altered it.
47
45
  line.price_unit = 100
@@ -163,7 +161,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
163
161
  def test_nfe_other_state(self):
164
162
  """Test NFe other state."""
165
163
  for line in self.nfe_other_state.fiscal_line_ids:
166
- line._onchange_product_id_fiscal()
167
164
  line._onchange_fiscal_operation_id()
168
165
  line._onchange_fiscal_taxes()
169
166
 
@@ -278,7 +275,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
278
275
  def test_nfe_not_taxpayer(self):
279
276
  """Test NFe not taxpayer."""
280
277
  for line in self.nfe_not_taxpayer.fiscal_line_ids:
281
- line._onchange_product_id_fiscal()
282
278
  line._onchange_fiscal_operation_id()
283
279
  line._onchange_fiscal_taxes()
284
280
 
@@ -380,7 +376,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
380
376
  def test_nfe_not_taxpayer_not_company(self):
381
377
  """Test NFe not taxpayer not Company."""
382
378
  for line in self.nfe_not_taxpayer_pf.fiscal_line_ids:
383
- line._onchange_product_id_fiscal()
384
379
  line._onchange_fiscal_operation_id()
385
380
  line._onchange_fiscal_taxes()
386
381
 
@@ -482,7 +477,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
482
477
  def test_nfe_export(self):
483
478
  """Test NFe export."""
484
479
  for line in self.nfe_export.fiscal_line_ids:
485
- line._onchange_product_id_fiscal()
486
480
  line._onchange_fiscal_operation_id()
487
481
  line._onchange_fiscal_taxes()
488
482
 
@@ -576,8 +570,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
576
570
  def test_nfe_sn_same_state(self):
577
571
  """Test NFe Simples Nacional same state."""
578
572
  for line in self.nfe_sn_same_state.fiscal_line_ids:
579
- line._onchange_product_id_fiscal()
580
-
581
573
  # set fake estimate tax
582
574
  line.ncm_id.tax_estimate_ids.create(
583
575
  {
@@ -689,7 +681,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
689
681
  def test_nfe_sn_other_state(self):
690
682
  """Test NFe SN other state."""
691
683
  for line in self.nfe_sn_other_state.fiscal_line_ids:
692
- line._onchange_product_id_fiscal()
693
684
  line._onchange_fiscal_operation_id()
694
685
  line._onchange_fiscal_taxes()
695
686
 
@@ -787,7 +778,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
787
778
  def test_nfe_sn_not_taxpayer(self):
788
779
  """Test NFe SN not taxpayer."""
789
780
  for line in self.nfe_sn_not_taxpayer.fiscal_line_ids:
790
- line._onchange_product_id_fiscal()
791
781
  line._onchange_fiscal_operation_id()
792
782
  line._onchange_fiscal_taxes()
793
783
 
@@ -872,7 +862,6 @@ class TestFiscalDocumentGeneric(TransactionCase):
872
862
  def test_nfe_sn_export(self):
873
863
  """Test NFe SN export."""
874
864
  for line in self.nfe_sn_export.fiscal_line_ids:
875
- line._onchange_product_id_fiscal()
876
865
  line._onchange_fiscal_operation_id()
877
866
  line._onchange_fiscal_taxes()
878
867
 
@@ -15,7 +15,6 @@ class TestFiscalDocumentNFSe(TransactionCase):
15
15
  """Test NFSe same state."""
16
16
 
17
17
  for line in self.nfse_same_state.fiscal_line_ids:
18
- line._onchange_product_id_fiscal()
19
18
  line._onchange_fiscal_operation_id()
20
19
  line._onchange_fiscal_taxes()
21
20
 
@@ -40,7 +40,6 @@ class TestTaxBenefit(TransactionCase):
40
40
  """Test NFe with tax benefit."""
41
41
 
42
42
  for line in self.nfe_tax_benefit.fiscal_line_ids:
43
- line._onchange_product_id_fiscal()
44
43
  line._onchange_fiscal_operation_id()
45
44
  line._onchange_fiscal_taxes()
46
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-l10n_br_fiscal
3
- Version: 16.0.14.0.5.1
3
+ Version: 16.0.14.2.0
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: erpbrasil.base>=2.3.0
6
6
  Requires-Dist: odoo-addon-l10n_br_base>=16.0dev,<16.1dev
@@ -31,7 +31,7 @@ Módulo fiscal brasileiro
31
31
  !! This file is generated by oca-gen-addon-readme !!
32
32
  !! changes will be overwritten. !!
33
33
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
34
- !! source digest: sha256:6ff86ea72740472f11f64c87a0aa0cdfc6ba73ecac825df6b354e43817900fc5
34
+ !! source digest: sha256:2e72394e7edc4b469e503409c49a2cca8d122192f24dda5617dca3242aeb3f25
35
35
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36
36
 
37
37
  .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
@@ -1,6 +1,6 @@
1
- odoo/addons/l10n_br_fiscal/README.rst,sha256=gLtu_x9gw2Z_ncaI8h7yJNQipZqBbTVwmdEasph_0XM,13957
1
+ odoo/addons/l10n_br_fiscal/README.rst,sha256=lpE95FE28QxUAqFZxW63X54qkUWSLUPlKFHyoNJrA-M,13957
2
2
  odoo/addons/l10n_br_fiscal/__init__.py,sha256=BQXfCjW4ehK1W1j0z6k8xN7Q2LoZBCjjvYDkQt6nSkI,2717
3
- odoo/addons/l10n_br_fiscal/__manifest__.py,sha256=jI_jyXpQOaxQD8MdVsfXeGB3_-ej3TEZXHddsY16CCI,4957
3
+ odoo/addons/l10n_br_fiscal/__manifest__.py,sha256=0WRuIMNdHpGMyH-d8sh-T8KJdUVYhFbq60j7eqA_jHY,4957
4
4
  odoo/addons/l10n_br_fiscal/tools.py,sha256=HgaCLkPznFxgLfjb76nH36PJ7bN5W7-fdaqtBvM6XC0,4056
5
5
  odoo/addons/l10n_br_fiscal/constants/fiscal.py,sha256=F2a4jYAk2j2Yh1Xw7WeS1GcLfW1DbjeNgEF6l7135wc,14962
6
6
  odoo/addons/l10n_br_fiscal/constants/icms.py,sha256=rHlM6jyRvhrIm03sd6guS1xh7SptADLltPmRJ3C_Vh8,3512
@@ -45,14 +45,14 @@ odoo/addons/l10n_br_fiscal/data/uom_data.xml,sha256=bDVsZn9KA5ozkZuPC9cyylPlsBtX
45
45
  odoo/addons/l10n_br_fiscal/demo/__init__.py,sha256=D9IO9xsEyTSXTF03sJ836cHDsB3snXXizs1SUA2IvwA,4420
46
46
  odoo/addons/l10n_br_fiscal/demo/city_taxation_code_demo.xml,sha256=tVMji5bhxl7cfsf48JjtwHfVVyMOm28WA9H5K6Zr2R0,476
47
47
  odoo/addons/l10n_br_fiscal/demo/company_demo.xml,sha256=XPZE-3nHNYdeSGkJ7XamGAWM7Vs5AwhFBl-3yZCc2fA,13429
48
- odoo/addons/l10n_br_fiscal/demo/fiscal_document_demo.xml,sha256=8X9qcbio02TTodGr8GwbplAxaawOsdDZleGA2C1KS2I,33801
49
- odoo/addons/l10n_br_fiscal/demo/fiscal_document_nfse_demo.xml,sha256=yXaU_tYNUGwTgSpUvm59_6Kej58bHwD_n-wcpiCxxiY,1546
48
+ odoo/addons/l10n_br_fiscal/demo/fiscal_document_demo.xml,sha256=JZaijq2XArz1INNES9pDFZqkxsxunGJJ7_W633WciXM,30065
49
+ odoo/addons/l10n_br_fiscal/demo/fiscal_document_nfse_demo.xml,sha256=pTYdPHc-QVu2XPyPA_7hvjZdisxV0mEBBpMULvmhl0M,1363
50
50
  odoo/addons/l10n_br_fiscal/demo/fiscal_operation_demo.xml,sha256=RH6LvZ_rthjm8NxTPgvakdIjV_VrIJoD5NfEB4zusA8,507
51
51
  odoo/addons/l10n_br_fiscal/demo/icms_tax_definition_demo.xml,sha256=38sImUwueccEEBrTnQ8_e4f614U10DIh8r9PYEXYexg,1033
52
52
  odoo/addons/l10n_br_fiscal/demo/partner_demo.xml,sha256=dPFBshkjUmIdkp5X4UPDVtFcDcOPHEj9VZs06SXUklE,7173
53
53
  odoo/addons/l10n_br_fiscal/demo/product_demo.xml,sha256=xaJuXOdRp_DSWxrkoKaC6HAuMpgCGjDe9KHh_-iOxAo,83287
54
54
  odoo/addons/l10n_br_fiscal/demo/res_users_demo.xml,sha256=zwDfPw56a3_Z181Rt4YtfVv13x_Wquo-sKjYF6SgJhE,607
55
- odoo/addons/l10n_br_fiscal/i18n/l10n_br_fiscal.pot,sha256=5XrgFoOkPNFs0VvC-5vedhtrZl_5oBC4FrVpCDhRrLI,418897
55
+ odoo/addons/l10n_br_fiscal/i18n/l10n_br_fiscal.pot,sha256=nZhdaaEmB9fPe07-XgqgdsWblqO_JvKt3mn-6tJAwAU,419051
56
56
  odoo/addons/l10n_br_fiscal/i18n/pt_BR.po,sha256=r18-H9zeX1TEwux85-Jt5CuF_l6dLpj8Ix9kPW-tjbs,496209
57
57
  odoo/addons/l10n_br_fiscal/migrations/16.0.13.0.0/pre-migration.py,sha256=pOsGHg7PEz_k2qKeaa0jgqM1xHFpynWZNCrkAloE_vc,745
58
58
  odoo/addons/l10n_br_fiscal/migrations/16.0.14.0.0/pre-migration.py,sha256=lCubp50-qtGUwXGw8BBlyS5fcNZW3aRFZD6mWUqHmKc,827
@@ -73,11 +73,11 @@ odoo/addons/l10n_br_fiscal/models/data_abstract.py,sha256=l46d2ViejGvcjPtKxaA0vn
73
73
  odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py,sha256=a0K-32ockgmQV5WaljCCSZQYn8YmuYZ0CYqTDct0vLI,6758
74
74
  odoo/addons/l10n_br_fiscal/models/data_product_abstract.py,sha256=wbc3exJQp33aYK8IOJ490JvDWBPCpU0NEkMR6YjaLfQ,793
75
75
  odoo/addons/l10n_br_fiscal/models/document.py,sha256=TbuOJrupyHoRzuLPyCykXgEG3vC14dpXtTlo4LTAI_A,15843
76
- odoo/addons/l10n_br_fiscal/models/document_line.py,sha256=W_8uQz-cn8hIljATy91XYIkD0PrkZzW58RVVgqVYyc8,2590
77
- odoo/addons/l10n_br_fiscal/models/document_line_mixin.py,sha256=es-zS2qi5Pe7rp1maHeIo705_glz94nLzhaNkcxWgw8,43780
78
- odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py,sha256=sabxe2KXIe-Tlot7c-JFLzcqG1-Zv4mIEDNW_b3DP2s,34172
76
+ odoo/addons/l10n_br_fiscal/models/document_line.py,sha256=pycbresixkkg5CtWItiJxzWgF0vM8CLEAywdUz_iC90,3407
77
+ odoo/addons/l10n_br_fiscal/models/document_line_mixin.py,sha256=_8ZTQoZMC4KZyDhu5ngMo37rdFr7PzmSU_V91NJQWNE,45015
78
+ odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py,sha256=CNoqsz7FkfTPAKG4a-h4Csf2yBK2ccD-NF_nhni3Ce0,34590
79
79
  odoo/addons/l10n_br_fiscal/models/document_mixin.py,sha256=GkoNxIAUrzwWh5cYZAm5KD_qBIN-mSQ8phQJdYOlOCg,13343
80
- odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py,sha256=IG37evORl6dJG0-GOluvgnZ9tcMGLTUoPPYYzdvWB5w,15565
80
+ odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py,sha256=Rlv4khSkeIDHEXKO_MvEJTOGHbYMQYAo2f_SwRKbWuo,9694
81
81
  odoo/addons/l10n_br_fiscal/models/document_related.py,sha256=zPc9ubJVCsawhd2HxNBD8ebo6XnVPFzgDOegw6vYEmk,4696
82
82
  odoo/addons/l10n_br_fiscal/models/document_serie.py,sha256=Spe7kpgMBFGS_LBv3DpiqTC4WuafTK8LRv53GVR2UcM,4128
83
83
  odoo/addons/l10n_br_fiscal/models/document_supplement.py,sha256=31oRSHT_SaGSf-dQvriweIxZZiTANxkHHupc5kMYfXA,409
@@ -127,7 +127,7 @@ odoo/addons/l10n_br_fiscal/readme/USAGE.md,sha256=Dw3uZaHJCUtV0xFq6VOQvF2G5fS_oS
127
127
  odoo/addons/l10n_br_fiscal/security/fiscal_security.xml,sha256=QgqzdExfkca0lMt9kmcymVQj_DISZSKJZ8Ea1qO6e28,3167
128
128
  odoo/addons/l10n_br_fiscal/security/ir.model.access.csv,sha256=MQb64W6Es5ChkVqKBit6bHWKyAtrkgO_VamAaSNhvCQ,14359
129
129
  odoo/addons/l10n_br_fiscal/static/description/icon.png,sha256=Vd1HydYBoGCzNfCqxLlch2i2aeCcyxo-uRxWNp6oMbw,14836
130
- odoo/addons/l10n_br_fiscal/static/description/index.html,sha256=yOk_Ha8MpDYAfMhNqBmh2S0CASCTyMh7ASVG8fdVcBU,26637
130
+ odoo/addons/l10n_br_fiscal/static/description/index.html,sha256=Oa2S3oTo9JloelYB9ugHeAiJWMYF7d3_Q3biIjZgH5g,26637
131
131
  odoo/addons/l10n_br_fiscal/static/img/fiscal_dashboard.png,sha256=Q0fpqFNqEXh6m6E1aJfzSKV2tQ9lC1Y-ofUt6qxVupc,151668
132
132
  odoo/addons/l10n_br_fiscal/static/img/fiscal_line.png,sha256=S4Q4OGSzGnbfm4W5sQVvnD4uUzxS6tbJGT_gs3pB4K0,134276
133
133
  odoo/addons/l10n_br_fiscal/static/img/fiscal_operation.png,sha256=2614c1XjxwVznh707e9gujlUXg0ttutKD1ZiSMTqyv8,105871
@@ -135,9 +135,9 @@ odoo/addons/l10n_br_fiscal/static/img/fiscal_total.png,sha256=MaR6ZoM6ZZEaNZk2yn
135
135
  odoo/addons/l10n_br_fiscal/static/src/js/list_renderer_with_button.esm.js,sha256=Ucw7pymMrW2yi_nNrDMvq6ubyub9QMlqH3ZOoaTEHN0,1243
136
136
  odoo/addons/l10n_br_fiscal/tests/__init__.py,sha256=83m4BimGb-6EseEmmCVaKTSel5GB_vkzbI3YZi4mStE,393
137
137
  odoo/addons/l10n_br_fiscal/tests/test_cnae.py,sha256=mmskSfWaoFSohjmRbnGci_6Euc9fc2zbhyH5FdyeIeA,616
138
- odoo/addons/l10n_br_fiscal/tests/test_document_edition.py,sha256=aQYSQixnTQGk6xPQJ6-i5qbdbEHlua_-c7-tr-IT0V8,7064
139
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py,sha256=Q0ZSCjaqAYNKsrrYEeBBLqxhfaUvmd-XhVHADQoPlQw,39985
140
- odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_nfse.py,sha256=nEMaaWfv-sb4o48c1-l7mVnSjks3Tue7XxnQb_Q4cqw,1538
138
+ odoo/addons/l10n_br_fiscal/tests/test_document_edition.py,sha256=OTqxFFlgOkrxEZMzV7A5B6wzyDDdRtIeXzfITdbCqeQ,12404
139
+ odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py,sha256=3e2wA-_I8uhUbbXkqw-Wuvw5VkbMR67mSB95vV3tSKo,39560
140
+ odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_nfse.py,sha256=iej1FiolEQTFcUPDl6EsvC8zu4SYqi93dC-3rCos0LE,1491
141
141
  odoo/addons/l10n_br_fiscal/tests/test_fiscal_tax.py,sha256=U6JbuqKTcyyFTiW5FZGqGY5yi_aPKaC6_LWz_3sKdpg,11322
142
142
  odoo/addons/l10n_br_fiscal/tests/test_ibpt.py,sha256=vJKit2Aok-zIk_723nRietLTbVKPstD88vznN2PwMZg,5227
143
143
  odoo/addons/l10n_br_fiscal/tests/test_ibpt_product.py,sha256=h00TpY-tTw3z8U24yTzzvyWkfnKjHqlCbqetBKJNV94,2794
@@ -147,7 +147,7 @@ odoo/addons/l10n_br_fiscal/tests/test_ncm.py,sha256=legCHGki7r8xIC260jKdPpVUNC_Z
147
147
  odoo/addons/l10n_br_fiscal/tests/test_operation.py,sha256=zt3GJh3_z7p4zCFN2VSrUVgCGT7EQJ6GmjMGPIY98cg,480
148
148
  odoo/addons/l10n_br_fiscal/tests/test_partner_profile.py,sha256=aMjOQzygxVMQZnvdAEcR9Wun5igpTBzgOegkjsums68,738
149
149
  odoo/addons/l10n_br_fiscal/tests/test_service_type.py,sha256=k9Ro0pGVsiHslAa1NcLK-FlNnrFEeh394aw2tOF_M5o,556
150
- odoo/addons/l10n_br_fiscal/tests/test_tax_benefit.py,sha256=qfWnkg03AX42wowtLgwUKw1y3KEKh7DtkCOvGKokrBU,1991
150
+ odoo/addons/l10n_br_fiscal/tests/test_tax_benefit.py,sha256=5jTi5XGbI56MKp3zNXZGAweR0gtijOGTgS8smMYLxVk,1944
151
151
  odoo/addons/l10n_br_fiscal/views/cest_view.xml,sha256=t7caTdUMF775AiiGP9_Wm4JYzkrQ79lZGWU01uw4kOY,3160
152
152
  odoo/addons/l10n_br_fiscal/views/cfop_view.xml,sha256=zrcDfQnvZyqFE96IXy1b97RVjyBeysL3e9-MXgXRe0s,5016
153
153
  odoo/addons/l10n_br_fiscal/views/city_taxation_code.xml,sha256=TYld1AFFuchxWv9UkyWOuoPzavtc8RmoNRO7SxvidWE,2078
@@ -198,7 +198,7 @@ odoo/addons/l10n_br_fiscal/wizards/base_wizard_mixin.py,sha256=-r25us0vdNCSe11Gn
198
198
  odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.py,sha256=KfbqnzFuVx7WAro__W130rgvMWKkDBvkDFglMwTwgBQ,4115
199
199
  odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.xml,sha256=EAiUBkLBC0st-GSA0y7j771hiC_vglKPCIiC0SvG0gw,1830
200
200
  odoo/addons/l10n_br_fiscal/wizards/document_status_wizard.py,sha256=KsYj5YWWePO7uk0psBsFdnCL71eLWhcyg7_c7J4G6vA,818
201
- odoo_addon_l10n_br_fiscal-16.0.14.0.5.1.dist-info/METADATA,sha256=rKUGhsw-booomJJy674v8sjeTCP_9BpuHZuU4ztqJtc,14722
202
- odoo_addon_l10n_br_fiscal-16.0.14.0.5.1.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
203
- odoo_addon_l10n_br_fiscal-16.0.14.0.5.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
204
- odoo_addon_l10n_br_fiscal-16.0.14.0.5.1.dist-info/RECORD,,
201
+ odoo_addon_l10n_br_fiscal-16.0.14.2.0.dist-info/METADATA,sha256=yRNLODGJO5HtgO3cUmUZ1Aq69yn_TBAh0c8MvmMGfg8,14720
202
+ odoo_addon_l10n_br_fiscal-16.0.14.2.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
203
+ odoo_addon_l10n_br_fiscal-16.0.14.2.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
204
+ odoo_addon_l10n_br_fiscal-16.0.14.2.0.dist-info/RECORD,,