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; }
public wsfex.FEXResponseAuthorize FEXAuthRequest(RequestBatch docBatch, Settings oSettings ) { wsfex.ClsFEXRequest objFEXRequest = new wsfex.ClsFEXRequest(); wsfex.FEXResponseAuthorize objFEXResponseAuthorize = new wsfex.FEXResponseAuthorize(); wsfex.FEXResponse_LastID objFEXResponseLastID = null; DBEngine.SQLEngine sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); int i = 0; try { //Debug Line Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objFEXAuthRequest), oSettings.PathDebug + "\\ClsFEXAuthRequest-" + 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") { objFEXResponseLastID = GetLastBatchUniqueId(); if (objFEXResponseLastID.FEXResultGet == null) { sqlEngine.LogError(docBatch.RequestHeaders[0].SQLID, "0", "Autorización", "Error AFIP al obtener el último nro de requerimiento (" + objFEXResponseLastID.FEXErr.ErrCode + ") " + objFEXResponseLastID.FEXErr.ErrMsg); } else { objFEXResponseLastID.FEXResultGet.Id = objFEXResponseLastID.FEXResultGet.Id + 1; docBatch.BatchUniqueId = (objFEXResponseLastID.FEXResultGet.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 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"; objFEXRequest.Id = (long)Convert.ToDouble(docBatch.BatchUniqueId); objFEXRequest.Tipo_cbte = Convert.ToInt16(docBatch.RequestHeaders[0].TipoComprobante); objFEXRequest.Punto_vta = Convert.ToInt16(docBatch.RequestHeaders[0].PuntoVenta); objFEXRequest.Cbte_nro = (long)Convert.ToDouble(docBatch.RequestHeaders[0].NroComprobanteDesde); objFEXRequest.Tipo_expo = Convert.ToInt16((docBatch.RequestHeaders[0].TipoExportacion == string.Empty) ? "1" : docBatch.RequestHeaders[0].TipoExportacion); if (objFEXRequest.Tipo_cbte == 19) objFEXRequest.Permiso_existente = (docBatch.RequestHeaders[0].PermisoExistente == string.Empty) ? "N" : docBatch.RequestHeaders[0].PermisoExistente; else objFEXRequest.Permiso_existente = string.Empty; objFEXRequest.Dst_cmp = Convert.ToInt16(docBatch.RequestHeaders[0].CompradorPais); objFEXRequest.Cliente = docBatch.RequestHeaders[0].CompradorRazonSocial; objFEXRequest.Domicilio_cliente = docBatch.RequestHeaders[0].CompradorDireccion; objFEXRequest.Moneda_Id = docBatch.RequestHeaders[0].CodigoMoneda; objFEXRequest.Moneda_ctz = Convert.ToDouble(docBatch.RequestHeaders[0].TasaCambio); objFEXRequest.Imp_total = Convert.ToDouble(docBatch.RequestHeaders[0].ImporteMonedaFacturacion); objFEXRequest.Idioma_cbte = Convert.ToInt16((docBatch.RequestHeaders[0].Idioma == string.Empty) ? "01" : docBatch.RequestHeaders[0].Idioma); objFEXRequest.Id_impositivo = docBatch.RequestHeaders[0].CompradorNroDocumento; objFEXRequest.Fecha_cbte = Convert.ToDateTime(docBatch.RequestHeaders[0].FechaComprobante).ToString("yyyyMMdd"); objFEXRequest.Forma_pago = docBatch.RequestHeaders[0].FormaPagoDescripcion; objFEXRequest.Obs = docBatch.RequestHeaders[0].Observaciones2; objFEXRequest.Obs_comerciales = docBatch.RequestHeaders[0].Observaciones1; objFEXRequest.Incoterms = docBatch.RequestHeaders[0].IncoTerms; objFEXRequest.Items = new FacturaElectronica.WebServices.wsfex.Item[Convert.ToInt32(docBatch.RequestHeaders[0].CantidadRegistrosDetalle)]; for (i = 0; i < objFEXRequest.Items.Length; i++) { seccionName = "Línea " + i.ToString(); objFEXRequest.Items[i] = new wsfex.Item(); objFEXRequest.Items[i].Pro_codigo = docBatch.RequestHeaders[0].RequestLines[i].CodigoProductoEmpresa; objFEXRequest.Items[i].Pro_ds = docBatch.RequestHeaders[0].RequestLines[i].Descripcion; objFEXRequest.Items[i].Pro_umed = Convert.ToInt32(docBatch.RequestHeaders[0].RequestLines[i].UnidadMedida); objFEXRequest.Items[i].Pro_qty = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].Cantidad); objFEXRequest.Items[i].Pro_precio_uni = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].ImportePrecioUnitarioMonedaFacturacion); objFEXRequest.Items[i].Pro_total_item = Convert.ToDouble(docBatch.RequestHeaders[0].RequestLines[i].ImporteSubtotalMonedaFacturacion); } } catch (Exception ex) { sqlEngine.LogError("0", "0", "Autorización", "Error al asignar el campo: " + seccionName + "." + fieldName + ", " + ex.Message); } //Debug Line Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objFEXRequest), oSettings.PathDebug + "\\ClsFEXRequest-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); objFEXResponseAuthorize = fexService.FEXAuthorize(objFEXAuthRequest, objFEXRequest); } catch (Exception ex) { int iElement = 0; if (i > 0) iElement = i - 1; else iElement = 0; sqlEngine.LogError(docBatch.RequestHeaders[iElement].SQLID, "0", "Autorización", "Error no conocido: (AfipFEX) " + ex.Message); objFEXResponseAuthorize.FEXErr = new FacturaElectronica.WebServices.wsfex.ClsFEXErr(); if (docBatch.BatchUniqueId == "AUTO" || objFEXResponseLastID.FEXResultGet == null) { objFEXResponseAuthorize.FEXErr.ErrCode = 667; objFEXResponseAuthorize.FEXErr.ErrMsg = ex.Message + "Error en AFIP al obtener el último nro de requerimiento (" + objFEXResponseLastID.FEXErr.ErrCode.ToString() + ") " + objFEXResponseLastID.FEXErr.ErrMsg; } else { objFEXResponseAuthorize.FEXErr.ErrCode = 668; objFEXResponseAuthorize.FEXErr.ErrMsg = ex.Message; sqlEngine.LogError(docBatch.RequestHeaders[iElement].SQLID, "0", "Autorización", "Error no conocido: (AfipFEX) " + ex.Message); } } return objFEXResponseAuthorize; }
private void PrintComprobante(string EmpresaID, string CbteId, TipoDeCopia tipoDeCopia, string FilePath) { var sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); var oEmpresa = new Empresa(EmpresaID); var oSettings = new Settings(EmpresaID); var strResult = string.Empty; var cbteCodigo = 0; var puntoVenta = string.Empty; var nroComprobante = string.Empty; var fileName = "{0}_{1}_{2}_{3}_{4}.pdf"; //EmprCod_TipoDoc_PtoVta_NroDoc_Copia.pdf var codigoDocFileName = string.Empty; DataTable dtHeader = null; DataTable dtDetails = null; DataTable dtImpuestos= null; try { //Obtengo el comprobante de la DB. dtHeader = Common.GetComprobanteDataTable(CbteId); dtDetails = Common.GetComprobanteDetailDataTable(CbteId); dtImpuestos = Common.GetComprobanteImpuestoDataTable(CbteId); ////ToDo: Quitar. //dtDetails.TableName = "Detalle"; //dtHeader.TableName = "Cabecera"; //dtHeader.WriteXml(FilePath + "\\dtHeader_" + CbteId.ToString() + ".xml"); //dtDetails.WriteXml(FilePath + "\\dtDetails_" + CbteId.ToString() + ".xml"); var newPdf = new PrintEngine.Documento(); if (ComprobanteEncontrado(dtHeader, dtDetails, dtImpuestos)) { cbteCodigo = Convert.ToInt32(dtHeader.Rows[0]["TipoComprobante"]); puntoVenta = Convert.ToString(dtHeader.Rows[0]["PuntoVenta"]); nroComprobante = Utils.Utils.FillWithCeros(Convert.ToString(dtHeader.Rows[0]["NroComprobanteDesde"]), 8); //Lleno el objeto del reporte, con todos los datos necesarios. newPdf.FillPdfProperties(Convert.ToString(cbteCodigo), tipoDeCopia, oEmpresa, oSettings, dtHeader); //Solo si se envio un path al WS. if (FilePath != null && FilePath != string.Empty) { //Si falta la ultima '\' al path, la agrego. if (!FilePath.EndsWith(@"\")) FilePath += @"\"; //Preparo el nombre del Archivo, con el Nro de Comprobante y el Pto. de Venta. GetTipoDocByAfipCode(cbteCodigo, out codigoDocFileName); fileName = FilePath + string.Format(fileName, EmpresaID, codigoDocFileName, puntoVenta, nroComprobante, tipoDeCopia.ToString()); } else fileName = string.Empty; //Llamo al metodo de newPdf que corresponde, segun el tipo de Doc y si es Local o Extranjero. ImprimirComprobanteCorrespondiente(cbteCodigo, fileName, dtDetails, dtImpuestos, tipoDeCopia, newPdf); } } catch (Exception ex) { strResult = ex.Message + "FechaComprobante: " + dtHeader.Rows[0]["FechaComprobante"].ToString() + " | FechaVencimiento: " + dtHeader.Rows[0]["FechaVencimiento"].ToString(); sqlEngine.LogError(dtHeader.Rows[0]["SQLID"].ToString(), "0", "Imprimiendo Factura", "Error: " + ex.Message); } }
private string PrintComprobante(string EmpresaID, string CbteId, TipoDeCopia tipoDeCopia) { var sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); var oEmpresa = new Empresa(EmpresaID); var oSettings = new Settings(EmpresaID); var strResult = string.Empty; var cbteCodigo = 0; var puntoVenta = string.Empty; var nroComprobante = string.Empty; var fileName = "{0}_{1}_{2}_{3}_{4}.pdf"; //EmprCod_TipoDoc_PtoVta_NroDoc_Copia.pdf var codigoDocFileName = string.Empty; DataTable dtHeader = null; DataTable dtDetails = null; DataTable dtImpuestos = null; try { //Obtengo el comprobante de la DB. dtHeader = Common.GetComprobanteDataTable(CbteId); dtDetails = Common.GetComprobanteDetailDataTable(CbteId); dtImpuestos = Common.GetComprobanteImpuestoDataTable(CbteId); var newPdf = new PrintEngine.Documento(); if (ComprobanteEncontrado(dtHeader, dtDetails, dtImpuestos)) { cbteCodigo = Convert.ToInt32(dtHeader.Rows[0]["TipoComprobante"]); puntoVenta = Convert.ToString(dtHeader.Rows[0]["PuntoVenta"]); nroComprobante = Utils.Utils.FillWithCeros(Convert.ToString(dtHeader.Rows[0]["NroComprobanteDesde"]), 8); //Lleno el objeto del reporte, con todos los datos necesarios. newPdf.FillPdfProperties(Convert.ToString(cbteCodigo), tipoDeCopia, oEmpresa, oSettings, dtHeader); //Preparo el nombre del Archivo, con el Nro de Comprobante y el Pto. de Venta. GetTipoDocByAfipCode(cbteCodigo, out codigoDocFileName); fileName = oSettings.PathTemporales + "\\" + string.Format(fileName, EmpresaID, codigoDocFileName, puntoVenta, nroComprobante, tipoDeCopia.ToString()); //Llamo al metodo de newPdf que corresponde, segun el tipo de Doc y si es Local o Extranjero. ImprimirComprobanteCorrespondiente(cbteCodigo, fileName, dtDetails, dtImpuestos, tipoDeCopia, newPdf); } else { fileName = string.Empty; } } catch (Exception ex) { strResult = ex.Message + "FechaComprobante: " + dtHeader.Rows[0]["FechaComprobante"].ToString() + " | FechaVencimiento: " + dtHeader.Rows[0]["FechaVencimiento"].ToString(); sqlEngine.LogError(dtHeader.Rows[0]["SQLID"].ToString(), "0", "Imprimiendo Factura", "Error: " + ex.Message); } return fileName; }
public wsfe.FECAEResponse FEAuthRequest(RequestBatch docBatch, Settings oSettings) { wsfe.FECAECabRequest objFECabeceraRequest = new wsfe.FECAECabRequest(); wsfe.FECAEDetRequest objFEDetalleRequest = new wsfe.FECAEDetRequest(); wsfe.FECAERequest objFERequest = new wsfe.FECAERequest(); wsfe.FECAEResponse objFEResponse = new wsfe.FECAEResponse(); wsfe.AlicIva objIva = null; wsfe.Tributo objTributo = null; DBEngine.SQLEngine sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); int i = 0; int iIvaItems = 0; int iTributosItems = 0; try { objFECabeceraRequest.CantReg = Convert.ToInt16(docBatch.CantidadComprobantes); objFECabeceraRequest.PtoVta = Convert.ToInt16(docBatch.RequestHeaders[0].PuntoVenta); objFECabeceraRequest.CbteTipo = Convert.ToInt16(docBatch.RequestHeaders[0].TipoComprobante); wsfe.FECAEDetRequest[] aObjFEDetalleRequest = new wsfe.FECAEDetRequest[Convert.ToInt16(objFECabeceraRequest.CantReg)]; int arrayIndex = 0; for (i = 0; i < objFECabeceraRequest.CantReg; i++) { objFEDetalleRequest = new wsfe.FECAEDetRequest(); //Si el numero de documento viene vacio asumo que es un consumidor final 99 if (docBatch.RequestHeaders[i].CompradorNroDocumento == string.Empty) { docBatch.RequestHeaders[i].CompradorCodigoDocumento = "99"; docBatch.RequestHeaders[i].CompradorNroDocumento = "0"; } objFEDetalleRequest.DocTipo = Convert.ToInt16(docBatch.RequestHeaders[i].CompradorCodigoDocumento); objFEDetalleRequest.DocNro = (long)Convert.ToDouble(docBatch.RequestHeaders[i].CompradorNroDocumento); objFEDetalleRequest.CbteDesde = (long)Convert.ToDouble(docBatch.RequestHeaders[i].NroComprobanteDesde); objFEDetalleRequest.CbteHasta = (long)Convert.ToDouble(docBatch.RequestHeaders[i].NroComprobanteHasta); objFEDetalleRequest.ImpTotal = Convert.ToDouble(docBatch.RequestHeaders[i].Importe); objFEDetalleRequest.ImpTotConc = Convert.ToDouble(docBatch.RequestHeaders[i].ImporteNoGravado); objFEDetalleRequest.ImpNeto = Convert.ToDouble(docBatch.RequestHeaders[i].ImporteGravado); //objFEDetalleRequest.impto_liq_rni = Convert.ToDouble(docBatch.RequestHeaders[i].ImporteRNI_Percepcion);???? //objFEDetalleRequest.ImpIVA = Convert.ToDouble(docBatch.RequestHeaders[i].ImporteImpuestoLiquidado); objFEDetalleRequest.ImpOpEx = Convert.ToDouble(docBatch.RequestHeaders[i].ImporteExento); //Agrego todas las alicuotas en array //1 No gravado //2 Exento //3 0% //4 10.5% //5 21% //6 27% if (docBatch.RequestHeaders[i].RequestAlicuotas.Count > 0) { objFEDetalleRequest.Iva = new wsfe.AlicIva[docBatch.RequestHeaders[i].RequestAlicuotas.Count]; iIvaItems = 0; foreach (RequestAlicuota alic in docBatch.RequestHeaders[i].RequestAlicuotas) { if (alic != null) { objIva = new wsfe.AlicIva(); objIva.Id = Convert.ToInt32(alic.Id); objIva.BaseImp = Convert.ToDouble(String.Format("{0:0.00}", alic.BaseImp)); objIva.Importe = Convert.ToDouble(String.Format("{0:0.00}", alic.Importe)); objFEDetalleRequest.Iva[iIvaItems] = objIva; iIvaItems++; //Agrego importe al total de alicuotas de IVA objFEDetalleRequest.ImpIVA += objIva.Importe; } } } objFEDetalleRequest.ImpIVA = Convert.ToDouble(String.Format("{0:0.00}", objFEDetalleRequest.ImpIVA)); //Agrego todos los tributos en array //1 Impuestos nacionales //2 Impuestos provinciales //3 Impuestos municipales //4 Impuestos internos //99 Otros if (docBatch.RequestHeaders[i].RequestTributos.Count > 0) { objFEDetalleRequest.Tributos = new wsfe.Tributo[docBatch.RequestHeaders[i].RequestTributos.Count]; iTributosItems = 0; foreach (RequestTributo trib in docBatch.RequestHeaders[i].RequestTributos) { if (trib != null) { objTributo = new wsfe.Tributo(); objTributo.Id = Convert.ToInt16(trib.Id); objTributo.BaseImp = Convert.ToDouble(String.Format("{0:0.00}", trib.BaseImp)); objTributo.Importe = Convert.ToDouble(String.Format("{0:0.00}", trib.Importe)); objTributo.Alic = Convert.ToDouble(String.Format("{0:#,##0.00}", trib.Alic)); objFEDetalleRequest.Tributos[iTributosItems] = objTributo; iTributosItems++; //Agrego importe al total de tributos objFEDetalleRequest.ImpTrib += objTributo.Importe; } } } // Las fechas deben venir en formato "YYYY-MM-DD" objFEDetalleRequest.CbteFch = Convert.ToDateTime(docBatch.RequestHeaders[i].FechaComprobante).ToString("yyyyMMdd"); //Es 1 si son productos 2 servicios, 3 productos y servicios if (docBatch.SonServicios == "1") objFEDetalleRequest.Concepto = 3; else objFEDetalleRequest.Concepto = 1; if (objFEDetalleRequest.Concepto == 3) { objFEDetalleRequest.FchServDesde = Convert.ToDateTime(docBatch.RequestHeaders[i].FechaDesdeServicioFacturado).ToString("yyyyMMdd"); objFEDetalleRequest.FchServHasta = Convert.ToDateTime(docBatch.RequestHeaders[i].FechaHastaServicioFacturado).ToString("yyyyMMdd"); objFEDetalleRequest.FchVtoPago = Convert.ToDateTime(docBatch.RequestHeaders[i].FechaVencimientoPago).ToString("yyyyMMdd"); } objFEDetalleRequest.MonId = docBatch.RequestHeaders[i].CodigoMoneda; objFEDetalleRequest.MonCotiz = 1; aObjFEDetalleRequest[arrayIndex] = objFEDetalleRequest; arrayIndex += 1; } objFERequest.FeCabReq = objFECabeceraRequest; objFERequest.FeDetReq = aObjFEDetalleRequest; //DEBUG LINE if (Convert.ToBoolean(oSettings.ActivarDebug)) Utils.Utils.DebugLine(Utils.Utils.SerializeObject(objFERequest), oSettings.PathDebug + "\\" + docBatch.RequestHeaders[0].SQLID + "-P2.FERequest-" + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00") + DateTime.Now.Second.ToString("00") + DateTime.Now.Millisecond.ToString("000") + ".xml"); objFEResponse = feService.FECAESolicitar(objFEAuthRequest, objFERequest); } catch (Exception ex) { int iElement = 0; if(i > 0) iElement = i - 1; else iElement = 0; objFEResponse.Errors = new wsfe.Err[1]; objFEResponse.Errors[0] = new wsfe.Err(); objFEResponse.Errors[0].Code = 668; objFEResponse.Errors[0].Msg = ex.Message; string url = oSettings.UrlFEWebService; sqlEngine.LogError(docBatch.RequestHeaders[iElement].SQLID, "0", "Autorización", "Error no conocido: (AfipFE) " + ex.Message); } return objFEResponse; }