using System.Xml.Linq; using CRIF.ACTion.Common; using CRIF.ACTion.Common.Builders; using CRIF.ACTion.Configuration; using Landmark.OLA.Models.Addresses; using Landmark.OLA.Models.Individuals; namespace CRIF.ACTion.Loan.Individuals { public class AddIndividualRequestBuilder : BuilderBase, IAppParties, IParties, IAddresses { private readonly IApplicant Individual; private readonly string ApplicationId; public AppPartiesSection AppParties { get; set; } public PartiesSection Parties { get; set; } public AddressesSection Addresses { get; set; } public AddIndividualRequestBuilder(string applicationId, IApplicant individual, CrifSettings settings) : base(CrifNamespaces.Empty, settings) { Individual = individual; ApplicationId = applicationId; AppParties = new AppPartiesSection(CrifRequestSectionNamespace, _settings); Parties = new PartiesSection(CrifRequestSectionNamespace, _settings); Addresses = new AddressesSection(CrifRequestSectionNamespace, _settings); } public override XElement Build(params XElement[] content) { Parties.AddApplicant(Individual); AppParties.AddIndividualParty(Individual, AppPartiesSection.PartyType.borrower, Individual.HasOptedOutTCPA); Addresses.AddAddress(Individual.Address, ContactMechanisms.CrifContactMechanism.CurrentAddress); if (Individual.MailingAddress is not null) { Addresses.AddAddress(Individual.MailingAddress, ContactMechanisms.CrifContactMechanism.MailingAddress); } if (Individual.PreviousAddresses?.Count > 0) { foreach (Address previousAddress in Individual.PreviousAddresses) { Addresses.AddAddress(previousAddress, ContactMechanisms.CrifContactMechanism.PreviousAddress); } } var addIndividualElement = new XElement(CrifNamespaces.Empty + "addIndividual", new XAttribute("applicationID", ApplicationId), AppParties.Build(), Parties.Build(), Addresses.Build()); var baseElement = base.Build(addIndividualElement); return baseElement; } } }