public List<ShiftArrange> ApplyTemplateTo(Staff staff, DatetimeRange range)
 {
     if (Items != null && Items.Count > 0 && Items.Exists(it => it.Duration <= 0)) return null; //如果存在某个班次持续时间小于0,直接退出
     List<ShiftArrange> sas = new List<ShiftArrange>();
     if (this.Items != null && this.Items.Count > 0)
     {
         DateTime dt = range.Begin;
         while (dt <= range.End)
         {
             foreach (TemplateItem item in Items)
             {
                 int duration = 1;
                 while (duration <= item.Duration)
                 {
                     if (HolidaySetting.Current != null &&
                         HolidaySetting.Current.IsHoliday(dt) && (this.Options & TemplateOptions.HolidayShifted) == 0) //节假日不排班
                     {
                         dt = dt.AddDays(1);
                         if (item.DurationUnit == 0) duration++; //按天为单位,即使不排班也要减少次数
                     }
                     else if (HolidaySetting.Current != null &&
                         HolidaySetting.Current.IsWeekend(dt) && (this.Options & TemplateOptions.WeekendShifted) == 0)//周末不排班
                     {
                         dt = dt.AddDays(1);
                         if (item.DurationUnit == 0) duration++; //按天为单位,即使不排班也要减少次数
                     }
                     else
                     {
                         duration++;
                         if (item.Shifts != null && item.Shifts.Count > 0 && staff.HireDate.Date <= dt.Date) //考虑到员工入职日期,入职日期之前排班无意义
                         {
                             foreach (Shift shift in item.Shifts)
                             {
                                 ShiftArrange sa = new ShiftArrange();
                                 sa.StaffID = staff.ID;
                                 sa.ShiftDate = dt;
                                 sa.ShiftID = shift.ID;
                                 sa.Shift = shift;
                                 sas.Add(sa);
                             }
                         }
                         dt = dt.AddDays(1);
                     }
                     if (dt > range.End) return sas;
                 }
                 for (int i = 1; i <= item.RestDays; i++)
                 {
                     dt = dt.AddDays(1);
                     if (dt > range.End) return sas;
                 }
             }
         }
     }
     return sas;
 }
 public CommandResult Add(ShiftArrange info)
 {
     IShiftArrangeProvider provider = ProviderFactory.Create<IShiftArrangeProvider>(_RepoUri);
     ShiftArrangeID id = new ShiftArrangeID(info.StaffID, info.ShiftID, info.ShiftDate);
     ShiftArrange item = provider.GetByID(id).QueryObject;
     if (item == null)
     {
         IUnitWork unitWork = ProviderFactory.Create<IUnitWork>(_RepoUri);
         provider.Insert(info, unitWork);
         return unitWork.Commit();
     }
     else //如果已经存在则直接返回
     {
         return new CommandResult(ResultCode.Successful, ResultCodeDecription.GetDescription(ResultCode.Successful));
     }
 }
        private List <AttendanceResult> CreateAttendanceResult(Staff staff, ShiftArrange item)
        {
            List <AttendanceResult> items = new List <AttendanceResult>();

            if (item.Shift != null && item.Shift.Items != null && item.Shift.Items.Count > 0)
            {
                foreach (ShiftItem si in item.Shift.Items)
                {
                    AttendanceResult st = new AttendanceResult();
                    st.ID        = Guid.NewGuid();
                    st.StaffID   = staff.ID;
                    st.StaffName = staff.Name;
                    st.ShiftDate = item.ShiftDate;
                    st.ShiftID   = item.ShiftID;
                    st.ShiftName = item.Shift.Name;
                    MyTime mt = si.StartTime;
                    st.StartTime     = item.ShiftDate.AddHours(mt.Hour).AddMinutes(mt.Minute).AddSeconds(mt.Second);
                    st.NewStartTime  = st.StartTime;
                    st.LogWhenArrive = si.LogAtStart;
                    mt         = si.EndTime;
                    st.EndTime = item.ShiftDate.AddHours(mt.Hour).AddMinutes(mt.Minute).AddSeconds(mt.Second);
                    if (si.NextDay)
                    {
                        st.EndTime = st.EndTime.AddDays(1);
                    }
                    st.NewEndTime          = st.EndTime;
                    st.LogWhenLeave        = si.LogAtEnd;
                    st.ShiftTime           = si.Duration; //设置班次时段的上班时间
                    st.Present             = si.Duration;
                    st.EarlyestTime        = st.NewStartTime.AddMinutes((int)-si.BeforeStartTime);
                    st.LatestTime          = st.NewEndTime.AddMinutes((int)si.AfterEndTime);
                    st.AllowLateTime       = si.AllowLateTime;
                    st.AllowLeaveEarlyTime = si.AllowLeaveEarlyTime;
                    st.AbsentItems         = new List <AbsentItem>();

                    st.LogWhenArrive    = true;
                    st.LogWhenLeave     = true;
                    st.EnableLate       = true;
                    st.EnableLeaveEarly = true;
                    st.EnableAbsent     = true;
                    items.Add(st);
                }
            }
            return(items);
        }
 private List<ShiftArrange> GetShiftArranges()
 {
     List<ShiftArrange> items = new List<ShiftArrange>();
     DateTime dt = dtBegin.Value;
     while (dt <= dtEnd.Value)
     {
         if (HolidaySetting.Current != null && HolidaySetting.Current.IsHoliday(dt) && chkHolidayShifted.Checked) //节假日不排班
         {
             continue;
         }
         if ((dt.DayOfWeek == DayOfWeek.Monday && chkMonday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Tuesday && chkTuesday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Wednesday && chkWednesday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Thursday && chkThursday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Friday && chkFriday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Saturday && chkSaturday.Checked) ||
             (dt.DayOfWeek == DayOfWeek.Sunday && chkSunday.Checked) ||
             ((dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) && chkWeekendToWorkdayShifted.Checked && !HolidaySetting.Current.IsWeekend(dt)) //
             )
         {
             if (SourceShifts != null && SourceShifts.Count > 0)
             {
                 foreach (Shift s in SourceShifts)
                 {
                     ShiftArrange sa = new ShiftArrange()
                     {
                         StaffID = Staff.ID,
                         ShiftDate = dt,
                         ShiftID = s.ID,
                         Shift = s
                     };
                     items.Add(sa);
                 }
             }
         }
         dt = dt.AddDays(1);
     }
     return items;
 }
 private void mnu_Clear_Click(object sender, EventArgs e)
 {
     List<ShiftArrange> sas = new List<ShiftArrange>();
     foreach (DataGridViewCell cell in GridView.SelectedCells)
     {
         if (cell.Tag is List<Shift>) //人员排班的单元格
         {
             DateTime dt = Convert.ToDateTime(GridView.Columns[cell.ColumnIndex].Tag);
             Staff staff = GridView.Rows[cell.RowIndex].Tag as Staff;
             List<Shift> shifts = cell.Tag as List<Shift>;
             foreach (Shift shift in shifts)
             {
                 ShiftArrange sa = new ShiftArrange();
                 sa.StaffID = staff.ID;
                 sa.ShiftDate = dt;
                 sa.ShiftID = shift.ID;
                 sa.Shift = shift;
                 sas.Add(sa);
             }
         }
     }
     ShiftArrangeBLL bll = new ShiftArrangeBLL(AppSettings.CurrentSetting.ConnectUri);
     CommandResult ret = bll.Delete(sas);
     btnFresh_Click(btnFresh, EventArgs.Empty);
 }
        private List<AttendanceResult> CreateAttendanceResult(Staff staff, ShiftArrange item)
        {
            List<AttendanceResult> items = new List<AttendanceResult>();
            if (item.Shift != null && item.Shift.Items != null && item.Shift.Items.Count > 0)
            {
                foreach (ShiftItem si in item.Shift.Items)
                {
                    AttendanceResult st = new AttendanceResult();
                    st.ID = Guid.NewGuid();
                    st.StaffID = staff.ID;
                    st.StaffName = staff.Name;
                    st.ShiftDate = item.ShiftDate;
                    st.ShiftID = item.ShiftID;
                    st.ShiftName = item.Shift.Name;
                    MyTime mt = si.StartTime;
                    st.StartTime = item.ShiftDate.AddHours(mt.Hour).AddMinutes(mt.Minute).AddSeconds(mt.Second);
                    st.NewStartTime = st.StartTime;
                    st.LogWhenArrive = si.LogAtStart;
                    mt = si.EndTime;
                    st.EndTime = item.ShiftDate.AddHours(mt.Hour).AddMinutes(mt.Minute).AddSeconds(mt.Second);
                    if (si.NextDay) st.EndTime = st.EndTime.AddDays(1);
                    st.NewEndTime = st.EndTime;
                    st.LogWhenLeave = si.LogAtEnd;
                    st.ShiftTime = si.Duration; //设置班次时段的上班时间
                    st.Present = si.Duration;
                    st.EarlyestTime = st.NewStartTime.AddMinutes((int)-si.BeforeStartTime);
                    st.LatestTime = st.NewEndTime.AddMinutes((int)si.AfterEndTime);
                    st.AllowLateTime = si.AllowLateTime;
                    st.AllowLeaveEarlyTime = si.AllowLeaveEarlyTime;
                    st.AbsentItems = new List<AbsentItem>();

                    st.LogWhenArrive = true;
                    st.LogWhenLeave = true;
                    st.EnableLate = true;
                    st.EnableLeaveEarly = true;
                    st.EnableAbsent = true;
                    items.Add(st);
                }
            }
            return items;
        }
