QR Platba na fakturu pomocí Odoo Studio

Máme pro vás návod jak si přidat QR kód na fakturu v Odoo. Pokud jste v Odoo online, nebo nemáte naší legislativu, která vám přinese mnohem více než jen QR platební kód nebo nutné legislativní úpravy. Přinášíme i drobná vylepšení, které eliminují chybovost a přináší vyšší komfort při práci s Odoo. Tyto podněty přichází od našich uživatelů. Například automatické připojení původních plateb k faktuře po resetování do návrhu a opětovném potvrzení faktury. A mnoho dalšího.

Co budete potřebovat 

  • Odoo Studio
  • 5 - 10min vašeho času
  • Alespoň elementární znalost HTML nebo XML

Postup

Otevřete modul účetnictví v levém horním rohu je ikona pro spuštění Odoo studia.

V menu se přepněte na sestavy.

Vybereme sestavu Faktury (to je výchozí sestava, lze přidat i do sestavy faktury bez plateb) po té co se ukáže sestava zvolíme Edit source.

V levém panelu se vám zobrazí zdrojový kód, pokud najedete myší na předěl levého panelu s kódem a pravého s náhledem změní se vám kurzor myši a je možné si panel roztáhnout tak abyste měli panel s k'dem širší a lépe se vám v něm orientovalo.

A po roztažení levého panelu

Teď jsme v okamžiku kdy začneme upravovat samotný obsah šablony přímo ve zdrojovém kódu. 

Pokud jste nikdy nepracovali s HTML nebo XML postupujte více než opatrně a doporučuji si celý obsah editoru zkopírovat někam bokem třeba do poznámkového bloku tak abyste v nejhorším případě měli možnost se snadno vrátit.

Přesuňte se na konec zdrojového kódu měla by tam být někde pasáž začínající takto

<t t-set="show_qr" t-value="o.display_qr_code and o.amount_residual &gt; 0"/>
<div t-if="not show_qr" name="qr_code_placeholder" class="oe_structure"/>
<div id="qrcode" class="d-flex mb-3 avoid-page-break-inside" t-else="">
    <div class="qrcode me-3" id="qrcode_image">

To je začátek šablony kde Odoo přidává QR kód. Teď přichází okamžik kdy vložíme náš kód pro tisk českého platebního QR kódu. Náš kód budeme vkládat přesně nad <t t-set="show_qr" .... >

Kód, který naleznete níže řeší automatické generování QR platby pro příjemce v České republice. Je jedno jestli máte váš bankovní účet v Odoo uložen ve formátu IBAN nebo národním formátu YYYYYY-XXXXXXXXXX/ZZZZ  tento kód si poradí s převodem. Jsou zde 3 příklady, a jejich rozdíl je hlavně v tom jak se postaví k aplikování platební reference.

Platební reference do VS - očekává, že platební reference je v Odoo číslo

<t t-if="o.commercial_partner_id and o.commercial_partner_id.country_id and o.commercial_partner_id.country_id.code == 'CZ'">
    <t t-if="'CZ' in o.partner_bank_id.sanitized_acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.sanitized_acc_number[4:8]"/>
        <t t-set="account_prefix" t-value="o.partner_bank_id.sanitized_acc_number[8:14]"/>
        <t t-set="account_number" t-value="o.partner_bank_id.sanitized_acc_number[14:]"/>
    </t>
    <t t-if="'/' in o.partner_bank_id.acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.acc_number.split('/')[1]"/>
        <t t-set="account_prefix" t-value=""/>
        <t t-set="account_number" t-value="o.partner_bank_id.acc_number.split('/')[0]"/>
        <t t-if="'-' in account_number">
            <t t-set="account_prefix" t-value="account_number.split('-')[0]"/>
            <t t-set="account_number" t-value="account_number.split('-')[1]"/>
        </t>
    </t>
    <t t-if="o.partner_bank_id" t-set="finaltext" t-value="'https://api.paylibo.com/paylibo/generator/czech/image?compress=false&amp;size=200&amp;accountPrefix='+account_prefix+'&amp;accountNumber='+account_number+'&amp;bankCode='+bank_code+'&amp;amount='+str(o.amount_residual)+'&amp;currency='+o.currency_id.name+'&amp;vs='+o.payment_reference"/>
    <img t-if="o.partner_bank_id" t-att-src="finaltext"/>
