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); }
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; }