Odoo: campo ora (time)

Odoo: campo ora (time)

di Pubblicato: 28 Novembre 2019 0 commenti

Vediamo come si mette il campo ora all’interno di Odoo. Lo scrivo perché inizialmente la cosa mi ha creato qualche grattacapo. Inizialmente viene naturale partire nel Model dal campo che più si avvicina, ovvero Datetime

ora = fields.Datetime()

Ma questo campo include sia la data che l’ora. Quindi a meno che non si intenda utilizzare l’ora, legata ad una specifica data, la strada più logica sarebbe quella di “spezzare” il risultato escludendo la data. E articolando con Python la cosa è anche possibile.

Ma esiste una strada più semplice. Infatti molto spesso l’ora viene utilizzata come un campo a se stante, quindi non collegato ad una data, o almeno non in questa forma diretta. Il trucco, previsto come vedremo a breve da Odoo stesso, almeno nelle versioni più recenti (la 12 in poi) è utilizzare il campo Float!

ora = fields.Float()

Passando dal Model alle View, quindi ci spostiamo da Python all’xml, il campo verrà scritto nella Form (e di conseguenza visualizzato nelle tree e/o Kanban) in questo modo:

<field name="ora" widget="float_time" />

Il dato immesso, se lo guardiamo nel database, in effetti sarà un float, ma il sistema effettuerà direttamente il calcolo relativo per trasformarlo nel dato orario.

Questo trucco è utilizzabile ampiamente in Odoo, però ad esempio nei report Qweb (e relativa stampa in pdf) il widget non funziona. Come si può aggirare il problema? Qui bisogna attingere a Python per convertire il float in orario, ovvero la stessa cosa che poi avviene automaticamente nelle View.

<t t-esc="'%02d:%02d' % (int(o.ora), o.ora % 1 * 60)"/>

Dove o.ora è la vista della fields del model, anteposta da “o” come foreach nel relativo template Qweb, se utilizzate questa forma.

Come si può intuire la cosa, specie per chi si avvicina a questo E.R.P., può risultare inizialmente spiazzante, in seguito però si rivela interessante, perché ad esempio se dobbiamo effettuare dei calcoli proprio con le ore, utilizzare il Float è sicuramente più agevole.

Vuoi dire o aggiungere qualcosa?

sezione commenti aperta al pubblico

Non ci sono ancora commenti!

Puoi essere il primo a commentare.

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.