public ActionResult CategoriaPercentualCreateConfirmed(CategoriaPercentual categoriapercentual)
        {
            try
            {
                categoriapercentual = ObtemCategoriaPercentualForm(categoriapercentual, true);

                if (ModelState.IsValid)
                {
                    CategoriaPercentual categoriapercentualExiste = new CategoriaPercentual();
                    categoriapercentualExiste = null;

                    if (categoriapercentual.STATUS == "A")
                    {
                        categoriapercentualExiste = CategoriaPercentualAtivaVigente(categoriapercentual);
                    }

                    if (categoriapercentualExiste == null || categoriapercentual.STATUS == "I")
                    {
                        _categoriapercentualAppService.Create(categoriapercentual);
                    }
                    else
                    {
                        throw new InvalidOperationException("Já existe um perído vigente e ativo que coincide com a tentativa de inclusão / alteração");
                    }
                    return RedirectToAction("CategoriaPercentualIndex");
                }
            }
            catch (RetryLimitExceededException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Erro ao salvar. Tente novamente ou, se o problema persistir, entre em contato com o suporte.");
            }

            return View(categoriapercentual);
        }
        // GET: /CategoriaPercentual/CategoriaPercentualCreate
        public ActionResult CategoriaPercentualCreate()
        {
            CategoriaPercentual categoriapercentual = new CategoriaPercentual();

            //#region populaobjetos
            //var categorias = _categoriaAppService.Find(t => t.STATUS == "A");
            //IEnumerable<SelectListItem> categoriaSelectListItem = new SelectList(categorias, "ID_CATEGORIA", "DESC_CATEGORIA");
            //ViewBag.ID_CATEGORIA = new SelectList(categorias, "ID_CATEGORIA", "DESC_CATEGORIA");

            //var lojas = _lojaAppService.Find(t => t.CodigoLojaAlternate.Trim() != "-2" && t.CodigoLojaAlternate.Trim() != "-1"); ;
            //IEnumerable<SelectListItem> lojaSelectListItem = new SelectList(lojas, "CodigoLojaAlternate", "NomeLoja");
            //ViewBag.ID_PLANO = new SelectList(lojas, "CodigoLojaAlternate", "NomeLoja");
            //#endregion populaobjetos

            //CategoriaPercentualViewModel categoriaPercentualVM = new CategoriaPercentualViewModel(categoriapercentual, categoriaSelectListItem, lojaSelectListItem);
            CategoriaPercentualViewModel categoriaPercentualVM = new CategoriaPercentualViewModel(categoriapercentual);

            return View(categoriaPercentualVM);
        }
        //public IEnumerable<SelectListItem> CategoriasSelectListItem { get; set; }

        //public IEnumerable<SelectListItem> LojasSelectListItem { get; set; }

        public CategoriaPercentualViewModel(CategoriaPercentual categoriaPercentual)
        {
            CategoriaPercentual = categoriaPercentual;
        }
        private CategoriaPercentual ObtemCategoriaPercentualForm(CategoriaPercentual cp, bool insert = false)
        {
            //cp.ID_CATEGORIA = Convert.ToInt32(Request["CategoriaPercentual.ID_CATEGORIA"]);
            cp.ATRIBUTO = Request["CategoriaPercentual.ATRIBUTO"];
            //cp.CODIGOLOJAALTERNATE = Request["CategoriaPercentual.CODIGOLOJAALTERNATE"];
            cp.PERCENTUAL = Convert.ToDecimal(Request["CategoriaPercentual.PERCENTUAL"]);
            cp.DT_INI = Convert.ToDateTime(Request["CategoriaPercentual.DT_INI"]);
            cp.DT_FIM = Convert.ToDateTime(Request["CategoriaPercentual.DT_FIM"]);
            cp.STATUS = Request["CategoriaPercentual.STATUS"];

            cp.LAST_MODIFY_DATE = DateTime.Now;
            cp.LAST_MODIFY_USERNAME = _controleacessoAppService.ObtainCurrentLoginFromAd();

            if (insert)
            {
                cp.CREATED_DATETIME = cp.LAST_MODIFY_DATE;
                cp.CREATED_USERNAME = cp.LAST_MODIFY_USERNAME;
            }

            return cp;
        }
 private CategoriaPercentual CategoriaPercentualAtivaVigente(CategoriaPercentual cp)
 {
     return _categoriapercentualAppService.Find(t => t.ID_PLANO_CATEGORIA == cp.ID_PLANO_CATEGORIA
                                                 && t.ATRIBUTO == cp.ATRIBUTO
                                                 && t.STATUS == "A"
                                                 && (
                                                     (t.DT_INI <= cp.DT_INI && t.DT_FIM >= cp.DT_INI)
                                                     || (t.DT_FIM <= cp.DT_INI && t.DT_FIM >= cp.DT_FIM)
                                                     || (cp.DT_INI <= t.DT_INI && cp.DT_FIM >= t.DT_FIM)
                                                 )
                                             ).FirstOrDefault();
 }
        public ActionResult CategoriaPercentualEditConfirmed(int? id)
        {
            if (id == null)
            {
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                throw new Exception();
            }

            var categoriapercentualToUpdate = _categoriapercentualAppService.Get(id ?? default(int));

            categoriapercentualToUpdate = ObtemCategoriaPercentualForm(categoriapercentualToUpdate);

            if (ModelState.IsValid)
            {
                try
                {
                    CategoriaPercentual categoriapercentualExiste = new CategoriaPercentual();
                    categoriapercentualExiste = null;

                    if (categoriapercentualToUpdate.STATUS == "A")
                    {
                        categoriapercentualExiste = CategoriaPercentualAtivaVigente(categoriapercentualToUpdate);
                    }

                    if (categoriapercentualExiste == null || categoriapercentualToUpdate.STATUS == "I")
                    {
                        _categoriapercentualAppService.Update(categoriapercentualToUpdate);
                    }
                    else
                    {
                        throw new InvalidOperationException("Já existe um perído vigente e ativo que coincide com a tentativa de inclusão / alteração");
                    }

                    //<REVER>
                    //return RedirectToAction("CategoriaPercentualIndex");
                    return RedirectToAction("Index", "Home");
                }
                catch (RetryLimitExceededException /* dex */)
                {
                    //Log the error (uncomment dex variable name and add a line here to write a log.
                    ModelState.AddModelError("", "Erro na alteração. Tente novamente ou, se o problema persistir, entre em contato com o suporte.");
                }
            }

            return View(categoriapercentualToUpdate);
        }