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 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); } }