private function saveStep1(Zend_Form $pageForm)
 {
     // Get sub forms
     $subFormPersonalDetails = $pageForm->getSubForm('subform_personaldetails');
     $subFormDataProtection = $pageForm->getSubForm('subform_dataprotection');
     $subFormContentsInsurance = $pageForm->getSubForm('subform_contentsinsurance');
     $subFormSharers = $pageForm->getSubForm('subform_sharers');
     $pageSession = new Zend_Session_Namespace('tenants_insurance_quote');
     $customerManager = new Manager_Core_Customer();
     $auth = Zend_Auth::getInstance();
     $auth->setStorage(new Zend_Auth_Storage_Session('homelet_customer'));
     // TODO: This should check reference number exists, not just property!
     if (!isset($this->_customerReferenceNumber)) {
         // Do we already have a legacy customer with this email address?
         $customer = $customerManager->getCustomerByEmailAddress($subFormPersonalDetails->getElement('email_address')->getValue());
         if (!$customer) {
             // We don't have a session so we need to create a legacy customer/quote entry to save against
             // All new customers are now of type Model_Core_Customer::CUSTOMER
             $customer = $customerManager->createNewCustomer($subFormPersonalDetails->getElement('email_address')->getValue(), Model_Core_Customer::CUSTOMER);
             $legacyCustomer = $customer;
             if (!isset($pageSession->IsNewCustomer)) {
                 $pageSession->IsNewCustomer = true;
             }
         } else {
             if (!isset($pageSession->IsNewCustomer)) {
                 $pageSession->IsNewCustomer = false;
             }
             $legacyCustomer = $customerManager->createNewCustomer($subFormPersonalDetails->getElement('email_address')->getValue(), Model_Core_Customer::CUSTOMER, true);
         }
         $customerManager->linkLegacyToNew($legacyCustomer->getIdentifier(Model_Core_Customer::LEGACY_IDENTIFIER), $customer->getIdentifier(Model_Core_Customer::IDENTIFIER));
         // Now get the reference number from the newly created customer
         $customerRefNo = $customer->getIdentifier(Model_Core_Customer::LEGACY_IDENTIFIER);
         $this->_customerReferenceNumber = $customerRefNo;
         $pageSession->CustomerRefNo = $customerRefNo;
         $pageSession->CustomerID = $customer->getIdentifier(Model_Core_Customer::IDENTIFIER);
     } else {
         // We are in session so just instantiate the customer manager with the existing reference number
         $customer = $customerManager->getCustomer(Model_Core_Customer::LEGACY_IDENTIFIER, $this->_customerReferenceNumber);
         $customerRefNo = $pageSession->CustomerRefNo;
         $pageSession->CustomerID = $customer->getIdentifier(Model_Core_Customer::IDENTIFIER);
         if (!isset($pageSession->IsNewCustomer)) {
             $pageSession->IsNewCustomer = false;
         }
     }
     $pageSession->CustomerEmail = $subFormPersonalDetails->getElement('email_address')->getValue();
     $pageSession->CustomerDob = $subFormPersonalDetails->getElement('date_of_birth_at')->getValue();
     if (!$auth->hasIdentity()) {
         // Update the customer record with the form data, but only if they are a new customer
         // Existing customers must phone us.
         // Note that no message stating this is given to the end user
         if ($subFormPersonalDetails->getElement('title')->getValue() != "Other") {
             $customer->setTitle($subFormPersonalDetails->getElement('title')->getValue());
         } else {
             $customer->setTitle($subFormPersonalDetails->getElement('other_title')->getValue());
         }
         $customer->setFirstName($subFormPersonalDetails->getElement('first_name')->getValue());
         $customer->setLastName($subFormPersonalDetails->getElement('last_name')->getValue());
         $customer->setTelephone(Model_Core_Customer::TELEPHONE1, $subFormPersonalDetails->getElement('phone_number')->getValue());
         $customer->setTelephone(Model_Core_Customer::TELEPHONE2, $subFormPersonalDetails->getElement('mobile_number')->getValue());
         $customer->setEmailAddress($subFormPersonalDetails->getElement('email_address')->getValue());
         $customer->setDateOfBirthAt(Application_Core_Utilities::ukDateToMysql($subFormPersonalDetails->getElement('date_of_birth_at')->getValue()));
         $customer->setIsForeignAddress(false);
     }
     // TODO: Make this all better...
     $customerManager->updateCustomer($customer);
     // 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->linkLegacyToNew($customerRefNo, $customerID);
     // See if we have an agent scheme number, if so use it
     $session = new Zend_Session_Namespace('homelet_global');
     $agentSchemeNumber = $session->agentSchemeNumber;
     // Instantiate the quote manager - if this is a new customer it will automatically create a new quote
     // otherwise it will use the existing quote
     $quoteManager = new Manager_Insurance_TenantsContentsPlus_Quote($customerRefNo, $agentSchemeNumber, $pageSession->PolicyNumber);
     // Set the contents SI - this does an automatic save
     if (is_numeric($subFormContentsInsurance->getElement('contents_cover_a')->getValue())) {
         $contentsSI = $subFormContentsInsurance->getElement('contents_cover_a')->getValue();
     } else {
         $contentsSI = $subFormContentsInsurance->getElement('contents_cover_b')->getValue();
     }
     $quoteManager->setCoverAmount($contentsSI, Manager_Insurance_TenantsContentsPlus_Quote::CONTENTS);
     // Grab the policy number for the quote and save it to the session
     $policyNumber = $quoteManager->getPolicyNumber();
     $pageSession = new Zend_Session_Namespace('tenants_insurance_quote');
     $pageSession->PolicyNumber = $policyNumber;
     $this->_policyNumber = $policyNumber;
     // Set the contact preferences
     $contactPreferences = new Model_Core_CustomerContactPreferences();
     $contactPreferences->addPreference(Model_Core_CustomerContactPreferences::EMAIL_METHOD);
     $quoteManager->setContactPreference($contactPreferences);
     $quoteManager->setIssueDate(Zend_Date::now()->toString('YYYY-MM-dd'));
     //Save the sharer details.
     $contentsSICurrency = new Zend_Currency(array('value' => $contentsSI, 'precision' => 2));
     $sharersManager = new Manager_Insurance_TenantsContentsPlus_Sharers();
     $noOfSharersAllowed = $sharersManager->getNoOfSharersAllowed($contentsSICurrency);
     switch ($noOfSharersAllowed) {
         case 1:
             $sharers = new Model_Insurance_TenantsContentsPlus_Sharers($this->_policyNumber);
             $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_01, $subFormSharers->getElement('policy_sharer1_occupation')->getValue());
             $sharersManager->insertSharers($sharers);
             break;
         case 2:
             $sharers = new Model_Insurance_TenantsContentsPlus_Sharers($this->_policyNumber);
             $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_01, $subFormSharers->getElement('policy_sharer1_occupation')->getValue());
             $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_02, $subFormSharers->getElement('policy_sharer2_occupation')->getValue());
             $sharersManager->insertSharers($sharers);
             break;
     }
     //Record this WebLead, if not already done so. First create or
     //retrieve the WebLead summary.
     $webLeadManager = new Manager_Core_WebLead();
     if (empty($this->_webLeadSummaryId)) {
         $isNewWebLead = true;
         $webLeadSummary = $webLeadManager->createNewSummary();
     } else {
         $isNewWebLead = false;
         $webLeadSummary = $webLeadManager->getSummary($this->_webLeadSummaryId);
     }
     //Create or retrieve the step 1 blob.
     if (!$webLeadManager->getBlobExists($webLeadSummary->webLeadSummaryId, Model_Core_WebLeadStep::STEP1)) {
         $webLeadBlob = $webLeadManager->createNewBlob($webLeadSummary->webLeadSummaryId, Model_Core_WebLeadStep::STEP1);
     } else {
         $webLeadBlob = $webLeadManager->getBlob($webLeadSummary->webLeadSummaryId, Model_Core_WebLeadStep::STEP1);
     }
     //Update the WebLead summary and store.
     $webLeadSummary->title = $subFormPersonalDetails->getElement('title')->getValue();
     $webLeadSummary->firstName = $subFormPersonalDetails->getElement('first_name')->getValue();
     $webLeadSummary->lastName = $subFormPersonalDetails->getElement('last_name')->getValue();
     if ($subFormPersonalDetails->getElement('phone_number')->getValue() != '') {
         $contactNumber = $subFormPersonalDetails->getElement('phone_number')->getValue();
     } else {
         $contactNumber = $subFormPersonalDetails->getElement('mobile_number')->getValue();
     }
     $webLeadSummary->contactNumber = $contactNumber;
     $webLeadSummary->emailAddress = $subFormPersonalDetails->getElement('email_address')->getValue();
     if ($isNewWebLead) {
         $webLeadSummary->startTime = $this->_offsetDate();
     }
     $webLeadSummary->lastUpdatedTime = $this->_offsetDate();
     $webLeadSummary->product = Model_Core_WebLeadProduct::TCIPLUS;
     $webLeadSummary->quoteNumber = $pageSession->PolicyNumber;
     $webLeadManager->updateSummary($webLeadSummary);
     //Update the blob, serialize and store.
     $webLeadBlob->blob = Zend_Json::encode($_POST);
     $webLeadBlob->blobChecksum = crc32($webLeadBlob->blob);
     $webLeadManager->updateBlob($webLeadBlob);
     //Record the WebLead identifier in the page session.
     $pageSession->webLeadSummaryId = $webLeadSummary->webLeadSummaryId;
     //Capture and store the insurance and WebLead data protections.
     $this->_saveDPA($customerRefNo, Model_Core_DataProtection_ItemEntityTypes::INSURANCE, $subFormDataProtection->getElement('dpa_phone_post')->getValue(), $subFormDataProtection->getElement('dpa_sms_email')->getValue(), $subFormDataProtection->getElement('dpa_resale')->getValue());
     $this->_saveDPA($webLeadSummary->webLeadSummaryId, Model_Core_DataProtection_ItemEntityTypes::WEBLEAD, $subFormDataProtection->getElement('dpa_phone_post')->getValue(), $subFormDataProtection->getElement('dpa_sms_email')->getValue(), $subFormDataProtection->getElement('dpa_resale')->getValue());
 }
 /**
  * Initialise the step 2 form
  *
  * @return void
  */
 public function step2Action()
 {
     $pageForm = new TenantsInsuranceQuote_Form_Step2();
     // Tell page to use AJAX validation as we go
     $this->view->headScript()->appendScript('var ajaxValidate = true; var ajaxValidatePage = 2;');
     //Update the WebLead summary and create a STEP2 blob.
     $webLeadManager = new Manager_Core_WebLead();
     $webLeadSummary = $webLeadManager->getSummary($this->_webLeadSummaryId);
     $this->view->qhli = $webLeadSummary->quoteNumber;
     if ($this->getRequest()->isPost()) {
         $valid = $this->_formStepCommonValidate($pageForm, 2);
         if ($valid) {
             $data = $pageForm->getValues();
             $webLeadSummary->lastUpdatedTime = $this->_offsetDate();
             $webLeadManager->updateSummary($webLeadSummary);
             //Determine if a new STEP2 blob needs to be created, or an existing one retrieved.
             if ($webLeadManager->getBlobExists($this->_webLeadSummaryId, Model_Core_WebLeadStep::STEP2)) {
                 $webLeadBlob = $webLeadManager->getBlob($webLeadSummary->webLeadSummaryId, Model_Core_WebLeadStep::STEP2);
             } else {
                 $webLeadBlob = $webLeadManager->createNewBlob($webLeadSummary->webLeadSummaryId, Model_Core_WebLeadStep::STEP2);
             }
             //Update the blob and store
             $webLeadBlob->blob = Zend_Json::encode($_POST);
             $webLeadBlob->blobChecksum = crc32($webLeadBlob->blob);
             $webLeadManager->updateBlob($webLeadBlob);
             // Instantiate the quote manager
             $quoteManager = new Manager_Insurance_TenantsContentsPlus_Quote(null, null, $this->_policyNumber);
             // Update start and end dates
             $startDate = $data['subform_policydetails']['policy_start'];
             $startDate = substr($startDate, 6, 4) . '-' . substr($startDate, 3, 2) . '-' . substr($startDate, 0, 2);
             $endDate = date('Y-m-d', strtotime(date('Y-m-d', strtotime($startDate)) . ' +1 year -1 day'));
             $quoteManager->setStartAndEndDates($startDate, $endDate);
             // Get sub forms that were originally on step 1
             $subFormContentsInsurance = $pageForm->getSubForm('subform_contentsinsurance');
             $subFormSharers = $pageForm->getSubForm('subform_sharers');
             // Set the contents SI - this does an automatic save
             if (is_numeric($subFormContentsInsurance->getElement('contents_cover_a')->getValue())) {
                 $contentsSI = $subFormContentsInsurance->getElement('contents_cover_a')->getValue();
             } else {
                 $contentsSI = $subFormContentsInsurance->getElement('contents_cover_b')->getValue();
             }
             $quoteManager->setCoverAmount($contentsSI, Manager_Insurance_TenantsContentsPlus_Quote::CONTENTS);
             //Save the sharer details.
             $contentsSICurrency = new Zend_Currency(array('value' => $contentsSI, 'precision' => 2));
             $sharersManager = new Manager_Insurance_TenantsContentsPlus_Sharers();
             $noOfSharersAllowed = $sharersManager->getNoOfSharersAllowed($contentsSICurrency);
             switch ($noOfSharersAllowed) {
                 case 1:
                     $sharers = new Model_Insurance_TenantsContentsPlus_Sharers($this->_policyNumber);
                     $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_01, $subFormSharers->getElement('policy_sharer1_occupation')->getValue());
                     $sharersManager->insertSharers($sharers);
                     break;
                 case 2:
                     $sharers = new Model_Insurance_TenantsContentsPlus_Sharers($this->_policyNumber);
                     $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_01, $subFormSharers->getElement('policy_sharer1_occupation')->getValue());
                     $sharers->setSharerOccupation(Model_Insurance_TenantsContentsPlus_Sharers::SHARER_02, $subFormSharers->getElement('policy_sharer2_occupation')->getValue());
                     $sharersManager->insertSharers($sharers);
                     break;
             }
             // Update the unspecified possessions SI
             $unspecPossessionsSI = $data['subform_possessions']['possessions_cover'];
             $unspecPossessionsSI = is_numeric($unspecPossessionsSI) ? $unspecPossessionsSI : 0;
             $quoteManager->setCoverAmount($unspecPossessionsSI, Manager_Insurance_TenantsContentsPlus_Quote::UNSPECIFIEDPOSSESSIONS);
             // Everything has been saved ok so navigate to next step
             $this->_formStepCommonNavigate(2);
             return;
         } elseif (isset($_POST['back'])) {
             $this->_formStepCommonNavigate(2);
             return;
         }
     }
     // Load the element data from the database if we can
     if ($this->_formStepCommonPopulate($pageForm, 2)) {
         // Render the page unless we have been redirected
         $this->view->form = $pageForm;
         $this->render('step');
     }
 }