public ScheduleRepository(string connectionString) { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ScheduleContext, Configuration>()); Auditoriums = new AuditoriumsRepository(); Buildings = new BuildingsRepository(); Calendars = new CalendarsRepository(); Disciplines = new DisciplinesRepository(); DisciplineNames = new DisciplineNameRepository(); Lessons = new LessonsRepository(this); Rings = new RingsRepository(); Students = new StudentsRepository(); StudentGroups = new StudentGroupsRepository(); StudentsInGroups = new StudentsInGroupsRepository(); Teachers = new TeachersRepository(); TeacherForDisciplines = new TeacherForDisciplinesRepository(); ConfigOptions = new ConfigOptionRepository(); AuditoriumEvents = new AuditoriumEventsRepository(); Faculties = new FacultiesRepository(); GroupsInFaculties = new GroupsInFacultiesRepository(); ScheduleNotes = new ScheduleNotesRepository(); LessonLogEvents = new LessonLogEventsRepository(); TeacherWishes = new TeacherWishesRepository(); CustomTeacherAttributes = new CustomTeacherAttributesRepository(); CustomDisciplineAttributes = new CustomDisciplineAttributesRepository(); CustomStudentGroupAttributes = new CustomStudentGroupAttributesRepository(); Shifts = new ShiftsRepository(); ShiftRings = new ShiftRingsRepository(); Exams = new ExamsRepository(); LogEvents = new LogEventsRepository(); CommonFunctions = new CommonFunctions(this); SetConnectionString(connectionString); }
public static void KiemTraVaTinhDuLieuChamCong(vwWorkSchedules item, WorkSchedules save_database, DateTime?HourIn, DateTime?HourOut) { StaffsRepository staffRepository = new StaffsRepository(new Domain.Staff.ErpStaffDbContext()); SymbolTimekeepingRepository symboltimekeepingRepository = new SymbolTimekeepingRepository(new Domain.Staff.ErpStaffDbContext()); DayOffRepository dayoffRepository = new DayOffRepository(new Domain.Staff.ErpStaffDbContext()); ShiftsRepository shiftsRepository = new ShiftsRepository(new Domain.Staff.ErpStaffDbContext()); CheckInOutRepository checkInOutRepository = new CheckInOutRepository(new Domain.Staff.ErpStaffDbContext()); WorkSchedulesRepository workSchedulesRepository = new WorkSchedulesRepository(new Domain.Staff.ErpStaffDbContext()); RegisterForOvertimeRepository registerForOvertimeRepository = new RegisterForOvertimeRepository(new Domain.Staff.ErpStaffDbContext()); //lấy danh sách đăng ký tăng ca có thời gian bắt đầu tăng ca nằm trong khoảng thời gian của ca làm việc. //sắp xếp theo thời gian bắt đầu tăng ca... nếu có nhiều đăng ký tăng ca cùng 1 lúc thì chỉ lấy dòng đăng ký đầu tiên. //var dkTangCa = registerForOvertimeRepository.GetAllvwRegisterForOvertime().Where(x => x.StartHour >= item.HoursIn && x.StartHour <= item.HoursOut && x.StaffId == item.StaffId).OrderBy(x => x.StartHour); #region chuyển đổi thời gian của ca làm việc từ string sang DateTime //tách chuỗi thời gian của ca làm việc string strStartTime = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTime; string strStartTimeOut = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTimeOut; string strStartTimeIn = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTimeIn; string strEndTime = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTime; string strEndTimeIn = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTimeIn; string strEndTimeOut = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTimeOut; // chuyển đổi thời gian của ca làm việc từ string sang DateTime //DateTime d = DateTime.ParseExact("08/11/2017 12:00", "dd/MM/yyyy HH:mm", null); DateTime StartTime = DateTime.ParseExact(strStartTime, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime StartTimeOut = DateTime.ParseExact(strStartTimeOut, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime StartTimeIn = DateTime.ParseExact(strStartTimeIn, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime EndTime = DateTime.ParseExact(strEndTime, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime EndTimeIn = DateTime.ParseExact(strEndTimeIn, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime EndTimeOut = DateTime.ParseExact(strEndTimeOut, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); #endregion #region //nếu thời gian kết thúc ca mà nhỏ hơn thời gian bắt đầu ca thì xác định ca đó qua đêm... cộng thêm 1 ngày vào thời gian kết thúc ca. if (StartTime > EndTime) { EndTime = EndTime.AddDays(1); } if (StartTime > EndTimeIn) { EndTimeIn = EndTimeIn.AddDays(1); } if (StartTime > EndTimeOut) { EndTimeOut = EndTimeOut.AddDays(1); } #endregion //thời gian bắt đầu tính tăng ca int setting_overtime = Convert.ToInt32(Helpers.Common.GetSetting("time_starts_counting_overtime")); DateTime DateOverTime = EndTime.AddMinutes(setting_overtime); if (HourIn.Value != null) { save_database.HoursIn = HourIn; #region //nếu thời gian vào của nhân viên lớn hơn thời gian của ca làm việc thì tính thời gian đi trễ if (save_database.HoursIn > StartTime) { //tính số phút đi trễ TimeSpan a = save_database.HoursIn.Value.Subtract(StartTime); //trừ đi số giờ đi trễ cho phép. var q = Convert.ToInt32(a.TotalMinutes) - item.MinuteLate; //cập nhật số giờ đi trễ if (q > 0) { //đi trễ save_database.Total_minute_work_late = q; } else { //đi đúng giờ save_database.Total_minute_work_late = 0; } } else { //đi đúng giờ save_database.Total_minute_work_late = 0; } #endregion } else { //để đây xử lý sau, cho=0 để ko bị lỗi... còn trường hợp nghỉ phép nữa save_database.Total_minute_work_late = 0; } //var HourOut = listcheckinout.Where(xx => xx.TimeStr > EndTimeIn && xx.TimeDate.Value.ToString("dd/MM/yyyy") == EndTime.ToString("dd/MM/yyyy") && xx.UserId == item.UserEnrollNumber).OrderByDescending(xx => xx.TimeStr).ToList(); if (HourOut != null) { save_database.HoursOut = HourOut; } if (save_database.HoursOut >= DateOverTime) { #region tăng ca TimeSpan a = save_database.HoursOut.Value.Subtract(EndTime); save_database.Total_minute_work_overtime = Convert.ToInt32(a.TotalMinutes); #endregion } else { #region về sớm (về đúng giờ) không có tăng ca TimeSpan a = EndTime.Subtract(save_database.HoursOut.Value); var q = Convert.ToInt32(a.TotalMinutes) - item.MinuteEarly; if (q > 0) { //về sớm save_database.Total_minute_work_early = q; } else { //về đúng giờ save_database.Total_minute_work_early = 0; } save_database.Total_minute_work_overtime = 0; #endregion } #region tính số phút làm trong 1 ca if (save_database.HoursIn != null && save_database.HoursOut != null) { TimeSpan total = EndTime.Subtract(StartTime); save_database.Total_minute_work = Convert.ToInt32(total.TotalMinutes) + save_database.Total_minute_work_overtime - save_database.Total_minute_work_late - save_database.Total_minute_work_early; } #endregion #region xét ký hiệu chấm công if (save_database.Symbol == null) { //nếu chưa đi làm thì xét trường hợp có phép hoặc không phép. if (save_database.HoursIn == null && save_database.HoursOut == null) { var phep = dayoffRepository.GetAllvwDayOff().Where(x => x.DayStart <= save_database.Day && x.DayEnd >= save_database.Day && x.StaffId == save_database.StaffId); if (phep.Count() > 0) { save_database.Symbol = phep.FirstOrDefault().TypeDayOffId; } else { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("K").Id; } } //nếu chỉ có giờ ra thì lưu ký hiệu đi làm chưa có else if (save_database.HoursIn == null) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("DLo").Id; save_database.Total_minute_work = 0; save_database.Total_minute_work_early = 0; save_database.Total_minute_work_late = 0; save_database.Total_minute_work_overtime = 0; } //nếu chỉ có giờ vào thì lưu ký hiệu chưa có giờ vào. else if (save_database.HoursOut == null) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("DVo").Id; save_database.Total_minute_work = 0; save_database.Total_minute_work_early = 0; save_database.Total_minute_work_late = 0; save_database.Total_minute_work_overtime = 0; } else { //nếu có đi làm thì xét trường hợp đi trễ, về sớm, đi đúng giờ, tăng ca if (save_database.Total_minute_work_late == 0 && save_database.Total_minute_work_early == 0) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("X").Id; } else if (save_database.Total_minute_work_late > 0 && save_database.Total_minute_work_early > 0) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Tr,Sm").Id; } else if (save_database.Total_minute_work_late > 0) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Tr").Id; } else if (save_database.Total_minute_work_early > 0) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Sm").Id; } if (save_database.Total_minute_work_overtime > 0) { save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("+").Id; } } } #endregion }