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