Ejemplo n.º 1
0
        private void DoWork(object state)
        {
            var    _context = _scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
            string Schema   = _configuration.GetValue <string>("schema");
            string nombreArchivo;
            //nombreArchivo = "Carga";
            string        rutaDescargar;
            int           registrosCargados = 0;
            StringBuilder mailTemplate      = new StringBuilder(); // se genera string correo noticación
            StringBuilder foliosRepetidos   = new StringBuilder(); //se genera string para folio repetidos
            string        sql  = "";
            string        ruta = "";


            using (var connection = new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection")))
            {
                var horaActual = DateTime.Now.TimeOfDay;
                if (horaActual >= horaInicial && horaActual <= horaFinal && !estaOcupado)
                {
                    /*Todo:  Revisar Findesemanas*/
                    if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
                    {
                        nombreArchivo = "Carga" + DateTime.Now.AddDays(-3).ToString("ddMMyyyy");
                        ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                    }
                    else if (
                        DateTime.Now.DayOfWeek == DayOfWeek.Thursday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Wednesday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Tuesday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Friday
                        )
                    {
                        nombreArchivo = "Carga" + DateTime.Now.AddDays(-1).ToString("ddMMyyyy");
                        ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                    }
                    else
                    {
                        return;
                    }
                    rutaDescargar = _configuration.GetValue <string>("RutaCargaCredito") + nombreArchivo + ".txt";

                    rutaDescargar = @"c:\cargainicial\CargaExtra04122019.txt";
                    nombreArchivo = "CargaHistoricoTotal";
                    //Valida si archivo de carga y dia de hoy estan cargados en BASE
                    int existeCarga;
                    sql = "select count(*) from " + Schema + ".CargasIniciales" +
                          " where convert(varchar, fechaCarga,112)= convert(varchar, getdate(), 112)" +
                          " and NombreArchivoCarga = '" + nombreArchivo + "'";
                    existeCarga = connection.Query <int>(sql).FirstOrDefault();


                    if (existeCarga != 0)
                    {
                        estaOcupado = true;
                        //CsvParserOptions csvParserOptions = new CsvParserOptions(true, ';');
                        //CargaInicialMapping csvMapper = new CargaInicialMapping();
                        //CsvParser<CargaInicialIM> csvParser = new CsvParser<CargaInicialIM>(csvParserOptions, csvMapper);

                        //var result = csvParser
                        //    .ReadFromFile(rutaDescargar, Encoding.ASCII)
                        //    .Where(x => x.IsValid)
                        //    .Select(x => x.Result)
                        //    .AsSequential()
                        //    .ToList();
                        //StringBuilder inserts = new StringBuilder();
                        //result.ForEach(x => inserts.AppendLine($"insert into {Schema}.Cargasiniciales values ('{DateTime.Now}','{DateTime.ParseExact(x.FechaCorresponde.ToString(), "ddMMyyyy", CultureInfo.InvariantCulture)}','{x.FolioCredito}','{x.RutAfiliado}','{x.CodigoOficinaIngreso}','{x.CodigoOficinaPago}','{x.LineaCredito}','{x.RutResponsable}','{x.CanalVenta}','{x.Estado}','{x.FechaCorresponde}','{nombreArchivo}');"));
                        //connection.Execute(inserts.ToString(), null, null, 240);


                        //----------- Fin carga de Registros en Cargas Iniciales


                        //---------- SE cuenta Cantidad de Registros cargados en Cargas Iniciales

                        var cargaInicials = new List <CargaInicial>();
                        sql = "select  * from " + Schema + ".CargasIniciales" +
                              " where convert(varchar, fechaCarga,112)= convert(varchar, getdate(), 112)" +
                              " and NombreArchivoCarga = '" + nombreArchivo + "'";

                        cargaInicials = connection.Query <CargaInicial>(sql).AsList();
                        //-------------Se genera Registro de Carga
                        //StringBuilder mailTemplate = new StringBuilder();
                        mailTemplate.AppendLine("<p>Los créditos han sido cargados exitosamente</p>");
                        mailTemplate.AppendLine("<p>REPORTE DE CARGA DIARIA GALVARINO</p> ");
                        mailTemplate.AppendLine("<p>---------------------------------</p>");
                        mailTemplate.AppendLine("<p>Fecha de Carga: " + DateTime.Now + "</p>");
                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p>* Nombre Archivo : " + nombreArchivo + ".txt</p>");
                        //mailTemplate.AppendLine("<p>* Archivo Base Carga " + result.Count + " Registro(s)</p>");
                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p>* Carga en Tabla CargasInicales " + cargaInicials.Count + " Registro(s)</p>");


                        int i = 1;

                        foreach (var ci in cargaInicials)
                        {
                            ////Se valida si credito ya esta cargado en BD
                            sql = "select count(*)" +
                                  " from " + Schema + ".creditos" +
                                  " where FolioCredito='" + ci.FolioCredito + "'";
                            int existe = connection.Query <int>(sql).FirstOrDefault();


                            //Valida que No está cargado anteriormente el folio
                            if (existe == 0)
                            {
                                //-----------SE inicia creacion de objeto para cargas en Tablas creditos.

                                var    oficinaProceso = _context.Oficinas.Include(x => x.OficinaProceso).FirstOrDefault(x => x.Codificacion == ci.CodigoOficinaPago);
                                string esRM           = oficinaProceso.EsRM ? $"1" : $"0";

                                /*  TODO: Caso de La Unión ver con Jenny Bernales  */
                                Dictionary <string, string> _setVariables = new Dictionary <string, string>();
                                _setVariables.Add("OFICINA_PAGO", ci.CodigoOficinaPago);
                                _setVariables.Add("OFICINA_INGRESO", ci.CodigoOficinaIngreso);
                                _setVariables.Add("FOLIO_CREDITO", ci.FolioCredito);
                                _setVariables.Add("RUT_AFILIADO", ci.RutAfiliado);
                                _setVariables.Add("FECHA_VENTA", ci.FechaCorresponde.ToString());
                                _setVariables.Add("ES_RM", esRM);
                                _setVariables.Add("DOCUMENTO_LEGALIZADO", $"0");
                                _setVariables.Add("OFICINA_PROCESA_NOTARIA", oficinaProceso.OficinaProceso.Codificacion);

                                //---------Se Genera Registo en Tareas y Solicitudes
                                _wfservice = new WorkflowService(new DefaultWorkflowKernel(_context, _configuration));
                                var wf = _wfservice.InstanciarHistorico(ProcesoDocumentos.NOMBRE_PROCESO, "wfboot", "Ingreso Automatico de Creditos Vendidos", _setVariables);


                                Credito cred = new Credito
                                {
                                    FechaDesembolso = ci.FechaCorresponde,
                                    FechaFormaliza  = DateTime.Now.AddDays(-1),
                                    FolioCredito    = ci.FolioCredito,
                                    MontoCredito    = 0,
                                    RutCliente      = ci.RutAfiliado,
                                    NumeroTicket    = wf.NumeroTicket
                                };

                                if (ci.LineaCredito.ToLower().Contains("credito normal") && ci.Estado.Contains("Reprogramado"))
                                {
                                    cred.TipoCredito = TipoCredito.Reprogramacion;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("credito normal") || ci.LineaCredito.ToLower().Contains("compra cartera") || ci.LineaCredito.ToLower().Contains("credito paralelo"))
                                {
                                    cred.TipoCredito = TipoCredito.Normal;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("reprogr"))
                                {
                                    cred.TipoCredito = TipoCredito.Reprogramacion;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("acuerdo de creditos castigados"))
                                {
                                    cred.TipoCredito = TipoCredito.AcuerdoPago;
                                }

                                IEnumerable <ConfiguracionDocumento> configs = _context.ConfiguracionDocumentos.Where(x => x.TipoCredito == cred.TipoCredito && x.TipoExpediente == TipoExpediente.Legal).ToList();


                                ExpedienteCredito expcred = new ExpedienteCredito
                                {
                                    Credito        = cred,
                                    FechaCreacion  = DateTime.Now,
                                    TipoExpediente = TipoExpediente.Legal,
                                };

                                int incrementor = 1;
                                foreach (var confItem in configs)
                                {
                                    Documento docmnt = new Documento
                                    {
                                        TipoDocumento = confItem.TipoDocumento,
                                        Codificacion  = confItem.Codificacion,
                                        Resumen       = confItem.TipoDocumento.ToString("D")
                                    };
                                    expcred.Documentos.Add(docmnt);
                                    incrementor++;
                                }
                                _context.ExpedientesCreditos.Add(expcred);
                            }
                            //else
                            //{
                            //    // se elimina registro de tabla carga inicial para no se incluida en cargas de Workflow

                            //    sql = "delete   CargasIniciales" +
                            //  " where FolioCredito = '" + ci.FolioCredito + "'" +
                            //  " and CONVERT(VARCHAR, fechaCarga, 112) = CONVERT(VARCHAR, GETDATE(), 112)" +
                            //  " and NombreArchivoCarga = '" + nombreArchivo + "'";

                            //    connection.Execute(sql);

                            //    foliosRepetidos.AppendLine("<p>Folio Repetido: " + ci.FolioCredito + "</p>");

                            //}
                            i++;
                        }
                        _context.SaveChangesAsync();


                        //--------- Cuenta Cantidad de Registros Cargados en Solicitudes
                        sql = "select count(*) from " + Schema + ".Solicitudes" +
                              " where NumeroTicket in" +
                              " (select NumeroTicket from " + Schema + ".Creditos" +
                              " where FolioCredito in(select FolioCredito from " + Schema + ".CargasIniciales" +
                              " where convert(varchar, fechaCarga,112)= convert(varchar, getdate(), 112)" +
                              " and NombreArchivoCarga = '" + nombreArchivo + "'" +
                              " ))";

                        registrosCargados = connection.Query <int>(sql).FirstOrDefault();

                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p>* Carga en Tabla Solicitudes " + registrosCargados.ToString() + " Registro(s)</p>");



                        //----------Cuenta Cantidad de Registros en Tablas Creditos
                        sql = "select count(*) from " + Schema + ".Creditos" +
                              " where FolioCredito in (" +
                              " select FolioCredito" +
                              " from " + Schema + ".CargasIniciales" +
                              " where convert(varchar, fechaCarga, 112) = convert(varchar, getdate(), 112)" +
                              " and NombreArchivoCarga = '" + nombreArchivo + "'" +
                              " )";

                        registrosCargados = connection.Query <int>(sql).FirstOrDefault();

                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p>* Carga en Tabla Creditos " + registrosCargados.ToString() + " Registro(s)</p>");

                        //----------Cuenta Cantidad de Registros en Tablas expediented creditos

                        sql = " select count(*) from " + Schema + ".ExpedientesCreditos" +
                              " where CreditoId in (" +
                              " select id from " + Schema + ".Creditos" +
                              " where FolioCredito in (" +
                              " select FolioCredito" +
                              " from " + Schema + ".CargasIniciales" +
                              " where convert(varchar, fechaCarga, 112) = convert(varchar, getdate(), 112)" +
                              " and NombreArchivoCarga = '" + nombreArchivo + "'" +
                              " ))";
                        registrosCargados = connection.Query <int>(sql).FirstOrDefault();

                        mailTemplate.AppendLine("<p> \n</p>");
                        mailTemplate.AppendLine("<p>* Carga en Tabla ExpedientesCreditos " + registrosCargados.ToString() + " Registro(s)</p>");
                        estaOcupado = false;
                        var destinatarios = _configuration.GetSection("CoordinacionWorkers:CargaInicialCreditosWorker:DestinatariosNotificaciones").Get <string[]>();


                        mailTemplate.AppendLine("<p>" + foliosRepetidos + "</p>");
                        mailTemplate.AppendLine("<p><small>Correo enviado automaticamente por Galvarino favor no contestar!!!!.</small></p>");
                        _mailService.SendEmail(destinatarios, "Carga de Créditos", mailTemplate.ToString());
                    }
                }
            }// fin estado ocupado
        }
Ejemplo n.º 2
0
        private void DoWork(object state)
        {
            var    _context = _scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
            string Schema   = _configuration.GetValue <string>("schema");
            string nombreArchivo;
            //nombreArchivo = "Carga";
            string        rutaDescargar;
            int           registrosCargados = 0;
            StringBuilder mailTemplate      = new StringBuilder(); // se genera string correo noticaci�n
            StringBuilder foliosRepetidos   = new StringBuilder(); //se genera string para folio repetidos
            string        sql  = "";
            string        ruta = "";

            using (var connection = new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection")))
            {
                var horaActual = DateTime.Now.TimeOfDay;
                if (horaActual >= horaInicial && horaActual <= horaFinal && !estaOcupado)
                {
                    /*Todo:  Revisar Findesemanas*/
                    if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
                    {
                        nombreArchivo = "Carga" + DateTime.Now.AddDays(-3).ToString("ddMMyyyy");
                        ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                    }
                    else if (
                        DateTime.Now.DayOfWeek == DayOfWeek.Thursday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Wednesday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Tuesday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Friday ||
                        DateTime.Now.DayOfWeek == DayOfWeek.Sunday
                        )
                    {
                        nombreArchivo = "Carga" + DateTime.Now.AddDays(-1).ToString("ddMMyyyy");
                        ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                    }
                    else
                    {
                        return;
                    }
                    rutaDescargar = _configuration.GetValue <string>("RutaCargaCredito") + nombreArchivo + ".txt";



                    //rutaDescargar = @"c:\cargainicial\Carga16112021.txt";
                    //nombreArchivo = "Carga16112021";
                    nombreArchivo = "Carga" + DateTime.Now.AddDays(-1).ToString("ddMMyyyy");
                    ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";

                    //Valida si archivo de carga y dia de hoy estan cargados en BASE
                    int existeCarga;
                    sql = "select count(*) from " + Schema + ".CargasInicialesEstado" +
                          " /*where convert(varchar, fechaCarga,112)= convert(varchar, getdate(), 112)*/" +
                          " where NombreArchivoCarga = '" + nombreArchivo + "'" +
                          "and Estado='CargadoTotal'";
                    existeCarga = connection.Query <int>(sql).FirstOrDefault();

                    IEnumerable <CargaInicial> configur;

                    if (existeCarga == 0)
                    {
                        if (!estaOcupado)
                        {
                            sql = "select count(*) from " + Schema + ".CargasInicialesEstado" +
                                  " where convert(varchar, fechaCarga,112)= convert(varchar, getdate(), 112)" +
                                  " and NombreArchivoCarga = '" + nombreArchivo + "'" +
                                  "and Estado='PendienteParcial'";
                            existeCarga = connection.Query <int>(sql).FirstOrDefault();

                            estaOcupado = true;

                            if (existeCarga == 0)
                            {
                                CsvParserOptions           csvParserOptions = new CsvParserOptions(true, ';');
                                CargaInicialMapping        csvMapper        = new CargaInicialMapping();
                                CsvParser <CargaInicialIM> csvParser        = new CsvParser <CargaInicialIM>(csvParserOptions, csvMapper);

                                var result = csvParser
                                             .ReadFromFile(rutaDescargar, Encoding.ASCII)
                                             .Where(x => x.IsValid)
                                             .Select(x => x.Result)
                                             .AsSequential()
                                             .ToList();
                                StringBuilder inserts = new StringBuilder();

                                //result.ForEach(x => inserts.AppendLine($"insert into {Schema}.Cargasiniciales values ('{DateTime.Now}','{DateTime.ParseExact(x.FechaCorresponde.ToString(), "ddMMyyyy", CultureInfo.InvariantCulture)}','{x.FolioCredito}','{x.RutAfiliado}','{x.CodigoOficinaIngreso}','{x.CodigoOficinaPago}','{x.LineaCredito}','{x.RutResponsable}','{x.CanalVenta}','{x.Estado}','{x.FechaCorresponde}','{nombreArchivo}','{x.TipoSegmento}','{x.NroOferta}','{x.SeguroCesantia}','{x.Afecto}','{x.Aval}','{x.SeguroDesgravamen}','{x.TipoVenta}','{x.FormaPago}','{x.CompraCartera}','{x.DigitalizarSegDesgr}','{x.DigitalizarSegCesantia}');"));

                                result.ForEach(x => inserts.AppendLine($"insert into {Schema}.Cargasiniciales values ('{DateTime.Now}','{DateTime.ParseExact(x.FechaCorresponde.ToString(), "ddMMyyyy", CultureInfo.InvariantCulture)}','{x.FolioCredito}','{x.RutAfiliado}','{x.CodigoOficinaIngreso}','{x.CodigoOficinaPago}','{x.LineaCredito}','{x.RutResponsable}','{x.CanalVenta}','{x.Estado}','{x.FechaCorresponde}','{nombreArchivo}','{x.SeguroCesantia}','{x.Afecto}','{x.Aval}','{x.SeguroDesgravamen}','','{x.TipoVenta}');"));


                                //result.ForEach(x => inserts.AppendLine($"insert into {Schema}.Cargasiniciales values ('{DateTime.Now}','{DateTime.ParseExact(x.FechaCorresponde.ToString(), "ddMMyyyy", CultureInfo.InvariantCulture)}','{x.FolioCredito}','{x.RutAfiliado}','{x.CodigoOficinaIngreso}','{x.CodigoOficinaPago}','{x.LineaCredito}','{x.RutResponsable}','{x.CanalVenta}','{x.Estado}','{x.FechaCorresponde}','{nombreArchivo}','{x.SeguroCesantia}','{x.Afecto}','{x.Aval}','{x.SeguroDesgravamen}','');"));

                                connection.Execute(inserts.ToString(), null, null, 240);

                                string insertarCargasInincialesEstado = @"
                                  insert into CargasInicialesEstado(fechacarga,NombreArchivoCarga,Estado)  
                                  values (getdate(),'" + nombreArchivo + "','PendienteParcial' )";
                                connection.Execute(insertarCargasInincialesEstado.ToString(), null, null, 240);


                                //    //----------- Fin carga de Registros en Cargas Iniciales
                            }
                            //---------- SE cuenta Cantidad de Registros cargados en Cargas Iniciales

                            var cargaInicials = new List <CargaInicial>();
                            sql = "select * from CargasIniciales where  NombreArchivoCarga = '" + nombreArchivo + "' and CodigoOficinaIngreso not in ('A610')";

                            cargaInicials = connection.Query <CargaInicial>(sql).AsList();
                            //-------------Se genera Registro de Carga
                            //StringBuilder mailTemplate = new StringBuilder();
                            mailTemplate.AppendLine("<p>Los cr�ditos han sido cargados exitosamente</p>");
                            mailTemplate.AppendLine("<p>REPORTE DE CARGA DIARIA GALVARINO</p> ");
                            mailTemplate.AppendLine("<p>---------------------------------</p>");
                            mailTemplate.AppendLine("<p>Fecha de Carga: " + DateTime.Now + "</p>");
                            mailTemplate.AppendLine("<p> \n</p>");
                            mailTemplate.AppendLine("<p> \n</p>");
                            mailTemplate.AppendLine("<p> \n</p>");
                            mailTemplate.AppendLine("<p>* Nombre Archivo : " + nombreArchivo + ".txt</p>");
                            // mailTemplate.AppendLine("<p>* Archivo Base Carga " + result.Count + " Registro(s)</p>");
                            mailTemplate.AppendLine("<p> \n</p>");
                            mailTemplate.AppendLine("<p>* Carga en Tabla CargasInicales " + cargaInicials.Count + " Registro(s)</p>");



                            foreach (var ci in cargaInicials)
                            {
                                //Se valida si credito ya esta cargado en BD
                                sql = "select count(*)" +
                                      " from " + Schema + ".creditos" +
                                      " where FolioCredito='" + ci.FolioCredito + "'";
                                int existe = connection.Query <int>(sql).FirstOrDefault();


                                //Valida que No est� cargado anteriormente el folio
                                if (existe == 0)
                                {
                                    //-----------SE inicia creacion de objeto para cargas en Tablas creditos.

                                    var    oficinaProceso = _context.Oficinas.Include(x => x.OficinaProceso).FirstOrDefault(x => x.Codificacion == ci.CodigoOficinaPago);
                                    string esRM           = oficinaProceso.EsRM ? $"1" : $"0";

                                    /*  TODO: Caso de La Uni�n ver con Jenny Bernales  */
                                    Dictionary <string, string> _setVariables = new Dictionary <string, string>();
                                    _setVariables.Add("OFICINA_PAGO", ci.CodigoOficinaPago);
                                    _setVariables.Add("OFICINA_INGRESO", ci.CodigoOficinaIngreso);
                                    _setVariables.Add("FOLIO_CREDITO", ci.FolioCredito);
                                    _setVariables.Add("RUT_AFILIADO", ci.RutAfiliado);
                                    _setVariables.Add("FECHA_VENTA", ci.FechaCorresponde.ToString());
                                    _setVariables.Add("ES_RM", esRM);
                                    _setVariables.Add("DOCUMENTO_LEGALIZADO", $"0");
                                    _setVariables.Add("OFICINA_PROCESA_NOTARIA", oficinaProceso.OficinaProceso.Codificacion);

                                    //---------Se Genera Registo en Tareas y Solicitudes
                                    _wfservice = new WorkflowService(new DefaultWorkflowKernel(_context, _configuration));
                                    var wf = _wfservice.Instanciar(ProcesoDocumentos.NOMBRE_PROCESO, "wfboot", "Ingreso Automatico de Creditos Vendidos", _setVariables);


                                    Credito cred = new Credito
                                    {
                                        FechaDesembolso = ci.FechaCorresponde,
                                        FechaFormaliza  = DateTime.Now.AddDays(-1),
                                        FolioCredito    = ci.FolioCredito,
                                        MontoCredito    = 0,
                                        RutCliente      = ci.RutAfiliado,
                                        NumeroTicket    = wf.NumeroTicket
                                    };

                                    if (ci.LineaCredito.ToLower().Contains("credito normal") && ci.Estado.Contains("Reprogramado"))
                                    {
                                        cred.TipoCredito = TipoCredito.Reprogramacion;
                                    }
                                    else if (ci.LineaCredito.ToLower().Contains("credito normal") || ci.LineaCredito.ToLower().Contains("compra cartera") || ci.LineaCredito.ToLower().Contains("credito paralelo"))
                                    {
                                        cred.TipoCredito = TipoCredito.Normal;
                                    }
                                    else if (ci.LineaCredito.ToLower().Contains("reprogr"))
                                    {
                                        cred.TipoCredito = TipoCredito.Reprogramacion;
                                    }
                                    else if (ci.LineaCredito.ToLower().Contains("acuerdo de creditos castigados"))
                                    {
                                        cred.TipoCredito = TipoCredito.AcuerdoPago;
                                    }
                                    else if (ci.LineaCredito.ToLower().Contains("COVID"))
                                    {
                                        cred.TipoCredito = TipoCredito.Reprogramacion;
                                    }


                                    IEnumerable <ConfiguracionDocumento> configs = _context.ConfiguracionDocumentos.Where(x => x.TipoCredito == cred.TipoCredito && x.TipoExpediente == TipoExpediente.Legal).ToList();


                                    ExpedienteCredito expcred = new ExpedienteCredito
                                    {
                                        Credito        = cred,
                                        FechaCreacion  = DateTime.Now,
                                        TipoExpediente = TipoExpediente.Legal,
                                    };

                                    int incrementor = 1;
                                    foreach (var confItem in configs)
                                    {
                                        Documento docmnt = new Documento
                                        {
                                            TipoDocumento = confItem.TipoDocumento,
                                            Codificacion  = confItem.Codificacion,
                                            Resumen       = confItem.TipoDocumento.ToString("D")
                                        };


                                        if (confItem.Codificacion == "01")//pagaré
                                        {
                                            expcred.Documentos.Add(docmnt);
                                        }
                                        if (confItem.Codificacion == "02")//CI
                                        {
                                            expcred.Documentos.Add(docmnt);
                                        }
                                        if (confItem.Codificacion == "06")//Acuerdo de pago
                                        {
                                            expcred.Documentos.Add(docmnt);
                                        }
                                        if (confItem.Codificacion == "07")//Reprogramaciones
                                        {
                                            expcred.Documentos.Add(docmnt);
                                        }

                                        //if (confItem.Codificacion == "09")//Seguro Desgravamen
                                        //{
                                        //    if (ci.SeguroDesgravamen == "1")
                                        //        expcred.Documentos.Add(docmnt);
                                        //}

                                        //if (confItem.Codificacion == "10")//Seguro Cesantia
                                        //{
                                        //    if (ci.SeguroCesantia == "1")
                                        //        expcred.Documentos.Add(docmnt);
                                        //}



                                        incrementor++;
                                    }
                                    _context.ExpedientesCreditos.Add(expcred);
                                }
                                else
                                {
                                    // se elimina registro de tabla carga inicial para no se incluida en cargas de Workflow

                                    //  sql = "delete   CargasIniciales" +
                                    //" where FolioCredito = '" + ci.FolioCredito + "'" +
                                    //" and CONVERT(VARCHAR, fechaCarga, 112) = CONVERT(VARCHAR, GETDATE(), 112)" +
                                    //" and NombreArchivoCarga = '" + nombreArchivo + "'";

                                    // connection.Execute(sql);

                                    foliosRepetidos.AppendLine("<p>Folio Repetido: " + ci.FolioCredito + "</p>");
                                }
                            }
                        }
                        _context.SaveChanges();


                        //----Ventas Remotas
                        string[] ids         = new string[] { "01", "04", "05" };
                        var      ventaRemota = _context.CargasIniciales.Where(a => ids.Contains(a.TipoVenta) && a.NombreArchivoCarga == nombreArchivo);
                        foreach (var vr in ventaRemota)
                        {
                            string actualizar = " declare @p_id_solicitud int" +
                                                " declare @p_unidadNegocio varchar(5)" +
                                                " declare @p_id_etapa int" +
                                                " declare @p_existe int" +
                                                " declare @p_numeroTicket varchar(40)" +
                                                "set @p_numeroTicket =(select numeroticket from dbo.creditos where foliocredito='" + vr.FolioCredito + "')" +
                                                " set @p_unidadNegocio=(select top 1 UnidadNegocioAsignada " +
                                                " from Tareas a inner" +
                                                " join Solicitudes b on a.SolicitudId = b.Id" +
                                                " where b.numeroticket = @p_numeroTicket" +
                                                " and UnidadNegocioAsignada is not null" + " order by 1 asc) " +
                                                " set @p_id_solicitud = (select id from Solicitudes where NumeroTicket = @p_numeroTicket)" +
                                                " set @p_existe =(select COUNT(*) from Tareas where SolicitudId=@p_id_solicitud and EtapaId=18) " +
                                                " update a" +
                                                " set a.EjecutadoPor = 'wfboot', a.Estado = 'Finalizada', a.FechaTerminoFinal = GETDATE()" +
                                                " from Tareas a inner" +
                                                " join Solicitudes b on a.SolicitudId = b.Id and a.estado='Activada'" +
                                                " where b.NumeroTicket = @p_numeroTicket" +
                                                " insert into Tareas(SolicitudId, EtapaId, AsignadoA, ReasignadoA, EjecutadoPor, Estado, FechaInicio, FechaTerminoEstimada, FechaTerminoFinal, UnidadNegocioAsignada)  " +
                                                " values  (@p_id_solicitud, 12, 'Mesa Control', null, null, 'Activada', GETDATE(), null, null, @p_unidadNegocio) ";


                            connection.Execute(actualizar.ToString(), null, null, 240);
                        }

                        string UpdateCargasInincialesEstado = @"
                                                  Update  CargasInicialesEstado
                                                   set Estado='CargadoTotal'  
                                                   where NombreArchivoCarga='" + nombreArchivo + "'";
                        connection.Execute(UpdateCargasInincialesEstado.ToString(), null, null, 240);
                        estaOcupado = false;
                    }
                }
            }
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _logger.LogDebug($"tarea en segundo plano esta iniciando");
            stoppingToken.Register(() => _logger.LogDebug("Deteniendo la tarea en segundo plano"));
            var _context = _scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();

            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogDebug("Ejecutando tarea en segundo plano");
                string ruta          = "";
                string nombreArchivo = "";
                /*Todo:  Revisar Findesemanas*/
                //if(DateTime.Now.DayOfWeek == DayOfWeek.Monday)
                //{
                //    nombreArchivo = "Carga" + DateTime.Now.AddDays(-3).ToString("ddMMyyyy");
                //    ruta = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                //}
                //else if(
                //    DateTime.Now.DayOfWeek == DayOfWeek.Thursday ||
                //    DateTime.Now.DayOfWeek == DayOfWeek.Wednesday ||
                //    DateTime.Now.DayOfWeek == DayOfWeek.Tuesday ||
                //    DateTime.Now.DayOfWeek == DayOfWeek.Friday
                //)
                //{
                //    nombreArchivo = "Carga" + DateTime.Now.AddDays(-1).ToString("ddMMyyyy");
                //    ruta = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                //}
                //else {
                //    break;
                //}

                nombreArchivo = "Carga17092019";
                ruta          = _configuration["RutaCargaCredito"] + nombreArchivo + ".txt";
                _logger.LogDebug(ruta);

                var existencia = _context.CargasIniciales.Where(x => x.NombreArchivoCarga == nombreArchivo).ToList();
                if ((File.Exists(ruta) && existencia.Count == 0) || (File.Exists(ruta) && File.ReadLines(ruta).Count() - 1 > existencia.Count))
                {
                    _logger.LogDebug("Cargando Archivo a la BD (Carga Inicial diaria)......");

                    int lap             = 0;
                    int emperzardenuevo = File.ReadLines(ruta).Count() - 1 > existencia.Count ? existencia.Count + 1 : 1;
                    foreach (var linea in File.ReadLines(ruta))
                    {
                        if (lap > 0 && emperzardenuevo == lap)
                        {
                            emperzardenuevo++;
                            string[] campos            = linea.Split(new char[] { ';' });
                            var      existenciaCredito = _context.CargasIniciales.FirstOrDefault(ci => ci.FolioCredito == campos[1] && ci.RutAfiliado == campos[0]);

                            if (existenciaCredito == null)
                            {
                                DateTime     ferchaCorresponde = DateTime.ParseExact(campos[10], "ddMMyyyy", CultureInfo.InvariantCulture);
                                CargaInicial ci = new CargaInicial
                                {
                                    RutAfiliado          = campos[0],
                                    FolioCredito         = campos[1],
                                    CodigoOficinaIngreso = campos[2],
                                    CodigoOficinaPago    = campos[4],
                                    Estado             = campos[6],
                                    LineaCredito       = campos[7],
                                    RutResponsable     = campos[8],
                                    CanalVenta         = campos[9],
                                    FechaVigencia      = campos[10],
                                    FechaCarga         = DateTime.Now,
                                    FechaCorresponde   = ferchaCorresponde,
                                    NombreArchivoCarga = nombreArchivo
                                };
                                _context.CargasIniciales.Add(ci);


                                var    oficinaProceso = _context.Oficinas.Include(x => x.OficinaProceso).FirstOrDefault(x => x.Codificacion == ci.CodigoOficinaPago);
                                string esRM           = oficinaProceso.EsRM  ? $"1" : $"0";

                                /*  TODO: Caso de La Unión ver con Jenny Bernales  */
                                Dictionary <string, string> _setVariables = new Dictionary <string, string>();
                                _setVariables.Add("OFICINA_PAGO", campos[4]);
                                _setVariables.Add("OFICINA_INGRESO", campos[2]);
                                _setVariables.Add("FOLIO_CREDITO", campos[1]);
                                _setVariables.Add("RUT_AFILIADO", campos[0]);
                                _setVariables.Add("FECHA_VENTA", campos[10]);
                                _setVariables.Add("ES_RM", esRM);
                                _setVariables.Add("DOCUMENTO_LEGALIZADO", $"0");
                                _setVariables.Add("OFICINA_PROCESA_NOTARIA", oficinaProceso.OficinaProceso.Codificacion);



                                _wfservice = new WorkflowService(new DefaultWorkflowKernel(_context, _configuration));
                                var wf = _wfservice.Instanciar(ProcesoDocumentos.NOMBRE_PROCESO, "wfboot", "Ingreso Automatico de Creditos Vendidos", _setVariables);

                                Credito cred = new Credito
                                {
                                    FechaDesembolso = ferchaCorresponde,
                                    FechaFormaliza  = DateTime.Now.AddDays(-1),
                                    FolioCredito    = ci.FolioCredito,
                                    MontoCredito    = 0,
                                    RutCliente      = ci.RutAfiliado,
                                    NumeroTicket    = wf.NumeroTicket
                                };

                                if (ci.LineaCredito.ToLower().Contains("credito normal") && ci.Estado.Contains("Reprogramado"))
                                {
                                    cred.TipoCredito = TipoCredito.Reprogramacion;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("credito normal") || ci.LineaCredito.ToLower().Contains("compra cartera") || ci.LineaCredito.ToLower().Contains("credito paralelo"))
                                {
                                    cred.TipoCredito = TipoCredito.Normal;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("reprogr"))
                                {
                                    cred.TipoCredito = TipoCredito.Reprogramacion;
                                }
                                else if (ci.LineaCredito.ToLower().Contains("acuerdo de creditos castigados"))
                                {
                                    cred.TipoCredito = TipoCredito.AcuerdoPago;
                                }



                                IEnumerable <ConfiguracionDocumento> configs = _context.ConfiguracionDocumentos.Where(x => x.TipoCredito == cred.TipoCredito && x.TipoExpediente == TipoExpediente.Legal).ToList();


                                ExpedienteCredito expcred = new ExpedienteCredito
                                {
                                    Credito        = cred,
                                    FechaCreacion  = DateTime.Now,
                                    TipoExpediente = TipoExpediente.Legal,
                                };

                                int incrementor = 1;
                                foreach (var confItem in configs)
                                {
                                    Documento docmnt = new Documento {
                                        TipoDocumento = confItem.TipoDocumento,
                                        Codificacion  = confItem.Codificacion,
                                        Resumen       = confItem.TipoDocumento.ToString("D")
                                    };
                                    expcred.Documentos.Add(docmnt);
                                    incrementor++;
                                }
                                _context.ExpedientesCreditos.Add(expcred);
                                await _context.SaveChangesAsync();
                            }
                        }
                        lap++;
                    }
                    _logger.LogDebug("Carga terminada");
                    var           destinatarios = _configuration.GetSection("CoordinacionWorkers:CargaInicialCreditosWorker:DestinatariosNotificaciones").Get <string[]>();
                    StringBuilder mailTemplate  = new StringBuilder();
                    mailTemplate.AppendLine("<p>La carga Inicial ha Terminado con éxito.</p>");
                    mailTemplate.AppendLine("<small>Correo enviado automaticamente por Galvarino favor no contestar.</small>");
                    await _mailService.SendEmail(destinatarios, $"Carga Inicial {nombreArchivo}", mailTemplate.ToString());
                }
                else
                {
                    _logger.LogDebug("Nada que cargar");
                }

                _logger.LogDebug("Esperando!!!!");
                await Task.Delay(60000, stoppingToken);
            }
        }