Example #7
0
        public List <ShiftArrange> ApplyTemplateTo(Staff staff, DatetimeRange range)
        {
            if (Items != null && Items.Count > 0 && Items.Exists(it => it.Duration <= 0))
            {
                return(null);                                                                          //如果存在某个班次持续时间小于0,直接退出
            }
            List <ShiftArrange> sas = new List <ShiftArrange>();

            if (this.Items != null && this.Items.Count > 0)
            {
                DateTime dt = range.Begin;
                while (dt <= range.End)
                {
                    foreach (TemplateItem item in Items)
                    {
                        int duration = 1;
                        while (duration <= item.Duration)
                        {
                            if (HolidaySetting.Current != null &&
                                HolidaySetting.Current.IsHoliday(dt) && (this.Options & TemplateOptions.HolidayShifted) == 0) //节假日不排班
                            {
                                dt = dt.AddDays(1);
                                if (item.DurationUnit == 0)
                                {
                                    duration++;                         //按天为单位,即使不排班也要减少次数
                                }
                            }
                            else if (HolidaySetting.Current != null &&
                                     HolidaySetting.Current.IsWeekend(dt) && (this.Options & TemplateOptions.WeekendShifted) == 0)//周末不排班
                            {
                                dt = dt.AddDays(1);
                                if (item.DurationUnit == 0)
                                {
                                    duration++;                         //按天为单位,即使不排班也要减少次数
                                }
                            }
                            else
                            {
                                duration++;
                                if (item.Shifts != null && item.Shifts.Count > 0 && staff.HireDate.Date <= dt.Date) //考虑到员工入职日期,入职日期之前排班无意义
                                {
                                    foreach (Shift shift in item.Shifts)
                                    {
                                        ShiftArrange sa = new ShiftArrange();
                                        sa.StaffID   = staff.ID;
                                        sa.ShiftDate = dt;
                                        sa.ShiftID   = shift.ID;
                                        sa.Shift     = shift;
                                        sas.Add(sa);
                                    }
                                }
                                dt = dt.AddDays(1);
                            }
                            if (dt > range.End)
                            {
                                return(sas);
                            }
                        }
                        for (int i = 1; i <= item.RestDays; i++)
                        {
                            dt = dt.AddDays(1);
                            if (dt > range.End)
                            {
                                return(sas);
                            }
                        }
                    }
                }
            }
            return(sas);
        }
 public CommandResult Delete(ShiftArrange info)
 {
     return ProviderFactory.Create<IShiftArrangeProvider>(_RepoUri).Delete(info);
 }