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

Selezione da One2many in wizard

Avatar
David Barozzini

Mi trovo nella situazione in cui a partire da un oggetto in una tabella, devo selezionare degli oggetti da un'altra tabella (filtrati in modo abbastanza complesso) ed elaborarli usando il primo oggetto.

Quello che mi piacerebbe avere sarebbe, a partire dal primo oggetto, un wizard che mi proponga, ad esempio in un One2Many, la lista di oggetti che posso scegliere, mi permetta di selezionarne alcuni, mi permetta di settare delle opzioni generiche, e chiami una funzione sulla selezione.

Idealmente l'azione dovrebbe chiamare del codice del genere, impostando partner_id tramite contesto:

class SelectionWizard(models.TransientModel):
    _name = "selection.wizard"
    _description = "Wizard di selezione multipla"

    partner_id = fields.Many2one(comodel_name="res.partner", string="Partner")
    possible_ids = fields.Many2many( comodel_name="my_model", string="Selezioni possibili", compute="_compute_possible_ids", )
    option_1 = fields.Integer(string="Opzione 1")
    option_2 = fields.Integer(string="Opzione 2")
    option_3 = fields.Integer(string="Opzione 3")
    def _compute_possible_ids(self):
for record in self:
            record.possible_ids = self.env["my_model"].search(...)

    def do_stuff(self):
        # itera sugli oggetti selezionati e elaborali secondo le opzioni settate

Da quanto mi è parso di capire tra documentazione e forum vari non c'è un modo per fare cose del genere di default. L'unica soluzione che avrei ora sarebbe creare un wizard che ritorni una tree view su my_model con gli elementi filtrati e tutti i dati passati via contesto, e una azione su my_model che faccia l'elaborazione vera e propria usando anche il contesto che arriva dalla prima azione, ma questo oltre a complicare un sacco il codice complicherebbe anche le azioni richieste dall'utente per portare a termine questa operazione.

Esiste la possibilità, anche tramite qualche modulo tecnico, di creare wizard del genere?

1 commento
Avatar
Abbandona
Avatar
Davide Corio
-

Nulla di pronto. Come hai intuito devi scrivere un po' di codice. Però sono cose fattibili.

2 Risposte
1
Avatar
Alessandro Fiorino
Migliore risposta

Mi sembra che ci sei quasi.   Aggiungi il campo

 selected_ids = fields.Many2many(
        comodel_name="my_model",
        string="Selezione utente", relation="selection_wiz_my_model", column1="wiz_id", column2="sel_id" )

E poi il form tipo così

<form>
<sheet>
<group>
<field name="partner_id" readonly="1"/>
<field name="possible_ids" invisible="1"/>
<field name="selected_ids" widget="many2many_tags" domain="[('id','in',possible_ids)])"/>
<field name="option_1"/> ecc.....
</group>
</sheet>
<footer>
<button type="object" class="oe_highlight" name="do_stuff" string="Do Stuff"/>
<button string="Annulla" class="btn-default" special="cancel"/>
</footer>
</form>

Non hai bisogno di fare il passaggio intermedio e do_stuff può già iterare su selected_ids

Se i possible_ids dipendono dal partner, ricordati di mettere @api.depends('partner_id') prima della def.


1 commento
Avatar
Abbandona
Avatar
David Barozzini
-

Questo è praticamente quello che mi serve, probabilmente qualsiasi cosa di più richiederebbe un widget custom (che potrebbe essere una buona scusa per mettersi a studiare un po' come funziona Odoo lato frontend).

Grazie mille!