Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
3 Trả lời
1882 Lượt xem

I want to create a sales order where selecting a checkbox will allow me to choose specific products (in this case, products with available_for_cashback = True). I've tried many things, but I haven't been successful. Below is my code with one of the many approaches I've attempted:


class ProductTemplate(models.Model):

    _inherit = 'product.template'


    available_for_cashback = fields.Boolean(string="Redeemable with cashback")



class SaleOrder(models.Model):

    _inherit = 'sale.order'


    sale_order_cashback = fields.Boolean(string="Cashback order")


    @api.onchange('sale_order_cashback')

    def _onchange_sale_order_cashback(self):

        if self.sale_order_cashback:

            domain = [('available_for_cashback', '=', True)]

        else:

            domain = [('sale_ok', '=', True)]

        return {'domain': {'order_line.product_template_id': domain}}







Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi,

For creating dynamic domain , please check the below code.


class SaleOrder(models.Model):

    _inherit = 'sale.order'


    sale_order_cashback = fields.Boolean(string="Cashback order")

    cashback_products = fields.Json()


@api.onchange('sale_order_cashback')

    def _onchange_sale_order_cashback(self):

        query = """

            SELECT pp.id

            FROM product_product pp

            INNER JOIN product_template pt ON pp.product_tmpl_id = pt.id

            WHERE pt.sale_ok = true

        """

        if self.sale_order_cashback:

            query += " AND pt.available_for_cashback = true"

        self.env.cr.execute(query)

        product_ids = [row[0] for row in self.env.cr.fetchall()]

        self.cashback_products = product_ids


XML


<record id="sale_order_form" model="ir.ui.view">

        <field name="name">sale.view.order.form.inherit</field>

        <field name="model">sale.order</field>

        <field name="inherit_id" ref="sale.view_order_form"/>

        <field name="arch" type="xml">


         <xpath expr="//field[@name='order_line']//tree//field[@name='product_id']"

                       position="attributes">

                    <attribute name="domain">[('id', 'in', parent.cashback_products)]</attribute>

          </xpath>


</field>


</record>


Hope it helps

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi, you can follow this: https://youtu.be/f3mq5fHRPT0

Hope it helps, Thanks

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Thanks a lot!! This solution works perfectly for me.

Ảnh đại diện
Huỷ bỏ
Bài viết liên quan Trả lời Lượt xem Hoạt động
0
thg 3 25
772
4
thg 1 25
1701
1
thg 11 24
1768
2
thg 4 25
1991
0
thg 2 25
652