Passa al contenuto
Odoo Menu
  • Accedi
  • Provalo gratis
  • App
    Finanze
    • Contabilità
    • Fatturazione
    • Note spese
    • Fogli di calcolo (BI)
    • Documenti
    • Firma
    Vendite
    • CRM
    • Vendite
    • Punto vendita Negozio
    • Punto vendita Ristorante
    • Abbonamenti
    • Noleggi
    Siti web
    • Configuratore sito web
    • E-commerce
    • Blog
    • Forum
    • Live chat
    • E-learning
    Supply chain
    • Magazzino
    • Produzione
    • PLM
    • Acquisti
    • Manutenzione
    • Qualità
    Risorse umane
    • Dipendenti
    • Assunzioni
    • Ferie
    • Valutazioni
    • Referral dipendenti
    • Parco veicoli
    Marketing
    • Social marketing
    • E-mail marketing
    • SMS marketing
    • Eventi
    • Marketing automation
    • Sondaggi
    Servizi
    • Progetti
    • Fogli ore
    • Assistenza sul campo
    • Helpdesk
    • Pianificazione
    • Appuntamenti
    Produttività
    • Comunicazioni
    • Approvazioni
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    App di terze parti Odoo Studio Piattaforma cloud Odoo
  • Settori
    Retail
    • Libreria
    • Negozio di abbigliamento
    • Negozio di arredamento
    • Alimentari
    • Ferramenta
    • Negozio di giocattoli
    Cibo e ospitalità
    • Bar e pub
    • Ristorante
    • Fast food
    • Pensione
    • Grossista di bevande
    • Hotel
    Agenzia immobiliare
    • Agenzia immobiliare
    • Studio di architettura
    • Edilizia
    • Gestione immobiliare
    • Impresa di giardinaggio
    • Associazione di proprietari immobiliari
    Consulenza
    • Società di contabilità
    • Partner Odoo
    • Agenzia di marketing
    • Studio legale
    • Selezione del personale
    • Audit e certificazione
    Produzione
    • Tessile
    • Metallo
    • Arredamenti
    • Alimentare
    • Birrificio
    • Ditta di regalistica aziendale
    Benessere e sport
    • Club sportivo
    • Negozio di ottica
    • Centro fitness
    • Centro benessere
    • Farmacia
    • Parrucchiere
    Commercio
    • Tuttofare
    • Hardware e assistenza IT
    • Ditta di installazione di pannelli solari
    • Calzolaio
    • Servizi di pulizia
    • Servizi di climatizzazione
    Altro
    • Organizzazione non profit
    • Ente per la tutela ambientale
    • Agenzia di cartellonistica pubblicitaria
    • Studio fotografico
    • Punto noleggio di biciclette
    • Rivenditore di software
    Carica tutti i settori
  • Community
    Apprendimento
    • Tutorial
    • Documentazione
    • Certificazioni 
    • Formazione
    • Blog
    • Podcast
    Potenzia la tua formazione
    • Programma educativo
    • Scale Up! Business Game
    • Visita Odoo
    Ottieni il software
    • Scarica
    • Versioni a confronto
    • Note di versione
    Collabora
    • Github
    • Forum
    • Eventi
    • Traduzioni
    • Diventa nostro partner
    • Servizi per partner
    • Registra la tua società di contabilità
    Ottieni servizi
    • Trova un partner
    • Trova un contabile
    • Incontra un esperto
    • Servizi di implementazione
    • Testimonianze dei clienti
    • Supporto
    • Aggiornamenti
    GitHub Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Richiedi una demo
  • Prezzi
  • Aiuto

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilità
  • Magazzino
  • PoS
  • Progetti
  • MRP
All apps
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
Assistenza

How to call a wizard prior to showing the tree view?

Iscriviti

Ricevi una notifica quando c'è un'attività per questo post

La domanda è stata contrassegnata
treeviewcustom12.04Enterprise
1 Rispondi
9440 Visualizzazioni
Avatar
Emil Dela Cruz

Please help. I've been working on a new tree view to show a custom list of stock consumption. Prior to showing the view, I need to delete all the existing records so that I can re-populate it with new data based on an input from a wizard (which asks for a year input).

I've managed to create the view and the wizard (ask year input and repopulate the table with new data). Below are my issues:

1. How can I properly delete the old records from the table?

2. How to call the wizard before the view is shown (from clicking the "Stock Consumption" menu item from Reporting menu of Inventory module). Where do I "put" it?

3. How to call the view after selecting (and processing) the wizard? Also, where do I "put" the code?

I'm using Odoo Enterprise v.12 by the way. Thank you in advance!

Below are the codes:

stock_consumption.xml

 <odoo>
