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.
Totali su record filtrati nelle organization unit
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?
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.
hai messo un filtro o una record_rule? ... se hai messo un filtro quello e' solo sulla tree ....
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)
Resta informato
Informazioni sulla comunità
Strumenti di richiesta
Statistiche
Richiesta del: 11/09/20, 07:16 |
Vista: 674 volte |
Ultimo aggiornamento: 13/09/20, 07:00 |