Beispiel #1
0
        private void DoWork()
        {
            while (!_shouldStop)
            {
                try
                {
                    var nucleo = new BusinessLayer.Nucleo();

                    //DateTransaction = System.DateTime.Now.AddDays(-1);
                    DateTransaction = System.DateTime.Now;
                    fechaSwitch     = DateTransaction.ToString("yyyy/MM/dd");

                    // Verifico si el servicio esta dentro de parametro permitido para ejecutar el proceso
                    string[] strArrayInicio = StrHoraInicio.Split(':');
                    string[] strArrayHasta  = StrHoraHasta.Split(':');

                    if (strArrayInicio.Length == 2 && strArrayHasta.Length == 2)
                    {
                        if ((DateTime.Now.Hour > Convert.ToInt16(strArrayInicio[0])) ||
                            ((DateTime.Now.Hour == Convert.ToInt16(strArrayInicio[0])) &&
                             (DateTime.Now.Minute > Convert.ToInt16(strArrayInicio[1]))))
                        {
                            if ((DateTime.Now.Hour < Convert.ToInt16(strArrayHasta[0])) ||
                                ((DateTime.Now.Hour == Convert.ToInt16(strArrayHasta[0])) &&
                                 (DateTime.Now.Minute < Convert.ToInt16(strArrayHasta[1]))))
                            {
                                // Testing save Logs
                                trace.TraceEvent(TraceEventType.Start, 100, "Inicia el proceso de conciliacion de TvCable. Fecha actual: " + DateTime.Now);

                                // Verifica si existen archivos de conciliacion de los MDP pendientes de validar su formato(ENTREGADO).
                                var itemEntregado = nucleo.GetItemCatalogoPorCodigoItemCodigoCatalogo(Constants.CodeEstadoArchivosConciliacion, Constants.CodeItemEntregado);


                                trace.TraceEvent(TraceEventType.Stop, 116, "Termina el proceso de conciliacion de TvCable. Fecha actual: " + DateTime.Now);
                                System.Diagnostics.Trace.CorrelationManager.StopLogicalOperation();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                }

                try
                {
                    Thread.Sleep(Convert.ToInt32(DefaultInterval));
                }
                catch (Exception ex)
                {
                }
                finally
                {
                }
            }
        }
Beispiel #2
0
        public void DoWork()
        {
            while (!_shouldStop)
            {
                try
                {
                    var      nucleo = new BusinessLayer.Nucleo();
                    DateTime fechaTransacciones;

                    var catalogoTest = nucleo.GetCatalogoPorCodigoCatalogo("EST_CONCILIACION");

                    // Verifico si el servicio esta dentro de parametro permitido para ejecutar el proceso
                    if (checkHorario(StrHoraInicio, StrHoraHasta))
                    {
                        #region Inicia el proceso de conciliacion de TvCable
                        // Testing save Logs
                        Base.WriteLog(Base.ErrorTypeEnum.Start, 100, " --------------------------------------------");
                        Base.WriteLog(Base.ErrorTypeEnum.Start, 100, "Inicia el proceso de conciliacion de TvCable.");

                        // Verifica si existen archivos de conciliacion de los MDP pendientes de procesar(POR_PROCESAR).
                        var itemPorProcesar       = nucleo.GetItemCatalogoPorCodigoItemCodigoCatalogo(Constants.CodeItemPorProcesar, Constants.CodeEstadoArchivosConciliacion);
                        var itemProcesandoArchivo = nucleo.GetItemCatalogoPorCodigoItemCodigoCatalogo(Constants.CodeItemProcesando, Constants.CodeEstadoArchivosConciliacion);
                        var itemProcesadoArchivo  = nucleo.GetItemCatalogoPorCodigoItemCodigoCatalogo(Constants.CodeItemProcesado, Constants.CodeEstadoArchivosConciliacion);


                        // Archivos disponibles por procesar
                        var archivosDisponibles = Conciliacion.ObtenerArchivoConciliacionPorEstado(itemPorProcesar.IdItemCatalogo);
                        Base.WriteLog(Base.ErrorTypeEnum.Information, 101, "Verifica si existen archivos disponibles(MDP) por procesar.");

                        if (archivosDisponibles != null && archivosDisponibles.Tables.Count > 0)
                        {
                            if (archivosDisponibles.Tables[0].Rows.Count > 0)
                            {
                                Base.WriteLog(Base.ErrorTypeEnum.Information, 102, "Existen disponibles: " + archivosDisponibles.Tables[0].Rows.Count + " archivos por procesar.");

                                var dtArchivosPorProcesar = archivosDisponibles.Tables[0];
                                foreach (DataRow rowFile in dtArchivosPorProcesar.Rows)
                                {
                                    #region Inicia el procesamiento de los archivos

                                    // Valida el formato de los archivos
                                    var idArchivo     = (int)rowFile["DAC_ID"];
                                    var codigoMdp     = rowFile["DAC_CODIGO_MDP"].ToString();
                                    var nombreFileMdp = rowFile["DAC_NOMBRE_ARCHIVO"].ToString();
                                    fechaTransacciones = Convert.ToDateTime(rowFile["DAC_FECHA_TRX"].ToString());
                                    var numeroTrxFileMdp = (int)rowFile["DAC_NUM_TRX"];
                                    var byteArchivo      = (Byte[])rowFile["DAC_FILE"];
                                    var mailNotificacion = rowFile["DAC_MAIL_NOTIFICACION"].ToString();
                                    Base.WriteLog(Base.ErrorTypeEnum.Trace, 103, "Procesasndo el archivo: IdArchivo: " + idArchivo + ". Codigo MDP: " + codigoMdp + ". Nombre del archivo: " + nombreFileMdp + ". Fecha de las transacciones a conciliar: " + fechaTransacciones + ". Numero de transacciones: " + numeroTrxFileMdp);

                                    // Actualiza el estado del archivo a: PROCESANDO
                                    var updateFileDataMdp = Conciliacion.ActualizaEstadoArchivo(idArchivo, itemProcesandoArchivo.IdItemCatalogo);
                                    Base.WriteLog(Base.ErrorTypeEnum.Trace, 104, "Se cambia el estado del archivo: " + idArchivo + " (" + codigoMdp + ") " + " a procesando.");
                                    #endregion

                                    #region Obtiene lo pagos de Tuves y lo registra en la tabla de trabajo
                                    // Obtiene la infomacion del codigo del MDP a enviar a la base de tuves
                                    var datosRecaudador = Conciliacion.ObtieneDatosRecaudadorPorCodigo(codigoMdp);

                                    // Elimina las Trx que esten en la tabla de Tuves
                                    var delTrxTuves = Conciliacion.EliminaTrxTuves(codigoMdp, fechaTransacciones);
                                    Base.WriteLog(Base.ErrorTypeEnum.Trace, 105, "Elimina los registros de la tabla de trabajo de Tuves: codigoMdp: " + codigoMdp + ". Fecha de las Trx a eliminar: " + fechaTransacciones);

                                    var idMdpEnTuves = datosRecaudador.CodigoTuves;
                                    Base.WriteLog(Base.ErrorTypeEnum.Trace, 106, "Se obtiene los datos de tuves (base Mysql) para insertarlos en la tabla de trabajo, IdMdp: " + idMdpEnTuves + ". Fecha de pagos a traer: " + fechaTransacciones);
                                    var dsPagosTuves = Tuves.ObtenerTransaccionesPorFechaMdp(idMdpEnTuves, fechaTransacciones);
                                    if (dsPagosTuves != null)
                                    {
                                        if (dsPagosTuves.Tables.Count > 0)
                                        {
                                            if (dsPagosTuves.Tables[0].Rows.Count > 0)
                                            {
                                                var dtPagosTuves = dsPagosTuves.Tables[0];
                                                foreach (DataRow row in dtPagosTuves.Rows)
                                                {
                                                    var idMdp              = row["DealerKey"].ToString();
                                                    var codigoMdpTuv       = row["CollectID"].ToString();
                                                    var fecha              = Util.ConvertStringToDateTimeMysql(row["PayDate"].ToString());
                                                    var hora               = Util.ConvertStringToDateTimeMysql(row["ts"].ToString());
                                                    var idTransaccionTuves = row["UniqueID"].ToString();
                                                    var idTrxMdp           = row["PayDocN"].ToString();
                                                    var monto              = Util.ConvertStringToDecimal(row["PayAmnt"].ToString());
                                                    var idCliente          = row["CustIdent"].ToString();
                                                    var producto           = row["CustPaym"].ToString();
                                                    var usuarioVenta       = row["tsUser"].ToString();

                                                    var registerPagoTuves = Conciliacion.RegistraPagoTuvez(idMdp,
                                                                                                           codigoMdp, fecha, hora, idTransaccionTuves, idTrxMdp, monto,
                                                                                                           string.Empty, 0, idCliente, producto, usuarioVenta,
                                                                                                           idArchivo, codigoMdpTuv);

                                                    if (registerPagoTuves == -1)
                                                    {
                                                        Base.WriteLog(Base.ErrorTypeEnum.Error, 111, "Se presentaron errores al tratar de insertar los registros de la base de datos de Mysql a la tabla de trabajo de Tuves: TRANSACCION_TVCABLE");
                                                    }
                                                }
                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 110, "Se registraron: " + dtPagosTuves.Rows.Count + " pagos obtenidos de la tabla de Tuves con los parametros enviados: IdMdp: " + idMdpEnTuves + ". Fecha de pagos a traer: " + fechaTransacciones);
                                            }
                                            else
                                            {
                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 109, "No existen transacciones de pago en la base de tuves con los parametros enviados: IdMdp: " + idMdpEnTuves + ". Fecha de pagos a traer: " + fechaTransacciones);
                                            }
                                        }
                                        else
                                        {
                                            Base.WriteLog(Base.ErrorTypeEnum.Error, 108, "Eror al obtener los pagos de la base de Tuves, IdMdp: " + idMdpEnTuves + ". Fecha de pagos a traer: " + fechaTransacciones);
                                        }
                                    }
                                    else
                                    {
                                        Base.WriteLog(Base.ErrorTypeEnum.Error, 107, "Eror al obtener los pagos de la base de Tuves, IdMdp: " + idMdpEnTuves + ". Fecha de pagos a traer: " + fechaTransacciones);
                                    }
                                    #endregion

                                    #region Obtiene y registra la data del MDP en la tabla de trabajo
                                    // Elimina data si existe en la tabla de trabajo
                                    var eliminaDatosTrabajo = Conciliacion.EliminaTrxMdp(fechaTransacciones, codigoMdp);
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 112, "Se elimina los registros de la tabla de trabajo del MDP: Fecha transacciones: " + fechaTransacciones + ". Codigo MDP: " + codigoMdp);

                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 113, "Se decodifica el archivo enviado por el MDP al directorio FTP para iniciar el analisis de las transacciones que estan registradas en el mismo.");
                                    Stream streamFileMdp = new MemoryStream(byteArchivo);
                                    var    numtrxFileMdp = 0;
                                    using (System.IO.TextReader tmpReader = new System.IO.StreamReader(streamFileMdp))
                                    {
                                        String lineFile;
                                        while ((lineFile = tmpReader.ReadLine()) != null)
                                        {
                                            // Registra el contenido del archivo(cada pago) en la base de datos

                                            // Obtengo el detalle de cada campo
                                            var detallePago = Conciliacion.ObtieneDetalleTransaccionArchivo(lineFile);
                                            if (System.String.CompareOrdinal(detallePago.ResultCode, "0") == 0)
                                            {
                                                // Registro en la base de datos
                                                var idDetallePago = Conciliacion.RegistraPagoMdp(codigoMdp, detallePago.FechaInicio,
                                                                                                 detallePago.HoraInicio, detallePago.IdTransactionMdp,
                                                                                                 detallePago.IdTransactionTvCable, detallePago.Cedula, detallePago.UsuarioVentas, detallePago.Producto, detallePago.Monto, detallePago.FechaFin,
                                                                                                 detallePago.HoraFin, 0, idArchivo);
                                                numtrxFileMdp++;
                                            }
                                            else
                                            {
                                                // Registra Log de error alobtener un dato
                                            }
                                        }
                                    }
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 114, "Se registraron: " + numtrxFileMdp + " transacciones del archivo enviado por el MDP: " + codigoMdp + ". Fecha: " + fechaTransacciones);
                                    #endregion

                                    #region Inicia el proceso de conciliacion

                                    // Obtiene la informacion de las tablas de trabajo por el identificador del archivo
                                    // 1. MDP
                                    var dataMdp = Conciliacion.ObtieneDetallePagosMdpPorIdArchivo(idArchivo);
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 115, "Se obtiene la informacion del MDP a coinciliar.");

                                    // 2. TUVES
                                    var dataTuves = Conciliacion.ObtieneDetallePagosTuvesPorIdArchivo(idArchivo);
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 116, "Se obtiene la informacion del TUVES a coinciliar.");

                                    if (dataMdp != null)
                                    {
                                        if (dataMdp.Tables.Count > 0)
                                        {
                                            if (dataMdp.Tables[0].Rows.Count > 0)
                                            {
                                                if (dataTuves != null)
                                                {
                                                    if (dataTuves.Tables.Count > 0)
                                                    {
                                                        if (dataMdp.Tables[0].Rows.Count > 0)
                                                        {
                                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 123, "Inicia el proceso de conciliacion: IdArchivo: " + idArchivo + ". Codigo Mdp: " + codigoMdp + ". Fecha Trx: " + fechaTransacciones);
                                                            var resultadoConciliacion = Conciliacion.GeneraProcesoConciliacion(idArchivo, codigoMdp, fechaTransacciones, dataMdp.Tables[0], dataTuves.Tables[0]);

                                                            // Valida el resultado de la conciliacion y registra su resultado.
                                                            #region Arma el resultado del proceos de conciliacion / arma el cuerpo mail
                                                            string xmlResponse = "<Response><ResultCode>{0}</ResultCode><ResultDescription>{1}</ResultDescription><TiempoEjecucion>{2}</TiempoEjecucion><TrxConciliadas>{3}</TrxConciliadas><TrxErrorMonto>{4}</TrxErrorMonto><TrxErrorCliente>{5}</TrxErrorCliente><TrxSobranteTuves>{6}</TrxSobranteTuves><TrxFaltanteTuves>{7}</TrxFaltanteTuves></Response>";
                                                            // Modificacion del formato de correo enviado
                                                            // Mauricio Camañero - 20 julio 2014
                                                            //string strBodyMail = "<br /><br />Resultado = {0}.<br />Descripción = {1}.<br />Tiempo de Ejecucion (milisegundos): {2}.<br />Transacciones  Conciliadas: {3}.<br />Transacciones Error Monto: {4}.<br />Transacciones Error Cliente: {5}.<br />Transacciones Sobrante TUVES: {6}.<br />Transacciones Faltante TUVES: {7}.<br /><br />";
                                                            //string strBodyMail = "<br /><hr><b>Medio de Pago:</b> {0}.<br /> <b>Fecha de Recargas Conciliadas:</b> {1}.<br /><b>Resultado del proceso de Conciliacion:</b> {2}.<br /><b>TRANSACCIONES CONCILIADAS CORRECTAMENTE:</b> {3}.<hr><br /><br /><table><tr><td><b>ERRORES:</b><br /><b>Transacciones con Error por diferencia entre el Monto reportado por el Proveedor versus SMS Lite:</b> {4}.<br /><b>Transacciones con Error por diferencia del Documento de Identidad del Cliente entre el Proveedor versus SMS Lite:</b> {5}.<br /><b>Transacciones que NO fueron reportadas por el Proveedor pero que SI existen en SMS Lite:</b> {6}.<br /><b>Transacciones que SI fueron reportadas por el Proveedor pero que NO existen en el sistema SMS Lite:</b> {7}.<br /><br />";
                                                            int totalErrores = resultadoConciliacion.TransaccionesErrorMonto +
                                                                               resultadoConciliacion.TransaccionesErrorCliente +
                                                                               resultadoConciliacion.TransaccionesSobrantesTuves +
                                                                               resultadoConciliacion.TransaccionesFaltantesTuves;
                                                            string strBodyMail = "<br /><hr><b>Medio de Pago:</b> {0}.<br /> <b>Fecha de Recargas Conciliadas:</b> {1}.<br /><b>Resultado del proceso de Conciliacion:</b> {2}.<br /><b>TRANSACCIONES CONCILIADAS CORRECTAMENTE:</b> {3}.<hr><br /><br /><table><tr><td><b>TOTAL ERRORES:</b></td><td><b> " +
                                                                                 totalErrores.ToString() +
                                                                                 " </b></td></tr><tr><td><b>Transacciones con Error por diferencia entre el Monto reportado por el Proveedor versus SMS Lite:</b></td><td> {4}</td></tr><tr><td><b>Transacciones con Error por diferencia del Documento de Identidad del Cliente entre el Proveedor versus SMS Lite:</b></td><td> {5}</td></tr><tr><td><b>Transacciones que NO fueron reportadas por el Proveedor pero que SI existen en SMS Lite:</b></td><td> {6}</td></tr><tr><td><b>Transacciones que SI fueron reportadas por el Proveedor pero que NO existen en el sistema SMS Lite:</b></td><td> {7}</td></tr></table><br />";

                                                            var strResponse = string.Format(xmlResponse, resultadoConciliacion.ResultCode,
                                                                                            resultadoConciliacion.ResultDescription,
                                                                                            resultadoConciliacion.TiempoEjecucion,
                                                                                            resultadoConciliacion.TransaccionesConciliadas,
                                                                                            resultadoConciliacion.TransaccionesErrorMonto,
                                                                                            resultadoConciliacion.TransaccionesErrorCliente,
                                                                                            resultadoConciliacion.TransaccionesSobrantesTuves,
                                                                                            resultadoConciliacion.TransaccionesFaltantesTuves);

                                                            var strResponseMail = string.Format(strBodyMail, codigoMdp,
                                                                                                fechaTransacciones,
                                                                                                resultadoConciliacion.ResultDescription,
                                                                                                resultadoConciliacion.TransaccionesConciliadas,
                                                                                                resultadoConciliacion.TransaccionesErrorMonto,
                                                                                                resultadoConciliacion.TransaccionesErrorCliente,
                                                                                                resultadoConciliacion.TransaccionesSobrantesTuves,
                                                                                                resultadoConciliacion.TransaccionesFaltantesTuves);

                                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 124, "El resultado del proceso de conciliacion es: ResultCode: " + resultadoConciliacion.ResultCode + ". Result description: " + resultadoConciliacion.ResultDescription + ". Transacciones conciliadas: " + resultadoConciliacion.TransaccionesConciliadas + ". Transacciones Error Monto: " + resultadoConciliacion.TransaccionesErrorMonto + ". Transacciones Error Cliente: " + resultadoConciliacion.TransaccionesErrorCliente + ". Transacciones Sobrantes Tuves: " + resultadoConciliacion.TransaccionesSobrantesTuves + ". Transacciones Faltantes Tuves: " + resultadoConciliacion.TransaccionesFaltantesTuves);

                                                            var registraResponse = Conciliacion.RegistraXmlResultadoConciliacion(idArchivo, strResponse);
                                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 125, "Se registra el XML RESPONSE en el detalle del archivo: " + strResponse);

                                                            #endregion

                                                            #region Si existe algun error envia una mail de notificacion

                                                            var resSendMail = 0;
                                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 130, "Se envia la notificacion al MDP: Con el resultado de la conciliacion.");
                                                            var    bodyMailNotification = string.Format(SubjectMailResultConciliacion, codigoMdp, strResponseMail);
                                                            var    mails          = mailNotificacion.Split(SeparatorMails);
                                                            string resultSendMail = string.Empty;

                                                            if (mails.Length > 0)
                                                            {
                                                                foreach (var mail in mails)
                                                                {
                                                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 131, "Se envia el mail de notificacion a: FROM: " + FromMailNotification + ". To: " + mail + ". Asunto: " + AsuntoMailNotificacion + ". Mail: " + bodyMailNotification);
                                                                    resSendMail = Util.SendMail(FromMailNotification, mail, AsuntoMailNotificacion + " - " + codigoMdp.ToUpper(), bodyMailNotification, null, string.Empty, out resultSendMail);
                                                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 132, "Resultado del envio del mail: Estado: " + resSendMail + ". Mensaje: " + resultSendMail);
                                                                }
                                                            }

                                                            #endregion

                                                            #region Envia notificacion por mail a los Administradores
                                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 133, "Se envia la notificacion al MDP: Con el resultado de la conciliacion.");
                                                            var    bodyMailNotificationAdmin = string.Format(SubjectMailResultConciliacion, codigoMdp, strResponseMail);
                                                            var    mailsAdmin          = MailNotificacionAdmin.Split(SeparatorMails);
                                                            string resultSendMailAdmin = string.Empty;

                                                            if (mailsAdmin.Length > 0)
                                                            {
                                                                foreach (var mail in mailsAdmin)
                                                                {
                                                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 134, "Se envia el mail de notificacion al ADMIN: FROM: " + FromMailNotification + ". To: " + ". Asunto: " + AsuntoMailNotificacion + ". Mail: " + bodyMailNotificationAdmin);
                                                                    resSendMail = Util.SendMail(FromMailNotification, mail, AsuntoMailNotificacion + codigoMdp, bodyMailNotificationAdmin, null, string.Empty, out resultSendMailAdmin);
                                                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 135, "Resultado del envio del mail al Admin: Estado: " + resSendMail + ". Mensaje: " + resultSendMailAdmin);
                                                                }
                                                            }
                                                            #endregion
                                                        }
                                                        else
                                                        {
                                                            Base.WriteLog(Base.ErrorTypeEnum.Error, 122, "Existe un error al obtener la informacion de la tabla de trabajo de Tuves: TRANSACCION_TVCABLE con los datos: IdArchivo: " + idArchivo);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        Base.WriteLog(Base.ErrorTypeEnum.Error, 121, "Existe un error al obtener la informacion de la tabla de trabajo de Tuves: TRANSACCION_TVCABLE con los datos: IdArchivo: " + idArchivo);
                                                    }
                                                }
                                                else
                                                {
                                                    Base.WriteLog(Base.ErrorTypeEnum.Error, 120, "Existe un error al obtener la informacion de la tabla de trabajo de Tuves: TRANSACCION_TVCABLE con los datos: IdArchivo: " + idArchivo);
                                                }
                                            }
                                            else
                                            {
                                                Base.WriteLog(Base.ErrorTypeEnum.Error, 119, "Existe un error al obtener la informacion de la tabla de trabajo del MDP: TRANSACCION_MDP con los datos: IdArchivo: " + idArchivo);
                                            }
                                        }
                                        else
                                        {
                                            Base.WriteLog(Base.ErrorTypeEnum.Error, 118, "Existe un error al obtener la informacion de la tabla de trabajo del MDP: TRANSACCION_MDP con los datos: IdArchivo: " + idArchivo);
                                        }
                                    }
                                    else
                                    {
                                        Base.WriteLog(Base.ErrorTypeEnum.Error, 117, "Existe un error al obtener la informacion de la tabla de trabajo del MDP: TRANSACCION_MDP con los datos: IdArchivo: " + idArchivo);
                                    }


                                    #endregion

                                    #region Actualiza el estado del archivo a: PROCESADO
                                    var updateFileFinalMdp = Conciliacion.ActualizaEstadoArchivo(idArchivo, itemProcesadoArchivo.IdItemCatalogo);
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 126, "Se actualiza el estado del archivo a PROCESADO: IdArchivo: " + idArchivo + ". Codigo MDP: " + codigoMdp + ". Fecha Transacciones: " + fechaTransacciones);

                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 127, "Termina el proceso de conciliacion del archivo: IdArchivo: " + idArchivo + ". Codigo MDP: " + codigoMdp + ". Fecha Transacciones: " + fechaTransacciones);
                                    #endregion
                                }
                            }
                            else
                            {
                                Base.WriteLog(Base.ErrorTypeEnum.Information, 102, "NO existen ARCHIVOS DISPONIBLES por procesar.");
                            }
                        }
                        else
                        {
                            Base.WriteLog(Base.ErrorTypeEnum.Information, 102, "NO existen ARCHIVOS DISPONIBLES por procesar.");
                        }
                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    Base.WriteLog(Base.ErrorTypeEnum.Error, 128, "Se presento un error en el proceso de conciliacion: Mensaje: " + ex.Message + ". Excepcion: " + ex.ToString());
                }

                try
                {
                    //Mauricio - 20 julio 2014 - verifica si existen archivos no colocados en este directorio FTP
                    string   filename = null;
                    string   fecha;
                    DateTime fechaTransacciones;
                    int      i;
                    int      totalRecargas = 0;


                    #region Verifica si existen archivos de conciliacion no colocados
                    // Verifico si el servicio esta dentro de parametro permitido para ejecutar el proceso
                    if (checkHorario(StrHoraInicioFiles, StrHoraHastaFiles))
                    {
                        // Testing save Logs
                        Base.WriteLog(Base.ErrorTypeEnum.Start, 400, "Inicia el proceso de verificacion de archivos de conciliacion de TvCable.");
                        Base.WriteLog(Base.ErrorTypeEnum.Information, 401, "Obtiene todos los codigos de recaudadores que no tienen archivos de conciliacion.");
                        DataSet recaudadores = Conciliacion.ObtenerRecaudadoresSinArchivo();
                        fechaTransacciones = DateTime.Now.AddDays(-1);
                        fecha = fechaTransacciones.ToString("yyyyMMdd");
                        try
                        {
                            if (recaudadores != null)
                            {
                                for (i = 0; i < recaudadores.Tables[0].Rows.Count; i++)
                                {
                                    string codigoMDP = recaudadores.Tables[0].Rows[i]["REC_CODIGO"].ToString();
                                    filename = codigoMDP + "-" + fecha + ".csv";

                                    string cuentaCorreo = ConfigurationManager.AppSettings["cuentaDestinoMail" + codigoMDP] != null ? ConfigurationManager.AppSettings["cuentaDestinoMail"] : ConfigurationManager.AppSettings["CuentaCorreoOrigen"];
                                    //cuentaCorreo = cuentaCorreo + SeparatorMails + ConfigurationManager.AppSettings["cuentaDestinoMail"];

                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 402, "Archivo de conciliacion no encontrado en la base de datos: " + filename + ".");
                                    Base.WriteLog(Base.ErrorTypeEnum.Information, 403, "Obteniendo transacciones en SMS Lite para el recaudador: " + codigoMDP + " para la fecha " + fechaTransacciones.ToString("yyyy-MM-dd") + ".");

                                    var dsPagosTuves = Tuves.ObtenerTransaccionesPorFechaMdp(codigoMDP, Convert.ToDateTime(fechaTransacciones.ToString("yyyy-MM-dd")));
                                    if (dsPagosTuves != null && dsPagosTuves.Tables.Count > 0)
                                    {
                                        for (int contador = 0; contador < dsPagosTuves.Tables[0].Rows.Count; contador++)
                                        {
                                            totalRecargas = dsPagosTuves.Tables[0].Rows.Count;
                                        }



                                        if (totalRecargas > 0)
                                        {
                                            #region Verificar si existen archivos de conciliacion en server FTP
                                            string resultado = "";
                                            try
                                            {
                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 404, "Intentar registrar archivo [" + filename + "] de conciliacion usando el servicio web.");
                                                TvCableConciliacionServicesClient ws = new TvCableConciliacionServicesClient();
                                                resultado = ws.RegistrarArchivoConciliacionMdp(filename, fecha, codigoMDP, 0, 0, cuentaCorreo, "proceso generado automaticamente");
                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 405, "Resultado del proceso de registro del archivo [" + filename + "] de conciliacion usando el servicio web." + resultado);
                                            }
                                            catch (Exception e)
                                            {
                                                Base.WriteLog(Base.ErrorTypeEnum.Error, 405, "Error en el proceso de registro del archivo [" + filename + "] usando el servicio web.");
                                            }
                                            if (resultado.IndexOf("Could not find file") > 0)
                                            {
                                                //string emailRecaudador;
                                                string strBodyMail    = ConfigurationManager.AppSettings["bodyVerificacionArchivoConciliacion"];
                                                string strSubjectMail = ConfigurationManager.AppSettings["subjectVerificacionArchivoConciliacion"];
                                                if (codigoMDP.ToLower().Equals("broadnet"))
                                                {
                                                    cuentaCorreo = cuentaCorreo + SeparatorMails + ConfigurationManager.AppSettings["cuentaDefaultBROADNET"];
                                                }
                                                cuentaCorreo = cuentaCorreo + SeparatorMails + ConfigurationManager.AppSettings["cuentaDestinoMail"];
                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 406, "El archivo [" + filename + "] no se encuentra en el directorio FTP, enviando notificación por correo.");
                                                #region En el caso que tenga errores enviar el correo
                                                strBodyMail = string.Format(strBodyMail, codigoMDP + saltoLinea + saltoLinea,
                                                                            saltoLinea + saltoLinea + lineaAzul + negrilla,
                                                                            cierreNegrilla + codigoMDP + saltoLinea + negrilla,
                                                                            cierreNegrilla + fechaTransacciones.ToString("yyyy-MM-dd") + saltoLinea + negrilla,
                                                                            cierreNegrilla + filename + lineaAzul + saltoLinea + saltoLinea,
                                                                            saltoLinea);

                                                var resSendMail = 0;

                                                Base.WriteLog(Base.ErrorTypeEnum.Information, 407, "Se envia la notificacion al MDP indicando error en la colocación del archivo de conciliacion.");
                                                var    mails          = cuentaCorreo.Split(SeparatorMails);
                                                string resultSendMail = string.Empty;

                                                if (mails.Length > 0)
                                                {
                                                    foreach (var mail in mails)
                                                    {
                                                        Base.WriteLog(Base.ErrorTypeEnum.Information, 408, "Se envia el mail de notificacion de colocación de archivo de conciliacion a: FROM: " + FromMailNotification + ". To: " + mail + ". Asunto: " + strSubjectMail + ". Mail: " + strBodyMail);
                                                        resSendMail = Util.SendMail(FromMailNotification, mail, strSubjectMail, strBodyMail, null, string.Empty, out resultSendMail);
                                                        Base.WriteLog(Base.ErrorTypeEnum.Information, 409, "Resultado del envio del mail de notificacion de colocación de archivo de conciliacion: Estado: " + resSendMail + ". Mensaje: " + resultSendMail);
                                                    }
                                                }
                                                #endregion
                                            }
                                            //errores = errores + "</ br>Proveedor: {0}</ br> Fecha: {1}</ br>Nombre de archivo: {2}</ br>";
                                            #endregion
                                        }
                                        else
                                        {
                                            Base.WriteLog(Base.ErrorTypeEnum.Information, 403, "Archivo de conciliacion [" + filename + "] del proveedor " + codigoMDP + " no tiene pagos registrados para la fecha [" + fechaTransacciones + "].");
                                        }
                                    }
                                    else
                                    {
                                        Base.WriteLog(Base.ErrorTypeEnum.Information, 402, "Archivo de conciliacion [" + filename + "] del proveedor " + codigoMDP + " no tiene pagos registrados para la fecha [" + fechaTransacciones + "].");
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Base.WriteLog(Base.ErrorTypeEnum.Information, 000, "Error al procesar [" + filename + "]. " + e.Message);
                        }
                    }
                    #endregion
                }
                catch (Exception e)
                {
                    Base.WriteLog(Base.ErrorTypeEnum.Error, 001, "Error al verificar los archivos de conciliacion no enviados. " + e.Message);
                }

                try
                {
                    Thread.Sleep(Convert.ToInt32(DefaultInterval));
                    //Mauricio - 4 de agosto de 2014
                    //Thread.Sleep(new TimeSpan(0, 0, DefaultInterval));
                }
                catch (Exception ex)
                {
                    Base.WriteLog(Base.ErrorTypeEnum.Error, 129, "Se presento un error en el proceso de conciliacion: Mensaje: " + ex.Message + ". Excepcion: " + ex.ToString());
                }
                finally
                {
                }
            }
        }