diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 8dac4552..9bcf3103 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -44,7 +44,6 @@ doctrine: dql: string_functions: regexp: DoctrineExtensions\Query\Mysql\Regexp - ifnull: DoctrineExtensions\Query\Mysql\IfNull field: DoctrineExtensions\Query\Mysql\Field field2: App\Doctrine\Functions\Field2 diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index 67dfa771..06927d55 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -345,7 +345,7 @@ final class PartsDataTable implements DataTableTypeInterface //Calculate amount sum using a subquery, so we can filter and sort by it $builder->addSelect( '( - SELECT IFNULL(SUM(partLot.amount), 0.0) + SELECT COALESCE(SUM(partLot.amount), 0.0) FROM '.PartLot::class.' partLot WHERE partLot.part = part.id AND partLot.instock_unknown = false diff --git a/tests/DatatablesAvailabilityTest.php b/tests/DatatablesAvailabilityTest.php index 3cb34d9b..7c7d055b 100644 --- a/tests/DatatablesAvailabilityTest.php +++ b/tests/DatatablesAvailabilityTest.php @@ -48,7 +48,7 @@ class DatatablesAvailabilityTest extends WebTestCase /** * @dataProvider urlProvider */ - public function testDataTable(string $url): void + public function testDataTable(string $url, ?array $ordering = null): void { //We have localized routes $url = '/en'.$url; @@ -68,7 +68,14 @@ class DatatablesAvailabilityTest extends WebTestCase 'PHP_AUTH_PW' => 'test', ]); $client->catchExceptions(false); - $client->request('POST', $url, ['_dt' => 'dt']); + + $post = ['_dt' => 'dt']; + + if ($ordering) { + $post['order'] = $ordering; + } + + $client->request('POST', $url, $post); $this->assertTrue($client->getResponse()->isSuccessful()); $this->assertJson($client->getResponse()->getContent()); } @@ -93,4 +100,10 @@ class DatatablesAvailabilityTest extends WebTestCase yield ['/category/1/parts?part_filter%5Bname%5D%5Boperator%5D=%3D&part_filter%5Bname%5D%5Bvalue%5D=BC547&part_filter%5Bcategory%5D%5Boperator%5D=INCLUDING_CHILDREN&part_filter%5Btags%5D%5Boperator%5D=ANY&part_filter%5Btags%5D%5Bvalue%5D=Test&part_filter%5Bsubmit%5D=']; yield ['/category/1/parts?part_filter%5Bcategory%5D%5Boperator%5D=INCLUDING_CHILDREN&part_filter%5Bstorelocation%5D%5Boperator%5D=%3D&part_filter%5Bstorelocation%5D%5Bvalue%5D=1&part_filter%5BattachmentsCount%5D%5Boperator%5D=%3D&part_filter%5BattachmentsCount%5D%5Bvalue1%5D=3&part_filter%5Bsubmit%5D=']; } + + public function testOrdering(): void + { + //Amount ordering (which uses the dynamic amount calculation) + $this->testDataTable('/parts', [['column' => 9, 'dir' => 'asc']]); + } }