예제 #1
0
 /**
  * Fetch an individual address by the passed ID
  *
  * @param id Id of the address
  * @param boolean $includeRiskAreaDetail
  * True if call code requires the details of the risk area associated with the
  * postcode passed in, false otherwise. True is the default, however, systems
  * such as referencing and products other than LI+ may not need this feature,
  * and so can pass in 'false' to bypass it.
  *
  * @return array
  */
 public function getPropertyByID($id, $includeRiskAreaDetail = true)
 {
     $postcodesDataSource = new Datasource_Core_Postcodes();
     $address = $postcodesDataSource->getPropertyByID($id);
     // Map the address to useful field names
     $returnArray = array('id' => $address->id, 'houseNumber' => $address->NUM, 'buildingName' => $address->SBN != '' ? $address->SBN . ' ' . $address->BNA : $address->BNA, 'address1' => $address->address1, 'address2' => $address->address2, 'address3' => $address->address3, 'address4' => $address->address4, 'address5' => $address->address5, 'postcode' => $address->postcode, 'organisation' => $address->ORG, 'department' => $address->ORD, 'county' => $address->CTP);
     if ($includeRiskAreaDetail) {
         $landlordsRiskAreas = new Datasource_Insurance_LandlordsPlus_RiskAreas();
         $returnArray['landlordsRiskAreas'] = $landlordsRiskAreas->getByPostcode($address->postcode);
     }
     return $returnArray;
 }
