Jednoduchý přenos objednávek z e-shopu Shoptet do FlexiBee

Na Shoptetu běží spousta e-shopů a pokladních systémů. Jak z něj tedy přenášet data do účetnictví FlexiBee? Ručně přepisovat jednotlivé objednávky nebo faktury je hloupost, když je možné si celý proces zautomatizovat.

Co budeme potřebovat?

- E-shop na Shoptetu
- FlexiBee (pro automatický přenos povolené REST-API pro zápis)
- Integromat nebo jiný automatizační nástroj

Nastavení v Shoptetu

V administrátorském rozhraní Shoptetu je možné spravovat objednávky, prodávané produkty, zákazníky a všemožné další nastavení. Nás budou nejspíše zajímat objednávky. V menu Objednávky tedy zvolíme možnost Export a začneme vytvářet vlastní typ exportu.

Vlastní typ exportu objednávek ze Shoptetu

Ze Shoptetu budeme potřebovat rovnou exportovat XML ve formátu, který FlexiBee umí naimportovat. To je, díky možnosti vlastního typu exportu, možné a celkem jednoduché.

Klikneme na tlačítko Vytvořit vlastní typ exportu a vyplníme průvodce Přidáním šablony exportu objednávek. Zvolíme prázdnou šablonu, Formát nastavíme na XML a zvolíme si nějaké vhodné Jméno pro tuto šablonu.

Otevře se Detail šablony objednávky. Ujistíme, se že je zaškrtnuta možnost Exportovat jednotlivé položky objednávky a můžeme se pustit do nastavování struktury exportního XML souboru.

Nastaveni vlastniho typu exportu v shoptetu


Hlavička XML

Do pole hlavička XML vyplníme jen
<winstrom>

Tělo XML

Pro základní a minimalistický import do pole Tělo XML vyplníme
<objednavka-prijata>
<id>code:#code#</id>
<kod>#code#</kod>
<typDokl>code:OBP</typDokl>
<nazFirmy>#billFullName# - #billCompany#</nazFirmy>
<ulice>#billStreet#</ulice>
<mesto>#billCity#</mesto>
<psc>#billZip#</psc>
<stat>code:#billCountryCode#</stat>
<ic>#billCompanyId#</ic>
<dic>#billVatId#</dic>
<polozkyDokladu>
#orderItems#
</polozkyDokladu>
</objednavka-prijata>

Tím máme vytvořeny hlavičky jednotlivých objednávek. Do FlexiBee se nám podle tohoto předpisu vytvoří nové objednávky přijaté, které mají interní číslo shodné s číslem objednávky v Shoptetu. Mají vyplněny fakturační údaje (název firmy, adresu, ič a dič).

Jako typ dokladu je pro tyto objednávky použit typ se zkratkou OBP, který je standardně vytvořen v každé nově založené firmě. V případě, že potřebujeme mít objednávky z tohoto konkrétního e-shopu zařazeny pod samostatný typ dokladu, je nutné řetězec OBP nahradit jinou zkratkou, například OBP-MUJSHOPTET a zároveň mít ve FlexiBee vytvořen typ dokladu s takovouto zkratkou. Z typu dokladu se do objednávky přenáší spoustu výchozích hodnot. Takže není nutné přenášet úplně všechna pole ze Shoptetu.

Položky objednávky budou automaticky vloženy místo značky #orderItems#.

Tělo XML pro položky objednávky

V tomto poli musíme nadefinovat, jak bude vypadat XML element pro položku objednávky.
Vložíme do něj tedy
<objednavka-prijata-polozka>
<nazev>#orderItemName# - #orderItemVariantName#</nazev>
<kod>#orderItemCode#</kod>
<mnozMj>#orderItemAmount#</mnozMj>
<cenaMj>#orderItemUnitPriceWithoutVat#</cenaMj>
<slevaPol>#orderItemDiscountPercent#</slevaPol>
<szbDph>#orderItemUnitPriceVatRate#</szbDph>
<sumZkl>#orderItemTotalPriceWithoutVat#</sumZkl>
<sumDph>#orderItemTotalPriceVat#</sumDph>
<sumCelkem>#orderItemTotalPriceWithVat#</sumCelkem>
</objednavka-prijata-polozka>

Tímto zápisem budeme do FlexiBee přenášet jednotlivé položky objednávek bez vazby na ceník a sklad. Přenesou se nám ale všechna potřebná pole pro vystavení faktury. Přeneseny budou hodnoty název, kód, množství, jednotková cena a celkové částky základu, dph a celkem.

