diff --git a/server/AyaNova/generator/CoreJobCustomerNotify.cs b/server/AyaNova/generator/CoreJobCustomerNotify.cs index ddc3266b..621963dd 100644 --- a/server/AyaNova/generator/CoreJobCustomerNotify.cs +++ b/server/AyaNova/generator/CoreJobCustomerNotify.cs @@ -169,6 +169,33 @@ namespace AyaNova.Biz } break; case AyaType.WorkOrder: + { + var wo = await ct.WorkOrder.AsNoTracking().FirstOrDefaultAsync(z => z.Id == ne.ObjectId); + if (wo == null) + { + //maybe deleted, this can't proceed + throw new ApplicationException($"Unable to make delivery for customer notify event as WorkOrder {ne.Name} was not found during delivery, deleted?"); + } + + var CustomerName = await ct.Customer.AsNoTracking().Where(x => x.Id == wo.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(); + var StatusName = await ct.WorkOrderStatus.AsNoTracking().Where(x => x.Id == wo.LastStatusId).Select(x => x.Name).FirstOrDefaultAsync(); + Subject = SetWorkOrderTokens(Subject, wo, CustomerName, StatusName); + Body = SetWorkOrderTokens(Body, wo, CustomerName, StatusName); + } + break; + case AyaType.CustomerServiceRequest: + { + var csr = await ct.CustomerServiceRequest.AsNoTracking().FirstOrDefaultAsync(z => z.Id == ne.ObjectId); + if (csr == null) + { + //maybe deleted, this can't proceed + throw new ApplicationException($"Unable to make delivery for customer notify event as CustomerServiceRequest {ne.Name} was not found during delivery, deleted?"); + } + + var CustomerName = await ct.Customer.AsNoTracking().Where(x => x.Id == csr.CustomerId).Select(x => x.Name).FirstOrDefaultAsync(); + Subject = SetCSRTokens(Subject, csr, CustomerName); + Body = SetCSRTokens(Body, csr, CustomerName); + } break; } @@ -297,6 +324,74 @@ namespace AyaNova.Biz return TheField; } + + + private static string SetWorkOrderTokens(string TheField, WorkOrder wo, string CustomerName, string statusName) + { + MatchCollection matches = Regex.Matches(TheField, @"\{{(.|\n)*?\}}", RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + //{{.*?}} + foreach (Match KeyMatch in matches) + { + switch (KeyMatch.Value) + { + case "{{Customer}}": + TheField = TheField.Replace(KeyMatch.Value, CustomerName); + break; + case "{{WorkOrderStatus}}": + TheField = TheField.Replace(KeyMatch.Value, statusName); + break; + case "{{WorkOrderCustomerContactName}}": + TheField = TheField.Replace(KeyMatch.Value, wo.CustomerContactName); + break; + case "{{WorkOrderCustomerReferenceNumber}}": + TheField = TheField.Replace(KeyMatch.Value, wo.CustomerReferenceNumber); + break; + case "{{WorkOrderSummary}}": + TheField = TheField.Replace(KeyMatch.Value, wo.Notes); + break; + case "{{WorkOrderSerialNumber}}": + TheField = TheField.Replace(KeyMatch.Value, wo.Serial.ToString()); + break; + + } + } + + return TheField; + } + + + private static string SetCSRTokens(string TheField, CustomerServiceRequest csr, string CustomerName) + { + MatchCollection matches = Regex.Matches(TheField, @"\{{(.|\n)*?\}}", RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + //{{.*?}} + foreach (Match KeyMatch in matches) + { + switch (KeyMatch.Value) + { + case "{{Customer}}": + TheField = TheField.Replace(KeyMatch.Value, CustomerName); + break; + case "{{QuoteIntroduction}}": + TheField = TheField.Replace(KeyMatch.Value, csr.Introduction); + break; + case "{{WorkOrderCustomerContactName}}": + TheField = TheField.Replace(KeyMatch.Value, csr.CustomerContactName); + break; + case "{{WorkOrderCustomerReferenceNumber}}": + TheField = TheField.Replace(KeyMatch.Value, csr.CustomerReferenceNumber); + break; + case "{{WorkOrderSummary}}": + TheField = TheField.Replace(KeyMatch.Value, csr.Notes); + break; + case "{{QuoteSerialNumber}}": + TheField = TheField.Replace(KeyMatch.Value, csr.Serial.ToString()); + break; + + } + } + + return TheField; + } //===