Esempio n. 1
0
        public void AddRisk(Risk risk, DateTime validFrom)
        {
            if (policy.InsuredRisks.Any(r => r.Name.ToLowerInvariant() == risk.Name.ToLowerInvariant()))
            {
                throw new ExistingRiskException("Risk with such name is already insured");
            }

            var insurancePeriod        = new NewInsurancePeriod(validFrom, policy.ValidTill);
            var newRiskInsurancePeriod = new RiskInsurancePeriod(insurancePeriod, risk);
            var addedPremiumForNewRisk = newRiskInsurancePeriod.CalculatePremium();

            policy.Premium += addedPremiumForNewRisk;
            policy.InsuredRisks.Add(risk);
        }
Esempio n. 2
0
        public void Create(string nameOfInsuredObject, NewInsurancePeriod insurancePeriod, IList <Risk> insuredRisks)
        {
            if (string.IsNullOrEmpty(nameOfInsuredObject))
            {
                throw new MissingNameOfInsuredObjectException("Missing Name of Insured Object");
            }

            var initialRiskSet = new InitialRiskSet(insuredRisks, insurancePeriod);

            policy.NameOfInsuredObject = nameOfInsuredObject;
            policy.ValidFrom           = insurancePeriod.From;
            policy.ValidTill           = insurancePeriod.Till;
            policy.InsuredRisks        = insuredRisks;
            policy.Premium             = initialRiskSet.CalculatePremium();
        }
        public IPolicy SellPolicy(string nameOfInsuredObject, DateTime validFrom, short validMonths, IList <Risk> selectedRisks)
        {
            var insurancePeriod   = new NewInsurancePeriod(validFrom, validMonths);
            var effectivePolicies = GetEffectivePolicies(nameOfInsuredObject, insurancePeriod);

            if (effectivePolicies.Any())
            {
                throw new ExistingEffectivePolicyException("Effective policy found that conflicts with requested validity period");
            }
            if (selectedRisks.Except(AvailableRisks).Any())
            {
                throw new InitialSelectedRiskUnavailableException("Some of the selected risks are not avaiable for selling");
            }

            var policy          = new Policy();
            var policyAggregate = new PolicyAggregate(policy);

            policyAggregate.Create(nameOfInsuredObject, insurancePeriod, selectedRisks);
            policyRepository.Add(policy);
            return(policy);
        }