Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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;
        }