From bfab9fcb9fb3e6d7d60c243679a41437366effcc Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Sat, 9 May 2020 18:22:45 +0000 Subject: [PATCH] --- server/AyaNova/biz/WorkOrderBiz.cs | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 13fe5f95..4a6f724a 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -638,6 +638,46 @@ namespace AyaNova.Biz return ret; } + //////////////////////////////////////////////////////////////////////////////////////////////// + //UPDATE + // + internal async Task PartPutAsync(WorkOrderItemPart dtPutObject) + { + WorkOrderItemPart dbObject = await ct.WorkOrderItemPart.SingleOrDefaultAsync(m => m.Id == dtPutObject.Id); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return null; + } + + // make a snapshot of the original for validation but update the original to preserve workflow + WorkOrderItemPart SnapshotOfOriginalDBObj = new WorkOrderItemPart(); + CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); + CopyObject.Copy(dtPutObject, dbObject, "Id"); + + dbObject.Tags = TagUtil.NormalizeTags(dbObject.Tags); + dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + + ct.Entry(dbObject).OriginalValues["ConcurrencyToken"] = dtPutObject.ConcurrencyToken; + await PartValidateAsync(dbObject, SnapshotOfOriginalDBObj); + if (HasErrors) return null; + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await PartExistsAsync(dtPutObject.Id)) + AddError(ApiErrorCode.NOT_FOUND); + else + new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT); + return null; + } + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); + await PartSearchIndexAsync(dbObject, false); + await TagUtil.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + return dbObject; + } //////////////////////////////////////////////////////////////////////////////////////////////// //VALIDATION