public ActionResult CreateFA(string id, int pid, int v)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ObtenerConfPage(923, 925);
            List <DET_APROBP> flujosva = db.DET_APROBP.Where(t => t.SOCIEDAD_ID == id && t.PUESTOC_ID == pid && t.VERSION == v).ToList();
            var lan        = ViewBag.usuario.SPRAS_ID;
            var puestos    = db.PUESTOes.Where(t => t.ID == pid).ToList();
            var sl_puestos = puestos.Select(x => new { x.ID, Puesto = x.PUESTOTs.Count > 0 ? x.PUESTOTs.Where(t => t.SPRAS_ID == lan).FirstOrDefault().TXT50 : "" }).ToList();

            ViewBag.PUESTOC_ID = new SelectList(sl_puestos, "ID", "Puesto");
            ViewBag.NivelesA   = new SelectList(FnCommon.ObtenerCmbNivelesA(), "Value", "Text");
            ViewBag.NivelesP   = new SelectList(FnCommon.ObtenerCmbNivel(), "Value", "Text");
            ViewBag.NivelesM   = new SelectList(FnCommon.ObtenerCmbNivel(), "Value", "Text");
            DET_APROBH dET_APROBP = new DET_APROBH {
                SOCIEDAD_ID = id, ACTIVO = true, VERSION = v + 1, PUESTOC_ID = pid
            };
            var sociedad = db.SOCIEDADs.Find(id);

            ViewBag.Miles          = db.PAIS.Where(t => t.LAND == sociedad.LAND).SingleOrDefault().MILES;
            ViewBag.PD             = db.PAIS.Where(t => t.LAND == sociedad.LAND).SingleOrDefault().DECIMAL;
            ViewBag.FlujosActuales = flujosva;
            return(View(dET_APROBP));
        }
        public ActionResult CreateFA([Bind(Include = "SOCIEDAD_ID,PUESTOC_ID,VERSION,ACTIVO")] DET_APROBH dET_APROBH, FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                List <DET_APROBP> dET_APROBPs = new List <DET_APROBP>();
                var posiciones    = collection.GetValues("posicion");
                var npresupuestos = collection.GetValues("NivelesPR");
                var montos        = collection.GetValues("monto");
                var nmontos       = collection.GetValues("NivelesMO");
                var naprobadores  = collection.GetValues("NivelesAP");
                if (posiciones.Length > 1)
                {
                    for (int i = 1; i < posiciones.Length; i++)
                    {
                        DET_APROBP dET_APROB = new DET_APROBP();
                        dET_APROB.POS = Convert.ToInt32(posiciones[i]);
                        if ((i + 1) < posiciones.Length)
                        {
                            if (collection.AllKeys.Contains("p_" + i))
                            {
                                dET_APROB.PRESUPUESTO = true;
                                dET_APROB.N_PRESUP    = Convert.ToInt16(npresupuestos[i]);
                            }
                            if (montos[i] != "")
                            {
                                dET_APROB.MONTO   = Convert.ToDecimal(montos[i]);
                                dET_APROB.N_MONTO = Convert.ToInt16(nmontos[i]);
                            }
                        }
                        dET_APROB.PUESTOA_ID  = Convert.ToInt16(naprobadores[i]);
                        dET_APROB.ACTIVO      = true;
                        dET_APROB.PUESTOC_ID  = dET_APROBH.PUESTOC_ID;
                        dET_APROB.SOCIEDAD_ID = dET_APROBH.SOCIEDAD_ID;
                        dET_APROB.VERSION     = dET_APROBH.VERSION;
                        dET_APROBPs.Add(dET_APROB);
                    }
                    dET_APROBH.DET_APROBP      = dET_APROBPs;
                    dET_APROBH.ACTIVO          = true;
                    db.Entry(dET_APROBH).State = EntityState.Added;
                    db.SaveChanges();
                    var va = db.DET_APROBH.Where(t => t.SOCIEDAD_ID == dET_APROBH.SOCIEDAD_ID && t.PUESTOC_ID == dET_APROBH.PUESTOC_ID && t.VERSION == (dET_APROBH.VERSION - 1)).SingleOrDefault();
                    va.ACTIVO = false;
                    foreach (var e in va.DET_APROBP)
                    {
                        e.ACTIVO = false;
                    }
                    db.SaveChanges();
                    return(RedirectToAction("MAFlujos", new { id = dET_APROBH.SOCIEDAD_ID, pid = dET_APROBH.PUESTOC_ID, v = dET_APROBH.VERSION }));
                }
                else
                {
                    ModelState.AddModelError("Mensaje", "Incluya al menos una fila a la matriz de aprobación");
                }
            }
            else
            {
            }
            ObtenerConfPage(923, 925);
            var flujos     = db.DET_APROBH.Where(t => t.SOCIEDAD_ID == dET_APROBH.SOCIEDAD_ID && t.ACTIVO).Select(t => t.PUESTOC_ID).Distinct().ToList();
            var lan        = ViewBag.usuario.SPRAS_ID;
            var puestos    = db.PUESTOes.Where(t => t.ACTIVO == true && t.ID != 1 && t.ID != 9 && !flujos.Contains(t.ID)).ToList();
            var sl_puestos = puestos.Select(x => new { x.ID, Puesto = x.PUESTOTs.Count > 0 ? x.PUESTOTs.Where(t => t.SPRAS_ID == lan).FirstOrDefault().TXT50 : "" }).ToList();

            ViewBag.PUESTOC_ID = new SelectList(sl_puestos, "ID", "Puesto");
            ViewBag.NivelesA   = new SelectList(FnCommon.ObtenerCmbNivelesA(), "Value", "Text");
            ViewBag.NivelesP   = new SelectList(FnCommon.ObtenerCmbNivel(), "Value", "Text");
            ViewBag.NivelesM   = new SelectList(FnCommon.ObtenerCmbNivel(), "Value", "Text");
            var sociedad = db.SOCIEDADs.Find(dET_APROBH.SOCIEDAD_ID);

            ViewBag.Miles = db.PAIS.Where(t => t.LAND == sociedad.LAND).SingleOrDefault().MILES;
            ViewBag.PD    = db.PAIS.Where(t => t.LAND == sociedad.LAND).SingleOrDefault().DECIMAL;
            return(View(dET_APROBH));
        }