Esempio n. 1
0
        // Rule 8) public holiday
        public void Rule8(ProjectModel project, WeekModel week, List <ActivityModel> activities, List <EmployeeInfo> EmployeesInProjectInfoInYear, List <Tuple <SlotModel, ActivityModel> > slotsActivities)
        {
            if (!_rules.Single(e => e.RuleID == 8).RuleStatus)
            {
                return;
            }
            var publicHolidays = Nager.Date.DateSystem.GetPublicHoliday(project.CountryCode, week.FirstDayOfTheWeek, week.FirstDayOfTheWeek.AddDays(6)).ToList();

            foreach (var publicHoliday in publicHolidays)
            {
                var dow = (int)publicHoliday.Date.DayOfWeek;
                var PublicHolidayActivity = activities.Where(e => e.TimeOfDay == TimeSlot.ALL_DAY && e.Name.Contains("public holiday") && e.DayOfWeek == (DaySlot)dow).Single();
                foreach (var employeeInfo in EmployeesInProjectInfoInYear)
                {
                    var s = slotsActivities.Where(e => e.Item1.ProjectID == project.ProjectID && e.Item1.ActivityID == PublicHolidayActivity.ActivityID && e.Item1.EmployeeID == '#' + employeeInfo.Employee.EmployeeID).SingleOrDefault();
                    if (s == null) // only add public holidays once - do not add again when regenerating
                    {
                        slotsActivities.Add(new Tuple <SlotModel, ActivityModel>(new SlotModel {
                            ProjectID = project.ProjectID, WeekID = week.WeekID, ActivityID = PublicHolidayActivity.ActivityID, EmployeeID = employeeInfo.Employee.EmployeeID
                        }, PublicHolidayActivity));
                    }
                    else if (s.Item1.EmployeeID.Substring(0, 1).Equals("#"))
                    {
                        s.Item1.EmployeeID = s.Item1.EmployeeID.Substring(1); // remove # symbol
                    }
                    employeeInfo.WorkHourStats.WeekSum += PublicHolidayActivity.Hours;
                }
            }
        }
Esempio n. 2
0
        public ActionResult Weeks()
        {
            ViewBag.AllowDuplicates = ConfigurationManager.AppSettings["AllowDuplicate"] == "1";
            WeeksModel model = new WeeksModel();

            //Get the previous 5 weeks worth
            for (int i = 0; i < 5; i++)
            {
                Tuple <DateTime, DateTime> dates = Utilities.GetWeekStartEndDates(_EndDay, DateTime.Today.AddDays(i * -7));

                using (TimeLineDB db = new TimeLineDB())
                {
                    List <TimeLineModel> lines = db.TimeLines.Where(x => x.UserID == User.Identity.Name)
                                                 .Where(x => x.LineDate >= dates.Item1)
                                                 .Where(x => x.LineDate <= dates.Item2)
                                                 .ToList();

                    WeekModel week = new WeekModel
                    {
                        WeekStart    = dates.Item1,
                        WeekEnd      = dates.Item2,
                        TotalHours   = lines.Sum(x => (x.Hours)),
                        TotalClients = lines.Select(x => x.ClientID).Distinct().Count()
                    };

                    model.Weeks.Add(week);
                }
            }

            return(View("Weeks", model));
        }
Esempio n. 3
0
        public void Calculo(ref List <PersonaModel> listaEmpleados)
        {
            WeekModel    week    = new WeekModel();
            WeekendModel weekend = new WeekendModel();

            foreach (var lsE in listaEmpleados)
            {
                int TotalValor = 0;
                foreach (var lsHora in lsE.lstDatos)
                {
                    var num_horas = (lsHora.hasta - lsHora.desde).Hours;

                    if (week.isWeek(lsHora.dia))
                    {
                        TotalValor += week.CalculoValor(lsHora.desde, lsHora.hasta) * num_horas;
                    }

                    if (weekend.isWeekend(lsHora.dia))
                    {
                        TotalValor += weekend.CalculoValor(lsHora.desde, lsHora.hasta) * num_horas;
                    }
                }
                lsE.intValorTotal = TotalValor;
            }
        }
