Пример #1
0
        /// <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());
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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 &lt;job&gt;</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);
        }
Пример #7
0
        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();
                }
            }
        }
Пример #8
0
        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();
            }
        }