</t>

Platební reference do poznámky 

<t t-if="o.commercial_partner_id and o.commercial_partner_id.country_id and o.commercial_partner_id.country_id.code == 'CZ'">
    <t t-if="'CZ' in o.partner_bank_id.sanitized_acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.sanitized_acc_number[4:8]"/>
        <t t-set="account_prefix" t-value="o.partner_bank_id.sanitized_acc_number[8:14]"/>
        <t t-set="account_number" t-value="o.partner_bank_id.sanitized_acc_number[14:]"/>
    </t>
    <t t-if="'/' in o.partner_bank_id.acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.acc_number.split('/')[1]"/>
        <t t-set="account_prefix" t-value=""/>
        <t t-set="account_number" t-value="o.partner_bank_id.acc_number.split('/')[0]"/>
        <t t-if="'-' in account_number">
            <t t-set="account_prefix" t-value="account_number.split('-')[0]"/>
            <t t-set="account_number" t-value="account_number.split('-')[1]"/>
        </t>
    </t>
    <t t-if="o.partner_bank_id" t-set="finaltext" t-value="'https://api.paylibo.com/paylibo/generator/czech/image?compress=false&amp;size=200&amp;accountPrefix='+account_prefix+'&amp;accountNumber='+account_number+'&amp;bankCode='+bank_code+'&amp;amount='+str(o.amount_residual)+'&amp;currency='+o.currency_id.name+'&amp;message='+o.payment_reference"/>
    <img t-if="o.partner_bank_id" t-att-src="finaltext"/>
</t>

Platební reference do poznámky a konverze na čísla do VS

<t t-if="o.commercial_partner_id and o.commercial_partner_id.country_id and o.commercial_partner_id.country_id.code == 'CZ'">
    <t t-if="'CZ' in o.partner_bank_id.sanitized_acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.sanitized_acc_number[4:8]"/>
        <t t-set="account_prefix" t-value="o.partner_bank_id.sanitized_acc_number[8:14]"/>
        <t t-set="account_number" t-value="o.partner_bank_id.sanitized_acc_number[14:]"/>
    </t>
    <t t-if="'/' in o.partner_bank_id.acc_number">
        <t t-set="bank_code" t-value="o.partner_bank_id.acc_number.split('/')[1]"/>
        <t t-set="account_prefix" t-value=""/>
        <t t-set="account_number" t-value="o.partner_bank_id.acc_number.split('/')[0]"/>
        <t t-if="'-' in account_number">
            <t t-set="account_prefix" t-value="account_number.split('-')[0]"/>
            <t t-set="account_number" t-value="account_number.split('-')[1]"/>
        </t>
    </t>
    <t t-set="vs" t-value="str(int(''.join([char for char in o.payment_reference if char.isdigit()])))[0:10]"/>
    <t t-if="o.partner_bank_id" t-set="finaltext" t-value="'https://api.paylibo.com/paylibo/generator/czech/image?compress=false&amp;size=200&amp;accountPrefix='+account_prefix+'&amp;accountNumber='+account_number+'&amp;bankCode='+bank_code+'&amp;amount='+str(o.amount_residual)+'&amp;currency='+o.currency_id.name+'&amp;message='+o.payment_reference+'&amp;vs='+vs"/>
    <img t-if="o.partner_bank_id" t-att-src="finaltext"/>
</t>

Výsledek

Po té co vložíte vybraný kus kódu zhruba sem. Uložte sestavu a zavřete studio. 

Otevřete náhled faktury a pokud jste na faktuře měli nastavené bankovní spojení ve správném formátu ukáže se vám na faktuře QR kód. 


Poslední tip na závěr pokud chcete přizpůsobit velikost QR kódu hledejte ve zkopírovaném kód část size=200 toto číslo stačí zmenšit nebo zvětšit.


QR Platba na fakturu pomocí Odoo Studio
Stanislav Kurinec 17. června 2024
Sdílet tento příspěvek
Přihlásit se Zanechat komentář
Migrace zakázkových modulů na Odoo 18