public wsbfe.BFEResponseAuthorize BFEAuthorize(RequestBatch docBatch, Settings oSettings) { wsbfe.ClsBFERequest objBFERequest = new wsbfe.ClsBFERequest(); wsbfe.BFEResponseAuthorize objBFEResponseAuthorize = new wsbfe.BFEResponseAuthorize(); wsbfe.BFEResponse_LastID objBFEResponseLastID = null; DBEngine.SQLEngine sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); int i = 0; try { //DEBUG LINE if (Convert.ToBoolean(oSettings.ActivarDebug)) Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objBFEAuthRequest), oSettings.PathDebug + "\\ClsBFEAuthRequest-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); //Si no tiene identificador único hay que generarlo if (docBatch.BatchUniqueId == "AUTO") { objBFEResponseLastID = GetLastBatchUniqueId(); if (objBFEResponseLastID.BFEResultGet == null) { sqlEngine.LogError(docBatch.RequestHeaders[0].SQLID, "0", "Autorización", "Error AFIP al obtener el último nro de requerimiento (" + objBFEResponseLastID.BFEErr.ErrCode + ") " + objBFEResponseLastID.BFEErr.ErrMsg); } else { objBFEResponseLastID.BFEResultGet.Id = objBFEResponseLastID.BFEResultGet.Id + 1; docBatch.BatchUniqueId = (objBFEResponseLastID.BFEResultGet.Id).ToString(); //Guardar Unique Batch ID que luego se utilizara para reprocesos y obtener CAE sqlEngine.UpdateCabeceraBatchUniqueId(docBatch.RequestHeaders[0].SQLID, docBatch.BatchUniqueId); } } //DEBUG LINE if (Convert.ToBoolean(oSettings.ActivarDebug)) Utils.Utils.DebugLine(Utils.Utils.SerializeObject(docBatch), oSettings.PathDebug + "\\DocumentBatch-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); string fieldName = ""; string seccionName = ""; try { seccionName = "Cabecera"; fieldName = "BatchUniqueId"; objBFERequest.Id = (long)Convert.ToDouble(docBatch.BatchUniqueId); fieldName = "TipoComprobante"; objBFERequest.Tipo_cbte = Convert.ToInt16(docBatch.RequestHeaders[0].TipoComprobante); fieldName = "PuntoVenta"; objBFERequest.Punto_vta = Convert.ToInt16(docBatch.RequestHeaders[0].PuntoVenta); fieldName = "NroComprobanteDesde"; objBFERequest.Cbte_nro = (long)Convert.ToDouble(docBatch.RequestHeaders[0].NroComprobanteDesde); fieldName = "ImporteMonedaFacturacion"; objBFERequest.Imp_total = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteMonedaFacturacion); fieldName = "FechaComprobante"; objBFERequest.Fecha_cbte = Convert.ToDateTime(docBatch.RequestHeaders[0].FechaComprobante).ToString("yyyyMMdd"); fieldName = "ImportePercepcionIIBBMonedaFacturacion"; objBFERequest.Imp_iibb = Convert.ToDouble(docBatch.RequestHeaders[0].ImportePercepcionIIBBMonedaFacturacion); fieldName = "ImporteImpuestosInternosMonedaFacturacion"; objBFERequest.Imp_internos = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteImpuestosInternosMonedaFacturacion); fieldName = "ImporteExentoMonedaFacturacion"; objBFERequest.Imp_op_ex = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteExentoMonedaFacturacion); fieldName = "ImportePercepciones_PagosCuentaImpuestosNacionalesMonedaFacturacion"; objBFERequest.Imp_perc = Convert.ToDouble(docBatch.RequestHeaders[0].ImportePercepciones_PagosCuentaImpuestosNacionalesMonedaFacturacion); fieldName = "ImportePercepcionImpuestosMunicipalesMonedaFacturacion"; objBFERequest.Imp_perc_mun = Convert.ToDouble(docBatch.RequestHeaders[0].ImportePercepcionImpuestosMunicipalesMonedaFacturacion); fieldName = "ImporteNoGravadoMonedaFacturacion"; objBFERequest.Imp_tot_conc = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteNoGravadoMonedaFacturacion); fieldName = "ImporteImpuestoLiquidadoMonedaFacturacion"; objBFERequest.Impto_liq = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteImpuestoLiquidadoMonedaFacturacion); fieldName = "CodigoDocumentoComprador"; objBFERequest.Tipo_doc = Convert.ToInt16(docBatch.RequestHeaders[0].CompradorCodigoDocumento); fieldName = "NroDocumentoComprador"; objBFERequest.Nro_doc = Convert.ToInt64(docBatch.RequestHeaders[0].CompradorNroDocumento); fieldName = "CodigoMoneda"; objBFERequest.Imp_moneda_Id = docBatch.RequestHeaders[0].CodigoMoneda; fieldName = "TasaCambio"; objBFERequest.Imp_moneda_ctz = Convert.ToDouble(docBatch.RequestHeaders[0].TasaCambio); fieldName = "ImporteRNI_PercepcionMonedaFacturacion"; objBFERequest.Impto_liq_rni = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteRNI_PercepcionMonedaFacturacion); objBFERequest.Zona = 1; objBFERequest.Items = new wsbfe.Item[Convert.ToInt32(docBatch.RequestHeaders[0].CantidadRegistrosDetalle)]; for (i = 0; i < objBFERequest.Items.Length; i++) { seccionName = "Línea " + i.ToString(); objBFERequest.Items[i] = new wsbfe.Item(); fieldName = "CodigoProductoEmpresa"; objBFERequest.Items[i].Pro_codigo_sec = docBatch.RequestHeaders[0].RequestLines[i].CodigoProductoEmpresa; fieldName = "CodigoProductoNCM"; objBFERequest.Items[i].Pro_codigo_ncm = docBatch.RequestHeaders[0].RequestLines[i].CodigoProductoNCM; fieldName = "Descripcion"; objBFERequest.Items[i].Pro_ds = docBatch.RequestHeaders[0].RequestLines[i].Descripcion; fieldName = "UnidadMedida"; objBFERequest.Items[i].Pro_umed = Convert.ToInt32(docBatch.RequestHeaders[0].RequestLines[i].UnidadMedida); fieldName = "Cantidad"; objBFERequest.Items[i].Pro_qty = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].Cantidad); fieldName = "ImportePrecioUnitarioMonedaFacturacion"; objBFERequest.Items[i].Pro_precio_uni = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].ImportePrecioUnitarioMonedaFacturacion); fieldName = "ImporteSubtotalMonedaFacturacion"; objBFERequest.Items[i].Imp_total = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].ImporteSubtotalMonedaFacturacion); fieldName = "ImporteBonificacionMonedaFacturacion"; objBFERequest.Items[i].Imp_bonif = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].ImporteBonificacionMonedaFacturacion); fieldName = "AlicuotaIVA"; objBFERequest.Items[i].Iva_id = Convert.ToInt16(docBatch.RequestHeaders[0].RequestLines[i].AlicuotaIVA); } } catch (Exception ex) { sqlEngine.LogError("0", "0", "Autorización", "Error al asignar el campo: " + seccionName + "." + fieldName + ", " + ex.Message); } //DEBUG LINE if (Convert.ToBoolean(oSettings.ActivarDebug)) Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objBFERequest), oSettings.PathDebug + "\\ClsBFERequest-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); try { objBFEResponseAuthorize = bfeService.BFEAuthorize(objBFEAuthRequest, objBFERequest); ////WORKAROUND FE BIENES DE CAPITAL if ((objBFEResponseAuthorize == null || objBFEResponseAuthorize.BFEResultAuth == null || objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae == null || objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae == string.Empty) && (objBFEResponseAuthorize.BFEResultAuth.Obs == string.Empty) && (objBFEResponseAuthorize.BFEErr == null )) { //WORKAROUND FE BIENES DE CAPITAL, REINTENTO 3 VECES EN LAPSOS DE 40 SEGUNDOS for (int iw = 0; iw < 5; iw++) { //espero 40 seg System.Threading.Thread.Sleep(60000); //consulto el cae objBFEResponseAuthorize = ReprocessOnError(objBFEAuthRequest, objBFERequest); //verifico si me devuelve el cae if (objBFEResponseAuthorize != null && objBFEResponseAuthorize.BFEResultAuth != null && objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae != null && objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae != string.Empty) break; } } } catch { //WORKAROUND FE BIENES DE CAPITAL, REINTENTO 3 VECES EN LAPSOS DE 40 SEGUNDOS for (int iw = 0; iw < 5; iw++) { //espero 40 seg System.Threading.Thread.Sleep(60000); //consulto el cae objBFEResponseAuthorize = ReprocessOnError(objBFEAuthRequest, objBFERequest); //verifico si me devuelve el cae if (objBFEResponseAuthorize != null && objBFEResponseAuthorize.BFEResultAuth != null && objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae != null && objBFEResponseAuthorize.BFEResultAuth.Fch_venc_Cae != string.Empty) break; } } //DEBUG LINE if (Convert.ToBoolean(oSettings.ActivarDebug)) Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objBFEResponseAuthorize), oSettings.PathDebug + "\\BFEResponseAuthorize-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); } catch (Exception ex) { int iElement = 0; if (i > 0) iElement = i - 1; else iElement = 0; if (docBatch == null || (docBatch.RequestHeaders == null && docBatch.RequestHeaders.Count == 0)) { sqlEngine.LogError("0", "0", "Autorización", "Error: " + ex.Message); } else { if(docBatch.RequestHeaders[iElement] != null) sqlEngine.LogError(docBatch.RequestHeaders[iElement].SQLID, "0", "Autorización", "Error: " + ex.Message); else sqlEngine.LogError("0", "0", "Autorización", "Error: " + ex.Message); } objBFEResponseAuthorize.BFEErr = new FacturaElectronica.WebServices.wsbfe.ClsBFEErr(); if (docBatch.BatchUniqueId == "AUTO" || objBFEResponseLastID.BFEResultGet == null) { objBFEResponseAuthorize.BFEErr.ErrCode = 667; objBFEResponseAuthorize.BFEErr.ErrMsg = ex.Message + "Error en AFIP al obtener el último nro de requerimiento (" + objBFEResponseLastID.BFEErr.ErrCode.ToString() + ") " + objBFEResponseLastID.BFEErr.ErrMsg; } else { objBFEResponseAuthorize.BFEErr.ErrCode = 668; objBFEResponseAuthorize.BFEErr.ErrMsg = ex.Message; sqlEngine.LogError(docBatch.RequestHeaders[iElement].SQLID, "0", "Autorización", "Error no conocido: (AfipBFE) " + ex.Message); } } return objBFEResponseAuthorize; }
/// <remarks/> public void BFEAuthorizeAsync(ClsBFEAuthRequest Auth, ClsBFERequest Cmp) { this.BFEAuthorizeAsync(Auth, Cmp, null); }
/// <remarks/> public void BFEAuthorizeAsync(ClsBFEAuthRequest Auth, ClsBFERequest Cmp, object userState) { if ((this.BFEAuthorizeOperationCompleted == null)) { this.BFEAuthorizeOperationCompleted = new System.Threading.SendOrPostCallback(this.OnBFEAuthorizeOperationCompleted); } this.InvokeAsync("BFEAuthorize", new object[] { Auth, Cmp}, this.BFEAuthorizeOperationCompleted, userState); }
public BFEResponseAuthorize BFEAuthorize(ClsBFEAuthRequest Auth, ClsBFERequest Cmp) { object[] results = this.Invoke("BFEAuthorize", new object[] { Auth, Cmp}); return ((BFEResponseAuthorize)(results[0])); }