private void createPolicyForUser(Guid currentUserId) { //default policy must check maybe is deactivated //if isnot created, must create and today is open beacuase friday is checked in query //اگر زمانش گذشته باید تمدید بشه که با تاریخ های امروز یکسان بشه var userDefaultPolicy = this.DBContext.TimesheetPolicies.FirstOrDefault(p => p.IsDefault && p.UserId == currentUserId); var timeSheetConfig = this.DBContext.TimeSheetConfig.FirstOrDefault(); if (timeSheetConfig == null) { timeSheetConfig = new TimeSheetConfig() { DefualtOpenTimeSheetWeeks = 1, TimeSheetLockDate = DateTime.Today }; this.DBContext.TimeSheetConfig.Add(timeSheetConfig); } if (userDefaultPolicy == null) { userDefaultPolicy = new TimesheetPolicy() { Id = Guid.NewGuid(), IsDefault = true, isDeactivated = false, IsOpen = true, UserMustHasHozoor = true, UserId = currentUserId, }; this.DBContext.TimesheetPolicies.Add(userDefaultPolicy); } userDefaultPolicy.Start = DateUtility.GetWeekStartDate(timeSheetConfig.DefualtOpenTimeSheetWeeks); userDefaultPolicy.Finish = DateUtility.GetWeekEndtDate(); userDefaultPolicy.Validity = DateUtility.GetWeekEndtDate(); userDefaultPolicy.CreateDate = DateTime.Now; this.DBContext.SaveChanges(); }
public async Task <IActionResult> GetTimeSheet(string ver, Guid?userId, DateTime?fromDate, DateTime?toDate) { var isWantingApprove = userId.HasValue; try { if (!this.MainChecks(ver, out string error)) { throw new Exception(error); } DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(this._uow); User currentUser = new UserHelper().GetCurrent(this._uow, this.UserName); if (!fromDate.HasValue) { DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currentUser); if (!fromDate.HasValue) { fromDate = DateTime.Now.AddDays(-7); } if (!toDate.HasValue) { toDate = DateTime.Now; } if (displayPeriod.IsWeekly) { fromDate = DateTime.Today.StartOfWeek(DayOfWeek.Saturday); toDate = DateTime.Today.EndOfWeek(DayOfWeek.Friday); } else { toDate = fromDate.Value.AddDays(displayPeriod.NumOfDays); } } var mustCheckDefaultTimeSheetPolocy = false; var now = DateTime.Now; mustCheckDefaultTimeSheetPolocy = now >= fromDate && now <= toDate; var numberOfReset = -1; labelForReset: numberOfReset++; IQueryable <Persistance.QueryEntities.EmployeeTimeSheetFromDB> query = null; if (isWantingApprove) { query = this.DBContext.spFoundConfirmTimeSheet.FromSqlInterpolated(this.DBContext.spFoundConfirmTimeSheet_str( currentUser.ID, userId, fromDate.Value, toDate.Value )); } else { query = this.DBContext.spFoundConfirmTimeSheet.FromSqlInterpolated(this.DBContext.spFoundEmployeeTimeSheet_str( currentUser.ID, fromDate.Value, toDate.Value )); } var items = await query.ToListAsync(); var days = new string[] { "شنبه", "یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه" }; var answer = items.GroupBy(g => g.Date) .Select(gg => new vmGetTimeSheetResualt { date = gg.Key.Value, isOpen = gg.FirstOrDefault().IsOpen, mustHaveHozoor = gg.First().UserMustHasHozoor, dayTimeString = gg.FirstOrDefault().DayTimeString, date_persian = gg.First().PersianDate, day_persian = days[gg.First().DayOfWeek.Value], hozoor = gg.First().Hozoor, projects = gg.Where(p => p.Type == "Work" && p.ProjectId.HasValue) .GroupBy(p => p.ProjectId).Select(pp => new vmGetTimeSheetResualt_Project { id = pp.Key, title = pp.First().ProjectTitle, workouts = pp.Where(w => w.TaskId.HasValue) .GroupBy(w => new { w.TaskId, w.State }).Select(ww => new vmGetTimeSheetResualt_Workout { id = ww.Key.TaskId, state = ww.Key.State, title = ww.First().Title, minutes = ww.First().Minutes }).ToList() }).ToList(), others = gg.Where(p => p.Type == "Other" && p.ProjectId.HasValue) .GroupBy(p => p.State).Select(pp => new vmGetTimeSheetResualt_Project { id = pp.First().ProjectId, title = pp.Key, workouts = pp.Where(w => w.TaskId.HasValue) .GroupBy(w => w.TaskId).Select(ww => new vmGetTimeSheetResualt_Workout { id = ww.First().TaskId, state = ww.First().State, title = ww.First().Title, minutes = ww.Sum(www => www.Minutes) }).ToList() }).ToList() }).ToList(); if (mustCheckDefaultTimeSheetPolocy && !answer.First(a => a.date.Value.Date == now.Date).isOpen.HasValue) { //default policy must check maybe is deactivated //if isnot created, must create and today is open beacuase friday is checked in query //اگر زمانش گذشته باید تمدید بشه که با تاریخ های امروز یکسان بشه var userDefaultPolicy = this.DBContext.TimesheetPolicies.FirstOrDefault(p => p.IsDefault && p.UserId == currentUser.ID); if (userDefaultPolicy == null) { userDefaultPolicy = new TimesheetPolicy() { Id = Guid.NewGuid(), IsDefault = true, isDeactivated = false, IsOpen = true, UserMustHasHozoor = true, UserId = currentUser.ID, }; this.DBContext.TimesheetPolicies.Add(userDefaultPolicy); } userDefaultPolicy.Start = DateUtility.GetCompanyStartDate(); userDefaultPolicy.Finish = DateUtility.GetCompanyEndDate(); userDefaultPolicy.Validity = DateUtility.GetCompanyEndDate(); userDefaultPolicy.CreateDate = DateTime.Now; this.DBContext.SaveChanges(); if (numberOfReset < 1) { goto labelForReset; } } return(Ok(answer)); } catch (Exception ex) { return(this.ReturnError(ex, "خطا در دریافت اطلاعات تایم شیت")); } }
public IActionResult SaveEditPolicy(vmTimesheetPolicy request) { try { if (request == null) { throw new Exception("اطلاعات ارسال نشده است"); } if (string.IsNullOrEmpty(request.start)) { throw new Exception("تاریخ شروع باید وارد شده باشد"); } if (string.IsNullOrEmpty(request.finish)) { throw new Exception("تاریخ پایان باید وارد شده باشد"); } if (string.IsNullOrEmpty(request.validity)) { throw new Exception("تاریخ اعتبار باید وارد شده باشد"); } if (!request.userId.HasValue) { throw new Exception("انتخاب کاربر ضروری است"); } TimesheetPolicy policy = null; if (request.id == Guid.Empty) { policy = new TimesheetPolicy() { Id = Guid.NewGuid(), IsDefault = false }; this.DBContext.TimesheetPolicies.Add(policy); } else { policy = this.DBContext.TimesheetPolicies.FirstOrDefault(p => p.Id == request.id); if (policy == null) { throw new Exception("قانون با آی دی خواسته شده یافت نشد"); } } policy.CreateDate = DateTime.Now; policy.isDeactivated = request.isDeactivated; policy.UserMustHasHozoor = request.userMustHasHozoor; policy.IsOpen = request.isOpen; if (policy.IsDefault) { this.DBContext.SaveChanges(); return(Ok(true));//قانون اصلی را فقط می توان غیر فعال کرد } policy.Start = DateUtility.GetMiladiDate(request.start); policy.Finish = DateUtility.GetMiladiDate(request.finish); policy.Validity = DateUtility.GetMiladiDate(request.validity); if (policy.Start > policy.Finish) { throw new Exception("تاریخ شروع نمی تواند بزرگتر از تاریخ پایان باشد"); } if (policy.Validity.Date < DateTime.Now.Date) { throw new Exception("تاریخ اعتبار نمی تواند کوچکتر از امروز باشد"); } policy.UserId = request.userId; this.DBContext.SaveChanges(); return(Ok(true)); } catch (Exception ex) { return(this.ReturnError(ex, "خطا در ثبت قانون جدید")); } }