Nebudu v tomto článku rozebírat, jak evidovat docházku v primaERPu, protože natolik ho zase neznám. Ale rozeberu možnosti, jak přenést výsledná čísla do FlexiBee.
Získání potřebných mzdových složek z FlexiBee
Nejprve je nutné z FlexiBee načíst mzdové složky, které budeme měnit. Pro zpětný zápis totiž potřebujeme ID, které k nim má FlexiBee přidělené. A vlastně proč si celou práci nezjednodušit a jen do dat z FlexiBee doplnit potřebné číslo a poslat data zpět? 🙂
Musíme tedy z FlexiBee, z evidence mzdova-slozka, načíst potřebné mzdové složky. Použijeme filtraci, abychom získali vždy jen data, která potřebujeme. Filtrace je jednoduchá. Budeme potřebovat získat složky pro konkrétní rok a měsíc a také jen složky HODINOVÁ MZDA. Dotaz do API FlexiBee tedy bude vypadat například takto
GET /mzdova-slozka/(cisMzdSloz = 'code:HODINOVÁ MZDA' and rok = 2017 and mesic = 1).json?detail=custom:id,osoba(osbCis,jmeno,prijmeni,titul),hodiny,zmenaCasu,zmenaCastMzd,castkaHod,castMzd&includes=/mzdova-slozka/osoba&limit=0
Tento request nám vrátí všechny složky typu HODINOVÁ MZDA za leden 2017. Výsledek bude obsahovat všechna pole, která potřebujeme pro to abychom mohli tyto složky bez trestu změnit.
Výsledek vrázený z FlexiBee bude vypadat nějak takto:
{
"winstrom": {
"@version": "1.0",
"mzdova-slozka": [
{
"id": "13",
"osoba": [
{
"id": "1",
"osbCis": "A02200",
"jmeno": "Kája",
"prijmeni": "z Norska",
"titul": ""
}
],
"hodiny": "0.0",
"zmenaCasu": "false",
"zmenaCastMzd": "false",
"castkaHod": "800.0",
"castMzd": "0.0"
}
]
}
}
Načtení dat z primaEPRu
Pokud máme všechna potřebná data z FlexiBee, načteme si data z docházkového systému. Já využiji primaERP, protože má API, ale není to zcela nutné. Je možné v tomto kroku načíst například excel s docházkou. Důležité je jen to, abychom byli schopni identifikovat zaměstnance a věděli jsme kolik odpracoval hodin.
V API primaERPu je tedy potřeba udělat request na URL
GET https://{tenant}.api.primaerp.com/v1/time/timerecords/summary.json?summary=user/position;sum(duration)&$filter=start ge datetime'2017-05-01T00:00:00.000Z' and stop lt datetime'2017-06-01T00:00:00.000Z'&token=9c11cea8-c3b3-4232-bfbb-f8acefce2f5a
Získáme data ve formátu například
[
{
"key": "A02200",
"summaries": [
{
"name": "sum(duration)",
"value": "232777000"
}
]
}
]
V requestu je použita sumace na vlastnost duration (trvání úkolu). Jako identifikátor poslouží pozice zaměstnance, kterou jsem zneužil pro osobní číslo, abych následně mohl přiřadit data z primaERPu na data z FlexiBee. Další věcí, kterou v dotazu použijeme, je filtrace na datum od a datum do. To nám vyfiltruje jen úkoly, které začali a skončily ve sledovaném období.
V datech, která nám primaERP vrátil, je tedy jako key osobní číslo z FlexiBee a sumace trvání jednotlivých úkolů. Tato sumace je celkový čas v milisekundách. Hodiny, které potřebujeme zapsat do složky HODINOVÁ MZDA, tedy získáme podle vzorce
hodiny = duration / 1000 / 60 / 60
V mém případě je to úžasných 64,66 hodiny. Samozřejmě můžeme, a nejspíš i budeme, zaokrouhlovat. Ale to už je na každém. FlexiBee dovolí do složky zadat číslo s přesností na dvě desetinná místa.
Zpracování dat a zápis zpět do FlexiBee
Takto načtená data nyní musíme zpracovat a zapsat zpět do FlexiBee. Projdeme tedy jednotlivé mzdové složky získané z FlexiBee a budeme do nich postupně doplňovat údaje z primaERPu.
Každá mzdová složka v sobě obsahuje jednoznačný identifikátor, kterým je osobní číslo zaměstnance. Podle tohoto čísla budeme v datech z primaERPu vyhledávat správnou sumaci. Jakmile ji najdeme, přepočteme milisekundy na hodiny a zapíšeme do pole hodiny. Do pole castMzd zapíšeme součin odpracovaných hodin a hodnoty pole castkaHod, které obsahuje hodinovou mzdu zaměstnance. Poslední věcí, kterou musíme udělat, je zapsat do polí zmenaCasu a zmenaCastMzd true místo false, aby nám FlexiBee zapsané hodnoty neměnilo podle fondu pracovní doby.
Tak a data máme připravena a můžeme je poslat zpět do FlexiBee. To už je, doufám, celkem známá věc. Jen pro jistotu, URL, na které budeme data zapisovat, je
PUT /mzdova-slozka.json
Několik slov závěrem
Pokud má firma minimálně pár zaměstnanců s hodinovou mzdou, doporučuji si nějaký takovýto nástroj vytvořit. Je celkem jedno, jestli data budou načítána z primaERPu nebo jiného docházkového systému. Samozřejmě je možné využít i například excel. Pokud bude obsahovat sloupce osobní číslo a odpracovaná doba, mělo by to v pohodě (ale fuj 🙂 ve FlexiBee samozřejmě) stačit.
Pokud takovýto můstek vytvoříte, myslím, že Vám mzdová účetní bude po každých výplatách několik dní děkovat. Protože komu by se chtělo zadávat u každého zaměstnance hodiny pořád dokola.
Využití pole pozice v primaERPu berte s rezervou, prosím. Zatím se rozkoukávám a třeba mě napadne ještě lepší řešení. Kdo chce hledá způsob. Kdo nechce, hledá důvod. A já se snažím hledat jednoduché způsoby.