예제 #1
0
        private CyclesModel GetCycleModelForMonth(int month, int year, int courtID)
        {
            var CycleModel = new CyclesModel {
                Month = new ShowMonthOnly(month, year)
            };
            var FirstCycles = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.FirstCycle).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (FirstCycles.Count() > 0)
            {
                CycleModel.FirstFrom = FirstCycles.First();
                CycleModel.FirstTo   = FirstCycles.Last();
            }

            var SecondCycles = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.SecondCycle).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (SecondCycles.Count() > 0)
            {
                CycleModel.SecondFrom = SecondCycles.First();
                CycleModel.SecondTo   = SecondCycles.Last();
            }

            var ThirdCycles = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.ThridCycle).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (ThirdCycles.Count() > 0)
            {
                CycleModel.ThirdFrom = ThirdCycles.First();
                CycleModel.ThirdTo   = ThirdCycles.Last();
            }

            var FourthCycles = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.FourthCycle).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (FourthCycles.Count() > 0)
            {
                CycleModel.FourthFrom = FourthCycles.First();
                CycleModel.FourthTo   = FourthCycles.Last();
            }

            var FirstSeperator = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.FirstSeperator).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (FirstSeperator.Count() > 0)
            {
                CycleModel.FirstSeperatorFrom = FirstSeperator.First();
                CycleModel.FirstSeperatorTo   = FirstSeperator.Last();
            }

            var SecondSeperator = CycleService.GetCycleDatesQuery(courtID, Base.Cycle.SecondSeperator).Where(date => date.Month == month && date.Year == year).OrderBy(date => date).ToList();

            if (SecondSeperator.Count() > 0)
            {
                CycleModel.SecondSeperatorFrom = SecondSeperator.First();
                CycleModel.SecondSeperatorTo   = SecondSeperator.Last();
            }
            CycleModel.CourtID = CurrentUser.CourtID.Value;
            return(CycleModel);
        }
예제 #2
0
        private void GetCyclesDates(int courtID, out List <DateTime> FirstCycleDates, out List <DateTime> SecondCycleDates, out List <DateTime> ThirdCycleDates, out List <DateTime> FourthCycleDates, out List <DateTime> Seperators)
        {
            DateTime        startDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
            List <DateTime> Dates     = Enumerable.Range(0, 17)
                                        .Select(offset => startDate.AddMonths(offset))
                                        .ToList();

            FirstCycleDates  = new List <DateTime>();
            SecondCycleDates = new List <DateTime>();
            ThirdCycleDates  = new List <DateTime>();
            FourthCycleDates = new List <DateTime>();
            Seperators       = new List <DateTime>();
            foreach (var date in Dates)
            {
                CyclesModel cyclesModel = GetCycleModelForMonth(date.Month, date.Year, courtID);
                if (cyclesModel.FirstFrom.HasValue && cyclesModel.FirstTo.HasValue)
                {
                    FirstCycleDates.AddRange(GetDatesBetween(cyclesModel.FirstFrom.Value, cyclesModel.FirstTo.Value));
                }
                if (cyclesModel.SecondFrom.HasValue && cyclesModel.SecondTo.HasValue)
                {
                    SecondCycleDates.AddRange(GetDatesBetween(cyclesModel.SecondFrom.Value, cyclesModel.SecondTo.Value));
                }
                if (cyclesModel.ThirdFrom.HasValue && cyclesModel.ThirdTo.HasValue)
                {
                    ThirdCycleDates.AddRange(GetDatesBetween(cyclesModel.ThirdFrom.Value, cyclesModel.ThirdTo.Value));
                }
                if (cyclesModel.FourthFrom.HasValue && cyclesModel.FourthTo.HasValue)
                {
                    FourthCycleDates.AddRange(GetDatesBetween(cyclesModel.FourthFrom.Value, cyclesModel.FourthTo.Value));
                }
                if (cyclesModel.FirstSeperatorFrom.HasValue && cyclesModel.FirstSeperatorTo.HasValue)
                {
                    Seperators.AddRange(GetDatesBetween(cyclesModel.FirstSeperatorFrom.Value, cyclesModel.FirstSeperatorTo.Value));
                }
                if (cyclesModel.SecondSeperatorFrom.HasValue && cyclesModel.SecondSeperatorTo.HasValue)
                {
                    Seperators.AddRange(GetDatesBetween(cyclesModel.SecondSeperatorFrom.Value, cyclesModel.SecondSeperatorTo.Value));
                }
            }
        }
