Skip to content

Commit

Permalink
WSFEX: Agrego nuevo campo Fecha_pago
Browse files Browse the repository at this point in the history
REL #73
  • Loading branch information
lukio committed Oct 21, 2019
1 parent b2e577d commit dc702d0
Showing 1 changed file with 38 additions and 36 deletions.
74 changes: 38 additions & 36 deletions wsfexv1.py
Expand Up @@ -10,9 +10,9 @@
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.

"""Módulo para obtener CAE, código de autorización de impresión o electrónico,
del web service WSFEXv1 de AFIP (Factura Electrónica Exportación Versión 1)
según RG2758/2010 (Registros Especiales Aduaneros) y RG3689/14 (servicios)
"""Módulo para obtener CAE, código de autorización de impresión o electrónico,
del web service WSFEXv1 de AFIP (Factura Electrónica Exportación Versión 1)
según RG2758/2010 (Registros Especiales Aduaneros) y RG3689/14 (servicios)
http://www.sistemasagiles.com.ar/trac/wiki/FacturaElectronicaExportacion
"""

Expand All @@ -32,7 +32,7 @@


class WSFEXv1(BaseWS):
"Interfaz para el WebService de Factura Electrónica Exportación Versión 1"
"Interfaz para el WebService de Factura Electrónica Exportación Versión 1"
_public_methods_ = ['CrearFactura', 'AgregarItem', 'Authorize', 'GetCMP',
'AgregarPermiso', 'AgregarCmpAsoc',
'GetParamMon', 'GetParamTipoCbte', 'GetParamTipoExpo',
Expand All @@ -59,7 +59,7 @@ class WSFEXv1(BaseWS):
# Variables globales para BaseWS:
HOMO = HOMO
WSDL = WSDL
Version = "%s %s" % (__version__, HOMO and 'Homologación' or '')
Version = "%s %s" % (__version__, HOMO and 'Homologación' or '')
factura = None

def inicializar(self):
Expand Down Expand Up @@ -91,9 +91,9 @@ def CrearFactura(self, tipo_cbte=19, punto_vta=1, cbte_nro=0, fecha_cbte=None,
nombre_cliente="", cuit_pais_cliente="", domicilio_cliente="",
id_impositivo="", moneda_id="PES", moneda_ctz=1.0,
obs_comerciales="", obs_generales="", forma_pago="", incoterms="",
idioma_cbte=7, incoterms_ds=None, **kwargs):
idioma_cbte=7, incoterms_ds=None, fecha_pago=None, **kwargs):
"Creo un objeto factura (interna)"
# Creo una factura electronica de exportación
# Creo una factura electronica de exportación

fact = {'tipo_cbte': tipo_cbte, 'punto_vta': punto_vta,
'cbte_nro': cbte_nro, 'fecha_cbte': fecha_cbte,
Expand All @@ -115,6 +115,7 @@ def CrearFactura(self, tipo_cbte=19, punto_vta=1, cbte_nro=0, fecha_cbte=None,
'cbtes_asoc': [],
'permisos': [],
'detalles': [],
'fecha_pago': fecha_pago,
}
self.factura = fact

Expand Down Expand Up @@ -198,7 +199,8 @@ def Authorize(self, id):
'Pro_precio_uni': d['precio'],
'Pro_bonificacion': d['bonif'],
'Pro_total_item': d['importe'],
}} for d in f['detalles']],
}} for d in f['detalles']],
'Fecha_pago': f['fecha_pago'],
})

result = ret['FEXAuthorizeResult']
Expand Down Expand Up @@ -257,7 +259,7 @@ def GetCMP(self, tipo_cbte, punto_vta, cbte_nro):

@inicializar_y_capturar_excepciones
def GetLastCMP(self, tipo_cbte, punto_vta):
"Recuperar último número de comprobante emitido"
"Recuperar último número de comprobante emitido"
ret = self.client.FEXGetLast_CMP(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit,
'Cbte_Tipo': tipo_cbte,
Expand All @@ -273,7 +275,7 @@ def GetLastCMP(self, tipo_cbte, punto_vta):

@inicializar_y_capturar_excepciones
def GetLastID(self):
"Recuperar último número de transacción (ID)"
"Recuperar último número de transacción (ID)"
ret = self.client.FEXGetLast_ID(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetLast_IDResult']
Expand Down Expand Up @@ -344,7 +346,7 @@ def GetParamMon(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamDstPais(self, sep="|"):
"Recuperador de valores referenciales de códigos de Países"
"Recuperador de valores referenciales de códigos de Países"
ret = self.client.FEXGetPARAM_DST_pais(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetPARAM_DST_paisResult']
Expand All @@ -367,7 +369,7 @@ def GetParamDstPais(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamDstCUIT(self, sep="|"):
"Recuperar lista de valores referenciales de CUIT de Países"
"Recuperar lista de valores referenciales de CUIT de Países"
ret = self.client.FEXGetPARAM_DST_CUIT(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetPARAM_DST_CUITResult']
Expand All @@ -390,7 +392,7 @@ def GetParamDstCUIT(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamTipoCbte(self, sep="|"):
"Recuperador de valores referenciales de códigos de Tipo de comprobantes"
"Recuperador de valores referenciales de códigos de Tipo de comprobantes"
ret = self.client.FEXGetPARAM_Cbte_Tipo(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetPARAM_Cbte_TipoResult']
Expand All @@ -416,7 +418,7 @@ def GetParamTipoCbte(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamTipoExpo(self, sep="|"):
"Recuperador de valores referenciales de códigos de Tipo de exportación"
"Recuperador de valores referenciales de códigos de Tipo de exportación"
ret = self.client.FEXGetPARAM_Tipo_Expo(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetPARAM_Tipo_ExpoResult']
Expand All @@ -441,7 +443,7 @@ def GetParamTipoExpo(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamIdiomas(self, sep="|"):
"Recuperar lista de valores referenciales de códigos de Idiomas"
"Recuperar lista de valores referenciales de códigos de Idiomas"
ret = self.client.FEXGetPARAM_Idiomas(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit, })
result = ret['FEXGetPARAM_IdiomasResult']
Expand Down Expand Up @@ -490,7 +492,7 @@ def GetParamIncoterms(self, sep="|"):

@inicializar_y_capturar_excepciones
def GetParamCtz(self, moneda_id):
"Recuperador de cotización de moneda"
"Recuperador de cotización de moneda"
ret = self.client.FEXGetPARAM_Ctz(
Auth={'Token': self.Token, 'Sign': self.Sign, 'Cuit': self.Cuit},
Mon_id=moneda_id,
Expand Down Expand Up @@ -562,7 +564,7 @@ class WSFEX(WSFEXv1):

def __init__(self):
WSFEXv1.__init__(self)
self.Version = "%s %s WSFEXv1" % (__version__, HOMO and 'Homologación' or '')
self.Version = "%s %s WSFEXv1" % (__version__, HOMO and 'Homologación' or '')

def Conectar(self, url="", proxy=""):
# Ajustar URL de V0 a V1:
Expand All @@ -575,7 +577,7 @@ def Conectar(self, url="", proxy=""):
return WSFEXv1.Conectar(self, cache=None, wsdl=url, proxy=proxy)


# busco el directorio de instalación (global para que no cambie si usan otra dll)
# busco el directorio de instalación (global para que no cambie si usan otra dll)
INSTALL_DIR = WSFEXv1.InstallDir = get_install_dir()


Expand All @@ -598,9 +600,9 @@ def p_assert_eq(a,b):
# win32com.server.localserver.serve([WSFEXv1._reg_clsid_])
else:

# Crear objeto interface Web Service de Factura Electrónica de Exportación
# Crear objeto interface Web Service de Factura Electrónica de Exportación
wsfexv1 = WSFEXv1()
# Setear token y sing de autorización (pasos previos)
# Setear token y sing de autorización (pasos previos)

# obteniendo el TA para pruebas
from wsaa import WSAA
Expand All @@ -610,7 +612,7 @@ def p_assert_eq(a,b):
# CUIT del emisor (debe estar registrado en la AFIP)
wsfexv1.Cuit = "20267565393"

# Conectar al Servicio Web de Facturación (producción u homologación)
# Conectar al Servicio Web de Facturación (producción u homologación)
if "--prod" in sys.argv:
wsdl = "https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL"
else:
Expand All @@ -630,27 +632,27 @@ def p_assert_eq(a,b):
if "--prueba" in sys.argv:
try:
# Establezco los valores de la factura a autorizar:
tipo_cbte = '--nc' in sys.argv and 21 or 19 # FC/NC Expo (ver tabla de parámetros)
tipo_cbte = '--nc' in sys.argv and 21 or 19 # FC/NC Expo (ver tabla de parámetros)
punto_vta = 7
# Obtengo el último número de comprobante y le agrego 1
# Obtengo el último número de comprobante y le agrego 1
cbte_nro = int(wsfexv1.GetLastCMP(tipo_cbte, punto_vta)) + 1
fecha_cbte = datetime.datetime.now().strftime("%Y%m%d")
tipo_expo = 1 # tipo de exportación (ver tabla de parámetros)
tipo_expo = 1 # tipo de exportación (ver tabla de parámetros)
permiso_existente = (tipo_cbte not in (20, 21) or tipo_expo!=1) and "S" or ""
print "permiso_existente", permiso_existente
dst_cmp = 203 # país destino
dst_cmp = 203 # país destino
cliente = "Joao Da Silva"
cuit_pais_cliente = "50000000016"
domicilio_cliente = u"Rúa Ñ°76 km 34.5 Alagoas"
domicilio_cliente = u"Rúa Ñ°76 km 34.5 Alagoas"
id_impositivo = "PJ54482221-l"
moneda_id = "DOL" # para reales, "DOL" o "PES" (ver tabla de parámetros)
moneda_id = "DOL" # para reales, "DOL" o "PES" (ver tabla de parámetros)
moneda_ctz = "8.00" # wsfexv1.GetParamCtz('DOL') <- no funciona
obs_comerciales = "Observaciones comerciales"
obs = "Sin observaciones"
forma_pago = "30 dias"
incoterms = "FOB" # (ver tabla de parámetros)
incoterms = "FOB" # (ver tabla de parámetros)
incoterms_ds = "Flete a Bordo"
idioma_cbte = 1 # (ver tabla de parámetros)
idioma_cbte = 1 # (ver tabla de parámetros)
imp_total = "250.00"

# Creo una factura (internamente, no se llama al WebService):
Expand All @@ -666,9 +668,9 @@ def p_assert_eq(a,b):
ds = "Producto Tipo 1 Exportacion MERCOSUR ISO 9001"
qty = 2
precio = "150.00"
umed = 1 # Ver tabla de parámetros (unidades de medida)
umed = 1 # Ver tabla de parámetros (unidades de medida)
bonif = "50.00"
imp_total = "250.00" # importe total final del artículo
imp_total = "250.00" # importe total final del artículo
# lo agrego a la factura (internamente, no se llama al WebService):
ok = wsfexv1.AgregarItem(codigo, ds, qty, umed, precio, imp_total, bonif)
ok = wsfexv1.AgregarItem(codigo, ds, qty, umed, precio, imp_total, bonif)
Expand All @@ -677,7 +679,7 @@ def p_assert_eq(a,b):
# Agrego un permiso (ver manual para el desarrollador)
if permiso_existente:
id = "99999AAXX999999A"
dst = 225 # país destino de la mercaderia
dst = 225 # país destino de la mercaderia
ok = wsfexv1.AgregarPermiso(id, dst)

# Agrego un comprobante asociado (solo para N/C o N/D)
Expand All @@ -688,12 +690,12 @@ def p_assert_eq(a,b):
cbteasoc_cuit = 20111111111
wsfexv1.AgregarCmpAsoc(cbteasoc_tipo, cbteasoc_pto_vta, cbteasoc_nro, cbteasoc_cuit)

##id = "99000000000100" # número propio de transacción
# obtengo el último ID y le adiciono 1
##id = "99000000000100" # número propio de transacción
# obtengo el último ID y le adiciono 1
# (advertencia: evitar overflow y almacenar!)
id = long(wsfexv1.GetLastID()) + 1

# Llamo al WebService de Autorización para obtener el CAE
# Llamo al WebService de Autorización para obtener el CAE
cae = wsfexv1.Authorize(id)

print "Comprobante", tipo_cbte, wsfexv1.CbteNro
Expand Down Expand Up @@ -776,7 +778,7 @@ def p_assert_eq(a,b):
print "||%(id)s||%(ds)s||%(vig_desde)s||%(vig_hasta)s||" % u
umeds = dict([(u.get('id', ""),u.get('ds', "")) for u in umedidas])

print u"=== Código Pais Destino ==="
print u"=== Código Pais Destino ==="
ret = wsfexv1.GetParamDstPais(sep=False)
for r in ret:
print "||%(codigo)s||%(ds)s||" % r
Expand Down

0 comments on commit dc702d0

Please sign in to comment.