Esempio n. 1
0
        public async Task <ActionResult> ScanAnalysisCreate(ScanAnalysisViewModel scanAnalysis)
        {
            try
            {
                // Create Request.
                var request = new RepairRequestScanViewModel
                {
                    RequestTypeID         = 7,
                    RequestTypeCategoryId = 1,
                    ProblemDescription    = "Scan Analysis"
                };

                // Create.
                var newRequestId = await QuickRequestSave(scanAnalysis, request);

                // Update Scan Queue.
                var messenger = new ScanRequestHubMessenger();
                await messenger.NotifyScanCreated(newRequestId);
            }
            catch (Exception e)
            {
                Logger.LogException(e);

                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Message));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
Esempio n. 2
0
        public async Task <ActionResult> SubmitRequestScan(RepairRequestScanViewModel scanRequest)
        {
            // Create Scan Request.
            if (ModelState.IsValid)
            {
                var newRequestId = await RepairLib.CreateScanRequest(scanRequest);

                if (newRequestId > 0)
                {
                    // Scan Created.
                    TempData["RepairNotice"] = "Scan Request Created!";

                    // Update Technician Dashboard.
                    await new ClientHubMessenger().ScanRequestCreated(newRequestId)
                    .ConfigureAwait(continueOnCapturedContext: false);

                    var messenger = new ScanRequestHubMessenger();
                    await messenger.NotifyScanCreated(newRequestId);

                    // Send to Dashboard.
                    return(RedirectToAction("Dashboard"));
                }
            }

            // Not Created.
            TempData["RepairNotice"] = "Scan Request NOT Created! (Do you have an open scan request?)";

            PopulateRequestScanActionViewBag(scanRequest.OrderId);

            return(View("RequestScan", scanRequest));
        }
