remoteSections

Supponiamo di avere la necessità di mostrare delle sections dinamiche, i cui bottoni si modificano sulla base del record selezionato. Per esempio, nel progetto Sandbox, potremmo voler sezionare le fatture del cliente sulla base della combinazione «anno-mese»: questo dato sarà ovviamente differente per ogni singolo cliente, e la section dovrà quindi adattarsi al record selezionato per mostrare alcuni bottoni piuttosto che altri.

Prendiamo quindi la vista ViewFromCliente nella risorsa della table fattura e aggiungiamo la toolbar superiore con la bottoniera:

def th_top_custom(self,top):
    top.bar.replaceSlots('vtitle', 'sections@annomese', sections_annomese_remote=self.calcolaSectionsAnnoMese)

Notiamo che rispetto alle sections finora definite, in questo caso andiamo a effettuare una chiamata a un metodo calcolaSectionsAnnoMese, che definiamo come segue:

@public_method(remote_cliente_id='^#FORM.record.id')
def calcolaSectionsAnnoMese(self, cliente_id=None, **kwargs):
    if not cliente_id:
        return []
    f = self.db.table('fatt.fattura').query(where='$cliente_id=:cli_id', cli_id=cliente_id,
                                              columns="to_char($data, 'YYYY-MM') AS annomese",
                                              distinct=True).fetch()
    return [dict(code=f"c_{r['annomese'].replace('-','')}",
                      caption=r['annomese'],
                      condition="to_char($data, 'YYYY-MM')=:am",
                      condition_am=r['annomese']) for r in f]

Il metodo utilizza il decoratore public_method, a cui viene passato il parametro remote_cliente_id, che serve a individuare il path del cliente_id sulla base del quale andare a fare le successive operazioni di lettura. Se questo non esiste (nuovo record), infatti, la section sarà vuota.

Se invece il record esiste già, allora viene fatta una query per individuare le combinazioni «anno-mese» per le quali esistono delle fatture: così facendo non avremo bottoni «vuoti» con tutti i periodi, ma solo bottoni corrispondenti ai periodi con dei risultati, diversi cliente per cliente.


Parametri:

Nome parametro

Tipo

Descrizione

multivalue

B

Se impostato a True consente di poter effettuare selezioni multiple di valori di partizionamento dei dati

multiButton

L

Permette di indicare un numero di bottoni oltre il quale la bottoniera si convertirà in tendina (es: multiButton=5)

variable_struct

B

Se impostato a True permette di selezionare nelle sections una determinata th_struct precedentemente definita (es: struct=»clienti con_acquisti»)

Autore della sezione: Davide Paci