diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 4570dfee..53b92f38 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -390,10 +390,10 @@ namespace AyaNova.Biz //THESE TWO ARE REDUNDANT: this is actually workorderstatuschange because can just pick any status under workorderstatuschange to be notified about - WorkorderFinished = 30, //*Service work order is set to any status that is flagged as a "Finished" type of status. Customer & User + WorkorderFinished = 30, //*travel work order is set to any status that is flagged as a "Finished" type of status. Customer & User //This one could be accomplished with WorkorderStatusAge, just pick a finished status and set a time frame and wala! - WorkorderFinishedFollowUp = 32, //* Service workorder closed status follow up again after this many TIMESPAN + WorkorderFinishedFollowUp = 32, //* travel workorder closed status follow up again after this many TIMESPAN todo: CHANGE WorkorderFinishStatusOverdue = 15,//* Workorder object not set to a "Finished" flagged workorder status type in selected time span from creation of workorder Change this to a new type that is based on so many days *without* being set to a particular status @@ -882,13 +882,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + // newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + // newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemExpense.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemExpense, AyaEvent.Created), ct); await ExpenseSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -929,8 +929,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + // dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await ExpenseValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -949,7 +949,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemExpense, AyaEvent.Modified), ct); await ExpenseSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -969,7 +969,7 @@ namespace AyaNova.Biz //Log event await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemExpense, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemExpense, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1000,7 +1000,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + // CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1029,7 +1029,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemExpense); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Name).AddText(obj.Description); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -1042,10 +1042,10 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemExpense.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Description).AddText(obj.Name); return SearchParams; } - #endregion work order item LABOR level + #endregion work order item EXPENSE level /* @@ -1075,13 +1075,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemLabor.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemLabor, AyaEvent.Created), ct); await LaborSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + // await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -1122,8 +1122,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + //dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + //dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await LaborValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -1142,7 +1142,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemLabor, AyaEvent.Modified), ct); await LaborSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -1162,7 +1162,7 @@ namespace AyaNova.Biz //Log event await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemLabor, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemLabor, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1193,7 +1193,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1222,7 +1222,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemLabor); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.ServiceDetails); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -1235,7 +1235,7 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemLabor.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.ServiceDetails); return SearchParams; } #endregion work order item LABOR level @@ -1267,13 +1267,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemLoan.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemLoan, AyaEvent.Created), ct); await LoanSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -1314,8 +1314,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + // dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await LoanValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -1334,7 +1334,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemLoan, AyaEvent.Modified), ct); await LoanSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -1354,7 +1354,7 @@ namespace AyaNova.Biz //Log event await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemLoan, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemLoan, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1385,7 +1385,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1414,7 +1414,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemLoan); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Notes); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -1427,10 +1427,210 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemLoan.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Notes); return SearchParams; } - #endregion work order item LABOR level + #endregion work order item LOAN level + + + + + /* + + + ██████╗ ██╗ ██╗████████╗███████╗██╗██████╗ ███████╗ ███████╗███████╗██████╗ ██╗ ██╗██╗ ██████╗███████╗ + ██╔═══██╗██║ ██║╚══██╔══╝██╔════╝██║██╔══██╗██╔════╝ ██╔════╝██╔════╝██╔══██╗██║ ██║██║██╔════╝██╔════╝ + ██║ ██║██║ ██║ ██║ ███████╗██║██║ ██║█████╗ ███████╗█████╗ ██████╔╝██║ ██║██║██║ █████╗ + ██║ ██║██║ ██║ ██║ ╚════██║██║██║ ██║██╔══╝ ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║██║ ██╔══╝ + ╚██████╔╝╚██████╔╝ ██║ ███████║██║██████╔╝███████╗ ███████║███████╗██║ ██║ ╚████╔╝ ██║╚██████╗███████╗ + ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝╚═════╝ ╚══════╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═════╝╚══════╝ + + + + */ + + #region WorkOrderItemOutsideService level + //////////////////////////////////////////////////////////////////////////////////////////////// + //EXISTS + internal async Task OutsideServiceExistsAsync(long id) + { + return await ct.WorkOrderItemOutsideService.AnyAsync(z => z.Id == id); + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //CREATE + // + internal async Task OutsideServiceCreateAsync(WorkOrderItemOutsideService newObject) + { + await OutsideServiceValidateAsync(newObject, null); + if (HasErrors) + return null; + else + { + // newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + await ct.WorkOrderItemOutsideService.AddAsync(newObject); + await ct.SaveChangesAsync(); + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemOutsideService, AyaEvent.Created), ct); + await OutsideServiceSearchIndexAsync(newObject, true); + // await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); + return newObject; + } + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + // GET + // + internal async Task OutsideServiceGetAsync(long id, bool logTheGetEvent = true) + { + //Note: there could be rules checking here in future, i.e. can only get own workorder or something + //if so, then need to implement AddError and in route handle Null return with Error check just like PUT route does now + + //https://docs.microsoft.com/en-us/ef/core/querying/related-data + //docs say this will not query twice but will recognize the duplicate woitem bit which is required for multiple grandchild collections + var ret = + await ct.WorkOrderItemOutsideService + .SingleOrDefaultAsync(z => z.Id == id); + if (logTheGetEvent && ret != null) + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, AyaType.WorkOrderItemOutsideService, AyaEvent.Retrieved), ct); + return ret; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //UPDATE + // + internal async Task OutsideServicePutAsync(WorkOrderItemOutsideService dtPutObject) + { + WorkOrderItemOutsideService dbObject = await ct.WorkOrderItemOutsideService.SingleOrDefaultAsync(z => z.Id == dtPutObject.Id); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return null; + } + + WorkOrderItemOutsideService SnapshotOfOriginalDBObj = new WorkOrderItemOutsideService(); + CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); + CopyObject.Copy(dtPutObject, dbObject, "Id"); + + // dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + + ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; + await OutsideServiceValidateAsync(dbObject, SnapshotOfOriginalDBObj); + if (HasErrors) return null; + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await OutsideServiceExistsAsync(dtPutObject.Id)) + AddError(ApiErrorCode.NOT_FOUND); + else + AddError(ApiErrorCode.CONCURRENCY_CONFLICT); + return null; + } + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemOutsideService, AyaEvent.Modified), ct); + await OutsideServiceSearchIndexAsync(dbObject, false); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); + return dbObject; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //DELETE + // + internal async Task OutsideServiceDeleteAsync(long id) + { + WorkOrderItemOutsideService dbObject = await ct.WorkOrderItemOutsideService.SingleOrDefaultAsync(z => z.Id == id); + OutsideServiceValidateCanDelete(dbObject); + if (HasErrors) + return false; + ct.WorkOrderItemOutsideService.Remove(dbObject); + await ct.SaveChangesAsync(); + + //Log event + await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemOutsideService, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct);//FIX why woitem, shouldn't it be outsideservice?? + await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemOutsideService, ct); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); + await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); + return true; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //VALIDATION + // + private async Task OutsideServiceValidateAsync(WorkOrderItemOutsideService proposedObj, WorkOrderItemOutsideService currentObj) + { + //run validation and biz rules + bool isNew = currentObj == null; + + if (proposedObj.WorkOrderItemId == 0) + AddError(ApiErrorCode.VALIDATION_REQUIRED, "WorkOrderItemId"); + else if (!await ItemExistsAsync(proposedObj.WorkOrderItemId)) + { + AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "WorkOrderItemId"); + } + + //Any form customizations to validate? + var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrderItemOutsideService.ToString()); + if (FormCustomization != null) + { + //Yeppers, do the validation, there are two, the custom fields and the regular fields that might be set to required + + //validate users choices for required non custom fields + RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors + + //validate custom fields + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + } + } + + + private void OutsideServiceValidateCanDelete(WorkOrderItemOutsideService obj) + { + if (obj == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return; + } + + //re-check rights here necessary due to traversal delete from Principle object + if (!Authorized.HasDeleteRole(CurrentUserRoles, AyaType.WorkOrderItemOutsideService)) + { + AddError(ApiErrorCode.NOT_AUTHORIZED); + return; + } + } + + + ////////////////////////////////////////////// + //INDEXING + // + private async Task OutsideServiceSearchIndexAsync(WorkOrderItemOutsideService obj, bool isNew) + { + //SEARCH INDEXING + var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemOutsideService); + SearchParams.AddText(obj.Notes).AddText(obj.RMANumber).AddText(obj.TrackingNumber); + + if (isNew) + await Search.ProcessNewObjectKeywordsAsync(SearchParams); + else + await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams); + } + + public async Task OutsideServiceGetSearchResultSummary(long id) + { + var obj = await ct.WorkOrderItemOutsideService.SingleOrDefaultAsync(z => z.Id == id); + var SearchParams = new Search.SearchIndexProcessObjectParameters(); + if (obj != null) + SearchParams.AddText(obj.Notes).AddText(obj.RMANumber).AddText(obj.TrackingNumber); + return SearchParams; + } + #endregion work order item OUTSIDE SERVICE level + /* @@ -1460,13 +1660,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemPart.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemPart, AyaEvent.Created), ct); await PartSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); return newObject; } } @@ -1506,8 +1706,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + //dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + //dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await PartValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -1526,7 +1726,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemPart, AyaEvent.Modified), ct); await PartSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -1544,9 +1744,9 @@ namespace AyaNova.Biz await ct.SaveChangesAsync(); //Log event - await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemPart, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); + await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemPart, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct);//FIX woitem?? await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemPart, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + // await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1577,7 +1777,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1603,7 +1803,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemPart); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Description).AddText(obj.Serials); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -1616,10 +1816,10 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemPart.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Description).AddText(obj.Serials); return SearchParams; } - #endregion work order item LABOR level + #endregion work order item PARTS level /* @@ -1649,13 +1849,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemPartRequest.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemPartRequest, AyaEvent.Created), ct); - await PartRequestSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await PartRequestSearchIndexAsync(newObject, true); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -1673,7 +1873,7 @@ namespace AyaNova.Biz //docs say this will not query twice but will recognize the duplicate woitem bit which is required for multiple grandchild collections var ret = await ct.WorkOrderItemPartRequest - .SingleOrDefaultAsync(z => z.Id == id); + .SingleOrDefaultAsync(z => z.Id == id);//FIX this GetAsync not using AsNoTracking and neither are any of the others!! if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, AyaType.WorkOrderItemPartRequest, AyaEvent.Retrieved), ct); return ret; @@ -1696,8 +1896,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + // dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + //dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await PartRequestValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -1715,8 +1915,8 @@ namespace AyaNova.Biz return null; } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemPartRequest, AyaEvent.Modified), ct); - await PartRequestSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + // await PartRequestSearchIndexAsync(dbObject, false); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -1734,9 +1934,9 @@ namespace AyaNova.Biz await ct.SaveChangesAsync(); //Log event - await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemPartRequest, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); + await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemPartRequest, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct);//FIX "woitem"?? await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemPartRequest, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + // await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1767,7 +1967,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1789,30 +1989,32 @@ namespace AyaNova.Biz } - ////////////////////////////////////////////// - //INDEXING - // - private async Task PartRequestSearchIndexAsync(WorkOrderItemPartRequest obj, bool isNew) - { - //SEARCH INDEXING - var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemPartRequest); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); - if (isNew) - await Search.ProcessNewObjectKeywordsAsync(SearchParams); - else - await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams); - } + //### NOTE: Currently there is nothing to index, no text fields + // ////////////////////////////////////////////// + // //INDEXING + // // + // private async Task PartRequestSearchIndexAsync(WorkOrderItemPartRequest obj, bool isNew) + // { + // //SEARCH INDEXING + // var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemPartRequest); + // SearchParams.AddText(obj.).AddText(obj.Tags).AddCustomFields(obj.CustomFields); - public async Task PartRequestGetSearchResultSummary(long id) - { - var obj = await ct.WorkOrderItemPartRequest.SingleOrDefaultAsync(z => z.Id == id); - var SearchParams = new Search.SearchIndexProcessObjectParameters(); - if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); - return SearchParams; - } - #endregion work order item LABOR level + // if (isNew) + // await Search.ProcessNewObjectKeywordsAsync(SearchParams); + // else + // await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams); + // } + + // public async Task PartRequestGetSearchResultSummary(long id) + // { + // var obj = await ct.WorkOrderItemPartRequest.SingleOrDefaultAsync(z => z.Id == id); + // var SearchParams = new Search.SearchIndexProcessObjectParameters(); + // if (obj != null) + // SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + // return SearchParams; + // } + #endregion work order item PART REQUEST level /* @@ -1842,13 +2044,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemScheduledUser.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemScheduledUser, AyaEvent.Created), ct); - await ScheduledUserSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await ScheduledUserSearchIndexAsync(newObject, true); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -1889,8 +2091,8 @@ namespace AyaNova.Biz CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + //dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await ScheduledUserValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -1908,8 +2110,8 @@ namespace AyaNova.Biz return null; } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemScheduledUser, AyaEvent.Modified), ct); - await ScheduledUserSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + // await ScheduledUserSearchIndexAsync(dbObject, false); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -1927,9 +2129,9 @@ namespace AyaNova.Biz await ct.SaveChangesAsync(); //Log event - await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemScheduledUser, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); + await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemScheduledUser, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct);//FIX woitem text?? await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemScheduledUser, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -1960,7 +2162,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -1982,30 +2184,32 @@ namespace AyaNova.Biz } - ////////////////////////////////////////////// - //INDEXING - // - private async Task ScheduledUserSearchIndexAsync(WorkOrderItemScheduledUser obj, bool isNew) - { - //SEARCH INDEXING - var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemScheduledUser); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + //### CUrrently nothing to index as no text fields to search - if (isNew) - await Search.ProcessNewObjectKeywordsAsync(SearchParams); - else - await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams); - } + // ////////////////////////////////////////////// + // //INDEXING + // // + // private async Task ScheduledUserSearchIndexAsync(WorkOrderItemScheduledUser obj, bool isNew) + // { + // //SEARCH INDEXING + // var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemScheduledUser); + // SearchParams.AddText(obj.).AddText(obj.Tags).AddCustomFields(obj.CustomFields); - public async Task ScheduledUserGetSearchResultSummary(long id) - { - var obj = await ct.WorkOrderItemScheduledUser.SingleOrDefaultAsync(z => z.Id == id); - var SearchParams = new Search.SearchIndexProcessObjectParameters(); - if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); - return SearchParams; - } - #endregion work order item LABOR level + // if (isNew) + // await Search.ProcessNewObjectKeywordsAsync(SearchParams); + // else + // await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams); + // } + + // public async Task ScheduledUserGetSearchResultSummary(long id) + // { + // var obj = await ct.WorkOrderItemScheduledUser.SingleOrDefaultAsync(z => z.Id == id); + // var SearchParams = new Search.SearchIndexProcessObjectParameters(); + // if (obj != null) + // SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + // return SearchParams; + // } + #endregion work order item SCHEDULED USER level /* @@ -2035,13 +2239,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemTask.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemTask, AyaEvent.Created), ct); await TaskSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -2059,7 +2263,7 @@ namespace AyaNova.Biz //docs say this will not query twice but will recognize the duplicate woitem bit which is required for multiple grandchild collections var ret = await ct.WorkOrderItemTask - .SingleOrDefaultAsync(z => z.Id == id); + .SingleOrDefaultAsync(z => z.Id == id);//FIX asnotracking if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, AyaType.WorkOrderItemTask, AyaEvent.Retrieved), ct); return ret; @@ -2079,11 +2283,11 @@ namespace AyaNova.Biz // make a snapshot of the original for validation but update the original to preserve workflow WorkOrderItemTask SnapshotOfOriginalDBObj = new WorkOrderItemTask(); - CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); + CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);//FIX not using copyobject anymore CopyObject.Copy(dtPutObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + //dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + //dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await TaskValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -2102,7 +2306,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemTask, AyaEvent.Modified), ct); await TaskSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + // await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -2122,7 +2326,7 @@ namespace AyaNova.Biz //Log event await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemTask, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemTask, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + //await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -2153,7 +2357,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -2182,7 +2386,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemTask); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Task);//some are manually entered so this is worthwhile for that at least, also I guess predefined tasks that are more rare if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -2195,10 +2399,10 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemTask.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Task); return SearchParams; } - #endregion work order item LABOR level + #endregion work order item TASK level /* @@ -2228,13 +2432,13 @@ namespace AyaNova.Biz return null; else { - newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); - newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); + //newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); + //newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); await ct.WorkOrderItemTravel.AddAsync(newObject); await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderItemTravel, AyaEvent.Created), ct); await TravelSearchIndexAsync(newObject, true); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); return newObject; } @@ -2252,7 +2456,7 @@ namespace AyaNova.Biz //docs say this will not query twice but will recognize the duplicate woitem bit which is required for multiple grandchild collections var ret = await ct.WorkOrderItemTravel - .SingleOrDefaultAsync(z => z.Id == id); + .SingleOrDefaultAsync(z => z.Id == id);//FIX asnotracking if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, AyaType.WorkOrderItemTravel, AyaEvent.Retrieved), ct); return ret; @@ -2273,10 +2477,10 @@ namespace AyaNova.Biz // make a snapshot of the original for validation but update the original to preserve workflow WorkOrderItemTravel SnapshotOfOriginalDBObj = new WorkOrderItemTravel(); CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); - CopyObject.Copy(dtPutObject, dbObject, "Id"); + CopyObject.Copy(dtPutObject, dbObject, "Id");//FIX outdated method - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + //dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); ct.Entry(dbObject).OriginalValues["Concurrency"] = dtPutObject.Concurrency; await TravelValidateAsync(dbObject, SnapshotOfOriginalDBObj); @@ -2295,7 +2499,7 @@ namespace AyaNova.Biz } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, AyaType.WorkOrderItemTravel, AyaEvent.Modified), ct); await TravelSearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + //await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); return dbObject; } @@ -2315,7 +2519,7 @@ namespace AyaNova.Biz //Log event await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItemTravel, dbObject.Id, "woitem:" + dbObject.WorkOrderItemId.ToString(), ct); await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItemTravel, ct); - await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + // await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); await HandlePotentialNotificationEvent(AyaEvent.Deleted, dbObject); return true; @@ -2346,7 +2550,7 @@ namespace AyaNova.Biz RequiredFieldsValidator.Validate(this, FormCustomization, proposedObj);//note: this is passed only to add errors //validate custom fields - CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); + //CustomFieldsValidator.Validate(this, FormCustomization, proposedObj.CustomFields); } } @@ -2375,7 +2579,7 @@ namespace AyaNova.Biz { //SEARCH INDEXING var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, AyaType.WorkOrderItemTravel); - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Notes).AddText(obj.TravelDetails); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); @@ -2388,7 +2592,7 @@ namespace AyaNova.Biz var obj = await ct.WorkOrderItemTravel.SingleOrDefaultAsync(z => z.Id == id); var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) - SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); + SearchParams.AddText(obj.Notes).AddText(obj.TravelDetails); return SearchParams; } #endregion work order item LABOR level @@ -2463,7 +2667,6 @@ namespace AyaNova.Biz return null; } - // make a snapshot of the original for validation but update the original to preserve workflow WorkOrderItemUnit SnapshotOfOriginalDBObj = new WorkOrderItemUnit(); CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dtPutObject, dbObject, "Id"); @@ -2578,7 +2781,7 @@ namespace AyaNova.Biz public async Task UnitGetSearchResultSummary(long id) { - var obj = await ct.WorkOrderItemUnit.SingleOrDefaultAsync(z => z.Id == id); + var obj = await ct.WorkOrderItemUnit.SingleOrDefaultAsync(z => z.Id == id);//FIX sb asnotracking (all others too I'm guessing) var SearchParams = new Search.SearchIndexProcessObjectParameters(); if (obj != null) SearchParams.AddText(obj.Notes).AddText(obj.Tags).AddCustomFields(obj.CustomFields); @@ -2694,7 +2897,7 @@ namespace AyaNova.Biz return await TravelDeleteAsync(id); case AyaType.WorkOrderItemUnit: return await UnitDeleteAsync(id); - case AyaType.WorkOrderItemOutsideService: + case AyaType.WorkOrderItemOutsideService: return await OutsideServiceDeleteAsync(id); default: throw new System.ArgumentOutOfRangeException($"WorkOrder::GetWorkOrderGraphItem -> Invalid ayaType{ayaType}");