From 71958d474ae514c9330a8ed2fdcffebe6e200dc0 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 8 Jan 2021 15:47:22 +0000 Subject: [PATCH] --- .../CustomerServiceRequestController.cs | 46 ++++++++++ .../AyaNova/biz/CustomerServiceRequestBiz.cs | 83 +++++++++++++++++++ server/AyaNova/biz/WorkOrderBiz.cs | 27 ++++++ server/AyaNova/models/WorkOrder.cs | 3 + 4 files changed, 159 insertions(+) diff --git a/server/AyaNova/Controllers/CustomerServiceRequestController.cs b/server/AyaNova/Controllers/CustomerServiceRequestController.cs index 332cc57c..7664a4b0 100644 --- a/server/AyaNova/Controllers/CustomerServiceRequestController.cs +++ b/server/AyaNova/Controllers/CustomerServiceRequestController.cs @@ -150,6 +150,52 @@ namespace AyaNova.Api.Controllers } + /// + /// Reject CustomerServiceRequest + /// + /// Source object id + /// From route path + /// CustomerServiceRequest + [HttpPost("reject/{id}")] + public async Task RejectCustomerServiceRequest([FromRoute] long id, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + CustomerServiceRequestBiz biz = CustomerServiceRequestBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + CustomerServiceRequest o = await biz.RejectAsync(id); + if (o == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return CreatedAtAction(nameof(CustomerServiceRequestController.GetCustomerServiceRequest), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + } + + /// + /// Accept CustomerServiceRequest + /// + /// Source object id + /// Existing WorkOrder to accept to, if left empty creates new workorder + /// From route path + /// CustomerServiceRequest with WorkOrderItemId set + [HttpPost("accept/{id}/{workorderid}")] + public async Task AcceptCustomerServiceRequest([FromRoute] long id, [FromRoute] long? workorderid, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + CustomerServiceRequestBiz biz = CustomerServiceRequestBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + CustomerServiceRequest o = await biz.AcceptAsync(id, workorderid); + if (o == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return CreatedAtAction(nameof(CustomerServiceRequestController.GetCustomerServiceRequest), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + } diff --git a/server/AyaNova/biz/CustomerServiceRequestBiz.cs b/server/AyaNova/biz/CustomerServiceRequestBiz.cs index ada92bdf..22b70bce 100644 --- a/server/AyaNova/biz/CustomerServiceRequestBiz.cs +++ b/server/AyaNova/biz/CustomerServiceRequestBiz.cs @@ -184,6 +184,89 @@ namespace AyaNova.Biz + //////////////////////////////////////////////////////////////////////////////////////////////// + //ACCEPT + // + internal async Task AcceptAsync(long csrId, long? workorderId) //MIGRATE_OUTSTANDING waiting for workorder to be completed or at least have a customerid which it currently doesn't + { + CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == csrId); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return null; + } + + throw new System.NotImplementedException("//MIGRATE_OUTSTANDING CustomerServiceRequestBiz::AcceptAsync - awaiting workorder completion "); + + // WorkOrder w=null; + // if(workorderId==null){ + // w=WorkOrderBiz.; + // } + + // CustomerServiceRequest SnapshotOfOriginalDBObj = new CustomerServiceRequest(); + // CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); + // CopyObject.Copy(putObject, dbObject, "Id"); + // dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); + // dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); + // ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency; + // await ValidateAsync(dbObject, SnapshotOfOriginalDBObj); + // if (HasErrors) return null; + // try + // { + // await ct.SaveChangesAsync(); + // } + // catch (DbUpdateConcurrencyException) + // { + // if (!await ExistsAsync(putObject.Id)) + // AddError(ApiErrorCode.NOT_FOUND); + // else + // AddError(ApiErrorCode.CONCURRENCY_CONFLICT); + // return null; + // } + // await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); + // await SearchIndexAsync(dbObject, false); + // await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + // await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); + //return dbObject; + } + + //////////////////////////////////////////////////////////////////////////////////////////////// + //REJECT + // + internal async Task RejectAsync(long csrId) + { + CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == csrId); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return null; + } + CustomerServiceRequest SnapshotOfOriginalDBObj = new CustomerServiceRequest(); + CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); + dbObject.Status = CustomerServiceRequestStatus.Declined; + await ValidateAsync(dbObject, SnapshotOfOriginalDBObj); + if (HasErrors) return null; + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await ExistsAsync(dbObject.Id)) + AddError(ApiErrorCode.NOT_FOUND); + else + AddError(ApiErrorCode.CONCURRENCY_CONFLICT); + return null; + } + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); + await SearchIndexAsync(dbObject, false); + await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); + await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); + return dbObject; + } + + + //////////////////////////////////////////////////////////////////////////////////////////////// //SEARCH // diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 702d0818..25a336bf 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -247,6 +247,33 @@ namespace AyaNova.Biz } + +// //////////////////////////////////////////////////////////////////////////////////////////////// +// //GENERATE +// // +// internal async Task GenerateWorkOrderAsync(long customerId)//MIGRATE_OUTSTANDING will need more overloads as required and fleshing out later +// { +// WorkOrder newObject = new WorkOrder(); +// newObject. +// await WorkOrderValidateAsync(newObject, null); +// if (HasErrors) +// return null; +// else +// { +// newObject.Tags = TagBiz.NormalizeTags(newObject.Tags); +// newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields); +// await ct.WorkOrder.AddAsync(newObject); +// await ct.SaveChangesAsync(); +// await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct); +// await WorkOrderSearchIndexAsync(newObject, true); +// await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null); +// await HandlePotentialNotificationEvent(AyaEvent.Created, newObject); +// return newObject; +// } +// } + + + //////////////////////////////////////////////////////////////////////////////////////////////// //RESTART SERIAL // diff --git a/server/AyaNova/models/WorkOrder.cs b/server/AyaNova/models/WorkOrder.cs index 544a7cfa..c0e6df28 100644 --- a/server/AyaNova/models/WorkOrder.cs +++ b/server/AyaNova/models/WorkOrder.cs @@ -58,6 +58,9 @@ todo: Consider adding latitude / longitude to wo, quote, pm objects public string CustomFields { get; set; } public List Tags { get; set; } + // [Required] + // public long CustomerId {get;set;} + //dependents public List Items { get; set; }