Esempio n. 4
0
        public async Task ChangeTaskDate(string jobId, Guid dayAssignId, DateTime date)
        {
            JobAssign  jobAssign      = jobAssignProvider.GetByJobId(jobId);
            IDayAssign dayAssign      = dayAssignService.GetDayAssignById(dayAssignId);
            WeekModel  weekModel      = jobAssign.WeekList.First();
            int        weekDay        = date.GetWeekDayNumber();
            int        weekNumber     = date.GetWeekNumber();
            var        dayPerWeekList = new List <DayPerWeekModel> {
                new DayPerWeekModel {
                    Id = Guid.NewGuid(), WeekDay = weekDay
                }
            };
            var weekList = new List <WeekModel> {
                new WeekModel {
                    Number = weekNumber, IsDisabled = false, ChangedBy = weekModel.ChangedBy
                }
            };

            await messageBus.Publish(new ChangeJobAssignWeeksCommand(jobAssign.Id, weekList, (ChangedByRole)weekModel.ChangedBy, false));

            await messageBus.Publish(new SaveDaysPerWeekCommand(jobAssign.Id, dayPerWeekList));

            await messageBus.Publish(new ChangeOperationalTaskDateCommand(dayAssignId, date, weekDay));

            if (dayAssign.StatusId == JobStatus.Expired)
            {
                await jobStatusService.Pending(dayAssign.Id, dayAssign.StatusId);
            }
        }
Esempio n. 5
0
        private async Task UpdateDestinationAsync(string operation, WeekModel weekModel, DeltaModel delta, IEnumerable <ShiftModel> shifts, Func <string, ShiftModel, Task> destinationMethod, ILogger log)
        {
            var tasks = shifts
                        .Select(shift => UpdateDestinationAsync(operation, weekModel, delta, shift, destinationMethod, log))
                        .ToArray();

            await Task.WhenAll(tasks);
        }
Esempio n. 6
0
        public async Task <ResultModel> Run([ActivityTrigger] WeekModel weekModel, ILogger log)
        {
            log.LogWeek(weekModel);

            // initialise source service
            var credentials = await _secretsService.GetCredentialsAsync(weekModel.TeamId);

            _scheduleSourceService.SetCredentials(weekModel.TeamId, credentials);

            // get the current set of shifts from JDA
            var shifts = await _scheduleSourceService.ListWeekShiftsAsync(weekModel.TeamId, weekModel.StoreId, weekModel.StartDate, weekModel.TimeZoneInfoId);

            log.LogShifts(weekModel, shifts);

            // get the last saved set of shifts
            var savedShifts = await _scheduleCacheService.LoadScheduleAsync(weekModel.TeamId, weekModel.StartDate);

            // compute the delta
            var delta = _scheduleDeltaService.ComputeDelta(savedShifts.Tracked, shifts);

            log.LogFullDelta(weekModel, delta);

            if (delta.HasChanges)
            {
                delta.RemoveSkipped(savedShifts.Skipped);
                delta.ApplyMaximum(_options.MaximumDelta);

                log.LogPartialDelta(weekModel, delta);

                var allShifts = delta.All;

                // set teams employee
                var employeeLookup = BuildEmployeeLookup(savedShifts.Tracked);
                await SetTeamsEmployeeIds(allShifts.Where(s => string.IsNullOrEmpty(s.TeamsEmployeeId)), employeeLookup, weekModel, log);

                // set job & department name
                var jobLookup = BuildJobLookup(savedShifts.Tracked);
                await SetJobAndDepartmentName(allShifts, jobLookup, weekModel, log);

                // set teams schedule group (N.B this must be set after teams employee id and jobs)
                var groupLookup = BuildScheduleGroupLookup(savedShifts.Tracked);
                await SetTeamsSchedulingGroupId(allShifts.Where(s => string.IsNullOrEmpty(s.TeamsSchedulingGroupId)), groupLookup, weekModel, log);
                await AddEmployeesToSchedulingGroups(delta, groupLookup, weekModel, log);

                // update teams
                await ApplyDeltaAsync(weekModel, delta, log);

                log.LogAppliedDelta(weekModel, delta);

                // apply the final delta to the savedShifts
                delta.ApplyChanges(savedShifts.Tracked);
                delta.ApplySkipped(savedShifts.Skipped);

                await _scheduleCacheService.SaveScheduleAsync(weekModel.TeamId, weekModel.StartDate, savedShifts);
            }

            return(delta.AsResult());
        }
