refactor(fusion_portal): rename from fusion_authorizer_portal + modern photo cards on accessibility selector
Rename module fusion_authorizer_portal -> fusion_portal everywhere: manifest/assets, controllers, models, views, JS (odoo.define + asset URLs), migration MODULE constants; plus cross-module refs in fusion_schedule, fusion_repairs, fusion_quotations (depends + inherit_id) and the pdf_filler import in fusion_claims. Add rename_module.sql for the one-time in-place DB rename (ir_module_module, ir_model_data, ir_ui_view.key, ir_module_module_dependency) required on installed envs before -u fusion_portal. Document the rename gotcha as rule 16 in CLAUDE.md. Redesign the Accessibility Assessment selector: replace Font Awesome icon tiles with photo-banner cards using 7 optimized images (1000x750 PNG -> 800x600 JPEG, ~8MB -> 488KB), per-type colour accent bar + centered pill button, hover lift/zoom. Images ship as module static files so they deploy/sync with the module. Drop the regenerable graphify-out cache from the module. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
12
fusion_portal/security/ir.model.access.csv
Normal file
12
fusion_portal/security/ir.model.access.csv
Normal file
@@ -0,0 +1,12 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_fusion_authorizer_comment_user,fusion.authorizer.comment.user,model_fusion_authorizer_comment,base.group_user,1,1,1,1
|
||||
access_fusion_authorizer_comment_portal,fusion.authorizer.comment.portal,model_fusion_authorizer_comment,base.group_portal,1,1,1,0
|
||||
access_fusion_adp_document_user,fusion.adp.document.user,model_fusion_adp_document,base.group_user,1,1,1,1
|
||||
access_fusion_adp_document_portal,fusion.adp.document.portal,model_fusion_adp_document,base.group_portal,1,0,1,0
|
||||
access_fusion_assessment_user,fusion.assessment.user,model_fusion_assessment,base.group_user,1,1,1,1
|
||||
access_fusion_assessment_portal,fusion.assessment.portal,model_fusion_assessment,base.group_portal,1,1,1,0
|
||||
access_fusion_accessibility_assessment_user,fusion.accessibility.assessment.user,model_fusion_accessibility_assessment,base.group_user,1,1,1,1
|
||||
access_fusion_accessibility_assessment_portal,fusion.accessibility.assessment.portal,model_fusion_accessibility_assessment,base.group_portal,1,1,1,0
|
||||
access_fusion_pdf_template_user,fusion.pdf.template.user,model_fusion_pdf_template,base.group_user,1,1,1,1
|
||||
access_fusion_pdf_template_preview_user,fusion.pdf.template.preview.user,model_fusion_pdf_template_preview,base.group_user,1,1,1,1
|
||||
access_fusion_pdf_template_field_user,fusion.pdf.template.field.user,model_fusion_pdf_template_field,base.group_user,1,1,1,1
|
||||
|
140
fusion_portal/security/portal_security.xml
Normal file
140
fusion_portal/security/portal_security.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Portal Groups (auto-assigned from Contact form Portal Access tab) -->
|
||||
<record id="group_authorizer_portal" model="res.groups">
|
||||
<field name="name">Authorizer Portal User</field>
|
||||
<field name="privilege_id" eval="False"/>
|
||||
<field name="comment">Portal users who are Authorizers (OTs/Therapists)</field>
|
||||
</record>
|
||||
|
||||
<record id="group_sales_rep_portal" model="res.groups">
|
||||
<field name="name">Sales Rep Portal User</field>
|
||||
<field name="privilege_id" eval="False"/>
|
||||
<field name="comment">Portal users who are Sales Representatives</field>
|
||||
</record>
|
||||
|
||||
<record id="group_technician_portal" model="res.groups">
|
||||
<field name="name">Technician Portal User</field>
|
||||
<field name="privilege_id" eval="False"/>
|
||||
<field name="comment">Portal users who are Field Technicians for deliveries</field>
|
||||
</record>
|
||||
|
||||
<!-- Authorizer Comment Access Rules -->
|
||||
<record id="rule_comment_authorizer_own" model="ir.rule">
|
||||
<field name="name">Authorizer: Own Comments</field>
|
||||
<field name="model_id" ref="model_fusion_authorizer_comment"/>
|
||||
<field name="domain_force">[('author_id', '=', user.partner_id.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="rule_comment_view_on_order" model="ir.rule">
|
||||
<field name="name">Portal: View Comments on Assigned Orders</field>
|
||||
<field name="model_id" ref="model_fusion_authorizer_comment"/>
|
||||
<field name="domain_force">[
|
||||
'|',
|
||||
('sale_order_id.x_fc_authorizer_id', '=', user.partner_id.id),
|
||||
('sale_order_id.user_id', '=', user.id),
|
||||
('is_internal', '=', False)
|
||||
]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- ADP Document Access Rules -->
|
||||
<record id="rule_document_portal_read" model="ir.rule">
|
||||
<field name="name">Portal: Read Documents on Assigned Orders</field>
|
||||
<field name="model_id" ref="model_fusion_adp_document"/>
|
||||
<field name="domain_force">[
|
||||
'|',
|
||||
('sale_order_id.x_fc_authorizer_id', '=', user.partner_id.id),
|
||||
('sale_order_id.user_id', '=', user.id)
|
||||
]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="rule_document_authorizer_create" model="ir.rule">
|
||||
<field name="name">Authorizer: Create Documents on Assigned Orders</field>
|
||||
<field name="model_id" ref="model_fusion_adp_document"/>
|
||||
<field name="domain_force">[
|
||||
('sale_order_id.x_fc_authorizer_id', '=', user.partner_id.id),
|
||||
('document_type', '!=', 'submitted_final')
|
||||
]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="False"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- Assessment Access Rules -->
|
||||
<record id="rule_assessment_authorizer" model="ir.rule">
|
||||
<field name="name">Authorizer: Own Assessments</field>
|
||||
<field name="model_id" ref="model_fusion_assessment"/>
|
||||
<field name="domain_force">[('authorizer_id', '=', user.partner_id.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="rule_assessment_sales_rep" model="ir.rule">
|
||||
<field name="name">Sales Rep: Own Assessments</field>
|
||||
<field name="model_id" ref="model_fusion_assessment"/>
|
||||
<field name="domain_force">[('sales_rep_id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- Sale Order Access - Extend for Portal -->
|
||||
<record id="rule_sale_order_authorizer_portal" model="ir.rule">
|
||||
<field name="name">Authorizer Portal: Assigned Orders</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="domain_force">[('x_fc_authorizer_id', '=', user.partner_id.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- Technician Portal: Access orders assigned for delivery -->
|
||||
<record id="rule_sale_order_technician_portal" model="ir.rule">
|
||||
<field name="name">Technician Portal: Assigned Deliveries</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="domain_force">[('x_fc_delivery_technician_ids', 'in', [user.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- Sales Rep Portal: Access own orders for POD -->
|
||||
<record id="rule_sale_order_sales_rep_portal" model="ir.rule">
|
||||
<field name="name">Sales Rep Portal: Own Orders</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="domain_force">[('user_id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_portal'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user