public ActionResult PDEdit(int?id, string isClone)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PlanDebit planDebit = db.PlanDebits.Find(id);

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

            //Проверяем наличие у пользователя прав для работы с данной сущностью
            if (!UsrWksMethods.isAllowed(db, planDebit.ProjectId))
            {
                return(View("~/Views/Shared/AccessDenied.cshtml"));
            }

            planDebit.ProjectName      = db.Projects.Where(x => x.id == planDebit.ProjectId).Select(x => x.ShortName).FirstOrDefault().ToString();
            planDebit.OrganizationName = db.Organizations.Where(x => x.id == planDebit.OrganizationId).Select(x => x.Title).FirstOrDefault().ToString();

            ViewData["periodItems"] = new SelectList(db.PlanningPeriods, "PlanningPeriodId", "PeriodName");

            if (Convert.ToBoolean(isClone))
            {
                planDebit.Date = DateTime.Today;
                return(View("PDClone", planDebit));
            }
            else
            {
                return(View(planDebit));
            }
        }
        public ActionResult DeleteConfirmed(int id)
        {
            try
            {
                PlanDebit planDebit = db.PlanDebits.FirstOrDefault(x => x.PlanDebitId == id);
                if (planDebit == null)
                {
                    TempData["MessageError"] = "Удаляемый объект отсутствует в базе данных";
                    return(RedirectToAction("PDShow"));
                }

                //Проверяем наличие у пользователя прав для работы с данной сущностью
                if (!UsrWksMethods.isAllowed(db, planDebit.ProjectId))
                {
                    return(View("~/Views/Shared/AccessDenied.cshtml"));
                }

                db.PlanDebits.Remove(planDebit);
                db.SaveChanges();
                TempData["MessageOK"] = "Информация удалена";
                return(RedirectToAction("PDShow"));
            }
            catch (Exception ex)
            {
                ViewBag.ErMes   = ex.Message;
                ViewBag.ErStack = ex.StackTrace;
                ViewBag.ErInner = ex.InnerException.InnerException.Message;
                return(View("Error"));
            }
        }
        public ActionResult PDCreate()
        {
            PlanDebit _model = new PlanDebit();

            ViewData["periodItems"] = new SelectList(db.PlanningPeriods, "PlanningPeriodId", "PeriodName");
            _model.Date             = DateTime.Today;
            return(View(_model));
        }
        public ActionResult PDCreate([Bind(Include = "PlanDebitId,Date,Sum,ProjectId,OrganizationId,Appointment,UserId,PeriodId")] PlanDebit planDebit)
        {
            if (ModelState.IsValid)
            {
                //Запрещаем руководителям проектов добавление/редактирование планов текущего и предыдущих месяцев
                int NextMonth = DateTime.Today.Month + 1;
                int WYear     = DateTime.Today.Year;
                if (NextMonth > 12)
                {
                    NextMonth = 1;
                    WYear    += 1;
                }
                int  PlanMonth    = planDebit.Date.Month;
                int  PlanYear     = planDebit.Date.Year;
                bool isPrgManager = System.Web.HttpContext.Current.User.IsInRole("ProjectManager");
                if (isPrgManager && ((PlanMonth < NextMonth && PlanYear <= DateTime.Today.Year)))
                {
                    TempData["MessageError"] = "Руководителям проектов запрещено добавление/редактирование планов текущего и предыдущих месяцев";
                    ViewData["periodItems"]  = new SelectList(db.PlanningPeriods, "PlanningPeriodId", "PeriodName");
                    ViewData["prgSelect"]    = db.Projects.FirstOrDefault(x => x.id == planDebit.ProjectId).ShortName;
                    ViewData["orgSelect"]    = db.Organizations.FirstOrDefault(x => x.id == planDebit.OrganizationId).Title;

                    return(View(planDebit));
                }

                try
                {
                    //Получаем идентификатор текущего пользователя
                    using (ApplicationDbContext aspdb = new ApplicationDbContext())
                    {
                        var user = System.Web.HttpContext.Current.User.Identity.GetUserId();
                        planDebit.UserId = user;
                    }

                    db.PlanDebits.Add(planDebit);
                    db.SaveChanges();
                    TempData["MessageOK"] = "Информация добавлена";
                    return(RedirectToAction("PDShow"));
                }
                catch (Exception ex)
                {
                    ViewBag.ErMes   = ex.Message;
                    ViewBag.ErStack = ex.StackTrace;
                    ViewBag.ErInner = ex.InnerException.InnerException.Message;
                    return(View("Error"));
                }
            }

            TempData["MessageError"] = "Ошибка валидации модели";
            return(View(planDebit));
        }
        public ActionResult PDDetails(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            PlanDebit planDebit = (from _pd in db.PlanDebits
                                   join _pname in db.Projects on _pd.ProjectId equals _pname.id
                                   join _org in db.Organizations on _pd.OrganizationId equals _org.id
                                   join _period in db.PlanningPeriods on _pd.PeriodId equals _period.PlanningPeriodId
                                   where (_pd.PlanDebitId == id)
                                   select new
            {
                PlanDebitId = _pd.PlanDebitId,
                Sum = _pd.Sum,
                Date = _pd.Date,
                ProjectId = _pd.ProjectId,
                ProjectName = _pname.ShortName,
                OrganizationName = _org.Title,
                PeriodName = _period.PeriodName,
                Appointment = _pd.Appointment
            }).AsEnumerable().Select(x => new PlanDebit
            {
                PlanDebitId      = x.PlanDebitId,
                Sum              = x.Sum,
                Date             = x.Date,
                ProjectId        = x.ProjectId,
                ProjectName      = x.ProjectName,
                OrganizationName = x.OrganizationName,
                PeriodName       = x.PeriodName,
                Appointment      = x.Appointment
            }).FirstOrDefault();

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

            //Проверяем наличие у пользователя прав для работы с данной сущностью
            if (!UsrWksMethods.isAllowed(db, planDebit.ProjectId))
            {
                return(View("~/Views/Shared/AccessDenied.cshtml"));
            }

            return(View(planDebit));
        }
        public ActionResult PDDelete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PlanDebit planDebit = db.PlanDebits.Find(id);

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

            //Проверяем наличие у пользователя прав для работы с данной сущностью
            if (!UsrWksMethods.isAllowed(db, planDebit.ProjectId))
            {
                return(View("~/Views/Shared/AccessDenied.cshtml"));
            }

            planDebit.ProjectName      = db.Projects.Where(x => x.id == planDebit.ProjectId).Select(x => x.ShortName).FirstOrDefault().ToString();
            planDebit.OrganizationName = db.Organizations.Where(x => x.id == planDebit.OrganizationId).Select(x => x.Title).FirstOrDefault().ToString();

            return(View(planDebit));
        }
        public ActionResult PDEdit([Bind(Include = "PlanDebitId,Date,Sum,ProjectId,OrganizationId,Appointment,PeriodId")] PlanDebit planDebit)
        {
            //Проверяем наличие у пользователя прав для работы с данной сущностью
            if (!UsrWksMethods.isAllowed(db, planDebit.ProjectId))
            {
                return(View("~/Views/Shared/AccessDenied.cshtml"));
            }

            if (ModelState.IsValid)
            {
                //Запрещаем руководителям проектов добавление/редактирование планов текущего и предыдущих месяцев
                int NextMonth = DateTime.Today.Month + 1;
                int WYear     = DateTime.Today.Year;
                if (NextMonth > 12)
                {
                    NextMonth = 1;
                    WYear    += 1;
                }
                int  PlanMonth    = planDebit.Date.Month;
                int  PlanYear     = planDebit.Date.Year;
                bool isPrgManager = System.Web.HttpContext.Current.User.IsInRole("ProjectManager");
                if (isPrgManager && ((PlanMonth < NextMonth && PlanYear <= DateTime.Today.Year)))
                {
                    TempData["MessageError"] = "Руководителям проектов запрещено добавление/редактирование планов текущего и предыдущих месяцев";
                    ViewData["periodItems"]  = new SelectList(db.PlanningPeriods, "PlanningPeriodId", "PeriodName");
                    ViewData["prgSelect"]    = db.Projects.FirstOrDefault(x => x.id == planDebit.ProjectId).ShortName;
                    ViewData["orgSelect"]    = db.Organizations.FirstOrDefault(x => x.id == planDebit.OrganizationId).Title;

                    return(View(planDebit));
                }

                try
                {
                    //Получаем идентификатор текущего пользователя
                    using (ApplicationDbContext aspdb = new ApplicationDbContext())
                    {
                        var user = System.Web.HttpContext.Current.User.Identity.GetUserId();
                        planDebit.UserId = user;
                    }

                    db.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s));

                    db.Entry(planDebit).State = EntityState.Modified;
                    db.SaveChanges();
                    TempData["MessageOK"] = "Информация обновлена";
                    return(RedirectToAction("PDShow"));
                }
                catch (Exception ex)
                {
                    ViewBag.ErMes   = ex.Message;
                    ViewBag.ErStack = ex.StackTrace;
                    ViewBag.ErInner = ex.InnerException.InnerException.Message;
                    return(View("Error"));
                }
            }

            TempData["MessageError"] = "Ошибка валидации модели";

            planDebit.ProjectName      = db.Projects.Where(x => x.id == planDebit.ProjectId).Select(x => x.ShortName).FirstOrDefault().ToString();
            planDebit.OrganizationName = db.Organizations.Where(x => x.id == planDebit.OrganizationId).Select(x => x.Title).FirstOrDefault().ToString();

            return(View(planDebit));
        }