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);
        }
Exemple #2
0
        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
        }