public byte[] GetCbte(string empresaID, string idCbte, TipoDeCopia eCopia) { byte[] bytesPdf = null; var sqlEngine = new FacturaElectronica.DBEngine.SQLEngine(); try { bytesPdf = sqlEngine.LoadPdfFromDB(idCbte, eCopia.ToString()); //Si no encontró el doc, primero lo genero! if (bytesPdf == null) { //Genero los docs (Original, Duplicado y Triplicado) y vuelvo a buscar el pdf a la DB. PrintCbte(empresaID, idCbte, string.Empty); bytesPdf = sqlEngine.LoadPdfFromDB(idCbte, eCopia.ToString()); } } catch (Exception ex) { throw (new Exception(ex.Message)); } return bytesPdf; }
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 ArrayList GetDocsIdFromXml(string xmlString) //{ // ArrayList ids = new ArrayList(); // try // { // XmlDocument xmlDoc = new XmlDocument(); // xmlDoc.LoadXml(xmlString); // ids = new ArrayList(); // //Agrego todos los comprobantes // for (int i = 0; i < xmlDoc.SelectNodes("/RespuestaLoteComprobantes/Comprobante").Count; i++) // ids.Add(ValidXMLValue(xmlDoc, "/RespuestaLoteComprobantes/Comprobante")); // } // catch (Exception) // { // //ToDo: Esto es para Testing! // ids.Add(1); // ids.Add(2); // ids.Add(3); // ids.Add(4); // ids.Add(5); // } // return ids; //} private static bool DebeImprimir(TipoDeCopia tipoDeCopia, string CopiasAImprimir) { return CopiasAImprimir.ToLower().IndexOf(tipoDeCopia.ToString().ToLower()) > -1; }
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); } }
/// <summary> /// Preparo el objeto 'pdf' que luego servirá para llenar todos los campos del reporte. /// </summary> /// <param name="CbteCodigo"></param> /// <param name="CbteCopia"></param> /// <param name="sqlEngine"></param> /// <param name="oEmpresa"></param> /// <param name="oSettings"></param> /// <param name="dtHeader"></param> public void LlenarPropiedades(string CbteCodigo, TipoDeCopia tipoDeCopia, Empresa oEmpresa, Settings oSettings, DataTable dtHeader) { DBEngine.SQLEngine sqlEngine = new DBEngine.SQLEngine(); UnReporte.oEmpresa = oEmpresa; UnReporte.TipoDeCopia = tipoDeCopia; UnReporte.CbteID = dtHeader.Rows[0]["CbteID"].ToString().Trim(); UnReporte.NroCbte = Utils.Utils.FillWithCeros(dtHeader.Rows[0]["PuntoVenta"].ToString().Trim(),4) + "-" + Utils.Utils.FillWithCeros(dtHeader.Rows[0]["NroComprobanteDesde"].ToString(), 8); UnReporte.NombreEmpresa = dtHeader.Rows[0]["CompradorRazonSocial"].ToString(); //------------------------------------------------------------- //Armo la dirección... string direccion = ""; direccion += dtHeader.Rows[0]["CompradorDireccion"].ToString(); //El código postal va siempre. if (dtHeader.Rows[0]["CompradorCodigoPostal"].ToString() != string.Empty && dtHeader.Rows[0]["CompradorCodigoPostal"].ToString() != "0") direccion += " - (" + dtHeader.Rows[0]["CompradorCodigoPostal"].ToString() + ")"; //Solo muestro la Localidad, cuando la PROVINCIA es distinta de 0 (no es Capital Federal). if (Convert.ToString(dtHeader.Rows[0]["CompradorProvincia"]).Trim() != "0") { if (dtHeader.Rows[0]["CompradorLocalidad"].ToString() != string.Empty && dtHeader.Rows[0]["CompradorLocalidad"].ToString() != "0") direccion += " - " + dtHeader.Rows[0]["CompradorLocalidad"].ToString(); } //La provincia se muestra siempre. string provinciaConvertida = FacturaElectronica.WSPrint.Common.GetDescripcionProvincia(Convert.ToString(dtHeader.Rows[0]["CompradorProvincia"])); if (provinciaConvertida.Trim() != string.Empty) direccion += " - " + provinciaConvertida; if (sqlEngine.Open()) { string paisConvertido = sqlEngine.ObtenerEquivalencia("EquivAFIPPais", oSettings.EmpresaID, dtHeader.Rows[0]["CompradorPais"].ToString()); paisConvertido = WSPrint.Common.GetDescripcionPais(paisConvertido); if (paisConvertido != string.Empty && paisConvertido.Trim() != "0") direccion += " - " + paisConvertido; sqlEngine.Close(); } UnReporte.Domicilio = direccion; //------------------------------------------------------------- UnReporte.TipoIva = dtHeader.Rows[0]["CompradorTipoResponsableDescripcion"].ToString(); UnReporte.CondicionDeVenta = dtHeader.Rows[0]["FormaPagoDescripcion"].ToString(); UnReporte.CondicionDePago = dtHeader.Rows[0]["CondicionPago"].ToString(); UnReporte.NumCuit = dtHeader.Rows[0]["CompradorNroDocumento"].ToString(); UnReporte.NumRemito = dtHeader.Rows[0]["NroRemito"].ToString(); UnReporte.NumIIBB = dtHeader.Rows[0]["CompradorNroIIBB"].ToString(); // UnReporte.NumCodIIBB = dtHeader.Rows[0]["CodigoJurisdiccionIIBB"].ToString(); UnReporte.Son = dtHeader.Rows[0]["ImporteEscrito"].ToString(); UnReporte.RefCliente = dtHeader.Rows[0]["CompradorNroReferencia"].ToString(); UnReporte.RefInterna = dtHeader.Rows[0]["NroInternoERP"].ToString(); UnReporte.AlicuotaIVA = dtHeader.Rows[0]["AlicuotaIVA"].ToString(); UnReporte.EmisorDireccion = dtHeader.Rows[0]["EmisorDireccion"].ToString(); UnReporte.EmisorCalle = dtHeader.Rows[0]["EmisorCalle"].ToString(); UnReporte.EmisorCP = dtHeader.Rows[0]["EmisorCP"].ToString(); UnReporte.EmisorLocalidad = dtHeader.Rows[0]["EmisorLocalidad"].ToString(); UnReporte.EmisorProvincia = dtHeader.Rows[0]["EmisorProvincia"].ToString(); UnReporte.EmisorPais = dtHeader.Rows[0]["EmisorPais"].ToString(); UnReporte.EmisorTelefonos = dtHeader.Rows[0]["EmisorTelefonos"].ToString(); UnReporte.EmisorEMail = dtHeader.Rows[0]["EmisorEMail"].ToString(); UnReporte.DAGRUF =Convert.ToString(dtHeader.Rows[0]["DAGRUF"]); UnReporte.OPER = Convert.ToString(dtHeader.Rows[0]["OPER"]); UnReporte.NOPER = Convert.ToString(dtHeader.Rows[0]["NOPER"]); UnReporte.FECPG1_FORMATEADO = Convert.ToString(dtHeader.Rows[0]["FECPG1_FORMATEADO"]); UnReporte.FECPG2_FORMATEADO = Convert.ToString(dtHeader.Rows[0]["FECPG2_FORMATEADO"]); UnReporte.FACTORI_FORMATEADO = Convert.ToString(dtHeader.Rows[0]["FACTORI_FORMATEADO"]); //Convert.ToString(dtHeader.Rows[0]["FACTORI"]); UnReporte.USUARIO = Convert.ToString(dtHeader.Rows[0]["USUARIO"]); UnReporte.CODCLIENTECOMPRADOR = Convert.ToString(dtHeader.Rows[0]["CompradorCodigoCliente"]); UnReporte.OBSERVACIONRAPIPAGO = Convert.ToString(dtHeader.Rows[0]["ObservacionRapipago"]); UnReporte.ERRORCODIGO = GetErrorCodigo(UnReporte.CbteID); UnReporte.TasaIIBB = Convert.ToString(dtHeader.Rows[0]["TasaIIBB"]); if (dtHeader.Rows[0]["LetraComprobante"].ToString() != "B") { if (dtHeader.Rows[0]["ImporteImpuestoLiquidadoMonedaFacturacion"].ToString() != string.Empty) UnReporte.TotalIva = String.Format(FORMATO_NRO, Convert.ToDecimal(dtHeader.Rows[0]["ImporteImpuestoLiquidadoMonedaFacturacion"].ToString())); } else { UnReporte.TotalIva = "0,00"; } decimal subtotal = 0; if (dtHeader.Rows[0]["ImporteMonedaFacturacion"].ToString() != string.Empty) subtotal = Convert.ToDecimal(dtHeader.Rows[0]["ImporteMonedaFacturacion"].ToString()); if (dtHeader.Rows[0]["ImportePercepcionIIBBMonedaFacturacion"].ToString() != string.Empty) subtotal -= Convert.ToDecimal(dtHeader.Rows[0]["ImportePercepcionIIBBMonedaFacturacion"].ToString()); UnReporte.SubTotal = String.Format(FORMATO_NRO, subtotal); decimal subtotalB = 0; if (dtHeader.Rows[0]["ImporteMonedaFacturacionComprobanteB"].ToString() != string.Empty) subtotalB = Convert.ToDecimal(dtHeader.Rows[0]["ImporteMonedaFacturacionComprobanteB"].ToString()); UnReporte.SubTotalComprobanteB = String.Format(FORMATO_NRO, subtotalB); decimal subtotalgravado = 0; if (dtHeader.Rows[0]["ImporteGravadoMonedaFacturacion"].ToString() != string.Empty) subtotalgravado -= Convert.ToDecimal(dtHeader.Rows[0]["ImporteGravadoMonedaFacturacion"].ToString()); UnReporte.SubTotalGravadoMonedaFacturacion = String.Format(FORMATO_NRO, subtotal); decimal totalpercep = 0; if (dtHeader.Rows[0]["ImportePercepcionIIBBMonedaFacturacion"].ToString() != string.Empty) totalpercep = Convert.ToDecimal(dtHeader.Rows[0]["ImportePercepcionIIBBMonedaFacturacion"].ToString()); UnReporte.TotalPercepcionIIBB = String.Format(FORMATO_NRO, totalpercep); if (dtHeader.Rows[0]["ImporteMonedaFacturacion"].ToString() != string.Empty) UnReporte.Total = String.Format(FORMATO_NRO, Convert.ToDecimal(dtHeader.Rows[0]["ImporteMonedaFacturacion"].ToString())); if (dtHeader.Rows[0]["ImporteMonedaFacturacionComprobanteB"].ToString() != string.Empty) UnReporte.TotalComprobanteB = String.Format(FORMATO_NRO, Convert.ToDecimal(dtHeader.Rows[0]["ImporteMonedaFacturacionComprobanteB"].ToString())); if (dtHeader.Rows[0]["ImporteGravadoMonedaFacturacion"].ToString() != string.Empty) UnReporte.TotalGravadoMonedaFacturacion = String.Format(FORMATO_NRO, Convert.ToDecimal(dtHeader.Rows[0]["ImporteGravadoMonedaFacturacion"].ToString())); UnReporte.LetraCbte = dtHeader.Rows[0]["LetraComprobante"].ToString(); UnReporte.TipoCbte = tipoDeCopia.ToString(); UnReporte.NumCodigo = "Código N° " + Utils.Utils.FillWithCeros(CbteCodigo, 2); string strTime = WSPrint.Common.GetDateStringValue(dtHeader.Rows[0]["FechaComprobante"].ToString()); UnReporte.DayCbte = (strTime.Split('/')[0].Length > 1) ? strTime.Split('/')[0] : "0" + strTime.Split('/')[0]; UnReporte.MonthCbte = (strTime.Split('/')[1].Length > 1) ? strTime.Split('/')[1] : "0" + strTime.Split('/')[1]; UnReporte.YearCbte = strTime.Split('/')[2].ToString(); UnReporte.FechaCbte = UnReporte.DayCbte + "/" + UnReporte.MonthCbte + "/" + UnReporte.YearCbte; DateTime dVencimiento; if (DateTime.TryParse(Convert.ToString(dtHeader.Rows[0]["FechaVencimiento"]), out dVencimiento)) UnReporte.FechaVto = dVencimiento.ToString("dd/MM/yyyy"); UnReporte.ObservacionesCabecera = dtHeader.Rows[0]["Observaciones1"].ToString().Replace("|", "\n"); UnReporte.ObservacionesCuerpo = dtHeader.Rows[0]["Observaciones2"].ToString().Replace("|", "\n"); UnReporte.ObservacionesPie = dtHeader.Rows[0]["Observaciones3"].ToString().Replace("|", "\n"); string monedaConvertida = sqlEngine.ObtenerEquivalencia("EquivAFIPMoneda", oSettings.EmpresaID, dtHeader.Rows[0]["CodigoMoneda"].ToString().Trim()); UnReporte.Moneda = WSPrint.Common.GetDescripcionMoneda(monedaConvertida); UnReporte.CAE = dtHeader.Rows[0]["CAE"].ToString(); string strtimeVto = UnReporte.FechaVto; if (dtHeader.Rows[0]["RapiPago"] != null) UnReporte.Rapipago = dtHeader.Rows[0]["RapiPago"].ToString(); if (dtHeader.Rows[0]["PagoFacil"] != null) UnReporte.Pagofacil = dtHeader.Rows[0]["PagoFacil"].ToString(); UnReporte.BarCodeCbte = WSPrint.Common.GetBarCode(oEmpresa.NroDocumento, Utils.Utils.FillWithCeros(CbteCodigo, 2), dtHeader.Rows[0]["PuntoVenta"].ToString(), UnReporte.CAE, strtimeVto.Split('/')[2] + ((strtimeVto.Split('/')[1].Length == 1) ? "0" + strtimeVto.Split('/')[1] : strtimeVto.Split('/')[1]) + ((strtimeVto.Split('/')[0].Length == 1) ? "0" + strtimeVto.Split('/')[0] : strtimeVto.Split('/')[0])); /**************************************************************************************/ decimal ImporteGravado = 0; if (dtHeader.Rows[0]["ImporteGravado"].ToString() != string.Empty) ImporteGravado = Convert.ToDecimal(dtHeader.Rows[0]["ImporteGravado"].ToString()); UnReporte.ImpuestoSubGrav = String.Format(FORMATO_NRO, ImporteGravado); decimal ImporteNoGravado = 0; if (dtHeader.Rows[0]["ImporteNoGravado"].ToString() != string.Empty) ImporteNoGravado = Convert.ToDecimal(dtHeader.Rows[0]["ImporteNoGravado"].ToString()); UnReporte.ImporteSubNoGrav = String.Format(FORMATO_NRO, ImporteNoGravado); if (dtHeader.Rows[0]["LetraComprobante"].ToString() == "A") { decimal ImporteSubTotal = ImporteGravado + ImporteNoGravado; UnReporte.ImporteSubTotal = String.Format(FORMATO_NRO, ImporteSubTotal); } if (dtHeader.Rows[0]["LetraComprobante"].ToString() == "B") { decimal ImporteImpuestoLiquidado = 0; if (dtHeader.Rows[0]["ImporteImpuestoLiquidado"].ToString() != string.Empty) ImporteImpuestoLiquidado = Convert.ToDecimal(dtHeader.Rows[0]["ImporteImpuestoLiquidado"].ToString()); decimal ImporteSubTotal = ImporteGravado + ImporteNoGravado + ImporteImpuestoLiquidado; UnReporte.ImporteSubTotal = String.Format(FORMATO_NRO, ImporteSubTotal); } /**************************************************************************************/ /* decimal CUOTAIVA21 = 0; if (dtHeader.Rows[0]["CUOTAIVA21"].ToString() != string.Empty) CUOTAIVA21 = Convert.ToDecimal(dtHeader.Rows[0]["CUOTAIVA21"].ToString()); UnReporte.CUOTAIVA21 = String.Format(FORMATO_NRO, CUOTAIVA21); decimal CUOTAIVA105 = 0; if (dtHeader.Rows[0]["CUOTAIVA105"].ToString() != string.Empty) CUOTAIVA105 = Convert.ToDecimal(dtHeader.Rows[0]["CUOTAIVA105"].ToString()); UnReporte.CUOTAIVA105 = String.Format(FORMATO_NRO, CUOTAIVA105); */ }