Patička XML

Stejně jako Hlavička, i patička XML bude velmi jednoduchá.
Vložíme do ní jen
</winstrom>

Nastavení ve FlexiBee

Ve FlexiBee by nemělo být nutné nastavovat nic, kromě typu dokladu. Pokud objednávky exportujeme s jiným typem dokladu, než s výchozím se zkratkou OBP, je nutné tento typ dokladu založit a kompletně v něm nastavit všechna potřebná nastavení.

Automatizace přenosu Integromatem

Je mnoho možností, jak přenos zautomatizovat. Můžeme zkusit curl a cron, můžeme naprogramovat jednoduchou PHP aplikaci, ale nejjednodušším řešením bude využít Integromat.

Vytvoříme tedy nový scénář, který bude spočívat ve využítí dvou HTTP modulů.

Scenar v integromatu

První modul bude načítat nové objednávky ze Shoptetu. Jako URL zadáme adresu, kterou nalezneme v Shoptetu v dolní části obrazovky Export objednávek. Adresa je označena jako Permanentní odkaz zvoleného exportu.

Adresa s exportem objednavek pro flexibee

Metodu nastavíme na GET a můžeme modul otestovat.
Pokud se jako status kód vrátí 200 a v poli data je vidět XML struktura, je všechno úspěšně načteno.

Druhý modul HTTP bude data načtená ze Shoptetu ukládat do FlexiBee. URL adresu vyplníme adresu našeho FlexiBee serveru a doplníme ji o endpoint objednavka-prijata.xml.
Adresa URL bude vypadat například
https://demo.flexibee.eu/c/demo/objednavka-prijata.xml
Jako metodu zvolíme PUT, Druh těla požadavku nastavíme na Raw, Typ obsahu nastavíme na XML (application/xml) a obsahem požadavku budou data načtená ze Shoptetu.
Ještě vyplníme uživatelské jméno a heslo uživatele, pod kterým budou objednávky do FlexiBee zapisovány a je to.

Zkusíme a pokocháme se krásně přenesenými objednávkami :-).

Rozšíření a další možnosti

Samozřejmě zde uvádím jen nejjednodušší možnou variantu. Bez ceníku a skladu, s vyplněním jen minima polí na hlavičce objednávky. Všechno je možné zkomplikovat. Není problém doplnit do hlaviček měnu a kurz objednávky, doručovací adresu, formu dopravy a spoustu dalších vlastností.

Také celkem jednoduše můžeme celý přenos přenastavit tak, aby místo objednávek byly ve FlexiBee vytvářeny rovnou faktury. Stačí nahradit tagy objednavka-prijata za faktura-vydana, objednavka-prijata-polozka za faktura-vydana-polozka a nastavit jiný typ dokladu.

Závěr

Jsem celkem překvapen, jak jednoduše je možné ze Shoptetu do FlexiBee přenášet objednávky. Také automatizace tohoto procesu je super-jednoduchá a pokud budeme objednávky přenášet například každou hodinu a jen nové, tak by nám měl opět stačit jen FREE tarif Integromatu.

Narazil jsem ale na dva problémy. Shoptet, ve výchozím nastavení, exportuje desetinná čísla s čárkou, jako oddělovačem desetinných míst. Tento formát ale FlexiBee nezvládne načíst a začne hlásit, že se nejedná o číslo.
Problém je možné odstranit tak, že v Nastavení změníme u měny desetinnou čárku na tečku (Nastavení – Základní nastavení – Měny – CZK – Zobrazení měny – Desetinná čárka).
Obdobný problém se vyskytuje, pokud se exportuje datum. FlexiBee očekává formát “YYYY-MM-DD” respektive “YYYY-MM-DDThh:mm:ss”. Shoptet ale datum exportuje ve formátu “YYYY-MM-DD hh:mm:ss”. Řešení jsem bohužel nenalezl. Jediná možnost je synchronizovat objednávky pravidelně a datum tedy nepřenášet.

Myslím, že tyto problémy by bylo ale dobré opravit jinak. Zkusím vymyslet řešení, nebo přemluvit jednu ze stran, aby tyto problémy nějak opravila.

ABRA FlexiBee, E-Shop, REST API, Shoptet

- (10. 9. 2017)
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.