public async Task<IHttpActionResult> GetMobileCustomerClientIncidentStatusRequest(string incidentGUID) { Services.Log.Info("Mobile Customer Current Incident [" + incidentGUID + "] Status Request [API]"); IncidentStatusRequest generatedStatusRequest = new IncidentStatusRequest(incidentGUID); //Return Successful Response Services.Log.Info("Incident Status Request Generated and Returned [API]"); return Ok(generatedStatusRequest); }
public static void ProcessStatusRequestBehavior(IncidentStatusRequest statusRequest, Incident updateIncident, ApiServices Services) { IHubContext hubContext = Services.GetRealtime<IncidentHub>(); switch (updateIncident.StatusCode) { case "PROVER-FOUND": //Notify Particular Connected User through SignalR hubContext.Clients.Group(updateIncident.ProviderUserID).updateMobileClientStatus(statusRequest.GetCustomerPushObject()); Services.Log.Info("Mobile Client [" + updateIncident.ProviderUserID + "] Status Update Payload Sent"); //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusAdmin(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); RevokeProviderJobs(updateIncident, Services); Services.Log.Info("Provider Jobs Revoked"); break; case "ARRIVED": //Notify Particular Connected User through SignalR hubContext.Clients.Group(updateIncident.ProviderUserID).updateMobileClientStatus(statusRequest.GetCustomerPushObject()); Services.Log.Info("Mobile Client [" + updateIncident.ProviderUserID + "] Status Update Payload Sent"); //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusAdmin(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); SendGridController.SendCurrentIncidentInvoiceEmail(updateIncident, Services); break; case "COMPLETED": //Notify Particular Connected User through SignalR hubContext.Clients.Group(updateIncident.ProviderUserID).updateMobileClientStatus(statusRequest.GetCustomerPushObject()); Services.Log.Info("Mobile Client [" + updateIncident.ProviderUserID + "] Status Update Payload Sent"); //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusAdmin(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); break; case "DECLINED": //Notify Particular Connected User through SignalR hubContext.Clients.Group(updateIncident.ProviderUserID).updateMobileClientStatus(statusRequest.GetCustomerPushObject()); Services.Log.Info("Mobile Client [" + updateIncident.ProviderUserID + "] Status Update Payload Sent"); //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusAdmin(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); RevokeProviderJobs(updateIncident, Services); Services.Log.Info("Provider Jobs Revoked"); break; case "CANCELLED": //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusCustomerCancel(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); RevokeProviderJobs(updateIncident, Services); Services.Log.Info("Provider Jobs Revoked"); break; default: //Notify Particular Connected User through SignalR hubContext.Clients.Group(updateIncident.ProviderUserID).updateMobileClientStatus(statusRequest.GetCustomerPushObject()); Services.Log.Info("Mobile Client [" + updateIncident.ProviderUserID + "] Status Update Payload Sent"); //Notifying Connect WebClients with IncidentInfo Package hubContext.Clients.All.updateIncidentStatusAdmin(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); break; } }
public async Task<HttpResponseMessage> CustomerCancel(IncidentStatusRequest statusRequest) { Services.Log.Info("Incident Cancellation Request [API]"); string responseText; // Get the logged-in user. var currentUser = this.User as ServiceUser; stranddContext context = new stranddContext(); //Retrieve Incident Incident updateIncident = await (from r in context.Incidents where (r.Id == statusRequest.IncidentGUID) select r).FirstOrDefaultAsync(); //Find the Incident to Cancel and return Bad Response if not found if (updateIncident == null) { // Return Failed Response responseText = "Incident [" + statusRequest.IncidentGUID + "] is not found in the system"; Services.Log.Warn(responseText); return this.Request.CreateResponse(HttpStatusCode.BadRequest, responseText); } else { updateIncident.StatusCode = "CANCELLED"; updateIncident.StatusCustomerConfirm = true; updateIncident.StatusProviderConfirm = false; //Save record await context.SaveChangesAsync(); responseText = "Incident [" + updateIncident.Id + "] Cancelled by Customer"; Services.Log.Info(responseText); //Notifying Connect WebClients with IncidentInfo Package IHubContext hubContext = Services.GetRealtime<IncidentHub>(); hubContext.Clients.All.updateIncidentStatusCustomerCancel(new IncidentInfo(updateIncident)); Services.Log.Info("Connected Clients Updated"); await HistoryEvent.logHistoryEventAsync("INCIDENT_CANCEL_CUSTOMER", null, updateIncident.Id, null, currentUser.Id, null); //Return Successful Response return this.Request.CreateResponse(HttpStatusCode.OK, responseText); } }
public async Task<HttpResponseMessage> UpdateStatus(IncidentStatusRequest statusRequest) { Services.Log.Info("Incident Status Update Request [API]"); string responseText; stranddContext context = new stranddContext(); //Retrieve Incident Incident updateIncident = await (from r in context.Incidents where (r.Id == statusRequest.IncidentGUID) select r).FirstOrDefaultAsync(); //Find the Incident to Edit and return Bad Response if not found if (updateIncident != null) { //Check for Submitted Status and Update if (statusRequest.NewStatusCode != null) { updateIncident.StatusCode = statusRequest.NewStatusCode; updateIncident.StatusCustomerConfirm = false; updateIncident.StatusProviderConfirm = false; } //Check for Submitted Pricing and Update if (statusRequest.ServiceFee != 0) { updateIncident.ServiceFee = statusRequest.ServiceFee; } //Check if ETA and Save Arrival Time if (statusRequest.ETA != 0) { if (statusRequest.NewStatusCode == "ARRIVED") { updateIncident.ProviderArrivalTime = System.DateTime.Now; } else { DateTimeOffset? priorETA = updateIncident.ProviderArrivalTime; updateIncident.ProviderArrivalTime = System.DateTime.Now.AddMinutes(statusRequest.ETA); if (priorETA != null) { DateTimeOffset compareETA = (DateTimeOffset)priorETA; compareETA = compareETA.AddMinutes(Convert.ToInt32(WebConfigurationManager.AppSettings["RZ_DelayMinuteBuffer"])); if (DateTimeOffset.Compare(compareETA, (DateTimeOffset)updateIncident.ProviderArrivalTime) < 0) { statusRequest.Delayed = true; } } } } } else { // Return Failed Response responseText = "Incident [" + statusRequest.IncidentGUID + "] is not found in the system"; Services.Log.Warn(responseText); return this.Request.CreateResponse(HttpStatusCode.BadRequest, responseText); } //Save record await context.SaveChangesAsync(); responseText = "Incident [" + updateIncident.Id + "] Status Updated" + " to Code [" + updateIncident.StatusCode + "]"; Services.Log.Info(responseText); ProcessStatusRequestBehavior(statusRequest, updateIncident, Services); //Return Successful Response return this.Request.CreateResponse(HttpStatusCode.OK, responseText); }
public async Task<string> UpdateStatus(IncidentStatusRequest statusRequest) { Services.Log.Info("Incident Status Update Request [Hub]"); string responseText; var currentUserID = ((ServiceUser)Context.User).Id; stranddContext context = new stranddContext(); //Retrieve Incident Incident updateIncident = await (from r in context.Incidents where (r.Id == statusRequest.IncidentGUID) select r).FirstOrDefaultAsync(); //Find the Incident to Edit and return Bad Response if not found if (updateIncident != null) { //Check for Submitted Status and Update if (statusRequest.NewStatusCode != null) { updateIncident.StatusCode = statusRequest.NewStatusCode; updateIncident.StatusCustomerConfirm = false; updateIncident.StatusProviderConfirm = false; } //Check for Submitted Pricing and Update if (statusRequest.ServiceFee != 0) { updateIncident.ServiceFee = statusRequest.ServiceFee; } //Check if ETA and Save Arrival Time if (statusRequest.ETA != 0) { if (statusRequest.NewStatusCode == "ARRIVED") { updateIncident.ProviderArrivalTime = System.DateTime.Now; } else { DateTimeOffset? priorETA = updateIncident.ProviderArrivalTime; updateIncident.ProviderArrivalTime = System.DateTime.Now.AddMinutes(statusRequest.ETA); if (priorETA != null) { DateTimeOffset compareETA = (DateTimeOffset)priorETA; compareETA = compareETA.AddMinutes(Convert.ToInt32(WebConfigurationManager.AppSettings["RZ_DelayMinuteBuffer"])); if (DateTimeOffset.Compare(compareETA, (DateTimeOffset)updateIncident.ProviderArrivalTime) < 0) { statusRequest.Delayed = true; } } } } } else { // Return Failed Response responseText = "Incident not found [" + statusRequest.IncidentGUID + "] in the system"; Services.Log.Warn(responseText); return responseText; } //Save record await context.SaveChangesAsync(); Services.Log.Info("Incident [" + updateIncident.Id + "] Status Updated" + " to Code: " + updateIncident.StatusCode); await HistoryEvent.logHistoryEventAsync("INCIDENT_STATUS_ADMIN", updateIncident.StatusCode, updateIncident.Id, currentUserID, null, null); IncidentController.ProcessStatusRequestBehavior(statusRequest, updateIncident, Services); //Return Successful Response responseText = "Status Updated"; return responseText; }