diff --git a/.vscode/launch.json b/.vscode/launch.json index fcc80a75..b77f3b95 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/biz/PMBiz.cs b/server/AyaNova/biz/PMBiz.cs index b9263855..735badb9 100644 --- a/server/AyaNova/biz/PMBiz.cs +++ b/server/AyaNova/biz/PMBiz.cs @@ -5244,95 +5244,106 @@ namespace AyaNova.Biz //todo: NOTIFY FAIL continue; } - //make new workorder - if (await NewServiceWorkOrderFromPMAsync(p, ct, log)) + try { - //Success - - //Calculate next service date - DateTime NewNextServiceDate = CalculateNewDateFromSpanAndUnit(p.NextServiceDate, p.RepeatUnit, p.RepeatInterval); - - //Check Exclusions and adjust - if ((int)p.ExcludeDaysOfWeek != 0) + //make new workorder + if (await NewServiceWorkOrderFromPMAsync(p, ct, log)) { - //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); + //Success - while (excluded.Contains(NewNextServiceDate.DayOfWeek)) - NewNextServiceDate = NewNextServiceDate.AddDays(1); - } + //Calculate next service date + DateTime NewNextServiceDate = CalculateNewDateFromSpanAndUnit(p.NextServiceDate, p.RepeatUnit, p.RepeatInterval); - TimeSpan tsAdd = NewNextServiceDate - p.NextServiceDate; - - //Stop generating date reached?? - if (p.StopGeneratingDate != null && p.StopGeneratingDate < NewNextServiceDate) - { - p.Active = false; - await ct.SaveChangesAsync(); - log.LogTrace($"PMBiz:: PM {p.Serial} has reached it's stop generating date and has been automatically deactivated"); - continue; - } - - //Re-schedule PM - p.NextServiceDate = NewNextServiceDate; - SetGenerateDate(p); - foreach (PMItem pmi in p.Items) - { - pmi.RequestDate = addts(pmi.RequestDate, tsAdd); - foreach (PMItemScheduledUser pmsu in pmi.ScheduledUsers) + //Check Exclusions and adjust + if ((int)p.ExcludeDaysOfWeek != 0) { - pmsu.StartDate = addts(pmsu.StartDate, tsAdd); - pmsu.StopDate = addts(pmsu.StopDate, tsAdd); + //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(NewNextServiceDate.DayOfWeek)) + NewNextServiceDate = NewNextServiceDate.AddDays(1); } - foreach (PMItemLoan pml in pmi.Loans) - { - pml.DueDate = addts(pml.DueDate, tsAdd); - pml.OutDate = addts(pml.OutDate, tsAdd); - pml.ReturnDate = addts(pml.ReturnDate, tsAdd); - } - foreach (PMItemLabor pmlab in pmi.Labors) - { - pmlab.ServiceStartDate = addts(pmlab.ServiceStartDate, tsAdd); - pmlab.ServiceStopDate = addts(pmlab.ServiceStopDate, tsAdd); - } - foreach (PMItemTravel pmtrav in pmi.Travels) - { - pmtrav.TravelStartDate = addts(pmtrav.TravelStartDate, tsAdd); - pmtrav.TravelStopDate = addts(pmtrav.TravelStopDate, tsAdd); + TimeSpan tsAdd = NewNextServiceDate - p.NextServiceDate; - } - foreach (PMItemTask pmt in pmi.Tasks) - pmt.CompletedDate = addts(pmt.CompletedDate, tsAdd); - foreach (PMItemOutsideService pmo in pmi.OutsideServices) + //Stop generating date reached?? + if (p.StopGeneratingDate != null && p.StopGeneratingDate < NewNextServiceDate) { - pmo.SentDate = addts(pmo.SentDate, tsAdd); - pmo.ReturnDate = addts(pmo.ReturnDate, tsAdd); - pmo.ETADate = addts(pmo.ETADate, tsAdd); - + p.Active = false; + await ct.SaveChangesAsync(); + log.LogTrace($"PMBiz:: PM {p.Serial} has reached it's stop generating date and has been automatically deactivated"); + continue; } - } - try - { - await ct.SaveChangesAsync(); + + //Re-schedule PM + p.NextServiceDate = NewNextServiceDate; + SetGenerateDate(p); + foreach (PMItem pmi in p.Items) + { + pmi.RequestDate = addts(pmi.RequestDate, tsAdd); + foreach (PMItemScheduledUser pmsu in pmi.ScheduledUsers) + { + pmsu.StartDate = addts(pmsu.StartDate, tsAdd); + pmsu.StopDate = addts(pmsu.StopDate, tsAdd); + } + + foreach (PMItemLoan pml in pmi.Loans) + { + pml.DueDate = addts(pml.DueDate, tsAdd); + pml.OutDate = addts(pml.OutDate, tsAdd); + pml.ReturnDate = addts(pml.ReturnDate, tsAdd); + } + foreach (PMItemLabor pmlab in pmi.Labors) + { + pmlab.ServiceStartDate = addts(pmlab.ServiceStartDate, tsAdd); + pmlab.ServiceStopDate = addts(pmlab.ServiceStopDate, tsAdd); + } + foreach (PMItemTravel pmtrav in pmi.Travels) + { + pmtrav.TravelStartDate = addts(pmtrav.TravelStartDate, tsAdd); + pmtrav.TravelStopDate = addts(pmtrav.TravelStopDate, tsAdd); + + } + foreach (PMItemTask pmt in pmi.Tasks) + pmt.CompletedDate = addts(pmt.CompletedDate, tsAdd); + foreach (PMItemOutsideService pmo in pmi.OutsideServices) + { + pmo.SentDate = addts(pmo.SentDate, tsAdd); + pmo.ReturnDate = addts(pmo.ReturnDate, tsAdd); + pmo.ETADate = addts(pmo.ETADate, tsAdd); + + } + } + try + { + await ct.SaveChangesAsync(); #if (DEBUG) - log.LogInformation($"PMBiz::GenerateAsync updated PM after successful generation {p.Serial}"); + log.LogInformation($"PMBiz::GenerateAsync updated PM after successful generation {p.Serial}"); #endif + } + catch (Exception ex) + { + log.LogError(ex, $"PMBiz::GenerateAsync error updating PM after generation {p.Serial}"); + //todo: NOTIFY FAIL + continue; + } } - catch (Exception ex) - { - log.LogError(ex, $"PMBiz::GenerateAsync error updating PM after generation {p.Serial}"); - //todo: NOTIFY FAIL - continue; - } + } + catch (Exception ex) + { + log.LogError(ex, $"PMBiz::GenerateAsync error generating Work order from PM {p.Serial}"); + //todo: NOTIFY FAIL + continue; + } + } } @@ -5421,6 +5432,7 @@ namespace AyaNova.Biz var wip = new WorkOrderItemPart(); wip.Description = pmp.Description; wip.PartId = pmp.PartId; + wip.PartWarehouseId = pmp.PartWarehouseId; wip.PriceOverride = pmp.PriceOverride; wip.Quantity = pmp.Quantity; //wip.Serials=pmp.Serials;