private async Task HandleCustomType(WorkOrder workOrder, JobStatusUpdate update)
        {
            switch (update.OtherType)
            {
            case CustomJobStatusUpdates.Completed:
                await VerifyCanComplete(workOrder);

                await _repairsGateway.UpdateWorkOrderStatus(workOrder.Id, WorkStatusCode.Complete);

                var prefix = Resources.WorkOrderCompletedPrefix;
                if (update.EventTime != null)
                {
                    prefix += $"{update.EventTime:dd MMMM yyyy HH:mm} ";
                }
                update.PrefixComments(prefix);
                update.EventTime = DateTime.Now;
                await _notifier.Notify(new WorkOrderCompleted(workOrder, update));

                break;

            case CustomJobStatusUpdates.Cancelled:
                VerifyCanCancel(workOrder);

                update.PrefixComments(Resources.WorkOrderCancelledPrefix);
                await _repairsGateway.UpdateWorkOrderStatus(workOrder.Id, WorkStatusCode.Canceled);

                await _notifier.Notify(new WorkOrderCancelled(workOrder));

                break;

            default: throw new NotSupportedException(Resources.UnsupportedWorkOrderUpdate);
            }
        }
Example #2
0
        public async Task Execute(JobStatusUpdate jobStatusUpdate)
        {
            WorkOrder workOrder = jobStatusUpdate.RelatedWorkOrder;

            workOrder.VerifyCanVary();

            var workElement = jobStatusUpdate.MoreSpecificSORCode;

            await AddCodeCosts(workElement.RateScheduleItem, workOrder.AssignedToPrimary?.ContractorReference);

            // check the user has the require vary spend limit
            var authorised = await _authorizationService.AuthorizeAsync(_currentUserService.GetUser(), jobStatusUpdate, "VarySpendLimit");

            if (await _featureManager.IsEnabledAsync(FeatureFlags.SpendLimits) && !authorised.Succeeded)
            {
                workOrder.StatusCode     = WorkStatusCode.VariationPendingApproval;
                jobStatusUpdate.TypeCode = JobStatusUpdateTypeCode.ContractManagerApprovalNeeded_180;
                await _notifier.Notify(new HighCostVariationCreated(workOrder));
            }
            else
            {
                await _updateSorCodesUseCase.Execute(workOrder, workElement.DeepClone());
            }

            jobStatusUpdate.PrefixComments(Resources.VariationReason);
        }
        public async Task Execute(JobStatusUpdate jobStatusUpdate)
        {
            var workOrder = jobStatusUpdate.RelatedWorkOrder;

            workOrder.VerifyCanRejectWorkOrder();

            if (!_currentUserService.HasGroup(UserGroups.AuthorisationManager))
            {
                throw new UnauthorizedAccessException(Resources.InvalidPermissions);
            }

            workOrder.StatusCode = WorkStatusCode.Canceled;
            jobStatusUpdate.PrefixComments(Resources.WorkOrderAuthorisationRejected);

            await _notifier.Notify(new WorkOrderRejected(workOrder));
        }
Example #4
0
        public async Task Execute(JobStatusUpdate jobStatusUpdate)
        {
            var workOrder = jobStatusUpdate.RelatedWorkOrder;

            workOrder.VerifyCanRejectVariation();

            if (!_currentUserService.HasGroup(UserGroups.ContractManager))
            {
                throw new UnauthorizedAccessException(Resources.InvalidPermissions);
            }

            var variationJobStatus = await _jobStatusUpdateGateway.GetOutstandingVariation(workOrder.Id);

            workOrder.StatusCode = WorkStatusCode.VariationRejected;
            jobStatusUpdate.PrefixComments(Resources.RejectedVariationPrepend);

            await _notifier.Notify(new VariationRejected(variationJobStatus, jobStatusUpdate));

            await _repairsGateway.SaveChangesAsync();
        }