From 80ff52ef0c269cf47e59efbc96e9351d74790659 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 29 Jul 2021 22:09:41 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/EnumListController.cs | 18 ++--- .../biz/{DaysOfWeek.cs => AyaDaysOfWeek.cs} | 2 +- server/AyaNova/biz/PMBiz.cs | 68 ++++++++++++++----- server/AyaNova/models/PM.cs | 2 +- server/AyaNova/util/Seeder.cs | 2 +- 5 files changed, 63 insertions(+), 29 deletions(-) rename server/AyaNova/biz/{DaysOfWeek.cs => AyaDaysOfWeek.cs} (94%) diff --git a/server/AyaNova/Controllers/EnumListController.cs b/server/AyaNova/Controllers/EnumListController.cs index 54986dfc..ef73373c 100644 --- a/server/AyaNova/Controllers/EnumListController.cs +++ b/server/AyaNova/Controllers/EnumListController.cs @@ -91,7 +91,7 @@ namespace AyaNova.Api.Controllers ret.Add(new KeyValuePair(StringUtil.TrimTypeName(typeof(ContractOverrideType).ToString()), "Contract price adjustment type")); ret.Add(new KeyValuePair(StringUtil.TrimTypeName(typeof(WorkorderItemTaskCompletionType).ToString()), "Work order item task completion type")); ret.Add(new KeyValuePair(StringUtil.TrimTypeName(typeof(PMTimeUnit).ToString()), "PM time units")); - ret.Add(new KeyValuePair(StringUtil.TrimTypeName(typeof(DaysOfWeek).ToString()), "Days of the week")); + ret.Add(new KeyValuePair(StringUtil.TrimTypeName(typeof(AyaDaysOfWeek).ToString()), "Days of the week")); return Ok(ApiOkResponse.Response(ret)); } @@ -576,7 +576,7 @@ namespace AyaNova.Api.Controllers ReturnList.Add(new NameIdItem() { Name = LT["TimeSpanMinutes"], Id = (long)PMTimeUnit.Minutes }); } - else if (keyNameInLowerCase == StringUtil.TrimTypeName(typeof(DaysOfWeek).ToString()).ToLowerInvariant()) + else if (keyNameInLowerCase == StringUtil.TrimTypeName(typeof(AyaDaysOfWeek).ToString()).ToLowerInvariant()) { TranslationKeysToFetch.Add("DayMonday"); @@ -590,13 +590,13 @@ namespace AyaNova.Api.Controllers var LT = await TranslationBiz.GetSubsetStaticAsync(TranslationKeysToFetch, translationId); - ReturnList.Add(new NameIdItem() { Name = LT["DayMonday"], Id = (long)DaysOfWeek.Monday }); - ReturnList.Add(new NameIdItem() { Name = LT["DayTuesday"], Id = (long)DaysOfWeek.Tuesday }); - ReturnList.Add(new NameIdItem() { Name = LT["DayWednesday"], Id = (long)DaysOfWeek.Wednesday }); - ReturnList.Add(new NameIdItem() { Name = LT["DayThursday"], Id = (long)DaysOfWeek.Thursday }); - ReturnList.Add(new NameIdItem() { Name = LT["DayFriday"], Id = (long)DaysOfWeek.Friday }); - ReturnList.Add(new NameIdItem() { Name = LT["DaySaturday"], Id = (long)DaysOfWeek.Saturday }); - ReturnList.Add(new NameIdItem() { Name = LT["DaySunday"], Id = (long)DaysOfWeek.Sunday }); + ReturnList.Add(new NameIdItem() { Name = LT["DayMonday"], Id = (long)AyaDaysOfWeek.Monday }); + ReturnList.Add(new NameIdItem() { Name = LT["DayTuesday"], Id = (long)AyaDaysOfWeek.Tuesday }); + ReturnList.Add(new NameIdItem() { Name = LT["DayWednesday"], Id = (long)AyaDaysOfWeek.Wednesday }); + ReturnList.Add(new NameIdItem() { Name = LT["DayThursday"], Id = (long)AyaDaysOfWeek.Thursday }); + ReturnList.Add(new NameIdItem() { Name = LT["DayFriday"], Id = (long)AyaDaysOfWeek.Friday }); + ReturnList.Add(new NameIdItem() { Name = LT["DaySaturday"], Id = (long)AyaDaysOfWeek.Saturday }); + ReturnList.Add(new NameIdItem() { Name = LT["DaySunday"], Id = (long)AyaDaysOfWeek.Sunday }); } //################################################################################################################# diff --git a/server/AyaNova/biz/DaysOfWeek.cs b/server/AyaNova/biz/AyaDaysOfWeek.cs similarity index 94% rename from server/AyaNova/biz/DaysOfWeek.cs rename to server/AyaNova/biz/AyaDaysOfWeek.cs index 5d4a20c9..a3227bf5 100644 --- a/server/AyaNova/biz/DaysOfWeek.cs +++ b/server/AyaNova/biz/AyaDaysOfWeek.cs @@ -5,7 +5,7 @@ namespace AyaNova.Biz /// Days of week /// [Flags] - public enum DaysOfWeek : int + public enum AyaDaysOfWeek : int { //https://stackoverflow.com/questions/8447/what-does-the-flags-enum-attribute-mean-in-c //MAX 31 (2147483647)!!! or will overflow int and needs to be turned into a long diff --git a/server/AyaNova/biz/PMBiz.cs b/server/AyaNova/biz/PMBiz.cs index 42ba4d3e..c396feda 100644 --- a/server/AyaNova/biz/PMBiz.cs +++ b/server/AyaNova/biz/PMBiz.cs @@ -428,7 +428,7 @@ namespace AyaNova.Biz /// generate before span and unit /// internal static void SetGenerateDate(PM p) - { + { p.GenerateDate = CalculateNewDateFromSpanAndUnit(p.NextServiceDate, p.GenerateBeforeUnit, -System.Math.Abs(p.GenerateBeforeInterval)); } @@ -436,7 +436,7 @@ namespace AyaNova.Biz internal static DateTime CalculateNewDateFromSpanAndUnit(DateTime StartDate, PMTimeUnit unit, int interval) { - if(interval==0) return StartDate; + if (interval == 0) return StartDate; switch (unit) { case PMTimeUnit.Minutes: @@ -458,7 +458,7 @@ namespace AyaNova.Biz return StartDate; } - + private async Task AutoSetAddressAsync(PM newObj) { @@ -5226,7 +5226,41 @@ namespace AyaNova.Biz if (await NewServiceWorkOrderFromPMAsync(p, ct, log)) { //Success - //fixup dates and update pm + + //Calculate next service date + DateTime dtNewNextServiceDate = CalculateNewDateFromSpanAndUnit(p.NextServiceDate, p.RepeatUnit, p.RepeatInterval); + + //Check Exclusions and adjust + if ((int)p.ExcludeDaysOfWeek != 0) + { + //days of week cant be used as flags hence our own + var excluded = new List(); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Monday)) excluded.Add(DayOfWeek.Monday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Tuesday)) excluded.Add(DayOfWeek.Tuesday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Wednesday)) excluded.Add(DayOfWeek.Wednesday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Thursday)) excluded.Add(DayOfWeek.Thursday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Friday)) excluded.Add(DayOfWeek.Friday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Saturday)) excluded.Add(DayOfWeek.Saturday); + if (p.ExcludeDaysOfWeek.HasFlag(AyaDaysOfWeek.Sunday)) excluded.Add(DayOfWeek.Sunday); + + while (excluded.Contains(dtNewNextServiceDate.DayOfWeek)) + dtNewNextServiceDate = dtNewNextServiceDate.AddDays(1); + } + + TimeSpan tsAdd = dtNewNextServiceDate - p.NextServiceDate; + + //Stop generating date reached?? + if (p.StopGeneratingDate != null && p.StopGeneratingDate < dtNewNextServiceDate) + { + p.Active = false; + await ct.SaveChangesAsync(); + log.LogTrace($"PMBiz:: PM {p.Serial} has reached it's stop generating date and has been automatically deactivated"); + return; + } + + //add the new timespan to all dates in pm + + //note p is ready to modify and save here as it's tracked } } @@ -5297,7 +5331,7 @@ namespace AyaNova.Biz foreach (PMItemScheduledUser pmsu in pmi.ScheduledUsers) { var wois = new WorkOrderItemScheduledUser(); - wois.ServiceRateId = pmsu.ServiceRateId; + wois.ServiceRateId = pmsu.ServiceRateId; wois.StartDate = pmsu.StartDate;//DATE ADJUST wois.StopDate = pmsu.StopDate;//DATE ADJUST wois.Tags = pmsu.Tags; @@ -5330,9 +5364,9 @@ namespace AyaNova.Biz wil.Rate = pml.Rate; wil.Tags = pml.Tags; wil.TaxCodeId = pml.TaxCodeId; - wil.DueDate=pml.DueDate;//DATE ADJUST - wil.OutDate=pml.OutDate;//DATE ADJUST - wil.ReturnDate=pml.ReturnDate;//DATE ADJUST + wil.DueDate = pml.DueDate;//DATE ADJUST + wil.OutDate = pml.OutDate;//DATE ADJUST + wil.ReturnDate = pml.ReturnDate;//DATE ADJUST woi.Loans.Add(wil); } @@ -5349,8 +5383,8 @@ namespace AyaNova.Biz wilab.TaxCodeSaleId = pmlab.TaxCodeSaleId; wilab.UserId = pmlab.UserId; - wilab.ServiceStartDate=pmlab.ServiceStartDate;//DATE ADJUST - wilab.ServiceStopDate=pmlab.ServiceStopDate;//DATE ADJUST + wilab.ServiceStartDate = pmlab.ServiceStartDate;//DATE ADJUST + wilab.ServiceStopDate = pmlab.ServiceStopDate;//DATE ADJUST woi.Labors.Add(wilab); } @@ -5366,9 +5400,9 @@ namespace AyaNova.Biz witrav.TravelRateQuantity = pmtrav.TravelRateQuantity; witrav.TaxCodeSaleId = pmtrav.TaxCodeSaleId; witrav.UserId = pmtrav.UserId; - witrav.TravelStartDate=pmtrav.TravelStartDate;//DATE ADJUST - witrav.TravelStopDate=pmtrav.TravelStopDate;//DATE ADJUST - + witrav.TravelStartDate = pmtrav.TravelStartDate;//DATE ADJUST + witrav.TravelStopDate = pmtrav.TravelStopDate;//DATE ADJUST + woi.Travels.Add(witrav); } @@ -5379,7 +5413,7 @@ namespace AyaNova.Biz wit.Sequence = pmt.Sequence; wit.Status = pmt.Status; wit.Task = pmt.Task; - wit.CompletedDate=pmt.CompletedDate;//DATE ADJUST + wit.CompletedDate = pmt.CompletedDate;//DATE ADJUST woi.Tasks.Add(wit); } @@ -5413,9 +5447,9 @@ namespace AyaNova.Biz wio.UnitId = pmo.UnitId; wio.VendorSentToId = pmo.VendorSentToId; wio.VendorSentViaId = pmo.VendorSentViaId; - wio.SentDate=pmo.SentDate;//DATE ADJUST - wio.ReturnDate=pmo.ReturnDate;//DATE ADJUST - wio.ETADate=pmo.ETADate;//DATE ADJUST + wio.SentDate = pmo.SentDate;//DATE ADJUST + wio.ReturnDate = pmo.ReturnDate;//DATE ADJUST + wio.ETADate = pmo.ETADate;//DATE ADJUST woi.OutsideServices.Add(wio); } diff --git a/server/AyaNova/models/PM.cs b/server/AyaNova/models/PM.cs index 83c2512a..b9e35877 100644 --- a/server/AyaNova/models/PM.cs +++ b/server/AyaNova/models/PM.cs @@ -28,7 +28,7 @@ namespace AyaNova.Models public bool CopyAttachments { get; set; } public DateTime? StopGeneratingDate { get; set; } [Required] - public DaysOfWeek ExcludeDaysOfWeek { get; set; }//bit field flags set + public AyaDaysOfWeek ExcludeDaysOfWeek { get; set; }//bit field flags set [Required] public bool Active { get; set; } [Required] diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index cf62a873..e075f664 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -3704,7 +3704,7 @@ namespace AyaNova.Util o.CopyAttachments=true; o.CopyWiki=true; o.StopGeneratingDate = woDate.AddYears(1); - o.ExcludeDaysOfWeek = DaysOfWeek.Saturday | DaysOfWeek.Sunday; + o.ExcludeDaysOfWeek = AyaDaysOfWeek.Saturday | AyaDaysOfWeek.Sunday; o.Active = true; o.NextServiceDate = woDate.AddDays(1); o.RepeatInterval = 1;