Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: chiamare un metodo python da un report

chiamare un metodo python da un report 3 Anni 3 Settimane fa #23250

  • scittadini
  • Avatar di scittadini
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
voglio richiamare una funzione python dal report che stampa l'ordine di vendita:

ad esempio, ho visto che se metto nell'xml overridato dal mio modulo :
<t t-esc="time.strftime('%d %b %Y',time.strptime(l.data_consegna_preventivata,'%Y-%m-%d'))"/>

la cosa funziona perfettamente, ma cosa ha reso "visibile" il package time ?

girando per il codice ho trovato in product/report/product_pricelist.py questo frammento
class product_pricelist(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(product_pricelist, self).__init__(cr, uid, name, context=context)
        self.pricelist=False
        self.quantity=[]
        self.localcontext.update({
            'time': time,
            'get_pricelist': self._get_pricelist,
            'get_currency': self._get_currency,
            'get_categories': self._get_categories,
            'get_price': self._get_price,
            'get_titles': self._get_titles,
        })

sarebbe perfetto perchè vedo che permette di fare in product/views/report_pricelist.xml
<span t-esc="get_pricelist(data['form']['price_list'])"/>
ma non trovo un equivalente per la semplice stampata del sale order, chi lo stampa ? come lo estendo ?

( in pratica devo far comparire la lista prodotti in posti diversi in base alla loro categoria di appartenenza, quindi alla fine riuscire ad avere invece di
<tr t-foreach="o.options" t-as="l">

una cosa tipo
<tr t-foreach="o.get_filtered_options('nome_categoria')" t-as="l">

sarebbe l'ideale
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

chiamare un metodo python da un report 3 Anni 3 Settimane fa #23251

  • scittadini
  • Avatar di scittadini
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Ok, dovrei aver trovato, mi pare di capire girando nel codice che quel "report_sxw.rml_parse" è qualcosa di vecchio (sono su odoo8)

La soluzione più pulita a cui sono giunto è aggiungere al mio modulo :

class IlMioSaleReport(models.AbstractModel):
    _name = 'report.sale.report_saleorder'

    def _get_filtered_options(self, category):
        # qui farò delle cose....
        return output

    @api.multi
    def render_html(self, data=None):
        report_obj = self.env['report']
        report = report_obj._get_report_from_name('sale.report_saleorder')
        docargs = {
            'doc_ids': self._ids,
            'doc_model': report.model,
            'docs': self,
            'filtered_options': self._get_filtered_options
        }
        return report_obj.render('sale.report_saleorder', docargs)

c'è un punto unico di ingresso nel package report.py che cerca questo renderer overridato (cerca col _name) e nell'array docargs aggiungiamo quello che ci serve ....

adesso nell'xml
<tr t-foreach="filtered_options('nome_categoria')" t-as="l">

richiama correttamente la mia funzione.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.131 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam