Ejemplo n.º 1
0
        /// <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;
                    }
                }
            }
        }