public async Task <IHttpActionResult> GetCurrentUserMobileCustomerClientIncidentStatusRequest()
        {
            // Get the logged-in user.
            var currentUser = this.User as ServiceUser;

            Services.Log.Info("Current User Mobile Customer Current Incident Status Request [API]");

            if (currentUser.Id != null)
            {
                stranddContext context = new stranddContext();
                Incident       accountincidentcheck = await context.Incidents
                                                      .Where(b => b.StatusCode != "CANCELLED" && b.StatusCode != "DECLINED" && b.StatusCode != "COMPLETED" && b.StatusCode != "FAILED")
                                                      .Where(c => c.ProviderUserID == currentUser.Id)
                                                      .SingleOrDefaultAsync();

                if (accountincidentcheck == null)
                {
                    return(NotFound());
                }
                else
                {
                    IncidentStatusRequest generatedStatusRequest = new IncidentStatusRequest(accountincidentcheck.Id);
                    //Return Successful Response
                    Services.Log.Info("Current User Mobile Customer Current Incident Status Request Generated and Returned [API]");
                    return(Ok(generatedStatusRequest));
                }
            }
            else
            {
                return(NotFound());
            }
        }
示例#2
0
        public async Task <IncidentStatusRequest> GetMobileCustomerClientIncidentStatusRequest(string incidentGUID)
        {
            Services.Log.Info("Mobile Customer Current Incident [" + incidentGUID + "] Status Request [HUB]");

            IncidentStatusRequest generatedStatusRequest = new IncidentStatusRequest(incidentGUID);

            //Return Successful Response
            Services.Log.Info("Incident Status Request Generated and Returned [HUB]");
            return(generatedStatusRequest);
        }
        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));
            }
        }
示例#4
0
        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);
        }
        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> 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));
        }