From 873868566f8dd640cfbe89f6608f4cf28de7f602 Mon Sep 17 00:00:00 2001 From: "diego.barreto" <diego.barreto@eynes.com.ar> Date: Thu, 1 Aug 2024 23:11:28 -0300 Subject: [PATCH] [ADD][T5226] add other taxes --- models/__init__.py | 1 + models/account_invoice.py | 1 + models/ws_caea_code.py | 21 ++++++++++-- models/ws_caea_configuration.py | 24 ++++++++++++++ models/ws_other_tax_caea.py | 59 +++++++++++++++++++++++++++++++++ security/ir.model.access.csv | 4 +++ views/ws_configuration_view.xml | 15 +++++++++ 7 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 models/ws_other_tax_caea.py diff --git a/models/__init__.py b/models/__init__.py index eaca3df..f0258d8 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -9,3 +9,4 @@ from . import ws_caea_code from . import ws_caea_report from . import ws_tax_caea from . import ws_caea_unused_voucher +from . import ws_other_tax_caea diff --git a/models/account_invoice.py b/models/account_invoice.py index d9d4c3f..98fe306 100644 --- a/models/account_invoice.py +++ b/models/account_invoice.py @@ -47,6 +47,7 @@ class AccountInvoice(models.Model): readonly=True, ) select = fields.Boolean(default=False) + caea_attachment_ids = fields.One2many('ir.attachment', 'res_id', domain=[('res_model', '=', 'account.move')], string='Attachments') # Funciones def open_partner(self): """ diff --git a/models/ws_caea_code.py b/models/ws_caea_code.py index 7737123..20f4953 100644 --- a/models/ws_caea_code.py +++ b/models/ws_caea_code.py @@ -7,6 +7,7 @@ from datetime import date from datetime import timedelta import logging +import base64 from ..wsfetools.wsmtxca_easywsy import MTXCAEasywsy from ..wsfetools.wsmtxca_validation import * @@ -385,9 +386,9 @@ class WsCaeaCode(models.Model): # ****************************tributos********************************** list_tributos = [] total_otros_tributos = 0 - env_tax_caea = self.env['ws.tax.caea'] + env_tax_caea = self.env['ws.other.tax.caea'] if not codigomtx: - for t in invoice.tax_line_ids.filtered(lambda x: x.tax_id.tax_group == 'vat'): + for t in invoice.tax_line_ids.filtered(lambda x: x.tax_id.tax_group != 'vat'): code = env_tax_caea.get_cod(t.tax_id) if code: list_tributos.append({ @@ -399,7 +400,8 @@ class WsCaeaCode(models.Model): }, }) total_otros_tributos += t.amount - + + env_tax_caea = self.env['ws.tax.caea'] if list_tributos: otros_tributos = { 'arrayOtrosTributos': { @@ -716,6 +718,19 @@ class WsCaeaCode(models.Model): g_t = 'numeroDocumento' self.config_id.get_observ(observ, request, g_p, g_s, g_t) if not errors: + file_content = "Request: %s\n\nResponse: %s\n\nErrors: %s\n\nObservations: %s" % (request, response, errors, observ) + file_name = "CAEA_Report_%s.txt" % (invoice.internal_number) + file_data = base64.b64encode(file_content.encode('utf-8')) + + self.env['ir.attachment'].create({ + 'name': file_name, + 'type': 'binary', + 'datas': file_data, + 'res_model': 'account.invoice', + 'res_id': invoice.id, + 'mimetype': 'text/plain' + }) + invoice.write({'is_report_comp_afip': True}) return request, response else: diff --git a/models/ws_caea_configuration.py b/models/ws_caea_configuration.py index f96d428..f5ac3a5 100644 --- a/models/ws_caea_configuration.py +++ b/models/ws_caea_configuration.py @@ -64,6 +64,11 @@ class WsCaeaConfiguration(models.Model): inverse_name='caea_config_id', string='Taxes' ) + other_taxes_ids = fields.One2many( + comodel_name='ws.other.tax.caea', + inverse_name='caea_config_id', + string='Otros Tributos' + ) currency_ids = fields.One2many( comodel_name='caea.currency.codes', inverse_name='caea_config_id', @@ -444,6 +449,25 @@ class WsCaeaConfiguration(models.Model): uom = env_tax.create_taxes(key[1], val[1]) self.write({'taxes_ids': [(4, uom.id)]}) + @api.multi + def get_other_taxes_afip(self): + """ + obtiene otros impuestos habilitadas en el ws de afip + y las crea si es q no existen + """ + ws = self._get_wsmtxca() + args = {'request': 'consultarTiposTributo', + 'qry_data': {'consultarTiposTributoRequest': {}}} + request, response, errors = ws.default_func_ws(**args) + if errors: + self.get_errors(errors) + if not errors and hasattr(response, 'arrayTiposTributo'): + env_tax = self.env['ws.other.tax.caea'] + res = getattr(response, 'arrayTiposTributo').codigoDescripcion + for key, val in dict(res).items(): + uom = env_tax.create_taxes(key[1], val[1]) + self.write({'other_taxes_ids': [(4, uom.id)]}) + @api.multi def get_currency_afip(self): """ diff --git a/models/ws_other_tax_caea.py b/models/ws_other_tax_caea.py new file mode 100644 index 0000000..bcc8c5f --- /dev/null +++ b/models/ws_other_tax_caea.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +from odoo import _, fields, models, exceptions +import logging + +_logger = logging.getLogger(__name__) + + +class WsOtherTaxCaea(models.Model): + _name = "ws.other.tax.caea" + _description = "Other Taxes Caea" + _inherit = 'mail.thread' + + # Atributes + code = fields.Integer( + 'Code', + required=True + ) + name = fields.Char( + 'Desc', + required=True, + size=64 + ) + + # Relaciones + tax_id = fields.Many2many( + 'account.tax', + string="OpenERP Tax" + ) + caea_config_id = fields.Many2one( + 'ws.caea.configuration' + ) + + # Funciones + def get_tax(self, code): + tax = self.search([('code', '=', code)], limit=1) + return tax + + def create_taxes(self, codigo, desc): + """ + Si el codigo devuelto x afip no esta en el sistema lo crea + """ + g_tax = self.get_tax(code=codigo) + if not g_tax and codigo != 0: + tax = self.create({'code': codigo, + 'name': desc, + }) + return tax + else: + return g_tax + + def get_cod(self, tax): + code = self.search([('tax_id', '=', tax.id)], limit=1).code + if not code: + raise exceptions.ValidationError( + _("Tax Code %s is not related in caea other tax table" + % tax.display_name) + ) + return code diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index b517096..5fb21fc 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -16,6 +16,10 @@ access_wsfe_caea_tax_payment,wsfe_caea_tax payment,model_ws_tax_caea,account.gro access_wsfe_caea_tax_user,wsfe_caea_tax user,model_ws_tax_caea,account.group_account_user,1,1,0,0 access_wsfe_caea_tax_manager,wsfe_caea_tax manager,model_ws_tax_caea,account.group_account_manager,1,1,1,1 +access_wsfe_caea_other_tax_payment,wsfe_caea_other_tax payment,model_ws_other_tax_caea,account.group_account_invoice,1,0,0,0 +access_wsfe_caea_other_tax_user,wsfe_caea_other_tax user,model_ws_other_tax_caea,account.group_account_user,1,1,0,0 +access_wsfe_caea_other_tax_manager,wsfe_caea_other_tax manager,model_ws_other_tax_caea,account.group_account_manager,1,1,1,1 + access_wsfe_caea_caea_nutiliz,wsfe_caea_nutiliz,model_ws_caea_unused_voucher_report,account.group_account_invoice,1,0,0,0 access_wsfe_caea_caea_nutiliz_user,wsfe_caea_nutiliz user,model_ws_caea_unused_voucher_report,account.group_account_user,1,1,0,0 access_wsfe_caea_caea_nutiliz_manager,wsfe_caea_nutiliz manager,model_ws_caea_unused_voucher_report,account.group_account_manager,1,1,1,1 diff --git a/views/ws_configuration_view.xml b/views/ws_configuration_view.xml index 3fb87e7..cf0405f 100644 --- a/views/ws_configuration_view.xml +++ b/views/ws_configuration_view.xml @@ -92,6 +92,21 @@ </tree> </field> </page> + <page string="Otros Tributos"> + <div class="mb-3"> + <button name="get_other_taxes_afip" + string="Get Other Taxes From AFIP" + type="object" + class="oe_stat_button"/> + </div> + <field name="other_taxes_ids"> + <tree editable="top"> + <field name="name"/> + <field name="code"/> + <field name="tax_id" widget="many2many_tags" /> + </tree> + </field> + </page> <page string="Currency"> <div class="mb-3"> <button name="get_currency_afip" -- GitLab