This commit is contained in:
2021-07-29 23:15:08 +00:00
parent e677fa56e4
commit fb693fe457
2 changed files with 88 additions and 76 deletions

2
.vscode/launch.json vendored
View File

@@ -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\\"

View File

@@ -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<DayOfWeek>();
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<DayOfWeek>();
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;