Example #1
0
 /**
  * Internal method, upserts progress records.
  *
  * @param Model_Referencing_Reference $reference
  */
 protected function _upsertProgress($reference, $upsertType)
 {
     //Capture the bank details progress.
     if (!empty($reference->referenceSubject->bankAccount)) {
         $accountNumber = $reference->referenceSubject->bankAccount->accountNumber;
         $sortCode = $reference->referenceSubject->bankAccount->sortCode;
         if (!empty($accountNumber) && !empty($sortCode)) {
             $bankDetails = 'Complete';
         } else {
             $bankDetails = 'Incomplete';
         }
     } else {
         $bankDetails = 'N/A';
     }
     //Set the start date
     $startDate = Zend_Date::now();
     $startDate = $startDate->toString(Zend_Date::ISO_8601);
     //If the product is a credit reference, provide minimal data.
     if (isset($reference->productSelection->product->variables[Model_Referencing_ProductVariables::CREDIT_REFERENCE])) {
         $fullReference = 'N/A';
         $landLetterSent = 'N/A';
         $employLetterSent = 'N/A';
         $employDetails = 'N/A';
         $landlordRef = 'N/A';
         $employerRef = 'N/A';
     } else {
         $fullReference = 'No';
         //Identify the value for 'landlettersent'. This will be 'N/A' if the reference subject
         //does not have a current landlord, and 'No' if they do.
         $residences = $reference->referenceSubject->residences;
         $residenceManager = new Manager_Referencing_Residence();
         $currentResidence = $residenceManager->findSpecificResidence($residences, Model_Referencing_ResidenceChronology::CURRENT);
         if (empty($currentResidence->refereeDetails)) {
             $landLetterSent = 'N/A';
         } else {
             $landLetterSent = 'No';
         }
         //Identify the value for 'employlettersent'. This will be 'N/A' if the applicant is unemployed
         //with no future occupation. Else will be 'No'.
         $occupations = $reference->referenceSubject->occupations;
         $occupationManager = new Manager_Referencing_Occupation();
         $currentOccupation = $occupationManager->findSpecificOccupation($occupations, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
         $employLetterSent = 'No';
         if ($currentOccupation->type == Model_Referencing_OccupationTypes::UNEMPLOYMENT) {
             if (count($occupations) == 1) {
                 $employLetterSent = 'N/A';
             }
         } else {
             if ($currentOccupation->type == Model_Referencing_OccupationTypes::STUDENT) {
                 $employLetterSent = 'N/A';
             }
         }
         //The 'employdetails' field is always set to 'Complete' for full references.
         $employDetails = 'Complete';
         //Determine the value for 'landlordref'. This should be set to 'N/A' if the reference
         //subject is a homeowner or living with relatives. Else it should be set to
         //'Incomplete'.
         $landlordRef = 'N/A';
         if ($currentResidence->status == Model_Referencing_ResidenceStatus::TENANT) {
             $landlordRef = 'Incomplete';
         }
         //Deterine the value for 'employerref'. This should be 'N/A' if the $employLetterSent
         //is 'N/A', else should be 'Incomplete'.
         $employerRef = 'Incomplete';
         if ($employLetterSent == 'N/A') {
             $employerRef = 'N/A';
         }
     }
     //Upsert the record.
     $data = array('propertydetails' => 'Complete', 'propertylandlorddetails' => 'Complete', 'tenantdetails' => 'Complete', 'tenantaddressdetails' => 'Complete', 'bankdetails' => $bankDetails, 'plandlorddetails' => 'Complete', 'llapproved' => 'Yes', 'termsagreed' => 'Yes', 'creditreference' => 'No', 'start_time' => $startDate, 'fullreference' => $fullReference, 'landlettersent' => $landLetterSent, 'employlettersent' => $employLetterSent, 'employdetails' => $employDetails, 'landlordref' => $landlordRef, 'employerref' => $employerRef);
     if ($upsertType == 'insert') {
         $data['refno'] = $reference->externalId;
         $this->insert($data);
     } else {
         $where = $this->quoteInto('refno = ? ', (string) $reference->externalId);
         $this->update($data, $where);
     }
 }
 public function saveData()
 {
     $session = new Zend_Session_Namespace('referencing_global');
     $data = $this->getValues();
     $referenceManager = new Manager_Referencing_Reference();
     $reference = $referenceManager->getReference($session->referenceId);
     //Record the reference subject's personal details.
     if (empty($reference->referenceSubject->name)) {
         //If here then things are a bit weird - we should have the reference subject name
         //captured from an earlier form.
         $nameManager = new Manager_Core_Name();
         $reference->referenceSubject->name = $nameManager->createName();
     }
     $reference->referenceSubject->name->title = $data['personal_title'];
     $reference->referenceSubject->name->firstName = $data['first_name'];
     $reference->referenceSubject->name->middleName = $data['middle_name'];
     $reference->referenceSubject->name->lastName = $data['last_name'];
     $reference->referenceSubject->name->maidenName = $data['other_name'];
     //Reference subject contact details
     if (empty($reference->referenceSubject->contactDetails)) {
         $contactDetailsManager = new Manager_Core_ContactDetails();
         $reference->referenceSubject->contactDetails = $contactDetailsManager->createContactDetails();
     }
     $reference->referenceSubject->contactDetails->telephone1 = $data['telephone_day'];
     $reference->referenceSubject->contactDetails->telephone2 = $data['mobile_number'];
     $reference->referenceSubject->contactDetails->email1 = $data['email'];
     //Reference subject miscellaneous.
     $reference->referenceSubject->dob = new Zend_Date($data['tenancy_start_date'], Zend_Date::DATES);
     if ('Yes' == $data['has_adverse_credit']) {
         $reference->referenceSubject->hasAdverseCredit = true;
     } else {
         $reference->referenceSubject->hasAdverseCredit = false;
     }
     //Bank account details. Bank account details are optional.
     if (empty($data['bank_account_number']) || empty($data['bank_sortcode_number'])) {
         //No bank account details have been provided.
         if (!empty($reference->referenceSubject->bankAccount)) {
             //We have an existing bank account details record - delete this to reflect the
             //user input.
             $bankAccountManager = new Manager_Referencing_BankAccount();
             $bankAccountManager->deleteBankAccount($reference->referenceSubject->bankAccount);
         }
     } else {
         if (empty($reference->referenceSubject->bankAccount)) {
             $bankAccountManager = new Manager_Referencing_BankAccount();
             $reference->referenceSubject->bankAccount = $bankAccountManager->insertPlaceholder($session->referenceId);
         }
         $reference->referenceSubject->bankAccount->accountNumber = $data['bank_account_number'];
         $reference->referenceSubject->bankAccount->sortCode = $data['bank_sortcode_number'];
         //Run the bank account details through the validators.
         $reference->referenceSubject->bankAccount->isValidated = false;
         $bankManager = new Manager_Core_Bank();
         if ($bankManager->isSortCodeValid($data['bank_sortcode_number'])) {
             if ($bankManager->isAccountNumberValid($data['bank_sortcode_number'], $data['bank_account_number'])) {
                 $reference->referenceSubject->bankAccount->isValidated = true;
             }
         }
     }
     //Create a current residence record, if not already done so. Ensure the current residence record
     //reflects the residential status provided by the user.
     if (empty($reference->referenceSubject->residences)) {
         $residenceManager = new Manager_Referencing_Residence();
         $residence = $residenceManager->insertPlaceholder($session->referenceId, Model_Referencing_ResidenceChronology::CURRENT);
         $residence->status = $data['residential_status'];
         $reference->referenceSubject->residences = array();
         $reference->referenceSubject->residences[] = $residence;
     } else {
         //Locate the current residence record, and set the residential status accordingly.
         foreach ($reference->referenceSubject->residences as $residence) {
             if ($residence->chronology == Model_Referencing_ResidenceChronology::CURRENT) {
                 $residence->status = $data['residential_status'];
                 break;
             }
         }
     }
     //Create or locate the current occupation record.
     $occupationManager = new Manager_Referencing_Occupation();
     if (empty($reference->referenceSubject->occupations)) {
         $isNew = true;
         $currentOccupation = $occupationManager->createNewOccupation($session->referenceId, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
     } else {
         $isNew = false;
         //Locate the current primary occupation record, and set the occupation type accordingly.
         $currentOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
     }
     //Update the current occupation record to reflect the user inputs.
     $currentOccupation->type = $data['occupational_type'];
     $currentOccupation->income = new Zend_Currency(array('value' => $data['total_annual_income'], 'precision' => 0));
     if ($data['occupation_will_change'] == 'No') {
         $currentOccupation->isPermanent = true;
     } else {
         $currentOccupation->isPermanent = false;
     }
     //Add the current occupation to the ReferenceSubject, if it is new.
     if ($isNew) {
         $reference->referenceSubject->occupations = array();
         $reference->referenceSubject->occupations[] = $currentOccupation;
     }
     //Identify if a future occupation record is required.
     if (isset($data['is_future_employment_secured'])) {
         if ('Yes' == $data['is_future_employment_secured']) {
             //See if a future occupation record exists already.
             $futureOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
             if (empty($futureOccupation)) {
                 $createFutureOccupation = true;
             } else {
                 $createFutureOccupation = false;
             }
             if ($createFutureOccupation) {
                 $futureOccupation = $occupationManager->createNewOccupation($session->referenceId, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
                 $futureOccupation->type = Model_Referencing_OccupationTypes::EMPLOYMENT;
                 $reference->referenceSubject->occupations[] = $futureOccupation;
             }
         } else {
             //No future occupation record is required at this time, so ensure that
             //any existing are deleted.
             $futureOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
             if (!empty($futureOccupation)) {
                 $occupationManager->deleteOccupation($futureOccupation);
             }
         }
     }
     //Write the updates to the datasources.
     $referenceManager->updateReference($reference);
 }
Example #3
0
 protected function _pushToEmploymentMunt($reference)
 {
     $occupationDatasource = new Datasource_ReferencingLegacy_Occupations();
     //If the reference subject is self employed and has a future employer, then the Munt only
     //recognizes the future employer and does not record the current....
     $occupationManager = new Manager_Referencing_Occupation();
     $currentOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
     $futureOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
     if ($currentOccupation->type == Model_Referencing_OccupationTypes::SELFEMPLOYMENT) {
         if (!empty($futureOccupation)) {
             if ($futureOccupation->type == Model_Referencing_OccupationTypes::EMPLOYMENT) {
                 $occupationDatasource->insertOccupation($futureOccupation, $reference->externalId);
                 return;
             }
         }
     }
     // Loop round the occupations. If the occupation is insertable, then
     // insert it.
     foreach ($reference->referenceSubject->occupations as $occupation) {
         switch ($occupation->type) {
             case Model_Referencing_OccupationTypes::EMPLOYMENT:
             case Model_Referencing_OccupationTypes::CONTRACT:
             case Model_Referencing_OccupationTypes::SELFEMPLOYMENT:
             case Model_Referencing_OccupationTypes::INDEPENDENT:
             case Model_Referencing_OccupationTypes::RETIREMENT:
                 //Insert the occupation
                 $occupationDatasource->insertOccupation($occupation, $reference->externalId);
                 break;
         }
     }
 }
 /**
  * Displays the reference summary details page as a popup.
  */
 public function summaryDialogAction()
 {
     $this->_helper->getHelper('layout')->disableLayout();
     $session = new Zend_Session_Namespace('referencing_global');
     $referenceManager = new Manager_Referencing_Reference();
     $reference = $referenceManager->getReference($session->referenceId);
     //Prepare the prospective landlord details.
     $prospectiveLandlord = $reference->propertyLease->prospectiveLandlord;
     $pllArray = array();
     $pllArray['name'] = $prospectiveLandlord->name->firstName . ' ' . $prospectiveLandlord->name->lastName;
     $pllArray['contactName'] = '';
     $pllArray['address'] = $prospectiveLandlord->address->addressLine1 . ' ' . $prospectiveLandlord->address->addressLine2 . ' ' . $prospectiveLandlord->address->town;
     $pllArray['postCode'] = $prospectiveLandlord->address->postCode;
     $pllArray['telephone'] = $prospectiveLandlord->contactDetails->telephone1;
     $pllArray['mobile'] = $prospectiveLandlord->contactDetails->telephone2;
     $pllArray['email'] = $prospectiveLandlord->contactDetails->email1;
     $this->view->prospectiveLandlord = $pllArray;
     //Prepare the property details.
     $propertyArray = array();
     $propertyArray['address'] = $reference->propertyLease->address->addressLine1 . ' ' . $reference->propertyLease->address->addressLine2 . ' ' . $reference->propertyLease->address->town;
     $propertyArray['postCode'] = $reference->propertyLease->address->postCode;
     $propertyArray['rent'] = $reference->propertyLease->rentPerMonth->getValue();
     $propertyArray['startDate'] = $reference->propertyLease->tenancyStartDate->toString();
     $propertyArray['duration'] = $reference->propertyLease->tenancyTerm;
     $propertyArray['noOfTenants'] = $reference->propertyLease->noOfTenants;
     $this->view->property = $propertyArray;
     //Prepare the reference subject details
     $referenceSubject = $reference->referenceSubject;
     $referenceSubjectArray = array();
     $referenceSubjectArray['name'] = $referenceSubject->name->firstName . ' ' . $referenceSubject->name->lastName;
     $referenceSubjectArray['maidenName'] = $referenceSubject->name->maidenName;
     $referenceSubjectArray['dob'] = $referenceSubject->dob->toString();
     if (!empty($referenceSubject->bankAccount)) {
         $referenceSubjectArray['bankAccountNumber'] = $referenceSubject->bankAccount->accountNumber;
         $referenceSubjectArray['bankSortCode'] = $referenceSubject->bankAccount->sortCode;
     } else {
         $referenceSubjectArray['bankAccountNumber'] = '';
         $referenceSubjectArray['bankSortCode'] = '';
     }
     $referenceSubjectArray['telephone'] = $referenceSubject->contactDetails->telephone1;
     $referenceSubjectArray['mobile'] = $referenceSubject->contactDetails->telephone2;
     $referenceSubjectArray['email'] = $referenceSubject->contactDetails->email1;
     $residenceManager = new Manager_Referencing_Residence();
     $residence = $residenceManager->findSpecificResidence($reference->referenceSubject->residences, Model_Referencing_ResidenceChronology::CURRENT);
     $referenceSubjectArray['currentResidentialStatus'] = Model_Referencing_ResidenceStatus::toString($residence->status);
     $occupationManager = new Manager_Referencing_Occupation();
     $occupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
     //Convert the occupation type to an 'occupation status' for display purposes.
     switch ($occupation->type) {
         case Model_Referencing_OccupationTypes::EMPLOYMENT:
             $occupationStatus = 'Employed';
             break;
         case Model_Referencing_OccupationTypes::CONTRACT:
             $occupationStatus = 'On Contract';
             break;
         case Model_Referencing_OccupationTypes::SELFEMPLOYMENT:
             $occupationStatus = 'Self Employed';
             break;
         case Model_Referencing_OccupationTypes::INDEPENDENT:
             $occupationStatus = 'Financially Independent';
             break;
         case Model_Referencing_OccupationTypes::RETIREMENT:
             $occupationStatus = 'Retired';
             break;
         case Model_Referencing_OccupationTypes::STUDENT:
             $occupationStatus = 'Student';
             break;
         case Model_Referencing_OccupationTypes::UNEMPLOYMENT:
             $occupationStatus = 'Unemployed';
             break;
         case Model_Referencing_OccupationTypes::OTHER:
             $occupationStatus = 'Other';
             break;
         default:
             throw new Zend_Exception(get_class() . '::' . __FUNCTION__ . ': unknonwn type provided.');
     }
     $referenceSubjectArray['currentOccupationStatus'] = $occupationStatus;
     $referenceSubjectArray['isOccupationLikelyToChange'] = $occupation->isPermanent ? 'No' : 'Yes';
     //Calculate the total income.
     $totalIncome = new Zend_Currency(array('value' => 0, 'precision' => 0));
     foreach ($reference->referenceSubject->occupations as $occupation) {
         $totalIncome->add($occupation->income);
     }
     $referenceSubjectArray['income'] = $totalIncome->getValue();
     $referenceSubjectArray['shareOfRent'] = $referenceSubject->shareOfRent->getValue();
     $this->view->referenceSubject = $referenceSubjectArray;
     //Prepare the current landlord details.
     $currentResidence = $residenceManager->findSpecificResidence($reference->referenceSubject->residences, Model_Referencing_ResidenceChronology::CURRENT);
     $currentLandlordArray = array();
     if (!empty($currentResidence->refereeDetails)) {
         $currentLandlordArray['name'] = $currentResidence->refereeDetails->name->firstName . ' ' . $currentResidence->refereeDetails->name->lastName;
         $currentLandlordArray['address'] = $currentResidence->refereeDetails->address->addressLine1 . ' ' . $currentResidence->refereeDetails->address->addressLine2 . ' ' . $currentResidence->refereeDetails->address->town;
         $currentLandlordArray['postCode'] = $currentResidence->refereeDetails->address->postCode;
         $currentLandlordArray['telephoneDay'] = $currentResidence->refereeDetails->contactDetails->telephone1;
         $currentLandlordArray['telephoneEvening'] = $currentResidence->refereeDetails->contactDetails->telephone2;
         $currentLandlordArray['fax'] = $currentResidence->refereeDetails->contactDetails->fax1;
         $currentLandlordArray['email'] = $currentResidence->refereeDetails->contactDetails->email1;
     } else {
         $currentLandlordArray['name'] = '';
         $currentLandlordArray['address'] = '';
         $currentLandlordArray['postCode'] = '';
         $currentLandlordArray['telephoneDay'] = '';
         $currentLandlordArray['telephoneEvening'] = '';
         $currentLandlordArray['fax'] = '';
         $currentLandlordArray['email'] = '';
     }
     $this->view->currentLandlord = $currentLandlordArray;
     //Prepare the occupation details.
     for ($i = 0; $i < 2; $i++) {
         switch ($i) {
             case 0:
                 $thisOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::CURRENT, Model_Referencing_OccupationImportance::FIRST);
                 break;
             case 1:
                 $thisOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
                 break;
         }
         $thisOccupationArray = array();
         if (empty($thisOccupation)) {
             $thisOccupationArray['organisationName'] = '';
             $thisOccupationArray['contactName'] = '';
             $thisOccupationArray['contactPosition'] = '';
             $thisOccupationArray['oranisationAddress'] = '';
             $thisOccupationArray['postCode'] = '';
             $thisOccupationArray['telephone'] = '';
             $thisOccupationArray['fax'] = '';
             $thisOccupationArray['email'] = '';
             $thisOccupationArray['salary'] = '';
             $thisOccupationArray['positionHeld'] = '';
             $thisOccupationArray['payrollNumber'] = '';
             $thisOccupationArray['startDate'] = '';
             $thisOccupationArray['endDate'] = '';
             $thisOccupationArray['isPermanent'] = '';
         } else {
             if (!empty($thisOccupation->refereeDetails)) {
                 $thisOccupationArray['organisationName'] = $thisOccupation->refereeDetails->organisationName;
                 $thisOccupationArray['contactName'] = $thisOccupation->refereeDetails->name->firstName . ' ' . $thisOccupation->refereeDetails->name->lastName;
                 $thisOccupationArray['contactPosition'] = $thisOccupation->refereeDetails->position;
                 $thisOccupationArray['oranisationAddress'] = $thisOccupation->refereeDetails->address->addressLine1 . ' ' . $thisOccupation->refereeDetails->address->addressLine2 . ' ' . $thisOccupation->refereeDetails->address->town;
                 $thisOccupationArray['postCode'] = $thisOccupation->refereeDetails->address->postCode;
                 $thisOccupationArray['telephone'] = $thisOccupation->refereeDetails->contactDetails->telephone1;
                 $thisOccupationArray['fax'] = $thisOccupation->refereeDetails->contactDetails->fax1;
                 $thisOccupationArray['email'] = $thisOccupation->refereeDetails->contactDetails->email1;
             } else {
                 $thisOccupationArray['organisationName'] = '';
                 $thisOccupationArray['contactName'] = '';
                 $thisOccupationArray['contactPosition'] = '';
                 $thisOccupationArray['oranisationAddress'] = '';
                 $thisOccupationArray['postCode'] = '';
                 $thisOccupationArray['telephone'] = '';
                 $thisOccupationArray['fax'] = '';
                 $thisOccupationArray['email'] = '';
             }
             if (empty($thisOccupation->variables)) {
                 $thisOccupationArray['positionHeld'] = '';
                 $thisOccupationArray['payrollNumber'] = '';
             } else {
                 $thisOccupationArray['positionHeld'] = $thisOccupation->variables[Model_Referencing_OccupationVariables::POSITION];
                 $thisOccupationArray['payrollNumber'] = $thisOccupation->variables[Model_Referencing_OccupationVariables::PAYROLL_NUMBER];
             }
             $thisOccupationArray['salary'] = $thisOccupation->income->getValue();
             $thisOccupationArray['positionHeld'] = '';
             $thisOccupationArray['payrollNumber'] = '';
             $thisOccupationArray['startDate'] = empty($thisOccupation->startDate) ? '' : $thisOccupation->startDate->toString();
             $thisOccupationArray['endDate'] = '';
             $thisOccupationArray['isPermanent'] = $thisOccupation->isPermanent ? 'Yes' : 'No';
         }
         switch ($i) {
             case 0:
                 $this->view->currentOccupation = $thisOccupationArray;
                 break;
             case 1:
                 $this->view->futureOccupation = $thisOccupationArray;
                 break;
         }
     }
     //Prepare the residential details.
     for ($i = 0; $i < 3; $i++) {
         switch ($i) {
             case 0:
                 $thisResidence = $residenceManager->findSpecificResidence($reference->referenceSubject->residences, Model_Referencing_ResidenceChronology::CURRENT);
                 break;
             case 1:
                 $thisResidence = $residenceManager->findSpecificResidence($reference->referenceSubject->residences, Model_Referencing_ResidenceChronology::FIRST_PREVIOUS);
                 break;
             case 2:
                 $thisResidence = $residenceManager->findSpecificResidence($reference->referenceSubject->residences, Model_Referencing_ResidenceChronology::SECOND_PREVIOUS);
                 break;
         }
         $thisResidenceArray = array();
         if (empty($thisResidence)) {
             $thisResidenceArray['address'] = '';
             $thisResidenceArray['postCode'] = '';
             $thisResidenceArray['duration'] = '';
         } else {
             if ($thisResidence->address->isOverseasAddress) {
                 $thisResidenceArray['address'] = 'Overseas';
                 $thisResidenceArray['postCode'] = 'Overseas';
             } else {
                 $thisResidenceArray['address'] = $thisResidence->address->addressLine1 . ' ' . $thisResidence->address->addressLine2 . ' ' . $thisResidence->address->town;
                 $thisResidenceArray['postCode'] = $thisResidence->address->postCode;
             }
             $thisResidenceArray['duration'] = $thisResidence->durationAtAddress;
         }
         switch ($i) {
             case 0:
                 $this->view->firstResidence = $thisResidenceArray;
                 break;
             case 1:
                 $this->view->secondResidence = $thisResidenceArray;
                 break;
             case 2:
                 $this->view->thirdResidence = $thisResidenceArray;
                 break;
         }
     }
 }
 public function saveData()
 {
     $session = new Zend_Session_Namespace('referencing_global');
     $data = $this->getValues();
     $referenceManager = new Manager_Referencing_Reference();
     $reference = $referenceManager->getReference($session->referenceId);
     //Derive the occupation chronology from the current flow item, so that we can locate
     //the relevant occupation to update.
     switch ($session->currentFlowItem) {
         case Model_Referencing_DataEntry_FlowItems::CURRENT_OCCUPATION:
             $chronology = Model_Referencing_OccupationChronology::CURRENT;
             $classification = Model_Referencing_OccupationImportance::FIRST;
             break;
         case Model_Referencing_DataEntry_FlowItems::SECOND_OCCUPATION:
             $chronology = Model_Referencing_OccupationChronology::CURRENT;
             $classification = Model_Referencing_OccupationImportance::SECOND;
             break;
         case Model_Referencing_DataEntry_FlowItems::FUTURE_OCCUPATION:
             $chronology = Model_Referencing_OccupationChronology::FUTURE;
             $classification = Model_Referencing_OccupationImportance::FIRST;
             break;
     }
     //Attept to locate the relevant occupation.
     $occupationManager = new Manager_Referencing_Occupation();
     $thisOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, $chronology, $classification);
     if (empty($thisOccupation)) {
         //The occupation to process does not exist, so create it first.
         $thisOccupation = $occupationManager->createNewOccupation($session->referenceId, $chronology, $classification);
         if (empty($reference->referenceSubject->occupations)) {
             $reference->referenceSubject->occupations = array();
         }
         $reference->referenceSubject->occupations[] = $thisOccupation;
     }
     //Now update $thisOccupation with the occupational details provided by the ReferenceSubject.
     if (empty($thisOccupation->refereeDetails)) {
         $refereeManager = new Manager_Referencing_OccupationReferee();
         $thisOccupation->refereeDetails = $refereeManager->createReferee($thisOccupation->id);
     }
     //Add general details.
     $thisOccupation->refereeDetails->organisationName = $data['company_name'];
     $thisOccupation->refereeDetails->position = $data['contact_position'];
     $thisOccupation->income = new Zend_Currency(array('value' => $data['income'], 'precision' => 0));
     //Add the referee name if required.
     if (empty($thisOccupation->refereeDetails->name)) {
         $nameManager = new Manager_Core_Name();
         $thisOccupation->refereeDetails->name = $nameManager->createName();
     }
     $nameArray = preg_split("/\\s/", $data['contact_name']);
     if (count($nameArray) >= 2) {
         $thisOccupation->refereeDetails->name->firstName = array_shift($nameArray);
         $thisOccupation->refereeDetails->name->lastName = array_pop($nameArray);
     } else {
         if (count($nameArray) == 1) {
             $thisOccupation->refereeDetails->name->firstName = array_shift($nameArray);
         }
     }
     //Capture and process the referee address.
     $postcodeManager = new Manager_Core_Postcode();
     $propertyAddress = $postcodeManager->getPropertyByID($data['property_address'], false);
     $addressLine1 = ($propertyAddress['organisation'] != '' ? "{$propertyAddress['organisation']}, " : '') . ($propertyAddress['houseNumber'] != '' ? "{$propertyAddress['houseNumber']} " : '') . ($propertyAddress['buildingName'] != '' ? "{$propertyAddress['buildingName']}, " : '') . $propertyAddress['address2'];
     $addressLine2 = $propertyAddress['address4'];
     $town = $propertyAddress['address5'];
     $postCode = $data['property_postcode'];
     if (empty($thisOccupation->refereeDetails->address)) {
         $addressManager = new Manager_Core_Address();
         $thisOccupation->refereeDetails->address = $addressManager->createAddress();
     }
     $thisOccupation->refereeDetails->address->addressLine1 = $addressLine1;
     $thisOccupation->refereeDetails->address->addressLine2 = $addressLine2;
     $thisOccupation->refereeDetails->address->town = $town;
     $thisOccupation->refereeDetails->address->postCode = $postCode;
     //Capture and process the referee contact details.
     if (empty($thisOccupation->refereeDetails->contactDetails)) {
         $contactDetailsManager = new Manager_Core_ContactDetails();
         $thisOccupation->refereeDetails->contactDetails = $contactDetailsManager->createContactDetails();
     }
     $thisOccupation->refereeDetails->contactDetails->telephone1 = $data['telephone_number'];
     $thisOccupation->refereeDetails->contactDetails->fax1 = $data['fax_number'];
     $thisOccupation->refereeDetails->contactDetails->email1 = $data['email'];
     if (!empty($data['tenancy_start_date'])) {
         $thisOccupation->startDate = new Zend_Date($data['tenancy_start_date'], Zend_Date::DATES);
     }
     if (!empty($data['is_permanent'])) {
         if ($data['is_permanent'] == 'Yes') {
             $thisOccupation->isPermanent = true;
         } else {
             $thisOccupation->isPermanent = false;
         }
     }
     //Now capture the optional details and insert into the occupation variables array.
     if (!empty($data['reference_number'])) {
         if (empty($thisOccupation->variables)) {
             $thisOccupation->variables = array();
         }
         $thisOccupation->variables[Model_Referencing_OccupationVariables::PAYROLL_NUMBER] = $data['reference_number'];
     }
     if (!empty($data['position'])) {
         if (empty($thisOccupation->variables)) {
             $thisOccupation->variables = array();
         }
         $thisOccupation->variables[Model_Referencing_OccupationVariables::POSITION] = $data['position'];
     }
     //Identify if a future occupation is applicable and required.
     if (!empty($data['will_change'])) {
         if ($data['will_change'] == 'Yes') {
             //If its going to change then we need to create a future employer record, if not already
             //done so.
             $futureOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
             if (empty($futureOccupation)) {
                 $createFutureOccupation = true;
             } else {
                 $createFutureOccupation = false;
             }
             if ($createFutureOccupation) {
                 $futureOccupation = $occupationManager->createNewOccupation($session->referenceId, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
                 $futureOccupation->type = Model_Referencing_OccupationTypes::EMPLOYMENT;
                 $reference->referenceSubject->occupations[] = $futureOccupation;
             }
         } else {
             //Delete any future employer records.
             $futureOccupation = $occupationManager->findSpecificOccupation($reference->referenceSubject->occupations, Model_Referencing_OccupationChronology::FUTURE, Model_Referencing_OccupationImportance::FIRST);
             if (!empty($futureOccupation)) {
                 $occupationManager->deleteOccupation($futureOccupation);
             }
         }
     }
     //And update...
     $referenceManager->updateReference($reference);
     return $thisOccupation;
 }