/// <summary> Updates break efficiency on both Break & Schedule /// documents </summary> <param name="salesArea"></param> <param /// name="breakEfficiencyImport"></param> <param name="schedules"></param> private bool UpdateBreakEfficiency(SalesArea salesArea, BreakEfficiencyImport breakEfficiencyImport, List <ScheduleIndexed <Break, int> > schedules, Dictionary <int, Demographic> demographicsById) { bool success = false; var startDateTime = GetStartDateTime(breakEfficiencyImport); // Set break efficiency on Schedule document var schedule = schedules.Where(s => s.SalesArea == salesArea.Name && s.Date == startDateTime.Date) .OrderByDescending(s => (s.BreaksByKey.Count)) .FirstOrDefault(); if (schedule != null) // Schedule document found { var breakForSchedule = schedule.GetBreak(breakEfficiencyImport.break_no); if (breakForSchedule != null) // Break found { success = true; var demographic = demographicsById.ContainsKey(breakEfficiencyImport.demo_no) ? demographicsById[breakEfficiencyImport.demo_no] : null; if (breakForSchedule.BreakEfficiencyList == null) { breakForSchedule.BreakEfficiencyList = new List <BreakEfficiency>(); } // TODO: Re-enable this when Break.Efficiency has been added breakForSchedule.BreakEfficiencyList.Add(new BreakEfficiency(demographic.ExternalRef, breakEfficiencyImport.eff)); } } return(success); }
/// <summary> /// Load breaks for break efficiency import record if not already in memory /// </summary> /// <param name="salesArea"></param> /// <param name="breakEfficiencyImport"></param> /// <param name="schedules"></param> private void LoadBreaks(SalesArea salesArea, BreakEfficiencyImport breakEfficiencyImport, List <ScheduleIndexed <Break, int> > schedules, IScheduleRepository scheduleRepository) { DateTime startDateTime = GetStartDateTime(breakEfficiencyImport); // Load Schedule document if necessary var schedule = schedules.Where(s => s.SalesArea == salesArea.Name && s.Date.Date == startDateTime.Date).FirstOrDefault(); if (schedule == null) // Not in memory, load it { var scheduleObject = scheduleRepository.GetSchedule(salesArea.Name, startDateTime.Date); if (scheduleObject != null) { if (scheduleObject.Breaks != null && scheduleObject.Breaks.Count > 0) // Schedule has breaks { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0, string.Format("Break Efficiency processing. Schedule loaded for sales area {0} and date {1}", salesArea.Name, startDateTime.Date))); scheduleObject.Breaks.ForEach(@break => @break.BreakEfficiencyList = null); } else // No breaks { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForWarningMessage(0, 0, string.Format("Break Efficiency processing. Schedule document has no breaks for sales area {0} and date {1}", salesArea.Name, startDateTime.Date))); } schedules.Add(new ScheduleIndexed <Break, int>(scheduleObject, delegate(Break currentBreak) { return(currentBreak); }, delegate(Break currentBreak) { return(currentBreak.CustomId); })); } else // No Schedule document, log warning { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForWarningMessage(0, 0, string.Format("Break Efficiency processing. Schedule document does not exist for sales area {0} and date {1}", salesArea.Name, startDateTime.Date))); } } }
private DateTime GetStartDateTime(BreakEfficiencyImport breakEfficiencyImport) { // TODO: Make this shared... string nom_time = breakEfficiencyImport.brek_nom_time.ToString("000000"); int seconds = (Convert.ToInt32(nom_time.Substring(0, 2)) * (60 * 60)) + // Hours (Convert.ToInt32(nom_time.Substring(2, 2)) * 60) + // Mins (Convert.ToInt32(nom_time.Substring(4, 2))); // Secs return(DateHelper.GetDateTime(string.Format("{0} {1}", breakEfficiencyImport.brek_sched_date.ToString("00000000"), "000000"), "yyyyMMdd HHmmss", DateTimeKind.Utc).AddSeconds(seconds)); }