public DebtEligibilityReviewResponse ToDebtEligibilityReview(DynamicsGatewayOptions options)
 {
     return(new DebtEligibilityReviewResponse
     {
         CreditorNotes = CreditorNotes,
         Reason = (DebtEligibilityReviewReasons)int.Parse(options.DebtEligibilityReviewReasons
                                                          .First(r => r.Value == ReasonId.ToString()).Key),
         Status = options.DebtEligibilityReviewStatus[StatusId.ToString()],
         MoneyAdviserNotes = MoneyAdviserNotes,
         CreatedOn = CreatedOn.ToDateTimeOffset(),
         ModifiedOn = ModifiedOn.ToDateTimeOffset(),
     });
 }
 public BreathingSpaceResponse BuildMoratorium(MoratoriumDetail response, DynamicsGatewayOptions options)
 {
     return(new BreathingSpaceResponse
     {
         OrganisationId = response.MoneyAdviserOrganisation.Id,
         MoneyAdviserOrganization = response.MoneyAdviserOrganisation.ToMoneyAdviserOrganizationResponse(),
         DebtorDetails = new DebtorDetailsResponse
         {
             ReferenceNumber = response.ReferenceNumber,
             FirstName = response.Debtor.FirstName,
             MiddleName = response.Debtor.MiddleName,
             LastName = response.Debtor.LastName,
             PreviousNames = response.Debtor.PreviousNames
                             ?.OrderBy(x => x.CreatedOn)
                             ?.Select(x => x.ToPreviousName())
                             ?? Enumerable.Empty <ClientPreviousNameResponse>(),
             DateOfBirth = response.Debtor.DateOfBirth.ToDateTimeOffset().DateTime,
             AddressHidden = response.IsAddressWithheld,
             NotificationEmailAddress = response.Debtor.NotificationEmailAddress,
             MoratoriumStatus = MoratoriumIdStatusMap.GetStatusFromId(response.StatusId),
             IsInMentalHealthMoratorium = response.IsMentalHealth,
             StartsOn = response.CommencementDate?.ToDateTimeOffset(),
             EndsOn = response.ExpiryDate?.ToDateTimeOffset(),
             CancellationDate = response.ClosureDate?.ToDateTimeOffset(),
             CreatedOn = response.CreatedOn?.ToDateTimeOffset(),
             ModifiedOn = response.ModifiedOn?.ToDateTimeOffset(),
             ContactPreference = Enum.Parse <ContactPreferenceType>(response.Debtor.ContactPreferenceId.ToString()),
             CancellationReason = response.ParentCancellationReason
         },
         CurrentAddress = response.Debtor.CurrentAddress.ToAddressResponse(),
         PreviousAddresses = response.Debtor.PreviousAddresses
                             ?.OrderBy(pd => pd.CreatedOn)
                             ?.Select(pd => pd.ToPreviousAddress())
                             .ToList() ?? Enumerable.Empty <PreviousAddressResponse>(),
         DebtorBusinessDetails = response.Debtor.Businesses
                                 ?.OrderBy(b => b.CreatedOn)
                                 ?.Select(b => b.ToBusinessAddress())
                                 .ToList() ?? Enumerable.Empty <BusinessAddressResponse>(),
         DebtDetails = response.Debts
                       ?.Select(d => d.ToDebtDetail(options))
                       .ToList() ?? Enumerable.Empty <DebtDetailResponse>(),
         DebtorEligibilityReviews = response.DebtorEligibilityReview
                                    ?.Select(e => e.ToDebtorEligibilityReview(options))
                                    .ToList() ?? Enumerable.Empty <DebtorEligibilityReviewResponse>(),
         DebtorNominatedContactResponse = response.ExternalContacts
                                          ?.Select(e => e.ToDebtorNominatedContactResponse(options))
                                          .FirstOrDefault(),
         DebtorTransfer = response.MoratoriumTransfer?.ToDebtorTransfer(),
     });
 }
Пример #3
0
 public DebtorNominatedContactResponse ToDebtorNominatedContactResponse(DynamicsGatewayOptions options)
 {
     return(new DebtorNominatedContactResponse
     {
         ContactId = ExternalContact.Id,
         RoleId = Id,
         FullName = $"{ExternalContact.FirstName} {ExternalContact.LastName}",
         TelephoneNumber = ExternalContact.HomeTelephone,
         EmailAddress = ExternalContact.EmailAddress,
         PointContactRole = (PointContactRoleType)SubRoleId,
         NotificationMethod = (PointContactConfirmationMethod)ExternalContact.PreferredChannel,
         CommunicationAddress = ExternalContact.CurrentAddress?.ToAddressResponse()
     });
 }
 public BreathingSpaceBrowseGateway(IODataClient client,
                                    DynamicsGatewayOptions options)
 {
     _client              = client;
     _options             = options;
     _taskBrowseFunctions = new Dictionary <BreathingSpaceBrowseTask, Func <Guid, bool, Task <BreathingSpaceBrowseResponse> > >
     {
         { BreathingSpaceBrowseTask.DebtsToBeReviewed, BrowseDebtsToBeReviewedAsync },
         { BreathingSpaceBrowseTask.ClientsToBeReviewed, BrowseClientsToBeReviewedAsync },
         { BreathingSpaceBrowseTask.NewDebtsProposed, BrowseNewDebtsProposedAsync },
         { BreathingSpaceBrowseTask.DebtsToBeTransferred, BrowseDebtsToBeTransferredAsync },
         { BreathingSpaceBrowseTask.ClientsToBeTransferred, BrowseClientsToBeTransferred },
         { BreathingSpaceBrowseTask.ClientsTransferredToMoneyAdviser, BrowseClientsTransferredToMoneyAdviser }
     };
 }
