protected void CreateTransactions(LocalPluginContext context) { try { Entity claimTransation = context.PluginExecutionContext.InputParameters["Target"] as Entity; var claim = claimTransation.GetAttributeValue <EntityReference>("new_claim"); ClaimAttributes attributes = new ClaimAttributes(context.OrganizationService.Retrieve(claim), context.OrganizationService, context.TracingService); var claimTransactionType = claimTransation.GetAttributeValue <OptionSetValue>("new_claimtransactiontype"); //attributes.ClaimTransactionType; var claimTransactionTypeLabel = context.OrganizationService.GetOptionSetValueLabel("new_claimtransaction", "new_claimtransactiontype", claimTransactionType.Value); int transactionType = -1; if (claimTransactionTypeLabel == "Reserve Up" || claimTransactionTypeLabel == "Reserve Down") { transactionType = context.OrganizationService.GetOptionsSetValueForLabel("new_transaction", "new_type", "Reserve Change"); } else if (claimTransactionTypeLabel == "Recovery Up" || claimTransactionTypeLabel == "Recovery Down" || claimTransactionTypeLabel == "Partial Recovery" || claimTransactionTypeLabel == "Full Recovery") { transactionType = context.OrganizationService.GetOptionsSetValueForLabel("new_transaction", "new_type", "Claim Recovery"); } else if (claimTransactionTypeLabel == "Partial Payment" || claimTransactionTypeLabel == "Final Payment") { transactionType = context.OrganizationService.GetOptionsSetValueForLabel("new_transaction", "new_type", "Claim Payment"); } else if (claimTransactionTypeLabel == "New Claim") { transactionType = context.OrganizationService.GetOptionsSetValueForLabel("new_transaction", "new_type", "Open Claim"); } else if (claimTransactionTypeLabel == "Reopen Claim") { transactionType = context.OrganizationService.GetOptionsSetValueForLabel("new_transaction", "new_type", "Reopened Claim"); } Entity transaction = new Entity("new_transaction"); transaction["new_claim"] = claim; transaction["new_claimfolder"] = attributes.ClaimFolder; transaction["new_policy"] = attributes.Policy; transaction["new_policyid"] = attributes.PolicyVersion; transaction["transactioncurrencyid"] = attributes.Currency; if (transactionType != -1) { transaction["new_type"] = new OptionSetValue(transactionType); } transaction["new_policyholdercontact"] = attributes.PolicyDetails.PolicyHolderContact; transaction["new_policyholdercompany"] = attributes.PolicyDetails.PolicyHolderCompany; transaction["new_broker"] = attributes.PolicyDetails.Broker; //transaction[""] context.OrganizationService.Create(transaction); } catch (Exception ex) { throw new Exception(ex.Message); } }
/// <summary> /// Creates the claim. /// </summary> /// <param name="context">The context.</param> /// <exception cref="Exception"> /// Loss date cannot be after the notification date /// or /// Please select a Policy /// or /// Please select a loss type /// or /// No Basic cover found for the selected loss type /// or /// No cover found for the policy /// or /// No Policy version found /// or /// </exception> /// <exception cref="InvalidPluginExecutionException"></exception> protected void CreateClaim(LocalPluginContext context) { try { Entity claim = context.PluginExecutionContext.InputParameters["Target"] as Entity; Entity claimFolder = null; Guid claimFolderId = Guid.Empty; Entity insuredRisk = null; var claimAttributes = new ClaimAttributes(claim, context.OrganizationService, context.TracingService); //var notificationDate = claim.GetAttributeValue<DateTime>("new_notificationdate"); //var lossDateField = claim.GetAttributeValue<DateTime>("new_dateofloss"); if (claimAttributes.LossDate > claimAttributes.NotificationDate) { throw new Exception("Loss date cannot be after the notification date"); } if (claimAttributes.NotificationDate > DateTime.Now) { throw new Exception("Notification date cannot be later than today"); } if (!claim.Contains("new_policyid")) { throw new Exception("Please select a Policy"); } Entity policyFolder = context.OrganizationService.Retrieve("new_policyfolder", claim.GetAttributeValue <EntityReference>("new_policyid").Id, new ColumnSet(true)); if (claim.Contains("new_insuredrisk")) { insuredRisk = context.OrganizationService.Retrieve(claim.GetAttributeValue <EntityReference>("new_insuredrisk")); } else { var retrievedinsuredRisk = context.OrganizationService.RetrieveInsuredRiskForClaim("new_insuredrisk", claimAttributes.Policy.Id); //claim.GetAttributeValue<EntityReference>("new_policyid").Id); if (retrievedinsuredRisk.Count() == 0) { throw new Exception("Could not find Insured risk"); } if (retrievedinsuredRisk.Count() > 1) { throw new Exception("Multiple Insured Risks found, please supply the correct one"); } insuredRisk = retrievedinsuredRisk.FirstOrDefault(); } Guid riskClassId = Guid.Empty; if (insuredRisk.Contains("new_riskclassid")) { riskClassId = insuredRisk.GetAttributeValue <EntityReference>("new_riskclassid").Id; } else { throw new Exception("Insured risk does not contain Risk Class. Please check Insured Risk"); } Guid productId = policyFolder.GetAttributeValue <EntityReference>("new_product").Id; //if (!claim.Contains("new_peril1")) // throw new Exception("Please select a Peril"); var subPeril = claim.GetAttributeValue <EntityReference>("new_subperil"); //Entity lossType = context.OrganizationService.Retrieve("new_losstype", claimAttributes.Peril, new ColumnSet(true)); //var coveredPeril = context.OrganizationService.RetrieveCoveredPeril("new_coveredperil", riskClassId, claimAttributes.SubPeril); Guid basicCoverId = Guid.Empty; if (claimAttributes.BasicCover == null) { throw new Exception("No Basic cover found for the selected loss type"); } basicCoverId = claimAttributes.BasicCover.Id; //if (coveredPeril.Count == 0) // throw new Exception("No Covered Peril found for the selected Sub Peril"); //if (coveredPeril.FirstOrDefault().Contains("new_basiccover")) // basicCoverId = coveredPeril.FirstOrDefault().GetAttributeValue<EntityReference>("new_basiccover").Id; //else // throw new Exception("No Basic cover found for the selected loss type"); var riskSubClassId = insuredRisk.GetAttributeValue <EntityReference>("new_secondlevelriskclass").Id; var riskObject = context.OrganizationService.RetrieveRiskObject(riskClassId, riskSubClassId, productId).FirstOrDefault(); var retrievedCover = context.OrganizationService.RetrieveCover("new_cover", basicCoverId, productId, riskObject.Id); if (retrievedCover.Count() == 0) { throw new Exception("No cover found for the policy"); } var policyVersion = context.OrganizationService.RetrievePolicyVersion("new_policy", claimAttributes.Policy.Id, claimAttributes.LossDate, retrievedCover.Select(c => c.Id).FirstOrDefault()).FirstOrDefault(); if (policyVersion == null) { throw new Exception("No Policy version found"); } //Guid policyVersionId = policyVersion.FirstOrDefault().Id; var premiumPaymentMethod = policyVersion.GetAttributeValue <EntityReference>("new_periodicity"); if (insuredRisk.Contains("new_gadget")) { claim["new_gadget"] = new EntityReference("new_gadget", insuredRisk.GetAttributeValue <EntityReference>("new_gadget").Id); } #region CommentedCode //var insuredRisk = context.OrganizationService.RetrieveRisk("new_insuredrisk", policyVersion.Select(c => c.Id).FirstOrDefault(), productId); //if (insuredRisk.Count == 1) //{ // //if (claim.GetAttributeValue<EntityReference>("new_insuredrisk") == null) // claim["new_insuredrisk"] = claim //new EntityReference("new_insuredrisk", insuredRisk.Select(c => c.Id).FirstOrDefault()); //} //else //{ // //Think of the logic to go here? //} #endregion var insuredCover = context.OrganizationService.RetrieveInsuredCover("new_insuredcover", policyVersion.Id, retrievedCover.FirstOrDefault().Id).FirstOrDefault(); //var insuredCoverId = insuredCover.FirstOrDefault().Id; if (!claim.Contains("new_policyversion")) { claim["new_policyversion"] = policyVersion.ToEntityReference(); //new EntityReference("new_policy", policyVersionId); } if (!claim.Contains("new_insuredcover") && insuredCover != null) { claim["new_insuredcover"] = insuredCover.ToEntityReference(); //new EntityReference("new_insuredcover", insuredCoverId); } claim["new_reserve"] = claimAttributes.InitialReserve; if (!claim.Contains("new_excessamount")) { claim["new_excessamount"] = insuredCover.GetAttributeValue <Money>("new_excessamount"); } if (premiumPaymentMethod != null) { claim["new_premiumpaymentmethod"] = premiumPaymentMethod; } if (claim.Contains("new_initialreserve")) { claim["new_incurred"] = claimAttributes.InitialReserve; } if (!claim.Contains("new_insuredrisk")) { claim["new_insuredrisk"] = insuredRisk.ToEntityReference(); } claim["new_associatedincidents"] = 0; //Update the claim context.OrganizationService.Update(claim); var retrievedClaims = context.OrganizationService.RetrieveClaim("new_claim", policyFolder.Id, claimAttributes.LossDate); //if (!claim.Contains("new_claimfolder")) // claimFolder = CreateClaimFolder(context.OrganizationService, retrievedClaims, claim, policyFolder); //else //if (claimFolder != null) // claimFolderId = claimFolder.Id; //else if (claim.Contains("new_claimfolder")) // claimFolderId = claimAttributes.ClaimFolder.Id; if (claimAttributes.ClaimFolder != null) { claimFolder = context.OrganizationService.Retrieve(claimAttributes.ClaimFolder); } else { claimFolder = CreateClaimFolder(context.OrganizationService, retrievedClaims, claim, policyFolder); } if (claimFolder != null) { CalculateAggregates(context.OrganizationService, claimFolder); var claimsCount = context.OrganizationService.RetrieveClaimForClaimFolder(claimFolder.Id); if (claimsCount.Count() > 1) { claim["new_associatedincidents"] = claimsCount.Count(); context.OrganizationService.Update(claim); } } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.Message, new Exception(ex.Message)); } }