public ActionResult EditarResidencia(ResListViewModel model)
        {
            if (model.ResEdit.NmRes.Length > 20)
            {
                @TempData["msg"]  = "Nome da residência deve ser inferior a 20 caracteres";
                @TempData["type"] = "error";
                return(RedirectToAction("Index", "ResList"));
            }

            ResidenciaDAL resDAL = new ResidenciaDAL();
            Residencia    res    = new Residencia(model.ResEdit.IdRes, model.ResEdit.NmRes, model.ResEdit.Status ? 1 : 0);

            if (model.ResEdit.Status == true)
            {
                UserResDAL      usDAL  = new UserResDAL();
                IList <UserRes> listUR = new List <UserRes>();
                listUR = usDAL.ListarPorUser(1);

                IList <Residencia> listRes = new List <Residencia>();
                listRes = resDAL.ListarPorUser(listUR);
                foreach (var resid in listRes)
                {
                    if (resid.TpRes == 1 && model.ResEdit.IdRes != resid.IdRes)
                    {
                        resid.TpRes = 0;
                        resDAL.Alterar(resid);
                    }
                }
            }

            @TempData["msg"] = "Residência atualizada com sucesso";

            resDAL.Alterar(res);
            return(RedirectToAction("Index", "ResList"));
        }
        public ActionResult AdicionarItem(ResListViewModel model)
        {
            IEleDAL eDAL = new IEleDAL();
            IEle    ele  = eDAL.BuscarPorNome(model.IEleAdd.NmEle);

            ComEleDAL ceDAL = new ComEleDAL();
            ComEle    ce    = new ComEle(model.IEleAdd.IdCom, ele.IdIEle, 0);

            ceDAL.Inserir(ce);

            @TempData["msg"] = "Item Eletrônico adicionado com sucesso";

            return(RedirectToAction("Index", "ResList"));
        }
        public ActionResult CadastrarResidencia(ResListViewModel model)
        {
            if (model.Res.NmRes.Length > 20)
            {
                @TempData["msg"]  = "Nome da residência deve ser inferior a 20 caracteres";
                @TempData["type"] = "error";
                return(RedirectToAction("Index", "ResList"));
            }

            ResidenciaDAL resDAL = new ResidenciaDAL();

            //Garantir que só tenha um 1.
            if (model.Res.Status == true)
            {
                model.Res.TpRes = 1;

                UserResDAL      usDAL  = new UserResDAL();
                IList <UserRes> listUR = new List <UserRes>();
                listUR = usDAL.ListarPorUser(1);

                IList <Residencia> listRes = new List <Residencia>();
                listRes = resDAL.ListarPorUser(listUR);
                foreach (var res in listRes)
                {
                    if (res.TpRes == 1 && model.Res.IdRes != res.IdRes)
                    {
                        res.TpRes = 0;
                        resDAL.Alterar(res);
                    }
                }
            }
            else
            {
                model.Res.TpRes = 0;
            }

            resDAL.Inserir(model.Res);

            //Substituir para usuario dinamico!
            UserResDAL urDAL = new UserResDAL();

            urDAL.Inserir(new UserRes(1, model.Res.IdRes));

            @TempData["type"] = "success";
            @TempData["msg"]  = "Residência adicionada!";

            return(RedirectToAction("Index", "ResList"));
        }
        public ActionResult EditarComodo(ResListViewModel model)
        {
            if (model.ComEdit.NmComodo.Length > 20)
            {
                @TempData["msg"]  = "Nome do cômodo deve ser inferior a 20 caracteres";
                @TempData["type"] = "error";
                return(RedirectToAction("Index", "ResList"));
            }

            ComodoDAL comDAL = new ComodoDAL();

            comDAL.Alterar(model.ComEdit);

            @TempData["msg"] = "Cômodo atualizado com sucesso";

            return(RedirectToAction("Index", "ResList"));
        }
        public ActionResult Index()
        {
            //Disponibilizar os dados do usuário para o layout
            //ViewBag.Usuario = usuario;
            //@{var usuario = (Andromeda.Models.Usuario)ViewBag.usuario;}

            ResListViewModel model = new ResListViewModel();

            //Obter lista de residências relacionadas ao usuário
            IList <UserRes> listUr = new List <UserRes>();
            UserResDAL      urDAL  = new UserResDAL();

            listUr = urDAL.ListarPorUser(1);

            IList <Residencia> listRes = new List <Residencia>();
            ResidenciaDAL      resDAL  = new ResidenciaDAL();

            listRes       = resDAL.ListarPorUser(listUr);
            model.ListRes = listRes;

            Session["res"] = listRes[0];

            //Objeto a ser preenchido com a criação de uma nova residência
            model.Res = new Residencia();

            //Objeto a ser alterado na edição de uma residência
            model.ResEdit = new Residencia();

            //Gerar lista de Comodos atrelados a cada residencia
            List <List <Comodo> > listsCom = new List <List <Comodo> >();
            ComodoDAL             comDAL   = new ComodoDAL();

            foreach (Residencia res in listRes)
            {
                List <Comodo> listaComodo = (List <Comodo>)comDAL.ListarPorRes(res.IdRes);
                listsCom.Add(listaComodo);
                if (res.IdRes == listRes[0].IdRes)
                {
                    Session["com"] = listaComodo;
                }
            }

            model.ListsComodo = listsCom;

            //Objeto a ser preenchido com a criação de um novo cômodo
            model.Com = new Comodo();

            //Objeto a ser preenchido com a edição de cômodo
            model.ComEdit = new Comodo();

            //Gerar lista de aparelhos para cada cômodo
            //1- Gerar lista de ComEle para cada cômodo
            List <List <ComEle> > listsComEle = new List <List <ComEle> >();
            ComEleDAL             ceDAL       = new ComEleDAL();

            foreach (List <Comodo> listCom in listsCom)
            {
                foreach (Comodo com in listCom)
                {
                    listsComEle.Add((List <ComEle>)ceDAL.ListarPorCom(com.IdComodo));
                }
            }

            //2- Gerar lista funcional de IEle + Id Comodo + Id ItemAparelho
            List <IEleTratado> listTratado = new List <IEleTratado>();
            IEleDAL            eDAL        = new IEleDAL();

            List <IEle> listaEle = new List <IEle>();

            foreach (List <ComEle> listComEle in listsComEle)
            {
                foreach (ComEle comEle in listComEle)
                {
                    IEleTratado tratado = new IEleTratado();
                    IEle        item    = eDAL.Consultar(comEle.IdIEle);

                    tratado.IdComEle   = comEle.IdComEle;
                    tratado.IdIEle     = item.IdIEle;
                    tratado.NmIEle     = item.NmIEle;
                    tratado.IdCat      = item.IdCat;
                    tratado.VlConsumo  = item.VlConKwh;
                    tratado.Custo      = item.VlCusto;
                    tratado.IdComodo   = comEle.IdComodo;
                    tratado.QntConsumo = (int)comEle.QtTempoUso;
                    listTratado.Add(tratado);

                    foreach (Comodo com in (List <Comodo>)Session["com"])
                    {
                        if (comEle.IdComodo == com.IdComodo)
                        {
                            listaEle.Add(item);
                        }
                    }
                }
            }

            Session["itens"] = listaEle;

            //3- Exportar objeto tratado para o modelo
            model.ListIEle = listTratado;

            //Objeto para adicao de novo item dentro de um comodo
            model.IEleAdd = new IEleAdd();

            return(View(model));
            //return View (listRes);
        }