public ActionResult Create(string texto) { CargaMasiva carga = new CargaMasiva(); try { //En caso de que no haya ningún archivo cargado if (Request.Files.Count == 0) { Resultado.Estado = false; Resultado.Respuesta = Mensajes.MensajeTransaccionFallida; return(Json(new { error = Mensajes.MensajeErrorAdjuntosRequeridos + " Por favor, verificar el archivo.", Resultado = Resultado }, JsonRequestBehavior.AllowGet)); } List <string> listadoMasivoEmails = new List <string>(); foreach (string item in Request.Files) { HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase; string fileName = file.FileName; string extension = Path.GetExtension(fileName); if (extension != ".xlsx" && extension != ".xls") { Resultado.Estado = false; Resultado.Respuesta = Mensajes.MensajeTransaccionFallida; return(Json(new { error = "Formato no permitido.", Resultado = Resultado }, JsonRequestBehavior.AllowGet)); } //SI LA RUTA EN DISCO NO EXISTE LOS ARCHIVOS SE ALMACENAN EN LA CARPETA MISMO DEL PROYECTO string rutaBase = basePathRepositorioDocumentos + "\\RRHH\\ArchivosCargasMasivas"; bool directorio = Directory.Exists(rutaBase); // En caso de que no exista el directorio, crearlo. if (!directorio) { Directory.CreateDirectory(rutaBase); } string pathServidor = Path.Combine(rutaBase, fileName); if (file.ContentLength > 0) { file.SaveAs(pathServidor); FileInfo existingFile = new FileInfo(pathServidor); using (ExcelPackage package = new ExcelPackage(existingFile)) { ExcelWorksheet worksheet = package.Workbook.Worksheets.First(); if (worksheet != null) { int colCount = worksheet.Dimension.End.Column; //get Column Count int rowCount = worksheet.Dimension.End.Row; //get row count - Cabecera for (int row = 2; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { var error = string.Empty; string columna = (worksheet.Cells[1, col].Value ?? "").ToString().Trim(); // Nombre de la Columna string valorColumna = (worksheet.Cells[row, col].Value ?? "").ToString().Trim(); bool mailValido = Validaciones.ValidarMail(valorColumna); //Fill errors mails if (!mailValido) { carga.Detalles.Add(new DetallesCargaMasiva { Fila = row, Columna = col, Valor = valorColumna, Error = error }); } else { listadoMasivoEmails.Add(valorColumna); } } } } } } } List <string> erroresValidacionGenerales = new List <string>(); if (!carga.GetEstado()) { erroresValidacionGenerales.Add(string.Format(Mensajes.MensajeValidacionFilasInvalidas, string.Join(" , ", carga.Detalles.Select(s => s.Fila).ToList()))); } //Verificar mails duplicados List <string> emailsDuplicados = listadoMasivoEmails.GroupBy(x => x).Where(g => g.Count() > 1).Select(y => y.Key).ToList(); if (emailsDuplicados.Count > 0) { erroresValidacionGenerales.Add(string.Format(Mensajes.MensajeValidacionEmailsRepetidos, string.Join(" ; ", emailsDuplicados))); } //Validación límite máximo de mails if (listadoMasivoEmails.Count > 2000) { Resultado.Estado = false; Resultado.Respuesta = Mensajes.MensajeTransaccionFallida + "Límite excedido."; return(Json(new { Resultado = Resultado }, JsonRequestBehavior.AllowGet)); } List <Notificaciones> listadoBatchNotificaciones = new List <Notificaciones>(); string body = GetEmailTemplate("TemplateEnviosMasivosFocus"); int totalListado = listadoMasivoEmails.Count; //Filtrando en caso de haber repetidos listadoMasivoEmails = listadoMasivoEmails.Where(s => !emailsDuplicados.Contains(s)).ToList(); foreach (var mail in listadoMasivoEmails) { DateTime fechaEnvio = DateTime.Now; Random rnd = new Random(); int segundos = rnd.Next(1, 150); int minutos = 0; if (totalListado >= 500 && totalListado <= 1000) { minutos = rnd.Next(1, 25); } if (totalListado > 1000 && totalListado <= 2000) { minutos = rnd.Next(1, 120); } fechaEnvio = totalListado > 50 ? fechaEnvio.AddSeconds(segundos) : fechaEnvio.AddSeconds(rnd.Next(1, 10)); fechaEnvio = fechaEnvio.AddMinutes(minutos); fechaEnvio = fechaEnvio.AddMilliseconds(rnd.Next(1, 100)); listadoBatchNotificaciones.Add(new Notificaciones { NombreTarea = "Notificación Sorteos Focus Research", DescripcionTarea = "Mail de notificación de resultados de sorteos a usuario de la Empresa Focus Research.", NombreEmisor = nombreCorreoEmisorMasivo, CorreoEmisor = correoEmisorMasivo, ClaveCorreo = claveEmisorMasivo, CorreosDestinarios = mail, AsuntoCorreo = "NOTIFICACIÓN SORTEO", NombreArchivoPlantillaCorreo = "MailingSorteosFocus", CuerpoCorreo = body, AdjuntosCorreo = "",//ruta, FechaEnvioCorreo = fechaEnvio, Empresa = "FOCUS RESEARCH", Canal = "MAILING MASIVO FOCUS RESEARCH", Tipo = "NOTIFICACION DE SORTEO SIMPLE", }); } Resultado = NotificacionesDAL.SaveInBatchNotifications(listadoBatchNotificaciones); if (Resultado.Estado) { Resultado.Respuesta = Resultado.Respuesta + " " + listadoBatchNotificaciones.Count + " notificaciones preparadas para ser enviadas."; Resultado.Adicional = erroresValidacionGenerales.Count > 0 ? string.Format(Mensajes.MensajeValidacionCargaMasivaMailsExitosaConErrores, string.Join(" | ", erroresValidacionGenerales.Select(s => s).ToList())) : string.Empty; } return(Json(new { Resultado }, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { return(Json(new { error = ex.Message }, JsonRequestBehavior.AllowGet)); } }
public async Task <bool> RegisterSite(CargaMasivaForRegister cargaForRegister , IEnumerable <SiteForRegister> commandDetais) { string nombre_file; Site site; CargaMasiva cargaMasiva = new CargaMasiva(); cargaMasiva.estado_id = (Int32)Constantes.EstadoCarga.Creado; if (_context.CargaMasiva.ToList().Count <= 0) { nombre_file = "BA001-" + DateTime.Now.Year; } else { var objMaximo = _context.CargaMasiva.ToList().Max(x => x.id); string[] max = _context.CargaMasiva.Where(x => x.id == objMaximo).Single().nombre_archivo.Split('-'); string m = max[0].Substring(2, 3); nombre_file = "BA" + (Convert.ToInt32(m) + 1).ToString().PadLeft(3, '0').ToString() + '-' + DateTime.Now.Year; } cargaMasiva.fecha_registro = DateTime.Now; cargaMasiva.usuario_id = 1; cargaMasiva.nombre_archivo = nombre_file; cargaMasiva.tipo_proyecto = cargaForRegister.tipo_proyecto; List <Site> sites = new List <Site>(); using (var transaction = _context.Database.BeginTransaction()) { await _context.AddAsync <CargaMasiva>(cargaMasiva); await _context.SaveChangesAsync(); foreach (var item in commandDetais) { site = new Site(); site.carga_id = cargaMasiva.id; site.direccion = item.direccion; site.distrito_id = item.distrito_id; site.estado_id = (Int32)Constantes.Site.Creado; site.fecha_registro = item.fecha_registro; site.geom = item.geom; site.latitud = item.latitud; site.longitud = item.longitud; site.nombre_site = item.nombre_site; site.numero_suministro = item.numero_suministro; site.presupuesto_costo = item.presupuesto_costo; site.presupuesto_ingreso = item.presupuesto_ingreso; site.real_costo = item.real_costo; site.real_ingreso = item.real_ingreso; site.usuario_id = item.usuario_id; site.activo = true; site.tipo_proyecto = cargaForRegister.tipo_proyecto; sites.Add(site); } await _context.AddRangeAsync(sites); await _context.SaveChangesAsync(); transaction.Commit(); return(true); } }
public async Task <int> RegisterCargaMasiva(CargaMasivaForRegister command, IEnumerable <CargaMasivaDetalleForRegister> commandDetais) { CargaMasivaDetalle cargaMasivaDetalle; CargaMasiva cargaMasiva = new CargaMasiva(); cargaMasiva.estado_id = 1; cargaMasiva.fecha_registro = DateTime.Now; cargaMasiva.usuario_id = 1; List <CargaMasivaDetalle> cargaMasivaDetalles = new List <CargaMasivaDetalle>(); using (var transaction = _context.Database.BeginTransaction()) { await _context.AddAsync <CargaMasiva>(cargaMasiva); await _context.SaveChangesAsync(); foreach (var item in commandDetais) { cargaMasivaDetalle = new CargaMasivaDetalle(); cargaMasivaDetalle.cantidad = item.cantidad; cargaMasivaDetalle.carga_id = cargaMasiva.id; cargaMasivaDetalle.asignado = item.asignado; cargaMasivaDetalle.carreta = item.carreta; cargaMasivaDetalle.conductor = item.conductor.Trim(); cargaMasivaDetalle.delivery = item.delivery; cargaMasivaDetalle.destinatario = item.destinatario.Trim(); cargaMasivaDetalle.direccion_carga = item.direccion_carga.Trim(); cargaMasivaDetalle.direccion_destino_servicio = item.direccion_destino_servicio.ToString().Trim(); cargaMasivaDetalle.direccion_entrega = item.direccion_entrega.ToString().Trim(); cargaMasivaDetalle.distrito_carga = item.distrito_carga; cargaMasivaDetalle.distrito_destino_servicio = item.distrito_destino_servicio.Trim(); cargaMasivaDetalle.factura = item.factura; cargaMasivaDetalle.fecha_carga = item.fecha_carga; cargaMasivaDetalle.fecha_entrega = item.fecha_entrega; cargaMasivaDetalle.fecha_salida = item.fecha_salida; cargaMasivaDetalle.hora_carga = item.hora_carga; cargaMasivaDetalle.hora_entrega = item.hora_entrega; cargaMasivaDetalle.hora_salida = item.hora_salida; cargaMasivaDetalle.oc = item.oc; cargaMasivaDetalle.peso = item.peso; cargaMasivaDetalle.guias = item.guias; cargaMasivaDetalle.provincia = item.provincia; cargaMasivaDetalle.remitente = item.remitente; cargaMasivaDetalle.shipment = item.shipment; cargaMasivaDetalle.tiposervicio = item.tiposervicio; cargaMasivaDetalle.tracto = item.tracto; cargaMasivaDetalle.volumen = item.volumen; cargaMasivaDetalle.recojo = item.recojo == "Si" ? true : false; cargaMasivaDetalle.notificacion = item.notificacion; cargaMasivaDetalle.costo = item.costo; cargaMasivaDetalle.valorizado = item.valorizado; cargaMasivaDetalles.Add(cargaMasivaDetalle); } await _context.AddRangeAsync(cargaMasivaDetalles); await _context.SaveChangesAsync(); transaction.Commit(); return(cargaMasiva.id); } }