WSFEX: pyafipws devuelve id de comprobante en vez de contabilizarlo
lukio opened this issue · 2 comments
WSFEX pyafipws intenta reprocesar un comprobante cuando se le envía un ID. En vez de contabilizar un nuevo comprobante devuelve un xml con la información para poder reprocesar y recuperar una factura existente.
Expected nothing
Got:
'<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n<soap:Header/>\n<soap:Body>\n <FEXAuthorize xmlns="http://ar.gov.afip.dif.fexv1/">\n <Auth><Cuit>30710158254</Cuit></Auth><Cmp><Id>2</Id><Fecha_cbte>20190718</Fecha_cbte><Cbte_Tipo>21</Cbte_Tipo><Punto_vta>5000</Punto_vta>
<Cbte_nro>1</Cbte_nro><Tipo_expo>2</Tipo_expo><Permiso_existente></Permiso_existente><Dst_cmp>159</Dst_cmp><Cliente>Party</Cliente><Cuit_pais_cliente>55000001715</Cuit_pais_cliente><Domicilio_cliente>
- - - </Domicilio_cliente><Moneda_Id>PES</Moneda_Id><Moneda_ctz>1.000000</Moneda_ctz><Obs_comerciales>Term</Obs_comerciales><Imp_total>220.00</Imp_total>
<Forma_pago>Term</Forma_pago><Incoterms>FOB</Incoterms><Incoterms_Ds>FREE ON BOARD</Incoterms_Ds><Idioma_cbte>1</Idioma_cbte><Items><Item><Pro_ds>-</Pro_ds><Pro_qty>5.0</Pro_qty>
<Pro_umed>7</Pro_umed><Pro_precio_uni>40</Pro_precio_uni><Pro_total_item>200.00</Pro_total_item></Item><Item><Pro_codigo>0</Pro_codigo><Pro_ds>Test</Pro_ds><Pro_qty>1.0</Pro_qty>
<Pro_umed>7</Pro_umed><Pro_precio_uni>20</Pro_precio_uni><Pro_total_item>20.00</Pro_total_item></Item></Items></Cmp></FEXAuthorize>\n</soap:Body>\n</soap:Envelope>'
----------------------------------------------------------------------
File "/opt/trytond/untref5/modules_extra/account_invoice_ar/tests/scenario_invoice_pos_electronic_wsfex.rst", line 314, in scenario_invoice_pos_electronic_wsfex.rst
Failed example:
credit_note.transactions[0].pyafipws_xml_response
Expected nothing
Got:
'<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header><FEHeaderInfo xmlns="http://ar.gov.afip.dif.fexv1/"><ambiente>Homologacion - efa</ambiente>
<fecha>2019-07-18T16:21:52.6216477-03:00</fecha><id>1.5.4.0</id></FEHeaderInfo></soap:Header><soap:Body><FEXAuthorizeResponse xmlns="http://ar.gov.afip.dif.fexv1/"><FEXAuthorizeResult><FEXResultAuth><Id>2</Id><Cuit>30710158254</Cuit><Cbte_tipo>19</Cbte_tipo>
<Punto_vta>3</Punto_vta><Cbte_nro>10</Cbte_nro><Cae>65474004369626</Cae><Fch_venc_Cae>20151129</Fch_venc_Cae><Fch_cbte>20151119</Fch_cbte><Resultado>A</Resultado>
<Reproceso>S</Reproceso><Motivos_Obs /></FEXResultAuth><FEXErr><ErrCode>0</ErrCode><ErrMsg>OK</ErrMsg></FEXErr><FEXEvents><EventCode>0</EventCode><EventMsg>Ok</EventMsg></FEXEvents>
</FEXAuthorizeResult></FEXAuthorizeResponse></soap:Body></soap:Envelope>\r\n'
Este es un error encontrado creando el test para WSFEX #155
De: https://www.sistemasagiles.com.ar/trac/wiki/ManualPyAfipWs#M%C3%A9todos3
Como último paso, se debe llamar al método Authorize con los siguiente parámetros:
- id: Número de identificación secuencial (debe almacenarse en el sistema local) No es obligatorio llamar a WSFEX.!GetLastID, puede utilizarse un dato local secuencial.
Si no hubiere inconvenientes, la llamada debe devolver el CAE y se establece el atributo WSFEX.Resultado = "A" (Aceptado) y WSFEX.Vencimiento. Sino, devuelve:
- cae = "": La interfase no pudo procesar la respuesta del WebService, o bien la conexión a internet esta caída, las direcciones de los servidores son incorrectas, o el servicio web rechazo los datos de la factura a generar. Se establece el atributo WSFXE.Resultado = "R" (Rechazado) y WSFEX.Obs con los diversos motivos de rechazo proporcionados por el webservice (ver WSFE.Motivo):
Aún devolviendo el CAE y con el resultado Aceptado, puede haber un motivo (ej 01), que funcionan como advertencia para revisar la base de datos y corregir posibles irregularidades.
Advertencia: Revisar las consideraciones de reproceso al igual que con WSFE.
Se esta enviando id del registro en vez de invocar a GetLastID. Tampoco se esta guardando una secuencia específica para esto. Lo mejor es llamar siempre a GetLastID antes de llamar a Authorize.
Agregar un campo nuevo llamado pyafipws_wsfex_id para guardar el id enviado?