public ActionResult New()
 {
     SpecialTime st = new SpecialTime { StartTime = DateTime.Now, EndTime = DateTime.Now };
     return View(st);
 }
        public ActionResult New(SpecialTime specialTime)
        {
            if (ModelState.IsValid)
            {
                if (DateTime.Compare(specialTime.EndTime, specialTime.StartTime) < 1)
                {
                    SaveErrorMessage(Resources.PRD.SpecialTime.Errors_StartDateGreaterThanEndDate);
                }
                else
                {
                    var specialTimes = base.genericMgr.FindAll<SpecialTime>(selectspecialTimeByProdLineStatement, new object[] { specialTime.ProdLine ?? string.Empty });
                    var existStartTime = specialTimes.FirstOrDefault(c => c.StartTime <= specialTime.StartTime && c.EndTime > specialTime.StartTime);

                    if (existStartTime != null)
                    {
                        SaveErrorMessage(Resources.PRD.SpecialTime.Errors_StartDateExistInRange, new string[] { existStartTime.StartTime.ToString(), existStartTime.EndTime.ToString() });
                    }
                    else
                    {
                        var existEndTime = specialTimes.FirstOrDefault(c => c.StartTime < specialTime.EndTime && c.EndTime >= specialTime.EndTime);
                        if (existEndTime != null)
                        {
                            SaveErrorMessage(Resources.PRD.SpecialTime.Errors_EndDateExistInRange, new string[] { existEndTime.StartTime.ToString(), existEndTime.EndTime.ToString() });
                        }
                        else
                        {
                            var coverdSpecialTime = specialTimes.FirstOrDefault(c => c.StartTime > specialTime.StartTime && c.EndTime < specialTime.EndTime);
                            if (coverdSpecialTime != null)
                            {
                                SaveErrorMessage(Resources.PRD.SpecialTime.Errors_CoverTheProdLine, new string[] { coverdSpecialTime.StartTime.ToString(), coverdSpecialTime.EndTime.ToString() });
                            }
                            else
                            {
                                specialTime.Type = WorkingCalendarType.Rest;
                                specialTime.Category = WorkingCalendarCategory.ProdLine;
                                //base.genericMgr.Create(specialTime);
                                try
                                {
                                    this.workingCalendarMgr.AddProdLineSpecialTime(specialTime);
                                    SaveSuccessMessage(Resources.PRD.SpecialTime.SpecialTime_Added);
                                    return RedirectToAction("Edit/" + specialTime.Id);
                                }
                                catch (BusinessException ex)
                                {
                                    SaveBusinessExceptionMessage(ex);
                                }
                                catch (Exception ex)
                                {
                                    SaveErrorMessage(ex);
                                }
                            }
                        }
                    }
                }
            }

            return View(specialTime);
        }
        public ActionResult WorkEdit(SpecialTime specialTime)
        {
            if (ModelState.IsValid)
            {
                if (DateTime.Compare(specialTime.EndTime, specialTime.StartTime) < 1)
                {
                    SaveErrorMessage(Resources.PRD.SpecialTime.Errors_StartDateGreaterThanEndDate);
                }
                else
                {
                    var specialTimes = base.genericMgr.FindAll<SpecialTime>(selectspecialTimeByRegionStatement, new object[] { specialTime.Region ?? string.Empty });
                    var existStartTime = specialTimes.FirstOrDefault(c => c.StartTime <= specialTime.StartTime && c.EndTime > specialTime.StartTime && c.Id != specialTime.Id);

                    if (existStartTime != null)
                    {
                        SaveErrorMessage(Resources.PRD.SpecialTime.Errors_StartDateExistInRange, new string[] { existStartTime.StartTime.ToString(), existStartTime.EndTime.ToString() });
                    }
                    else
                    {
                        var existEndTime = specialTimes.FirstOrDefault(c => c.StartTime < specialTime.EndTime && c.EndTime >= specialTime.EndTime && c.Id != specialTime.Id);
                        if (existEndTime != null)
                        {
                            SaveErrorMessage(Resources.PRD.SpecialTime.Errors_EndDateExistInRange,
                                             new string[] { existEndTime.StartTime.ToString(), existEndTime.EndTime.ToString() });
                        }
                        else
                        {
                            var coverdSpecialTime = specialTimes.FirstOrDefault(c => c.StartTime > specialTime.StartTime && c.EndTime < specialTime.EndTime && c.Id != specialTime.Id);
                            if (coverdSpecialTime != null)
                            {
                                SaveErrorMessage(Resources.PRD.SpecialTime.Errors_CoverTheRegion,
                                                 new string[]
                                                     {
                                                         coverdSpecialTime.StartTime.ToString(),
                                                         coverdSpecialTime.EndTime.ToString()
                                                     });
                            }
                            else
                            {
                                try
                                {
                                    specialTime.Type = WorkingCalendarType.Work;
                                    specialTime.Category = WorkingCalendarCategory.Region;
                                    base.genericMgr.Update(specialTime);
                                    //this.workingCalendarMgr.UpdateSpecialTime(specialTime);
                                    SaveSuccessMessage("加班时间更新成功。");
                                }
                                catch (BusinessException ex)
                                {
                                    SaveErrorMessage(ex.Message);
                                }
                            }
                        }
                    }
                }
            }

            return View(specialTime);
        }