Esempio n. 3
0
        public async Task <ActionResult> RequestScan(int?id)
        {
            var repair = PopulateRequestScanActionViewBag(id.Value);

            if (repair == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (repair.Status != RepairStatuses.Active)
            {
                return(View("RepairClosed"));
            }

            // Load Position Statements.
            var args = new ServiceArgs
            {
                { "UploadTypeId", (int)UploadType.VehicleMakes },
                { "UploadKey", repair.Vehicle.VehicleMakeId }
            };
            var positionStatements = Factory.GetDisplayList <IUploadDto>(args);

            var request = new RepairRequestScanViewModel
            {
                OrderId = id.Value,
                PositionStatementLinks = positionStatements.ToList()
            };

            PopulateToolId(request);

            ViewBag.RequestTypesInstructions = (await Factory.GetAllAsync <IRequestTypeDto>())
                                               .Select(t => new { RequestTypeId = t.RequestTypeId.ToString(), t.Instructions }).ToList();

            return(View("RequestScan", request));
        }
Esempio n. 4
0
        private void PopulateToolId(RepairRequestScanViewModel request)
        {
            var airProTools = ((IEnumerable <KeyValuePair <string, string> >)ViewBag.AirProTools);

            if (airProTools.Count() == 1)
            {
                request.ToolId = int.Parse(airProTools.FirstOrDefault().Key);
            }
        }
Esempio n. 5
0
        private async Task <int> QuickRequestSave(IQuickRequest quickRequest, RepairRequestScanViewModel repairRequest)
        {
            var requestId = 0;

            try
            {
                // Check Vehicle Entry.
                if (quickRequest.VehicleMakeId > 0)
                {
                    // Create Vehicle Model.
                    var vehicle = new VehicleViewModel
                    {
                        VehicleVIN          = quickRequest.VehicleVIN,
                        VehicleMakeId       = quickRequest.VehicleMakeId,
                        VehicleModel        = quickRequest.VehicleModel,
                        VehicleYear         = quickRequest.VehicleYear,
                        VehicleTransmission = quickRequest.VehicleTransmission
                    };

                    // Update Vehicle.
                    Factory.Save((IVehicleDto)vehicle);
                }

                // Check Repair.
                OrderEntityModel repair;
                var repairs = Db.RepairOrders.Where(o => o.ShopGuid == quickRequest.ShopGuid && o.VehicleVIN == quickRequest.VehicleVIN && o.Status == RepairStatuses.Active).ToList();
                if (repairs.Count == 1)
                {
                    // Load Repair.
                    repair = repairs.First();

                    await RepairLib.UpdateRepairOrder(new RepairEditViewModel
                    {
                        ShopGuid            = quickRequest.ShopGuid,
                        RepairOrderID       = repair.OrderId,
                        ShopReferenceNumber = quickRequest.ShopReferenceNumber,
                        InsuranceCompany    = new InsuranceCompanyEntityModel
                        {
                            InsuranceCompanyId = quickRequest.InsuranceCompanyId
                        },
                        InsuranceCompanyOther = quickRequest.InsuranceCompanyOther,
                        Odometer                 = quickRequest.Odometer,
                        AirBagsDeployed          = quickRequest.AirBagsDeployed,
                        AirBagsVisualDeployments = quickRequest.AirBagsVisualDeployments,
                        DrivableInd              = quickRequest.DrivableInd,
                        ImpactPoints             = quickRequest.ImpactPoints
                    });
                }
                else
                {
                    // Create Repair.
                    repair = new OrderEntityModel
                    {
                        ShopGuid                 = quickRequest.ShopGuid,
                        VehicleVIN               = quickRequest.VehicleVIN,
                        ShopReferenceNumber      = quickRequest.ShopReferenceNumber,
                        InsuranceCompanyId       = quickRequest.InsuranceCompanyId,
                        InsuranceCompanyOther    = quickRequest.InsuranceCompanyOther,
                        Odometer                 = quickRequest.Odometer,
                        AirBagsDeployed          = quickRequest.AirBagsDeployed,
                        AirBagsVisualDeployments = quickRequest.AirBagsVisualDeployments,
                        DrivableInd              = quickRequest.DrivableInd,
                        ImpactPoints             = quickRequest.ImpactPoints
                    };
                    await RepairLib.CreateRepairOrder(repair);
                }

                // Update Request.
                repairRequest.OrderId = repair.OrderId;
                repairRequest.ContactOtherFirstName = quickRequest.ContactOtherFirstName;
                repairRequest.ContactOtherLastName  = quickRequest.ContactOtherLastName;
                repairRequest.ContactOtherPhone     = quickRequest.ContactOtherPhone;
                repairRequest.ContactUserGuid       = quickRequest.ContactUserGuid;
                if (repairRequest.RequestTypeID == 0)
                {
                    repairRequest.RequestTypeID = 6; // Self Scan if Null.
                }
                if (repairRequest.RequestTypeCategoryId == 0)
                {
                    repairRequest.RequestTypeCategoryId = 1; // Pre Request if Null.
                }
                // Save Request.
                requestId = await RepairLib.CreateScanRequest(repairRequest);

                // Check Result Id.
                if (quickRequest.DiagnosticResultId.HasValue)
                {
                    // Load Diagnostic.
                    var diag = Factory.GetById <IDiagnosticResultDto>(quickRequest.DiagnosticResultId.Value.ToString());

                    // Create Update.
                    diag.RequestId = requestId;

                    // Save Update.
                    Factory.Save(diag);
                }
                else
                {
                    // Upload File.
                    if (Request?.Files[0] != null)
                    {
                        // Parse Upload File.
                        var diag = DiagnosticFileParser.ParseFile(Request.Files[0].InputStream,
                                                                  DiagnosticTool.AutoEnginuity,
                                                                  DiagnosticFileType.XML);

                        // Assign Request.
                        diag.RequestId = requestId;

                        // Save Result.
                        diag = Factory.Save(diag);

                        // Update Result Id.
                        quickRequest.DiagnosticResultId = diag.ResultId;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.LogException(e, new { quickRequest, repairRequest });
            }

            return(requestId);
        }
Esempio n. 6
0
        public async Task <ActionResult> SelfScanCreate(SelfScanViewModel selfScan)
        {
            try
            {
                // Create Request.
                var request = new RepairRequestScanViewModel
                {
                    RequestTypeID         = 6,
                    ProblemDescription    = "Self Scan",
                    RequestTypeCategoryId = selfScan.CategoryId,
                    SeatRemovedInd        = selfScan.SeatRemovedInd
                };

                // Create Request.
                var requestId = await QuickRequestSave(selfScan, request);

                // Load Report.
                var report = Factory.GetById <IReportDto>(requestId.ToString());

                // Generate Report Html.
                if (report != null && selfScan.DiagnosticResultId.HasValue)
                {
                    // Set Diagnostic.
                    report.DiagnosticResultSelections = new List <IReportDiagnosticResultSelectionItemDto>
                    {
                        new ReportDiagnosticResultSelectionItemViewModel
                        {
                            ResultId             = selfScan.DiagnosticResultId.Value,
                            AssignedToRequestInd = true,
                            SelectedForReportInd = true
                        }
                    };

                    // Set User.
                    report.ResponsibleTechUserId = Factory.User.UserGuid;

                    // Set Header.
                    report.ReportHeaderHTML = "Self Scan Report<br/>";

                    if (selfScan.IsAssistedScanRecommended)
                    {
                        report.ReportHeaderHTML += "<b style='color:red;'>All modules were not read on this Vehicle, recommend an Assisted Scan be performed.</b><br/>";
                    }

                    // Complete Report.
                    report.CompleteReport = true;

                    // Save Report.
                    Factory.Save(report);

                    // Create Notification Tasks.
                    var notifications = new List <Task>();

                    // Generate Notifications.
                    using (var queue = new MessageQueue())
                    {
                        notifications.Add(queue.AddNotificationQueueMessageAsync(NotificationTemplate.ShopReportEmail, report.RequestId, Factory.User.UserGuid));
                        notifications.Add(queue.AddMitchellReportQueueMessageAsync(report.RequestId, Factory.User.UserGuid));
                    }

                    // Open Connection.
                    using (var conn = new SqlConnection(MvcApplication.ConnectionString))
                    {
                        // Get Repair Id.
                        var repairId = await conn.QueryFirstOrDefaultAsync <int>("Repair.usp_CloseRepairByRequestId",
                                                                                 new { report.RequestId }, null, null, CommandType.StoredProcedure);

                        // Check Repair.
                        if (repairId > 0)
                        {
                            // Close Repair.
                            if (await Factory.DeleteAsync <IRepairDto>(repairId.ToString()))
                            {
                                // Send Notifications.
                                var clientMessenger = new ClientHubMessenger();
                                notifications.Add(clientMessenger.RepairCompleted());
                            }
                        }
                    }

                    // Execute Notifications.
                    await Task.WhenAll(notifications.ToArray());
                }
            }
            catch (Exception e)
            {
                Logger.LogException(e);

                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Message));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }