/**
  * Set the policy options
  *
  * @param float $sumInsured
  * @param float $premium
  * @param float $nilExcessOption
  * @return $this
  */
 public function setPolicyOptions($sumInsured, $premium, $nilExcessOption)
 {
     $policyOptions = PolicyOptionsManager::addPolicyOption($this->container->get('rrp.legacy.const.policy_option_rrp'));
     $amountsCovered = PolicyOptionsManager::addPolicyOption($sumInsured);
     $optionPremiums = PolicyOptionsManager::addPolicyOption($premium - $nilExcessOption);
     if (0 != $nilExcessOption) {
         $policyOptions = PolicyOptionsManager::addPolicyOption($this->container->get('rrp.legacy.const.policy_option_rrp-nilexcess'), $policyOptions);
         $amountsCovered = PolicyOptionsManager::addPolicyOption($sumInsured, $amountsCovered);
         $optionPremiums = PolicyOptionsManager::addPolicyOption($nilExcessOption, $optionPremiums);
     }
     $this->appData->setPolicyOptions($policyOptions)->setAmountsCovered($amountsCovered)->setOptionPremiums($optionPremiums);
     return $this;
 }
 /**
  * @inheritdoc
  */
 public function create($policy, $mta, $premium, $quote, $ipt, $nilExcessOption)
 {
     $this->legacyMtaData->setPolicyNumber($policy->getAppData()->getPolicyNumber());
     $now = new \DateTime();
     $isNilExcess = PolicyOptionsManager::isOptionSet($policy->getAppData()->getPolicyOptions(), $this->getContainer()->get('rrp.legacy.const.policy_option_rrp-nilexcess'), $policy->getAppData()->getAmountsCovered());
     $proRataCalcs = new ProRataCalculations($mta->getPolicyStartedAt(), $mta->getMtaEffectiveAt());
     $premiumAdjustment = $proRataCalcs->getAdjustment($policy->getAppData()->getPolicyLength(), $policy->getAppData()->getPolicyLength(), $premium, $policy->getAppData()->getPremium());
     $quoteAdjustment = $proRataCalcs->getAdjustment($policy->getAppData()->getPolicyLength(), $policy->getAppData()->getPolicyLength(), $quote, $policy->getAppData()->getQuote());
     $iptAdjustment = $proRataCalcs->getAdjustment($policy->getAppData()->getPolicyLength(), $policy->getAppData()->getPolicyLength(), $ipt, $policy->getAppData()->getIpt());
     $amountToPay = $quoteAdjustment;
     $monthsRemaining = $proRataCalcs->getMonthsRemaining($policy->getAppData()->getPolicyLength());
     $policyOptions = PolicyOptionsManager::addPolicyOption($this->container->get('rrp.legacy.const.policy_option_rrp'));
     $amountsCovered = PolicyOptionsManager::addPolicyOption($mta->getPropertyRental());
     $policyOptionPremium = PolicyOptionsManager::getOption($policy->getAppData()->getPolicyOptions(), $this->container->get('rrp.legacy.const.policy_option_rrp'), $policy->getAppData()->getOptionPremiums());
     $policyOptionNilExcess = 0.0;
     if ($isNilExcess) {
         $policyOptionNilExcess = PolicyOptionsManager::getOption($policy->getAppData()->getPolicyOptions(), $this->container->get('rrp.legacy.const.policy_option_rrp-nilexcess'), $policy->getAppData()->getOptionPremiums());
     }
     $policyOptionAdjustment = $proRataCalcs->getAdjustment($policy->getAppData()->getPolicyLength(), $policy->getAppData()->getPolicyLength(), $premium - $nilExcessOption, $policyOptionPremium);
     $optionPremiums = PolicyOptionsManager::addPolicyOption($policyOptionAdjustment);
     if ($isNilExcess) {
         $nilExcessAdjustment = $proRataCalcs->getAdjustment($policy->getAppData()->getPolicyLength(), $policy->getAppData()->getPolicyLength(), $nilExcessOption, $policyOptionNilExcess);
         $policyOptions = PolicyOptionsManager::addPolicyOption($this->container->get('rrp.legacy.const.policy_option_rrp-nilexcess'), $policyOptions);
         $amountsCovered = PolicyOptionsManager::addPolicyOption($mta->getPropertyRental(), $amountsCovered);
         $optionPremiums = PolicyOptionsManager::addPolicyOption($nilExcessAdjustment, $optionPremiums);
     }
     $this->legacyMtaData->setPolicyOptions($policyOptions)->setAmountsCovered($amountsCovered)->setOptionPremiums($optionPremiums)->setDateAdded($now->format('Y-m-d'))->setStatus('pending')->setPremium($premiumAdjustment)->setQuote($quoteAdjustment)->setIpt($iptAdjustment)->setAmountToPay($amountToPay)->setMonthsRemaining($monthsRemaining)->setAdminCharge(0.0)->setPropAddress1('')->setPropAddress3('')->setPropAddress5('')->setPropPostcode('')->setRiskArea('')->setRiskAreaB('')->setChangeCorrespondenceAndPersonal('')->setParagonMortgageNumber('');
     $propertyRental = PolicyOptionsManager::getOption($policy->getAppData()->getPolicyOptions(), $this->getContainer()->get('rrp.legacy.const.policy_option_rrp'), $policy->getAppData()->getAmountsCovered());
     $notes = $now->format('d/m/Y') . "\n" . "MTA by Agent via Connect\n";
     if ($mta->getPropertyRental() != $propertyRental) {
         $notes .= "Property rental changed from £" . round($propertyRental, 2) . " to £" . round($mta->getPropertyRental(), 2) . "\n";
     }
     $referral = new RentRecoveryPlusReferral();
     $referral->setFromMta($mta, $premium);
     if ($referral->isReferralRequired()) {
         $notes .= "\nThis policy has been referred for the following reason(s)\n\n" . implode("\n", $referral->getReferralReason());
     }
     $this->legacyMtaData->SetDisplayNotes($notes);
     $endTime = new \DateTime($policy->getAppData()->getEndDate());
     $monthsRemaining = (int) $endTime->format('m') - (int) $now->format('m');
     if ($monthsRemaining < 0) {
         $monthsRemaining += 13;
     } else {
         $monthsRemaining += 1;
     }
     $this->legacyMtaData->setMonthsRemaining($monthsRemaining)->setPaidNet('no')->setDateAdded($now->format('Y-m-d'))->setDateOnRisk($mta->getMtaEffectiveAt())->setDateOffRisk(null);
     /** @var RentRecoveryPlusAnswers $underwriting */
     $underwriting = UnderwritingDecoratorFactory::getDecorator(UnderwritingDecoratorFactory::UNDERWRITING_RENT_RECOVERY_PLUS, $this->container->get('rrp.config.underwriting_question_set_id'), $now->format('Y-m-d'), $policy->getAppData()->getPolicyNumber());
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_CONTINUATION] = null;
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_RENT_IN_ADVANCE] = null;
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_CLAIM_CIRCUMSTANCES] = $mta->getHasPossibleClaimCircumstances();
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_PERMITTED_OCCUPIERS] = $mta->getHasPermittedOccupiersOnly();
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_TENANCY_DISPUTES] = $mta->getHasTenancyDisputes();
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_TENANCY_AST] = TenancyAgreementTypes::isAssuredShortholdTenancy($mta->getTenancyAgreementType());
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_DEPOSIT_SUFFICIENT] = $mta->getIsDepositSufficient();
     $underwritingAnswers[RentRecoveryPlusAnswers::QUESTION_ID_PRIOR_CLAIMS] = $mta->getHasPriorClaims();
     $underwriting->setAnswers($underwritingAnswers)->saveAnswers();
     $mtaID = $this->legacyMta->create($this->legacyMtaData);
     if ($mtaID) {
         if ($this->rrpMta->create($mta, $mtaID)) {
             return $mtaID;
         }
     }
     return false;
 }