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));
            }
        }
Exemple #2
0
        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);
            }
        }