Пример #5
0
 public CommonDynamicsGateway(
     IODataClient client,
     DynamicsGatewayOptions options,
     ILogger <CommonDynamicsGateway> logger,
     IMapperService mapperService,
     AuditContext auditContext,
     IAuditService auditService)
 {
     _logger        = logger;
     _client        = client;
     _options       = options;
     _mapperService = mapperService;
     _auditContext  = auditContext;
     _auditService  = auditService;
 }
 public DebtorEligibilityReviewResponse ToDebtorEligibilityReview(DynamicsGatewayOptions options)
 {
     return(new DebtorEligibilityReviewResponse
     {
         CreditorId = CreditorId,
         CreditorNotes = CreditorNotes,
         MoneyAdviserNotes = MoneyAdviserNotes,
         CreditorName = Creditor,
         Status = options.DebtorEligibilityReviewStatus[StatusId.ToString()],
         CreatedOn = CreatedOn.ToDateTimeOffset(),
         EndReason = options.GetEligibilityReviewParentReasonById(ReasonId),
         ModifiedOn = ModifiedOn.ToDateTimeOffset(),
         NoLongerEligibleReason = SubreasonId != Guid.Empty
             ? options.GetEligibilityReviewChildReasonById(SubreasonId)
             : null
     });
 }
        public void Configure(IWebJobsBuilder builder)
        {
            var dynamicsOptions = new DynamicsGatewayOptions();

            builder.Services.AddScoped <ICommonDynamicsGateway, CommonDynamicsGateway>();
            builder.Services.AddSingleton <DynamicsGatewayOptions>(x =>
            {
                var config = x.GetService <IConfiguration>();
                config.GetSection("DynamicsGateway").Bind(dynamicsOptions);
                return(dynamicsOptions);
            });

            builder.Services.AddSingleton <IDistributedCache, RedisCache>(x =>
            {
                var config = x.GetService <IConfiguration>();
                var redisConnectionString = config["redisServerUrl"];
                var options = new RedisCacheOptions
                {
                    Configuration = redisConnectionString,
                    InstanceName  = Constants.IntegrationAPICacheKey
                };
                return(new RedisCache(options));
            });

            builder.Services.AddScoped <IODataClient, ODataClient>(x =>
            {
                var config = x.GetService <IConfiguration>();
                var oDataBeforeFunction = new ODataMessageAuthenticatorFunction(
                    new AuthorityDetails
                {
                    ClientId     = config.GetValue <string>("ClientId"),
                    ClientSecret = config.GetValue <string>("ClientSecret"),
                    ClientUrl    = config.GetValue <string>("AuthorityUrl"),
                    ResourceUrl  = config.GetValue <string>("ClientResource")
                }, x.GetService <ICacheClient>());
                var clientSettings = GetODataClientSettings(config, oDataBeforeFunction);
                return(new ODataClient(clientSettings));
            });

            builder.Services.AddScoped <ICacheClient, CacheClient>(x =>
            {
                var config             = x.GetService <IConfiguration>();
                var listLifetimeInDays = config.GetValue <int>("CacheLifeTimeInDays");
                return(new CacheClient(x.GetService <IDistributedCache>(), TimeSpan.FromDays(listLifetimeInDays)));
            });
        }
 public Debt ToDebtModel(DynamicsGatewayOptions options)
 {
     return(new Debt
     {
         Id = GetId(),
         Amount = ntt_amount,
         Reference = ntt_creditorexternalreferenceid,
         DebtTypeName = ntt_debttypeid?.inss_name ?? ntt_otherdebttype,
         NINO = ntt_nationalinsurancenumber,
         CreatedOn = createdon.Value,
         RemovedOn = modifiedon.Value,
         Status = GetDebtStatus(options),
         SoldToCreditorName = ntt_SoldToCreditorId?.ntt_name,
         SoldToCreditorId = ntt_SoldToCreditorId?.GetId(),
         PreviouslySold = ntt_previouslysold ?? false,
         DebtRemovalReason = GetDebtRemovalReason(options)
     });
 }
        public Dictionary <string, object> ToDictionary(DynamicsGatewayOptions options, bool isMentalHealthMoratorium)
        {
            var isPartOfThirtyDayReviewAnswerRequired = Reason == BreathingSpaceEndReasonType.StoppedTreatment ||
                                                        Reason == BreathingSpaceEndReasonType.UnableToReachPointOfContact ||
                                                        (Reason == BreathingSpaceEndReasonType.DebtManagementSolution && !isMentalHealthMoratorium) ||
                                                        Reason == BreathingSpaceEndReasonType.NotCompliedWithObligations ||
                                                        Reason == BreathingSpaceEndReasonType.UnableToContactClient;

            var reasonId = options.BreathingSpaceEndReason[((int)Reason).ToString()];

            var result = new Dictionary <string, object>()
            {
                { "CancellationReasonParent", reasonId },
                { "MidwayReviewRequired", isPartOfThirtyDayReviewAnswerRequired },
                { "MHReviewRequired", false }
            };

            if (Reason == BreathingSpaceEndReasonType.NoLongerEligible && NoLongerEligibleReason.HasValue)
            {
                var noLongerEligibleReasonId = options.BreathingSpaceEndReasonNoLongerEligibleReason[((int)NoLongerEligibleReason).ToString()];
                result.Add("CancellationReasonChild", noLongerEligibleReasonId);
            }

            if (isPartOfThirtyDayReviewAnswerRequired && IsPartOfThirtyDayReview.HasValue)
            {
                result.Add("MidwayReviewAnswer", IsPartOfThirtyDayReview.Value);
            }

            if (Reason == BreathingSpaceEndReasonType.Deceased)
            {
                result.Add("DebtorDeceasedDate", DateOfDeath.Value.ToString(Constants.UkDateFormat));
            }

            if (Reason == BreathingSpaceEndReasonType.StoppedTreatment)
            {
                result.Add("MHTreatmentEndDate", EndTreatmentDate.Value.ToString(Constants.UkDateFormat));
            }

            return(result);
        }
 public void SetDebtorDetailSensitiveData(BreathingSpaceResponse response, DynamicsGatewayOptions options)
 {
     response.PreviousAddresses = response.PreviousAddresses
                                  .Where(add => add.DateTo.HasValue)
                                  .Select(add => MapPreviousAddressResponse(add, true))
                                  .ToList();
     response.DebtorDetails.IsInMentalHealthMoratorium = response.DebtorDetails.IsInMentalHealthMoratorium;
     response.DebtorDetails.NotificationEmailAddress   = response.DebtorDetails.NotificationEmailAddress;
     response.DebtorDetails.ContactPreference          = response.DebtorDetails.ContactPreference;
     response.DebtorDetails.StartsOn         = response.DebtorDetails.StartsOn;
     response.DebtorDetails.EndsOn           = response.DebtorDetails.EndsOn;
     response.DebtorDetails.CreatedOn        = response.DebtorDetails.CreatedOn;
     response.DebtorDetails.ModifiedOn       = response.DebtorDetails.ModifiedOn;
     response.DebtorDetails.MoratoriumStatus = response.DebtorDetails.MoratoriumStatus;
     response.DebtorBusinessDetails          = response.DebtorBusinessDetails
                                               .Select(b => new BusinessAddressResponse
     {
         BusinessName = b.BusinessName,
         Address      = MapCurrentAddressResponse(b.Address)
     })
                                               .ToList();
 }
 public DebtRemovalReason?GetDebtRemovalReason(DynamicsGatewayOptions options) => _ntt_debtremovalreasonid_value.HasValue ?
 options.DebtRemovalReason.First(r => r.Value == _ntt_debtremovalreasonid_value.ToString()).Key :
 (DebtRemovalReason?)null;
 public static Guid GetDebtStatusValue(DynamicsGatewayOptions options, DebtStatus status)
 {
     return(Guid.Parse(options.DebtStatus.First(p => p.Value == status).Key));
 }
 public DebtStatus GetDebtStatus(DynamicsGatewayOptions options) => options.DebtStatus[_ntt_debtstatusid_value.ToString()];
        public PointContactConfirmationMethod GetMappedPreferredChannelId(DynamicsGatewayOptions options)
        {
            _ = options.ContactPreferenceReadMap.TryGetValue(ntt_preferredchannel.ToString(), out var channelId);

            return((PointContactConfirmationMethod)channelId);
        }
 public DebtEligibilityReviewStatus GetEligiblityReviewStatus(DynamicsGatewayOptions options) =>
 options.DebtEligibilityReviewStatus[_ntt_eligibilitystatusid_value.ToString()];
Пример #16
0
        public PointContactRoleType GetMappedPointContactRoleId(DynamicsGatewayOptions options)
        {
            _ = options.PointContactRoleRead.TryGetValue(ntt_subrole.ToString(), out var roleId);

            return((PointContactRoleType)roleId);
        }