public NewTimesheetEntryExtensionBase CreateTimeslip(TimeslipVM timeslipVM)
        {
            Guid userGuid = Guid.Parse(timeslipVM.UserId);
            Guid wbiGuid  = Guid.Parse(timeslipVM.WBI_Id);
            NewTimesheetEntryExtensionBase timeslip = new NewTimesheetEntryExtensionBase()
            {
                NewTimesheetEntryId = Guid.NewGuid(),
                NewRemarks          = timeslipVM.Remarks,
                CustomDayId         = timeslipVM.DayId,
                NewChangeRequestId  = wbiGuid,
                OwningUser          = userGuid,
                NewStartTask        = DateTime.Parse(timeslipVM.StartTime),
                NewEndTask          = DateTime.Parse(timeslipVM.EndTime)
            };

            TimeSpan?duration = timeslip.NewEndTask - timeslip.NewStartTask;

            int durationInHours = (int)duration?.TotalHours;

            NewChangeRequestExtensionBase wbi = _context.NewChangeRequestExtensionBase
                                                .Where(w => w.NewChangeRequestId == timeslip.NewChangeRequestId)
                                                .FirstOrDefault();

            wbi.NewActualHours += durationInHours;

            if (wbi.NewActualHours > wbi.NewEstimatedHours)
            {
                throw new ArgumentException("Alloted hours for this WBI has been maxed out.");
            }
            // a.start <= b.end && a.end >= b.start

            var date     = Convert.ToDateTime(timeslip.NewStartTask);
            var sameDate = date.Date;

            foreach (var item in _context.NewTimesheetEntryExtensionBase
                     .Where(u => Convert.ToDateTime(u.NewStartTask).Date == sameDate &&
                            u.OwningUser == userGuid))
            {
                if (item.NewTimesheetEntryId != timeslip.NewTimesheetEntryId)
                {
                    if (item.NewStartTask < timeslip.NewEndTask && item.NewEndTask > timeslip.NewStartTask)
                    {
                        throw new ArgumentException("Times cannot overlap");
                    }
                }
            }
            _context.NewTimesheetEntryExtensionBase.Add(timeslip);
            _context.SaveChanges();

            return(timeslip);
        }
Esempio n. 2
0
        public NewChangeRequestExtensionBase CreateWBI(WBIVM wbiVM)
        {
            Guid projectGuid = Guid.Parse(wbiVM.ProjectId);
            NewChangeRequestExtensionBase wbi = new NewChangeRequestExtensionBase()
            {
                NewChangeRequestId = Guid.NewGuid(),
                NewName            = wbiVM.Description,
                NewEstimatedHours  = wbiVM.EstimatedHours,
                NewActualHours     = NewDefaultHours,
                NewProjectId       = projectGuid
            };

            _context.NewChangeRequestExtensionBase.Add(wbi);
            _context.SaveChanges();

            return(wbi);
        }
        public NewTimesheetEntryExtensionBase EditTimeslip(TimeslipVM timeslipVM)
        {
            var timeslip = GetOneTimeslip(timeslipVM.TimeslipId);

            if (timeslip == null)
            {
                return(timeslip);
            }
            else
            {
                NewChangeRequestExtensionBase wbi = _context.NewChangeRequestExtensionBase
                                                    .Where(w => w.NewChangeRequestId == timeslip.NewChangeRequestId)
                                                    .FirstOrDefault();
                TimeSpan?oldDuration        = timeslip.NewEndTask - timeslip.NewStartTask; //old timeslip's difference
                int      oldDurationInHours = (int)oldDuration?.TotalHours;

                TimeSpan?newDuration        = DateTime.Parse(timeslipVM.EndTime) - DateTime.Parse(timeslipVM.StartTime);//new timeslip's difference
                int      newDurationInHours = (int)newDuration?.TotalHours;

                if (newDurationInHours > oldDurationInHours)
                {
                    //add
                    int difference = newDurationInHours - oldDurationInHours;
                    wbi.NewActualHours = wbi.NewActualHours + difference;
                }
                else if (newDurationInHours < oldDurationInHours)
                {
                    //minus
                    int difference = oldDurationInHours - newDurationInHours;
                    wbi.NewActualHours = wbi.NewActualHours - difference;
                }

                timeslip.NewStartTask = DateTime.Parse(timeslipVM.StartTime);
                timeslip.NewEndTask   = DateTime.Parse(timeslipVM.EndTime);
                timeslip.NewRemarks   = timeslipVM.Remarks;

                _context.SaveChanges();
            }
            return(timeslip);
        }
        public bool DeleteOneTimeslip(string id)
        {
            var timeslip = GetOneTimeslip(id);

            if (timeslip == null)
            {
                return(false);
            }

            TimeSpan?duration = timeslip.NewEndTask - timeslip.NewStartTask;

            int durationInHours = (int)duration?.TotalHours;

            NewChangeRequestExtensionBase wbi = _context.NewChangeRequestExtensionBase
                                                .Where(w => w.NewChangeRequestId == timeslip.NewChangeRequestId)
                                                .FirstOrDefault();

            wbi.NewActualHours -= durationInHours;

            _context.NewTimesheetEntryExtensionBase.Remove(timeslip);
            _context.SaveChanges();
            return(true);
        }
