private async void DoWork(object state) { /* * Obtener los documentos necesarios para cierre de Cajas y finalizar wf * * 1. Obtener archivos de Iron Mountain * 2. Leer Archivos */ var horaActual = DateTime.Now.TimeOfDay; if (horaActual >= horaInicial && horaActual <= horaFinal && !estaOcupado) { /*Ponemos al servicio en modo ocupado */ estaOcupado = true; string rutaDescargar = _configuration.GetValue <string>("RutasWorkers:ArchivoCreditosRecibidosIM"); _logger.LogInformation("Iniciando el proceso de Cierre de Workflows."); string host = "www.imrmconnect.cl"; string username = "******"; string password = "******"; ConnectionInfo connectionInfo = new ConnectionInfo(host, "sftp", new PasswordAuthenticationMethod(username, password)); using (SftpClient sftp = new SftpClient(connectionInfo)) { sftp.Connect(); sftp.ChangeDirectory("reportes"); //var sftpFileInfo = sftp.GetStatus(@"Rpt_LA_CRED_Recepcionados.csv"); using (Stream fileStream = File.Create(rutaDescargar)) { sftp.DownloadFile("Rpt_LA_CRED_Recepcionados.csv", fileStream); } sftp.Disconnect(); } CsvParserOptions csvParserOptions = new CsvParserOptions(true, ';'); CreditosRecibidosMapping csvMapper = new CreditosRecibidosMapping(); CsvParser <CreditosRecibidosIM> csvParser = new CsvParser <CreditosRecibidosIM>(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 dbo.RecepcionadosIM values ('{x.Folio}');")); using (var connection = new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection"))) { //_logger.LogInformation($"La cantidad es: {result.Count.ToString()}"); string limpiezas = @" truncate table dbo.RecepcionadosIM; truncate table dbo.TareasFinalizarWF;"; await connection.ExecuteAsync(limpiezas, null, null, 240); await connection.ExecuteAsync(inserts.ToString(), null, null, 240); string tareasAFinalizar = @" insert into dbo.TareasFinalizarWF SELECT b.Id TareaId, b.SolicitudId, c.NumeroTicket, d.FolioCredito, b.EtapaId FROM Tareas b INNER JOIN Solicitudes c on b.SolicitudId = c.Id INNER JOIN Creditos d on c.NumeroTicket = d.NumeroTicket INNER JOIN ExpedientesCreditos e on d.Id = e.CreditoId INNER JOIN Etapas f on b.EtapaId = f.Id INNER JOIN RecepcionadosIM im on d.FolioCredito = im.Folio where b.Estado = 'Activada' and b.EtapaId <> 18"; await connection.ExecuteAsync(tareasAFinalizar.ToString(), null, null, 240); string cerrarEtapas = @"update a set a.EjecutadoPor = 'wfboot', a.Estado = 'Finalizada', a.FechaTerminoFinal = GETDATE() from Tareas a inner join TareasFinalizarWF b on a.Id = b.TareaId"; await connection.ExecuteAsync(cerrarEtapas, null, null, 240); string abrirEtapaFinal = @"insert into Tareas(SolicitudId, EtapaId, AsignadoA, ReasignadoA, EjecutadoPor, Estado, FechaInicio, FechaTerminoEstimada, FechaTerminoFinal, UnidadNegocioAsignada) select SolicitudId, 18 EtapaId, 'wfboot' AsignadoA, null rEA, null Ejec, 'Activada' estado, GETDATE() fechaini, null fecterestimada, null fectermfinal, null una from TareasFinalizarWF"; await connection.ExecuteAsync(abrirEtapaFinal, null, null, 240); } var destinatarios = _configuration.GetSection("CoordinacionWorkers:CierrePagaresDeIronMountainWorker:DestinatariosNotificaciones").Get <string[]>(); StringBuilder mailTemplate = new StringBuilder(); mailTemplate.AppendLine("<p>Los Pagaré Ingresados en IM, han sido cerrados</p>"); mailTemplate.AppendLine("<small>Correo enviado automaticamente por Galvarino favor no contestar.</small>"); await _mailService.SendEmail(destinatarios, "Cierre de Pagarés de IM", mailTemplate.ToString()); } else { _logger.LogInformation("No estamos dentro del rango de horas, el servicio eta ocupado o ya corrio para el dia de hoy."); } }
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 }
private async void DoWork(object state) { /* * Generar el Cierre de Cajas * 1.- Correr Script de Cierre de Cajas * * Generar Archivo para Iron Mountain * * 1.- detectar todos los documentos que esten en la etapa de despacho a custodia * 2.- generar el archivo con los documentos encontrados * 3.- subir el archivo a ftp * 4.- mover los documentos en el workflow * */ /* Antes que todo se debe revisar * 1.- Que la hora actual esta entre las 23:10 y 23:59 * 2.- Que el servicio no este ocupado haciendo un trabajo * 3.- manejar la ejecucion diaria y que no se vuelva a repetir la tarea un dia (podria sobreescribir datos y nos deja la FOX papá) */ var cantidadTablaControl = 0; using (var connection = new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection"))) { var sqlControlArchivo = @" SELECT count(*) Total FROM Tareas b INNER JOIN Solicitudes c on b.SolicitudId = c.Id INNER JOIN Creditos d on c.NumeroTicket = d.NumeroTicket INNER JOIN ExpedientesCreditos e on d.Id = e.CreditoId INNER JOIN Etapas f on b.EtapaId = f.Id INNER JOIN ( select distinct cv.CodigoSeguimiento, pvv.FolioCredito, cv.Usuario from CajasValoradas cv inner join PasosValijasValoradas pvv on cv.CodigoSeguimiento = pvv.CodigoCajaValorada where cv.MarcaAvance in ('READYTOPROCESS-', 'READYTOPROCESS') ) caja on d.FolioCredito = caja.FolioCredito where b.Estado = 'Activada' and b.EtapaId = 16 "; cantidadTablaControl = connection.Query <int>(sqlControlArchivo).FirstOrDefault(); } var horaActual = DateTime.Now.TimeOfDay; if (horaActual >= horaInicial && horaActual <= horaFinal && !estaOcupado && cantidadTablaControl > 0) { /*Ponemos al servicio en modo ocupado */ estaOcupado = true; /* Comenzamos con el cierre de cajas */ _logger.LogInformation("Iniciando el proceso de Cierre de cajas."); using (var connection = new SqlConnection(_configuration.GetConnectionString("DocumentManagementConnection"))) { var sqlCierreCajas = @" truncate table TareasFinalizarCustodia insert into TareasFinalizarCustodia SELECT b.Id TareaId, b.SolicitudId, caja.Usuario, caja.FolioCredito, caja.CodigoSeguimiento, c.NumeroTicket FROM Tareas b INNER JOIN Solicitudes c on b.SolicitudId = c.Id INNER JOIN Creditos d on c.NumeroTicket = d.NumeroTicket INNER JOIN ExpedientesCreditos e on d.Id = e.CreditoId INNER JOIN Etapas f on b.EtapaId = f.Id INNER JOIN ( select distinct cv.CodigoSeguimiento, pvv.FolioCredito, cv.Usuario from CajasValoradas cv inner join PasosValijasValoradas pvv on cv.CodigoSeguimiento = pvv.CodigoCajaValorada where cv.MarcaAvance in ('READYTOPROCESS-', 'READYTOPROCESS') ) caja on d.FolioCredito = caja.FolioCredito where b.Estado = 'Activada' and b.EtapaId = 16 update a set a.EjecutadoPor = b.Usuario, a.Estado = 'Finalizada', a.FechaTerminoFinal = GETDATE() from Tareas a inner join TareasFinalizarCustodia b on a.Id = b.TareaId insert into Tareas(SolicitudId, EtapaId, AsignadoA, ReasignadoA, EjecutadoPor, Estado, FechaInicio, FechaTerminoEstimada, FechaTerminoFinal, UnidadNegocioAsignada) select SolicitudId, 17 EtapaId, 'Custodia' AsignadoA, null rEA, null Ejec, 'Activada' estado, GETDATE() fechaini, null fecterestimada, null fectermfinal, null una from TareasFinalizarCustodia update a set a.CajaValoradaId = d.Id from ExpedientesCreditos a inner join Creditos b on a.CreditoId = b.Id inner join TareasFinalizarCustodia c on b.FolioCredito = c.FolioCredito inner join CajasValoradas d on c.CodigoSeguimiento = d.CodigoSeguimiento delete from PasosValijasValoradas where CodigoCajaValorada in ( select distinct cv.CodigoSeguimiento from CajasValoradas cv inner join PasosValijasValoradas pvv on cv.CodigoSeguimiento = pvv.CodigoCajaValorada where cv.MarcaAvance in ('READYTOPROCESS-', 'READYTOPROCESS') ) update CajasValoradas set MarcaAvance = 'DESPACUST' where MarcaAvance in ('READYTOPROCESS-', 'READYTOPROCESS') "; var registrosCierreCajas = connection.Execute(sqlCierreCajas, null, commandType: CommandType.Text); var sqlArchivo = @" select a.FolioCredito + ';' + a.RutCliente + ';' + case when a.TipoCredito = 0 then 'Nuevo' when a.TipoCredito = 1 then 'Reprogramacion' when a.TipoCredito = 2 then 'AcuerdoPago' end Data from Creditos a inner join TareasFinalizarCustodia b on a.FolioCredito = b.FolioCredito"; registrosArchivoIM = connection.Query <string>(sqlArchivo).ToList(); } StringBuilder sb = new StringBuilder(); sb.AppendLine("FolioCredito;RutCliente;TipoCredito"); foreach (var registro in registrosArchivoIM) { sb.AppendLine(registro); } string nombreArchivo = "galvarino" + DateTime.Now.ToString("ddMMyyyy", CultureInfo.InvariantCulture) + ".txt"; string archivoSalida = @"C:\galvarino\envios_ftp\" + nombreArchivo; StreamWriter escritorArchivo = new StreamWriter(archivoSalida); escritorArchivo.Write(sb.ToString()); escritorArchivo.Close(); string host = "www.imrmconnect.cl"; string username = "******"; string password = "******"; var connectionInfo = new ConnectionInfo(host, "sftp", new PasswordAuthenticationMethod(username, password)); using (var sftp = new SftpClient(connectionInfo)) { sftp.Connect(); //sftp.ChangeDirectory("/MyFolder"); using (var uplfileStream = File.OpenRead(archivoSalida)) { sftp.UploadFile(uplfileStream, nombreArchivo, true); } sftp.Disconnect(); } var destinatarios = _configuration.GetSection("CoordinacionWorkers:PublicacionPagaresHaciaIronMountainWorker:DestinatariosNotificaciones").Get <string[]>(); var attach = new string[] { archivoSalida }; StringBuilder mailTemplate = new StringBuilder(); mailTemplate.AppendLine("<p>En el adjunto podras encontrar los folios cargados</p>"); mailTemplate.AppendLine("<small>Correo enviado automaticamente por Galvarino favor no contestar.</small>"); await _mailService.SendEmail(destinatarios, "Carga de Archivo Iron Mountain => " + nombreArchivo, mailTemplate.ToString(), attach); } else { _logger.LogInformation("No estamos dentro del rango de horas, el servicio eta ocupado o ya corrio para el dia de hoy."); } }
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); } }