diff --git a/server/AyaNova/biz/FormFieldReference.cs b/server/AyaNova/biz/FormFieldReference.cs index a9be2410..f0a70ce0 100644 --- a/server/AyaNova/biz/FormFieldReference.cs +++ b/server/AyaNova/biz/FormFieldReference.cs @@ -823,17 +823,17 @@ namespace AyaNova.Biz List l = new List(); l.Add(new FormField { TKey = "WorkOrderSummary", FieldKey = "Notes" }); - l.Add(new FormField { TKey = "WorkOrderStatus", FieldKey = "WorkOrderStatus" }); + l.Add(new FormField { TKey = "WorkOrderStatus", FieldKey = "LastStatusId" }); l.Add(new FormField { TKey = "Address", FieldKey = "Address" }); - l.Add(new FormField { TKey = "WorkOrderCloseByDate", FieldKey = "WorkOrderCloseByDate" }); - l.Add(new FormField { TKey = "Project", FieldKey = "Project" }); - l.Add(new FormField { TKey = "Contract", FieldKey = "Contract" }); - l.Add(new FormField { TKey = "WorkOrderInvoiceNumber", FieldKey = "WorkOrderInvoiceNumber" }); - l.Add(new FormField { TKey = "WorkOrderServiceDate", FieldKey = "WorkOrderServiceDate" }); - l.Add(new FormField { TKey = "WorkOrderCustomerContactName", FieldKey = "WorkOrderCustomerContactName" }); - l.Add(new FormField { TKey = "WorkOrderCustomerReferenceNumber", FieldKey = "WorkOrderCustomerReferenceNumber" }); - l.Add(new FormField { TKey = "WorkOrderInternalReferenceNumber", FieldKey = "WorkOrderInternalReferenceNumber" }); - l.Add(new FormField { TKey = "WorkOrderOnsite", FieldKey = "WorkOrderOnsite" }); + l.Add(new FormField { TKey = "WorkOrderCloseByDate", FieldKey = "CompleteByDate" }); + l.Add(new FormField { TKey = "Project", FieldKey = "ProjectId" }); + l.Add(new FormField { TKey = "Contract", FieldKey = "ContractId" }); + l.Add(new FormField { TKey = "WorkOrderInvoiceNumber", FieldKey = "InvoiceNumber" }); + l.Add(new FormField { TKey = "WorkOrderServiceDate", FieldKey = "ServiceDate" }); + l.Add(new FormField { TKey = "WorkOrderCustomerContactName", FieldKey = "CustomerContactName" }); + l.Add(new FormField { TKey = "WorkOrderCustomerReferenceNumber", FieldKey = "CustomerReferenceNumber" }); + l.Add(new FormField { TKey = "WorkOrderInternalReferenceNumber", FieldKey = "InternalReferenceNumber" }); + l.Add(new FormField { TKey = "WorkOrderOnsite", FieldKey = "Onsite" }); l.Add(new FormField { TKey = "CustomerSignature", FieldKey = "CustomerSignature" }); l.Add(new FormField { TKey = "TechSignature", FieldKey = "TechSignature" }); l.Add(new FormField { TKey = "Tags", FieldKey = "Tags" }); @@ -856,16 +856,15 @@ namespace AyaNova.Biz l.Add(new FormField { TKey = "WorkOrderCustom15", FieldKey = "WorkOrderCustom15", IsCustomField = true }); l.Add(new FormField { TKey = "WorkOrderCustom16", FieldKey = "WorkOrderCustom16", IsCustomField = true }); - //WORKORDER ITEM - l.Add(new FormField { TKey = "WorkOrderItemSummary", FieldKey = "WorkOrderItemSummary", TKeySection = "WorkOrderItem", Hideable = false }); - l.Add(new FormField { TKey = "Sequence", FieldKey = "WorkOrderItemSequence", TKeySection = "WorkOrderItem" }); - l.Add(new FormField { TKey = "WorkOrderItemTechNotes", FieldKey = "WorkOrderItemTechNotes", TKeySection = "WorkOrderItem" }); - l.Add(new FormField { TKey = "Tags", FieldKey = "WorkOrderItemTags", TKeySection = "WorkOrderItem" }); - l.Add(new FormField { TKey = "Wiki", FieldKey = "WorkOrderItemWiki", TKeySection = "WorkOrderItem" }); + //WORKORDER ITEM + l.Add(new FormField { TKey = "Sequence", FieldKey = "Sequence", TKeySection = "WorkOrderItem", Requireable = false });//already required + l.Add(new FormField { TKey = "WorkOrderItemTechNotes", FieldKey = "TechNotes", TKeySection = "WorkOrderItem" }); + l.Add(new FormField { TKey = "Tags", FieldKey = "WorkOrderItemTags", TKeySection = "WorkOrderItem", ModelProperty="Tags" }); + l.Add(new FormField { TKey = "Wiki", FieldKey = "WorkOrderItemWiki", TKeySection = "WorkOrderItem", ModelProperty="Wiki" }); l.Add(new FormField { TKey = "Attachments", FieldKey = "WorkOrderItemAttachments", TKeySection = "WorkOrderItem" }); l.Add(new FormField { TKey = "WorkOrderItemWorkOrderStatusID", FieldKey = "WorkOrderItemWorkOrderStatusID", TKeySection = "WorkOrderItem" }); l.Add(new FormField { TKey = "WorkOrderItemPriorityID", FieldKey = "WorkOrderItemPriorityID", TKeySection = "WorkOrderItem" }); - l.Add(new FormField { TKey = "WorkOrderItemRequestDate", FieldKey = "WorkOrderItemRequestDate", TKeySection = "WorkOrderItem" }); + l.Add(new FormField { TKey = "WorkOrderItemRequestDate", FieldKey = "RequestDate", TKeySection = "WorkOrderItem" }); l.Add(new FormField { TKey = "WorkOrderItemWarrantyService", FieldKey = "WorkOrderItemWarrantyService", TKeySection = "WorkOrderItem" }); l.Add(new FormField { TKey = "WorkOrderItemCustom1", FieldKey = "WorkOrderItemCustom1", IsCustomField = true, TKeySection = "WorkOrderItem" }); l.Add(new FormField { TKey = "WorkOrderItemCustom2", FieldKey = "WorkOrderItemCustom2", IsCustomField = true, TKeySection = "WorkOrderItem" }); @@ -1686,9 +1685,15 @@ namespace AyaNova.Biz public class FormField { //CLIENT / SERVER Unique identifier used at BOTH client and server - //MUST MATCH MODEL PROPERTY NAME EXACTLY OR REQUIRED FIELD VALIDATION WON"T WORK + //MUST MATCH MODEL PROPERTY NAME EXACTLY UNLESS ModelProperty is set OR REQUIRED FIELD VALIDATION WON"T WORK public string FieldKey { get; set; } + //This exists to handle things like workorderitemtags which + //need to use a unique fieldkey but it can't match the model property becuase then + //it would need to be "Tags" but there is already a "Tags" on the workorder header and in units + //so here we can specify an exact property tag to check + public string ModelProperty { get; set; } = null; + //CLIENT Use only for display in customization form public string TKey { get; set; } diff --git a/server/AyaNova/biz/RequiredFieldsValidator.cs b/server/AyaNova/biz/RequiredFieldsValidator.cs index e96f6109..9acfd818 100644 --- a/server/AyaNova/biz/RequiredFieldsValidator.cs +++ b/server/AyaNova/biz/RequiredFieldsValidator.cs @@ -13,7 +13,7 @@ namespace AyaNova.Biz { //No form custom = no template to check against so nothing to do if (formCustom == null || string.IsNullOrWhiteSpace(formCustom.Template)) - return; + return; var FormTemplate = JArray.Parse(formCustom.Template); var FormFields = Biz.FormFieldOptionalCustomizableReference.FormFieldReferenceList(formCustom.FormKey); @@ -33,6 +33,9 @@ namespace AyaNova.Biz { //Now get the actual property name from the available fields using the lt key string RequiredPropertyName = FF.FieldKey; + //there might be a more specific model property due to being a workorder sub item duplicate such as WorkOrderItemTags vs WorkOrderTags + if (FF.ModelProperty != null) + RequiredPropertyName = FF.ModelProperty; //Is it an indexed collection field? if (RequiredPropertyName.Contains(".")) diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 7729d8b3..b04feefa 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -2238,7 +2238,7 @@ namespace AyaNova.Biz AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Notes"); //Any form customizations to validate? - var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrderItem.ToString()); + var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrder.ToString());//all workorder sub items use the workorder key for customization if (FormCustomization != null) { //Yeppers, do the validation, there are two, the custom fields and the regular fields that might be set to required