Esempio n. 5
0
        public void SeedData()
        {
            if (_context.AccountBase.Any())
            {
                return;
            }
            var clients = new AccountBase[]
            {
                new AccountBase {
                    AccountId = Guid.NewGuid(), Name = "Calgary Flames", DeletionStateCode = 0, StateCode = 0
                },
                new AccountBase {
                    AccountId = Guid.NewGuid(), Name = "Vancouver Canucks", DeletionStateCode = 0, StateCode = 0
                },
                new AccountBase {
                    AccountId = Guid.NewGuid(), Name = "Winnipeg Jets", DeletionStateCode = 0, StateCode = 0
                }
            };

            foreach (AccountBase a in clients)
            {
                _context.AccountBase.Add(a);
            }
            _context.SaveChanges();

            if (_context.NewProjectTypeExtensionBase.Any())
            {
                return;
            }
            var projectTypes = new NewProjectTypeExtensionBase[]
            {
                new NewProjectTypeExtensionBase
                {
                    NewProjectTypeId = Guid.NewGuid(),
                    NewName          = "Sports related"
                }
            };

            foreach (NewProjectTypeExtensionBase t in projectTypes)
            {
                _context.NewProjectTypeExtensionBase.Add(t);
            }
            _context.SaveChanges();

            if (_context.NewProjectExtensionBase.Any())
            {
                return;
            }
            var projects = new NewProjectExtensionBase[]
            {
                new NewProjectExtensionBase {
                    NewProjectId     = Guid.NewGuid(),
                    NewName          = "Project Calgary",
                    NewStartDate     = new DateTime(2018, 01, 20, 01, 01, 01),
                    NewEndDate       = new DateTime(2018, 01, 30, 02, 02, 02),
                    NewAccountId     = clients.Single(c => c.Name == "Calgary Flames").AccountId,
                    NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId
                },
                new NewProjectExtensionBase {
                    NewProjectId     = Guid.NewGuid(),
                    NewName          = "Project Vancouver",
                    NewStartDate     = new DateTime(2018, 02, 20, 01, 01, 01),
                    NewEndDate       = new DateTime(2018, 02, 27, 02, 02, 02),
                    NewAccountId     = clients.Single(c => c.Name == "Vancouver Canucks").AccountId,
                    NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId
                },
                new NewProjectExtensionBase {
                    NewProjectId     = Guid.NewGuid(),
                    NewName          = "Project Winnipeg",
                    NewStartDate     = new DateTime(2018, 03, 20, 01, 01, 01),
                    NewEndDate       = new DateTime(2018, 03, 30, 02, 02, 02),
                    NewAccountId     = clients.Single(c => c.Name == "Winnipeg Jets").AccountId,
                    NewProjectTypeId = projectTypes.Single(t => t.NewName == "Sports related").NewProjectTypeId
                }
            };

            foreach (NewProjectExtensionBase p in projects)
            {
                _context.NewProjectExtensionBase.Add(p);
            }
            _context.SaveChanges();

            if (_context.NewChangeRequestExtensionBase.Any())
            {
                return;
            }
            var workBreakdownItems = new NewChangeRequestExtensionBase[]
            {
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Calgary's Finance",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 20,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Calgary").NewProjectId
                },
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Calgary's Management",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 30,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Calgary").NewProjectId
                },
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Vancouver's Finance",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 20,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Vancouver").NewProjectId
                },
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Vancouver's Management",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 30,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Vancouver").NewProjectId
                },
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Winnipeg's Finance",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 20,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Winnipeg").NewProjectId
                },
                new NewChangeRequestExtensionBase {
                    NewChangeRequestId = Guid.NewGuid(),
                    NewName            = "Winnipeg's Management",
                    NewEstimatedHours  = 999,
                    NewActualHours     = 30,
                    NewProjectId       = projects.Single(p => p.NewName == "Project Winnipeg").NewProjectId
                },
            };

            foreach (NewChangeRequestExtensionBase w in workBreakdownItems)
            {
                _context.NewChangeRequestExtensionBase.Add(w);
            }
            _context.SaveChanges();

            if (_context.Users.Any())
            {
                return;
            }
            var users = new User[]
            {
                new User {
                    UserId    = Guid.NewGuid(),
                    Email     = "*****@*****.**",
                    Password  = "******",
                    FirstName = "Bob",
                    LastName  = "Jones"
                },
                new User {
                    UserId    = Guid.NewGuid(),
                    Email     = "*****@*****.**",
                    Password  = "******",
                    FirstName = "Sally",
                    LastName  = "Smith"
                }
            };

            foreach (User u in users)
            {
                _context.Users.Add(u);
            }
            _context.SaveChanges();


            if (_context.NewTimesheetEntryExtensionBase.Any())
            {
                return;
            }
            var timeslips = new NewTimesheetEntryExtensionBase[]
            {
                new NewTimesheetEntryExtensionBase
                {
                    NewTimesheetEntryId = Guid.NewGuid(),
                    NewStartTask        = DateTime.ParseExact("2018-04-20 08:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture),
                    NewEndTask          = DateTime.ParseExact("2018-04-20 11:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture),
                    NewRemarks          = "Test Remark",
                    NewChangeRequestId  = workBreakdownItems.Single(w => w.NewName == "Calgary's Finance").NewChangeRequestId,
                    OwningUser          = users.Single(u => u.Email == "*****@*****.**").UserId
                },
                new NewTimesheetEntryExtensionBase
                {
                    NewTimesheetEntryId = Guid.NewGuid(),
                    NewStartTask        = DateTime.ParseExact("2018-04-20 13:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture),
                    NewEndTask          = DateTime.ParseExact("2018-04-20 16:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture),
                    NewRemarks          = "Test Remark two",
                    NewChangeRequestId  = workBreakdownItems.Single(w => w.NewName == "Vancouver's Finance").NewChangeRequestId,
                    OwningUser          = users.Single(u => u.Email == "*****@*****.**").UserId
                },
            };

            foreach (NewTimesheetEntryExtensionBase t in timeslips)
            {
                _context.NewTimesheetEntryExtensionBase.Add(t);
            }
            _context.SaveChanges();

            if (_context.CustomDays.Any())
            {
                return;
            }
            var customMonday = new CustomDay
            {
                CustomDayId = "aosidjf",
                Name        = "My Monday",
                Description = "This is my typical monday",
                UserId      = _context.Users.FirstOrDefault().UserId
            };

            _context.CustomDays.Add(customMonday);
            _context.SaveChanges();

            if (_context.Timeslip_Templates.Any())
            {
                return;
            }
            var timeslipTemplates = new CustomDay_WBI[]
            {
                new CustomDay_WBI
                {
                    TimeslipTemplateId = "testId1",
                    NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Calgary's Finance").NewChangeRequestId,
                    CustomDayId        = customMonday.CustomDayId,
                    StartTime          = DateTime.ParseExact("08:00", "HH:mm", CultureInfo.InvariantCulture),
                    EndTime            = DateTime.ParseExact("11:00", "HH:mm", CultureInfo.InvariantCulture),
                    Remarks            = "This is a test remark on morning timeslip template"
                },
                new CustomDay_WBI
                {
                    TimeslipTemplateId = "testId2",
                    NewChangeRequestId = workBreakdownItems.Single(w => w.NewName == "Vancouver's Finance").NewChangeRequestId,
                    CustomDayId        = customMonday.CustomDayId,
                    StartTime          = DateTime.ParseExact("13:00", "HH:mm", CultureInfo.InvariantCulture),
                    EndTime            = DateTime.ParseExact("16:00", "HH:mm", CultureInfo.InvariantCulture),
                    Remarks            = "This is a test remark on afternoon timeslip template"
                },
            };

            foreach (CustomDay_WBI c in timeslipTemplates)
            {
                _context.Timeslip_Templates.Add(c);
            }
            _context.SaveChanges();
        }