Beispiel #1
0
        public Carga_Estado_Fuerza NuevaCargaEstadoFuerza()
        {
            Carga_Estado_Fuerza carga = new Carga_Estado_Fuerza();

            carga.fecha_creacion      = DateTime.Now;
            carga.id_usuario_creacion = Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario;
            return(carga);
        }
Beispiel #2
0
        public ActionResult Leer_Archivo(HttpPostedFileBase file, int id)
        {
            var filepath = Server.MapPath("~/Archivos/Temp/" + file.FileName);

            if (System.IO.File.Exists(filepath))
            {
                System.IO.File.Delete(filepath);
            }
            file.SaveAs(filepath);
            Estado_Fuerza estado_fuerza = db.Estado_Fuerza.SingleOrDefault(e => e.activo && !e.eliminado && e.id_estado_fuerza == id);

            if (estado_fuerza == null)
            {
                return(HttpNotFound());
            }
            var excel          = new ExcelQueryFactory(filepath);
            var worksheetNames = excel.GetWorksheetNames();

            using (DbContextTransaction tran = db.Database.BeginTransaction())
            {
                Carga_Estado_Fuerza carga_encabezado = NuevaCargaEstadoFuerza();
                carga_encabezado.id_estado_fuerza = id;
                carga_encabezado.nombre_archivo   = file.FileName;
                try
                {
                    db.Carga_Estado_Fuerza.Add(carga_encabezado);
                    db.SaveChanges();
                }
                catch
                {
                    ContextMessage msg = new ContextMessage(ContextMessage.Error, "Error durante la conexión con el servidor. Carga de archivo no efectuada.");
                    msg.ReturnUrl = Url.Action("");
                    TempData[User.Identity.Name] = msg;
                    return(RedirectToAction("Mensaje"));
                }
                var hoja = from a in excel.Worksheet(worksheetNames.First()) select a;
                List <ResultadoCargaEF> resultado = new List <ResultadoCargaEF>();
                foreach (var a in hoja)
                {
                    bool   correcto = true;
                    string error    = "";
                    try
                    {
                        string empleado      = a["id_empleado"];
                        string ubicacion     = a["id_ubicacion"];
                        string tipo_servicio = a["id_tipo_ubicacion"]; //Tipo Servicio
                        string situacion     = a["id_estado"];         //Situacion
                        string observacion   = a["comentario"];        //Observacion

                        int id_empleado, id_ubicacion, id_tipo_servicio, id_situacion;
                        //Código de Empleado
                        if (int.TryParse(empleado, out id_empleado))
                        {
                            var Empleado = db.Contratacion.SingleOrDefault(e => e.id_empleado == id_empleado && e.activo && !e.eliminado);
                            if (Empleado != null)
                            {
                                if (Empleado.id_estado_empleado != (int)Catalogos.Estado_Empleado.Alta)
                                {
                                    error    = "El empleado no está de Alta.";
                                    correcto = false;
                                }
                            }
                            else
                            {
                                error    = "El empleado no existe.\n";
                                correcto = false;
                            }
                        }
                        else
                        {
                            error    = "El formato del código de empleado es incorrecto.\n";
                            correcto = false;
                        }
                        //Situacion
                        if (int.TryParse(situacion, out id_situacion))
                        {
                            if (db.Situacion.SingleOrDefault(s => s.activo && !s.eliminado && s.id_situacion == id_situacion) == null)
                            {
                                error   += "Estado ingresado no reconocido.\n";
                                correcto = false;
                            }
                        }
                        else
                        {
                            error   += "El formato del estado es incorrecto.\n";
                            correcto = false;
                        }
                        //Ubicacion
                        if (int.TryParse(ubicacion, out id_ubicacion))
                        {
                            if (db.Ubicaciones.SingleOrDefault(u => u.activo && !u.eliminado && u.id_ubicacion == id_ubicacion) == null)
                            {
                                error   += "Ubicación ingresada no reconocida.\n";
                                correcto = false;
                            }
                        }
                        else
                        {
                            error   += "El formato del código de ubicación es incorrecto.\n";
                            correcto = false;
                        }
                        //Tipo de Servicio
                        if (int.TryParse(tipo_servicio, out id_tipo_servicio))
                        {
                            if (db.Cat_Tipos_Agente.SingleOrDefault(t => t.activo && !t.eliminado && t.id_cat_tipo_agente == id_tipo_servicio) == null)
                            {
                                error   += "Tipo de ubicación no reconocido.\n";
                                correcto = false;
                            }
                        }
                        else
                        {
                            error   += "El formato del tipo de ubicación es incorrecto.\n";
                            correcto = false;
                        }

                        var detalle_ef = estado_fuerza.Estado_Fuerza_Detalle.SingleOrDefault(e => e.activo && !e.eliminado && e.id_empleado == id_empleado);
                        if (detalle_ef != null)
                        {
                            error   += "El empleado ya esta registrado en el estado de fuerza.\n";
                            correcto = false;
                        }
                        //Validar que no se ingrese dos veces en el mismo archivo
                        var semejantes = resultado.Where(r => r.id_empleado == empleado);
                        if (semejantes.Count() > 0)
                        {
                            error   += "Registro duplicado en la carga del archivo.\n";
                            correcto = false;
                        }
                        if (!String.IsNullOrEmpty(error))
                        {
                            error = error.Substring(0, error.LastIndexOf('.'));
                        }
                        Carga_Estado_Fuerza_Detalle carga_detalle = new Carga_Estado_Fuerza_Detalle();
                        carga_detalle.id_empleado            = empleado;
                        carga_detalle.id_ubicacion           = ubicacion;
                        carga_detalle.id_cat_tipo_agente     = tipo_servicio;
                        carga_detalle.observacion            = observacion;
                        carga_detalle.id_situacion           = situacion;
                        carga_detalle.id_carga_estado_fuerza = carga_encabezado.id_carga_estado_fuerza;
                        db.Carga_Estado_Fuerza_Detalle.Add(carga_detalle);

                        //Resultados de la lectura del archivo
                        ResultadoCargaEF nuevo_resultado = new ResultadoCargaEF();
                        nuevo_resultado.correcto           = correcto;
                        nuevo_resultado.error              = error;
                        nuevo_resultado.id_empleado        = empleado;
                        nuevo_resultado.id_cat_tipo_agente = tipo_servicio;
                        nuevo_resultado.id_situacion       = situacion;
                        nuevo_resultado.observacion        = observacion;
                        nuevo_resultado.id_ubicacion       = ubicacion;
                        resultado.Add(nuevo_resultado);
                    }
                    catch
                    {
                        error   += "Ocurrio un error innesperado en la lectura de este registro.";
                        correcto = false;
                    }
                }
                db.SaveChanges();
                tran.Commit();
                ViewBag.id_estado_fuerza = estado_fuerza.id_estado_fuerza;
                return(View("ResultadoCargaMasiva", resultado.OrderBy(x => x.correcto).ToList()));
            }
        }