/**
  * Determine if $reference satisfies this Criteria.
  *
  * @param RentRecoveryPlusReference $reference
  * @return bool
  */
 public function isSatisfiedBy(RentRecoveryPlusReference $reference)
 {
     if (EmploymentStatuses::EMPLOYED != $reference->getParent()->getEmploymentStatus()) {
         $this->setNotSatisfiedText(sprintf('Employment criteria is not met. Reference %s employment status is %d', $reference->getParent()->getReferenceNumber(), $reference->getParent()->getEmploymentStatus()))->setIsSatisfied(false);
         return false;
     }
     return true;
 }
 /**
  * @test
  */
 public function criteria_is_not_satisfied_when_reference_has_adverse_credit()
 {
     $reference = new ReferencingApplication();
     $reference->setHasCCJ(true);
     $rrpReference = new RentRecoveryPlusReference();
     $rrpReference->setParent($reference);
     $this->assertFalse($this->criteria->isSatisfiedBy($rrpReference));
 }
 /**
  * Determine if $reference satisfies this Criteria.
  *
  * @param RentRecoveryPlusReference $reference
  * @return bool
  */
 public function isSatisfiedBy(RentRecoveryPlusReference $reference)
 {
     if (ApplicationStatuses::COMPLETE != $reference->getParent()->getStatus()) {
         $this->setNotSatisfiedText(sprintf('Status criteria is not met. Reference %s status is %d', $reference->getParent()->getReferenceNumber(), $reference->getParent()->getStatus()))->setIsSatisfied(false);
         return false;
     }
     return true;
 }
 /**
  * Determine if $reference satisfies this Criteria.
  *
  * @param RentRecoveryPlusReference $reference
  * @return bool
  */
 public function isSatisfiedBy(RentRecoveryPlusReference $reference)
 {
     if ($reference->getParent()->getHasCCJ()) {
         $this->setNotSatisfiedText(sprintf('Adverse credit criteria is not met. Reference %s has adverse credit', $reference->getParent()->getReferenceNumber()))->setIsSatisfied(false);
         return false;
     }
     return true;
 }
 /**
  * @test
  */
 public function displays_reference_number_after_transformation()
 {
     $transformer = new ReferenceNumberToReferenceObjectTransformer($this->mockDecisionDetailsRetriever, $this->mockSessionHolder, $this->mockRentRecoveryPlusReference);
     $parentReference = new ReferencingApplication();
     $parentReference->setReferenceNumber('HLT999');
     $transformedObject = new RentRecoveryPlusReference();
     $transformedObject->setParent($parentReference);
     $this->assertEquals('HLT999', $transformer->transform($transformedObject));
 }
 /**
  * Determine if $reference satisfies this Criteria.
  *
  * @param RentRecoveryPlusReference $reference
  * @return bool
  */
 public function isSatisfiedBy(RentRecoveryPlusReference $reference)
 {
     $recommendationStatus = $reference->getDecisionDetails()->getRecommendation()->getStatus();
     if (RecommendationStatuses::ACCEPTABLE_WITH_GUARANTOR != $recommendationStatus && RecommendationStatuses::ACCEPTABLE_WITH_GUARANTOR_WITH_CONDITION != $recommendationStatus) {
         $this->setNotSatisfiedText(sprintf('Reference %s is not acceptable with a suitable guarantor', $reference->getParent()->getReferenceNumber()))->setIsSatisfied(false);
         return false;
     }
     return true;
 }
 /**
  * Get a guarantor ReferencingApplication from IRIS, attach it to a RentRecoveryPlusReference and return it.
  *
  * @param RentRecoveryPlusReference $tenant
  * @return RentRecoveryPlusReference
  */
 private function createGuarantor(RentRecoveryPlusReference $tenant)
 {
     $guarantorCollection = $this->clientRegistry->getAgentContext()->getReferencingApplicationClient()->getReferencingApplicationGuarantors(array('referencingApplicationUuId' => $tenant->getParent()->getReferencingApplicationUuid()));
     // todo: Grab the first one for now - business will likely want to consider all Guarantors however.
     $guarantor = current($guarantorCollection->getAll());
     $this->rrpGuarantor = new RentRecoveryPlusReference();
     $this->rrpGuarantor->setParent($guarantor)->setDecisionDetails($this->decisionDetailsRetriever->getDecisionDetails($guarantor));
     return $this->rrpGuarantor;
 }
 /**
  * Determine if $reference satisfies this Criteria.
  *
  * @param RentRecoveryPlusReference $reference
  * @return bool
  */
 public function isSatisfiedBy(RentRecoveryPlusReference $reference)
 {
     $creditScore = $reference->getDecisionDetails()->getCreditReference()->getScore();
     if (CreditScoreCriteriaLimits::MINIMUM_INSIGHT_CREDIT_SCORE > $creditScore) {
         $this->setNotSatisfiedText(sprintf('Credit score criteria is not met. Reference %s credit score is %d', $reference->getParent()->getReferenceNumber(), $creditScore))->setIsSatisfied(false);
         return false;
     }
     return true;
 }
 /**
  * Create the relevant criteria group.
  *
  * @param RentRecoveryPlusReference $reference
  * @return DefaultGuarantorCheckCriteriaGroup|DefaultNoGuarantorCheckCriteriaGroup
  */
 protected function createCriteria(RentRecoveryPlusReference $reference)
 {
     // Only need guarantor checks if tenant is not acceptable
     $decisionOutcome = $reference->getDecisionDetails()->getRecommendation()->getStatus();
     $needsGuarantorCheck = RecommendationStatuses::ACCEPTABLE != $decisionOutcome && RecommendationStatuses::ACCEPTABLE_WITH_CONDITION != $decisionOutcome;
     if ($needsGuarantorCheck) {
         return new DefaultGuarantorCheckCriteriaGroup(new StatusCriteria(), new SuitableGuarantorCriteria(), new GuarantorOutcomeCriteria($this->rrpGuarantorReferenceCreator));
     } else {
         return new DefaultNoGuarantorCheckCriteriaGroup(new StatusCriteria());
     }
 }
 /**
  * Pre test set up.
  */
 public function setUp()
 {
     $this->criteria = new CreditScoreCriteria();
     $this->reference = new ReferencingApplication();
     $this->decisionDetails = new ReferencingDecisionDetails();
     $this->creditReference = new CreditReference();
     $this->rrpReference = new RentRecoveryPlusReference();
     $this->rrpReference->setParent($this->reference);
     $this->rrpReference->setDecisionDetails($this->decisionDetails);
     $this->decisionDetails->setCreditReference($this->creditReference);
 }
 public function setUp()
 {
     $this->decisionDetails = new ReferencingDecisionDetails();
     $this->recommendation = new Recommendation();
     $this->guarantorRrpReference = new RentRecoveryPlusReference();
     $this->guarantorRrpReference->setParent(new ReferencingApplication());
     $this->guarantorRrpReference->setDecisionDetails($this->decisionDetails);
     $this->decisionDetails->setRecommendation($this->recommendation);
     $guarantorCreatorMock = $this->getMockBuilder('RRP\\Utility\\RrpGuarantorReferenceCreator')->disableOriginalConstructor()->getMock();
     $guarantorCreatorMock->expects($this->once())->method('getGuarantor')->willReturn($this->guarantorRrpReference);
     $this->criteria = new GuarantorOutcomeCriteria($guarantorCreatorMock);
 }
 /**
  * @return array
  */
 public function getUnemployedReferences()
 {
     $unemployedStatuses = array('unemployed' => EmploymentStatuses::UNEMPLOYED, 'independent' => EmploymentStatuses::INDEPENDENT_MEANS, 'contract' => EmploymentStatuses::ON_CONTRACT, 'retired' => EmploymentStatuses::RETIRED, 'student' => EmploymentStatuses::STUDENT, 'self-employed' => EmploymentStatuses::SELF_EMPLOYED);
     $references = array();
     foreach ($unemployedStatuses as $key => $unemployedStatus) {
         $reference = new ReferencingApplication();
         $reference->setEmploymentStatus($unemployedStatus);
         $rrpReference = new RentRecoveryPlusReference();
         $rrpReference->setParent($reference);
         $references[$key] = $rrpReference;
     }
     return array(array($references['unemployed']), array($references['independent']), array($references['contract']), array($references['retired']), array($references['student']), array($references['self-employed']));
 }
 /**
  * @return array
  */
 public function getIncompleteReferences()
 {
     $incompleteStatuses = array('incomplete' => ApplicationStatuses::INCOMPLETE, 'in_progress' => ApplicationStatuses::IN_PROGRESS, 'awaiting_application_details' => ApplicationStatuses::AWAITING_APPLICATION_DETAILS, 'cancelled' => ApplicationStatuses::CANCELLED, 'declined' => ApplicationStatuses::DECLINED, 'awaiting_agent_review' => ApplicationStatuses::AWAITING_AGENT_REVIEW);
     $references = array();
     foreach ($incompleteStatuses as $key => $incompleteStatus) {
         $reference = new ReferencingApplication();
         $reference->setStatus($incompleteStatus);
         $rrpReference = new RentRecoveryPlusReference();
         $rrpReference->setParent($reference);
         $references[$key] = $rrpReference;
     }
     return array(array($references['incomplete']), array($references['in_progress']), array($references['awaiting_application_details']), array($references['cancelled']), array($references['declined']), array($references['awaiting_agent_review']));
 }
 /**
  * @test
  * @covers RrpGuarantorReferenceCreator::getGuarantor
  * @covers RrpGuarantorReferenceCreator::createGuarantor
  */
 public function guarantor_is_only_retrieved_from_web_service_once_on_consecutive_calls()
 {
     $reference = new ReferencingApplication();
     $rrpReference = new RentRecoveryPlusReference();
     $rrpReference->setParent($reference);
     // Prepare the first call which will talk to web service
     $mockResult = new Collection(array(new ReferencingApplication()));
     $this->mockReferencingApplicationClient->expects($this->once())->method('getReferencingApplicationGuarantors')->willReturn($mockResult);
     $rrpGuarantorReferenceCreator = new RrpGuarantorReferenceCreator($this->mockClientRegistry, $this->mockDecisionDetailsRetriever);
     $rrpGuarantorReferenceCreator->getGuarantor($rrpReference);
     // Second time around, assert that we don't talk to web service, and still return a RentRecoveryPlusReference
     $this->mockClientRegistry->expects($this->never())->method($this->anything());
     $this->assertInstanceOf('RRP\\Model\\RentRecoveryPlusReference', $rrpGuarantorReferenceCreator->getGuarantor($rrpReference));
 }
 /**
  * Takes a reference of type ReferencingApplication and sets it as a parent of a RentRecoveryPlusReference.
  *
  * @param ReferencingApplication $referenceToConvert
  * @return RentRecoveryPlusReference
  */
 private function createRentRecoveryPlusReference(ReferencingApplication $referenceToConvert)
 {
     $decisionDetails = $this->decisionDetailsRetriever->getDecisionDetails($referenceToConvert);
     $this->convertedReference->setParent($referenceToConvert)->setDecisionDetails($decisionDetails);
     return $this->convertedReference;
 }
 /**
  * Determine which strategy to use and create the appropriate criteria group through its factory.
  *
  * @param RentRecoveryPlusReference $reference
  * @return AbstractCriteria
  */
 protected function createCriteriaStrategy(RentRecoveryPlusReference $reference)
 {
     if ($reference->getParent()->getProductId() == ProductIds::INSIGHT) {
         $this->factory = new InsightCriteriaFactory();
     } else {
         $this->factory = new DefaultCriteriaFactory($this->rrpGuarantorReferenceCreator);
     }
     return $this->factory->create($reference);
 }
 /**
  * @return array
  */
 public function getUnsuitableRecommendationStatuses()
 {
     $recommendationStatuses = array('acceptable' => RecommendationStatuses::ACCEPTABLE, 'acceptable_with_condition' => RecommendationStatuses::ACCEPTABLE_WITH_CONDITION, 'not_acceptable' => RecommendationStatuses::NOT_ACCEPTABLE, 'awaiting_further_information' => RecommendationStatuses::AWAITING_FURTHER_INFORMATION, 'awaiting_completion_of_lead_tenant' => RecommendationStatuses::AWAITING_COMPLETION_OF_LEAD_TENANT, 'zero_rent_cotenant_not_acceptable' => RecommendationStatuses::ZERO_RENT_COTENANT_NOT_ACCEPTABLE, 'zero_rent_cotenant_acceptable' => RecommendationStatuses::ZERO_RENT_COTENANT_ACCEPTABLE);
     $references = array();
     foreach ($recommendationStatuses as $key => $recommendationStatus) {
         $recommendation = new Recommendation();
         $recommendation->setStatus($recommendationStatus);
         $decisionDetails = new ReferencingDecisionDetails();
         $decisionDetails->setRecommendation($recommendation);
         $reference = new ReferencingApplication();
         $rrpReference = new RentRecoveryPlusReference();
         $rrpReference->setDecisionDetails($decisionDetails);
         $rrpReference->setParent($reference);
         $references[$key] = $rrpReference;
     }
     return array(array($references['acceptable']), array($references['acceptable_with_condition']), array($references['not_acceptable']), array($references['awaiting_further_information']), array($references['awaiting_completion_of_lead_tenant']), array($references['zero_rent_cotenant_not_acceptable']), array($references['zero_rent_cotenant_acceptable']));
 }