Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Creare nuova azione programmata (scheduler)

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23649

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Salve a tutti,
sto provando a creare un'azione programmata da far partire una volta al mese.
Questa azione deve saltare 3 numeri di fattura nel sezionale vendite.

Ho creato un modulo con un metodo python:

from openerp import fields, models, api
class essepi_sequence(models.Model):
    _name = "ir.sequence"
    _inherit = "ir.sequence" 
    
    @api.model
    def skip_sequence(self, name, step):
        
        seq = self.search([('name', '=', name)])
        seq.write({'number_next': seq.number_next + step})
successivamente ho creato un'azione programmata, impostando come parametri
Oggetto ir.sequence
Metodo skip_sequence
Argomenti
('Sezionale Vendite', 3,)
Il problema è che quando parte l'azione, ho questo errore:
openerp.addons.base.ir.ir_cron: Call of self.pool.get('ir.sequence').skip_sequence(cr, uid, *('Sezionale Vendite', 3)) failed in Job 9
Traceback (most recent call last):
  File "/opt/bitnami/apps/odoo/lib/openerp-8.0_83bd9ee-py2.7.egg/openerp/addons/base/ir/ir_cron.py", line 138, in _callback
    getattr(model, method_name)(cr, uid, *args)
TypeError: skip_sequence() takes exactly 3 arguments (5 given)

Ho provato anche a creare un'azione server che va a fare l'update del sezionale vendite ed ho creato un'azione programmata su ir.actions.server con argomento l'ID dell'azione server, ma non funziona (l'azione server, aggiunto al menu "altro", funziona correttamente).

Come posso procedere?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23650

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
devi usare il decoratore @api.cr_uid

di seguito un esempio che puoi adattare alle tue esigenze
    @api.cr_uid
    def test_run_job(self, cr, uid, ids=None, context=None):

        if context is None:
            context = {}

        ids = self.search(cr,uid,[('state','=','draft')],context)

        print 'Eseguo Job con chiamata su',ids
        self.create_invoice(cr,uid,ids,context)

        return None
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: vencizon

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23655

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Grazie per la risposta Gigi.
Continuo a non riuscire a passare gli argomenti dall'azione, probabilmente sbaglio qualcosa.

Se però imposto i parametri direttamente nel metodo, ho un errore sul search
seq_ids = self.search(cr, uid, [('name', '=', name)], context)
TypeError: search() takes at least 4 arguments (3 given)

E mi pare strano, perché i parametri dovrebbero essere corretti. Sai aiutarmi?

PS non conoscevo quel decoratore, magari mi è sfuggito nella documentazione (anche se non credo).
Ultima modifica: 2 Anni 11 Mesi fa da vencizon.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23656

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Cosi' con due righe di codice e' un po difficile ... magari crea un gist cosi' gli do un'occhiata.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23657

  • vencizon
  • Avatar di vencizon
  • Offline
  • Expert Boarder
  • Messaggi: 121
  • Ringraziamenti ricevuti 3
  • Karma: 1
Il mio obbiettivo è quello saltare 3 numeri nel sezionale vendite ogni mese (magari passando 'name' e 'step' come argomenti, per poter variare lo step o il sezionale senza modificare il codice).

gist.github.com/anonymous/21ec08e4f7b47b9a1ae8

EDIT
Il codice iniziale era diverso
    @api.model
    def skip_sequence(self, name, step):
        
        seq = self.search([('name', '=', name)])
        seq.write({'number_next': seq.number_next + step})
Ma evidentemente le nuove API non vengono lette dalle azioni programmate.
Ultima modifica: 2 Anni 11 Mesi fa da vencizon.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Creare nuova azione programmata (scheduler) 2 Anni 11 Mesi fa #23660

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Per prima cosa la ricerca per:

name = 'Sezionale Vendite'

da qualche risultato? prova a mettere una prima sul valore di ritorno degli ids e vedi che ti da.

Ma cosa ancora piu' importante come richiami la funzione? devi crearti un'azione programmata che richiami quella funzione e da li passare eventuali parametri.

Di seguito l'esempio di configurazione xml da aggiungere al modulo per richiamare la funzione ... trami args passi i parametri che vuoi.
        <record id="ir_cron_sedinvoice" model="ir.cron">
            <field name="name">Elabora Fatture Differite</field>
            <field name="user_id" ref="base.user_root"/>
            <field name="priority">5</field>
            <field name="interval_number">5</field>
            <field name="interval_type">minutes</field>
            <field name="numbercall">-1</field>
            <field eval="False" name="doall"/>
            <field eval="'sed.invoice'" name="model"/>
            <field eval="'test_run_job'" name="function"/>
            <field eval="'()'" name="args"/>
        </record>
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.136 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam