/** * Validate a form page's values via AJAX * * @return void */ public function validatePageAction() { $return = array(); $pageSession = new Zend_Session_Namespace('landlords_insurance_quote'); $postData = $this->getRequest()->getParams(); $page = $postData['page']; if ($page == '') { return; } switch ($page) { case '1': $ajaxForm = new LandlordsInsuranceQuote_Form_Step1(); if (isset($postData['through_letting_agent']) && $postData['through_letting_agent'] == 'yes') { $subForm->getElement('letting_agent_name')->setRequired(true); $subForm->getElement('letting_agent_town')->setRequired(true); $subForm->getElement('letting_agent_asn')->setRequired(true); } break; case '2': $ajaxForm = new LandlordsInsuranceQuote_Form_Step2(); $pageSession = new Zend_Session_Namespace('landlords_insurance_quote'); if (isset($pageSession->quoteID)) { $quoteID = $pageSession->quoteID; $quoteManager = new Manager_Insurance_LandlordsPlus_Quote($quoteID); $premiums = $quoteManager->calculatePremiums(); // Filter to mirror the subform element definitions. $currencyFilterElements = array('building_value', 'contents_amount'); foreach ($currencyFilterElements as $filterElement) { if (isset($postData[$filterElement])) { $postData[$filterElement] = preg_replace(array('/\\..+$/', '/\\D/'), array('', ''), $postData[$filterElement]); } } // Update the buildings insurance selection for the quote if (isset($postData['need_building_insurance']) && $postData['need_building_insurance'] == 'yes' && $postData['building_built'] != '' && $postData['building_bedrooms'] != '' && $postData['building_type'] != '') { // Add buildings insurance $quoteManager->addBuildingsCover($postData['building_built'], $postData['building_bedrooms'], $postData['building_type'], $postData['building_insurance_excess'], isset($postData['building_accidental_damage']) ? $postData['building_accidental_damage'] : 0, $postData['building_value'] != '' ? $postData['building_value'] : 0); // If we've calculated premiums but not got a dsi value - send a request back to front end for a // manual value if ($postData['override_dsi'] == '1' || $quoteManager->calculateDSI() == 0) { // We've not got a DSI Value - so we need to make the building value a required field $ajaxForm->getSubForm('subform_buildinginsurance')->getElement('building_value')->setRequired(true); $return['rebuildValueRequired'] = true; } else { $return['rebuildValueRequired'] = false; // Remove, re-add and recalculate buildings cover from scratch with given building value forcibly set to zero if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER)) { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER); $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::EMERGENCY_ASSISTANCE); } $quoteManager->addBuildingsCover($postData['building_built'], $postData['building_bedrooms'], $postData['building_type'], $postData['building_insurance_excess'], isset($postData['building_accidental_damage']) ? $postData['building_accidental_damage'] : 0, 0); } } else { if ($quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER)) { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::BUILDING_COVER); $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::EMERGENCY_ASSISTANCE); } } // Update the contents insurance selection for the quote if (isset($postData['need_contents_insurance']) && $postData['need_contents_insurance'] == 'yes') { // Add contents insurance if they've chosen whether it's furnished or not if (isset($postData['property_furnished'])) { if ($postData['property_furnished'] == 'yes') { if (isset($postData['contents_accidental_damage']) && isset($postData['contents_amount']) && isset($postData['contents_excess'])) { // Furnished property $quoteManager->addContentsCover(true, $postData['contents_accidental_damage'], $postData['contents_amount'], $postData['contents_excess']); } } elseif ($postData['property_furnished'] == 'no') { // Un-furnished property $quoteManager->addContentsCover(false); } } } else { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::CONTENTS_COVER); $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::UNFURNISHED_CONTENTS_COVER); } if ($premiums != '') { // If this is a flood exclusion area - send that back so the page can display the messages if ($premiums['riskAreas']['floodArea'] == '1000') { $return['floodExcluded'] = true; } else { $return['floodExcluded'] = false; } // If this is a subsidence exclusion area - send that back so the page can display the messages if ($premiums['riskAreas']['subsidenceArea'] == '1000') { $return['subsidenceExcluded'] = true; } else { $return['subsidenceExcluded'] = false; } } } break; case '3': $ajaxForm = new LandlordsInsuranceQuote_Form_Step3(); $pageSession = new Zend_Session_Namespace('landlords_insurance_quote'); if (isset($pageSession->quoteID)) { $quoteID = $pageSession->quoteID; $quoteManager = new Manager_Insurance_LandlordsPlus_Quote($quoteID); // Filter to mirror the subform element definitions. $currencyFilterElements = array('rent_amount'); foreach ($currencyFilterElements as $filterElement) { if (isset($postData[$filterElement])) { $postData[$filterElement] = preg_replace(array('/\\..+$/', '/\\D/'), array('', ''), $postData[$filterElement]); } } // Update the Emergency Assistance selection for the quote if (isset($postData['need_emergency_assistance'])) { if ($postData['need_emergency_assistance'] == 'yes') { $quoteManager->addEmergencyAssistance(); } else { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::EMERGENCY_ASSISTANCE); } } // Update the Boiler & Heating selection for the quote if (isset($postData['need_boiler_heating'])) { if ($postData['need_boiler_heating'] == 'yes') { $quoteManager->addBoilerAndHeatingCover(); } else { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::BOILER_HEATING); } } // Update the Prestiage Rent Guarantee for the quote if (isset($postData['need_prestige_rent_guarantee'])) { if ($postData['need_prestige_rent_guarantee'] == 'yes') { $quoteManager->addRentGuarantee($postData['rent_amount']); } else { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::RENT_GUARANTEE); // Also remove the free Legal Expenses or it causes a few "hiccups" $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::LEGAL_EXPENSES); } } // Update the Legal Expenses selection for the quote if (isset($postData['need_legal_expenses'])) { if ($postData['need_legal_expenses'] == 'yes') { $quoteManager->addLegalExpensesCover(); } else { // Don't remove the legal expenses if they've just been added for free by the rent guarantee product ;) if (!$quoteManager->hasProduct(Manager_Insurance_LandlordsPlus_Quote::RENT_GUARANTEE)) { $quoteManager->removeProduct(Manager_Insurance_LandlordsPlus_Quote::LEGAL_EXPENSES); } } } } break; case '4': $ajaxForm = new LandlordsInsuranceQuote_Form_Step4(); break; case '5': $ajaxForm = new LandlordsInsuranceQuote_Form_Step5(); break; default: return; } $valid = $ajaxForm->isValid($postData); // TODO: Needs to run the LI+ quote manager and calculate premiums so that they can be returned later on if (!$valid) { $errorMessages = $ajaxForm->getMessagesFlattened(); // We need to strip out some complex messages that the end user won't care about if (isset($errorMessages['email_address'])) { if (isset($errorMessages['email_address']['hostnameUnknownTld'])) { unset($errorMessages['email_address']['hostnameUnknownTld']); } if (isset($errorMessages['email_address']['hostnameLocalNameNotAllowed'])) { unset($errorMessages['email_address']['hostnameLocalNameNotAllowed']); } } $return['errorJs'] = $errorMessages; $return['errorCount'] = count($errorMessages); $return['errorHtml'] = $this->view->partial('partials/error-list.phtml', array('errors' => $errorMessages)); } else { $return['errorJs'] = ''; $return['errorCount'] = ''; $return['errorHtml'] = ''; } // Calculate premiums $pageSession = new Zend_Session_Namespace('landlords_insurance_quote'); if (isset($pageSession->quoteID)) { $quoteID = $pageSession->quoteID; $quoteManager = new Manager_Insurance_LandlordsPlus_Quote($quoteID); $return['premiums'] = $quoteManager->calculateQuickPremiums(); // Do a little bit of nicer formatting for the front end (add commas to thousands etc..) $return['fees'] = $quoteManager->getFees(); } echo Zend_Json::encode($return); }