diff --git a/application/Espo/Core/Formula/Functions/RecordGroup/CountType.php b/application/Espo/Core/Formula/Functions/RecordGroup/CountType.php index c23d1cd24d..83dc288f83 100644 --- a/application/Espo/Core/Formula/Functions/RecordGroup/CountType.php +++ b/application/Espo/Core/Formula/Functions/RecordGroup/CountType.php @@ -64,8 +64,13 @@ class CountType extends \Espo\Core\Formula\Functions\Base $selectManager = $this->getInjection('selectManagerFactory')->create($entityType); $selectParams = $selectManager->getEmptySelectParams(); + if ($filter) { - $selectManager->applyFilter($filter, $selectParams); + if (is_string($filter)) { + $selectManager->applyFilter($filter, $selectParams); + } else { + throw new Error("Formula record\\count: Bad filter."); + } } return $this->getInjection('entityManager')->getRepository($entityType)->count($selectParams); diff --git a/tests/integration/Espo/Core/Formula/FormulaTest.php b/tests/integration/Espo/Core/Formula/FormulaTest.php index be8a12dafd..f37e9648f9 100644 --- a/tests/integration/Espo/Core/Formula/FormulaTest.php +++ b/tests/integration/Espo/Core/Formula/FormulaTest.php @@ -94,4 +94,69 @@ class FormulaTest extends \tests\integration\Core\BaseTestCase $result = $formulaManager->run($script, $contact); $this->assertEquals(40, $result); } + + public function testRecordExists() + { + $em = $this->getContainer()->get('entityManager'); + + $em->createEntity('Meeting', [ + 'status' => 'Held', + ]); + $em->createEntity('Meeting', [ + 'status' => 'Planned', + ]); + + $fm = $this->getContainer()->get('formulaManager'); + + $script = "record\\exists('Meeting', 'status', 'Held')"; + $result = $fm->run($script, $contact); + $this->assertTrue($result); + + $script = "record\\exists('Meeting', 'status', 'Not Held')"; + $result = $fm->run($script, $contact); + $this->assertFalse($result); + + $script = "record\\exists('Meeting', 'status', list('Held', 'Planned'))"; + $result = $fm->run($script, $contact); + $this->assertTrue($result); + + $script = "record\\exists('Meeting', 'status', list('Not Held'))"; + $result = $fm->run($script, $contact); + $this->assertFalse($result); + } + + public function testRecordCount() + { + $em = $this->getContainer()->get('entityManager'); + + $em->createEntity('Meeting', [ + 'status' => 'Held', + ]); + $em->createEntity('Meeting', [ + 'status' => 'Planned', + ]); + + $fm = $this->getContainer()->get('formulaManager'); + + $script = "record\\count('Meeting', 'status', 'Held')"; + $result = $fm->run($script, $contact); + $this->assertEquals(1, $result); + + $script = "record\\count('Meeting', 'status', 'Not Held')"; + $result = $fm->run($script, $contact); + $this->assertEquals(0, $result); + + $script = "record\\count('Meeting', 'status', list('Held', 'Planned'))"; + $result = $fm->run($script, $contact); + $this->assertEquals(2, $result); + + $script = "record\\count('Meeting', 'status', list('Not Held'))"; + $result = $fm->run($script, $contact); + $this->assertEquals(0, $result); + + + $script = "record\\count('Meeting', 'planned')"; + $result = $fm->run($script, $contact); + $this->assertEquals(1, $result); + } }