示例#1
0
        public TimeSheet Add(string userId, DateTime fromDate, DateTime toDate)
        {
            DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet()
            {
                FromDate  = fromDate,
                ToDate    = toDate,
                DateAdded = DateTime.Now,
                UserId    = userId
            };

            db.TimeSheets.Add(dbTimeSheet);

            bool saved = db.SaveChanges() == 1;

            return(saved ? _mapper.Map <TimeSheet>(dbTimeSheet) : null);
        }
示例#2
0
        public TimeSheet Add(string userId, DateTime fromDate, DateTime toDate, out string message)
        {
            message = "";

            var userTimeSheets = db.TimeSheets.Where(c => c.UserId == userId &&
                                                     ((fromDate >= c.FromDate && fromDate <= c.ToDate) ||
                                                      (toDate >= c.FromDate && toDate <= c.ToDate)))
                                 .FirstOrDefault();

            if (userTimeSheets == null)
            {
                DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet()
                {
                    FromDate  = fromDate,
                    ToDate    = toDate,
                    DateAdded = DateTime.Now,
                    UserId    = userId,
                };

                db.TimeSheets.Add(dbTimeSheet);

                if (db.SaveChanges() > 0)
                {
                    //bool addedTimeSheetStatus = AddTimeSheetStatuses(userId, dbTimeSheet.ID);

                    return(_mapper.Map <TimeSheet>(dbTimeSheet));
                    //if (addedTimeSheetStatus)
                    //else
                    //{
                    //    db.TimeSheets.Remove(dbTimeSheet);
                    //    message = "something went wrong please try again ";
                    //    return null;
                    //}
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
            else
            {
                message = $"Dates {fromDate.ToShortDateString()}/{toDate.ToShortDateString()} Fall betweeen user's timesheet dates {userTimeSheets.FromDate.ToShortDateString()}/{userTimeSheets.ToDate.ToShortDateString()}";
                return(null);
            }
        }
示例#3
0
        public TimeSheet Get(int id, out List <Project> projects, bool includeActivites = true)
        {
            projects = new List <Project>();

            DataSets.TimeSheet dbTimeSheet = null;

            if (includeActivites)
            {
                dbTimeSheet = db.TimeSheets
                              .Include(k => k.TimeSheetTasks)
                              .ThenInclude(x => x.Activities)
                              .Include(k => k.TimeSheetTasks)
                              .ThenInclude(x => x.ProjectTask)
                              .ThenInclude(x => x.Project)
                              .FirstOrDefault(k => k.ID == id);
            }
            else
            {
                dbTimeSheet = db.TimeSheets
                              .Include(k => k.TimeSheetTasks)
                              .ThenInclude(x => x.ProjectTask)
                              .ThenInclude(x => x.Project)
                              .FirstOrDefault(k => k.ID == id);
            }


            if (dbTimeSheet == null)
            {
                return(null);
            }

            foreach (var tsProject in dbTimeSheet.TimeSheetTasks)
            {
                var parent = tsProject.ProjectTask.Project;

                if (!projects.Any(k => k.ID == parent.ID))
                {
                    projects.Add(_mapper.Map <Project>(parent));
                }
            }

            return(_mapper.Map <TimeSheet>(dbTimeSheet));
        }
示例#4
0
        public async Task <TimeSheet> Save(TimeSheetSaveModel model)
        {
            IQueryable <DataSets.TimeSheet> conflictQuery = db.TimeSheets.Where(c => c.UserId == model.userId &&
                                                                                ((model.fromDate >= c.FromDate && model.fromDate <= c.ToDate) ||
                                                                                 (model.toDate >= c.FromDate && model.toDate <= c.ToDate)));

            void ensureNoConflict(DataSets.TimeSheet ts)
            {
                if (ts != null)
                {
                    throw new ClientException($"Dates {model.fromDate.ToShortDateString()}/{model.toDate.ToShortDateString()} Fall betweeen user's timesheet dates {ts.FromDate.ToShortDateString()}/{ts.ToDate.ToShortDateString()}");
                }
            }

            if (model.fromDate >= model.toDate)
            {
                throw new ClientException("from date must be before to date");
            }


            if (model.id.HasValue)
            {
                var possibleConflictTimeSheet = conflictQuery.Where(k => k.ID != model.id.Value).FirstOrDefault();

                ensureNoConflict(possibleConflictTimeSheet);

                // # save timeSheet #

                // get timeSheet

                var dbTimeSheet = db.TimeSheets.FirstOrDefault(k => k.ID == model.id.Value);

                if (dbTimeSheet == null)
                {
                    throw new ClientException("record not found");
                }

                // check activities
                var minActivity = db.TimeSheetActivities
                                  .OrderBy(k => k.FromDate)
                                  .FirstOrDefault();

                var maxActivity = db.TimeSheetActivities
                                  .OrderByDescending(k => k.FromDate)
                                  .FirstOrDefault();



                if (minActivity != null && model.fromDate > minActivity.FromDate)
                {
                    throw new ClientException($"from date should be before {minActivity.FromDate.Date.ToDisplayDate()} which is the earliest activity made on that date on the schedule");
                }


                if (maxActivity != null && model.toDate < maxActivity.FromDate)
                {
                    throw new ClientException($"to date should be after {maxActivity.FromDate.Date.ToDisplayDate()} which is the latest activity made on that date on the schedule");
                }

                // update values

                dbTimeSheet.FromDate = model.fromDate;
                dbTimeSheet.ToDate   = model.toDate;

                db.SaveChanges();


                await notificationMethods.Send(model.GetAddedByUser(), model.userId, $"schedule time was modified", NotificationType.Information, true, dbTimeSheet.ID);



                var parsed = _mapper.Map <TimeSheet>(dbTimeSheet);

                parsed.HasTasks = db.TimeSheetTasks.Any(k => k.TimeSheetId == parsed.ID);

                var addedByUser = db.Users.First(k => k.Id == dbTimeSheet.AddedByUserId);

                parsed.AddedByUserName = addedByUser.FirstName + " " + addedByUser.LastName;

                return(parsed);
            }
            else
            {
                var possibleConflictTimeSheet = conflictQuery.FirstOrDefault();

                ensureNoConflict(possibleConflictTimeSheet);

                // # new timesheet #

                DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet()
                {
                    UserId        = model.userId,
                    FromDate      = model.fromDate,
                    ToDate        = model.toDate,
                    DateAdded     = DateTime.Now,
                    AddedByUserId = model.GetAddedByUser()
                };

                // add the timeSheet
                db.TimeSheets.Add(dbTimeSheet);

                // save changes on teamstimeSheets
                db.SaveChanges();

                await notificationMethods.Send(model.GetAddedByUser(), model.userId, $"New schedule added", NotificationType.Default, true, dbTimeSheet.ID);

                var parsed = _mapper.Map <TimeSheet>(dbTimeSheet);

                var addedByUser = db.Users.First(k => k.Id == dbTimeSheet.AddedByUserId);

                parsed.AddedByUserName = addedByUser.FirstName + " " + addedByUser.LastName;

                return(parsed);
            }


            //DataSets.TimeSheet dbTimeSheet = new DataSets.TimeSheet()
            //{
            //    FromDate = fromDate,
            //    ToDate = toDate,
            //    DateAdded = DateTime.Now,
            //    UserId = userId
            //};

            //db.TimeSheets.Add(dbTimeSheet);

            //if (db.SaveChanges() > 0)
            //{
            //    return _mapper.Map<TimeSheet>(dbTimeSheet);
            //}
        }