Forum

Benvenuto!

Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.

0

Totali su record filtrati nelle organization unit

Avatar
Luigi Gregori

Sto implementando le OU per filtrare i dati per gli utenti. Nella fattispecie ho dei dati che dovrebbero essere gestiti (semplificando) a livello di regione e quindi ho creato per ogni regione una OU.

Il sistema filtra correttamente i dati quando li vedo nelle tree view in modalità "lista" ma se li raggruppo ho un comportamento strano:
Ad esempio ho un utente del Friuli che vede correttamente i 54 contatti assegnati alla sua OU ma nella vista raggruppata per regione (è un dato non legato alla OU) mi visualizza il totale di tutti i contatti , anche quelli che non appartengono alla sua OU, mentre se "esplodo" il raggruppamento il totale viene ricalcolato e i dati mostrati correttamente.
Qualche suggerimento?



Avatar
Abbandona
3 Risposte
0
Avatar
Luigi Di Naro
Migliore risposta

OK ora è molto piu' chiaro .... Evidentemente il fix fatto per limitare il degrado di prestazioni ha come effetto collaterale il bug che hai evidenziato. Oltretutto la issue è ancora aperta per cui so propenso a pensare che il problema non sia stato risolto.

Purtroppo intervenire su oggetti base: user, partner, product etc etc è sempre operazione delicata.

Sinceramente, non mi era mai capitato di dover estendere la search con tale scopo e di conseguenza non ho mai affrontato il bug di cui sopra. Puoi provare ad aggiungere un commento e lo screen alla issue e vedere che ti rispondono oppure analizzare il problema e tirare fuori una soluzione.

Azzardo, molto azzardo, una ipotesi ... i valori di aggregazione vengono estratti prima della effettiva ricerca ... un qualcosa tipo count e groupby e solo successivamente popolati i valori quando espandi il gruppo. Se questa ipotesi fosse vera, il fix fatto alterando la search avrebbe come conseguenza che la prima ricerca torna tutte le ou_id mentre poi la successiva search non torna nulla ... questa ipotesi non mi convince del tutto pero' a sensazione potrebbe essere se non la fonte almeno una strada da analizzare per identificare il problema.

Purtroppo un simile intervento temo necessiti di approfondite conoscenze di come funzioni odoo a basso livello, orm, ed un bel po' di tempo per elaborare una soluzione efficiente.

Una soluzione barbara, ma che cmq necessita di intervento sul codice base di odoo, è quello di filtrare i valori di ritorno alla ui nella group_by e togliere quelli che hanno 0 come elementi ... molto ma molto sporca e barbara come soluzione.

Vedi se riesci a tirarci fuori qualcosa da queste indicazioni ma sopratutto se trovi una soluzione faccelo sapere ... l'argomento a livello generale è interessante.

Avatar
Abbandona
0
Avatar
Luigi Di Naro
Migliore risposta

hai messo un filtro o una record_rule? ... se hai messo un filtro quello e' solo sulla tree ....

Avatar
Abbandona
0
Avatar
Luigi Gregori
Migliore risposta

Di fatto non ho fatto nulla (ancora :D ) 
Ho usato il modulo OCA partner_organization_unit  sperando che "risolvesse" il problema da solo ...

Di fatto credo sia una rule sugli oggetti (da res_partner.py)

    # Extending methods to replace a record rule.
    # Ref: https://github.com/OCA/operating-unit/issues/258
    @api.model
    def search(self, args, offset=0, limit=None, order=None, count=False):
        # Get the OUs of the user
        ou_ids = self.env.user.operating_unit_ids.ids
        domain = ['|',
                  ('operating_unit_ids', 'in', ou_ids),
                  ('operating_unit_ids', '=', False)]
        return super().search(domain + args, offset=offset, limit=limit,
                              order=order, count=count)
Ma sinceramente non ho capito come funzioni la totalizzazione nei tree - magari la tolgo e già migliora la situazione anche se nel caso specifico non vorrei proprio vedere "REGIONE LAZIO ..."
Avatar
Abbandona