From daac7f3a28f93a5b6c90a664ddc4f0f1c8b2ebf4 Mon Sep 17 00:00:00 2001 From: Serfe-com Date: Thu, 27 Mar 2025 20:39:10 +0000 Subject: [PATCH 1/3] Agregada condicion de iva del cliente al generar la facturacion --- wsfev1.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/wsfev1.py b/wsfev1.py index a97170d3d..9bf688ab1 100644 --- a/wsfev1.py +++ b/wsfev1.py @@ -134,7 +134,7 @@ def CrearFactura(self, concepto=1, tipo_doc=80, nro_doc="", tipo_cbte=1, punto_v cbt_desde=0, cbt_hasta=0, imp_total=0.00, imp_tot_conc=0.00, imp_neto=0.00, imp_iva=0.00, imp_trib=0.00, imp_op_ex=0.00, fecha_cbte="", fecha_venc_pago=None, fecha_serv_desde=None, fecha_serv_hasta=None, #-- - moneda_id="PES", moneda_ctz="1.0000", caea=None, fecha_hs_gen=None, **kwargs + moneda_id="PES", moneda_ctz="1.0000", cond_iva_receptor=1, caea=None, fecha_hs_gen=None, **kwargs ): "Creo un objeto factura (interna)" @@ -148,6 +148,7 @@ def CrearFactura(self, concepto=1, tipo_doc=80, nro_doc="", tipo_cbte=1, punto_v 'fecha_cbte': fecha_cbte, 'fecha_venc_pago': fecha_venc_pago, 'moneda_id': moneda_id, 'moneda_ctz': moneda_ctz, + 'cond_iva_receptor': cond_iva_receptor, 'concepto': concepto, 'fecha_hs_gen': fecha_hs_gen, 'cbtes_asoc': [], 'tributos': [], @@ -254,6 +255,7 @@ def CAESolicitar(self): 'FchVtoPago': f.get('fecha_venc_pago'), 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], + 'CondicionIVAReceptorId': f['cond_iva_receptor'], 'CbtesAsoc': f['cbtes_asoc'] and [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -392,6 +394,7 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'FchVtoPago': f.get('fecha_venc_pago'), 'MonId': f['moneda_id'], 'MonCotiz': float(f['moneda_ctz']), + 'CondicionIVAReceptorId': f['cond_iva_receptor'], 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -455,6 +458,7 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'fecha_venc_pago': resultget.get('FchVtoPago'), 'moneda_id': resultget.get('MonId'), 'moneda_ctz': resultget.get('MonCotiz'), + 'cond_iva_receptor': resultget.get('CondicionIVAReceptorId'), 'cbtes_asoc': [ { 'tipo': cbte_asoc['CbteAsoc']['Tipo'], @@ -574,6 +578,7 @@ def CAESolicitarX(self): 'FchVtoPago': f.get('fecha_venc_pago'), 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], + 'CondicionIVAReceptorId': f['cond_iva_receptor'], 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -763,6 +768,7 @@ def CAEARegInformativo(self): 'FchVtoPago': f.get('fecha_venc_pago'), 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], + 'CondicionIVAReceptorId': f['cond_iva_receptor'], 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -1220,6 +1226,7 @@ def main(): p_assert_eq(wsfev1.ObtenerTagXml('CbteFch'), wsfev1.FechaCbte) p_assert_eq(wsfev1.ObtenerTagXml('MonId'), "PES") p_assert_eq(wsfev1.ObtenerTagXml('MonCotiz'), "1") + p_assert_eq(wsfev1.ObtenerTagXml('CondicionIVAReceptorId'), "1") p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80") p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912") From f5127775ce7367e92af3a1e3fd724bb9a4d32363 Mon Sep 17 00:00:00 2001 From: Ian Gonzalez Date: Sat, 31 May 2025 21:16:54 -0300 Subject: [PATCH 2/3] feat: support activity codes --- wsfev1.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/wsfev1.py b/wsfev1.py index 9bf688ab1..57310cfdf 100644 --- a/wsfev1.py +++ b/wsfev1.py @@ -134,7 +134,7 @@ def CrearFactura(self, concepto=1, tipo_doc=80, nro_doc="", tipo_cbte=1, punto_v cbt_desde=0, cbt_hasta=0, imp_total=0.00, imp_tot_conc=0.00, imp_neto=0.00, imp_iva=0.00, imp_trib=0.00, imp_op_ex=0.00, fecha_cbte="", fecha_venc_pago=None, fecha_serv_desde=None, fecha_serv_hasta=None, #-- - moneda_id="PES", moneda_ctz="1.0000", cond_iva_receptor=1, caea=None, fecha_hs_gen=None, **kwargs + moneda_id="PES", moneda_ctz="1.0000", cond_iva_receptor=1, act_codigos=[], caea=None, fecha_hs_gen=None, **kwargs ): "Creo un objeto factura (interna)" @@ -149,6 +149,7 @@ def CrearFactura(self, concepto=1, tipo_doc=80, nro_doc="", tipo_cbte=1, punto_v 'fecha_venc_pago': fecha_venc_pago, 'moneda_id': moneda_id, 'moneda_ctz': moneda_ctz, 'cond_iva_receptor': cond_iva_receptor, + 'act_codigos': act_codigos, 'concepto': concepto, 'fecha_hs_gen': fecha_hs_gen, 'cbtes_asoc': [], 'tributos': [], @@ -256,6 +257,11 @@ def CAESolicitar(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], + 'Actividades': f['act_codigos'] and [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': f['cbtes_asoc'] and [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -395,6 +401,11 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'MonId': f['moneda_id'], 'MonCotiz': float(f['moneda_ctz']), 'CondicionIVAReceptorId': f['cond_iva_receptor'], + 'Actividades': f['act_codigos'] and [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -459,6 +470,9 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'moneda_id': resultget.get('MonId'), 'moneda_ctz': resultget.get('MonCotiz'), 'cond_iva_receptor': resultget.get('CondicionIVAReceptorId'), + 'act_codigos': [ + actividad['Actividad']['Id'] + for actividad in resultget.get('Actividades', [])], 'cbtes_asoc': [ { 'tipo': cbte_asoc['CbteAsoc']['Tipo'], @@ -579,6 +593,11 @@ def CAESolicitarX(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], + 'Actividades': f['act_codigos'] and [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -769,6 +788,11 @@ def CAEARegInformativo(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], + 'Actividades': f['act_codigos'] and [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -1128,6 +1152,9 @@ def main(): wsfev1.AgregarComprador(80, "30500010912", 99.99) wsfev1.AgregarComprador(80, "30999032083", 0.01) + act_codes = [883101, 883102] + wsfev1.EstablecerCampoFactura("act_codigos", act_codes) + # datos de Factura de Crédito Electrónica MiPyMEs (FCE): if '--fce' in sys.argv: wsfev1.AgregarOpcional(2101, "2850590940090418135201") # CBU @@ -1229,6 +1256,7 @@ def main(): p_assert_eq(wsfev1.ObtenerTagXml('CondicionIVAReceptorId'), "1") p_assert_eq(wsfev1.ObtenerTagXml('DocTipo'), "80") p_assert_eq(wsfev1.ObtenerTagXml('DocNro'), "30500010912") + p_assert_eq(wsfev1.ObtenerTagXml('Actividades', 'Actividad', 0, 'Id'), "883101") if "--parametros" in sys.argv: import codecs From b180f80010bd1f226513d0fde5e51fc7dd5a5810 Mon Sep 17 00:00:00 2001 From: Ian Gonzalez Date: Fri, 13 Jun 2025 14:06:38 -0300 Subject: [PATCH 3/3] fix: send activities tag if activities exists --- wsfev1.py | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/wsfev1.py b/wsfev1.py index 57310cfdf..68e24bed7 100644 --- a/wsfev1.py +++ b/wsfev1.py @@ -257,11 +257,6 @@ def CAESolicitar(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], - 'Actividades': f['act_codigos'] and [ - {'Actividad': { - 'Id': actividad_id, - }} - for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': f['cbtes_asoc'] and [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -298,6 +293,12 @@ def CAESolicitar(self): 'DocNro': comprador['doc_nro'], 'Porcentaje': comprador['porcentaje'], }} for comprador in f['compradores']] or None, + **({'Actividades': [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos'] + ]} if f['act_codigos'] else {}) } }] }) @@ -401,11 +402,6 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'MonId': f['moneda_id'], 'MonCotiz': float(f['moneda_ctz']), 'CondicionIVAReceptorId': f['cond_iva_receptor'], - 'Actividades': f['act_codigos'] and [ - {'Actividad': { - 'Id': actividad_id, - }} - for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -442,6 +438,12 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False): 'DocNro': comprador['doc_nro'], 'Porcentaje': comprador['porcentaje'], }} for comprador in f['compradores']], + **({'Actividades': [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos'] + ]} if f['act_codigos'] else {}) } verifica(verificaciones, resultget.copy(), difs) if difs: @@ -593,11 +595,6 @@ def CAESolicitarX(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], - 'Actividades': f['act_codigos'] and [ - {'Actividad': { - 'Id': actividad_id, - }} - for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -628,6 +625,12 @@ def CAESolicitarX(self): 'Id': opcional['opcional_id'], 'Valor': opcional['valor'], }} for opcional in f['opcionales']] or None, + **({'Actividades': [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos'] + ]} if f['act_codigos'] else {}) } } for f in self.facturas] }) @@ -788,11 +791,6 @@ def CAEARegInformativo(self): 'MonId': f['moneda_id'], 'MonCotiz': f['moneda_ctz'], 'CondicionIVAReceptorId': f['cond_iva_receptor'], - 'Actividades': f['act_codigos'] and [ - {'Actividad': { - 'Id': actividad_id, - }} - for actividad_id in f['act_codigos']] or None, 'CbtesAsoc': [ {'CbteAsoc': { 'Tipo': cbte_asoc['tipo'], @@ -828,6 +826,12 @@ def CAEARegInformativo(self): }} for opcional in f['opcionales']] or None, 'CAEA': f['caea'], 'CbteFchHsGen': f.get('fecha_hs_gen'), + **({'Actividades': [ + {'Actividad': { + 'Id': actividad_id, + }} + for actividad_id in f['act_codigos'] + ]} if f['act_codigos'] else {}) } }] })