Exemplo n.º 1
0
        public bool check7Shift(PersonalShift personalShift, DateTime mStartDate, DateTime mEndDate, bool isCheck8PeriodWork, out string errMsg)//檢查是否連七
        {
            errMsg = "";
            List <WorkDay> workDays             = personalShift.WorkDays.OrderBy(e => e.workDay).ToList();
            int            countineWorkDayCount = 0;



            foreach (WorkDay workDay in workDays)
            {
                if (workDay.Shift.IndexOf("Z") < 0 && workDay.Shift != "")
                {
                    countineWorkDayCount++;
                }
                else
                {
                    countineWorkDayCount = 0;
                }

                if (countineWorkDayCount >= 7)
                {
                    errMsg = personalShift.UserName + "(" + personalShift.UserId + ") 於" + workDay.workDay.ToString("yyyy/MM/dd") + " 連續上班七天,請檢查!";
                    return(false);
                }
            }



            return(true);
        }
Exemplo n.º 2
0
        public bool check11Shift(PersonalShift personalShift, DateTime mStartDate, DateTime mEndDate, bool isCheck8PeriodWork, out string errMsg) //檢查是否間隔11小時
        {
            errMsg = "";
            List <WorkDay> workDays             = personalShift.WorkDays.OrderBy(e => e.workDay).ToList();
            int            countineWorkDayCount = 0;

            for (int i = 0; i < workDays.Count - 1; i++) //檢查是否間隔11小時
            {
                ConflictShiftModel conflictShiftModel = conflictShiftModels.Where(e => e.Shift == workDays[i].Shift).FirstOrDefault();
                if (conflictShiftModel != null)
                {
                    if (conflictShiftModel.ConflictShift.Contains(workDays[i + 1].Shift))
                    {
                        errMsg = personalShift.UserName + "(" + personalShift.UserId + ") 日期:" + workDays[i].workDay.ToString("yyyy/MM/dd") + "與" + workDays[i + 1].workDay.ToString("yyyy/MM/dd") + " 無間隔11小時,請檢查!";
                        return(false);
                    }
                }
            }



            return(true);
        }
Exemplo n.º 3
0
        public bool check8Shift(PersonalShift personalShift, DateTime mStartDate, DateTime mEndDate, bool isCheck8PeriodWork, out string errMsg)
        {
            errMsg = "";
            List <WorkDay> workDays             = personalShift.WorkDays.OrderBy(e => e.workDay).ToList();
            int            countineWorkDayCount = 0;



            if (isCheck8PeriodWork)
            {
                //檢查8週變形工時
                workDays = personalShift.WorkDays.Where(e => e.workDay.CompareTo(DateTime.Parse(mStartDate.ToString("yyyy/MM/dd"))) >= 0 && e.workDay.CompareTo(DateTime.Parse(mEndDate.ToString("yyyy/MM/dd"))) <= 0).OrderBy(e => e.workDay).ToList();

                int HolidayCount = workDays.Where(e => e.Shift.Trim().ToUpper() == "Z01" || e.Shift.Trim().ToUpper() == "Z07").Count();
                if (HolidayCount != 16)
                {
                    errMsg = personalShift.UserName + "(" + personalShift.UserId + ") 違反八週變形工時規定,在週期內休假" + HolidayCount + "天,請檢查!";
                    return(false);
                }
            }


            return(true);
        }
