public ActionResult DeleteConfirmed(long id)
        {
            //CALCULA VSS Y DEMANDA TOTAL
            var suma_vss = db.MUB_PECOR_CP_VSS.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy && u.ID_CP_PY != id).Sum(v => v.VSS_BENEF).ToString();
            var suma_dem = db.MUB_PECOR_CP_VSS.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy && u.ID_CP_PY != id).Sum(v => v.DEMANDA_ANUAL).ToString();

            if (suma_vss == "" || suma_dem == "")
            {
                suma_vss = "0";
                suma_dem = "0";
            }

            MUB_PECOR_CP_VSS mU_PECOR_CP_VSS = db.MUB_PECOR_CP_VSS.Find(id);

            db.MUB_PECOR_CP_VSS.Remove(mU_PECOR_CP_VSS);
            db.SaveChanges();

            //ACTUALIZA TOTAL VSS Y DEMANDA EN EL PROYECTO
            MUB_PROYECTOS_PECOR proyecto_actualiza = db.MUB_PROYECTOS_PECOR.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy).First();

            proyecto_actualiza.V_BENEFICIA   = Convert.ToInt64(suma_vss);
            proyecto_actualiza.DEMANDA_ANUAL = Convert.ToInt64(suma_dem);
            db.MUB_PROYECTOS_PECOR.Attach(proyecto_actualiza); // Adiciona en estado descargado
            db.Entry(proyecto_actualiza).Property(r => r.V_BENEFICIA).IsModified   = true;
            db.Entry(proyecto_actualiza).Property(r => r.DEMANDA_ANUAL).IsModified = true;
            db.SaveChanges();


            return(RedirectToAction("Index"));
        }
        // GET: pcVss/Details/5
        public ActionResult Details(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MUB_PECOR_CP_VSS mU_PECOR_CP_VSS = db.MUB_PECOR_CP_VSS.Find(id);

            if (mU_PECOR_CP_VSS == null)
            {
                return(HttpNotFound());
            }
            return(View(mU_PECOR_CP_VSS));
        }
        public ActionResult Edit([Bind(Include = "ID_PROYECTO_PECOR,ID_CENTRO_POBLADO,VSS_BENEF,DEMANDA_ANUAL,ID_CP_PY")] MUB_PECOR_CP_VSS mU_PECOR_CP_VSS)
        {
            var cod_depto = Request.Form["COD_DPTO"].ToString();
            var cod_mpio  = Request.Form["COD_MPIO"].ToString();

            if (ModelState.IsValid && Request.Form["chgSitio"] != "true")
            {
                //Response.Write("vss Antes de Guardar: " + mU_PECOR_CP_VSS.VSS_BENEF);
                //VALIDA CON RESPECTO AL NÚMERO TOTAL DE VIVIENDAS SIN SERVICIO EL VALOR DIGITADO
                var  VssCentroPob = db.MUB_VSS.Where(m => m.ID_CENTRO_POBLADO == mU_PECOR_CP_VSS.ID_CENTRO_POBLADO);
                long totalVss     = 0;

                foreach (MUB_VSS cust in VssCentroPob)
                {
                    totalVss = totalVss + (long)cust.VSS_TOTAL;
                }
                //VALIDA SI EL CENTRO POBLADO YA EXISTE!
                var ExisteVssCentroPob = db.MUB_PECOR_CP_VSS.Where(m => m.ID_CENTRO_POBLADO == mU_PECOR_CP_VSS.ID_CENTRO_POBLADO).Where(m => m.ID_CP_PY != mU_PECOR_CP_VSS.ID_CP_PY).Where(f => f.ID_PROYECTO_PECOR == mU_PECOR_CP_VSS.ID_PROYECTO_PECOR);
                var Repetido           = 0;

                foreach (MUB_PECOR_CP_VSS cust in ExisteVssCentroPob)
                {
                    Repetido = 1;
                }

                //validación manual
                if (Repetido == 0)
                {
                    if (mU_PECOR_CP_VSS.VSS_BENEF.ToString() != "")
                    {
                        if (mU_PECOR_CP_VSS.DEMANDA_ANUAL.ToString() != "")
                        {   //Response.Write("vss MAX: " + totalVss + "  - Valor: " + mU_PECOR_CP_VSS.VSS_BENEF);
                            if (totalVss == 0 || totalVss >= mU_PECOR_CP_VSS.VSS_BENEF)
                            {
                                //CALCULA VSS Y DEMANDA TOTAL
                                var suma_vss = db.MUB_PECOR_CP_VSS.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy && u.ID_CP_PY != mU_PECOR_CP_VSS.ID_CP_PY).Sum(v => v.VSS_BENEF).ToString();
                                var suma_dem = db.MUB_PECOR_CP_VSS.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy && u.ID_CP_PY != mU_PECOR_CP_VSS.ID_CP_PY).Sum(v => v.DEMANDA_ANUAL).ToString();

                                //GUARDA EL ID DEL PROYECTO
                                db.Entry(mU_PECOR_CP_VSS).State = EntityState.Modified;
                                db.SaveChanges();

                                //ACTUALIZA TOTAL VSS Y DEMANDA EN EL PROYECTO
                                MUB_PROYECTOS_PECOR proyecto_actualiza = db.MUB_PROYECTOS_PECOR.Where(u => u.ID_PROYECTO_PECOR == (long)id_proy).First();
                                proyecto_actualiza.V_BENEFICIA   = Convert.ToInt64(suma_vss) + Convert.ToInt64(mU_PECOR_CP_VSS.VSS_BENEF);
                                proyecto_actualiza.DEMANDA_ANUAL = Convert.ToInt64(suma_dem) + Convert.ToInt64(mU_PECOR_CP_VSS.DEMANDA_ANUAL);
                                db.MUB_PROYECTOS_PECOR.Attach(proyecto_actualiza); // Adiciona en estado descargado
                                db.Entry(proyecto_actualiza).Property(r => r.V_BENEFICIA).IsModified   = true;
                                db.Entry(proyecto_actualiza).Property(r => r.DEMANDA_ANUAL).IsModified = true;
                                db.SaveChanges();


                                return(RedirectToAction("Index"));
                            }
                            else
                            {
                                ViewBag.MsjValida = "El valor de viviendas no puede ser mayor a " + totalVss;
                            }
                        }
                        else
                        {
                            ViewBag.MsjValidaDemanda = "Debe ingresar la Demanda.";
                        }
                    }
                    else
                    {
                        ViewBag.MsjValida = "Debe ingresar el número de Viviendas Beneficiadas sin servicio ";
                    }
                }
                else
                {
                    ViewBag.MsjValidaCentroPob = "El centro poblado ya existe para este Proyecto";
                }
            }
