/// <summary> /// Updates the Major Insured and Major Broker name involvements on the GeniusX policy, from the Genius Policy. /// </summary> /// <param name="xiapHeader">The xiap header.</param> /// <param name="externalHeader">The external header.</param> private void UpdateNameInvolvement(Header xiapHeader, IUWHeader externalHeader) { // Update Insured from Genius policy var insured = externalHeader.IUWNameInvolvements.Where(a => a.NameInvolvementType == (short)StaticValues.NameInvolvementType.MajorInsured).FirstOrDefault(); UwNameInvolvement ni = null; if (insured != null) { // we have an insured on the Genius Policy so see if we have one on the GeniusX policy. ni = xiapHeader.UwNameInvolvements.Where(a => a.NameInvolvementType == (short)StaticValues.NameInvolvementType.MajorInsured).FirstOrDefault(); if (ni != null) { // Update the Name id ni.NameID = insured.NameID; } else { // Check if Insured NI is configured on product and can be created // If so, create and update from Genius long productVersionID = xiapHeader.GetProduct().ProductVersionID; var productNI = ProductService.GetProductNameInvolvementQuery().GetProductNameInvolvementByNameInvolvementType(productVersionID, (short)StaticValues.NameInvolvementType.MajorInsured); if (productNI != null) { ni = xiapHeader.AddNewUwNameInvolvement((short)StaticValues.NameInvolvementType.MajorInsured, insured.NameID); ni.NameUsageTypeCode = insured.NameUsageTypeCode; } } } // Update LossBroker from Genius policy var mjrBroker = externalHeader.IUWNameInvolvements.Where(a => a.NameInvolvementType == (short)StaticValues.NameInvolvementType.MajorBroker).FirstOrDefault(); UwNameInvolvement nameInvMajorBroker = null; if (mjrBroker != null) { // If we have a Major Broker on the Genius Policy, find one on the GeniusX policy var nameInvMajorBrokerVersion = xiapHeader.UwNameInvolvements.Where(a => a.NameInvolvementType == (short)StaticValues.NameInvolvementType.MajorBroker).SelectMany(uni => uni.UwNameInvolvementVersion.Where(lv => lv.IsLatestVersion == true)).FirstOrDefault(); if (nameInvMajorBrokerVersion != null) { // Get the name involvement from the lastest version. nameInvMajorBroker = nameInvMajorBrokerVersion.UwNameInvolvement; } if (nameInvMajorBroker != null) { // Update the Name id already existing on the GeniusX policy nameInvMajorBroker.NameID = mjrBroker.NameID; } else { // Check if Major Broker NI is configured on product and can be created // Create it, if so, and apply Genius policy data. long productVersionID = xiapHeader.GetProduct().ProductVersionID; var productNI = ProductService.GetProductNameInvolvementQuery().GetProductNameInvolvementByNameInvolvementType(productVersionID, (short)StaticValues.NameInvolvementType.MajorInsured); if (productNI != null) { nameInvMajorBroker = xiapHeader.AddNewUwNameInvolvement((short)StaticValues.NameInvolvementType.MajorBroker, mjrBroker.NameID); nameInvMajorBroker.NameUsageTypeCode = mjrBroker.NameUsageTypeCode; } } } }