Esempio n. 7
0
        public IActionResult ListProjectWeeks(int?ProjectID, string FromWeekID = "", string ToWeekID = "")
        {
            if (ProjectID == null)
            {
                return(NotFound());
            }
            // TODO add regex check on from and to week id

            var weeks        = _context.Week.Where(e => e.ProjectID == ProjectID);
            var weekComparer = new CompareWeekModel();
            var WeekIDRegex  = new Regex(@"^\d\d-\d\d\d\d$");

            if (FromWeekID != null && FromWeekID != "" && WeekIDRegex.IsMatch(FromWeekID)) // FromWeekID is valid
            {
                if (ToWeekID != null && ToWeekID != "" && WeekIDRegex.IsMatch(ToWeekID))   // FromWeekID and ToWeekID is valid
                {
                }
                else // FromWeekID is valid and ToWeekID is invalid
                {
                    var fromDate = WeekModel.GetMondayFromWeekID(FromWeekID);
                    ToWeekID = WeekModel.GetIso8601WeekOfYear(fromDate.AddDays(21)) + "-" + DateTime.Now.Year;
                }
            }
            else // FromWeekID is invalid
            {
                if (ToWeekID != null && ToWeekID != "" && WeekIDRegex.IsMatch(ToWeekID)) // FromWeekID is invalid and ToWeekID is valid
                {
                    var toDate = WeekModel.GetMondayFromWeekID(ToWeekID);
                    FromWeekID = WeekModel.GetIso8601WeekOfYear(toDate.AddDays(-21)) + "-" + DateTime.Now.Year;
                }
                else // FromWeekID is invalid and ToWeekID is invalid
                {
                    FromWeekID = WeekModel.GetIso8601WeekOfYear(DateTime.Now) + "-" + DateTime.Now.Year;
                    ToWeekID   = WeekModel.GetIso8601WeekOfYear(DateTime.Now.AddDays(21)) + "-" + DateTime.Now.Year;
                }
            }
            weeks = weeks.Where(e => weekComparer.CompareWeekIDs(e.WeekID, ToWeekID) <= 0 && weekComparer.CompareWeekIDs(e.WeekID, FromWeekID) >= 0);

            var weekList = weeks.ToList();

            weekList.Sort(new CompareWeekModel());
            var weeksView = new List <DetailsWeekViewModel>();

            foreach (var week in weekList)
            {
                weeksView.Add(_WeeksRepository.PrepareWeekViewModel(_context, week));
            }
            var ListProjectWeekViewModel = new ListProjectWeekViewModel
            {
                ProjectID      = ProjectID.Value,
                FromWeekID     = FromWeekID,
                ToWeekID       = ToWeekID,
                WeekViewModels = weeksView
            };

            return(View(ListProjectWeekViewModel));
        }
Esempio n. 8
0
        public void WeekGenerateDaysTest()
        {
            WeekModel model = new WeekModel();

            model.GenerateDays(new Day(new DateTime(2017, 11, 11)));
            Assert.IsTrue(model.Days[0].DateEquals(new Day(new DateTime(2017, 11, 6))));
            Assert.IsTrue(model.Days.Length == 7);
            Assert.IsTrue(model.Days[6].DateEquals(new Day(new DateTime(2017, 11, 12))));
        }
Esempio n. 9
0
        public JsonResult Save(WeekModel weekModel)
        {
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(weekModel.ToString());
            xmlDocument.Save(Server.MapPath("~/WeeklyScheduleExample.xml"));

            return(Json("Ok"));
        }
