Skip to content

Commit

Permalink
Merge pull request #110 from reingart/main-dev-jun-2023
Browse files Browse the repository at this point in the history
Cumulative updates from develop (python3 conversion)
  • Loading branch information
reingart authored Jun 29, 2023
2 parents 66c7aba + bab7eca commit 6ae7241
Show file tree
Hide file tree
Showing 8 changed files with 262 additions and 104 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: [2.7, 3.9, 3.11]
python-version: [3.9, 3.11]

steps:
- uses: actions/checkout@v2
Expand Down
7 changes: 7 additions & 0 deletions formatos/formato_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"numero_cotizacion": str,
"numero_remito": str,
"ape": str,
"permiso_existente": str,
"incoterms": str,
"detalleincoterms": str,
"destinocmp": int,
Expand Down Expand Up @@ -188,6 +189,12 @@
"fecha_serv_desde": "fechaservdesde",
"fecha_serv_hasta": "fechaservhasta",
"fecha_venc_pago": "fechavencpago",
"tipo_expo": "concepto",
"incoterms": "incoterms",
"incoterms_ds": "detalleincoterms",
"pais_dst_cmp": "destinocmp",
"idioma_cbte": "idioma",
"permiso_existente": "permiso_existente",
"obs_generales": "otrosdatosgenerales",
"obs_comerciales": "otrosdatoscomerciales",
"resultado": "resultado",
Expand Down
12 changes: 9 additions & 3 deletions ws_sr_padron.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
from builtins import next

__author__ = "Mariano Reingart <[email protected]>"
__copyright__ = "Copyright (C) 2017 Mariano Reingart"
__license__ = "GPL 3.0"
__version__ = "3.04e"
__copyright__ = "Copyright (C) 2017-2023 Mariano Reingart"
__license__ = "LGPL-3.0-or-later"
__version__ = "3.05a"

