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

[8] apertura wizard

Avatar
Fabio Romaggioli

premessa: si, vi scrivo dal passato, ancora è in giro la versione 8
detto questo, sto realizzando un piccolo wizard che mi permetta di inserire un prodotto diretamente in una Richiesta d'acquisto.
al model product.template ho inserito il mio button:

<record id="ies_insert_product_to_purchase_request" model="ir.ui.view">
        <field name="name">insert_product_to_purchase_request</field>
        <field name="model">product.template</field>
        <field name="inherit_id" ref="product.product_template_form_view"/>
        <field name="arch" type="xml">
            <xpath expr="/form/*" position="before">
                <header>
                    <button name="action_insert_product_to_purchase_request"
                        string="Inserisci in RdA" type="object" class="oe_highlight"
                        groups="purchase_request.group_purchase_request_user,purchase_request.group_purchase_request_manager"
                        attrs="{'invisible':[('purchase_ok','=', False)]}"
                    />
                </header>
            </xpath>
        </field>
    </record>


il relativo metodo apre (o almeno dovrebbe) la view del mio TransientModel in questo modo:

@api.multi
    def action_insert_product_to_purchase_request(self):
        view = self.env.ref('ies_variazioni_rda.view_wiz_import_product_pr')
        wiz = self.env['wiz_import_product_pr'].create(
            {
                'my_product': self.id,
                'my_product_qty': 1,
                #'my_rda': None
            }
        )

        return {
            'name': 'Inserimento prodotto in RdA',
            'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'view_type': 'form',
            'res_model': 'ies_variazioni_rda.wiz_import_product_pr',
            'views': [(view.id, 'form')],
            'view_id': view.id,
            'target': 'new',
            'res_id': wiz.id,
            'context': self.env.context,
        }

Action e form view sono definite in questo modo

<act_window name="Inserimento Prodotto in Richiesta d'Acquisto"
            res_model="wiz_import_product_pr"
            src_model="wiz_import_product_pr"
            view_mode="form"
            target="new"
            multi="True"
            id="action_insert_product_to_purchase_request"/>


    <record id="view_wiz_import_product_pr" model="ir.ui.view">
        <field name="name">Inserimento Prodotto in RdA</field>
        <field name="model">wiz_import_product_pr</field>
        <field name="arch" type="xml">
            <form>
                <group>
                    <field name="my_rda"/>
                    <field name="my_product" readonly="True"/>
                    <field name="my_product_qty"/>
                </group>
                <footer>
                    <button name="go_insert_product_in_rda" string="Salva" type="object" class="oe_highlight"/>
                    <button special="cancel" string="Annulla" class="oe_right"/>
                </footer>
            </form>
        </field>
    </record>

    <record id="action_insert_product_to_purchase_request" model="ir.actions.act_window">
        <field name="name">Inserimento Prodotto in Richiesta d'Acquisto</field>
        <field name="res_model">wiz_import_product_pr</field>
        <field name="view_type">form</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
        <field name="view_id" ref="view_wiz_import_product_pr"/>
    </record>


Tutto sembrerebbe funzionare, il pulsante chiama la action che prova ad aprire il form (ho dei metodi per i domain che vengono invocati come mi aspetto). Però a fine apertura ricevo questo errore:

Traceback (most recent call last):
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 546, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 583, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 319, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/service/model.py", line 118, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 316, in checked_call
    return self.endpoint(*a, **kw)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 812, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/buildout/parts/odoo/openerp/http.py", line 412, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 944, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/buildout/parts/odoo/addons/web/controllers/main.py", line 936, in _call_kw
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
AttributeError: 'NoneType' object has no attribute 'fields_view_get'

Sono bloccato come un somaro davanti ad un muro.
Vedete voi quello che io non vedo???


Avatar
Abbandona
10 Risposte
1
Avatar
Gianmarco Conte
Migliore risposta

Ciao, Se provi ad aprire il wizard commentando questo: 

wiz = self.env['wiz_import_product_pr'].create(

            {
                'my_product': self.id,
                'my_product_qty': 1,
                #'my_rda': None
            }
        )
e commenti anche il res_id nel return? Se ti apre il wizard allora gli passi i valori di default in un altro modo.
Avatar
Abbandona
0
Avatar
Fabio Romaggioli
Migliore risposta

no, ottengo lo stesso identico errore

Avatar
Abbandona
1
Avatar
Gianmarco Conte
Migliore risposta

Ti posto un esempio di un modulo abbastanza vecchio che feci per v8 che se non erro apriva una tree:

@api.multi

    def tua_funzione(self):

        view_ref = self.env['ir.model.data'].get_object_reference('nome_modulo', 'vista_da_aprire')

        view_id = view_ref[1] if view_ref else False

        return {

            'name': 'Nome Tree',

            'view_type': 'form',

            'view_mode': 'tree,form',

            'views': [(False, 'tree'), (False, 'form')],

            'res_model': 'tuo.model',

            'view_id': view_id,

            'type': 'ir.actions.act_window',

            'target': 'current',

            'context': {'default_product_id': id_prodotto}, #qui puoi mettere dei valori di default 

            'nodestroy': False,

        }

Avatar
Abbandona
0
Avatar
Fabio Romaggioli
Migliore risposta

Ottengo lo stesso identico errore.
Non penso che il problema sia il modo in cui apro il form da python, anche perchè i metodi per popolare i campi vengono invocati... deve esserci qualcosa che non va nell'xml, ma proprio non riesco a vederlo


Avatar
Abbandona
1
Avatar
Gianmarco Conte
Migliore risposta

Se vuoi, puoi inviarmi il modulo e vedo tra stasera e domani di dargli uno sguardo

Avatar
Abbandona
0
Avatar
Fabio Romaggioli
Migliore risposta

magari!

...come facciamo?

Avatar
Abbandona
1
Avatar
Gianmarco Conte
Migliore risposta

trovi la mia mail sul mio profilo

Avatar
Abbandona
0
Avatar
Fabio Romaggioli
Migliore risposta

forse hai il profilo "privato", quando clicco sul tuo nome mi riporta qua.
Non frequento il forum da un po', forse sbaglio qualcosa io


Avatar
Abbandona
1
Avatar
Gianmarco Conte
Migliore risposta

ok no problem,

gconte@dinamicheaziendali.it

Avatar
Abbandona
0
Avatar
Fabio Romaggioli
Migliore risposta

Risolto grazie al grande Gianmarco, che mi ha fatto notare questa baggianata:

return {
            'name': 'Inserimento prodotto in RdA',
            'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'view_type': 'form',
            'res_model': 'ies_variazioni_rda.wiz_import_product_pr',
            'views': [(view.id, 'form')],
            'view_id': view.id,
            'target': 'new',
            'res_id': wiz.id,
            'context': self.env.context,
        }

In realtà il modelo da aprire è 'wiz_import_product_pr' ora funziona tutto.
Grazie Gianmarco!

Avatar
Abbandona