V následujících řádcích doufám, že naleznete užitečného pomocníka při migraci vašeho addonu na verzi 18. Naše addony jsou převážně zaměřené na legislativu a týkají se hlavně kódu v Pythonu a XML. Na migraci JavaScriptu jsem nenarazil, takže zde nenajdete žádné tipy ohledně změn v této oblasti.
upgrade_code od Odoo
Odoo představilo nového pomocníka, který aktuálně pomáhá hlavně s migrací XML z "tree" na "list". Z terminálu stačí spustit tento příkaz:
odoo-bin upgrade_code —addons-path ./path/to/addons_dir
(Možná bude potřeba přidat potřebné parametry v závislosti na tom, zda máte Odoo konfigurační soubor. Pokud ne, přidejte další parametry, které běžně uvádíte při spouštění.)
Jak hromadně upravit manifesty
Nahrazení pomocí regulárních výrazů je také velký pomocník. Většina IDE to umožňuje řízeně ve složce, kde chceme vyhledat řetězec:
('|\")(version)('|\"):(.*?),
nahradíme za:
$1$2$3:'18.0.0',
Výsledek můžete bezpečně otestovat například na stránce https://regex101.com/
Tím končí ta lehká část, ale už jsme ve fázi, kdy při spuštění Odoo 18 můžeme zkusit nainstalovat naše vlastní doplňky a případně spustit testy. Z přibližně 30+ modulů, které jsem migroval, téměř každý vyžadoval nějakou úpravu – od přejmenovaných polí přes odstraněné metody a pole až po změněné pohledy (views) a podobně.
Níže se pokusím odkázat na věci, na které jsem během migrace narazil. Doufám, že vám to usnadní hledání a zpříjemní proces migrace.
Obecné změny
V modelu metoda _name_search(...) již není, existuje name_search(...), ale blíže původní logice je _search_display_name(...).
Pokud jste někde pracovali s SQL, skládali dotazy jako řetězce a dědili od tříd, pravděpodobně narazíte na to, že předávání parametrů již nefunguje stejně jako dříve. O vše se nyní stará obálka SQL, a místo několika parametrů z metody obdržíte jen jeden objekt třídy SQL, který má vlastnosti (např. from_clause, where_clause). Součástí where_clause jsou kromě samotného SQL dotazu už i parametry. Parametry v SQL se již neřídí pořadím, ale názvem, což je přehlednější. Pokud chcete vědět více, toto chování je dobře vidět na každém účetním reportu, který něco počítá.
U fields group_operator je nově aggregator.
Testy
Prošly podle mě správnou úpravou, i když to vyžaduje pár ručních zásahů. Výsledkem je však výrazně přehlednější metoda setUpClass(), ve které se nyní odehrává celý setup, nově bez parametru chart_template_ref. A tak z následujícího:
@classmethod
def setUpClass(cls, chart_template_ref='cz_systee'):
super(TestABOBatchPaymentGeneration, cls).setUpClass(chart_template_ref=chart_template_ref)
upravíte na následující
@classmethod
@AccountSalesReportCommon.setup_chart_template('cz_systee')
def setUpClass(cls):
# tady se nově nastaví i celá company a vše co potřebujete a dříve se různě rozdělovalo
Pozor, testy jsou pravděpodobně spuštěny s uživatelem s nižším oprávněním, a pro mnoho testů je třeba přidat práva, například:
cls.env.user.groups_id |= cls.env.ref('account.group_validate_bank_account')
Potřebujete inicializovat více společností
cls.company_data_2 = cls.setup_other_company()
account.edi.common
Tento modul prošel asi největší změnou ze všech, které jsem migroval. Původní implementace se změnila, metody a jejich rozhraní jsou mnohdy nové.
Doporučuji prohlédnout ostatní implementace Odoo. Určitě se zaměřte na metody _find_value(...) a _retrieve_line_vals(...), které budete potřebovat pro řádky dokladu. Odoo zde bohužel kombinuje dva přístupy k XML objektu, takže buďte opatrní.
_compute_ubl_cii_format(...) zanikla, místo ní je _get_ubl_cii_formats(...)
Pole ubl_cii_format změněno na invoice_edi_format
account.move
Pole made_sequence_hole změněno na made_sequence_gap
Pole to_check změněno na checked
account.account
Pole company_id je nově kolekce company_ids
account.payment
Pole ref změněno na memo
account.payment.register
Určitě vás bude zajímat metoda _get_communication(...)
Změnila se práce s batches (nově neexistuje metoda _get_batches() přistupuje se rovnou k batches)
asset
asset_model je nově kolekce asset_model_ids
reversal_move_id je nově kolekce reversal_move_ids
Cron
Neexistují parametry numbercall, doall
ir.property
Zřejmě zanikl bez náhrady, nebo jsem ho nenašel.
Více naleznete https://github.com/odoo/odoo/commit/de302c2d36305c0d7562572a30587641eabfe914#diff-1db47cdbb145c8ab07b89c2288e239b8d2588881cf5917fcde02adcfcf87cb40R620
Narazili jste na další zajímavé postřehy, které by se mohly hodit ostatním? Neváhejte nám je poslat, rádi článek rozšíříme.