Skip to content

Commit cd25ba5

Browse files
authored
Added support for queryFilter (SQL) in ListRequest and PrintRequest (riesenia#50)
* added support for queryFilter (SQL) in ListRequest and PrintRequest * Record - filter/queryFilter are optional * QueryFilter - fixed normalizer for "filter" and set as required * Tests - it_creates_correct_xml_for_invoice_with_query_filter
1 parent b10f769 commit cd25ba5

File tree

4 files changed

+85
-5
lines changed

4 files changed

+85
-5
lines changed

spec/Pohoda/ListRequestSpec.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ public function it_creates_correct_xml_for_invoice_with_user_filter_name()
105105
$this->addUserFilterName('CustomFilter')->getXML()->asXML()->shouldReturn('<lst:listInvoiceRequest version="2.0" invoiceVersion="2.0" invoiceType="issuedInvoice"><lst:requestInvoice><ftr:userFilterName>CustomFilter</ftr:userFilterName></lst:requestInvoice></lst:listInvoiceRequest>');
106106
}
107107

108+
public function it_creates_correct_xml_for_invoice_with_query_filter()
109+
{
110+
$this->beConstructedWith([
111+
'type' => 'Invoice'
112+
], '123');
113+
114+
$this->addQueryFilter([
115+
'filter' => '(FA.DatSave>=CONVERT(DATETIME, \'01/31/2025 16:30:00\', 101) OR FA.DatLikv>=CONVERT(DATETIME, \'01/31/2025\', 101))',
116+
'textName' => '(Uloženo >= 2025-01-31 16:30:00; Likv. >= 2025-01-31)',
117+
])->getXML()->asXML()->shouldReturn('<lst:listInvoiceRequest version="2.0" invoiceVersion="2.0" invoiceType="issuedInvoice"><lst:requestInvoice><ftr:queryFilter><ftr:filter>(FA.DatSave&gt;=CONVERT(DATETIME, \'01/31/2025 16:30:00\', 101) OR FA.DatLikv&gt;=CONVERT(DATETIME, \'01/31/2025\', 101))</ftr:filter><ftr:textName>(Uloženo &gt;= 2025-01-31 16:30:00; Likv. &gt;= 2025-01-31)</ftr:textName></ftr:queryFilter></lst:requestInvoice></lst:listInvoiceRequest>');
118+
}
119+
108120
public function it_creates_correct_xml_for_stock_with_complex_filter()
109121
{
110122
$this->beConstructedWith([

src/Pohoda/Filter/QueryFilter.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* This file is part of riesenia/pohoda package.
4+
*
5+
* Licensed under the MIT License
6+
* (c) RIESENIA.com
7+
*/
8+
9+
declare(strict_types=1);
10+
11+
namespace Riesenia\Pohoda\Filter;
12+
13+
use Riesenia\Pohoda\Agenda;
14+
use Riesenia\Pohoda\Common\OptionsResolver;
15+
16+
class QueryFilter extends Agenda
17+
{
18+
/** @var string[] */
19+
protected $_elements = ['filter', 'textName'];
20+
21+
/**
22+
* {@inheritdoc}
23+
*/
24+
public function getXML(): \SimpleXMLElement
25+
{
26+
$xml = $this->_createXML()->addChild('ftr:queryFilter', '', $this->_namespace('ftr'));
27+
28+
$this->_addElements($xml, $this->_elements, 'ftr');
29+
30+
return $xml;
31+
}
32+
33+
/**
34+
* {@inheritdoc}
35+
*/
36+
protected function _configureOptions(OptionsResolver $resolver)
37+
{
38+
// available options
39+
$resolver->setDefined($this->_elements);
40+
41+
// validate / format options
42+
$resolver->setRequired('filter');
43+
$resolver->setNormalizer('filter', $resolver->getNormalizer('string255'));
44+
$resolver->setNormalizer('textName', $resolver->getNormalizer('string200'));
45+
}
46+
}

src/Pohoda/ListRequest.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
namespace Riesenia\Pohoda;
1212

1313
use Riesenia\Pohoda\Common\OptionsResolver;
14+
use Riesenia\Pohoda\Filter\QueryFilter;
1415
use Riesenia\Pohoda\ListRequest\Filter;
1516
use Riesenia\Pohoda\ListRequest\Limit;
1617
use Riesenia\Pohoda\ListRequest\RestrictionData;
@@ -34,6 +35,20 @@ public function addFilter(array $data): self
3435
return $this;
3536
}
3637

38+
/**
39+
* Add query filter (SQL).
40+
*
41+
* @param array<string,mixed> $data
42+
*
43+
* @return $this
44+
*/
45+
public function addQueryFilter(array $data): self
46+
{
47+
$this->_data['queryFilter'] = new QueryFilter($data, $this->_ico);
48+
49+
return $this;
50+
}
51+
3752
/**
3853
* Add restriction data.
3954
*
@@ -118,7 +133,7 @@ public function getXML(): \SimpleXMLElement
118133
$this->_addElements($xml, ['restrictionData'], 'lst');
119134
}
120135

121-
$this->_addElements($request, ['filter', 'userFilterName'], 'ftr');
136+
$this->_addElements($request, ['filter', 'queryFilter', 'userFilterName'], 'ftr');
122137
}
123138

124139
return $xml;

src/Pohoda/PrintRequest/Record.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
use Riesenia\Pohoda\Agenda;
1414
use Riesenia\Pohoda\Common\OptionsResolver;
15+
use Riesenia\Pohoda\Filter\QueryFilter;
1516

1617
class Record extends Agenda
1718
{
@@ -21,7 +22,14 @@ class Record extends Agenda
2122
public function __construct(array $data, string $ico, bool $resolveOptions = true)
2223
{
2324
// process filter
24-
$data['filter'] = new Filter($data['filter'], $ico, $resolveOptions);
25+
if (isset($data['filter'])) {
26+
$data['filter'] = new Filter($data['filter'], $ico, $resolveOptions);
27+
}
28+
29+
// process query filter (SQL)
30+
if (isset($data['queryFilter'])) {
31+
$data['queryFilter'] = new QueryFilter($data['queryFilter'], $ico, $resolveOptions);
32+
}
2533

2634
parent::__construct($data, $ico, $resolveOptions);
2735
}
@@ -34,7 +42,7 @@ public function getXML(): \SimpleXMLElement
3442
$xml = $this->_createXML()->addChild('prn:record', '', $this->_namespace('prn'));
3543
$xml->addAttribute('agenda', $this->_data['agenda']);
3644

37-
$this->_addElements($xml, ['filter'], 'prn');
45+
$this->_addElements($xml, ['filter', 'queryFilter'], 'prn');
3846

3947
return $xml;
4048
}
@@ -45,9 +53,8 @@ public function getXML(): \SimpleXMLElement
4553
protected function _configureOptions(OptionsResolver $resolver)
4654
{
4755
// available options
48-
$resolver->setDefined(['agenda', 'filter']);
56+
$resolver->setDefined(['agenda', 'filter', 'queryFilter']);
4957

5058
$resolver->setRequired('agenda');
51-
$resolver->setRequired('filter');
5259
}
5360
}

0 commit comments

Comments
 (0)