spoje-net / php-abraflexi Goto Github PK
View Code? Open in Web Editor NEWPHP Based Library for easy interaction with czech accounting system FlexiBee.
License: MIT License
PHP Based Library for easy interaction with czech accounting system FlexiBee.
License: MIT License
Od 5.12. mi přestalo fungovat filtrování:
$response = $invoices->getColumnsFromFlexiBee($columns, [
'id' => "gt $lastInvoiceId",
'storno' => false,
'limit' => 100,
]);
které pak generuje URL ve tvaru:
/faktura-vydana/?(id%20gt%20%2789587%27and%20storno%20eq%20false)&limit=100
Dle podpory je problém v konstrukci id gt '89587'
a správně to má být id gt 89587
, což dává smysl a doopravdy při manuální změně v URL to funguje. Nicméně v rámci https://www.flexibee.eu/k/prehled-verzi-flexibee/prehled-verzi-abra-flexi-2023/ jsem zmínku o této změně nedohledal, asi to nebrali jako breaking change :-)
Jako hot fix jsem použil:
$response = $invoices->getColumnsFromFlexiBee($columns, [
0 => "id gt $lastInvoiceId",
'storno' => false,
'limit' => 100,
]);
Ale mělo by to být ošetřeno na úrovni knihovny nejspíš.
php-abraflexi/src/AbraFlexi/Adresar.php
Line 105 in d209a63
After updating from v2.1 to v2.11 the FakturaVydana::odpocetZalohy method does not work properly.
In the 2.1 version you send the eet section as follows:
{
...
"eetDicPoverujiciho":"",
"eetFik":"",
"eetPkp":"",
"eetBkp":"",
"eetPokladniZarizeni":"",
"eetProvozovna":"",
"eetStavK":"",
"eetTypK":"",
"eetDatCasTrzby":"",
...
}
But in the 2.11 version the request is different for the same invoice:
{
...
"eetDicPoverujiciho":"",
"eetFik":"",
"eetPkp":"",
"eetBkp":"",
"eetPokladniZarizeni":"",
"eetProvozovna":0,
"eetStavK":"",
"eetTypK":"",
"eetDatCasTrzby":null,
...
}
The null value of the eetDatCasTrzby property leeds to the following error:
{
"winstrom":{
"@version":"1.0",
"success":"false",
"stats":{
"created":"0",
"updated":"0",
"deleted":"0",
"skipped":"0",
"failed":"1"
},
"results":[
{
"request-id":"45837",
"errors":[
{
"message":"Zadaný text 'null' musí být datum [21/05/2316]",
"for":"eetDatCasTrzby",
"path":"faktura-vydana[id=45837].eetDatCasTrzby",
"value":"null",
"code":"PROP"
}
]
}
]
}
}
I think the best way to fix this issue would be to send only the relevant data i.e. the invoice identifier and the 'odpocty-zaloh' section.
Zdar,
chybí evidence Sklad. Má to nějaký důvod, nebo jsem jen něco přehlédl? :-)
Jinak díky APInu - už ji nějakých pár let používáme na zjednodušení přesunu zboží ze skladu. Sice je to jen prachsprostý zlomek využitelnosti API... ale teď při rozšiřování funkčnosti jsem všiml tohoto problému.
Když při testování nastavím dry-run
a pro uložení záznamu použiju sync
tak funkce vždy vrátí false
což podle mě není ideální chování. Navrhuji upravit funkci sync
aby brala v potaz jestli je dry-run
nastavený nebo ne.
There is some problem with curl and closing its open filedescriptors :(
PHP Warning: include(/usr/share/php/AbraFlexi/Exception.php): Failed to open stream: Too many open files in /var/lib/composer/discomp2abraflexi/composer/ClassLoader.php on line 576
PHP Stack trace:
PHP 1. {main}() /usr/share/discomp2abraflexi/discomp2abraflexi.php:0
PHP 2. SpojeNet\\Discomp\\Importer->freshItems() /usr/share/discomp2abraflexi/discomp2abraflexi.php:34
PHP 3. SpojeNet\\Discomp\\Importer->prepareCategories($categoriesRaw = [0 => \'Druhy > Počítače > PC komponenty > Paměti > DDR4 > 4GB\', 1 => \'Vyrobci - WEB > TRANSCEND > Počítače > PC komponenty > Paměti > DDR4 > 4GB\']) /usr/share/discomp2abraflexi/Discomp/Importer.php:284
PHP 4. SpojeNet\\Discomp\\Importer->categoryBranch($nodes = [0 => \'Discomp\', 1 => \'Vyrobci - WEB\', 2 => \'TRANSCEND\', 3 => \'Počítače\', 4 => \'PC komponenty\', 5 => \'Paměti\', 6 => \'DDR4\', 7 => \'4GB\']) /usr/share/discomp2abraflexi/Discomp/Importer.php:543
PHP 5. SpojeNet\\Discomp\\Importer->createBranchNode($node = \'Discomp\', $level = 0, $parent = \'\', $kod = \'39797b8d0f122a4f69bd1d29c202b691\') /usr/share/discomp2abraflexi/Discomp/Importer.php:559
PHP 6. AbraFlexi\\RO->__construct($init = \'code:39797B8D0F122A4F69BD1D29C202B6\', $options = [\'ignore404\' => TRUE]) /usr/share/discomp2abraflexi/Discomp/Importer.php:582
PHP 7. AbraFlexi\\RO->processInit($init = \'code:39797B8D0F122A4F69BD1D29C202B6\') /usr/share/php/AbraFlexi/RO.php:438
PHP 8. AbraFlexi\\RO->loadFromAbraFlexi($id = \'code:39797B8D0F122A4F69BD1D29C202B6\') /usr/share/php/AbraFlexi/RO.php:635
PHP 9. AbraFlexi\\RO->getFlexiData($suffix = \'https://server:5434/c/company/strom/code:39797B8D0F122A4F69BD1D29C202B6\', $conditions = \'\') /usr/share/php/AbraFlexi/RO.php:1558
PHP 10. AbraFlexi\\RO->performRequest($urlSuffix = \'https://server:5434/c/company/strom/code:39797B8D0F122A4F69BD1D29C202B6\', $method = \'GET\', $format = *uninitialized*) /usr/share/php/AbraFlexi/RO.php:1522
PHP 11. AbraFlexi\\RO->doCurlRequest($url = \'https://server:5434/c/company/strom/code:39797B8D0F122A4F69BD1D29C202B6\', $method = \'GET\', $format = NULL) /usr/share/php/AbraFlexi/RO.php:997
PHP 12. Composer\\Autoload\\ClassLoader->loadClass($class = \'AbraFlexi\\\\Exception\') /usr/share/php/AbraFlexi/RO.php:1302
PHP 13. Composer\\Autoload\\{closure:/var/lib/composer/discomp2abraflexi/composer/ClassLoader.php:575-577}($file = \'/var/lib/composer/discomp2abraflexi/composer/../deb/abraflexi/Exception.php\') /var/lib/composer/discomp2abraflexi/composer/ClassLoader.php:427
`
"/usr/bin/php" "/home/vitex/Projects/EASE/abraflexi-matcher/src/StahniBanku.php"
10/12/21 23:49:30 •AbraFlexi\Banka‣ ⚙ StahniBanku PHP v7.4.24 EasePHP Framework v0.5 ServerURL https://[email protected]:5434/c/vitex_software/banka library v2.6 (AbraFlexi 2021.7.6)
10/12/21 23:49:31 •AbraFlexi\Banka‣ ⚙ Download online bank statements
10/12/21 23:51:07 •Ease\Molecule‣ ☠ AbraFlexi\Banka: JSON Decoder: Syntax error
PHP Fatal error: Uncaught AbraFlexi\Exception: AbraFlexi\Banka: JSON Decoder: Syntax error in /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php:1072
Stack trace:
#0 /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php(966): AbraFlexi\RO->rawJsonToArray('Soubor 2021-10-...')
#1 /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php(950): AbraFlexi\RO->rawResponseToArray('Soubor 2021-10-...', 'json')
#2 /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/Banka.php(43): AbraFlexi\RO->performRequest('nacteni-vypisu-...', 'PUT', 'txt')
#3 /home/vitex/Projects/EASE/abraflexi-matcher/src/StahniBanku.php(21): AbraFlexi\Banka->stahnoutVypisyOnline()
#4 {main}
thrown in /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php on line 1072
Fatal error: Uncaught AbraFlexi\Exception: AbraFlexi\Banka: JSON Decoder: Syntax error in /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php on line 1072
AbraFlexi\Exception: AbraFlexi\Banka: JSON Decoder: Syntax error in /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php on line 1072
Call Stack:
0.1177 400880 1. {main}() /home/vitex/Projects/EASE/abraflexi-matcher/src/StahniBanku.php:0
9.8523 1817880 2. AbraFlexi\Banka->stahnoutVypisyOnline() /home/vitex/Projects/EASE/abraflexi-matcher/src/StahniBanku.php:21
9.8523 1817880 3. AbraFlexi\Banka->performRequest($urlSuffix = 'nacteni-vypisu-online.json', $method = 'PUT', $format = 'txt') /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/Banka.php:43
16.9741 2037608 4. AbraFlexi\Banka->rawResponseToArray($responseRaw = 'Soubor 2021-10-12 214932_2601221676-2010_CZK.gpc\n Výpis 0 pro účet 0000000 - Načítání proběhlo úspěšně. The loaded statement does not contain any item. Počet položek 0\n\nSoubor 2021-10-12 214932_CZ.gpc\n Výpis 0 pro účet 000000 - Načítání proběhlo úspěšně. The loaded statement does not contain any item. Počet položek 0\n\n', $format = 'json') /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php:950
105.2005 2037608 5. AbraFlexi\Banka->rawJsonToArray($rawJson = 'Soubor 2021-10-12 60104.gpc\n Výpis 0 pro účet 000000-2601221676 - Načítání proběhlo úspěšně. The loaded statement does not contain any item. Počet položek 0\n\nSoubor 2021-10-12 214932.gpc\n Výpis 0 pro účet 000000-2800677051 - Načítání proběhlo úspěšně. The loaded statement does not contain any item. Počet položek 0\n\n') /home/vitex/Projects/EASE/abraflexi-matcher/vendor/spojenet/flexibee/src/AbraFlexi/RO.php:966
`
Pokusal som sa vykonat akciu nad fakturov $invoice->performAction('storno','int')
Akcia zlyha pretože AbraFlexi\RO::performRequest()
požaduje string, ale metoda AbraFlexi\RW::performAction
ju vola z null
U seba som to vyriesil tým že som null prepísal na prázdny string. Niesom si istý či ide o korektné riešenie.
Dobrý den,
v knihovně chybí podpora PL a RU tiskových výstupů. Flexi to podle všeho reálně umí, jen to chybí v dokumentaci. Bylo by možné doplnit?
Viz https://demo.flexibee.eu/c/demo/faktura-vydana/1.pdf?report-lang=pl
Děkuji.
Chybějící return (je tam, ale vrací jen pokud je splněna podmínka)
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/FakturaVydana.php#L198
Chybějící return volá rodiče, ale nic nevrací (případně odebrat z annotace)
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L2804
Předává parametr, ale metoda žádný nechce
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/Stitky.php#L50
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/Stitky.php#L25
Vyžaduje parametry 2 dostává 3
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L2766
Zbytečný switch, vrací true uplně vždy
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L731
Překlad textu výjimky podrtzítkovou funkcí?
Stačí jen $options, toto co tam je nyní, je dostupné až od PHP 7.2
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RW.php#L76
Parent vrací void!
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RW.php#L76
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/Report.php#L53
Prázdný IF
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/Adresar.php#L103
Chybějící 'break;'
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L631
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1137
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1149
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1712
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1714
Nahradit NULL za "", neboť metoda vyžaduje string a není to typově kompatibilní
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1625
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L2106
Když zavolám kód
$changes = new Changes( null, $this->get_options() );
return $changes->enable();
a z API se vrátí chyba (v mém případě viz níže):
<?xml version="1.0" ?>
<winstrom version="1.0">
<success>false</success>
<message>ERROR: could not obtain lock on relation "aadresar"
Kde: SQL statement "LOCK TABLE aadresar IN ACCESS EXCLUSIVE MODE NOWAIT"
PL/pgSQL funkce create_or_drop_ucto_changes_triggers(boolean) řádek 4 na SQL příkaz
SQL statement "SELECT create_or_drop_ucto_changes_triggers(true)"
PL/pgSQL funkce create_or_drop_changes_triggers(boolean) řádek 4 na PERFORM</message>
</winstrom>
dostanu Fatal error Fatal error: Uncaught Error: get_class() expects parameter 1 to be object, null given in /vendor/spojenet/flexibee/src/AbraFlexi/RO.php on line 2793
When I try to download an invoice with external ID(s), I get the following TypeError:
current(): Argument #1 ($array) must be of type array, string given
in https://github.com/Spoje-NET/php-abraflexi/blob/main/src/AbraFlexi/RO.php#L2090
Dobrý den,
v případě, že se inicializuje faktura s autoload false, končí to chybou.
$inv = new FakturaVydana(531, ['autoload'=>false]);
File: .../spojenet/flexibee/src/AbraFlexi/RO.php:628
TypeError
preg_match() expects parameter 2 to be string, int given
ID faktury (integer) neprojde podmínkami v processInit když je autoload nastavený na false.
Podmínka v RO.php:628
by imho měla kontrolovat, jestli je $init
string.
For shorter caling RO::code()
Also FlexiBeeRW is too long
05/05/21 01:56:34 •Toggl2AbraFlexi\Importer‣ ⚙ Unknown response field polozkyFaktury@faktura-vydana. (Please update library or static definitions)
05/10/21 22:33:11 •AbraFlexi\Processor\Plugins\Adresar‣ ⚙ Unknown response field kontakty@adresar. (Please update library or static definitions)
05/10/21 22:33:11 •AbraFlexi\Processor\Plugins\Adresar‣ ⚙ Unknown response field mistaUrceni@adresar. (Please update library or static definitions)
Oct 8 11:21:02 hermes WHProcessor: ` SpojeNet\System\whplugins\FakturaVydana` @@ Unknown response field external-ids@faktura-vydana. (Please update library or static definitions)
Oct 8 11:21:02 hermes WHProcessor: ` SpojeNet\System\whplugins\FakturaVydana` @@ Unknown response field typDoklBan@faktura-vydana. (Please update library or static definitions)
Oct 8 11:21:02 hermes WHProcessor: ` SpojeNet\System\whplugins\FakturaVydana` @@ Unknown response field polozkyFaktury@faktura-vydana. (Please update library or static definitions)
01/17/2024 10:17:2 💀 ❲AbraFlexi StahniBanku⦒AbraFlexi\\Banka❳ Unparsed error: {\"winstrom\":{\"@version\":\"1.0\",\"success\":\"false\",\"stats\":{\"created\":\"0\",\"updated\":\"0\",\"deleted\":\"0\",\"skipped\":\"1\",\"failed\":\"1\"},\"results\":[{\"code\":\"Výpis 0 pro účet 2900886213/2010 - Počet položek 0\",\"errors\":[{\"message\":\"Během stahování výpisu pro účet EURO FIO (2900886213/2010) došlo k chybě.\\nNedodržujete minimální interval 30 sekund mezi dotazy na daný token (bez ohledu na typ formátu).\"}]},{\"code\":\"Výpis 0 pro účet 2800061687 - Počet položek 0\",\"infos\":[{\"message\":\"Načítání proběhlo úspěšně. Načtený výpis neobsahuje žádnou položku.\"}]}]}}01/17/2024 10:17:2 💀 ❲AbraFlexi StahniBanku⦒AbraFlexi\\RO::parseResponse:124❳ AbraFlexi\\Banka: Problem PHP Fatal error: Uncaught AbraFlexi\\Exception: AbraFlexi\\Banka: Problem in /usr/share/php/AbraFlexi/RO.php:1234
Stack trace:
#0 /usr/share/php/AbraFlexi/RW.php(124): AbraFlexi\\RO->parseResponse()
#1 /usr/share/php/AbraFlexi/RO.php(1001): AbraFlexi\\RW->parseResponse()
#2 /usr/share/php/AbraFlexi/Banka.php(55): AbraFlexi\\RO->performRequest()
#3 /usr/lib/abraflexi-matcher/StahniBanku.php(22): AbraFlexi\\Banka->stahnoutVypisyOnline()
#4 {main}
thrown in /usr/share/php/AbraFlexi/RO.php on line 1234
{
"winstrom": {
"@version": "1.0",
"success": "false",
"stats": {
"created": "0",
"updated": "0",
"deleted": "0",
"skipped": "1",
"failed": "1"
},
"results": [
{
"code": "Výpis 0 pro účet 2900886213/2010 - Počet položek 0",
"errors": [
{
"message": "Během stahování výpisu pro účet EURO FIO (2900886213/2010) došlo k chybě.\nNedodržujete minimální interval 30 sekund mezi dotazy na daný token (bez ohledu na typ formátu)."
}
]
},
{
"code": "Výpis 0 pro účet 2800061687 - Počet položek 0",
"infos": [
{
"message": "Načítání proběhlo úspěšně. Načtený výpis neobsahuje žádnou položku."
}
]
}
]
}
}
Hello
After calling function ObjednavkaPrijata i got this error
$config = [
'company' => 'firma',
'url' => 'http://192.168.100.16:5434',
'user' => 'test',
'password' => '',
];
$init = 'code:OBP0002/2021';
$order = new ObjednavkaPrijata($init, $config);
Call to undefined function AbraFlexi\_()
spojenet/flexibee : 2.4
php: 8.0
Thanks
https://github.com/Spoje-NET/php-abraflexi/blob/2.0/src/AbraFlexi/RO.php#L1018
boolval('true') is true
but boolval('false') is also true
, therefore all the logic values are transformed to true
In the commit: 7df25e9 you've changed the keys used to parse the error messages.
Original key: $responseDecoded['results'][0]['errors']
New key: $responseDecoded['results'][0]['result']
The new key does not correspond with the real response structure so I'm getting the folowing error:
ErrorException: Undefined index: result in /var/www/html/vendor/spojenet/flexibee/src/FlexiPeeHP/FlexiBeeRO.php:1081
Is it an intentional change or a mistake?
Ahoj, díky moc za knihovnu, která nám brutálně usnadňuje práci.
Malý dotaz nebo podnět:
v nastavení konfigurace pomocí konstant je user označován jako ABRAFLEXI_LOGIN, ale při nastavení proměnných rovnou pomocí instance třídy je označený jako user. Je tato drobná odlišnost úmysl?
if (isset($faktura->getStatusMessages()['error'])) echo $faktura->getStatusMessages()['error'][0];
Ušetřilo by mě 2h....
Do příští knihovny se prosím naučte používat:
try ... catch exception
Jinak děkuji za sdílení knihovny a za podstatně lepší examples než v té minulé. ❤🙏
FlexiPeeHP is little bit pissy
See #4
Dobrý den,
v první řadě moc díky za práci na knihovně! Rád bych se zeptal, jestli je v2 vhodá pro použití na produkci - chystám se psát novou integraci na Flexibee, a rád bych už využil novou verzi.
Díky!
Dobrý den, pokud udělám jednoduchou operaci:
$inv = new FakturaVydana($invoiceId);
$inv->takeData(["stavMailK" => "stavMail.odeslano"]);
$inv->sync();
Dostávám chybovou hlášku:
'message' => 'Zadaný text 'null' musí být datum'
'for' => 'eetDatCasTrzby'
'path' => 'faktura-vydana[id=539].eetDatCasTrzby'
'value' => 'null'
'code' => 'PROP'
Přitom se s tím údajem vůbec nepracuje. Asi by bylo dobré v entitě faktury kontrolovat textový "null" u datumu a případně opravdu nastavit na null?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.