Exemplo n.º 1
0
        public ActionResult Edit(Puesto puesto, string salario_minimo, string salario_maximo)
        {
            ModelState.Clear();
            Puesto editPuesto = db.Puesto.SingleOrDefault(e => e.id_puesto == puesto.id_puesto && e.activo);

            if (editPuesto == null)
            {
                return(HttpNotFound());
            }
            if (ModelState.IsValid)
            {
                using (DbContextTransaction tran = db.Database.BeginTransaction())
                {
                    try
                    {
                        Tipo_Puesto tipo_puesto = db.Tipo_Puesto.SingleOrDefault(t => t.activo && !t.eliminado && t.id_tipo_puesto == puesto.id_tipo_puesto);
                        if (tipo_puesto == null)
                        {
                            ModelState.AddModelError("", "Tipo de Puesto seleccionado no valido.");
                            ViewBag.tipo_puesto  = new SelectList(db.Tipo_Puesto.Where(t => !t.eliminado), "id_tipo_puesto", "nombre");
                            ViewBag.id_documento = new SelectList(db.Documentos.Where(e => e.activo && !e.eliminado), "id_documento", "reporte");
                            return(View(editPuesto));
                        }
                        decimal bono_extra   = Convert.ToDecimal(!String.IsNullOrEmpty(Request["bono_extra"]) ? Request["bono_extra"] : "0", CultureInfo.InvariantCulture);
                        decimal bono_decreto = Convert.ToDecimal(!String.IsNullOrEmpty(Request["bono_decreto"]) ? Request["bono_decreto"] : "0", CultureInfo.InvariantCulture);
                        decimal sueldo_base  = Convert.ToDecimal(Request["sueldo_base"], CultureInfo.InvariantCulture);
                        puesto.bono_decreto = bono_decreto;
                        puesto.bono_extra   = bono_extra;
                        puesto.sueldo_base  = sueldo_base;
                        decimal sueldo = sueldo_base + bono_extra + bono_decreto;
                        if (sueldo < tipo_puesto.salario_minimo || sueldo > tipo_puesto.salario_maximo)
                        {
                            ModelState.AddModelError("", "El sueldo ingresado para el puesto no entra en el rango establecido.");
                            ViewBag.tipo_puesto  = new SelectList(db.Tipo_Puesto.Where(t => !t.eliminado), "id_tipo_puesto", "nombre");
                            ViewBag.id_documento = new SelectList(db.Documentos.Where(e => e.activo && !e.eliminado), "id_documento", "reporte");
                            return(View(editPuesto));
                        }
                        editPuesto.nombre                  = puesto.nombre.ToUpper();
                        editPuesto.id_tipo_puesto          = puesto.id_tipo_puesto;
                        editPuesto.bono_decreto            = puesto.bono_decreto;
                        editPuesto.bono_extra              = puesto.bono_extra;
                        editPuesto.sueldo_base             = puesto.sueldo_base;
                        editPuesto.prestaciones            = tipo_puesto.Empresa.prestaciones;
                        editPuesto.fecha_modificacion      = DateTime.Now;
                        editPuesto.id_usuario_modificacion = Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario;
                        db.Entry(editPuesto).State         = EntityState.Modified;
                        db.CambioSalarioPuesto(editPuesto.sueldo_base, editPuesto.bono_decreto,
                                               editPuesto.bono_extra, Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario,
                                               editPuesto.id_puesto);
                        db.SaveChanges();
                        tran.Commit();
                        return(RedirectToAction("Index"));
                    }
                    catch
                    {
                        tran.Rollback();
                        ModelState.AddModelError("", "Error durante la operación. Datos no guardados.");
                    }
                }
            }
            ViewBag.id_documento = new SelectList(db.Documentos.Where(e => e.activo && !e.eliminado), "id_documento", "nombre");
            ViewBag.tipo_puesto  = new SelectList(db.Tipo_Puesto.Where(t => !t.eliminado), "id_tipo_puesto", "nombre", puesto.id_tipo_puesto);
            return(View(editPuesto));
        }