Example #1
0
        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();
        }
Example #2
0
        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, "خطا در دریافت اطلاعات تایم شیت"));
            }
        }
Example #3
0
        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, "خطا در ثبت قانون جدید"));
            }
        }