Esempio n. 10
0
        public ActionResult Index()
        {
            //Create a weekly schedule from an example xml-file
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.Load(Server.MapPath("~/WeeklyScheduleExample.xml"));
            WeekModel week = WeekModel.GetRecord(xmlDocument.OuterXml);

            return(View(week));
        }
Esempio n. 11
0
        public void WeekGetPreviousDays()
        {
            WeekModel model = new WeekModel();
            Day       day   = new Day(new DateTime(2017, 11, 11));

            model.GenerateDays(day);
            Day previousDay = model.GetPreviousDay();

            Assert.AreEqual(day.WeekOfYear - 1, previousDay.WeekOfYear);
        }
Esempio n. 12
0
        public void WeekGetNextDays()
        {
            WeekModel model = new WeekModel();
            Day       day   = new Day(new DateTime(2017, 11, 11));

            model.GenerateDays(day);
            Day nextDay = model.GetNextDay();

            Assert.AreEqual(day.WeekOfYear + 1, nextDay.WeekOfYear);
        }
Esempio n. 13
0
        public async Task <ResultModel> Run([ActivityTrigger] WeekModel weekModel, ILogger log)
        {
            var activityModel = new TeamActivityModel
            {
                TeamId         = weekModel.TeamId,
                DateValue      = weekModel.StartDate.AsDateString(),
                ActivityType   = "Shifts",
                WfmBuId        = weekModel.WfmBuId,
                StartDate      = weekModel.StartDate,
                TimeZoneInfoId = weekModel.TimeZoneInfoId
            };

            return(await RunDeltaActivity(activityModel, log).ConfigureAwait(false));
        }
Esempio n. 14
0
        public void Days_of_week_2019_03_01_and_en_us()
        {
            var week = new WeekModel(new CultureInfo("en-US"), new LocalDate(2019, 3, 1));
            var days = week.Days.ToArray();

            days.Length.Should().Be(7);
            days[0].Day.Should().Be(24);
            days[1].Day.Should().Be(25);
            days[2].Day.Should().Be(26);
            days[3].Day.Should().Be(27);
            days[4].Day.Should().Be(28);
            days[5].Day.Should().Be(1);
            days[6].Day.Should().Be(2);
        }
Esempio n. 15
0
        public WeekView(TableLayoutPanel _panel, Label _title, TableLayoutPanel _headerPanel, DayManager _dayManager)
        {
            panel       = _panel;
            headerPanel = _headerPanel;
            title       = _title;
            dayManager  = _dayManager;
            model       = new WeekModel();

            hoursPictureBox      = new PictureBox();
            hoursPictureBox.Dock = DockStyle.Fill;
            panel.Controls.Add(hoursPictureBox, 0, 0);
            cellHeight             = hoursPictureBox.Height / 24;
            hoursPictureBox.Paint += new PaintEventHandler(hoursPictureBox_OnPaint);
        }
Esempio n. 16
0
        private YearTaskStatus GetWeekStatus(WeekModel week, Job job, int year, Guid housingDepartmentId)
        {
            int currentWeek = DateTime.UtcNow.GetWeekNumber();
            int currentYear = DateTime.UtcNow.Year;
            IEnumerable <JobAssign> jobAssignsForWeek = job.Assigns
                                                        .Where(x => (x.TillYear == default(int) || x.TillYear >= currentYear) &&
                                                               x.WeekList.Any(y => y.Number == week.Number) &&
                                                               x.HousingDepartmentIdList.Contains(housingDepartmentId));

            List <IDayAssign> dayAssignsForWeek = job.DayAssigns
                                                  .Where(x => x.Year == year && x.WeekNumber == week.Number)
                                                  .ToList();

            bool isJobExisted = year > job.CreationDate.Year || (year == job.CreationDate.Year && week.Number >= job.CreationDate.GetWeekNumber()) &&
                                (year > currentYear || week.Number >= currentWeek || dayAssignsForWeek.HasValue());

            List <IDayAssign> filteredDayAssignForWeek = dayAssignsForWeek.Where(x => x.ExpiredWeekNumber == week.Number || x.ExpiredWeekNumber == null).ToList();

            if (filteredDayAssignForWeek.Any(x => x.StatusId == JobStatus.Expired))
            {
                CheckExpiredDayAssignStatus(job, housingDepartmentId, filteredDayAssignForWeek, currentWeek, currentYear);
            }

            // TODO: If you think that you can refactor this, notify Igor about you courage.
            bool isAllDayAssignCompleted = filteredDayAssignForWeek.Any() && filteredDayAssignForWeek.All(x => x.StatusId == JobStatus.Completed);
            bool isAllTicketHasDayAssign = IsTaskHasOnlyRealTicket(job.Assigns, filteredDayAssignForWeek);

            if (week.ChangedBy == (int)ChangedByRole.None || !isJobExisted || !jobAssignsForWeek.HasValue())
            {
                return(YearTaskStatus.NotDefined);
            }
            else if (isAllDayAssignCompleted && isAllTicketHasDayAssign)
            {
                return(YearTaskStatus.Finished);
            }
            else if (year > currentYear || (year == currentYear && week.Number >= currentWeek))
            {
                return(YearTaskStatus.NotStarted);
            }
            else
            {
                return(YearTaskStatus.Failed);
            }
        }