/*            //CARGA ------DEPARTAMENTO------                  */
            //VALIDA SI ES PROGRAMA O PROYECTO
            var tipo = (from b in db.MUB_PROYECTOS_PECOR
                        where b.ID_PROYECTO_PECOR == id_proy
                        select b.PROG_PROY).ToList();

            if (tipo[0].ToString() == "py")
            {
                var cp_py = (from c in db.BC_DP_SITIOS_UPME
                             join v in db.MUB_PECOR_CP_VSS on c.ID_CENTRO_POBLADO equals v.ID_CENTRO_POBLADO
                             where v.ID_PROYECTO_PECOR == id_proy
                             select new { c.ID_CENTRO_POBLADO }
                             ).ToList();

                if (cp_py.Count > 0)
                {
                    //Response.Write("id_centropoblado: " + cp_py[0].ID_CENTRO_POBLADO);

                    int idcp_tmp = cp_py[0].ID_CENTRO_POBLADO;
                    IQueryable <VISTA_BC_MPIO_DPTO> mpio = (from m in db.VISTA_BC_MPIO_DPTO
                                                            join s in db.BC_DP_SITIOS_UPME on m.MPIO_CCDGO equals s.COD_MPIO
                                                            where s.COD_DPTO == m.DPTO_CCDGO && s.ID_CENTRO_POBLADO == idcp_tmp
                                                            select m);
                    py_id_dpto = Convert.ToInt64(mpio.FirstOrDefault().DPTO_CCDGO);
                    py_id_mpio = Convert.ToInt64(mpio.FirstOrDefault().MPIO_CCDGO);
                }
            }

            IEqualityComparer <VISTA_BC_MPIO_DPTO> customComparer = new DistinctDepto();
            IEnumerable <VISTA_BC_MPIO_DPTO>       y;

            if (py_id_dpto != null && py_id_dpto != 0)
            {
                string id_dpto_tmp = py_id_dpto.ToString();
                y = db.VISTA_BC_MPIO_DPTO.Where(d => d.DPTO_CCDGO == id_dpto_tmp).OrderBy(s => s.DPTO_CNMBR).ToList().Distinct(customComparer);
                ViewBag.COD_DPTO = new SelectList(y, "DPTO_CCDGO", "DPTO_CNMBR", id_dpto_tmp);
            }
            else
            {
                y = db.VISTA_BC_MPIO_DPTO.OrderBy(s => s.DPTO_CNMBR).ToList().Distinct(customComparer);
                ViewBag.COD_DPTO = new SelectList(y, "DPTO_CCDGO", "DPTO_CNMBR");
            }

            if (py_id_mpio != null && py_id_mpio != 0)
            {
                string id_dpto_tmp = py_id_dpto.ToString();
                string id_mpio_tmp = py_id_mpio.ToString();
                ViewBag.COD_MPIO          = new SelectList(db.VISTA_BC_MPIO_DPTO.Where(s => s.MPIO_CCDGO == id_mpio_tmp).OrderBy(s => s.MPIO_CNMBR), "MPIO_CCDGO", "MPIO_CNMBR", id_mpio_tmp);
                ViewBag.ID_CENTRO_POBLADO = new SelectList(db.BC_DP_SITIOS_UPME.Where(j => j.COD_MPIO == id_mpio_tmp && j.COD_DPTO == id_dpto_tmp), "ID_CENTRO_POBLADO", "NOMBRE_SITIO", mU_PECOR_CP_VSS.ID_CENTRO_POBLADO);
            }
            else
            {
                ViewBag.COD_MPIO          = new SelectList(db.VISTA_BC_MPIO_DPTO.Where(s => s.DPTO_CCDGO == "").OrderBy(s => s.MPIO_CNMBR), "MPIO_CCDGO", "MPIO_CNMBR");
                ViewBag.ID_CENTRO_POBLADO = new SelectList(db.BC_DP_SITIOS_UPME.Where(j => j.ID_CENTRO_POBLADO == -1), "ID_CENTRO_POBLADO", "NOMBRE_SITIO");
            }
            //CARGA ------PROYECTO------
            ViewBag.ID_PROYECTO_PECOR = new SelectList(db.MUB_PROYECTOS_PECOR.Where(s => s.ID_PROYECTO_PECOR == id_proy), "ID_PROYECTO_PECOR", "CODIGO_UPME");
            return(View(mU_PECOR_CP_VSS));
        }
        // GET: pcVss/Edit/5
        public ActionResult Edit(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            else if (id_proy.ToString().CompareTo("0") == 0)
            {
                return(RedirectToAction("Index", "pcProyecto"));
            }
            MUB_PECOR_CP_VSS mU_PECOR_CP_VSS = db.MUB_PECOR_CP_VSS.Find(id);

            if (mU_PECOR_CP_VSS == null)
            {
                return(HttpNotFound());
            }

            //VALIDA SI ES PROGRAMA O PROYECTO
            var tipo = (from b in db.MUB_PROYECTOS_PECOR
                        where b.ID_PROYECTO_PECOR == id_proy
                        select b.PROG_PROY).ToList();

            if (tipo[0].ToString() == "py")
            {
                var cp_py = (from c in db.BC_DP_SITIOS_UPME
                             join v in db.MUB_PECOR_CP_VSS on c.ID_CENTRO_POBLADO equals v.ID_CENTRO_POBLADO
                             where v.ID_PROYECTO_PECOR == id_proy
                             select new { c.ID_CENTRO_POBLADO }
                             ).ToList();

                if (cp_py.Count > 0)
                {
                    //Response.Write("id_centropoblado: " + cp_py[0].ID_CENTRO_POBLADO);

                    int idcp_tmp = cp_py[0].ID_CENTRO_POBLADO;
                    IQueryable <VISTA_BC_MPIO_DPTO> mpio = (from m in db.VISTA_BC_MPIO_DPTO
                                                            join s in db.BC_DP_SITIOS_UPME on m.MPIO_CCDGO equals s.COD_MPIO
                                                            where s.COD_DPTO == m.DPTO_CCDGO && s.ID_CENTRO_POBLADO == idcp_tmp
                                                            select m);
                    py_id_dpto = Convert.ToInt64(mpio.FirstOrDefault().DPTO_CCDGO);
                    py_id_mpio = Convert.ToInt64(mpio.FirstOrDefault().MPIO_CCDGO);
                }
            }

            IEqualityComparer <VISTA_BC_MPIO_DPTO> customComparer = new DistinctDepto();
            IEnumerable <VISTA_BC_MPIO_DPTO>       y;

            if (py_id_dpto != null && py_id_dpto != 0)
            {
                string id_dpto_tmp = py_id_dpto.ToString();
                y = db.VISTA_BC_MPIO_DPTO.Where(d => d.DPTO_CCDGO == id_dpto_tmp).ToList().Distinct(customComparer);
                ViewBag.COD_DPTO = new SelectList(y, "DPTO_CCDGO", "DPTO_CNMBR", id_dpto_tmp);
            }
            else
            {
                y = db.VISTA_BC_MPIO_DPTO.ToList().Distinct(customComparer);
                ViewBag.COD_DPTO = new SelectList(y, "DPTO_CCDGO", "DPTO_CNMBR");
            }

            if (py_id_mpio != null && py_id_mpio != 0)
            {
                string id_dpto_tmp = py_id_dpto.ToString();
                string id_mpio_tmp = py_id_mpio.ToString();
                ViewBag.COD_MPIO          = new SelectList(db.VISTA_BC_MPIO_DPTO.Where(s => s.MPIO_CCDGO == id_mpio_tmp).OrderBy(s => s.MPIO_CNMBR), "MPIO_CCDGO", "MPIO_CNMBR", id_mpio_tmp);
                ViewBag.ID_CENTRO_POBLADO = new SelectList(db.BC_DP_SITIOS_UPME.Where(j => j.COD_MPIO == id_mpio_tmp && j.COD_DPTO == id_dpto_tmp).OrderBy(s => s.NOMBRE_SITIO), "ID_CENTRO_POBLADO", "NOMBRE_SITIO", mU_PECOR_CP_VSS.ID_CENTRO_POBLADO);
            }
            else
            {
                ViewBag.COD_MPIO          = new SelectList(db.VISTA_BC_MPIO_DPTO.Where(s => s.DPTO_CCDGO == "").OrderBy(s => s.MPIO_CNMBR), "MPIO_CCDGO", "MPIO_CNMBR");
                ViewBag.ID_CENTRO_POBLADO = new SelectList(db.BC_DP_SITIOS_UPME.Where(j => j.ID_CENTRO_POBLADO == -1), "ID_CENTRO_POBLADO", "NOMBRE_SITIO");
            }

            //CARGA PROYECTOS SELECCIONANDO EL VALOR POR DEFECTO
            ViewBag.ID_PROYECTO_PECOR = new SelectList(db.MUB_PROYECTOS_PECOR.Where(s => s.ID_PROYECTO_PECOR == id_proy), "ID_PROYECTO_PECOR", "CODIGO_UPME", mU_PECOR_CP_VSS.ID_PROYECTO_PECOR);
            return(View(mU_PECOR_CP_VSS));
        }