odoo-addon-l10n-br-fiscal 16.0.2.17.0__py3-none-any.whl → 16.0.19.4.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.
Files changed (162) hide show
  1. odoo/addons/l10n_br_fiscal/README.rst +11 -4
  2. odoo/addons/l10n_br_fiscal/__manifest__.py +20 -12
  3. odoo/addons/l10n_br_fiscal/constants/fiscal.py +64 -18
  4. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cest.csv +1043 -983
  5. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cfop.csv +620 -620
  6. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.cst.csv +58 -0
  7. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.document.type.csv +1 -0
  8. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.legal.nature.csv +82 -0
  9. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.nbs.csv +791 -764
  10. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.operation.indicator.csv +27 -0
  11. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.partner.profile.csv +11 -0
  12. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.classification.csv +163 -0
  13. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.csv +32 -0
  14. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal.tax.group.csv +3 -0
  15. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal_icms_tax_definition_data.xml +340 -352
  16. odoo/addons/l10n_br_fiscal/data/operation_data.xml +1 -1
  17. odoo/addons/l10n_br_fiscal/data/simplified_tax_data.xml +5 -5
  18. odoo/addons/l10n_br_fiscal/data/uom.alias.csv +25 -0
  19. odoo/addons/l10n_br_fiscal/data/uom_data.xml +104 -33
  20. odoo/addons/l10n_br_fiscal/demo/__init__.py +21 -15
  21. odoo/addons/l10n_br_fiscal/demo/company_demo.xml +6 -0
  22. odoo/addons/l10n_br_fiscal/demo/fiscal_document_demo.xml +3 -377
  23. odoo/addons/l10n_br_fiscal/demo/fiscal_document_nfse_demo.xml +0 -12
  24. odoo/addons/l10n_br_fiscal/demo/fiscal_operation_demo.xml +2 -2
  25. odoo/addons/l10n_br_fiscal/demo/icms_tax_definition_demo.xml +5 -2
  26. odoo/addons/l10n_br_fiscal/demo/res_users_demo.xml +2 -2
  27. odoo/addons/l10n_br_fiscal/i18n/l10n_br_fiscal.pot +1161 -804
  28. odoo/addons/l10n_br_fiscal/i18n/pt_BR.po +22 -22
  29. odoo/addons/l10n_br_fiscal/migrations/16.0.13.0.0/pre-migration.py +25 -0
  30. odoo/addons/l10n_br_fiscal/migrations/16.0.14.0.0/pre-migration.py +30 -0
  31. odoo/addons/l10n_br_fiscal/migrations/16.0.14.0.5/pre-migration.py +15 -0
  32. odoo/addons/l10n_br_fiscal/migrations/16.0.4.0.0/pre-migration.py +220 -0
  33. odoo/addons/l10n_br_fiscal/migrations/16.0.5.0.0/pre-migration.py +33 -0
  34. odoo/addons/l10n_br_fiscal/migrations/16.0.5.2.0/pre-migration.py +21 -0
  35. odoo/addons/l10n_br_fiscal/models/__init__.py +3 -8
  36. odoo/addons/l10n_br_fiscal/models/cest.py +0 -8
  37. odoo/addons/l10n_br_fiscal/models/cfop.py +91 -0
  38. odoo/addons/l10n_br_fiscal/models/city_taxation_code.py +1 -3
  39. odoo/addons/l10n_br_fiscal/models/comment.py +2 -2
  40. odoo/addons/l10n_br_fiscal/models/cst.py +0 -1
  41. odoo/addons/l10n_br_fiscal/models/data_abstract.py +26 -0
  42. odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py +1 -1
  43. odoo/addons/l10n_br_fiscal/models/document.py +131 -222
  44. odoo/addons/l10n_br_fiscal/models/document_line.py +82 -5
  45. odoo/addons/l10n_br_fiscal/models/document_line_mixin.py +1952 -138
  46. odoo/addons/l10n_br_fiscal/models/document_mixin.py +741 -6
  47. odoo/addons/l10n_br_fiscal/models/document_related.py +12 -9
  48. odoo/addons/l10n_br_fiscal/models/document_serie.py +33 -0
  49. odoo/addons/l10n_br_fiscal/models/document_type.py +0 -6
  50. odoo/addons/l10n_br_fiscal/models/ibpt.py +1 -1
  51. odoo/addons/l10n_br_fiscal/models/icms_regulation.py +2 -2
  52. odoo/addons/l10n_br_fiscal/models/invalidate_number.py +4 -5
  53. odoo/addons/l10n_br_fiscal/models/legal_nature.py +20 -0
  54. odoo/addons/l10n_br_fiscal/models/nbm.py +0 -8
  55. odoo/addons/l10n_br_fiscal/models/ncm.py +0 -12
  56. odoo/addons/l10n_br_fiscal/models/operation.py +49 -15
  57. odoo/addons/l10n_br_fiscal/models/operation_dashboard.py +3 -2
  58. odoo/addons/l10n_br_fiscal/models/operation_indicator.py +58 -0
  59. odoo/addons/l10n_br_fiscal/models/operation_line.py +75 -6
  60. odoo/addons/l10n_br_fiscal/models/partner_profile.py +6 -0
  61. odoo/addons/l10n_br_fiscal/models/product_mixin.py +24 -21
  62. odoo/addons/l10n_br_fiscal/models/product_template.py +23 -13
  63. odoo/addons/l10n_br_fiscal/models/res_company.py +31 -9
  64. odoo/addons/l10n_br_fiscal/models/res_partner.py +38 -6
  65. odoo/addons/l10n_br_fiscal/models/simplified_tax.py +0 -3
  66. odoo/addons/l10n_br_fiscal/models/simplified_tax_range.py +8 -0
  67. odoo/addons/l10n_br_fiscal/models/tax.py +144 -55
  68. odoo/addons/l10n_br_fiscal/models/tax_classification.py +81 -0
  69. odoo/addons/l10n_br_fiscal/models/tax_definition.py +72 -23
  70. odoo/addons/l10n_br_fiscal/models/tax_pis_cofins.py +0 -3
  71. odoo/addons/l10n_br_fiscal/models/tax_pis_cofins_base.py +1 -1
  72. odoo/addons/l10n_br_fiscal/models/tax_pis_cofins_credit.py +1 -1
  73. odoo/addons/l10n_br_fiscal/models/uom_uom.py +15 -30
  74. odoo/addons/l10n_br_fiscal/security/fiscal_security.xml +11 -27
  75. odoo/addons/l10n_br_fiscal/security/ir.model.access.csv +11 -10
  76. odoo/addons/l10n_br_fiscal/static/description/index.html +27 -21
  77. odoo/addons/l10n_br_fiscal/static/src/js/list_renderer_with_button.esm.js +38 -0
  78. odoo/addons/l10n_br_fiscal/tests/__init__.py +3 -2
  79. odoo/addons/l10n_br_fiscal/tests/test_document_edition.py +308 -0
  80. odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_generic.py +23 -129
  81. odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_nfse.py +5 -15
  82. odoo/addons/l10n_br_fiscal/tests/test_fiscal_document_serie.py +60 -0
  83. odoo/addons/l10n_br_fiscal/tests/test_ibpt.py +4 -3
  84. odoo/addons/l10n_br_fiscal/tests/test_icms_regulation.py +2 -2
  85. odoo/addons/l10n_br_fiscal/tests/test_ncm.py +4 -1
  86. odoo/addons/l10n_br_fiscal/tests/test_tax_benefit.py +17 -22
  87. odoo/addons/l10n_br_fiscal/tests/test_tax_classification.py +110 -0
  88. odoo/addons/l10n_br_fiscal/tools.py +1 -1
  89. odoo/addons/l10n_br_fiscal/views/cest_view.xml +2 -4
  90. odoo/addons/l10n_br_fiscal/views/cfop_view.xml +25 -5
  91. odoo/addons/l10n_br_fiscal/views/city_taxation_code.xml +1 -4
  92. odoo/addons/l10n_br_fiscal/views/cnae_view.xml +2 -4
  93. odoo/addons/l10n_br_fiscal/views/comment_view.xml +2 -4
  94. odoo/addons/l10n_br_fiscal/views/cst_view.xml +6 -8
  95. odoo/addons/l10n_br_fiscal/views/{document_fiscal_line_mixin_view.xml → document_line_mixin_view.xml} +525 -385
  96. odoo/addons/l10n_br_fiscal/views/document_line_view.xml +101 -82
  97. odoo/addons/l10n_br_fiscal/views/document_related_view.xml +44 -46
  98. odoo/addons/l10n_br_fiscal/views/document_serie_view.xml +2 -6
  99. odoo/addons/l10n_br_fiscal/views/document_type_view.xml +0 -8
  100. odoo/addons/l10n_br_fiscal/views/document_view.xml +303 -370
  101. odoo/addons/l10n_br_fiscal/views/icms_regulation_view.xml +14 -16
  102. odoo/addons/l10n_br_fiscal/views/icms_relief_view.xml +8 -10
  103. odoo/addons/l10n_br_fiscal/views/invalidate_number_view.xml +46 -48
  104. odoo/addons/l10n_br_fiscal/views/l10n_br_fiscal_action.xml +166 -280
  105. odoo/addons/l10n_br_fiscal/views/l10n_br_fiscal_menu.xml +25 -99
  106. odoo/addons/l10n_br_fiscal/views/legal_nature_view.xml +40 -0
  107. odoo/addons/l10n_br_fiscal/views/nbm_view.xml +5 -6
  108. odoo/addons/l10n_br_fiscal/views/nbs_view.xml +5 -6
  109. odoo/addons/l10n_br_fiscal/views/ncm_view.xml +12 -15
  110. odoo/addons/l10n_br_fiscal/views/operation_dashboard_view.xml +13 -12
  111. odoo/addons/l10n_br_fiscal/views/operation_indicator_view.xml +75 -0
  112. odoo/addons/l10n_br_fiscal/views/operation_line_view.xml +22 -21
  113. odoo/addons/l10n_br_fiscal/views/operation_view.xml +4 -19
  114. odoo/addons/l10n_br_fiscal/views/partner_profile_view.xml +3 -6
  115. odoo/addons/l10n_br_fiscal/views/product_genre_view.xml +7 -9
  116. odoo/addons/l10n_br_fiscal/views/product_product_view.xml +37 -14
  117. odoo/addons/l10n_br_fiscal/views/product_template_view.xml +34 -14
  118. odoo/addons/l10n_br_fiscal/views/res_company_view.xml +55 -52
  119. odoo/addons/l10n_br_fiscal/views/res_config_settings_view.xml +23 -28
  120. odoo/addons/l10n_br_fiscal/views/res_partner_view.xml +22 -2
  121. odoo/addons/l10n_br_fiscal/views/service_type_view.xml +7 -8
  122. odoo/addons/l10n_br_fiscal/views/simplified_tax_range_view.xml +0 -2
  123. odoo/addons/l10n_br_fiscal/views/simplified_tax_view.xml +0 -2
  124. odoo/addons/l10n_br_fiscal/views/tax_classification.xml +110 -0
  125. odoo/addons/l10n_br_fiscal/views/tax_definition_view.xml +157 -129
  126. odoo/addons/l10n_br_fiscal/views/tax_estimate_view.xml +0 -2
  127. odoo/addons/l10n_br_fiscal/views/tax_group_view.xml +3 -6
  128. odoo/addons/l10n_br_fiscal/views/tax_ipi_control_seal_view.xml +0 -2
  129. odoo/addons/l10n_br_fiscal/views/tax_ipi_guideline_class_view.xml +0 -2
  130. odoo/addons/l10n_br_fiscal/views/tax_ipi_guideline_view.xml +2 -4
  131. odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_base_view.xml +2 -4
  132. odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_credit_view.xml +2 -4
  133. odoo/addons/l10n_br_fiscal/views/tax_pis_cofins_view.xml +5 -7
  134. odoo/addons/l10n_br_fiscal/views/tax_view.xml +5 -7
  135. odoo/addons/l10n_br_fiscal/views/uom_uom.xml +24 -17
  136. odoo/addons/l10n_br_fiscal/wizards/__init__.py +1 -0
  137. odoo/addons/l10n_br_fiscal/wizards/base_wizard_mixin.py +1 -1
  138. odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.py +129 -0
  139. odoo/addons/l10n_br_fiscal/wizards/document_import_wizard_mixin.xml +41 -0
  140. {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/METADATA +15 -6
  141. odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info/RECORD +210 -0
  142. {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/WHEEL +1 -1
  143. odoo/addons/l10n_br_fiscal/data/l10n_br_fiscal_email_template.xml +0 -68
  144. odoo/addons/l10n_br_fiscal/data/partner_profile_data.xml +0 -96
  145. odoo/addons/l10n_br_fiscal/data/uom_alternative_data.xml +0 -58
  146. odoo/addons/l10n_br_fiscal/demo/l10n_br_fiscal_document_email.xml +0 -54
  147. odoo/addons/l10n_br_fiscal/demo/subsequent_operation_demo.xml +0 -10
  148. odoo/addons/l10n_br_fiscal/models/document_email.py +0 -74
  149. odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py +0 -913
  150. odoo/addons/l10n_br_fiscal/models/document_mixin_fields.py +0 -473
  151. odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py +0 -269
  152. odoo/addons/l10n_br_fiscal/models/document_move_mixin.py +0 -261
  153. odoo/addons/l10n_br_fiscal/models/subsequent_document.py +0 -203
  154. odoo/addons/l10n_br_fiscal/models/subsequent_operation.py +0 -54
  155. odoo/addons/l10n_br_fiscal/models/uom_uom_alternative.py +0 -22
  156. odoo/addons/l10n_br_fiscal/tests/test_subsequent_operation.py +0 -71
  157. odoo/addons/l10n_br_fiscal/tests/test_uom_uom.py +0 -22
  158. odoo/addons/l10n_br_fiscal/views/document_email_view.xml +0 -48
  159. odoo/addons/l10n_br_fiscal/views/subsequent_document_view.xml +0 -43
  160. odoo/addons/l10n_br_fiscal/views/subsequent_operation_view.xml +0 -21
  161. odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info/RECORD +0 -205
  162. {odoo_addon_l10n_br_fiscal-16.0.2.17.0.dist-info → odoo_addon_l10n_br_fiscal-16.0.19.4.0.dist-info}/top_level.txt +0 -0
@@ -1300,9 +1300,9 @@ msgid "CNPJ"
1300
1300
  msgstr "CNPJ"
1301
1301
 
1302
1302
  #. module: l10n_br_fiscal
1303
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__cnpj_cpf
1304
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__cnpj_cpf
1305
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__cnpj_cpf
1303
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__vat
1304
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__vat
1305
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__vat
1306
1306
  msgid "CNPJ/CPF"
1307
1307
  msgstr "CNPJ/CPF"
1308
1308
 
@@ -1914,8 +1914,8 @@ msgid "Company Main CNAE"
1914
1914
  msgstr "CNAE Principal da Empresa"
1915
1915
 
1916
1916
  #. module: l10n_br_fiscal
1917
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_inscr_mun
1918
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_inscr_mun
1917
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_im_code
1918
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_im_code
1919
1919
  msgid "Company Municipal Tax Number"
1920
1920
  msgstr "Número de Impostos Municipais da Empresa"
1921
1921
 
@@ -1938,8 +1938,8 @@ msgid "Company Phone"
1938
1938
  msgstr "Telefone da Empresa"
1939
1939
 
1940
1940
  #. module: l10n_br_fiscal
1941
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_inscr_est_st
1942
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_inscr_est_st
1941
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_ie_code_st
1942
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_ie_code_st
1943
1943
  msgid "Company ST State Tax Number"
1944
1944
  msgstr ""
1945
1945
 
@@ -1950,8 +1950,8 @@ msgid "Company State"
1950
1950
  msgstr "Estado da Empresa"
1951
1951
 
1952
1952
  #. module: l10n_br_fiscal
1953
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_inscr_est
1954
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_inscr_est
1953
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_ie_code
1954
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_ie_code
1955
1955
  msgid "Company State Tax Number"
1956
1956
  msgstr "Número da Inscrição Estadual"
1957
1957
 
@@ -1968,8 +1968,8 @@ msgid "Company Street2"
1968
1968
  msgstr "Empresa Rua2"
1969
1969
 
1970
1970
  #. module: l10n_br_fiscal
1971
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_suframa
1972
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_suframa
1971
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__company_l10n_br_isuf_code
1972
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__company_l10n_br_isuf_code
1973
1973
  msgid "Company Suframa"
1974
1974
  msgstr "Empresa Suframa"
1975
1975
 
@@ -5165,7 +5165,7 @@ msgid "Input"
5165
5165
  msgstr "Entrada"
5166
5166
 
5167
5167
  #. module: l10n_br_fiscal
5168
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__inscr_est
5168
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_related__l10n_br_ie_code
5169
5169
  msgid "Inscr. Estadual/RG"
5170
5170
  msgstr "O Inscr. Estadual/RG"
5171
5171
 
@@ -5771,10 +5771,10 @@ msgid "Move Settings"
5771
5771
  msgstr "Configurações de movimento"
5772
5772
 
5773
5773
  #. module: l10n_br_fiscal
5774
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_inscr_mun
5775
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_inscr_mun
5776
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__inscr_mun
5777
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__inscr_mun
5774
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_im_code
5775
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_im_code
5776
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__l10n_br_im_code
5777
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__l10n_br_im_code
5778
5778
  msgid "Municipal Tax Number"
5779
5779
  msgstr "Número de Impostos Municipais"
5780
5780
 
@@ -7705,10 +7705,10 @@ msgid "State"
7705
7705
  msgstr "Estado"
7706
7706
 
7707
7707
  #. module: l10n_br_fiscal
7708
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_inscr_est
7709
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_inscr_est
7710
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__inscr_est
7711
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__inscr_est
7708
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_ie_code
7709
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_ie_code
7710
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_partner__l10n_br_ie_code
7711
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_res_users__l10n_br_ie_code
7712
7712
  msgid "State Tax Number"
7713
7713
  msgstr "Número do Imposto Estadual/RG"
7714
7714
 
@@ -7798,8 +7798,8 @@ msgid "Sufix"
7798
7798
  msgstr "Sufix"
7799
7799
 
7800
7800
  #. module: l10n_br_fiscal
7801
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_suframa
7802
- #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_suframa
7801
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document__partner_l10n_br_isuf_code
7802
+ #: model:ir.model.fields,field_description:l10n_br_fiscal.field_l10n_br_fiscal_document_move_mixin__partner_l10n_br_isuf_code
7803
7803
  msgid "Suframa"
7804
7804
  msgstr "Suframa"
7805
7805
 
@@ -0,0 +1,25 @@
1
+ # Copyright (C) 2025 - Engenere (<https://engenere.one>).
2
+ # @author Antônio S. Pereira Neto <neto@engenere.one>
3
+
4
+ from openupgradelib import openupgrade
5
+
6
+
7
+ @openupgrade.migrate()
8
+ def migrate(env, version):
9
+ """Rename product.template M2M field to the new pluralized name.
10
+
11
+ The underlying Many2many relation table remains the same because
12
+ Odoo derives it from model table names, not the field name. This
13
+ rename keeps references (e.g., stored views/filters) consistent.
14
+ """
15
+ openupgrade.rename_fields(
16
+ env,
17
+ [
18
+ (
19
+ "product.template",
20
+ "product.template",
21
+ "city_taxation_code_id",
22
+ "city_taxation_code_ids",
23
+ ),
24
+ ],
25
+ )
@@ -0,0 +1,30 @@
1
+ # Copyright (C) 2025 - Engenere (<https://engenere.one>).
2
+ # @author Antônio S. Pereira Neto <neto@engenere.one>
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4
+
5
+ from openupgradelib import openupgrade
6
+
7
+
8
+ @openupgrade.migrate()
9
+ def migrate(env, version):
10
+ field_spec = [
11
+ (
12
+ "l10n_br_fiscal.document",
13
+ "l10n_br_fiscal_document",
14
+ "amount_untaxed",
15
+ "fiscal_amount_untaxed",
16
+ ),
17
+ (
18
+ "l10n_br_fiscal.document",
19
+ "l10n_br_fiscal_document",
20
+ "amount_tax",
21
+ "fiscal_amount_tax",
22
+ ),
23
+ (
24
+ "l10n_br_fiscal.document",
25
+ "l10n_br_fiscal_document",
26
+ "amount_total",
27
+ "fiscal_amount_total",
28
+ ),
29
+ ]
30
+ openupgrade.rename_fields(env, field_spec)
@@ -0,0 +1,15 @@
1
+ # Copyright (C) 2025 Renato Lima - Akretion <renato.lima@akretion.com.br>
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+
4
+ from openupgradelib import openupgrade
5
+
6
+
7
+ @openupgrade.migrate()
8
+ def migrate(env, version):
9
+ xmlids_renames = [
10
+ (
11
+ "l10n_br_fiscal.l10n_br_fiscal_operation_line_rule",
12
+ "l10n_br_fiscal.l10n_br_fiscal_operation_rule",
13
+ )
14
+ ]
15
+ openupgrade.rename_xmlids(env.cr, xmlids_renames)
@@ -0,0 +1,220 @@
1
+ # Copyright (C) 2025 - TODAY Raphaël Valyi - Akretion
2
+ # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
3
+
4
+ import logging
5
+
6
+ from openupgradelib import openupgrade
7
+
8
+ _logger = logging.getLogger(__name__)
9
+
10
+ _tables_renames = [
11
+ # l10n_br_fiscal/models/operation.py: comment_ids
12
+ (
13
+ "l10n_br_fiscal_operation_comment_rel",
14
+ "l10n_br_fiscal_comment_l10n_br_fiscal_operation_rel",
15
+ ),
16
+ # l10n_br_fiscal/models/operation_line.py: comment_ids
17
+ (
18
+ "l10n_br_fiscal_operation_line_comment_rel",
19
+ "l10n_br_fiscal_comment_l10n_br_fiscal_operation_line_rel",
20
+ ),
21
+ # l10n_br_fiscal/models/res_company.py: cnae_secondary_ids
22
+ ("res_company_fiscal_cnae_rel", "l10n_br_fiscal_cnae_res_company_rel"),
23
+ # l10n_br_fiscal/models/document_mixin.py: comment_ids
24
+ # (Abstract, assumes concrete l10n_br_fiscal.document)
25
+ (
26
+ "l10n_br_fiscal_document_mixin_comment_rel",
27
+ "l10n_br_fiscal_comment_l10n_br_fiscal_document_rel",
28
+ ),
29
+ # l10n_br_fiscal/models/document_line_mixin.py: fiscal_tax_ids
30
+ # (Abstract, assumes concrete l10n_br_fiscal.document.line)
31
+ ("fiscal_tax_rel", "l10n_br_fiscal_document_line_l10n_br_fiscal_tax_rel"),
32
+ # l10n_br_fiscal/models/document_line_mixin.py: comment_ids
33
+ # (Abstract, assumes concrete l10n_br_fiscal.document.line)
34
+ (
35
+ "l10n_br_fiscal_document_line_mixin_comment_rel",
36
+ "l10n_br_fiscal_comment_l10n_br_fiscal_document_line_rel",
37
+ ),
38
+ # l10n_br_fiscal/models/nbm.py: ncm_ids
39
+ ("fiscal_nbm_ncm_rel", "l10n_br_fiscal_nbm_l10n_br_fiscal_ncm_rel"),
40
+ # l10n_br_fiscal/models/nbm.py: tax_definition_ids
41
+ ("tax_definition_nbm_rel", "l10n_br_fiscal_nbm_l10n_br_fiscal_tax_definition_rel"),
42
+ # l10n_br_fiscal/models/cest.py: ncm_ids
43
+ ("fiscal_cest_ncm_rel", "l10n_br_fiscal_cest_l10n_br_fiscal_ncm_rel"),
44
+ # l10n_br_fiscal/models/ncm.py: piscofins_ids
45
+ (
46
+ "fiscal_pis_cofins_ncm_rel",
47
+ "l10n_br_fiscal_ncm_l10n_br_fiscal_tax_pis_cofins_rel",
48
+ ),
49
+ # l10n_br_fiscal/models/tax_definition.py: state_to_ids
50
+ (
51
+ "tax_definition_state_to_rel",
52
+ "l10n_br_fiscal_tax_definition_res_country_state_rel",
53
+ ),
54
+ # l10n_br_fiscal/models/tax_definition.py: ncm_ids
55
+ ("tax_definition_ncm_rel", "l10n_br_fiscal_ncm_l10n_br_fiscal_tax_definition_rel"),
56
+ # l10n_br_fiscal/models/tax_definition.py: cest_ids
57
+ (
58
+ "tax_definition_cest_rel",
59
+ "l10n_br_fiscal_cest_l10n_br_fiscal_tax_definition_rel",
60
+ ),
61
+ # l10n_br_fiscal/models/tax_definition.py: service_type_ids
62
+ (
63
+ "tax_definition_service_type_rel",
64
+ "l10n_br_fiscal_service_type_l10n_br_fiscal_tax_definition_rel",
65
+ ),
66
+ # l10n_br_fiscal/models/simplified_tax.py: cnae_ids
67
+ (
68
+ "fiscal_simplified_tax_cnae_rel",
69
+ "l10n_br_fiscal_cnae_l10n_br_fiscal_simplified_tax_rel",
70
+ ),
71
+ ]
72
+
73
+ _columns_renames = {
74
+ # l10n_br_fiscal_operation_comment_rel
75
+ # -> l10n_br_fiscal_comment_l10n_br_fiscal_operation_rel
76
+ "l10n_br_fiscal_comment_l10n_br_fiscal_operation_rel": [
77
+ ("fiscal_operation_id", "l10n_br_fiscal_operation_id"),
78
+ ("comment_id", "l10n_br_fiscal_comment_id"),
79
+ ],
80
+ # l10n_br_fiscal_operation_line_comment_rel
81
+ # -> l10n_br_fiscal_comment_l10n_br_fiscal_operation_line_rel
82
+ "l10n_br_fiscal_comment_l10n_br_fiscal_operation_line_rel": [
83
+ ("fiscal_operation_line_id", "l10n_br_fiscal_operation_line_id"),
84
+ ("comment_id", "l10n_br_fiscal_comment_id"),
85
+ ],
86
+ # res_company_fiscal_cnae_rel -> l10n_br_fiscal_cnae_res_company_rel
87
+ "l10n_br_fiscal_cnae_res_company_rel": [
88
+ ("company_id", "res_company_id"),
89
+ ("cnae_id", "l10n_br_fiscal_cnae_id"),
90
+ ],
91
+ # l10n_br_fiscal_document_mixin_comment_rel
92
+ # -> l10n_br_fiscal_comment_l10n_br_fiscal_document_rel
93
+ "l10n_br_fiscal_comment_l10n_br_fiscal_document_rel": [
94
+ (
95
+ "document_mixin_id",
96
+ "l10n_br_fiscal_document_id",
97
+ ), # ORM uses concrete model table name
98
+ ("comment_id", "l10n_br_fiscal_comment_id"),
99
+ ],
100
+ # fiscal_tax_rel -> l10n_br_fiscal_document_line_l10n_br_fiscal_tax_rel
101
+ "l10n_br_fiscal_document_line_l10n_br_fiscal_tax_rel": [
102
+ (
103
+ "document_id",
104
+ "l10n_br_fiscal_document_line_id",
105
+ ), # Old name was 'document_id', needs mapping to line
106
+ ("fiscal_tax_id", "l10n_br_fiscal_tax_id"),
107
+ ],
108
+ # l10n_br_fiscal_document_line_mixin_comment_rel
109
+ # -> l10n_br_fiscal_comment_l10n_br_fiscal_document_line_rel
110
+ "l10n_br_fiscal_comment_l10n_br_fiscal_document_line_rel": [
111
+ (
112
+ "document_line_mixin_id",
113
+ "l10n_br_fiscal_document_line_id",
114
+ ), # ORM uses concrete model table name
115
+ ("comment_id", "l10n_br_fiscal_comment_id"),
116
+ ],
117
+ # fiscal_nbm_ncm_rel -> l10n_br_fiscal_nbm_l10n_br_fiscal_ncm_rel
118
+ "l10n_br_fiscal_nbm_l10n_br_fiscal_ncm_rel": [
119
+ ("nbm_id", "l10n_br_fiscal_nbm_id"),
120
+ ("ncm_id", "l10n_br_fiscal_ncm_id"),
121
+ ],
122
+ # tax_definition_nbm_rel -> l10n_br_fiscal_nbm_l10n_br_fiscal_tax_definition_rel
123
+ "l10n_br_fiscal_nbm_l10n_br_fiscal_tax_definition_rel": [
124
+ ("nbm_id", "l10n_br_fiscal_nbm_id"),
125
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
126
+ ],
127
+ # fiscal_cest_ncm_rel -> l10n_br_fiscal_cest_l10n_br_fiscal_ncm_rel
128
+ "l10n_br_fiscal_cest_l10n_br_fiscal_ncm_rel": [
129
+ ("cest_id", "l10n_br_fiscal_cest_id"),
130
+ ("ncm_id", "l10n_br_fiscal_ncm_id"),
131
+ ],
132
+ # tax_definition_cest_rel -> l10n_br_fiscal_cest_l10n_br_fiscal_tax_definition_rel
133
+ "l10n_br_fiscal_cest_l10n_br_fiscal_tax_definition_rel": [
134
+ ("cest_id", "l10n_br_fiscal_cest_id"),
135
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
136
+ ],
137
+ # fiscal_pis_cofins_ncm_rel -> l10n_br_fiscal_ncm_l10n_br_fiscal_tax_pis_cofins_rel
138
+ "l10n_br_fiscal_ncm_l10n_br_fiscal_tax_pis_cofins_rel": [
139
+ ("ncm_id", "l10n_br_fiscal_ncm_id"),
140
+ ("piscofins_id", "l10n_br_fiscal_tax_pis_cofins_id"),
141
+ ],
142
+ # tax_definition_state_to_rel -> l10n_br_fiscal_tax_definition_res_country_state_rel
143
+ "l10n_br_fiscal_tax_definition_res_country_state_rel": [
144
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
145
+ ("state_id", "res_country_state_id"),
146
+ ],
147
+ # tax_definition_ncm_rel -> l10n_br_fiscal_ncm_l10n_br_fiscal_tax_definition_rel
148
+ "l10n_br_fiscal_ncm_l10n_br_fiscal_tax_definition_rel": [
149
+ ("ncm_id", "l10n_br_fiscal_ncm_id"),
150
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
151
+ ],
152
+ # tax_definition_service_type_rel
153
+ # -> l10n_br_fiscal_service_type_l10n_br_fiscal_tax_definition_rel
154
+ "l10n_br_fiscal_service_type_l10n_br_fiscal_tax_definition_rel": [
155
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
156
+ ("service_type_id", "l10n_br_fiscal_service_type_id"),
157
+ ],
158
+ # fiscal_simplified_tax_cnae_rel
159
+ # -> l10n_br_fiscal_cnae_l10n_br_fiscal_simplified_tax_rel
160
+ "l10n_br_fiscal_cnae_l10n_br_fiscal_simplified_tax_rel": [
161
+ ("simplified_tax_id", "l10n_br_fiscal_simplified_tax_id"),
162
+ ("cnae_id", "l10n_br_fiscal_cnae_id"),
163
+ ],
164
+ # custom table was preserved to avoid too long name
165
+ # but column name change to default is still required:
166
+ "tax_definition_city_taxation_code_rel": [
167
+ ("tax_definition_id", "l10n_br_fiscal_tax_definition_id"),
168
+ ("city_taxation_code_id", "l10n_br_fiscal_city_taxation_code_id"),
169
+ ],
170
+ }
171
+
172
+
173
+ def rename_tables(cr, table_spec):
174
+ """
175
+ Rename tables without touching indexes or constraints.
176
+ Verify that the table exists before renaming it.
177
+ """
178
+ for old, new in table_spec:
179
+ # Check whether the table exists
180
+ cr.execute("SELECT to_regclass(%s)", (old,))
181
+ if cr.fetchone()[0] is None:
182
+ _logger.info(f"Table {old} not found – skipping rename")
183
+ continue
184
+
185
+ _logger.info(f"Renaming table {old} → {new}")
186
+ openupgrade.logged_query(
187
+ cr,
188
+ f"ALTER TABLE {old} RENAME TO {new}",
189
+ )
190
+
191
+
192
+ def rename_columns(cr, column_spec):
193
+ """
194
+ Rename columns of existing tables.
195
+ """
196
+ for table, columns in column_spec.items():
197
+ cr.execute("SELECT to_regclass(%s)", (table,))
198
+ if cr.fetchone()[0] is None:
199
+ _logger.info(f"Table {table} not found – skipping column renames")
200
+ continue
201
+
202
+ for old, new in columns:
203
+ _logger.info(f"Renaming {table}.{old} → {new}")
204
+ openupgrade.logged_query(
205
+ cr,
206
+ f"ALTER TABLE {table} RENAME {old} TO {new}",
207
+ )
208
+
209
+
210
+ @openupgrade.migrate()
211
+ def migrate(env, version):
212
+ """
213
+ Migrate Many2many relation tables and columns from explicitly defined names
214
+ to Odoo ORM defaults for l10n_br_fiscal module.
215
+ """
216
+ openupgrade.logged_query(
217
+ env.cr, "DROP TABLE l10n_br_fiscal_tax_definition_res_country_state_rel;"
218
+ ) # see https://github.com/OCA/l10n-brazil/issues/3748
219
+ rename_tables(env.cr, _tables_renames)
220
+ rename_columns(env.cr, _columns_renames)
@@ -0,0 +1,33 @@
1
+ # Copyright (C) 2025 - Raphaël Valyi - Akretion <raphael.valyi@akretion.com.br>
2
+ # Copyright (C) 2025 - Antônio S. Pereira Neto - Engenere <neto@engenere.one>
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+
5
+ from openupgradelib import openupgrade
6
+
7
+
8
+ @openupgrade.migrate()
9
+ def migrate(env, version):
10
+ # move data
11
+ openupgrade.logged_query(
12
+ env.cr,
13
+ """
14
+ INSERT INTO uom_alias (uom_id, code, write_uid, create_uid, write_date,
15
+ create_date)
16
+ SELECT uom_id, code, write_uid, create_uid, write_date, create_date
17
+ FROM uom_uom_alternative
18
+ """,
19
+ )
20
+ # update xmlids
21
+ openupgrade.logged_query(
22
+ env.cr,
23
+ """
24
+ UPDATE ir_model_data AS imd
25
+ SET model = 'uom.alias',
26
+ res_id = new_alias.id
27
+ FROM uom_uom_alternative AS old_alias
28
+ JOIN uom_alias AS new_alias
29
+ ON new_alias.code = old_alias.code
30
+ WHERE imd.model = 'uom.uom.alternative'
31
+ AND imd.res_id = old_alias.id
32
+ """,
33
+ )
@@ -0,0 +1,21 @@
1
+ # Copyright (C) 2025 - Engenere (<https://engenere.one>).
2
+ # @author Antônio S. Pereira Neto <neto@engenere.one>
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4
+ from openupgradelib import openupgrade
5
+
6
+
7
+ @openupgrade.migrate()
8
+ def migrate(env, version):
9
+ # Migration script that was missing in the related PR:
10
+ # https://github.com/OCA/l10n-brazil/pull/3768
11
+ xmlids_renames = [
12
+ (
13
+ "l10n_br_fiscal.tax_icmsfcp_2_regulation_pb_pb",
14
+ "l10n_br_fiscal.tax_icmsfcp_2_regulation_pr_pr",
15
+ ),
16
+ (
17
+ "l10n_br_fiscal.tax_icmsfcp_nt_regulation_pb_pb",
18
+ "l10n_br_fiscal.tax_icmsfcp_2_regulation_pb_pb",
19
+ ),
20
+ ]
21
+ openupgrade.rename_xmlids(env.cr, xmlids_renames)
@@ -3,17 +3,14 @@
3
3
  from . import data_abstract
4
4
  from . import data_product_abstract
5
5
  from . import data_ncm_nbs_abstract
6
- from . import document_mixin_methods
7
- from . import document_mixin_fields
8
6
  from . import document_mixin
9
- from . import document_move_mixin
10
- from . import document_line_mixin_methods
11
7
  from . import document_line_mixin
12
8
  from . import invalidate_number
13
9
  from . import comment
14
10
  from . import ibpt
15
11
  from . import cfop
16
12
  from . import cst
13
+ from . import legal_nature
17
14
  from . import cnae
18
15
  from . import nbs
19
16
  from . import service_type
@@ -52,10 +49,8 @@ from . import document_line
52
49
  from . import res_config_settings
53
50
  from . import res_country_state
54
51
  from . import uom_uom
55
- from . import uom_uom_alternative
56
52
  from . import operation_dashboard
57
- from . import subsequent_operation
58
- from . import subsequent_document
59
- from . import document_email
60
53
  from . import city_taxation_code
61
54
  from . import document_supplement
55
+ from . import tax_classification
56
+ from . import operation_indicator
@@ -16,8 +16,6 @@ class Cest(models.Model):
16
16
 
17
17
  code_unmasked = fields.Char(size=7)
18
18
 
19
- name = fields.Text(required=True, index=True)
20
-
21
19
  item = fields.Char(required=True)
22
20
 
23
21
  segment = fields.Selection(selection=CEST_SEGMENT, required=True)
@@ -28,18 +26,12 @@ class Cest(models.Model):
28
26
 
29
27
  ncm_ids = fields.Many2many(
30
28
  comodel_name="l10n_br_fiscal.ncm",
31
- relation="fiscal_cest_ncm_rel",
32
- column1="cest_id",
33
- column2="ncm_id",
34
29
  readonly=True,
35
30
  string="NCMs",
36
31
  )
37
32
 
38
33
  tax_definition_ids = fields.Many2many(
39
34
  comodel_name="l10n_br_fiscal.tax.definition",
40
- relation="tax_definition_cest_rel",
41
- column1="cest_id",
42
- column2="tax_definition_id",
43
35
  readonly=True,
44
36
  string="Tax Definition",
45
37
  )
@@ -70,6 +70,97 @@ class Cfop(models.Model):
70
70
  default=CFOP_TYPE_MOVE_DEFAULT,
71
71
  )
72
72
 
73
+ ind_nfe = fields.Selection(
74
+ selection=[
75
+ ("0", "0 - No"),
76
+ ("1", "1 - Yes"),
77
+ ],
78
+ string="Used in NFe",
79
+ required=True,
80
+ default="0",
81
+ )
82
+
83
+ ind_cte = fields.Selection(
84
+ selection=[
85
+ ("0", "0 - No"),
86
+ ("1", "1 - Yes"),
87
+ ],
88
+ string="Used in CTe",
89
+ required=True,
90
+ default="0",
91
+ )
92
+
93
+ ind_comunica = fields.Selection(
94
+ selection=[
95
+ ("0", "0 - No"),
96
+ ("1", "1 - Yes"),
97
+ ],
98
+ string="Communication?",
99
+ required=True,
100
+ default="0",
101
+ )
102
+
103
+ ind_transp = fields.Selection(
104
+ selection=[
105
+ ("0", "0 - No"),
106
+ ("1", "1 - Yes"),
107
+ ],
108
+ string="Transport?",
109
+ required=True,
110
+ default="0",
111
+ )
112
+
113
+ ind_devol = fields.Selection(
114
+ selection=[
115
+ ("0", "0 - No"),
116
+ ("1", "1 - Yes"),
117
+ ],
118
+ string="Return?",
119
+ required=True,
120
+ default="0",
121
+ )
122
+
123
+ ind_retor = fields.Selection(
124
+ selection=[
125
+ ("0", "0 - No"),
126
+ ("1", "1 - Yes"),
127
+ ],
128
+ string="Regress?",
129
+ required=True,
130
+ default="0",
131
+ )
132
+
133
+ ind_anula = fields.Selection(
134
+ selection=[
135
+ ("0", "0 - No"),
136
+ ("1", "1 - Yes"),
137
+ ],
138
+ string="Revocation?",
139
+ required=True,
140
+ default="0",
141
+ )
142
+
143
+ ind_remes = fields.Selection(
144
+ selection=[
145
+ ("0", "0 - No"),
146
+ ("1", "1 - Yes"),
147
+ ],
148
+ string="Shipment?",
149
+ required=True,
150
+ default="0",
151
+ )
152
+
153
+ ind_comb = fields.Selection(
154
+ selection=[
155
+ ("0", "0 - No"),
156
+ ("1", "1 - Yes - Without mandatory transportation information"),
157
+ ("2", "2 - Yes - With mandatory transportation information"),
158
+ ],
159
+ string="Fuel?",
160
+ required=True,
161
+ default="0",
162
+ )
163
+
73
164
  tax_definition_ids = fields.One2many(
74
165
  comodel_name="l10n_br_fiscal.tax.definition",
75
166
  inverse_name="cfop_id",
@@ -34,9 +34,7 @@ class CityTaxationCode(models.Model):
34
34
 
35
35
  tax_definition_ids = fields.Many2many(
36
36
  comodel_name="l10n_br_fiscal.tax.definition",
37
- relation="tax_definition_city_taxation_code_rel",
38
- column1="city_taxation_code_id",
39
- column2="tax_definition_id",
37
+ relation="tax_definition_city_taxation_code_rel", # (orm default is too long)
40
38
  readonly=True,
41
39
  string="Tax Definition",
42
40
  )
@@ -6,7 +6,7 @@ from datetime import datetime
6
6
 
7
7
  from dateutil.relativedelta import relativedelta
8
8
 
9
- from odoo import api, fields, models, tools
9
+ from odoo import api, fields, models
10
10
  from odoo.osv.expression import AND
11
11
 
12
12
  from ..constants.fiscal import (
@@ -163,7 +163,7 @@ class Comment(models.Model):
163
163
 
164
164
  comments = [manual_comment] if manual_comment else []
165
165
  for record in self:
166
- template = mako_safe_env.from_string(tools.ustr(record.comment))
166
+ template = mako_safe_env.from_string(record.comment)
167
167
  comments.append(template.render(vals))
168
168
  return " - ".join(comments)
169
169
 
@@ -27,7 +27,6 @@ class CST(models.Model):
27
27
  tax_domain = fields.Selection(
28
28
  related="tax_group_id.tax_domain",
29
29
  string="Tax Domain",
30
- readonly=True,
31
30
  store=True,
32
31
  )
33
32