Esempio n. 17
0
        public void Days_of_week_2019_04_11()
        {
            var week = new WeekModel(new CultureInfo("de-DE"), new LocalDate(2019, 4, 11));
            var days = week.Days.ToArray();

            days.Length.Should().Be(7);

            days[0].Day.Should().Be(8);
            days[0].DayOfWeek.Should().Be(IsoDayOfWeek.Monday);
            days[0].DisplayName.Should().Be("Mo");
            days[1].Day.Should().Be(9);
            days[1].DayOfWeek.Should().Be(IsoDayOfWeek.Tuesday);
            days[1].DisplayName.Should().Be("Di");
            days[2].Day.Should().Be(10);
            days[3].Day.Should().Be(11);
            days[4].Day.Should().Be(12);
            days[5].Day.Should().Be(13);
            days[6].Day.Should().Be(14);
        }
Esempio n. 18
0
        public List <WeekModel> Week(DateTime month)
        {
            var list   = dal.Week(month);
            var total  = list.Sum(p => p.UseAmount);
            var result = list.Select(p => new WeekModel()
            {
                UseAmount  = p.UseAmount,
                Week       = $"{month.Year}年第{p.Week}周",
                Percent    = Math.Round(p.UseAmount * 100 / total, 2),
                WeekIndex  = p.Week,
                IsSum      = false,
                ShowDetail = false
            }).ToList();
            var sum = new WeekModel()
            {
                UseAmount = total, Week = "总计", IsSum = true
            };

            result.Add(sum);
            return(result);
        }
Esempio n. 19
0
 private async Task UpdateDestinationAsync(string operation, WeekModel weekModel, DeltaModel delta, ShiftModel shift, Func <string, ShiftModel, Task> destinationMethod, ILogger log)
 {
     try
     {
         await destinationMethod(weekModel.TeamId, shift);
     }
     catch (ArgumentException)
     {
         delta.SkippedChange(shift);
         log.LogShiftSkipped(weekModel, operation, shift);
     }
     catch (MicrosoftGraphException ex)
     {
         delta.FailedChange(shift);
         log.LogShiftError(ex, weekModel, operation, shift);
     }
     catch (Exception ex)
     {
         delta.FailedChange(shift);
         log.LogShiftError(ex, weekModel, operation, shift);
     }
 }
Esempio n. 20
0
 public static void LogSchedulingGroupError(this ILogger log, Exception ex, WeekModel week, ShiftModel shift)
 {
     log.LogError(new EventId(11, "Scheduling Group"), ex, "Scheduling Group: Status={status}, DepartmentName={departmentName}, SourceId={sourceId}, EmployeeId={employeeId}, StoreId={storeId}, TeamId={teamId}, WeekDate={weekDate}", Status.Failed, shift.DepartmentName, shift.JdaShiftId, shift.JdaEmployeeId, week.StoreId, week.TeamId, week.StartDate.AsDateString());
 }
