/**
  * Accept the RRP Quote
  *
  * @return array
  */
 public function rentRecoveryPlusAcceptAction()
 {
     $request = $this->getSymfonyRequest();
     $quoteNumber = null;
     if ($request->isMethod('POST')) {
         $quoteNumber = $request->request->get('policyNumber');
     } else {
         if ($request->isMethod('GET')) {
             $quoteNumber = $request->query->get('policyNumber');
         }
     }
     if ($quoteNumber) {
         $applicationDecoratorClass = $this->getContainer()->get('rrp.application.decorator.class');
         /** @var RRP\Application\Decorators\RentRecoveryPlusQuote $quote */
         $quote = $applicationDecoratorClass::getDecorator('RentRecoveryPlusQuote');
         if ($quote->populateByPolicyNumber($quoteNumber)) {
             $referred = false;
             if ($quote->getAppData()->getPayStatus() == Model_Insurance_RentRecoveryPlus_LegacyPolicy::PAY_STATUS_REFERRED) {
                 $referred = true;
             } else {
                 $policyOptionsManagerClass = $this->getContainer()->get('rrp.utility.policy_options_manager.class');
                 $propertyRental = $policyOptionsManagerClass::getOption($quote->getAppData()->getPolicyOptions(), Model_Insurance_RentRecoveryPlus_LegacyPolicy::POLICY_OPTION_RRP, $quote->getAppData()->getAmountsCovered());
                 // Does the given reference satisfy the policy criteria?
                 $application = $quote->getApplicationData($quoteNumber);
                 $reference = $this->getReferenceFromSession($application->getReferenceNumber());
                 $referenceSatisfiesCriteria = $this->referenceSatisfiesCriteria($reference);
                 $this->referralModel->setFromRrpPolicy($quote, $propertyRental);
                 $applicationSatisfiesCriteria = $this->applicationSatisfiesCriteria();
                 if (!$referenceSatisfiesCriteria || !$applicationSatisfiesCriteria) {
                     // Need to set the policy number on the referral object so that listeners can access it for whatever reason.
                     $this->referralModel->setPolicyNumber($quoteNumber);
                     // Fire a POLICY_REFERRED event to handle all referral related actions.
                     $referredEvent = new ReferredEvent($this->referralModel);
                     $this->eventDispatcher->dispatch(RRPEvents::POLICY_REFERRED, $referredEvent);
                     // Mark this application as referred.
                     $quote->getAppData()->setPayStatus(Model_Insurance_RentRecoveryPlus_LegacyPolicy::PAY_STATUS_REFERRED);
                     $quote->save();
                     $referred = true;
                 }
             }
             if ($referred) {
                 return $this->renderTwigView('/rentguarantee/rent-recovery-plus-referral.html.twig', array('policyNumber' => $quoteNumber));
             }
             if ($this->_params->connect->settings->rentRecoveryPlus->manualReferenceCheck) {
                 $quote->getAppData()->setPayStatus(Model_Insurance_RentRecoveryPlus_LegacyPolicy::PAY_STATUS_REFERRED);
                 $quote->save();
                 $policyNote = new Datasource_Insurance_PolicyNotes();
                 $note = "Policy incepted by agent, passed to RG team to validate reference and place on risk.";
                 $policyNote->addNote($quoteNumber, $note);
                 // Send referral email
                 $subject = str_replace('{$policyNumber}', $quoteNumber, $this->_params->connect->settings->rentRecoveryPlus->referral->emailSubject);
                 $message = $this->getContainer()->get('twig')->render('rent-recovery-plus-manual-reference-mail.plain.twig', array('agentName' => $this->_agentObj->name, 'agentSchemeNumber' => $this->_agentSchemeNumber));
                 $mailManager = new Application_Core_Mail();
                 $mailManager->setTo($this->_params->connect->settings->rentRecoveryPlus->referral->emailToAddress, $this->_params->connect->settings->rentRecoveryPlus->referral->emailToName)->setFrom($this->_params->connect->settings->rentRecoveryPlus->referral->emailFromAddress, $this->_params->connect->settings->rentRecoveryPlus->referral->emailFromName)->setSubject($subject)->setBodyText($message);
                 $mailManager->send();
                 return $this->renderTwigView('/rentguarantee/rent-recovery-plus-manual-reference.html.twig', array('policyNumber' => $quoteNumber));
             }
             $policyNumber = $quote->acceptQuote($quoteNumber);
             if (!$policyNumber) {
                 $subject = str_replace('{$policyNumber}', $policyNumber, $this->_params->connect->settings->rentRecoveryPlus->referral->emailSubject);
                 $message = $this->getContainer()->get('twig')->render('rent-recovery-plus-error-mail.plain.twig', array('agentName' => $this->_agentObj->name, 'agentSchemeNumber' => $this->_agentSchemeNumber, 'dateEntered' => date('Y-m-d H:i:s'), 'policyNumber' => $policyNumber));
                 $mailManager = new Application_Core_Mail();
                 $mailManager->setTo($this->_params->connect->settings->rentRecoveryPlus->referral->emailToAddress, $this->_params->connect->settings->rentRecoveryPlus->referral->emailToName)->setFrom($this->_params->connect->settings->rentRecoveryPlus->referral->emailFromAddress, $this->_params->connect->settings->rentRecoveryPlus->referral->emailFromName)->setSubject($subject)->setBodyText($message);
                 $mailManager->send();
                 $this->renderTwigView('/rentguarantee/rent-recovery-plus-error.html.twig');
             } else {
                 Manager_Insurance_Quote::sendInception($policyNumber, null, null, $this->_params->connect->settings->rentRecoveryPlus->systemCsuID);
                 return $this->renderTwigView('/rentguarantee/rent-recovery-plus-confirmation.html.twig', array('policyNumber' => $policyNumber, 'emailQueryAddress' => $this->_params->connect->settings->rentRecoveryPlus->queryEmailAddress));
             }
         }
     }
     $this->renderTwigView('/rentguarantee/rent-recovery-plus-error.html.twig');
 }