示例#1
0
 public SettlementMatterViewModel(string actionstepOrg,
                                  int matterId,
                                  int version,
                                  SettlementInfo settlementData,
                                  ActionstepMatter actionstepData = null)
 {
     ActionstepOrg  = actionstepOrg;
     MatterId       = matterId;
     Version        = version;
     SettlementData = settlementData;
     ActionstepData = actionstepData;
 }
示例#2
0
        public IEnumerable <IEvent> MatterIntegrationEvents(string orgKey, int matterId)
        {
            var aggregateId = ActionstepMatter.ConstructId(orgKey, matterId);

            return(_eventStore.GetEventsForAggregate(aggregateId));
        }
        public async Task <CreatePexaWorkspaceResponse> Handle(CreatePexaWorkspaceCommand command, CancellationToken cancellationToken)
        {
            if (command is null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            await _validator.ValidateAndThrowAsync(command);

            // Check that the user has valid Actionstep credentials for the given Actionstep Matter in Subscriber Reference
            if (!_wCADbContext.ActionstepCredentials.UserHasValidCredentialsForOrg(command.AuthenticatedUser, command.OrgKey))
            {
                throw new UnauthorizedAccessException($"User {command.AuthenticatedUser.Id} does not have valid Actionstep credentials for org {command.OrgKey} which is specified in the PEXA Subscriber Reference field.");
            }

            // Load Actionstep matter aggregate. SubscriberReference should already be in correct Aggregate Id format
            var actionstepMatter = _actionstepMatterRepository.GetById(command.PexaWorkspaceCreationRequest.SubscriberReference);

            if (actionstepMatter.Id == null)
            {
                actionstepMatter = new ActionstepMatter(_clock.GetCurrentInstant(), command.OrgKey, command.MatterId, command.AuthenticatedUser.Id);
            }

            PexaWorkspaceCreationRequested pexaWorkspaceCreationRequested = null;

            try
            {
                // Mark request for PEXA workspace creation
                pexaWorkspaceCreationRequested = actionstepMatter.RequestPexaWorkspaceCreation(_clock.GetCurrentInstant(), command.AuthenticatedUser.Id);
                _actionstepMatterRepository.Save(actionstepMatter);

                // Call PEXA and attempt to create workspace
                var workspaceCreationResponse = await _pexaService.Handle <WorkspaceCreationResponse>(
                    new WorkspaceCreationRequestCommand(command.PexaWorkspaceCreationRequest, command.AccessToken), command.AuthenticatedUser, cancellationToken);

                var urlSafeId = Uri.EscapeDataString(workspaceCreationResponse.WorkspaceId);

                if (string.IsNullOrEmpty(urlSafeId))
                {
                    throw new PexaUnexpectedErrorResponseException("PEXA Request came back successful but there was no PEXA Workspace ID.");
                }

                // If sucessful, save immediately
                actionstepMatter.MarkPexaWorkspaceCreated(_clock.GetCurrentInstant(), workspaceCreationResponse.WorkspaceId, pexaWorkspaceCreationRequested);
                _actionstepMatterRepository.Save(actionstepMatter);

                var workspaceUri  = _pexaService.GetWorkspaceUri(workspaceCreationResponse.WorkspaceId, command.PexaWorkspaceCreationRequest.Role);
                var invitationUri = _pexaService.GetInvitationUri(workspaceCreationResponse.WorkspaceId, command.PexaWorkspaceCreationRequest.Role);

                return(new CreatePexaWorkspaceResponse(workspaceUri, workspaceCreationResponse.WorkspaceId, invitationUri));
            }
            catch (PexaWorkspaceAlreadyExistsException ex)
            {
                var workspaceUri  = _pexaService.GetWorkspaceUri(ex.WorkspaceId, command.PexaWorkspaceCreationRequest.Role);
                var invitationUri = _pexaService.GetInvitationUri(ex.WorkspaceId, command.PexaWorkspaceCreationRequest.Role);
                return(new CreatePexaWorkspaceResponse(workspaceUri, ex.WorkspaceId, invitationUri, true));
            }
            catch (Exception ex)
            {
                actionstepMatter.MarkPexaWorkspaceCreationFailed(_clock.GetCurrentInstant(), ex.Message, pexaWorkspaceCreationRequested);
                _actionstepMatterRepository.Save(actionstepMatter);
                throw;
            }
        }
示例#4
0
        public Task <PEXAWorkspaceCreationRequestWithActionstepResponse> Handle(PEXAWorkspaceCreationRequestFromActionstepQuery request, CancellationToken cancellationToken)
        {
            if (request is null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            // Get Actionstep matter info
            var tokenSetQuery = new TokenSetQuery(request.AuthenticatedUser?.Id, request.ActionstepOrg);

            try
            {
                // New token refresh handling means these can run in parallel.
                var actionResponseTask = _actionstepService.Handle <GetActionResponse>(new GetActionRequest
                {
                    ActionId      = request.MatterId,
                    TokenSetQuery = tokenSetQuery
                });

                var actionParticipantsResponseTask = _actionstepService.Handle <ListActionParticipantsResponse>(new ListActionParticipantsRequest
                {
                    ActionstepId  = request.MatterId,
                    TokenSetQuery = tokenSetQuery
                });

                var dataCollectionRecordValuesResponseTask = _actionstepService.Handle <ListDataCollectionRecordValuesResponse>(new ListDataCollectionRecordValuesRequest
                {
                    ActionstepId              = request.MatterId,
                    TokenSetQuery             = tokenSetQuery,
                    DataCollectionRecordNames = { "property", "convdet", "keydates" },
                    DataCollectionFieldNames  = { "titleref", "lotno", "planno", "plantype", "smtdateonly", "smttime", "purprice", "ConveyType" }
                });

                Task.WaitAll(actionResponseTask, actionParticipantsResponseTask, dataCollectionRecordValuesResponseTask);

                // Transform Actionstep matter info into generic WCA Conveyancing Matter type
                // using specific configuration for this client (to account for Actionstep
                // action type configuration).
                var wCAConveyancingMatter = _actionstepToWCAMapper.MapFromActionstepTypes(
                    actionResponseTask.Result,
                    actionParticipantsResponseTask.Result,
                    dataCollectionRecordValuesResponseTask.Result);

                PEXAWorkspaceCreationRequestWithActionstepResponse pexaWorkspaceRequestWithActionstepData = new PEXAWorkspaceCreationRequestWithActionstepResponse
                {
                    CreatePexaWorkspaceCommand = new CreatePexaWorkspaceCommand()
                    {
                        PexaWorkspaceCreationRequest = new WorkspaceCreationRequest(),
                        OrgKey   = request.ActionstepOrg,
                        MatterId = request.MatterId
                    },
                    PexaRoleSpecified = true,
                    ActionstepData    = wCAConveyancingMatter
                };


                var landTitle = _mapper.Map <PropertyDetails, WorkspaceCreationRequestTypeLandTitleDetailsLandTitle>(wCAConveyancingMatter.PropertyDetails);

                pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.ParticipantSettlementAcceptanceStatus = "Accepted";
                pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.LandTitleDetails = new WorkspaceCreationRequestTypeLandTitleDetails();
                pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.LandTitleDetails.LandTitle.Add(landTitle);

                var actionTypeAlias = String.Empty;
                switch (wCAConveyancingMatter.ActionType)
                {
                case "Conveyancing - NSW":
                    actionTypeAlias = "NSW";
                    break;

                case "Conveyancing  - Queensland":
                    actionTypeAlias = "QLD";
                    break;

                case "Conveyancing - Victoria":
                    actionTypeAlias = "VIC";
                    break;

                default:
                    actionTypeAlias = String.Empty;
                    break;
                }

                if (!string.IsNullOrEmpty(actionTypeAlias))
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.Jurisdiction = actionTypeAlias;
                }

                if (wCAConveyancingMatter.ConveyancingType == ConveyancingType.Purchase)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.Role = PexaRole.Incoming_Proprietor;
                }
                else if (wCAConveyancingMatter.ConveyancingType == ConveyancingType.Sale)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.Role = PexaRole.Proprietor_on_Title;
                }
                else
                {
                    pexaWorkspaceRequestWithActionstepData.PexaRoleSpecified = false;
                }

                if (!string.IsNullOrEmpty(request.ActionstepOrg) && request.MatterId > 0)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.SubscriberReference = ActionstepMatter.ConstructId(request.ActionstepOrg, request.MatterId);
                }

                if (wCAConveyancingMatter.SettlementDate != null)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.SettlementDate = wCAConveyancingMatter.SettlementDate.ToDateTimeUnspecified();
                }

                if (pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.SettlementDate == DateTime.MinValue)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.SettlementDate = null;
                }

                if (pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.Role == PexaRole.Consentor || pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.Role == PexaRole.CT_Controller)
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.LandTitleDetails.ParentTitle = "No";
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.RequestLandTitleData         = "No";
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.FinancialSettlement          = "Yes";
                }
                else
                {
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.LandTitleDetails.ParentTitle = "No";
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.RequestLandTitleData         = "Yes";
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.FinancialSettlement          = "Yes";
                }

                pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.PartyDetails = new Collection <WorkspaceCreationRequestTypePartyDetailsParty>();

                foreach (var buyer in wCAConveyancingMatter.Buyers)
                {
                    var buyerPartyDetails = MapPartyDetails(buyer, "Incoming Proprietor");
                    pexaWorkspaceRequestWithActionstepData.CreatePexaWorkspaceCommand.PexaWorkspaceCreationRequest.PartyDetails.Add(buyerPartyDetails);
                }

                return(Task.FromResult(pexaWorkspaceRequestWithActionstepData));
            }
            catch (AggregateException ex)
            {
                if (ex.InnerExceptions.All(e => e is InvalidTokenSetException || e is InvalidCredentialsForActionstepApiCallException))
                {
                    throw ex.InnerExceptions.FirstOrDefault();
                }

                throw ex;
            }
        }