Esempio n. 21
0
        private async Task SetTeamsSchedulingGroupId(IEnumerable <ShiftModel> shifts, IDictionary <string, string> groupLookup, WeekModel weekModel, ILogger log)
        {
            foreach (var shift in shifts)
            {
                if (string.IsNullOrEmpty(shift.DepartmentName))
                {
                    log.LogDepartmentNotFound(weekModel, shift);
                    continue;
                }

                if (!groupLookup.ContainsKey(shift.DepartmentName))
                {
                    try
                    {
                        // first attempt to get an existing group with the department name
                        var groupId = await _scheduleDestinationService.GetSchedulingGroupIdByNameAsync(weekModel.TeamId, shift.DepartmentName);

                        if (string.IsNullOrEmpty(groupId))
                        {
                            // the group with the specified name does not exist, so create it, populated with all users from the shifts
                            // collection having this department
                            var userIds = GetAllUsersInDepartment(shifts, shift.DepartmentName);
                            groupId = await _scheduleDestinationService.CreateSchedulingGroupAsync(weekModel.TeamId, shift.DepartmentName, userIds);
                        }

                        groupLookup.Add(shift.DepartmentName, groupId);
                    }
                    catch (MicrosoftGraphException e)
                    {
                        log.LogSchedulingGroupError(e, weekModel, shift);
                        continue;
                    }
                    catch (Exception e)
                    {
                        log.LogSchedulingGroupError(e, weekModel, shift);
                        continue;
                    }
                }

                shift.TeamsSchedulingGroupId = groupLookup[shift.DepartmentName];
            }
        }
Esempio n. 22
0
        private async Task SetJobAndDepartmentName(IEnumerable <ShiftModel> shifts, IDictionary <string, JobModel> jobLookup, WeekModel weekModel, ILogger log)
        {
            var activities = shifts
                             .SelectMany(s => s.Jobs)
                             .Where(a => !string.IsNullOrEmpty(a.JdaJobId));

            foreach (var activity in activities)
            {
                if (!jobLookup.TryGetValue(activity.JdaJobId, out var job))
                {
                    try
                    {
                        job = await _scheduleSourceService.GetJobAsync(weekModel.TeamId, weekModel.StoreId, activity.JdaJobId)
                              ?? throw new KeyNotFoundException();

                        jobLookup[activity.JdaJobId] = job;
                    }
                    catch (Exception)
                    {
                        log.LogJobNotFound(weekModel, activity);
                        continue;
                    }
                }

                activity.Code           = job.Name;
                activity.DepartmentName = job.DepartmentName;
                activity.ThemeCode      = job.ThemeCode;
            }

            foreach (var shift in shifts)
            {
                var firstJob = shift.Jobs
                               .OrderBy(j => j.StartDate)
                               .FirstOrDefault();
                shift.DepartmentName = firstJob?.DepartmentName;
                shift.ThemeCode      = firstJob?.ThemeCode;
            }
        }
Esempio n. 23
0
        private async Task SetTeamsEmployeeIds(IEnumerable <ShiftModel> shifts, IDictionary <int, string> employeeLookup, WeekModel weekModel, ILogger log)
        {
            await _scheduleSourceService.LoadEmployeesAsync(weekModel.TeamId, shifts.Select(s => s.JdaEmployeeId.ToString()).Distinct().ToList());

            foreach (var shift in shifts)
            {
                if (!employeeLookup.ContainsKey(shift.JdaEmployeeId))
                {
                    EmployeeModel jdaEmployee;

                    try
                    {
                        jdaEmployee = await _scheduleSourceService.GetEmployeeAsync(weekModel.TeamId, shift.JdaEmployeeId.ToString())
                                      ?? throw new KeyNotFoundException();
                    }
                    catch (Exception)
                    {
                        log.LogEmployeeNotFound(weekModel, shift);
                        continue;
                    }

                    try
                    {
                        var graphEmployee = await _scheduleDestinationService.GetEmployeeAsync(weekModel.TeamId, jdaEmployee.LoginName)
                                            ?? throw new KeyNotFoundException();

                        employeeLookup.Add(shift.JdaEmployeeId, graphEmployee.DestinationId);
                    }
                    catch (KeyNotFoundException)
                    {
                        employeeLookup.Add(shift.JdaEmployeeId, null);
                    }
                    catch (Exception e)
                    {
                        log.LogMemberError(e, weekModel, jdaEmployee);

                        employeeLookup.Add(shift.JdaEmployeeId, null);
                    }
                }

                shift.TeamsEmployeeId = employeeLookup[shift.JdaEmployeeId];
            }
        }