import csv
import datetime
Expand All @@ -42,6 +42,7 @@
abrir_conf,
norm,
SoapFault,
safe_console,
)
from configparser import SafeConfigParser
from pyafipws.padron import TIPO_CLAVE, PROVINCIAS
Expand Down Expand Up @@ -97,6 +98,7 @@ class WSSrPadronA4(BaseWS):
"nro_doc",
"tipo_persona",
"estado",
"es_sucesion",
"impuestos",
"actividades",
"direccion",
Expand Down Expand Up @@ -125,6 +127,7 @@ def inicializar(self):
self.tipo_persona = "" # FISICA o JURIDICA
self.tipo_doc = self.nro_doc = 0
self.estado = "" # ACTIVO
self.es_sucesion = ""
self.denominacion = ""
self.direccion = self.localidad = self.provincia = self.cod_postal = ""
self.domicilios = []
Expand Down Expand Up @@ -274,6 +277,7 @@ def Consultar(self, id_persona):
self.nro_doc = data.get("idPersona")
self.cuit = self.nro_doc
self.estado = data.get("estadoClave")
self.es_sucesion = data.get("esSucesion")
if not "razonSocial" in data:
self.denominacion = ", ".join(
[data.get("apellido", ""), data.get("nombre", "")]
Expand Down Expand Up @@ -320,6 +324,7 @@ def main():
global CONFIG_FILE

DEBUG = "--debug" in sys.argv
safe_console()

if "--constancia" in sys.argv:
padron = WSSrPadronA5()
Expand Down Expand Up @@ -427,6 +432,7 @@ def main():
print("Denominacion:", padron.denominacion)
print("Tipo:", padron.tipo_persona, padron.tipo_doc, padron.nro_doc)
print("Estado:", padron.estado)
print("Es Sucesion:", padron.es_sucesion)
print("Direccion:", padron.direccion)
print("Localidad:", padron.localidad)
print("Provincia:", padron.provincia)
Expand Down
55 changes: 29 additions & 26 deletions wsfev1.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
from past.builtins import basestring

__author__ = "Mariano Reingart <[email protected]>"
__copyright__ = "Copyright (C) 2010-2021 Mariano Reingart"
__copyright__ = "Copyright (C) 2010-2023 Mariano Reingart"
__license__ = "LGPL-3.0-or-later"
__version__ = "3.26a"
__version__ = "3.27c"

import datetime
import decimal
Expand Down Expand Up @@ -140,9 +140,10 @@ class WSFEv1(BaseWS):
_reg_class_spec_ = "pyafipws.wsfev1.WSFEv1"

if TYPELIB:
_typelib_guid_ = '{8AE2BD1D-A216-4E98-95DB-24A11225EF67}'
_typelib_guid_ = "{8AE2BD1D-A216-4E98-95DB-24A11225EF67}"
_typelib_version_ = 1, 26
_com_interfaces_ = ['IWSFEv1']
_com_interfaces_ = ["IWSFEv1"]
##_reg_class_spec_ = "wsfev1.WSFEv1"

# Variables globales para BaseWS:
HOMO = HOMO
Expand Down Expand Up @@ -329,8 +330,8 @@ def AgregarComprador(self, doc_tipo=80, doc_nro=0, porcentaje=100.00, **kwarg):

def AgregarActividad(self, actividad_id=0, **kwarg):
"Agrego actividad a una factura (interna)"
op = { 'actividad_id': actividad_id }
self.factura['actividades'].append(op)
act = {"actividad_id": actividad_id}
self.factura["actividades"].append(act)
return True

def ObtenerCampoFactura(self, *campos):
Expand Down Expand Up @@ -381,9 +382,6 @@ def CAESolicitar(self):
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f.get("fecha_venc_pago"),
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f["fecha_venc_pago"],
"MonId": f["moneda_id"],
"MonCotiz": f["moneda_ctz"],
"PeriodoAsoc": {
Expand Down Expand Up @@ -456,7 +454,7 @@ def CAESolicitar(self):
"Actividades": [
{
"Actividad": {
'Id': actividad['actividad_id'],
"Id": actividad["actividad_id"],
}
}
for actividad in f["actividades"]
Expand Down Expand Up @@ -638,9 +636,9 @@ def CompConsultar(self, tipo_cbte, punto_vta, cbte_nro, reproceso=False):
}
copia = resultget.copy()
# TODO: ordenar / convertir opcionales (por ahora no se verifican)
del verificaciones['Opcionales']
if 'Opcionales' in copia:
del copia['Opcionales']
del verificaciones["Opcionales"]
if "Opcionales" in copia:
del copia["Opcionales"]
verifica(verificaciones, copia, difs)
if difs:
print("Diferencias:", difs)
Expand Down Expand Up @@ -802,9 +800,6 @@ def CAESolicitarX(self):
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f.get("fecha_venc_pago"),
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f["fecha_venc_pago"],
"MonId": f["moneda_id"],
"MonCotiz": f["moneda_ctz"],
"PeriodoAsoc": {
Expand Down Expand Up @@ -1034,9 +1029,6 @@ def CAEARegInformativo(self):
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f.get("fecha_venc_pago"),
"FchServDesde": f.get("fecha_serv_desde"),
"FchServHasta": f.get("fecha_serv_hasta"),
"FchVtoPago": f["fecha_venc_pago"],
"MonId": f["moneda_id"],
"MonCotiz": f["moneda_ctz"],
"PeriodoAsoc": {
Expand Down Expand Up @@ -1095,6 +1087,15 @@ def CAEARegInformativo(self):
for opcional in f["opcionales"]
]
or None,
"Actividades": [
{
"Actividad": {
"Id": actividad["actividad_id"],
}
}
for actividad in f["actividades"]
]
or None,
"CAEA": f["caea"],
"CbteFchHsGen": f.get("fecha_hs_gen"),
}
Expand Down Expand Up @@ -1301,13 +1302,15 @@ def ParamGetPtosVenta(self, sep="|"):

@inicializar_y_capturar_excepciones
def ParamGetActividades(self, sep="|"):
"Recuperador de valores referenciales de códigos de Actividades"
"Recuperador de valores referenciales de c�digos de Actividades"
ret = self.client.FEParamGetActividades(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit},
)
res = ret['FEParamGetActividades']
return [(u"%(Id)s\t%(Orden)s\t%(Desc)s" % p['ActividadesTipo']).replace("\t", sep)
for p in res['ResultGet']]
Auth={"Token": self.Token, "Sign": self.Sign, "Cuit": self.Cuit},
)
res = ret["FEParamGetActividadesResult"]
return [
("%(Id)s\t%(Orden)s\t%(Desc)s" % p["ActividadesTipo"]).replace("\t", sep)
for p in res["ResultGet"]
]


def p_assert_eq(a, b):
Expand Down Expand Up @@ -1500,7 +1503,7 @@ def main():
if "--rg4540" in sys.argv:
wsfev1.AgregarPeriodoComprobantesAsociados("20200101", "20200131")

if '--rg5259' in sys.argv:
if "--rg5259" in sys.argv:
wsfev1.AgregarActividad(960990)

# agregar la factura creada internamente para solicitud múltiple:
Expand Down
75 changes: 68 additions & 7 deletions wsfexv1.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
from builtins import str

