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; }