/// <summary> /// Parses a work pattern from a single-line description. /// </summary> /// <param name="workPatternDescription">The description.</param> /// <returns></returns> public WorkPattern ParseWorkPatternFromDescription(string workPatternDescription) { var parseThis = HttpUtility.HtmlDecode(workPatternDescription.Trim()); if (Regex.IsMatch(parseThis, "Full or part( |-)time", RegexOptions.IgnoreCase)) { return(new WorkPattern() { IsFullTime = true, IsPartTime = true }); } if (Regex.IsMatch(parseThis, "Full( |-)time", RegexOptions.IgnoreCase)) { return(new WorkPattern() { IsFullTime = true }); } if (Regex.IsMatch(parseThis, "(Casual|Part( |-)time)", RegexOptions.IgnoreCase)) { return(new WorkPattern() { IsPartTime = true }); } var match = Regex.Match(parseThis, @"(([0-9]*)\s*?-\s*)?([0-9]+) hours per week", RegexOptions.IgnoreCase); if (match.Success) { try { var maxHours = Int32.Parse(match.Groups[3].Value, CultureInfo.CurrentCulture); var minHours = String.IsNullOrEmpty(match.Groups[2].Value) ? maxHours : Int32.Parse(match.Groups[2].Value, CultureInfo.CurrentCulture); var workPattern = new WorkPattern(); const int fullTimeThreshold = 35; if (maxHours >= fullTimeThreshold) { workPattern.IsFullTime = true; } if (minHours < fullTimeThreshold) { workPattern.IsPartTime = true; } return(workPattern); } catch (FormatException) { // ignore this unrecognised format } catch (OverflowException) { // ignore this unrecognised format } } return(new WorkPattern()); }
public void FullTimeAndOtherCombined() { var workPattern = new WorkPattern(); workPattern.WorkPatterns.Add(WorkPattern.FULL_TIME); workPattern.WorkPatterns.Add("Other"); var result = workPattern.ToString(); Assert.AreEqual("Full time, Other", result); }
public void FullAndPartTimeCombined() { var workPattern = new WorkPattern(); workPattern.WorkPatterns.Add(WorkPattern.FULL_TIME); workPattern.WorkPatterns.Add(WorkPattern.PART_TIME); var result = workPattern.ToString(); Assert.AreEqual("Full or part time", result); }
public void PartTimeAndOthersCombinedAndSorted() { var workPattern = new WorkPattern(); workPattern.WorkPatterns.Add(WorkPattern.PART_TIME); workPattern.WorkPatterns.Add("Other"); workPattern.WorkPatterns.Add("Another"); var result = workPattern.ToString(); Assert.AreEqual("Another, Other, Part time", result); }
/// <summary> /// Parse a work pattern from the XML of a job returned by TribePad /// </summary> /// <param name="sourceData">XML for a single job, with a root element of <job></param> /// <returns></returns> public async Task <WorkPattern> ParseWorkPattern(string sourceData) { if (_workPatterns == null) { _workPatterns = await _lookupValuesProvider.ReadWorkPatterns(); } var jobXml = XDocument.Parse(sourceData); var workPattern = new WorkPattern(); decimal hoursPerWeek; if (Decimal.TryParse(jobXml.Root.Element("shift_hours")?.Value, out hoursPerWeek)) { workPattern.HoursPerWeek = hoursPerWeek; } // Get any work pattern because we want the field id, and they all have it var exampleWorkPattern = _workPatterns?.FirstOrDefault(); if (exampleWorkPattern != null) { // Use that field id to look up the work pattern id in the jobs XML var workPatternId = jobXml.Root.Element("custom_" + exampleWorkPattern.FieldId)?.Element("answer")?.Value; if (!String.IsNullOrEmpty(workPatternId)) { var matchingWorkPattern = _workPatterns.SingleOrDefault(x => x.LookupValueId == workPatternId); if (matchingWorkPattern != null) { // TribePad doesn't support multiple work patterns, so extra work patterns have been set up // which are actually a combination of two work patterns - split them here var individualWorkPatterns = matchingWorkPattern.Text.Split(new[] { " or ", " - " }, StringSplitOptions.RemoveEmptyEntries); foreach (var individualWorkPattern in individualWorkPatterns) { workPattern.WorkPatterns.Add(individualWorkPattern.ToLowerInvariant().Humanize(LetterCasing.Sentence)); } } } } // If no work pattern was provided but we know how many hours per week, we can add a sensible work pattern if (!workPattern.WorkPatterns.Any() && workPattern.HoursPerWeek.HasValue) { workPattern.WorkPatterns.Add(workPattern.HoursPerWeek.Value >= 35 ? WorkPattern.FULL_TIME : WorkPattern.PART_TIME); } return(workPattern); }
private static TimelineMask AlicesWorkPattern() { var start = new LocalDate(2014, 12, 22); var workDay = new DayPattern { new LocalTimeInterval(new LocalTime(09, 00), new LocalTime(12, 30)), new LocalTimeInterval(new LocalTime(13, 00), new LocalTime(17, 30)), }; var pattern = new WorkPattern(LocalTimeZone, start); pattern.Add(null); pattern.Add(workDay); pattern.Add(workDay); pattern.Add(workDay); pattern.Add(workDay); pattern.Add(workDay); pattern.Add(null); return(pattern); }
public void SaveTrueRoatingData(WorkPatternViewModel model) { if (model.Id > 0) { foreach (var item in workPatternDetaiiById(model.Id)) { _db.WorkPatternDetails.Remove(item); _db.SaveChanges(); } WorkPattern data = _db.WorkPatterns.Where(x => x.Id == model.Id).FirstOrDefault(); data.Name = model.Name; data.IsRotating = model.IsRotating; data.MondayHours = null; data.MondayDays = null; data.MondayStart = null; data.MondayEnd = null; data.MondayBreakMins = null; data.TuesdayHours = null; data.TuesdayDays = null; data.TuesdayStart = null; data.TuesdayEnd = null; data.TuesdayBreakMins = null; data.WednessdayHours = null; data.WednessdayDays = null; data.WednessdayStart = null; data.WednessdayEnd = null; data.WednessdayBreakMins = null; data.ThursdayHours = null; data.ThursdayDays = null; data.ThursdayStart = null; data.ThursdayEnd = null; data.ThursdayBreakMins = null; data.FridayHours = null; data.FridayDays = null; data.FridayStart = null; data.FridayEnd = null; data.FridayBreakMins = null; data.SaturdayHours = null; data.SaturdayDays = null; data.SaturdayStart = null; data.SaturdayEnd = null; data.SaturdayBreakMins = null; data.SundayHours = null; data.SundayDays = null; data.SundayStart = null; data.SundayEnd = null; data.SundayBreakMins = null; _db.SaveChanges(); var n = 0; foreach (var itemData in model.WorkPatternList) { n++; WorkPatternDetail detailData = new WorkPatternDetail(); detailData.WorkPatternID = model.Id; detailData.Name = n.ToString(); detailData.MondayHours = itemData.MondayHours; detailData.MondayDays = itemData.MondayDays; if (!string.IsNullOrEmpty(itemData.MondayStart)) { detailData.MondayStart = Convert.ToDateTime(itemData.MondayStart); } if (!string.IsNullOrEmpty(itemData.MondayEnd)) { detailData.MondayEnd = Convert.ToDateTime(itemData.MondayStart); } detailData.MondayBreakMins = itemData.MondayBreakMins; detailData.TuesdayHours = itemData.TuesdayHours; detailData.TuesdayDays = itemData.TuesdayDays; if (!string.IsNullOrEmpty(itemData.TuesdayStart)) { detailData.TuesdayStart = Convert.ToDateTime(itemData.TuesdayStart); } if (!string.IsNullOrEmpty(itemData.TuesdayEnd)) { detailData.TuesdayEnd = Convert.ToDateTime(itemData.TuesdayEnd); } detailData.TuesdayBreakMins = itemData.TuesdayBreakMins; detailData.WednessdayHours = itemData.WednessdayHours; detailData.WednessdayDays = itemData.WednessdayDays; if (!string.IsNullOrEmpty(itemData.WednessdayStart)) { detailData.WednessdayStart = Convert.ToDateTime(itemData.WednessdayStart); } if (!string.IsNullOrEmpty(itemData.WednessdayEnd)) { detailData.WednessdayEnd = Convert.ToDateTime(itemData.WednessdayEnd); } detailData.WednessdayBreakMins = itemData.WednessdayBreakMins; detailData.ThursdayHours = itemData.ThursdayHours; detailData.ThursdayDays = itemData.ThursdayDays; if (!string.IsNullOrEmpty(itemData.ThursdayStart)) { detailData.ThursdayStart = Convert.ToDateTime(itemData.ThursdayStart); } if (!string.IsNullOrEmpty(itemData.ThursdayEnd)) { detailData.ThursdayEnd = Convert.ToDateTime(itemData.ThursdayEnd); } detailData.ThursdayBreakMins = itemData.ThursdayBreakMins; detailData.FridayHours = itemData.FridayHours; detailData.FridayDays = itemData.FridayDays; if (!string.IsNullOrEmpty(itemData.FridayStart)) { detailData.FridayStart = Convert.ToDateTime(itemData.FridayStart); } if (!string.IsNullOrEmpty(itemData.FridayEnd)) { detailData.FridayEnd = Convert.ToDateTime(itemData.FridayEnd); } detailData.FridayBreakMins = itemData.FridayBreakMins; detailData.SaturdayHours = itemData.SaturdayHours; detailData.SaturdayDays = itemData.SaturdayDays; if (!string.IsNullOrEmpty(itemData.SaturdayStart)) { detailData.SaturdayStart = Convert.ToDateTime(itemData.SaturdayStart); } if (!string.IsNullOrEmpty(itemData.SaturdayEnd)) { detailData.SaturdayEnd = Convert.ToDateTime(itemData.SaturdayEnd); } detailData.SaturdayBreakMins = itemData.SaturdayBreakMins; detailData.SundayHours = itemData.SundayHours; detailData.SundayDays = itemData.SundayDays; if (!string.IsNullOrEmpty(itemData.SundayStart)) { detailData.SundayStart = Convert.ToDateTime(itemData.SundayStart); } if (!string.IsNullOrEmpty(itemData.SundayEnd)) { detailData.SundayEnd = Convert.ToDateTime(itemData.SundayEnd); } detailData.SundayBreakMins = itemData.SundayBreakMins; _db.WorkPatternDetails.Add(detailData); _db.SaveChanges(); } } else { WorkPattern item = new WorkPattern(); item.Name = model.Name; item.IsRotating = model.IsRotating; _db.WorkPatterns.Add(item); _db.SaveChanges(); var n = 0; foreach (var itemData in model.WorkPatternList) { n++; WorkPatternDetail data = new WorkPatternDetail(); data.WorkPatternID = item.Id; data.Name = n.ToString(); data.MondayHours = itemData.MondayHours; data.MondayDays = itemData.MondayDays; if (!string.IsNullOrEmpty(itemData.MondayStart)) { data.MondayStart = Convert.ToDateTime(itemData.MondayStart); } if (!string.IsNullOrEmpty(itemData.MondayEnd)) { data.MondayEnd = Convert.ToDateTime(itemData.MondayStart); } data.MondayBreakMins = itemData.MondayBreakMins; data.TuesdayHours = itemData.TuesdayHours; data.TuesdayDays = itemData.TuesdayDays; if (!string.IsNullOrEmpty(itemData.TuesdayStart)) { data.TuesdayStart = Convert.ToDateTime(itemData.TuesdayStart); } if (!string.IsNullOrEmpty(itemData.TuesdayEnd)) { data.TuesdayEnd = Convert.ToDateTime(itemData.TuesdayEnd); } data.TuesdayBreakMins = itemData.TuesdayBreakMins; data.WednessdayHours = itemData.WednessdayHours; data.WednessdayDays = itemData.WednessdayDays; if (!string.IsNullOrEmpty(itemData.WednessdayStart)) { data.WednessdayStart = Convert.ToDateTime(itemData.WednessdayStart); } if (!string.IsNullOrEmpty(itemData.WednessdayEnd)) { data.WednessdayEnd = Convert.ToDateTime(itemData.WednessdayEnd); } data.WednessdayBreakMins = itemData.WednessdayBreakMins; data.ThursdayHours = itemData.ThursdayHours; data.ThursdayDays = itemData.ThursdayDays; if (!string.IsNullOrEmpty(itemData.ThursdayStart)) { data.ThursdayStart = Convert.ToDateTime(itemData.ThursdayStart); } if (!string.IsNullOrEmpty(itemData.ThursdayEnd)) { data.ThursdayEnd = Convert.ToDateTime(itemData.ThursdayEnd); } data.ThursdayBreakMins = itemData.ThursdayBreakMins; data.FridayHours = itemData.FridayHours; data.FridayDays = itemData.FridayDays; if (!string.IsNullOrEmpty(itemData.FridayStart)) { data.FridayStart = Convert.ToDateTime(itemData.FridayStart); } if (!string.IsNullOrEmpty(itemData.FridayEnd)) { data.FridayEnd = Convert.ToDateTime(itemData.FridayEnd); } data.FridayBreakMins = itemData.FridayBreakMins; data.SaturdayHours = itemData.SaturdayHours; data.SaturdayDays = itemData.SaturdayDays; if (!string.IsNullOrEmpty(itemData.SaturdayStart)) { data.SaturdayStart = Convert.ToDateTime(itemData.SaturdayStart); } if (!string.IsNullOrEmpty(itemData.SaturdayEnd)) { data.SaturdayEnd = Convert.ToDateTime(itemData.SaturdayEnd); } data.SaturdayBreakMins = itemData.SaturdayBreakMins; data.SundayHours = itemData.SundayHours; data.SundayDays = itemData.SundayDays; if (!string.IsNullOrEmpty(itemData.SundayStart)) { data.SundayStart = Convert.ToDateTime(itemData.SundayStart); } if (!string.IsNullOrEmpty(itemData.SundayEnd)) { data.SundayEnd = Convert.ToDateTime(itemData.SundayEnd); } data.SundayBreakMins = itemData.SundayBreakMins; _db.WorkPatternDetails.Add(data); _db.SaveChanges(); } } }
public void SaveFalseRoatingData(WorkPatternViewModel model) { if (model.Id > 0) { foreach (var item in workPatternDetaiiById(model.Id)) { _db.WorkPatternDetails.Remove(item); _db.SaveChanges(); } WorkPattern data = _db.WorkPatterns.Where(x => x.Id == model.Id).FirstOrDefault(); data.Name = model.Name; data.IsRotating = model.IsRotating; data.MondayHours = model.MondayHours; data.MondayDays = model.MondayDays; if (model.MondayStart != 0) { data.MondayStart = Convert.ToDecimal(model.MondayStart); } if (model.MondayEnd != 0) { data.MondayEnd = Convert.ToDecimal(model.MondayEnd); } data.MondayBreakMins = model.MondayBreakMins; data.TuesdayHours = model.TuesdayHours; data.TuesdayDays = model.TuesdayDays; if (model.TuesdayStart != 0) { data.TuesdayStart = Convert.ToDecimal(model.TuesdayStart); } if (model.TuesdayEnd != 0) { data.TuesdayEnd = Convert.ToDecimal(model.TuesdayEnd); } data.TuesdayBreakMins = model.TuesdayBreakMins; data.WednessdayHours = model.WednessdayHours; data.WednessdayDays = model.WednessdayDays; if (model.WednessdayStart != 0) { data.WednessdayStart = Convert.ToDecimal(model.WednessdayStart); } if (model.WednessdayEnd != 0) { data.WednessdayEnd = Convert.ToDecimal(model.WednessdayEnd); } data.WednessdayBreakMins = model.WednessdayBreakMins; data.ThursdayHours = model.ThursdayHours; data.ThursdayDays = model.ThursdayDays; if (model.ThursdayStart != 0) { data.ThursdayStart = Convert.ToDecimal(model.ThursdayStart); } if (model.ThursdayEnd != 0) { data.ThursdayEnd = Convert.ToDecimal(model.ThursdayEnd); } data.ThursdayBreakMins = model.ThursdayBreakMins; data.FridayHours = model.FridayHours; data.FridayDays = model.FridayDays; if (model.FridayStart != 0) { data.FridayStart = Convert.ToDecimal(model.FridayStart); } if (model.FridayEnd != 0) { data.FridayEnd = Convert.ToDecimal(model.FridayEnd); } data.FridayBreakMins = model.FridayBreakMins; data.SaturdayHours = model.SaturdayHours; data.SaturdayDays = model.SaturdayDays; if (model.SaturdayStart != 0) { data.SaturdayStart = Convert.ToDecimal(model.SaturdayStart); } if (model.SaturdayEnd != 0) { data.SaturdayEnd = Convert.ToDecimal(model.SaturdayEnd); } data.SaturdayBreakMins = model.SaturdayBreakMins; data.SundayHours = model.SundayHours; data.SundayDays = model.SundayDays; if (model.SundayStart != 0) { data.SundayStart = Convert.ToDecimal(model.SundayStart); } if (model.SundayEnd != 0) { data.SundayEnd = Convert.ToDecimal(model.SundayEnd); } data.SundayBreakMins = model.SundayBreakMins; _db.SaveChanges(); } else { WorkPattern data = new WorkPattern(); data.Name = model.Name; data.IsRotating = model.IsRotating; data.MondayHours = model.MondayHours; data.MondayDays = model.MondayDays; if (model.MondayStart != 0) { data.MondayStart = Convert.ToDecimal(model.MondayStart); } if (model.MondayEnd != 0) { data.MondayEnd = Convert.ToDecimal(model.MondayEnd); } data.MondayBreakMins = model.MondayBreakMins; data.TuesdayHours = model.TuesdayHours; data.TuesdayDays = model.TuesdayDays; if (model.TuesdayStart != 0) { data.TuesdayStart = Convert.ToDecimal(model.TuesdayStart); } if (model.TuesdayEnd != 0) { data.TuesdayEnd = Convert.ToDecimal(model.TuesdayEnd); } data.TuesdayBreakMins = model.TuesdayBreakMins; data.WednessdayHours = model.WednessdayHours; data.WednessdayDays = model.WednessdayDays; if (model.WednessdayStart != 0) { data.WednessdayStart = Convert.ToDecimal(model.WednessdayStart); } if (model.WednessdayEnd != 0) { data.WednessdayEnd = Convert.ToDecimal(model.WednessdayEnd); } data.WednessdayBreakMins = model.WednessdayBreakMins; data.ThursdayHours = model.ThursdayHours; data.ThursdayDays = model.ThursdayDays; if (model.ThursdayStart != 0) { data.ThursdayStart = Convert.ToDecimal(model.ThursdayStart); } if (model.ThursdayEnd != 0) { data.ThursdayEnd = Convert.ToDecimal(model.ThursdayEnd); } data.ThursdayBreakMins = model.ThursdayBreakMins; data.FridayHours = model.FridayHours; data.FridayDays = model.FridayDays; if (model.FridayStart != 0) { data.FridayStart = Convert.ToDecimal(model.FridayStart); } if (model.FridayEnd != 0) { data.FridayEnd = Convert.ToDecimal(model.FridayEnd); } data.FridayBreakMins = model.FridayBreakMins; data.SaturdayHours = model.SaturdayHours; data.SaturdayDays = model.SaturdayDays; if (model.SaturdayStart != 0) { data.SaturdayStart = Convert.ToDecimal(model.SaturdayStart); } if (model.SaturdayEnd != 0) { data.SaturdayEnd = Convert.ToDecimal(model.SaturdayEnd); } data.SaturdayBreakMins = model.SaturdayBreakMins; data.SundayHours = model.SundayHours; data.SundayDays = model.SundayDays; if (model.SundayStart != 0) { data.SundayStart = Convert.ToDecimal(model.SundayStart); } if (model.SundayEnd != 0) { data.SundayEnd = Convert.ToDecimal(model.SundayEnd); } data.SundayBreakMins = model.SundayBreakMins; _db.WorkPatterns.Add(data); _db.SaveChanges(); } }