Skip ke Konten
Menu
Pertanyaan ini telah diberikan tanda

On the website, I want to show users sales orders and products.


The problem I encountered is that Odoo does not want to display both (sales orders and products).

Therefore, I added recording rules and access rights for sale.order, product.tamplate, and product.product.

This works for sales orders; orders are displayed on the website, but not for products. 

Sale order rule

    <record id="rule_portal_sale_order_final_recipient" model="ir.rule">

        <field name="name">Portal: Sale Orders by Final Recipient</field>

        <field name="model_id" ref="sale.model_sale_order"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('final_recipient_id', '=', user.partner_id.id)]</field>

    </record>

Products rules

    <record id="rule_portal_product_template_final_recipient" model="ir.rule">

        <field name="name">Portal: Product template</field>

        <field name="model_id" ref="product.model_product_template"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[]</field>

    </record>

    <record id="rule_portal_product_product_final_recipient" model="ir.rule">

        <field name="name">Portal: Product product</field>

        <field name="model_id" ref="product.model_product_product"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[]</field>

    </record>

 I also tried adding (1 , “=”, 1) to the domain, but that doesn't work either. I can find my entry rules in the portal settings, and there are only my own rules there, which means that there are no rules that can be over than my rules.

Access rights

access__product_product__group_user,access__product_product__group_user,product.model_product_product,base.group_user,1,1,1,1

access__product_product__group_portal,access__product_product__group_portal,product.model_product_product,base.group_portal,1,0,0,0

access__product_template__group_user,access__product_template__group_user,model_product_template,base.group_user,1,1,1,1

access__product_template__group_portal,access__product_template__group_portal,model_product_template,base.group_portal,1,0,0,0

access__sale_order__group_portal,access__sale_order__group_portal,model_sale_order,base.group_user,1,1,1,1

access__sale_order__group_user,access__sale_order__group_user,model_sale_order,base.group_portal,1,0,0,0

 

UPDATE:
I fortgot to add that i have multicompany. And just now i changed company_id in users settings, and sale_orders with products works fine. All products have field company_id = False.

That is for one company all works, for another not. Its very strange




Avatar
Buang
Jawaban Terbai

Hi,


1- Correct access rights for portal users


Update ir.model.access.csv so portal users have read on product models:


access_product_product_portal,access_product_product_portal,product.model_product_product,base.group_portal,1,0,0,0

access_product_template_portal,access_product_template_portal,product.model_product_template,base.group_portal,1,0,0,0


Notice: use the correct model_product_template and model_product_product XML IDs.



2- Record rules for portal


If you want all products visible:


<record id="rule_portal_product_template" model="ir.rule">

    <field name="name">Portal: Product Templates</field>

    <field name="model_id" ref="product.model_product_template"/>

    <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

    <field name="domain_force">[(1, '=', 1)]</field>

</record>


<record id="rule_portal_product_product" model="ir.rule">

    <field name="name">Portal: Product Variants</field>

    <field name="model_id" ref="product.model_product_product"/>

    <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

    <field name="domain_force">[(1, '=', 1)]</field>

</record>



If you only want products that are published on the website:


<field name="domain_force">[('website_published', '=', True)]</field>



* Sales orders work because you made a custom domain rule.

* Products don’t show because portal users lack read access and/or are filtered by website rules.

* Give portal users read rights in ir.model.access + create simple record rules (e.g., [('website_published', '=', True)]).

* Verify no hidden global rules are blocking the portal.



Hope it helps

Avatar
Buang
Penulis Jawaban Terbai

Hello, o followed this 4 steps and it still not working.
Record rules with domain_force = ('id', '!=', False)]

    <record id="rule_portal_product_template_final_recipient" model="ir.rule">

        <field name="name">Portal: Product template</field>

        <field name="model_id" ref="product.model_product_template"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('id', '!=', False)]</field>

    </record>

    <record id="rule_portal_product_product_final_recipient" model="ir.rule">

        <field name="name">Portal: Product product</field>

        <field name="model_id" ref="product.model_product_product"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('id', '!=', False)]</field>

    </record>

Double checked access rights 

access__product_product__group_user,access__product_product__group_user,product.model_product_product,base.group_user,1,1,1,1

access__product_product__group_portal,access__product_product__group_portal,product.model_product_product,base.group_portal,1,0,0,0

access__product_template__group_user,access__product_template__group_user,product.model_product_template,base.group_user,1,1,1,1

access__product_template__group_portal,access__product_template__group_portal,product.model_product_template,base.group_portal,1,0,0,0

access__sale_order__group_portal,access__sale_order__group_portal,model_sale_order,base.group_user,1,1,1,1

access__sale_order__group_user,access__sale_order__group_user,model_sale_order,base.group_portal,1,0,0,0

I checked all files that have 

<field name="groups" eval="[(4, ref('base.group_portal'))]"/>

but mostly it was from default addons, or records that do not  belong to product models

And also i restarted db and updated modules

 




Avatar
Buang
Post Terkait Replies Tampilan Aktivitas
0
Apr 22
2457
0
Nov 23
1124
3
Mei 25
3142
0
Des 23
2726
1
Sep 23
5671