Bỏ qua để đến Nội dung
Odoo Menu
  • Đăng nhập
  • Dùng thử miễn phí
  • Ứng dụng
    Tài chính
    • Kế toán
    • Hóa đơn
    • Chi phí
    • Bảng tính (BI)
    • Tài liệu
    • Ký tên
    Bán hàng
    • CRM
    • Bán hàng
    • POS Cửa hàng
    • POS Nhà hàng
    • Đăng ký
    • Cho thuê
    Trang web
    • Trình tạo trang web
    • Thương mại điện tử
    • Blog
    • Diễn đàn
    • Trò chuyện trực tiếp
    • Học trực tuyến
    Chuỗi cung ứng
    • Tồn kho
    • Sản xuất
    • PLM
    • Mua hàng
    • Bảo dưỡng
    • Chất lượng
    Nhân sự
    • Nhân viên
    • Tuyển dụng
    • Ngày nghỉ
    • Đánh giá
    • Giới thiệu
    • Đội xe
    Marketing
    • Marketing trên MXH
    • Marketing qua email
    • Marketing qua SMS
    • Sự kiện
    • Tự động hóa Marketing
    • Khảo sát
    Dịch vụ
    • Dự án
    • Bảng chấm công
    • Dịch vụ hiện trường
    • Hỗ trợ
    • Kế hoạch
    • Lịch hẹn
    Năng suất
    • Thảo luận
    • Phê duyệt
    • IoT
    • VoIP
    • Kiến thức
    • WhatsApp
    Ứng dụng của bên thứ ba Studio Odoo Nền tảng Đám mây Odoo
  • Ngành
    Bán lẻ
    • Nhà sách
    • Cửa hàng quần áo
    • Cửa hàng nội thất
    • Cửa hàng tạp hóa
    • Cửa hàng đồ kim khí
    • Cửa hàng đồ chơi
    Ẩm thực & Dịch vụ lưu trú
    • Bar và quán rượu
    • Nhà hàng
    • Đồ ăn nhanh
    • Guest house
    • Nhà phân phối đồ uống
    • Khách sạn
    Bất động sản
    • Công ty môi giới bất động sản
    • Công ty kiến trúc
    • Xây dựng
    • Quản lý bất động sản
    • Làm vườn
    • Hiệp hội chủ sở hữu bất động sản
    Tư vấn
    • Công ty kế toán
    • Đối tác Odoo
    • Công ty marketing
    • Công ty luật
    • Tuyển dụng
    • Thanh tra & chứng nhận
    Sản xuất
    • Dệt may
    • Kim loại
    • Nội thất
    • Ẩm thực
    • Nhà máy bia
    • Quà tặng doanh nghiệp
    Sức khoẻ & fitness
    • CLB thể thao
    • Cửa hàng kính mắt
    • Trung tâm fitness
    • Chuyên gia chăm sóc sức khỏe
    • Hiệu thuốc
    • Tiệm làm tóc
    Thương mại
    • Dịch vụ sửa chữa
    • Phần cứng CNTT & Hỗ trợ
    • Hệ thống năng lượng mặt trời
    • Công ty sản xuất giày
    • Dịch vụ vệ sinh
    • Dịch vụ HVAC
    Khác
    • Tổ chức phi lợi nhuận
    • Cơ quan môi trường
    • Cho thuê biển quảng cáo
    • Nhiếp ảnh
    • Cho thuê xe đạp
    • Đại lý phần mềm
    Xem tất cả ngành
  • Cộng đồng
    Học tập
    • Khóa học
    • Tài liệu
    • Chứng chỉ
    • Đào tạo
    • Blog
    • Podcast
    Thúc đẩy đào tạo
    • Chương trình đào tạo
    • Trò chơi kinh doanh Scale Up!
    • Tham quan Odoo
    Nhận phần mềm
    • Tải xuống
    • So sánh các phiên bản
    • Phiên bản
    Hợp tác
    • Github
    • Diễn đàn
    • Sự kiện
    • Dịch thuật
    • Trở thành đối tác
    • Dịch vụ dành cho Đối tác
    • Đăng ký công ty kế toán của bạn
    Nhận dịch vụ
    • Tìm đối tác
    • Tìm kế toán
    • Gặp chuyên gia hỗ trợ
    • Dịch vụ Triển khai
    • Khách hàng tham khảo
    • Hỗ trợ
    • Nâng cấp
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Nhận một buổi demo
  • Bảng giá
  • Trợ giúp

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

  • CRM
  • e-Commerce
  • Kế toán
  • Tồn kho
  • PoS
  • Dự án
  • MRP
All apps
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Hỗ trợ

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

Đăng ký nhận tin

Nhận thông báo khi có hoạt động trên bài viết này

Câu hỏi này đã bị gắn cờ
treeviewcustom12.04Enterprise
1 Trả lời
9465 Lượt xem
Ảnh đại diện
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
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Niyas Raphy (Walnut Software Solutions)
Câu trả lời hay nhất

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
Ảnh đại diện
Huỷ bỏ
Emil Dela Cruz
Tác giả

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()

Bạn có hứng thú với cuộc thảo luận không? Đừng chỉ đọc, hãy tham gia nhé!

Tạo tài khoản ngay hôm nay để tận hưởng các tính năng độc đáo và tham gia cộng đồng tuyệt vời của chúng tôi!

Đăng ký
Bài viết liên quan Trả lời Lượt xem Hoạt động
How to save exported to excel report to disk
12.04 Enterprise
Ảnh đại diện
0
thg 1 23
2607
Done and Cancelled MOs are not displayed
12.04 Enterprise
Ảnh đại diện
Ảnh đại diện
1
thg 8 22
2434
Programatically reserve items
mrp 12.04 Enterprise
Ảnh đại diện
0
thg 4 23
2847
brings up the tree in the actions menu
treeview menu custom odoo15
Ảnh đại diện
Ảnh đại diện
1
thg 7 25
1541
Show differents tree views to same model in inventory module
treeview custom inventory tree
Ảnh đại diện
Ảnh đại diện
1
thg 7 22
3292
Cộng đồng
  • Khóa học
  • Tài liệu
  • Diễn đàn
Open source
  • Tải xuống
  • Github
  • Runbot
  • Dịch thuật
Dịch vụ
  • Lưu trữ Odoo.sh
  • Hỗ trợ
  • Nâng cấp
  • Phát triển tùy chỉnh
  • Đào tạo
  • Tìm kế toán
  • Tìm đối tác
  • Trở thành đối tác
Giới thiệu công ty
  • Công ty của chúng tôi
  • Tài sản thương hiệu
  • Liên hệ
  • Việc làm
  • Sự kiện
  • Podcast
  • Blog
  • Khách hàng
  • Pháp lý • Riêng tư
  • Bảo mật
الْعَرَبيّة 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 là bộ ứng dụng kinh doanh có open source đáp ứng tất cả các nhu cầu của công ty bạn: CRM, thương mại điện tử, kế toán, tồn kho, POS, quản lý dự án, v.v.

Định hướng giá trị riêng biệt của Odoo là tích hợp hoàn toàn và dễ dàng sử dụng.

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