private static bool FindPolicy(ClaimHeader claimHeader, Claim claim, out IUWHeader uwHeader) { lock (SyncLock) { var claimService = ObjectFactory.Resolve<ClaimService>(); try { Logger.InfoFormat("Looking for Policy based on Claim\r\n{0}\r\n", JObject.FromObject( new {claim.ClaimReference, claim.PolicyNumber})); uwHeader = claimService.GetPolicyDataForCoverageVerification(claim.PolicyNumber, XiapConstants.XIAP_DATASOURCE, null); claim.PolicyShellWasCreated = false; return true; } catch (Exception ex) { //try //{ // Logger.InfoFormat("Could not find Policy in Genius.X, going to Genius\r\n{0}\r\n", // JObject.FromObject(new {claim.ClaimReference, claim.PolicyNumber})); // var claimProduct = claimHeader.GetProduct(); // var linkedUwProduct = claimProduct.Links.First(l => l.ProductLinkType == (short)StaticValues.ProductLinkType.ClaimtoPolicy); // var tran = UWBusinessTransactionFactory.CreatePolicy(linkedUwProduct.ProductCode, DateTime.UtcNow, false); // var header = tran.Header; // header.HeaderReference = claim.PolicyNumber; // var updater = ObjectFactory.Resolve<UpdateFromGeniusPlugin>(); // updater.ProcessComponent(header, ProcessInvocationPoint.Virtual, 0); // //_updater.Handle(header); // tran.Complete(false); // claim.PolicyShellWasCreated = true; // uwHeader = claimService.GetPolicyDataForCoverageVerification(claim.PolicyNumber, XiapConstants.XIAP_DATASOURCE, null); // return true; //} //catch (Exception ex) //{ claim.PolicyShellWasCreated = false; claim.ClaimIsAttachedToPolicy = false; claim.CustomCode18 = "F01"; claim.ClaimProcessingFailed = true; claim.FailureReason = "Policy does not exist"; Logger.ErrorFormat("Exception creating policy from Genius policy \r\n{0}\r\n", JObject.FromObject(new{ex.Message, ex.StackTrace})); uwHeader = null; return false; //} } } }
/// <summary> /// Updates the header title, inception and expiry dates with the values from the Genius Policy header. /// </summary> /// <param name="xiapHeader">The xiap header.</param> /// <param name="externalHeader">The external header.</param> private void UpdateHeader(Header xiapHeader, IUWHeader externalHeader) { xiapHeader.ExternalReference = externalHeader.ExternalReference; HeaderVersion headerVersion = (HeaderVersion)xiapHeader.GetLatestVersion(); if (headerVersion != null) { headerVersion.HeaderTitle = externalHeader.HeaderTitle; headerVersion.InceptionDate = externalHeader.InceptionDate; headerVersion.ExpiryDate = externalHeader.ExpiryDate; } }
/// <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; } } } }
/// <summary> /// Validates the external Genius Policy can be used to refresh the GeniusX policy. /// </summary> /// <param name="xiapheader">The xiapheader.</param> /// <param name="externalheader">The externalheader.</param> /// <param name="results">The results.</param> /// <returns>Process Results Collection</returns> private ProcessResultsCollection ValidateExternalHeader(Header xiapheader, IUWHeader externalheader, ProcessResultsCollection results) { // Genius policy not found if (externalheader == null) { UWBusinessLogicHelper.AddError(results, MessageConstants.INVALID_POLICY_REFERENCE, ProcessInvocationPoint.Virtual, xiapheader); } else { // Genius policy product must match XIAP product if (externalheader.ProductCode != xiapheader.GetProduct().Product.Code) { UWBusinessLogicHelper.AddError(results, UwMessageConstants.GENIUS_PRODUCT_DOES_NOT_MATCH, ProcessInvocationPoint.Virtual, xiapheader); } } return results; }