예제 #3
0
        public ActionResult Index(CyclesModel Cycles)
        {
            if (CurrentUser != null)
            {
                int CurrentMonth = new DateTime().Month;
                // if Previous month not saved
                if (!CycleService.IsPreviousMonthSaved(Cycles.FirstFrom.Value.AddMonths(-1).Month, Cycles.FirstFrom.Value.AddMonths(-1).Year))

                {
                    // ModelState.AddModelError("SecondSeperatorFrom", "يجب إدخال توزيع الأدوار لجميع الأشهر السابقه");
                    return(RedirectTo(Url.Action("Index", new { month = Cycles.Month.Month, year = Cycles.Month.Year })).WithErrorMessages("يجب إدخال توزيع الأدوار لجميع الأشهر السابقه"));
                }


                // Check that all durations are valid
                if (Cycles.FirstFrom > Cycles.FirstTo)
                {
                    ModelState.AddModelError("FirstTo", Base.Resources.Messages.Durations);
                }
                if (Cycles.SecondFrom > Cycles.SecondTo)
                {
                    ModelState.AddModelError("SecondTo", Base.Resources.Messages.Durations);
                }
                if (Cycles.ThirdFrom > Cycles.ThirdTo)
                {
                    ModelState.AddModelError("ThirdTo", Base.Resources.Messages.Durations);
                }
                if (Cycles.FourthFrom > Cycles.FourthTo)
                {
                    ModelState.AddModelError("FourthTo", Base.Resources.Messages.Durations);
                }
                if (Cycles.FirstSeperatorFrom.HasValue || Cycles.FirstSeperatorTo.HasValue)
                {
                    if (!Cycles.FirstSeperatorFrom.HasValue || !Cycles.FirstSeperatorTo.HasValue)
                    {
                        ModelState.AddModelError("FirstSeperatorFrom", "لا بد من إدخال قيمة فاصل الإنعقاد فى حالة إضافة الأخر");
                    }
                }

                if (Cycles.FirstSeperatorFrom.HasValue && Cycles.FirstSeperatorTo.HasValue && Cycles.FirstSeperatorFrom > Cycles.FirstSeperatorTo)
                {
                    ModelState.AddModelError("FirstSeperatorFrom", Base.Resources.Messages.Durations);
                }

                if (Cycles.SecondSeperatorFrom.HasValue || Cycles.SecondSeperatorTo.HasValue)
                {
                    if (!Cycles.SecondSeperatorFrom.HasValue || !Cycles.SecondSeperatorTo.HasValue)
                    {
                        ModelState.AddModelError("SecondSeperatorFrom", "لا بد من إدخال قيمة فاصل الإنعقاد فى حالة إضافة الأخر");
                    }
                }

                if (Cycles.SecondSeperatorFrom.HasValue && Cycles.SecondSeperatorTo.HasValue && Cycles.FirstSeperatorFrom > Cycles.FirstSeperatorTo)
                {
                    ModelState.AddModelError("SecondSeperatorFrom", Base.Resources.Messages.Durations);
                }

                // check that there is no intersected days between 2 cycles
                if (Cycles.FirstTo > Cycles.SecondFrom)
                {
                    ModelState.AddModelError("SecondFrom", Base.Resources.Messages.IntersectedCycles);
                }
                if (Cycles.SecondTo > Cycles.ThirdFrom)
                {
                    ModelState.AddModelError("ThirdFrom", Base.Resources.Messages.IntersectedCycles);
                }
                if (Cycles.ThirdTo > Cycles.FourthFrom)
                {
                    ModelState.AddModelError("FourthFrom", Base.Resources.Messages.IntersectedCycles);
                }

                //FirstSeperator Must be Before The First Cycle
                if (Cycles.FirstSeperatorTo.HasValue && Cycles.FirstSeperatorTo >= Cycles.FirstFrom)
                {
                    ModelState.AddModelError("FirstSeperatorTo", "لا يجب ان تتقاطع ايام الفواصل مع ايام الأدوار");
                }
                if (Cycles.SecondSeperatorFrom.HasValue && Cycles.SecondSeperatorFrom <= Cycles.FourthTo)
                {
                    ModelState.AddModelError("SecondSeperatorFrom", "لا يجب ان تتقاطع ايام الفواصل مع ايام الأدوار");
                }

                //  on october, first day must be saturday

                if (Cycles.FirstFrom.HasValue)
                {
                    if (Cycles.FirstFrom.Value.Month == 10)
                    {
                        DateTime FirstSaturdayDate = GetFirstSaturdayInOctober(Cycles.FirstFrom.Value.Year);
                        if (Cycles.FirstFrom.Value != FirstSaturdayDate)
                        {
                            ModelState.AddModelError("FirstFrom", "يجب أن تبدأ السنة القضائية بأول سبت من شهر أكتوبر");
                        }
                    }
                }

                // separators must be in first and last weeks only
                if (Cycles.FirstSeperatorTo.HasValue && Cycles.FirstSeperatorFrom.HasValue)
                {
                    DateTime MinDate = new DateTime(Cycles.FirstSeperatorTo.Value.Year, Cycles.FirstSeperatorTo.Value.Month, 1);
                    DateTime MaxDate = new DateTime(Cycles.FirstSeperatorTo.Value.Year, Cycles.FirstSeperatorTo.Value.Month, 7);

                    if (!((MinDate <= Cycles.FirstSeperatorTo && Cycles.FirstSeperatorTo <= MaxDate) && (MinDate <= Cycles.FirstSeperatorFrom) && (Cycles.FirstSeperatorFrom <= MaxDate)))
                    {
                        ModelState.AddModelError("FirstSeperatorTo", "يجب ان تكون فواصل الإنعقاد فى الاسبوع الاول او الاخير فقط");
                    }
                    if (IsThereIsUnFilledDays(Cycles.FirstSeperatorTo.Value.Date, Cycles.FirstFrom.Value.Date))
                    {
                        ModelState.AddModelError("SecondSeperatorFrom", "يوجد أيام لم يتم تعريفها، يجب تعريفها لإتمام الحفظ");
                    }
                }
                if (Cycles.SecondSeperatorTo.HasValue && Cycles.SecondSeperatorFrom.HasValue)
                {
                    var      lastDayOfMonth = DateTime.DaysInMonth(Cycles.SecondSeperatorTo.Value.Year, Cycles.SecondSeperatorTo.Value.Month);
                    DateTime MinDate2       = new DateTime(Cycles.SecondSeperatorTo.Value.Year, Cycles.SecondSeperatorTo.Value.Month, lastDayOfMonth - 7);
                    DateTime MaxDate2       = new DateTime(Cycles.SecondSeperatorTo.Value.Year, Cycles.SecondSeperatorTo.Value.Month, lastDayOfMonth);

                    if (!((MinDate2 <= Cycles.SecondSeperatorTo) && (Cycles.SecondSeperatorTo <= MaxDate2) && (MinDate2 <= Cycles.SecondSeperatorFrom) && (Cycles.SecondSeperatorFrom <= MaxDate2)))
                    {
                        ModelState.AddModelError("SecondSeperatorTo", "يجب ان تكون فواصل الإنعقاد فى الاسبوع الاول او الاخير فقط");
                    }


                    if (IsThereIsUnFilledDays(Cycles.SecondSeperatorFrom.Value.Date, Cycles.FourthTo.Value.Date))
                    {
                        ModelState.AddModelError("SecondSeperatorFrom", "يوجد أيام لم يتم تعريفها، يجب تعريفها لإتمام الحفظ");
                    }
                }

                List <DateTime> AllMonthSelectedDates = new List <DateTime>();
                AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.FirstFrom.Value, Cycles.FirstTo.Value));
                AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.SecondFrom.Value, Cycles.SecondTo.Value));
                AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.ThirdFrom.Value, Cycles.ThirdTo.Value));
                AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.FourthFrom.Value, Cycles.FourthTo.Value));

                if (Cycles.FirstSeperatorTo.HasValue && Cycles.FirstSeperatorFrom.HasValue)
                {
                    AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.FirstSeperatorFrom.Value, Cycles.FirstSeperatorTo.Value));
                }
                if (Cycles.SecondSeperatorTo.HasValue && Cycles.SecondSeperatorFrom.HasValue)
                {
                    AllMonthSelectedDates.AddRange(GetDatesBetween(Cycles.SecondSeperatorFrom.Value, Cycles.SecondSeperatorTo.Value));
                }


                int NumberOfWeekdEndDaysInMonth = GetNumberOfWeekEndsInAMonth(Cycles.FirstFrom.Value.Year, Cycles.FirstFrom.Value.Month);


                int AllMonthDaysCount = DateTime.DaysInMonth(Cycles.FirstFrom.Value.Year, Cycles.FirstFrom.Value.Month) - NumberOfWeekdEndDaysInMonth; // GetMonthNumberOfDays(Cycles.FirstFrom.Value.Month);


                if (AllMonthSelectedDates.Count < AllMonthDaysCount)
                {
                    //ModelState.AddModelError("", JIC.Base.Resources.Messages.UnFilledDays);
                    // ShowMessage(Base.MessageTypes.Error, JIC.Base.Resources.Messages.UnFilledDays);
                    return(RedirectTo(Url.Action("Index", new { month = Cycles.Month.Month, year = Cycles.Month.Year })).WithErrorMessages(JIC.Base.Resources.Messages.UnFilledDays));
                }



                // if there is no errors, Save cycles for the current month
                if (ModelState.IsValid)
                {
                    var CycleList = new List <Base.Views.vw_AddCycle>
                    {
                        new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.FirstCycle, DateFrom = Cycles.FirstFrom.Value, DateTo = Cycles.FirstTo.Value
                        },
                        new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.SecondCycle, DateFrom = Cycles.SecondFrom.Value, DateTo = Cycles.SecondTo.Value
                        },
                        new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.ThridCycle, DateFrom = Cycles.ThirdFrom.Value, DateTo = Cycles.ThirdTo.Value
                        },
                        new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.FourthCycle, DateFrom = Cycles.FourthFrom.Value, DateTo = Cycles.FourthTo.Value
                        }
                    };
                    if (Cycles.FirstSeperatorFrom.HasValue)
                    {
                        CycleList.Add(new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.FirstSeperator, DateFrom = Cycles.FirstSeperatorFrom.Value, DateTo = Cycles.FirstSeperatorTo.Value
                        });
                    }

                    if (Cycles.SecondSeperatorFrom.HasValue)
                    {
                        CycleList.Add(new Base.Views.vw_AddCycle {
                            Cycle = Base.Cycle.SecondSeperator, DateFrom = Cycles.SecondSeperatorFrom.Value, DateTo = Cycles.SecondSeperatorTo.Value
                        });
                    }



                    var Result = CycleService.AddCycles(CycleList, CurrentUser.CourtID.Value);

                    if (Result)
                    {
                        return(RedirectTo(Url.Action("Index", new { month = Cycles.Month.Month, year = Cycles.Month.Year })).WithSuccessMessages(JIC.Base.Resources.Messages.OperationCompletedSuccessfully));
                    }
                    else
                    {
                        ShowMessage(Base.MessageTypes.Error, JIC.Base.Resources.Messages.FaildAdd);
                    }
                }

                return(View(GetCycleModel(Cycles.Month.Month, Cycles.Month.Year, CurrentUser.CourtID.Value, Cycles)));
            }
            else
            {
                return(RedirectTo(Url.Action("login", "User", new { returnUrl = "/" })).WithErrorMessages("تم الخروج بشكل تلقائى لعدم التفاعل اكثر من 15 دقيقة"));
            }
        }
예제 #4
0
 private CyclesModel GetCycleModel(int month, int year, int courtID, CyclesModel cyclesModel = null)
 {
     return(cyclesModel != null ? cyclesModel : GetCycleModelForMonth(month, year, courtID));
 }