// GET: /SelfService/SelfServiceCreate
        public ActionResult SelfServiceCreate()
        {
            SelfService selfService = new SelfService();

            #region populaobjetos
            var cargos = _cargoAppService.Find(t => t.CodigoCargoAlternate.Trim() != "NA" && t.CodigoCargoAlternate.Trim() != "DS");
            IEnumerable<SelectListItem> cargoSelectListItem = new SelectList(cargos, "CodigoCargoAlternate", "NomeCargo");
            ViewBag.CodigoCargoAlternate = new SelectList(cargos, "CodigoCargoAlternate", "NomeCargo");

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

            SelfServiceViewModel selfServiceVM = new SelfServiceViewModel(selfService, cargoSelectListItem, lojaSelectListItem);

            return View(selfServiceVM);
        }
        public ActionResult SelfServiceCreateConfirmed(SelfService selfservice)
        {
            try
            {
                selfservice = ObtemSelfServiceForm(selfservice, true);

                if (ModelState.IsValid)
                {
                    SelfService selfserviceExiste = new SelfService();
                    selfserviceExiste = null;

                    if (selfservice.STATUS == "A")
                    {
                        selfserviceExiste = SelfServiceAtivaVigente(selfservice);
                    }

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

                    return RedirectToAction("SelfServiceIndex");
                }
            }
            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(selfservice);
        }
 public SelfServiceViewModel(SelfService selfService, IEnumerable<SelectListItem> cargoSelectListItem, IEnumerable<SelectListItem> lojaSelectListItem)
 {
     SelfService = selfService;
     CargoSelectListItem = cargoSelectListItem;
     LojaSelectListItem = lojaSelectListItem;
 }
 public SelfServiceViewModel(SelfService selfService, Cargo cargo, Loja loja)
 {
     SelfService = selfService;
     Cargo = cargo;
     Loja = loja;
 }
 private SelfService SelfServiceAtivaVigente(SelfService ss)
 {
     return _selfserviceAppService.Find(t => t.CODIGOCARGOALTERNATE == ss.CODIGOCARGOALTERNATE
                                         && t.CODIGOLOJAALTERNATE == ss.CODIGOLOJAALTERNATE
                                         && t.STATUS == "A"
                                         && (
                                             (t.DT_INI <= ss.DT_INI && t.DT_FIM >= ss.DT_INI)
                                             || (t.DT_FIM <= ss.DT_INI && t.DT_FIM >= ss.DT_FIM)
                                             || (ss.DT_INI <= t.DT_INI && ss.DT_FIM >= t.DT_FIM)
                                         )
                                     ).FirstOrDefault();
 }
        private SelfService ObtemSelfServiceForm(SelfService ss, bool insert = false)
        {
            ss.CODIGOCARGOALTERNATE = Request["SelfService.CODIGOCARGOALTERNATE"];
            ss.CODIGOLOJAALTERNATE = Request["SelfService.CODIGOLOJAALTERNATE"];
            ss.DT_INI = Convert.ToDateTime(Request["SelfService.DT_INI"]);
            ss.DT_FIM = Convert.ToDateTime(Request["SelfService.DT_FIM"]);
            ss.STATUS = Request["SelfService.STATUS"];

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

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

            return ss;
        }
        public ActionResult SelfServiceEditConfirmed(int? id)
        {
            if (id == null)
            {
                //return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                throw new Exception();
            }

            var selfserviceToUpdate = _selfserviceAppService.Get(id ?? default(int));

            selfserviceToUpdate = ObtemSelfServiceForm(selfserviceToUpdate);

            if (ModelState.IsValid)
            {
                try
                {
                    SelfService selfserviceExiste = new SelfService();
                    selfserviceExiste = null;

                    if (selfserviceToUpdate.STATUS == "A")
                    {
                        selfserviceExiste = SelfServiceAtivaVigente(selfserviceToUpdate);
                    }

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

                    return RedirectToAction("SelfServiceIndex");
                }
                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(selfserviceToUpdate);
        }