Ejemplo n.º 1
0
        private bool CreateEntriesWithSplitHours(CreateProjectEntryModel newEntry)
        {
            var result    = false;
            var startDate = newEntry.StartDate;
            var endDate   = newEntry.EndDate;

            var days = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
                       .Select(offset => startDate.AddDays(offset))
                       .ToList();

            var hoursPerDay    = newEntry.EntryHours / days.Count;
            var remainderHours = newEntry.EntryHours - (hoursPerDay * days.Count);

            foreach (var day in days)
            {
                var paddedHoursPerDay = 0;

                if (day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday)
                {
                    days.Remove(day);
                }

                if (remainderHours != 0)
                {
                    paddedHoursPerDay = hoursPerDay + 1;
                    remainderHours--;
                }
                else
                {
                    paddedHoursPerDay = hoursPerDay;
                }

                newEntry.EntryHours = paddedHoursPerDay;

                if (newEntry.EntryHours != 0)
                {
                    var DbProjectEntry = CreateProjectEntry(day, newEntry);
                    if (DbProjectEntry.DateCreated == DateTime.Today.Date)
                    {
                        DbProjectEntry.DateCreated = DbProjectEntry.
                                                     DateCreated.Add(DateTime.Now.TimeOfDay);
                    }

                    result = _projectEntryRepository.PostProjectEntry(DbProjectEntry);
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        private ProjectEntry CreateProjectEntry(DateTime day, CreateProjectEntryModel newEntry)
        {
            var newDbEntry = new ProjectEntry();

            newDbEntry.ProjectEntryID = Guid.NewGuid();
            newDbEntry.CreatedBy      = newEntry.CreatedBy;
            newDbEntry.DateCreated    = day;
            newDbEntry.ProjectID      = Guid.Parse(newEntry.SelectProject);
            newDbEntry.ChangeListNo   = newEntry.ChangeListNo ??
                                        newDbEntry.ProjectEntryID.ToString().Substring(0, _maxCharacters);
            newDbEntry.Hours          = newEntry.EntryHours;
            newDbEntry.Description    = newEntry.Description ?? string.Empty;
            newDbEntry.ModifiedBy     = newEntry.CreatedBy;
            newDbEntry.ModifiedDate   = day;
            newDbEntry.SREDCategoryID = newEntry.SelectCategory == null ?
                                        null : (Guid?)Guid.Parse(newEntry.SelectCategory);

            return(newDbEntry);
        }
Ejemplo n.º 3
0
        private bool checkHoursForWeek(DateTime day, CreateProjectEntryModel newEntry)
        {
            var entries = _context.ProjectEntries.Where(entry =>
                                                        entry.Employee.EmployeeID == newEntry.CreatedBy);

            var baseDate = new DateTime(day.Year,
                                        day.Month,
                                        day.Day,
                                        0, 0, 0);
            var startOfWeek = baseDate.AddDays(-(int)baseDate.DayOfWeek);
            var endOfWeek   = startOfWeek.AddDays(7).AddSeconds(-1);

            var loggedHours = entries.Where(entry =>
                                            entry.DateCreated >= startOfWeek &&
                                            entry.DateCreated <= endOfWeek).
                              AsEnumerable().
                              Sum(entry => entry.Hours);

            return((loggedHours + newEntry.EntryHours) <= _maxWeekHours);
        }
Ejemplo n.º 4
0
        private bool RepeatPostProjectEntry(List <DateTime> days,
                                            DayOfWeek dayOfWeek,
                                            CreateProjectEntryModel newEntry)
        {
            ProjectEntry DbEntry;
            var          specificDays = days.Where(d =>
                                                   d.DayOfWeek.ToString() == dayOfWeek.ToString());

            foreach (DateTime day in specificDays)
            {
                if (checkHoursForWeek(day, newEntry))
                {
                    DbEntry = CreateProjectEntry(day, newEntry);
                    if (!_projectEntryRepository.PostProjectEntry(DbEntry))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        public void perforceEntries(string commit, string project, string user, string timestamp, int hours, string description)
        {
            var parsedCommit = commit.Length > 8 ? commit.Substring(0, 8) : commit;
            var employees    = _context.Employees.ToList();
            var contextUser  = employees.Where(employee =>
                                               employee.Email.ToLower() == user.Trim().ToLower()).
                               FirstOrDefault();
            var projectObject = _context.Projects.Where(proj =>
                                                        proj.ProjectName == project).
                                FirstOrDefault();

            var newEntry = new CreateProjectEntryModel();

            newEntry.ChangeListNo  = parsedCommit;
            newEntry.SelectProject = projectObject.ProjectID.ToString();
            newEntry.CreatedBy     = contextUser.EmployeeID;
            newEntry.StartDate     = DateTime.Parse(timestamp);
            newEntry.EntryHours    = hours;
            newEntry.Description   = description;

            _projectEntryHandler.HandlePostProjectEntry(newEntry, true);
            _projectEntryRepository.Dispose();
        }
Ejemplo n.º 6
0
        public bool HandlePostProjectEntry(CreateProjectEntryModel newEntry, bool?externalEntry = false)
        {
            bool         result = true;
            ProjectEntry DbProjectEntry;

            if (externalEntry == true)
            {
                DbProjectEntry = CreateProjectEntry(newEntry.StartDate, newEntry);
                return(_projectEntryRepository.PostProjectEntry(DbProjectEntry));
            }

            if (!newEntry.Recurrence)
            {
                return(CreateEntriesWithSplitHours(newEntry));
            }

            var startDate = newEntry.StartDate;
            var endDate   = newEntry.EndDate;

            var days = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
                       .Select(offset => startDate.AddDays(offset))
                       .ToList();

            if (days.Count > 1)
            {
                if (newEntry.RepeatMonday)
                {
                    result = RepeatPostProjectEntry(days,
                                                    DayOfWeek.Monday,
                                                    newEntry);
                }

                if (newEntry.RepeatTuesday)
                {
                    result = RepeatPostProjectEntry(days,
                                                    DayOfWeek.Tuesday,
                                                    newEntry);
                }

                if (newEntry.RepeatWednesday)
                {
                    result = RepeatPostProjectEntry(days,
                                                    DayOfWeek.Wednesday,
                                                    newEntry);
                }

                if (newEntry.RepeatThursday)
                {
                    result = RepeatPostProjectEntry(days,
                                                    DayOfWeek.Thursday,
                                                    newEntry);
                }

                if (newEntry.RepeatFriday)
                {
                    result = RepeatPostProjectEntry(days,
                                                    DayOfWeek.Friday,
                                                    newEntry);
                }
            }
            else
            {
                if (checkHoursForWeek(newEntry.StartDate, newEntry))
                {
                    DbProjectEntry = CreateProjectEntry(newEntry.StartDate.Add(DateTime.Now.TimeOfDay), newEntry);
                    result         = _projectEntryRepository.PostProjectEntry(DbProjectEntry);
                }
            }

            return(result);
        }