Skip to content

Commit ac688bd

Browse files
authored
Merge branch 'riesenia:master' into master
2 parents 8ac0e3b + 731877e commit ac688bd

File tree

9 files changed

+288
-4
lines changed

9 files changed

+288
-4
lines changed

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88

99
strategy:
1010
matrix:
11-
php-version: ['7.1', '7.2', '7.3', '7.4', '8.0']
11+
php-version: ['7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
1212

1313
steps:
1414
- name: Checkout
@@ -32,8 +32,8 @@ jobs:
3232

3333
- name: Install phpstan
3434
run: composer require --dev phpstan/phpstan:~0.12
35-
if: ${{ matrix.php-version == '8.0' }}
35+
if: ${{ matrix.php-version == '8.0' || matrix.php-version == '8.1' }}
3636

3737
- name: Run phpstan
3838
run: vendor/bin/phpstan analyse -c phpstan.neon
39-
if: ${{ matrix.php-version == '8.0' }}
39+
if: ${{ matrix.php-version == '8.0' || matrix.php-version == '8.1' }}

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"require-dev": {
2222
"friends-of-phpspec/phpspec-expect": "*",
2323
"friendsofphp/php-cs-fixer": "^2.0",
24-
"phpspec/phpspec": "^5.0 || ^6.0",
24+
"phpspec/phpspec": "^5.0 || ^6.0 || ^7.0",
2525
"rshop/php-cs-fixer-config": "^2.0"
2626
},
2727
"autoload": {

spec/Pohoda/BankSpec.php

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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 spec\Riesenia\Pohoda;
12+
13+
use PhpSpec\ObjectBehavior;
14+
15+
class BankSpec extends ObjectBehavior
16+
{
17+
public function let()
18+
{
19+
$this->beConstructedWith([
20+
'bankType' => 'receipt',
21+
'account' => 'KB',
22+
'statementNumber' => [
23+
'statementNumber' => '004',
24+
'numberMovement' => '0002'
25+
],
26+
'symVar' => '456',
27+
'symConst' => '555',
28+
'symSpec' => '666',
29+
'dateStatement' => '2021-12-20',
30+
'datePayment' => '2021-11-22',
31+
'text' => 'STORMWARE s.r.o.',
32+
'paymentAccount' => [
33+
'accountNo' => '4660550217',
34+
'bankCode' => '5500'
35+
]
36+
], '123');
37+
}
38+
39+
public function it_is_initializable_and_extends_agenda()
40+
{
41+
$this->shouldHaveType('Riesenia\Pohoda\Bank');
42+
$this->shouldHaveType('Riesenia\Pohoda\Agenda');
43+
}
44+
45+
public function it_creates_correct_xml()
46+
{
47+
$this->getXML()->asXML()->shouldReturn('<bnk:bank version="2.0"><bnk:bankHeader>' . $this->_defaultHeader() . '</bnk:bankHeader></bnk:bank>');
48+
}
49+
50+
public function it_can_set_summary()
51+
{
52+
$this->addSummary([
53+
'homeCurrency' => [
54+
'priceNone' => 500
55+
]
56+
]);
57+
58+
$this->getXML()->asXML()->shouldReturn('<bnk:bank version="2.0"><bnk:bankHeader>' . $this->_defaultHeader() . '</bnk:bankHeader><bnk:bankSummary><bnk:homeCurrency><typ:priceNone>500</typ:priceNone></bnk:homeCurrency></bnk:bankSummary></bnk:bank>');
59+
}
60+
61+
public function it_can_set_parameters()
62+
{
63+
$this->addParameter('IsOn', 'boolean', 'true');
64+
$this->addParameter('VPrNum', 'number', 10.43);
65+
$this->addParameter('RefVPrCountry', 'list', 'SK', 'Country');
66+
$this->addParameter('CustomList', 'list', ['id' => 5], ['id' => 6]);
67+
68+
$this->getXML()->asXML()->shouldReturn('<bnk:bank version="2.0"><bnk:bankHeader>' . $this->_defaultHeader() . '<bnk:parameters><typ:parameter><typ:name>VPrIsOn</typ:name><typ:booleanValue>true</typ:booleanValue></typ:parameter><typ:parameter><typ:name>VPrNum</typ:name><typ:numberValue>10.43</typ:numberValue></typ:parameter><typ:parameter><typ:name>RefVPrCountry</typ:name><typ:listValueRef><typ:ids>SK</typ:ids></typ:listValueRef><typ:list><typ:ids>Country</typ:ids></typ:list></typ:parameter><typ:parameter><typ:name>RefVPrCustomList</typ:name><typ:listValueRef><typ:id>5</typ:id></typ:listValueRef><typ:list><typ:id>6</typ:id></typ:list></typ:parameter></bnk:parameters></bnk:bankHeader></bnk:bank>');
69+
}
70+
71+
protected function _defaultHeader()
72+
{
73+
return '<bnk:bankType>receipt</bnk:bankType><bnk:account><typ:ids>KB</typ:ids></bnk:account><bnk:statementNumber><bnk:statementNumber>004</bnk:statementNumber><bnk:numberMovement>0002</bnk:numberMovement></bnk:statementNumber><bnk:symVar>456</bnk:symVar><bnk:dateStatement>2021-12-20</bnk:dateStatement><bnk:datePayment>2021-11-22</bnk:datePayment><bnk:text>STORMWARE s.r.o.</bnk:text><bnk:paymentAccount><typ:accountNo>4660550217</typ:accountNo><typ:bankCode>5500</typ:bankCode></bnk:paymentAccount><bnk:symConst>555</bnk:symConst><bnk:symSpec>666</bnk:symSpec>';
74+
}
75+
}

src/Pohoda.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* Factory for Pohoda objects.
1717
*
1818
* @method \Riesenia\Pohoda\Addressbook createAddressbook(array $data = [])
19+
* @method \Riesenia\Pohoda\Bank createBank(array $data = [])
1920
* @method \Riesenia\Pohoda\CashSlip createCashSlip(array $data = [])
2021
* @method \Riesenia\Pohoda\Category createCategory(array $data = [])
2122
* @method \Riesenia\Pohoda\Contract createContract(array $data = [])
@@ -38,6 +39,7 @@ class Pohoda
3839
/** @var array<string,string> */
3940
public static $namespaces = [
4041
'adb' => 'http://www.stormware.cz/schema/version_2/addressbook.xsd',
42+
'bnk' => 'http://www.stormware.cz/schema/version_2/bank.xsd',
4143
'con' => 'http://www.stormware.cz/schema/version_2/contract.xsd',
4244
'ctg' => 'http://www.stormware.cz/schema/version_2/category.xsd',
4345
'dat' => 'http://www.stormware.cz/schema/version_2/data.xsd',

src/Pohoda/Bank.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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;
12+
13+
class Bank extends Document
14+
{
15+
/** @var string */
16+
public static $importRoot = 'lst:bank';
17+
18+
/**
19+
* {@inheritdoc}
20+
*/
21+
protected function _getDocumentNamespace(): string
22+
{
23+
return 'bnk';
24+
}
25+
26+
/**
27+
* {@inheritdoc}
28+
*/
29+
protected function _getDocumentName(): string
30+
{
31+
return 'bank';
32+
}
33+
}

src/Pohoda/Bank/Header.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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\Bank;
12+
13+
use Riesenia\Pohoda\Common\OptionsResolver;
14+
use Riesenia\Pohoda\Document\Header as DocumentHeader;
15+
16+
class Header extends DocumentHeader
17+
{
18+
/** @var string[] */
19+
protected $_refElements = ['account', 'accounting', 'classificationVAT', 'classificationKVDPH', 'paymentAccount', 'centre', 'activity', 'contract', 'MOSS', 'evidentiaryResourcesMOSS'];
20+
21+
/** @var string[] */
22+
protected $_elements = ['bankType', 'account', 'statementNumber', 'symVar', 'dateStatement', 'datePayment', 'accounting', 'classificationVAT', 'classificationKVDPH', 'text', 'partnerIdentity', 'myIdentity', 'paymentAccount', 'symConst', 'symSpec', 'symPar', 'centre', 'activity', 'contract', 'MOSS', 'evidentiaryResourcesMOSS', 'accountingPeriodMOSS', 'note', 'intNote'];
23+
24+
/**
25+
* {@inheritdoc}
26+
*/
27+
public function __construct(array $data, string $ico, bool $resolveOptions = true)
28+
{
29+
// process report
30+
if (isset($data['statementNumber'])) {
31+
$data['statementNumber'] = new StatementNumber($data['statementNumber'], $ico, $resolveOptions);
32+
}
33+
34+
parent::__construct($data, $ico, $resolveOptions);
35+
}
36+
37+
/**
38+
* {@inheritdoc}
39+
*/
40+
protected function _configureOptions(OptionsResolver $resolver)
41+
{
42+
parent::_configureOptions($resolver);
43+
44+
// validate / format options
45+
$resolver->setAllowedValues('bankType', ['receipt', 'expense']);
46+
$resolver->setNormalizer('symVar', $resolver->getNormalizer('string20'));
47+
$resolver->setNormalizer('dateStatement', $resolver->getNormalizer('date'));
48+
$resolver->setNormalizer('datePayment', $resolver->getNormalizer('date'));
49+
$resolver->setNormalizer('text', $resolver->getNormalizer('string96'));
50+
$resolver->setNormalizer('symConst', $resolver->getNormalizer('string4'));
51+
$resolver->setNormalizer('symSpec', $resolver->getNormalizer('string16'));
52+
$resolver->setNormalizer('symPar', $resolver->getNormalizer('string20'));
53+
$resolver->setNormalizer('accountingPeriodMOSS', $resolver->getNormalizer('string7'));
54+
}
55+
}

src/Pohoda/Bank/Item.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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\Bank;
12+
13+
use Riesenia\Pohoda\Common\OptionsResolver;
14+
use Riesenia\Pohoda\Document\Item as DocumentItem;
15+
16+
class Item extends DocumentItem
17+
{
18+
/** @var string[] */
19+
protected $_refElements = ['typeServiceMOSS', 'accounting', 'classificationVAT', 'classificationKVDPH', 'centre', 'activity', 'contract'];
20+
21+
/** @var string[] */
22+
protected $_elements = ['text', 'quantity', 'unit', 'coefficient', 'payVAT', 'rateVAT', 'discountPercentage', 'homeCurrency', 'foreignCurrency', 'typeServiceMOSS', 'note', 'symPar', 'accounting', 'classificationVAT', 'classificationKVDPH', 'centre', 'activity', 'contract'];
23+
24+
/**
25+
* {@inheritdoc}
26+
*/
27+
protected function _configureOptions(OptionsResolver $resolver)
28+
{
29+
parent::_configureOptions($resolver);
30+
31+
// validate / format options
32+
$resolver->setNormalizer('text', $resolver->getNormalizer('string90'));
33+
$resolver->setNormalizer('quantity', $resolver->getNormalizer('float'));
34+
$resolver->setNormalizer('unit', $resolver->getNormalizer('string10'));
35+
$resolver->setNormalizer('coefficient', $resolver->getNormalizer('float'));
36+
$resolver->setNormalizer('payVAT', $resolver->getNormalizer('bool'));
37+
$resolver->setAllowedValues('rateVAT', ['none', 'third', 'low', 'high']);
38+
$resolver->setNormalizer('discountPercentage', $resolver->getNormalizer('float'));
39+
$resolver->setNormalizer('note', $resolver->getNormalizer('string90'));
40+
$resolver->setNormalizer('symPar', $resolver->getNormalizer('string20'));
41+
}
42+
}

src/Pohoda/Bank/StatementNumber.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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\Bank;
12+
13+
use Riesenia\Pohoda\Agenda;
14+
use Riesenia\Pohoda\Common\OptionsResolver;
15+
16+
class StatementNumber extends Agenda
17+
{
18+
/** @var string[] */
19+
protected $_elements = ['statementNumber', 'numberMovement'];
20+
21+
/**
22+
* {@inheritdoc}
23+
*/
24+
public function getXML(): \SimpleXMLElement
25+
{
26+
$xml = $this->_createXML()->addChild('bnk:statementNumber', '', $this->_namespace('bnk'));
27+
28+
$this->_addElements($xml, $this->_elements, 'bnk');
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->setNormalizer('statementNumber', $resolver->getNormalizer('string10'));
43+
$resolver->setNormalizer('numberMovement', $resolver->getNormalizer('string6'));
44+
}
45+
}

src/Pohoda/Bank/Summary.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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\Bank;
12+
13+
use Riesenia\Pohoda\Common\OptionsResolver;
14+
use Riesenia\Pohoda\Document\Summary as DocumentSummary;
15+
16+
class Summary extends DocumentSummary
17+
{
18+
/** @var string[] */
19+
protected $_elements = ['roundingDocument', 'roundingVAT', 'homeCurrency', 'foreignCurrency'];
20+
21+
/**
22+
* {@inheritdoc}
23+
*/
24+
protected function _configureOptions(OptionsResolver $resolver)
25+
{
26+
parent::_configureOptions($resolver);
27+
28+
// validate / format options
29+
$resolver->setAllowedValues('roundingDocument', ['none']);
30+
$resolver->setAllowedValues('roundingVAT', ['none']);
31+
}
32+
}

0 commit comments

Comments
 (0)