예제 #2
0
 /**
  * Calculate quicker for this quote and return them - used by the ajax on the fly
  *
  * @return array Array of premiums
  */
 public function calculateQuickPremiums()
 {
     $dsi = 0;
     $annualContentsCover = 0;
     $annualBuildingCover = 0;
     $contentsRates = array();
     $buildingRates = array();
     $annualEmergencyAssistance = 0;
     $annualRentGuarantee = 0;
     $annualLegalExpensesCover = 0;
     $dsiValues = array();
     // Check to see if this quote has any products - if not we don't need to do anything :)
     if ($this->productCount() > 0) {
         // First we need the postcode for our property
         $propertiesDatasource = new Datasource_Insurance_Quote_Properties();
         $properties = $propertiesDatasource->getByQuoteID($this->_quoteModel->ID);
         $postcode = $properties[0]['postcode'];
         // Check to see if we have an agents Rate ID
         $agentsRateID = 0;
         $agentsDatasource = new Datasource_Core_Agents();
         $agent = $agentsDatasource->getAgent($this->getAgentSchemeNumber());
         // If this agent has an active valid rate ID we can use it
         if (isset($agent->agentsRateID)) {
             if ($agent->agentsRateID == 5 || $agent->agentsRateID == 11) {
                 $agentsRateID = $agent->agentsRateID;
             }
         }
         // Get the risk areas for LI+
         // Then we need to get the LI+ risk areas for this postcode
         $riskAreasDatasource = new Datasource_Insurance_LandlordsPlus_RiskAreas();
         $riskAreas = $riskAreasDatasource->getByPostcode($postcode);
         // Calculate the discounts/loadings to be applied based on the quote meta data
         $loadings = $this->_calculateLoadings();
         // ** BUILDINGS COVER PREMIUMS ** //
         if ($this->hasProduct(self::BUILDING_COVER)) {
             $productMeta = $this->getProductMeta(self::BUILDING_COVER);
             $dsiValues = $this->_calculateDSI($postcode);
             $dsi = $dsiValues['rebuildValue'];
             // If we don't have a DSI - use the manually entered rebuild value
             if (isset($productMeta['rebuild_value']) && $productMeta['rebuild_value'] > 0) {
                 $dsi = $productMeta['rebuild_value'];
             }
             if ($dsi > 0) {
                 // and we need to get the rates for Buildings insurance
                 $ratesDatasource = new Datasource_Insurance_LandlordsPlus_BuildingCover_Rates();
                 $buildingRates = $ratesDatasource->getByProperty($riskAreas['buildingsAreaID'], $productMeta['build_year'], $this->getStartDate());
                 // now we can calculate the premiums based on the DSI Value and the rates
                 $grossRate = $buildingRates['gross'];
                 $netRate = $buildingRates['net'];
                 if (isset($productMeta['accidental_damage']) && $productMeta['accidental_damage'] == 'yes') {
                     $grossRate = $grossRate + $buildingRates['grossAccidentalDamage'];
                     $netRate = $netRate + $buildingRates['netAccidentalDamage'];
                 }
                 $grossRate = $grossRate * $loadings['buildingMultiplier'];
                 $netRate = $netRate * $loadings['buildingMultiplier'];
                 // Check to see if the property needs flood loadings applying
                 $endorsements = $this->getEndorsements();
                 // See if the property is in a flood area with optional endorsement
                 // If the endorsement is mandatory we don't charge extra - we just exclude the cover
                 if ($endorsements['floodArea'] == true && $endorsements['floodOptional'] == true) {
                     // Check to see if the customer has opted out of the flood cover
                     $properties = $this->getProperties();
                     if ($properties[0]['exclude_flood_cover'] == 1) {
                     } else {
                         $annualBFlood = $buildingRates['grossFlood'] * ($dsi / 1000);
                         $netBFlood = $buildingRates['netFlood'] * ($dsi / 1000);
                         $grossRate = $grossRate + $buildingRates['grossFlood'];
                         $netRate = $netRate + $buildingRates['netFlood'];
                     }
                 }
                 $buildingRates['grossAfterLoadings'] = $grossRate;
                 $buildingRates['netAfterLoadings'] = $netRate;
                 $annualBuildingCover = $grossRate * ($dsi / 1000);
             } else {
                 // We don't have a DSI and no rebuild value has been entered... oops!!
                 // Todo: panic!!
                 return '';
             }
         }
         // ** UNFURNISHED CONTENTS COVER ** //
         if ($this->hasProduct(self::UNFURNISHED_CONTENTS_COVER)) {
             if ($agentsRateID != 0) {
                 $annualContentsCover = 60;
             } else {
                 $annualContentsCover = 72;
             }
         }
         // ** FURNISHED CONTENTS COVER ** //
         if ($this->hasProduct(self::CONTENTS_COVER)) {
             $productMeta = $this->getProductMeta(self::CONTENTS_COVER);
             $ratesDatasource = new Datasource_Insurance_LandlordsPlus_ContentsCover_Rates();
             $contentsRates = $ratesDatasource->getByProperty($riskAreas['contentsAreaID'], $this->getStartDate());
             if (isset($productMeta['accidental_damage']) && $productMeta['accidental_damage'] == 'yes') {
                 $annualContentsCover = ($contentsRates['gross'] + $contentsRates['grossAccidentalDamage']) * $loadings['contentsMultiplier'] * ($productMeta['cover_amount'] / 1000);
             } else {
                 $annualContentsCover = $contentsRates['gross'] * $loadings['contentsMultiplier'] * ($productMeta['cover_amount'] / 1000);
             }
             // Check to see if the property needs flood loadings applying
             $endorsements = $this->getEndorsements();
             // See if the property is in a flood area with optional endorsement
             // If the endorsement is mandatory we don't charge extra - we just exclude the cover
             if ($endorsements['floodArea'] == true && $endorsements['floodOptional'] == true) {
                 // Todo: Check to see if the customer has opted out of the flood cover
                 $annualCFlood = $contentsRates['grossFlood'] * ($productMeta['cover_amount'] / 1000);
                 $grossRate = $grossRate + $contentsRates['grossFlood'];
                 $annualContentsCover += $annualCFlood;
             }
         }
         // ** EMERGENCY ASSISTANCE & BOILER AND HEATING COVER** //
         if ($this->hasProduct(self::EMERGENCY_ASSISTANCE) && (!$this->hasProduct(self::BUILDING_COVER) && !$this->hasProduct(self::CONTENTS_COVER))) {
             // Stand-alone emergency assistance
             if ($agentsRateID != 0) {
                 $annualEmergencyAssistance = 90;
             } else {
                 $annualEmergencyAssistance = 120;
             }
         } elseif ($this->hasProduct(self::BUILDING_COVER) || $this->hasProduct(self::CONTENTS_COVER)) {
             // Free emergency assistance included with buildings cover
             if ($this->hasProduct(self::BOILER_HEATING)) {
                 $annualEmergencyAssistance = 60;
             }
             if ($this->hasProduct(self::BUILDING_COVER)) {
                 $annualBuildingCover += 6.5;
             } else {
                 $annualContentsCover += 6.5;
             }
         }
         // ** RENT GUARANTEE ** //
         if ($this->hasProduct(self::RENT_GUARANTEE)) {
             $productMeta = $this->getProductMeta(self::RENT_GUARANTEE);
             $annualRentGuarantee = $productMeta['monthly_rent'] * 0.36;
         }
         // ** LEGAL EXPENSES ** //
         if ($this->hasProduct(self::LEGAL_EXPENSES)) {
             if ($this->hasProduct(self::RENT_GUARANTEE)) {
                 // Free Legal Expenses cover as part of Rent Guarantee
                 $annualLegalExpensesCover = 0;
             } else {
                 // Stand alone Legal Expenses cover
                 $annualLegalExpensesCover = 114;
             }
         }
         if ($this->hasProduct(self::BUILDING_COVER)) {
             $dsiValues = $this->_calculateDSI($postcode);
             $calculatedDSI = $dsiValues['rebuildValue'];
         } else {
             $calculatedDSI = 0;
         }
         $premiums = array('calculatedDSIValue' => (double) $calculatedDSI, 'rebuildValue' => $dsi > 0 ? (double) $dsi : 0, 'grossAnnualBuildingCover' => (double) number_format($annualBuildingCover, 2, '.', ''), 'grossAnnualContentsCover' => (double) number_format($annualContentsCover, 2, '.', ''), 'grossAnnualEmergencyAssistance' => (double) number_format($annualEmergencyAssistance, 2, '.', ''), 'grossAnnualRentGuarantee' => (double) number_format($annualRentGuarantee, 2, '.', ''), 'grossAnnualLegalExpensesCover' => (double) number_format($annualLegalExpensesCover, 2, '.', ''));
         $premiums['totalGrossAnnualPremium'] = round($annualBuildingCover + $annualContentsCover + $annualEmergencyAssistance + $annualRentGuarantee + $annualLegalExpensesCover, 2);
         $premiums['totalGrossMonthlyPremium'] = round($premiums['totalGrossAnnualPremium'] / 12, 2);
         // Get IPT percentage
         $propertiesDatasource = new Datasource_Insurance_Quote_Properties();
         $properties = $propertiesDatasource->getByQuoteID($this->_quoteModel->ID);
         $postcode = $properties[0]['postcode'];
         $taxDatasource = new Datasource_Core_Tax();
         $tax = $taxDatasource->getTaxbyTypeAndPostcode('ipt', $postcode);
         $ipt = 1 + $tax['rate'] / 100;
         $premiums['totalGrossAnnualIPT'] = round($premiums['totalGrossAnnualPremium'] * $ipt - $premiums['totalGrossAnnualPremium'], 2);
         $premiums['totalGrossMonthlyIPT'] = round($premiums['totalGrossMonthlyPremium'] * $ipt - $premiums['totalGrossMonthlyPremium'], 2);
         return $premiums;
     } else {
         return '';
     }
 }
 /**
  * Helper function to populate the zend form elements with database data
  *
  * @param Zend_Form $pageForm form definition for this step
  * @param int $stepNum current step number
  *
  * @return void
  */
 private function _formStepCommonPopulate($pageForm, $stepNum)
 {
     $this->view->stepNum = $stepNum;
     $this->view->stepMax = $this->_stepMax;
     // Check to see if the user is trying to skip ahead in the quote
     $pageSession = new Zend_Session_Namespace('landlords_insurance_quote');
     $tooFarAhead = false;
     if ((!isset($pageSession->completed) || is_null($pageSession->completed)) && $stepNum != 1) {
         $tooFarAhead = true;
         $lastCompleted = 1;
     } elseif ($stepNum > 1) {
         // Check to see if any pages previous to the one the user's trying to get to are incomplete
         $tooFarAhead = false;
         for ($i = 1; $i < $stepNum; $i++) {
             if (!isset($pageSession->completed[$i]) || !$pageSession->completed[$i]) {
                 $tooFarAhead = true;
                 $lastCompleted = $i;
                 break;
             }
         }
     }
     if ($tooFarAhead) {
         // Drop user onto page that needs completing
         $this->_helper->redirector->gotoUrl('/landlords/insurance-quote/step' . $lastCompleted);
         return false;
     }
     if ($stepNum > 1) {
         // Before we do ANYTHING we need to check to see if the email address entered matches a customer record
         // we already have - if it does we need to ask them to login before they proceed.
         $customerReferenceNumber = $this->_customerReferenceNumber;
         $customerManager = new Manager_Core_Customer();
         $legacyCustomer = $customerManager->getCustomer(Model_Core_Customer::LEGACY_IDENTIFIER, $customerReferenceNumber);
         $emailAddress = $legacyCustomer->getEmailAddress();
         $customer = $customerManager->getCustomerByEmailAddress($emailAddress);
         if ($customer) {
             // There is already a customer entry for this email address - so we need to see if they are logged in
             // if not we need to force them to login
             $auth = Zend_Auth::getInstance();
             $auth->setStorage(new Zend_Auth_Storage_Session('homelet_customer'));
             if ($auth->hasIdentity()) {
                 $loggedInEmail = $auth->getStorage()->read()->email_address;
                 if ($loggedInEmail != $customer->getEmailAddress()) {
                     // They are logged in but not who they should be to do this quote
                     $this->_helper->redirector->gotoUrl('/account/login?refer=landlords-insurance&step=' . $stepNum);
                     return false;
                 }
             } else {
                 // TODO: Check that removing the login redirection will not break other processes
                 // They aren't logged in and need to
                 /*$this->_helper->redirector->gotoUrl('/account/login?refer=landlords-insurance&step='. $stepNum);
                 		return false;*/
             }
         }
     }
     $formData = array();
     // If step 1 and not in session (so producing a quick quote) - we need to pre-populate
     // a few bits if the customer is already logged into the site
     if ($stepNum == 1 && !isset($pageSession->CustomerRefNo)) {
         $auth = Zend_Auth::getInstance();
         $auth->setStorage(new Zend_Auth_Storage_Session('homelet_customer'));
         if ($auth->hasIdentity()) {
             // Customer is logged in and starting a new quote - so we need to pre-populate the customers details from stored details
             $customerID = $auth->getStorage()->read()->id;
             $customerManager = new Manager_Core_Customer();
             $customer = $customerManager->getCustomer(Model_Core_Customer::IDENTIFIER, $customerID);
             $formData['title'] = $customer->getTitle();
             $formData['first_name'] = $customer->getFirstName();
             $formData['last_name'] = $customer->getLastName();
             $formData['phone_number'] = $customer->getTelephone(Model_Core_Customer::TELEPHONE1);
             $formData['mobile_number'] = $customer->getTelephone(Model_Core_Customer::TELEPHONE2);
             $formData['email_address'] = $customer->getEmailAddress();
             $formData['date_of_birth_at'] = $customer->getDateOfBirthAt();
             $pageForm->populate($formData);
         }
     }
     if (isset($this->_quoteID) && $this->_quoteID > 0) {
         $quoteManager = new Manager_Insurance_LandlordsPlus_Quote($this->_quoteID);
         $premiums = $quoteManager->calculatePremiums();
         if ($premiums != '') {
             $this->view->premiums = array('annual' => $premiums['totalGrossAnnualPremium'] + $premiums['totalGrossAnnualIPT'], 'monthly' => $premiums['totalGrossMonthlyPremium'] + $premiums['totalGrossMonthlyIPT']);
             $this->view->premiumsFull = $premiums;
         }
         $fees = $quoteManager->getFees();
         $this->view->fees = $fees;
         switch ($stepNum) {
             case 1:
                 $customerManager = new Manager_Core_Customer();
                 $customer = $customerManager->getCustomer(Model_Core_Customer::LEGACY_IDENTIFIER, $quoteManager->getLegacyCustomerReference());
                 // Populate the customer details
                 $titleOptions = LandlordsInsuranceQuote_Form_Subforms_PersonalDetails::$titles;
                 if (in_array($customer->getTitle(), $titleOptions)) {
                     $formData['title'] = $customer->getTitle();
                 } else {
                     $formData['title'] = "Other";
                     $formData['other_title'] = $customer->getTitle();
                 }
                 $formData['first_name'] = $customer->getFirstName();
                 $formData['last_name'] = $customer->getLastName();
                 $formData['phone_number'] = $customer->getTelephone(Model_Core_Customer::TELEPHONE1);
                 $formData['mobile_number'] = $customer->getTelephone(Model_Core_Customer::TELEPHONE2);
                 $formData['email_address'] = $customer->getEmailAddress();
                 $dob = $customer->getDateOfBirthAt();
                 if (null != $dob && '0000-00-00' != $dob) {
                     $formData['date_of_birth_at'] = Application_Core_Utilities::mysqlDateToUk($dob);
                 }
                 // Populate the correspondence address details
                 $formData['cor_address_line1'] = $customer->getAddressLine(Model_Core_Customer::ADDRESSLINE1);
                 $formData['cor_address_line2'] = $customer->getAddressLine(Model_Core_Customer::ADDRESSLINE2);
                 $formData['cor_address_line3'] = $customer->getAddressLine(Model_Core_Customer::ADDRESSLINE3);
                 $formData['cor_address_postcode'] = $customer->getPostcode();
                 $formData['country'] = $customer->getCountry();
                 // Populate the insured property address details
                 $properties = $quoteManager->getProperties();
                 if (count($properties) > 0) {
                     $formData['ins_address_line1'] = $properties[0]['line_1'];
                     $formData['ins_address_line2'] = $properties[0]['line_2'];
                     $formData['ins_address_line3'] = $properties[0]['town'];
                     $formData['ins_address_postcode'] = $properties[0]['postcode'];
                     $formData['owned_for'] = $properties[0]['ownership_length_id'];
                     $formData['no_claims'] = $properties[0]['no_claims_years_id'];
                     $formData['tenants_type'] = $properties[0]['tenant_type_id'];
                     $formData['have_letting_agent'] = $quoteManager->getAgentSchemeNumber() != Manager_Core_Agent::filterAsn($quoteManager->getAgentSchemeNumber()) ? 'yes' : 'no';
                     $formData['through_letting_agent'] = $properties[0]['letting_agent_managed'] ? 'yes' : 'no';
                     // Check to see if this postcode is in a flood risk area - if it is then populate the exclude flood cover data
                     // Populating this will also cause the question to be shown on the front end
                     $landlordsRiskAreas = new Datasource_Insurance_LandlordsPlus_RiskAreas();
                     $riskAreas = $landlordsRiskAreas->getByPostcode($properties[0]['postcode']);
                     if ($riskAreas['floodArea'] == '600') {
                         $formData['exclude_flood_cover'] = $properties[0]['exclude_flood_cover'] ? 'no' : 'yes';
                         // Backwards true/false stuff - I'm sooo sorry :(
                     }
                 }
                 // Populate agent details if one has been chosen
                 $agentSchemeNumber = Manager_Core_Agent::filterAsn($quoteManager->getAgentSchemeNumber());
                 $defaultASN = $this->_params->homelet->defaultAgent;
                 if ($formData['have_letting_agent'] == 'yes') {
                     $agents = new Datasource_Core_Agents();
                     $agent = $agents->getAgent($agentSchemeNumber);
                     $formData['letting_agent_name'] = $agent->name;
                     $formData['letting_agent_town'] = $agent->town;
                     $formData['letting_agent_asn'] = $agent->agentSchemeNumber;
                     // Fix for Redmine Ref. #10511:
                     $agentDropdown = $pageForm->subform_lettingagent->letting_agent;
                     $agentDropdown->setMultiOptions(array($agent->agentSchemeNumber => $agent->name . ', ' . $agent->town));
                     $formData['letting_agent'] = $agent->agentSchemeNumber;
                 }
                 // Load the policy start date
                 $startDate = $quoteManager->getStartDate();
                 if ($startDate != '' && $startDate != '0000-00-00') {
                     $formData['policy_start'] = substr($startDate, 8, 2) . '/' . substr($startDate, 5, 2) . '/' . substr($startDate, 0, 4);
                 }
                 // If step1 has been marked complete - we can assume they said yes to the IDD question
                 $pageSession = new Zend_Session_Namespace('landlords_insurance_quote');
                 if (isset($pageSession->completed[$stepNum]) && $pageSession->completed[$stepNum] == true) {
                     $formData['idd'] = true;
                 }
                 // Data Protection section
                 $customerReferenceNumber = $customer->getIdentifier(Model_Core_Customer::LEGACY_IDENTIFIER);
                 $dpaManager = new Manager_Core_DataProtection();
                 $dpaItems = $dpaManager->getItems($customerReferenceNumber, Model_Core_DataProtection_ItemEntityTypes::INSURANCE);
                 foreach ($dpaItems as $currentItem) {
                     switch ($currentItem->constraintTypeId) {
                         case Model_Core_DataProtection_ItemConstraintTypes::MARKETING_BY_PHONEANDPOST:
                             if ($currentItem->isAllowed) {
                                 $formData['dpa_phone_post'] = 0;
                             } else {
                                 $formData['dpa_phone_post'] = 1;
                             }
                             break;
                         case Model_Core_DataProtection_ItemConstraintTypes::MARKETING_BY_SMSANDEMAIL:
                             if ($currentItem->isAllowed) {
                                 $formData['dpa_sms_email'] = 0;
                                 // For Redmine Ref #8003, "Updated marketing preference questions on online quotes"
                             } else {
                                 $formData['dpa_sms_email'] = 1;
                                 // For Redmine Ref #8003, "Updated marketing preference questions on online quotes"
                             }
                             break;
                         case Model_Core_DataProtection_ItemConstraintTypes::MARKETING_BY_THIRDPARTY:
                             if ($currentItem->isAllowed) {
                                 $formData['dpa_resale'] = 1;
                             } else {
                                 $formData['dpa_resale'] = 0;
                             }
                             break;
                     }
                 }
             case 2:
                 // If step2 has been marked complete - we can assume they said no to the questions unless
                 // they've been set in the quote manager
                 if (isset($pageSession->completed[$stepNum]) && $pageSession->completed[$stepNum] == true) {
                     $formData['need_building_insurance'] = 'no';
                     $formData['need_contents_insurance'] = 'no';
                 }
                 if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER)) {
                     $formData['need_building_insurance'] = 'yes';
                     $productMeta = $quoteManager->getProductMeta(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER);
                     $formData['building_built'] = $productMeta['build_year'];
                     $formData['building_bedrooms'] = $productMeta['bedroom_quantity'];
                     $formData['building_type'] = $productMeta['building_type'];
                     $formData['building_insurance_excess'] = $productMeta['excess'];
                     $formData['building_accidental_damage'] = $productMeta['accidental_damage'];
                     $quote = $quoteManager->getModel();
                     if ((int) $productMeta['rebuild_value'] > 0) {
                         // There's a manually entered rebuild value - need to work out if it is because they
                         // chose £500k+ - or if it's because we don't have a dsi
                         $premiums = $quoteManager->calculatePremiums();
                         if ($premiums['calculatedDSIValue'] > 0) {
                             $formData['override_dsi'] = 1;
                         }
                         $formData['building_value'] = $productMeta['rebuild_value'];
                     }
                 }
                 if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::CONTENTS_COVER) || $quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::UNFURNISHED_CONTENTS_COVER)) {
                     $formData['need_contents_insurance'] = 'yes';
                     if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::CONTENTS_COVER)) {
                         $formData['property_furnished'] = 'yes';
                         $productMeta = $quoteManager->getProductMeta(Manager_Insurance_LandlordsPlus_Quote::CONTENTS_COVER);
                         $formData['contents_amount'] = $productMeta['cover_amount'];
                         $formData['contents_excess'] = $productMeta['excess'];
                         $formData['contents_accidental_damage'] = $productMeta['accidental_damage'];
                     } else {
                         $formData['property_furnished'] = 'no';
                     }
                 }
                 break;
             case 3:
                 if (isset($pageSession->completed[$stepNum]) && $pageSession->completed[$stepNum] == true) {
                     $formData['need_emergency_assistance'] = 'no';
                     $formData['need_prestige_rent_guarantee'] = 'no';
                     $formData['need_legal_expenses'] = 'no';
                     $formData['need_boiler_heating'] = 'no';
                 }
                 // If we have contents/buildings cover then EAS is already included for free so we can hide the form
                 if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER) || $quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::CONTENTS_COVER)) {
                     // Change the subforms view script to one that just says it's already included for free
                     // yeah yeah.. this aint pretty :(
                     $emergencyAssistanceForm = $pageForm->getSubForm('subform_emergencyassistance');
                     $emergencyAssistanceForm->setDecorators(array(array('ViewScript', array('viewScript' => 'subforms/emergency-assistance-free.phtml'))));
                     if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::BOILER_HEATING)) {
                         $formData['need_boiler_heating'] = 'yes';
                     }
                 } else {
                     // We can allow stand-alone EAS - so we hide the boiler and heating section
                     // yes... this is waaay too complex... I know :(
                     $pageForm->removeSubForm('subform_boilerheating');
                     if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::EMERGENCY_ASSISTANCE)) {
                         $formData['need_emergency_assistance'] = 'yes';
                     }
                 }
                 if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::RENT_GUARANTEE)) {
                     $formData['need_prestige_rent_guarantee'] = 'yes';
                     $productMeta = $quoteManager->getProductMeta(Manager_Insurance_LandlordsPlus_Quote::RENT_GUARANTEE);
                     $formData['rent_amount'] = $productMeta['monthly_rent'];
                 } elseif ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::LEGAL_EXPENSES)) {
                     $formData['need_legal_expenses'] = 'yes';
                 }
                 break;
             case 4:
                 if (isset($pageSession->completed[$stepNum]) && $pageSession->completed[$stepNum] == true) {
                     // Load underwriting answers from the database as they've already been answered
                     $answersManager = new Manager_Insurance_Answers();
                     $quote = $quoteManager->getModel();
                     $policyNumber = $quote->legacyID;
                     $customerReferenceNumber = $quote->legacyCustomerID;
                     $answers = $answersManager->getUnderwritingAnswers($policyNumber);
                     foreach ($answers as $answer) {
                         switch ($answer->getQuestionNumber()) {
                             case '53':
                                 $formData['declaration1'] = $answer->getAnswer();
                                 break;
                             case '54':
                                 $formData['declaration2'] = $answer->getAnswer();
                                 break;
                             case '55':
                                 $formData['declaration2b'] = $answer->getAnswer();
                                 break;
                             case '56':
                                 $formData['declaration2c'] = $answer->getAnswer();
                                 break;
                             case '57':
                                 $formData['declaration2d'] = $answer->getAnswer();
                                 break;
                             case '58':
                                 $formData['declaration3'] = $answer->getAnswer();
                                 break;
                             case '59':
                                 $formData['declaration4'] = $answer->getAnswer();
                                 break;
                             case '60':
                                 $formData['declaration6'] = $answer->getAnswer();
                                 break;
                             case '61':
                                 $formData['declaration7'] = $answer->getAnswer();
                                 break;
                             case '62':
                                 $formData['declaration8'] = $answer->getAnswer();
                                 break;
                             case '63':
                                 $formData['declaration9'] = $answer->getAnswer();
                                 break;
                             case '64':
                                 $formData['declaration10'] = $answer->getAnswer();
                                 break;
                         }
                     }
                     // Also need to see if they said yes or no to bank interest on the propery…
                     $bankInterestManager = new Manager_Insurance_LegacyBankInterest();
                     $bankInterestArray = $bankInterestManager->getAllInterests($policyNumber, $customerReferenceNumber);
                     $model = array();
                     if (!empty($bankInterestArray)) {
                         $formData['declaration11'] = 'yes';
                     } else {
                         $formData['declaration11'] = 'no';
                     }
                     // They must have agreed to the declaration or they wouldn't have been able to continue
                     $formData['declaration_confirmation'] = 'yes';
                 }
                 break;
             case 5:
                 // Payment Selection section
                 if (isset($pageSession->paymentSelectionDetails) && is_array($pageSession->paymentSelectionDetails)) {
                     $formData = $pageSession->paymentSelectionDetails;
                 }
                 break;
         }
     }
     $pageForm->populate($formData);
     return true;
 }