diff --git a/src/Opg/Core/Model/Entity/CaseItem/BusinessRule.php b/src/Opg/Core/Model/Entity/CaseItem/BusinessRule.php new file mode 100644 index 00000000..2dbfe5e0 --- /dev/null +++ b/src/Opg/Core/Model/Entity/CaseItem/BusinessRule.php @@ -0,0 +1,150 @@ +id; + } + + /** + * @param int $id + * + * @return BusinessRule + */ + public function setId($id) + { + $this->id = $id; + + return $this; + } + + /** + * @return \Opg\Common\Model\Entity\Traits\InputFilter|InputFilterInterface + */ + public function getInputFilter() + { + if (!$this->inputFilter) { + $this->inputFilter = new InputFilter(); + } + + return $this->inputFilter; + } + + /** + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * @param string $key + * + * @return BusinessRule + */ + public function setKey($key) + { + $this->key = $key; + + return $this; + } + + /** + * @return string + * + * @return BusinessRule + */ + public function getValue() + { + return $this->value; + } + + /** + * @param string $value + * + * @return BusinessRule + */ + public function setValue($value) + { + $this->value = $value; + + return $this; + } + + /** + * @return CaseItem + */ + public function getCase() + { + return $this->case; + } + + /** + * @param CaseItem $case + * + * @return BusinessRule + */ + public function setCase(CaseItem $case) + { + $this->case = $case; + + return $this; + } +} diff --git a/src/Opg/Core/Model/Entity/CaseItem/CaseItem.php b/src/Opg/Core/Model/Entity/CaseItem/CaseItem.php index 6b644418..74bfbcd2 100755 --- a/src/Opg/Core/Model/Entity/CaseItem/CaseItem.php +++ b/src/Opg/Core/Model/Entity/CaseItem/CaseItem.php @@ -27,8 +27,6 @@ use JMS\Serializer\Annotation\Groups; use JMS\Serializer\Annotation\Type; use Opg\Common\Model\Entity\DateFormat as OPGDateFormat; -use Opg\Core\Validation\InputFilter\IdentifierFilter; -use Opg\Core\Validation\InputFilter\UidFilter; /** * @ORM\MappedSuperclass @@ -47,15 +45,15 @@ abstract class CaseItem implements EntityInterface, \IteratorAggregate, CaseItem use HasCorrespondence; const APPLICATION_TYPE_CLASSIC = 0; - const APPLICATION_TYPE_ONLINE = 1; + const APPLICATION_TYPE_ONLINE = 1; /** * Constants below are for payment types radio buttons, we use 0 * as default */ const PAYMENT_OPTION_NOT_SET = 0; - const PAYMENT_OPTION_FALSE = 1; - const PAYMENT_OPTION_TRUE = 2; + const PAYMENT_OPTION_FALSE = 1; + const PAYMENT_OPTION_TRUE = 2; /** @@ -96,7 +94,6 @@ abstract class CaseItem implements EntityInterface, \IteratorAggregate, CaseItem * @var string * @Type("string") * @Serializer\Groups({"api-poa-list","api-task-list"}) - * @Accessor(getter="getCaseType", setter="setCaseType") */ protected $caseType; @@ -216,12 +213,19 @@ abstract class CaseItem implements EntityInterface, \IteratorAggregate, CaseItem */ protected $ragTotal; + /** + * @ORM\OneToMany(targetEntity="Opg\Core\Model\Entity\CaseItem\BusinessRule", mappedBy="case_item", cascade={"all"}, fetch="EAGER") + * @var \Opg\Core\Model\Entity\CaseItem\BusinessRule + */ + protected $businessRules; + public function __construct() { - $this->tasks = new ArrayCollection(); - $this->notes = new ArrayCollection(); - $this->documents = new ArrayCollection(); - $this->caseItems = new ArrayCollection(); + $this->tasks = new ArrayCollection(); + $this->notes = new ArrayCollection(); + $this->documents = new ArrayCollection(); + $this->caseItems = new ArrayCollection(); + $this->businessRules = new ArrayCollection(); } /** @@ -279,18 +283,15 @@ public function setDueDateString($dueDate) */ public function getCaseType() { - return strtoupper($this->caseType); + return $this->caseType; } /** * @param string $caseType - * @return CaseItem */ public function setCaseType($caseType) { - $this->caseType = strtoupper($caseType); - - return $this; + $this->caseType = $caseType; } /** @@ -303,13 +304,10 @@ public function getCaseSubtype() /** * @param string $caseSubtype - * @return CaseItem */ public function setCaseSubtype($caseSubtype) { $this->caseSubtype = $caseSubtype; - - return $this; } /** @@ -330,13 +328,10 @@ public function getAssignedUser() /** * @param string $status - * @return CaseItem */ public function setStatus($status) { $this->status = $status; - - return $this; } /** @@ -557,22 +552,10 @@ public function addCaseItem(CaseItem $item) */ public function getInputFilter() { - $this->inputFilter = new \Zend\InputFilter\InputFilter(); - - $caseItemFilter = new CaseItemFilter(); - foreach($caseItemFilter->getInputs() as $name=>$input) { - $this->inputFilter->add($input, $name); + if (!$this->inputFilter) { + $this->inputFilter = new CaseItemFilter(); } - $uidFilter = new UidFilter(); - foreach($uidFilter->getInputs() as $name=>$input) { - $this->inputFilter->add($input, $name); - } - - $idFilter = new IdentifierFilter(); - foreach($idFilter->getInputs() as $name=>$input) { - $this->inputFilter->add($input, $name); - } return $this->inputFilter; } @@ -760,9 +743,9 @@ public function getRagRating() '3' => 0 ); - if(!empty($this->tasks)) { + if (!empty($this->tasks)) { foreach ($this->tasks as $taskItem) { - if($taskItem->getStatus() !== 'Completed') { + if ($taskItem->getStatus() !== 'Completed') { $rag[$taskItem->getRagRating()]++; } } @@ -771,10 +754,10 @@ public function getRagRating() //Apply rules if (($rag['3'] >= 1) || $rag['2'] > 2) { return 3; - } - elseif ($rag['2'] >= 1) { + } elseif ($rag['2'] >= 1) { return 2; } + return 1; } @@ -785,9 +768,9 @@ public function getRagTotal() { $total = 0; - if(!empty($this->tasks)) { + if (!empty($this->tasks)) { foreach ($this->filterTasks() as $taskItem) { - if($taskItem->getStatus() !== 'Completed') { + if ($taskItem->getStatus() !== 'Completed') { $total += $taskItem->getRagRating(); } } @@ -803,21 +786,69 @@ public function filterTasks() { $activeTasks = new ArrayCollection(); - if(!empty($this->tasks)) { + if (!empty($this->tasks)) { foreach ($this->tasks as $taskItem) { - if($taskItem->getActiveDate() !== null) { - $now = time(); + if ($taskItem->getActiveDate() !== null) { + $now = time(); $taskTime = $taskItem->getActiveDate()->getTimestamp(); if ($now >= $taskTime) { $activeTasks->add($taskItem); } - } - else { + } else { $activeTasks->add($taskItem); } } } + return $activeTasks; } + + /** + * @return ArrayCollection + */ + public function getBusinessRules() + { + return $this->businessRules; + } + + /** + * @param ArrayCollection $businessRules + * + * @return CaseItem + */ + public function setBusinessRules(ArrayCollection $businessRules) + { + $this->businessRules = $businessRules; + + return $this; + } + + /** + * @param BusinessRule $businessRule + * + * @return CaseItem + */ + public function addBusinessRules(BusinessRule $businessRule) + { + $this->businessRules[] = $businessRule; + + return $this; + } + + /** + * @param string $key + * + * @return BusinessRule|null + */ + public function getBusinessRule($key) + { + foreach ($this->getBusinessRules() as $rule) { + if ($rule->getKey() == $key) { + return $rule; + } + } + + return null; + } } diff --git a/tests/OpgTest/Core/Model/Entity/CaseItem/BusinessRuleTest.php b/tests/OpgTest/Core/Model/Entity/CaseItem/BusinessRuleTest.php new file mode 100644 index 00000000..ad5c2557 --- /dev/null +++ b/tests/OpgTest/Core/Model/Entity/CaseItem/BusinessRuleTest.php @@ -0,0 +1,53 @@ +getMockForAbstractClass('\Opg\Core\Model\Entity\CaseItem\BusinessRule'); + } + + public function testSetGetId() + { + $businessRuleMock = $this->getMockedClass(); + $expected = 123; + $businessRuleMock->setId($expected); + + $this->assertEquals($expected, $businessRuleMock->getId()); + } + + public function testSetGetKey() + { + $businessRuleMock = $this->getMockedClass(); + $expected = 'testkey'; + $businessRuleMock->setKey($expected); + + $this->assertEquals($expected, $businessRuleMock->getKey()); + } + + public function testSetGetValue() + { + $businessRuleMock = $this->getMockedClass(); + $expected = 'testvalue'; + $businessRuleMock->setValue($expected); + + $this->assertEquals($expected, $businessRuleMock->getValue()); + } + + public function testSetGetCase() + { + $businessRuleMock = $this->getMockedClass(); + $expected = new Lpa(); + $businessRuleMock->setCase($expected); + + $this->assertEquals($expected, $businessRuleMock->getCase()); + } +} diff --git a/tests/OpgTest/Core/Model/Entity/CaseItem/CaseItemTest.php b/tests/OpgTest/Core/Model/Entity/CaseItem/CaseItemTest.php index 1a5ca5e2..2eac443f 100644 --- a/tests/OpgTest/Core/Model/Entity/CaseItem/CaseItemTest.php +++ b/tests/OpgTest/Core/Model/Entity/CaseItem/CaseItemTest.php @@ -2,6 +2,7 @@ namespace OpgTest\Core\Model\Entity\CaseItem; use Doctrine\Common\Collections\ArrayCollection; +use Opg\Core\Model\Entity\CaseItem\BusinessRule; use Opg\Core\Model\Entity\CaseItem\CaseItem; use Opg\Core\Model\Entity\CaseItem\Document\Document; use Opg\Core\Model\Entity\CaseItem\Lpa\Lpa; @@ -454,4 +455,57 @@ public function testGetSetClosedDateStringInvalidDate() $this->assertEmpty($caseItemMock->getClosedDateString()); } + public function testSetGetBusinessRules() + { + $businessRule = new BusinessRule(); + $businessRule->setKey('testkey'); + $businessRule->setValue('testvalue'); + + $collection = new ArrayCollection(); + $collection->add($businessRule); + + $this->getMockedClass()->setBusinessRules($collection); + + $this->assertEquals($collection, $this->getMockedClass()->getBusinessRules()); + } + + public function testAddGetBusinessRules() + { + $businessRule = new BusinessRule(); + $businessRule->setKey('testkey'); + $businessRule->setValue('testvalue'); + + $collection = new ArrayCollection(); + $collection->add($businessRule); + + $this->getMockedClass()->addBusinessRule($businessRule); + + $this->assertEquals($collection, $this->getMockedClass()->getBusinessRules()); + } + + public function testGetBusinessRule() + { + $key = 'testkey'; + + $businessRule = new BusinessRule(); + $businessRule->setKey($key); + $businessRule->setValue('testvalue'); + + $this->getMockedClass()->addBusinessRule($businessRule); + + $this->assertEquals($businessRule, $this->getMockedClass()->getBusinessRule($key)); + } + + public function testGetBusinessRuleNotFound() + { + $key = 'testkey'; + + $businessRule = new BusinessRule(); + $businessRule->setKey($key); + $businessRule->setValue('testvalue'); + + $this->getMockedClass()->addBusinessRule($businessRule); + + $this->assertEquals(null, $this->getMockedClass()->getBusinessRule($key . '2')); + } }