public SettlementMatterViewModel(string actionstepOrg, int matterId, int version, SettlementInfo settlementData, ActionstepMatter actionstepData = null) { ActionstepOrg = actionstepOrg; MatterId = matterId; Version = version; SettlementData = settlementData; ActionstepData = actionstepData; }
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; } }
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; } }