__author__ = "Mariano Reingart ([email protected])"
__copyright__ = "Copyright (C) 2011-2021 Mariano Reingart"
__copyright__ = "Copyright (C) 2011-2023 Mariano Reingart"
__license__ = "LGPL-3.0-or-later"
__version__ = "3.10a"
__version__ = "3.11a"

import datetime
import decimal
Expand All @@ -44,6 +44,7 @@ class WSFEXv1(BaseWS):
"GetCMP",
"AgregarPermiso",
"AgregarCmpAsoc",
"AgregarActividad",
"GetParamMon",
"GetParamTipoCbte",
"GetParamTipoExpo",
Expand All @@ -67,6 +68,7 @@ class WSFEXv1(BaseWS):
"GetParametro",
"GetLastCMP",
"GetLastID",
"GetParamActividades",
"Dummy",
"Conectar",
"SetTicketAcceso",
Expand Down Expand Up @@ -192,6 +194,7 @@ def CrearFactura(
"cbtes_asoc": [],
"permisos": [],
"detalles": [],
"actividades": [],
}
self.factura = fact

Expand Down Expand Up @@ -237,6 +240,12 @@ def AgregarCmpAsoc(
)
return True

def AgregarActividad(self, actividad_id=0, **kwarg):
"Agrego actividad a una factura (interna)"
act = {"actividad_id": actividad_id}
self.factura["actividades"].append(act)
return True

@inicializar_y_capturar_excepciones
def Authorize(self, id):
"Autoriza la factura cargada en memoria"
Expand Down Expand Up @@ -304,6 +313,16 @@ def Authorize(self, id):
}
for d in f["detalles"]
],
"Actividades": f["actividades"]
and [
{
"Actividad": {
"Id": a["actividad_id"],
}
}
for a in f["actividades"]
]
or None,
},
)

Expand Down Expand Up @@ -748,23 +767,57 @@ def GetParamPtosVenta(self, sep="|"):
res = ret["FEXGetPARAM_PtoVentaResult"].get("FEXResultGet")
ret = []
for pu in res:
u = pu["ClsFEXResponse_PtoVenta"]
p = pu["ClsFEXResponse_PtoVenta"]
try:
r = {
"nro": u.get("Pve_Nro"),
"baja": u.get("Pve_FchBaj"),
"bloqueado": u.get("Pve_Bloqueado"),
"nro": p.get("Pve_Nro"),
"baja": p.get("Pve_FchBaj"),
"bloqueado": p.get("Pve_Bloqueado"),
}
except Exception as e:
print(e)
ret.append(r)
return [
(u"%(nro)s\tBloqueado:%(bloqueado)s\tFchBaja:%(baja)s" % r).replace(
("%(nro)s\tBloqueado:%(bloqueado)s\tFchBaja:%(baja)s" % r).replace(
"\t", sep
)
for r in ret
]

@inicializar_y_capturar_excepciones
def GetParamActividades(self, sep="|"):
"Recuperar lista de valores referenciales de códigos de Idiomas"
ret = self.client.FEXGetPARAM_Actividades(
Auth={
"Token": self.Token,
"Sign": self.Sign,
"Cuit": self.Cuit,
}
)
result = ret["FEXGetPARAM_ActividadesResult"]
self.__analizar_errores(result)

ret = []
for u in result.get("FEXResultGet", []):
u = u["ClsFEXResponse_ActividadTipo"]
try:
r = {
"codigo": u.get("Id"),
"ds": u.get("Desc"),
"orden": u.get("Orden"),
}
except Exception as e:
print(e)

ret.append(r)
if sep:
return [
("\t%(codigo)s\t%(ds)s\t%(orden)s\t" % it).replace("\t", sep)
for it in ret
]
else:
return ret


class WSFEX(WSFEXv1):
"Wrapper para retrocompatibilidad con WSFEX"
Expand Down Expand Up @@ -936,6 +989,8 @@ def main():
cbteasoc_tipo, cbteasoc_pto_vta, cbteasoc_nro, cbteasoc_cuit
)

ok = wsfexv1.AgregarActividad(1234)

##id = "99000000000100" # número propio de transacción
# obtengo el último ID y le adiciono 1
# (advertencia: evitar overflow y almacenar!)
Expand Down Expand Up @@ -1039,6 +1094,12 @@ def main():
for r in ret:
print("||%(codigo)s||%(ds)s||" % r)

if "--rg5259" in sys.argv:
print("=== Actividades ===")
ret = wsfexv1.GetParamActividades(sep=False)
for r in ret:
print("||%(codigo)s||%(ds)s||" % r)

if "--ctz" in sys.argv:
print(wsfexv1.GetParamCtz("DOL"))

Expand Down
Loading

0 comments on commit 6ae7241

Please sign in to comment.