Esempio n. 24
0
 public static void LogShiftError(this ILogger log, Exception ex, WeekModel week, string operationName, ShiftModel shift)
 {
     log.LogError(new EventId(9, "Shift"), ex, "Shift: Status={status}, OperationName={operationName}, SourceId={sourceId}, EmployeeId={employeeId}, StoreId={storeId}, TeamId={teamId}, WeekDate={weekDate}", Status.Failed, operationName, shift.JdaShiftId, shift.JdaEmployeeId, week.StoreId, week.TeamId, week.StartDate.AsDateString());
 }
Esempio n. 25
0
 public static void LogSchedulingGroupError(this ILogger log, Exception ex, WeekModel week, string departmentName, string schedulingGroupId)
 {
     log.LogError(new EventId(11, "Scheduling Group"), ex, "Scheduling Group: Status={status}, DepartmentName={departmentName}, SchedulingGroupId={schedulingGroupId}, StoreId={storeId}, TeamId={teamId}, WeekDate={weekDate}", Status.Failed, departmentName, schedulingGroupId, week.StoreId, week.TeamId, week.StartDate.AsDateString());
 }
Esempio n. 26
0
 public static void LogSchedulingGroupError(this ILogger log, MicrosoftGraphException ex, WeekModel week, ShiftModel shift)
 {
     log.LogError(new EventId(11, "Scheduling Group"), ex, "Scheduling Group: Status={status}, ErrorCode={errorCode}, ErrorDescription={errorDescription}, ErrorRequestId={errorRequestId}, ErrorDate={errorDate}, DepartmentName={departmentName}, SourceId={sourceId}, EmployeeId={employeeId}, StoreId={storeId}, TeamId={teamId}, WeekDate={weekDate}", Status.Failed, ex.Error.Code, ex.Error.Message, ex.Error.InnerError?.RequestId, ex.Error.InnerError?.Date, shift.DepartmentName, shift.JdaShiftId, shift.JdaEmployeeId, week.StoreId, week.TeamId, week.StartDate.AsDateString());
 }
Esempio n. 27
0
        private async Task AddEmployeesToSchedulingGroups(DeltaModel delta, IDictionary <string, string> groupLookup, WeekModel weekModel, ILogger log)
        {
            var allShifts = delta.All;

            foreach (var department in groupLookup.Keys)
            {
                // get all the user id's in this department
                var userIds = GetAllUsersInDepartment(allShifts, department);
                if (userIds.Count > 0)
                {
                    try
                    {
                        // and add them to the matching schedule group if necessary
                        await _scheduleDestinationService.AddUsersToSchedulingGroupAsync(weekModel.TeamId, groupLookup[department], userIds);
                    }
                    catch (Exception e)
                    {
                        delta.Created.Concat(delta.Updated).Where(i => i.DepartmentName == department).ForEach(i => delta.FailedChange(i));
                        log.LogSchedulingGroupError(e, weekModel, department, groupLookup[department]);
                        continue;
                    }
                }
            }
        }
