public UnitOfWork(Context context) { _context = context; Appointments = new AppointmentRepository(_context); Calendars = new CalendarRepository(_context); Categories = new CategoryRepository(_context); DaysOff = new DayOffRepository(_context); Experts = new ExpertRepository(_context); Reviews = new ReviewRepository(_context); Tags = new TagRepository(_context); Users = new UserRepository(_context); WorkDays = new WorkDayRepository(_context); CalendarAppointments = new CalendarAppointmentRepository(_context); UserTags = new UserTagRepository(_context); ExpertTags = new ExpertTagRepository(_context); MainFieldTags = new MainFieldTagRepository(_context); UserFavorites = new UserFavoritesRepository(_context); }
protected void InitializeMocks() { // DB context DbContextMock.ShouldThrowException = false; DbContextMock.SaveChangesResult = 1; _dbContextMock = DbContextMock.SetupDbContext <IApplicationDbContext>(); _dbContext = _dbContextMock.Object; // Utils _dateTimeUtil = new DateTimeUtilMock(); // Repositories BaseMock.ShouldThrowException = false; _teamsRepositoryMock = TeamsRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _teamsRepository = _teamsRepositoryMock.Object; _positionsRepositoryMock = PositionsRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _positionsRepository = _positionsRepositoryMock.Object; _dayOffRepositoryMock = DayOffsRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _dayOffRepository = _dayOffRepositoryMock.Object; _holidaysRepositoryMock = HolidaysRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _holidaysRepository = _holidaysRepositoryMock.Object; _motivationModificatorRepositoryMock = MotivationModificatorRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _motivationModificatorRepository = _motivationModificatorRepositoryMock.Object; _otherPaymentsRepositoryMock = OtherPaymentsRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _otherPaymentsRepository = _otherPaymentsRepositoryMock.Object; _peopleRepositoryMock = PeopleRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _peopleRepository = _peopleRepositoryMock.Object; _staffRepositoryMock = StaffRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _staffRepository = _staffRepositoryMock.Object; _roadMapRepositoryMock = RoadMapRepositoryMock.SetupMock(_dbContext, _dateTimeUtil); _roadMapRepository = _roadMapRepositoryMock.Object; }
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 }