<!--tree view-->
<record id="stock_consumption_tree" model="ir.ui.view">
        <field name="name">Stock Consumption</field>
        <field name="model">stock.consumption</field>
        <field name="arch" type="xml">
            <tree string="Stock Consumption Report" decoration-warning="on_hand &lt; min_qty or on_hand == min_qty" create="false" edit="false">
             <field name="trans_date" invisible="1"/>
             <field name="name" invisible="1"/>
<field name="default_code"/>
<field name="prod_name"/>
<field name="uom"/>
<field name="min_qty" widget="integer"/>
<field name="max_qty" widget="integer"/>
<field name="jan"/>
<field name="feb"/>
<field name="mar"/>
<field name="apr"/>
<field name="may"/>
<field name="jun"/>
<field name="jul"/>
<field name="aug"/>
<field name="sep"/>
<field name="oct"/>
<field name="nov"/>
<field name="dec"/>
<field name="month_avg"/>
<field name="on_hand" widget="integer"/>
<field name="on_hand_virtual" widget="integer"/>
<field name="avail_stock"/>
         </tree>
        </field>
</record>
<!--window action-->
<record model="ir.actions.act_window" id="stock_consumption_action">
<field name="name">Stock Consumption Report</field>
<field name="res_model">stock.consumption</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="stock_consumption_tree"/>
</record>
<!--menu item-->
<menuitem name="Stock Consumption" action="stock_consumption_action" id="menu_stock_consumption" parent="stock.menu_warehouse_report" groups="stock.group_stock_user" sequence="30"/>
</odoo>

stock_consumption.py

from odoo import tools
from odoo import api, fields, models


class StockConsumption(models.Model):
    _name = 'stock.consumption'
    _description = 'Stock Consumption'
    _order = "default_code asc"
    _auto = False
    
    name = fields.Many2one('product.product', 'Product')
    trans_date = fields.Date('Transaction Date')
    default_code = fields.Char('Product Code', related='name.default_code')
    prod_name = fields.Char('Name', related='name.name')
    jan = fields.Integer('January')
    feb = fields.Integer('February')
    mar = fields.Integer('March')
    apr = fields.Integer('April')
    may = fields.Integer('May')
    jun = fields.Integer('June')
    jul = fields.Integer('July')
    aug = fields.Integer('August')
    sep = fields.Integer('September')
    oct = fields.Integer('October')
    nov = fields.Integer('November')
    dec = fields.Integer('December')
    month_avg = fields.Integer('Monthly Average', compute='_compute_month_avg')
    uom = fields.Char('UOM', related='name.uom_name')
    min_qty = fields.Float('Min. Stock', related='name.reordering_min_qty')
    max_qty = fields.Float('Max. Stock', related='name.reordering_max_qty')
    on_hand = fields.Float('Qty On Stock', related='name.qty_available')
    on_hand_virtual = fields.Float('Forecast Qty', related='name.virtual_available')
    avail_stock = fields.Float('Stock Availability (in Months)', compute='_compute_avail_stock')
    state = fields.Selection([('active','On'),('cancel','Off')], string="Status", default="cancel", readonly=False)

    @api.one
    def _compute_month_avg(self):
        self.month_avg = (self.jan + self.feb + self.mar + self.apr + self.may + self.jun + self.jul + self.aug + self.sep + self.oct + self.nov + self.dec) // 12

    @api.one
    @api.depends('month_avg', 'on_hand')
    def _compute_avail_stock(self):
        if self.month_avg:
            self.avail_stock = self.on_hand / self.month_avg

wizard/filter_year_view.xml

<odoo>
    <data>
        <!--Filter the year-->
        <record id="filter_year_view" model="ir.ui.view">
            <field name="name">Filter Year</field>
            <field name="model">filter.year</field>
            <field name="arch" type="xml">
                <form string="Year Filter">
                    <group>
                        <span class="o_form_label">Please select the year to view the Stock Consumption.</span>
                        <group>
                            <field name="filter_year" string="Select year" widget="selection"/>
                        </group>
                    </group>
                    <footer>
                        <button name="do_filter_year" string="Retrieve Stock Consumption" type="object" class="btn-primary"/>
                        <button string="Cancel" class="btn-secondary" special="cancel" />
                    </footer>
                </form>
            </field>
        </record>

 </data>
</odoo>    

wizard/filter_year.py

