Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        /// <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));
            }
        }