Example #1
0
        /// <summary>
        /// Genera archivo texto para la prefectura de Sao Paulo
        /// </summary>
        public void GeneraDocumentoTxt(IList <vwCfdiTransaccionesDeVenta> listaTransaccionesVenta, MainDB DocumentosGP, Web_Service.WebServicesNfe serviciosPrefectura)
        {
            string rutaYNom = string.Empty;

            try
            {
                String msj = String.Empty;
                int    errores = 0; int i = 1;
                OnProgreso(1, "INICIANDO GENERACION DE ARCHIVO TEXTO...");
                //IList<Web_Service.PedidoEnvioLoteRPS> documentosRps = new List<Web_Service.PedidoEnvioLoteRPS>();
                string  detalleDocTxt = string.Empty;
                string  cabeceraDocTxt = string.Empty;
                string  trailerDocTxt = string.Empty;
                string  sTimeStamp = System.DateTime.Now.ToString("yyMMddHHmmss");
                string  nombreArchivo = "NFPrefeitura_" + sTimeStamp;
                string  extension = ".txt";
                string  ruta = string.Empty;
                string  MinFecha = "99999999", MaxFecha = "00000000";
                decimal TotalServicios = 0, TotalDeducciones = 0, TotalRPS = 0;


                foreach (vwCfdiTransaccionesDeVenta trxVenta in listaTransaccionesVenta)
                {
                    ruta     = trxVenta.rutaXml.Trim();
                    rutaYNom = Path.Combine(trxVenta.rutaXml.Trim(), nombreArchivo + extension);
                    msj      = String.Empty;
                    try
                    {
                        string tipoMEstados = "DOCVENTA-" + trxVenta.estadoContabilizado;
                        trxVenta.CicloDeVida = new Maquina(trxVenta.estadoActual, trxVenta.regimen, trxVenta.voidstts, "emisor", tipoMEstados);
                        if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoGeneraTxt, 1))
                        {
                            var docGpBrasil = DocumentosGP.GetDatosDocumentoVenta(trxVenta.sopnumbe, trxVenta.soptype);
                            //documentosRps.Add(serviciosPrefectura.GeneraDatosRPS(docGpBrasil));
                            var documentoRps = serviciosPrefectura.GeneraDatosRPS(docGpBrasil);
                            var documentoTxt = serviciosPrefectura.PreparaDatosArchivoTxt(documentoRps);
                            detalleDocTxt += documentoTxt.Item2 + Environment.NewLine;
                            //MSAL
                            cabeceraDocTxt    = documentoTxt.Item1;
                            TotalServicios   += documentoTxt.Item3;
                            TotalDeducciones += documentoTxt.Item4;
                            TotalRPS++;


                            if (String.Compare(cabeceraDocTxt.Substring(12, 8), MinFecha) < 0)
                            {
                                MinFecha = cabeceraDocTxt.Substring(12, 8);
                            }

                            if (String.Compare(cabeceraDocTxt.Substring(20, 8), MaxFecha) > 0)
                            {
                                MaxFecha = cabeceraDocTxt.Substring(20, 8);
                            }

                            DocumentosGP.CreaLogFactura(trxVenta.soptype, trxVenta.sopnumbe, rutaYNom, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _usuario, string.Empty, trxVenta.CicloDeVida.targetSingleStatus,
                                                        trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus));

                            DocumentosGP.ActualizaOCreaLogFactura(trxVenta.soptype, trxVenta.sopnumbe, rutaYNom, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _usuario, string.Empty,
                                                                  Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor,
                                                                  trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus));
                        }
                        else
                        {
                            msj += trxVenta.CicloDeVida.sMsj;
                        }
                    }
                    catch (InvalidOperationException ae)
                    {
                        msj = ae.Message + Environment.NewLine;
                        errores++;
                    }
                    catch (TimeoutException ae)
                    {
                        string imsj = ae.InnerException == null ? "" : ae.InnerException.ToString();
                        msj = ae.Message + " " + imsj + Environment.NewLine + ae.StackTrace;
                        errores++;
                    }
                    catch (DirectoryNotFoundException dnf)
                    {
                        msj = "El comprobante fue emitido, pero no se pudo guardar el archivo en: " + trxVenta.ruta_clave + " Verifique si existe la carpeta." + Environment.NewLine;
                        DocumentosGP.CreaLogFactura(trxVenta.soptype, trxVenta.sopnumbe, msj, "errCarpeta", _usuario, string.Empty, Maquina.estadoBaseError,
                                                    trxVenta.CicloDeVida.targetBinStatus, dnf.Message);
                        msj += dnf.Message + Environment.NewLine;
                        errores++;
                    }
                    catch (IOException io)
                    {
                        msj = "El comprobante fue emitido, pero no se pudo guardar el archivo en: " + trxVenta.ruta_clave + " Verifique permisos a la carpeta." + Environment.NewLine;
                        DocumentosGP.CreaLogFactura(trxVenta.soptype, trxVenta.sopnumbe, msj, "errIO", _usuario, string.Empty, Maquina.estadoBaseError,
                                                    trxVenta.CicloDeVida.targetBinStatus, io.Message);
                        msj += io.Message + Environment.NewLine;
                        errores++;
                    }
                    catch (Exception lo)
                    {
                        string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString();
                        msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace;
                        DocumentosGP.CreaLogFactura(trxVenta.soptype, trxVenta.sopnumbe, msj, "errDesconocido", _usuario, string.Empty, Maquina.estadoBaseError,
                                                    trxVenta.CicloDeVida.targetBinStatus, lo.Message);
                        errores++;
                    }
                    finally
                    {
                        OnProgreso(i * 100 / listaTransaccionesVenta.Count, "Doc:" + trxVenta.sopnumbe + " " + msj.Trim() + Environment.NewLine);              //Notifica al suscriptor
                        i++;
                    }
                    if (errores > 10)
                    {
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(detalleDocTxt))
                {
                    //Genero finalmente con los totales el header y el trailer.
                    //MSAL
                    cabeceraDocTxt = cabeceraDocTxt.Substring(0, 12) + MinFecha + MaxFecha;
                    trailerDocTxt  = "9" + TotalRPS.ToString().PadLeft(7, '0') + TotalServicios.ToString().PadLeft(15, '0') + TotalDeducciones.ToString().PadLeft(15, '0');

                    string rn = serviciosPrefectura.GuardaArchivoTxt(ruta, nombreArchivo, extension, cabeceraDocTxt + Environment.NewLine + detalleDocTxt + trailerDocTxt);
                    OnProgreso(100, "Archivo guardado en: " + rn);
                }
                else
                {
                    OnProgreso(100, "No se generó el archivo porque ningún documento de venta tenía el status correcto.");
                }
            }
            finally
            {
                OnProgreso(100, "-----------");
            }
            OnProgreso(100, "Proceso finalizado!");
        }