public static async Task CanCreateAndReadDisbursement(this IActionstepService actionstepService, int actionId, TokenSetQuery tokenSetQuery)
        {
            if (actionstepService is null)
            {
                throw new ArgumentNullException(nameof(actionstepService));
            }
            if (tokenSetQuery is null)
            {
                throw new ArgumentNullException(nameof(tokenSetQuery));
            }

            var newDisbursement = new Disbursement()
            {
                Description = "Test from API",
                Links       =
                {
                    Action = actionId
                }
            };

            var newDisbursementRequest = new CreateDisbursementsRequest()
            {
                Disbursements = { newDisbursement },
                TokenSetQuery = tokenSetQuery
            };

            var result = await actionstepService.Handle <ListDisbursementsResponse>(newDisbursementRequest);
        }
            public async Task <TransactionDisbursementRelationship> Handle(CreateDisbursementsCommand request, CancellationToken cancellationToken)
            {
                if (request is null)
                {
                    throw new System.ArgumentNullException(nameof(request));
                }
                _validator.ValidateAndThrow(request);

                var disbursementsToCreate = DisbursementFactory.FromTransaction(
                    request.ActionstepMatterId,
                    request.Transaction,
                    request.TaxCodeIdWithGST,
                    request.TaxCodeIdNoGST);

                var createDisbursementsRequest = new CreateDisbursementsRequest();

                createDisbursementsRequest.Disbursements.AddRange(disbursementsToCreate);
                createDisbursementsRequest.TokenSetQuery = new TokenSetQuery(request.ActionstepUserId, request.ActionstepOrgKey);

                var createdDisbursements = await _actionstepService.Handle <ListDisbursementsResponse>(createDisbursementsRequest);

                var gstTaxableDisbursement = createdDisbursements.Disbursements.SingleOrDefault(d => d.Links.TaxCode == request.TaxCodeIdWithGST);
                var gstFreeDisbursement    = createdDisbursements.Disbursements.SingleOrDefault(d => d.Links.TaxCode == request.TaxCodeIdNoGST);

                return(new TransactionDisbursementRelationship(
                           request.Transaction.TransactionId,
                           request.ActionstepOrgKey,
                           request.ActionstepMatterId,
                           gstTaxableDisbursement?.Id,
                           gstFreeDisbursement?.Id));
            }
        public async Task <ListDisbursementsResponse> Handle(CreateDisbursementsCommand 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);

            var createDisbursementsRequest = new CreateDisbursementsRequest()
            {
                TokenSetQuery = tokenSetQuery
            };

            createDisbursementsRequest.Disbursements.Add(new Disbursement()
            {
                Date                    = LocalDate.FromDateTime(DateTime.Now),
                Description             = "Premium",
                ImportExternalReference = request.PolicyNumber,
                Quantity                = 1,
                UnitPrice               = request.FirstTitlePrice.Premium,
                UnitPriceIncludesTax    = false,
                Links                   =
                {
                    Action  = 23,
                    TaxCode = 7     // S 10.0
                }
            });

            createDisbursementsRequest.Disbursements.Add(new Disbursement()
            {
                Date                    = LocalDate.FromDateTime(DateTime.Now),
                Description             = "StampDuty",
                ImportExternalReference = request.PolicyNumber,
                Quantity                = 1,
                UnitPrice               = request.FirstTitlePrice.StampDuty,
                UnitPriceIncludesTax    = false,
                Links                   =
                {
                    Action  = 23,
                    TaxCode = 8     // BAS Excluded
                }
            });

            var response = await _actionstepService.Handle <ListDisbursementsResponse>(createDisbursementsRequest);

            return(response);
        }