Esempio n. 28
0
 private async Task ApplyDeltaAsync(WeekModel weekModel, DeltaModel delta, ILogger log)
 {
     await UpdateDestinationAsync(nameof(delta.Created), weekModel, delta, delta.Created, _scheduleDestinationService.CreateShiftAsync, log);
     await UpdateDestinationAsync(nameof(delta.Updated), weekModel, delta, delta.Updated, _scheduleDestinationService.UpdateShiftAsync, log);
     await UpdateDestinationAsync(nameof(delta.Deleted), weekModel, delta, delta.Deleted, _scheduleDestinationService.DeleteShiftAsync, log);
 }
        private static void AddDefaultWeekData(ProjectTrackerIpDataContext context)
        {
            string yearCounts = ConfigurationManager.AppSettings["YearCountsForPastYear"];

            if (yearCounts == "0" || yearCounts == null)
            {
                yearCounts = "2";
            }
            int weekCount = 0;
            ///Get weeks of year
            int year = DateTime.Now.Year;

            //past data
            for (int iYearCount = 0; iYearCount < Convert.ToInt16(yearCounts); iYearCount++)
            {
                int yearCalculate      = year - iYearCount - 1;
                var firstDayOfYear     = new System.DateTime(yearCalculate, 1, 1);
                var beginningDayOfWeek = firstDayOfYear.AddDays(-1 * Convert.ToInt32(firstDayOfYear.DayOfWeek));
                var endingDayOfWeek    = beginningDayOfWeek.AddDays(6);
                var weekOfYear         = 1;

                List <WeekModel> weeksOfTheYear = new List <WeekModel>();

                while (beginningDayOfWeek.Year < yearCalculate + 1)
                {
                    var week = new WeekModel {
                        Number = weekOfYear, BeginningOfWeek = beginningDayOfWeek
                    };
                    weeksOfTheYear.Add(week);

                    beginningDayOfWeek = beginningDayOfWeek.AddDays(7);
                    endingDayOfWeek    = beginningDayOfWeek.AddDays(6);

                    weekOfYear++;

                    context.Add(new Week
                    {
                        WeekId     = weekCount++,
                        WeekNumber = week.Number,
                        Year       = yearCalculate,
                        Text       = String.Format(
                            "Week {0}: ({1} to {2})",
                            week.Number,
                            beginningDayOfWeek.ToShortDateString(),
                            endingDayOfWeek.ToShortDateString())
                    });
                }
            }
            yearCounts = ConfigurationManager.AppSettings["YearCountsForFutureYear"];
            //future data
            for (int iYearCount = 0; iYearCount < Convert.ToInt16(yearCounts); iYearCount++)
            {
                int yearCalculate      = year + iYearCount;
                var firstDayOfYear     = new System.DateTime(yearCalculate, 1, 1);
                var beginningDayOfWeek = firstDayOfYear.AddDays(-1 * Convert.ToInt32(firstDayOfYear.DayOfWeek));
                var endingDayOfWeek    = beginningDayOfWeek.AddDays(6);

                var weekOfYear = 1;

                List <WeekModel> weeksOfTheYear = new List <WeekModel>();

                while (beginningDayOfWeek.Year < yearCalculate + 1)
                {
                    var week = new WeekModel {
                        Number = weekOfYear, BeginningOfWeek = beginningDayOfWeek
                    };
                    weeksOfTheYear.Add(week);

                    beginningDayOfWeek = beginningDayOfWeek.AddDays(7);
                    endingDayOfWeek    = beginningDayOfWeek.AddDays(6);

                    weekOfYear++;

                    context.Add(new Week
                    {
                        WeekId     = weekCount++,
                        WeekNumber = week.Number,
                        Year       = yearCalculate,
                        Text       = String.Format(
                            "Week {0}: ({1} to {2})",
                            week.Number,
                            beginningDayOfWeek.ToShortDateString(),
                            endingDayOfWeek.ToShortDateString())
                    });
                }
            }
        }
Esempio n. 30
0
 public static void LogShiftSkipped(this ILogger log, WeekModel week, string operationName, ShiftModel shift)
 {
     log.LogTrace(new EventId(10, "Shift"), "Shift: Status={status}, OperationName={operationName}, SourceId={sourceId}, EmployeeId={employeeId}, StoreId={storeId}, TeamId={teamId}, WeekDate={weekDate}", Status.Skipped, operationName, shift.JdaShiftId, shift.JdaEmployeeId, week.StoreId, week.TeamId, week.StartDate.AsDateString());
 }