from odoo import api, fields, models, tools, _
from datetime import datetime

 class FilterYear(models.TransientModel): _name = 'filter.year' _description = 'Year Filter' @api.model def year_selection(self): year = 2019

     # add succeeding years until this current year to the selection today = datetime.today() end_year = today.year year_list = [] while year != (end_year + 1): year_list.append((str(year), str(year))) year += 1 return year_list filter_year = fields.Selection(selection='year_selection', string="Select year", required=True, default=str(datetime.today().year)) def which_month(dmonth): switcher = { 1: 'jan', 2: 'feb', 3: 'mar', 4: 'apr', 5: 'may', 6: 'jun', 7: 'jul', 8: 'aug', 9: 'sep', 10: 'oct', 11: 'nov', 12: 'dec' } return switcher.get(dmonth,'') def do_filter_year(self): if self.filter_year: # delete stock consumption records stocks = self.env['stock.consumption'].search([('state','=','active')]) for stock in stocks: _logger.debug(' \n\n \t '+ stock.name +'\n\n\n') stock['state'] = 'cancel' stock.unlink() # select transactions from warehouse to 'Production Floor' only move_items = self.env['stock.move.line'].search([('location_dest_id','=',7)]) if move_items: for move_item in move_items: if str(move_item.create_date.year) == self.filter_year: date_month = move_item.create_date.month self.env['stock.consumption'].create({ 'trans_date': move_item.create_date, 'name': move_item.product_id.id, which_month(date_month): move_item.qty_done, 'state': 'active' })
0
Avatar
Abbandona
Avatar
Niyas Raphy (Walnut Software Solutions)
Risposta migliore

Hi,

For calling wizard directly from the menu, you can see this video : How To Call Wizard From Menu Item Odoo

Sample Code:

 <record id="create_appointment_form" model="ir.ui.view">
<field name="name">create.appointment.wizard</field>
<field name="model">create.appointment</field>
<field name="arch" type="xml">
<form string="Create Appointment">
<group>
<field name="patient_id"/>
<field name="appointment_date"/>
</group>
<footer>
<button name="print_report" string="Print" type="object" class="btn-primary"/>
<button name="create_appointment" string="Create" type="object" class="btn-primary"/>
<button name="get_data" string="Get Data" type="object" class="btn-primary"/>
<button name="delete_patient" string="Delete Patient" type="object" class="btn-primary"/>
<button string="Cancel" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>

<record id="create_appointment_wizard" model="ir.actions.act_window">
<field name="name">Create Appointment</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">create.appointment</field>
<field name="view_mode">form</field>
<field name="view_id" ref="create_appointment_form"/>
<field name="target">new</field>
</record>


In the wizard you can ask user for entering some data and from here you can return the corresponding view after deleting old records or by adding domain to records.


For deleting records(if needed), you can use self.unlink()


Thanks

1
Avatar
Abbandona
Emil Dela Cruz
Autore

Hello Niyas,

Thank you! So I managed to call the wizard prior to showing the view. However I still cannot delete the old records in the table after I select the "year" from the wizard.

What I need to do is when I select the "year" from the input selection in the wizard, all previous records from the stock.consumption table are to be deleted. Then based on the year of the transactions from the stock.move.line table, copy those records into the stock.consumption table if the transaction year is equal to the selected "year" from the wizard.

I added below code inside the do_filter_year function which is what's called after selecting the "year" to delete the records but they are not being deleted, new records are just being added:

@api.multi

def do_filter_year(self):

if self.filter_year:

# delete stock consumption records

stocks = self.env['stock.consumption'].search([('state','=','active')])

for stock in stocks:

stock['state'] = 'cancel'

stock.unlink()

Ti stai godendo la conversazione? Non leggere soltanto, partecipa anche tu!

Crea un account oggi per scoprire funzionalità esclusive ed entrare a far parte della nostra fantastica community!

Registrati
Post correlati Risposte Visualizzazioni Attività
How to save exported to excel report to disk
12.04 Enterprise
Avatar
0
gen 23
2577
Done and Cancelled MOs are not displayed
12.04 Enterprise
Avatar
Avatar
1
ago 22
2423
Programatically reserve items
mrp 12.04 Enterprise
Avatar
0
apr 23
2824
brings up the tree in the actions menu
treeview menu custom odoo15
Avatar
Avatar
1
lug 25
1517
Show differents tree views to same model in inventory module
treeview custom inventory tree
Avatar
Avatar
1
lug 22
3268
Community
  • Tutorial
  • Documentazione
  • Forum
Open source
  • Scarica
  • Github
  • Runbot
  • Traduzioni
Servizi
  • Hosting Odoo.sh
  • Supporto
  • Aggiornamenti
  • Sviluppi personalizzati
  • Formazione
  • Trova un contabile
  • Trova un partner
  • Diventa nostro partner
Chi siamo
  • La nostra azienda
  • Branding
  • Contattaci
  • Lavora con noi
  • Eventi
  • Podcast
  • Blog
  • Clienti
  • Note legali • Privacy
  • Sicurezza
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo è un gestionale di applicazioni aziendali open source pensato per coprire tutte le esigenze della tua azienda: CRM, Vendite, E-commerce, Magazzino, Produzione, Fatturazione elettronica, Project Management e molto altro.

Il punto di forza di Odoo è quello di offrire un ecosistema unico di app facili da usare, intuitive e completamente integrate tra loro.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now