Exemplo n.º 4
0
        public List <PersonalShift> ReadShirt(string filePath, DateTime mStartDate, DateTime mEndDate)
        {
            List <PersonalShift> personalShifts = new List <PersonalShift>();

            FileStream fs = File.OpenRead(filePath);

            string extension = Path.GetExtension(filePath);

            int startRowIndex    = 4;
            int startColumnIndex = 1;

            DateTime currentMonth = DateTime.Parse(DateTime.Now.Year + "/" + mStartDate.Month.ToString("00") + "/01");
            DateTime endMonth     = DateTime.Parse(DateTime.Now.Year + "/" + mEndDate.AddMonths(1).Month.ToString("00") + "/01");

            int dayInMonth = 0;

            if (extension.Equals(".xls"))
            {
                //把xls文件中的數據寫入wk中
                wk = new HSSFWorkbook(fs);
            }
            else
            {
                //把xlsx文件中的數據寫入wk中
                wk = new XSSFWorkbook(fs);
            }

            fs.Close();

            ISheet sheet = null;

            IRow row = null;

            for (int sheetIndex = 0; currentMonth < endMonth; sheetIndex++)
            {
                sheet      = wk.GetSheetAt(sheetIndex);
                dayInMonth = DateTime.DaysInMonth(currentMonth.Year, currentMonth.Month);

                if (currentMonth != endMonth.AddMonths(-1))
                {
                    //讀取實際班表
                    for (int i = 1; i < sheet.LastRowNum; i++)
                    {
                        row = sheet.GetRow(i);
                        if (row == null || row.Cells.Count == 0)
                        {
                            continue;
                        }
                        if (row.GetCell(0).ToString() == "")
                        {
                            continue;
                        }

                        if (personalShifts.Where(e => e.UserId == row.GetCell(0).ToString().Trim()).Count() == 0)
                        {
                            PersonalShift personalShift = new PersonalShift
                            {
                                UserId   = row.GetCell(0).ToString().Trim(),
                                UserName = row.GetCell(1).ToString(),
                                WorkDays = new List <WorkDay>()
                            };

                            personalShift.WorkDays.Add(new WorkDay
                            {
                                workDay = DateTime.Parse(DateTimeExtensions.FromTaiwanDate(row.GetCell(3).ToString().Replace(replaceString.Where(e => row.GetCell(3).ToString().Contains(e)).Single(), ""))),
                                Shift   = row.GetCell(2).ToString()
                            });

                            personalShifts.Add(personalShift);
                        }
                        else
                        {
                            PersonalShift personalShift = personalShifts.Where(e => e.UserId == row.GetCell(0).ToString()).Single();
                            if (personalShift != null)
                            {
                                personalShift.WorkDays.Add(new WorkDay
                                {
                                    workDay = DateTime.Parse(DateTimeExtensions.FromTaiwanDate(row.GetCell(3).ToString().Replace(replaceString.Where(e => row.GetCell(3).ToString().Contains(e)).Single(), ""))),
                                    Shift   = row.GetCell(2).ToString()
                                });
                            }
                        }
                    }
                }
                else
                {
                    //讀取預排班表
                    for (int i = startRowIndex; i < sheet.LastRowNum; i++)
                    {
                        row = sheet.GetRow(i);
                        if (row == null || row.Cells.Count == 0)
                        {
                            continue;
                        }
                        for (int j = startColumnIndex; j < startColumnIndex + dayInMonth + 2; j++)
                        {
                            if (j == 1)
                            {
                                if (row.GetCell(startColumnIndex) == null)
                                {
                                    break;
                                }

                                if (personalShifts.Where(e => e.UserId == row.GetCell(startColumnIndex).ToString()).Count() == 0)
                                {
                                    personalShifts.Add(new PersonalShift
                                    {
                                        UserId   = row.GetCell(j).ToString(),
                                        UserName = row.GetCell(j + 1).ToString(),
                                        WorkDays = new List <WorkDay>()
                                    });
                                }

                                j += 1;
                            }
                            else
                            {
                                PersonalShift personalShift = personalShifts.Where(e => e.UserId == row.GetCell(startColumnIndex).ToString()).Single();
                                if (personalShift != null)
                                {
                                    personalShift.WorkDays.Add(new WorkDay
                                    {
                                        workDay = DateTime.Parse(currentMonth.ToString("yyyy/MM/") + (j - 2).ToString("00")),
                                        Shift   = row.GetCell(j).ToString()
                                    });
                                }
                            }
                        }
                    }
                }

                currentMonth = currentMonth.AddMonths(1);
            }

            return(personalShifts);
        }