19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:30:27 +01:00
parent d1963a3c3a
commit 2d3ee4855a
7430 changed files with 2687981 additions and 2965473 deletions

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="rating_rating_view_tree" model="ir.ui.view">
<field name="name">rating.rating.tree</field>
<field name="name">rating.rating.list</field>
<field name="model">rating.rating</field>
<field name="arch" type="xml">
<tree string="Ratings" create="false" edit="false" sample="1">
<list string="Ratings" create="false" edit="false" sample="1">
<field name="create_date"/>
<field name="rated_partner_id" optional="show"/>
<field name="partner_id" optional="show"/>
@ -12,7 +12,7 @@
<field name="res_name" optional="show"/>
<field name="feedback" optional="hide"/>
<field name="rating_text" decoration-danger="rating_text == 'ko'" decoration-warning="rating_text == 'ok'" decoration-success="rating_text == 'top'" class="fw-bold" widget="badge"/>
</tree>
</list>
</field>
</record>
@ -31,19 +31,22 @@
<field name="rated_partner_id" widget="many2one_avatar"/>
<field name="rating" invisible="1"/>
<field name="is_internal"/>
<field name="consumed" groups="base.group_no_one"/>
</group>
<group>
<field name="partner_id"/>
<div colspan="2" class="text-center" name="rating_image_container">
<field name="rating_image" widget='image'/>
<field name="rating_image" widget='image' options='{"img_class": "bg-transparent"}'/>
<div class="mt4">
<strong><field name="rating_text"/></strong>
</div>
</div>
<field name="create_date"/>
<field name="feedback" attrs="{'invisible': [('feedback','=',False)]}"/>
<field name="rated_on"/>
</group>
</group>
<group class="mw-100" invisible="not feedback">
<field name="feedback"/>
</group>
</sheet>
</form>
</field>
@ -66,66 +69,37 @@
</field>
</record>
<record id="rating_rating_view_form_complete" model="ir.ui.view">
<field name="name">rating.rating.view.form.complete</field>
<field name="model">rating.rating</field>
<field name="inherit_id" ref="rating.rating_rating_view_form"/>
<field name="priority">48</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='is_internal']" position="after">
<field name="consumed" groups="base.group_no_one"/>
</xpath>
</field>
</record>
<record id="rating_rating_view_kanban" model="ir.ui.view">
<field name="name">rating.rating.kanban</field>
<field name="model">rating.rating</field>
<field name="arch" type="xml">
<kanban create="false" sample="1">
<field name="rating"/>
<field name="res_name"/>
<field name="feedback"/>
<field name="partner_id"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click d-flex align-items-center justify-content-center">
<div class="row oe_kanban_details">
<div class="col-4 my-auto">
<field name="rating_image" widget="image" class="bg-view" />
</div>
<div class="col-8 ps-1">
<strong>
<field name="rated_partner_name"/>
</strong>
<ul>
<li t-if="record.partner_id.value">
<span class="o_text_overflow">
by
<span t-att-title="record.partner_id.value">
<field name="partner_id" />
</span>
</span>
</li>
<li>
<span class="o_text_overflow">
for
<a type="object" name="action_open_rated_object" t-att-title="record.res_name.raw_value">
<field name="res_name" />
</a>
</span>
</li>
<li>
on <field name="create_date" />
</li>
<li t-if="record.feedback.raw_value" class="o_text_overflow" t-att-title="record.feedback.raw_value">
<field name="feedback"/>
</li>
</ul>
<t t-name="card" class="row g-0">
<aside class="col-4 my-auto align-self-center">
<field name="rating_image" widget="image" options='{"img_class": "bg-transparent"}' class="bg-view ms-3" />
</aside>
<main class="col ps-2">
<field name="rated_partner_name" class="fw-bolder"/>
<div t-if="record.partner_id.value" class="text-truncate">
by
<span t-att-title="record.partner_id.value">
<field name="partner_id" />
</span>
</div>
<span class="text-truncate">
for
<a type="object" name="action_open_rated_object" t-att-title="record.res_name.raw_value">
<field name="res_name" />
</a>
</span>
<div>
on <field name="rated_on" />
</div>
</div>
<span class="text-truncate" t-att-title="record.feedback.raw_value">
<field name="feedback"/>
</span>
</main>
</t>
</templates>
</kanban>
@ -139,53 +113,38 @@
<field name="arch" type="xml">
<kanban create="false" class="o_rating_rating_kanban">
<field name="rating"/>
<field name="res_name"/>
<field name="feedback"/>
<field name="partner_id"/>
<templates>
<t t-name="kanban-box">
<t t-name="card" class="row g-0">
<t t-set="val_stars" t-value="Math.round(record.rating.raw_value * 10) / 10"/>
<t t-set="val_integer" t-value="Math.floor(val_stars)"/>
<t t-set="val_decimal" t-value="val_stars - val_integer"/>
<t t-set="empty_star" t-value="5 - (val_integer + Math.ceil(val_decimal))"/>
<div class="oe_kanban_card oe_kanban_global_click">
<div class="d-flex flex-row">
<div class="o_rating_kanban_left me-3">
<h1 class="o_rating_value text-center text-primary" t-esc="val_stars"/>
<i t-foreach="[...Array(val_integer).keys()]" t-as="num" t-key="num"
class="fa fa-star"
aria-label="A star"
role="img"/>
<i t-if="val_decimal"
class="fa fa-star-half-o"
aria-label="Half a star"
role="img"/>
<i t-foreach="[...Array(empty_star).keys()]" t-as="num" t-key="num"
class="fa fa-star text-black-25"
aria-label="A star"
role="img"/>
</div>
<div>
<div class="o_kanban_card_header">
<div class="o_kanban_card_header_title">
<span class="fw-bold"><field name="partner_id"/></span>
</div>
</div>
<div class="o_kanban_card_content mt0 d-flex flex-column">
<span>
<i class="fa fa-folder me-2" aria-label="Open folder"></i>
<a type="object" name="action_open_rated_object" t-att-title="record.res_name.raw_value">
<field name="res_name" />
</a>
</span>
<span><i class="fa fa-clock-o me-2" aria-label="Create date"/> <field name="create_date" /></span>
<div class="d-flex mt-2">
<span t-esc="record.feedback.raw_value"/>
</div>
</div>
</div>
</div>
</div>
<aside class="col-3 me-2">
<div class="display-3 fw-bold text-center text-primary mb-2" t-esc="val_stars"/>
<i t-foreach="[...Array(val_integer).keys()]" t-as="num" t-key="num"
class="fa fa-star"
aria-label="A star"
role="img"/>
<i t-if="val_decimal"
class="fa fa-star-half-o"
aria-label="Half a star"
role="img"/>
<i t-foreach="[...Array(empty_star).keys()]" t-as="num" t-key="num"
class="fa fa-star text-black-25"
aria-label="A star"
role="img"/>
</aside>
<main class="col">
<field name="partner_id" class="fw-bold fs-5"/>
<div class="mt0">
<i class="fa fa-folder me-2" aria-label="Open folder"></i>
<a type="object" name="action_open_rated_object" t-att-title="record.res_name.raw_value">
<field name="res_name" />
</a>
<div><i class="fa fa-clock-o me-2" aria-label="Create date"/> <field name="rated_on" /></div>
<field name="feedback" class="mt-2"/>
</div>
</main>
</t>
</templates>
</kanban>
@ -198,8 +157,8 @@
<field name="arch" type="xml">
<pivot string="Ratings" display_quantity="1" sample="1">
<field name="rated_partner_id" type="row"/>
<field name="create_date" type="col"/>
<field name="rating" type="measure" string="Rating Value (/5)"/>
<field name="rated_on" type="col"/>
<field name="rating" type="measure" string="Rating (/5)"/>
<field name="parent_res_id" invisible="1"/>
<field name="res_id" invisible="1"/>
</pivot>
@ -211,8 +170,8 @@
<field name="model">rating.rating</field>
<field name="arch" type="xml">
<graph string="Ratings" sample="1">
<field name="create_date"/>
<field name="rating" type="measure" string="Rating Value (/5)"/>
<field name="rated_on"/>
<field name="rating" type="measure" string="Rating (/5)"/>
<field name="parent_res_id" invisible="1"/>
<field name="res_id" invisible="1"/>
</graph>
@ -232,21 +191,21 @@
<field name="parent_res_name" filter_domain="[('parent_res_name','ilike',self)]"/>
<filter string="My Ratings" name="my_ratings" domain="[('rated_partner_id.user_ids', 'in', [uid])]"/>
<separator/>
<filter string="Satisfied" name="rating_happy" domain="[('rating_text', '=', 'top')]"/>
<filter string="Okay" name="rating_okay" domain="[('rating_text', '=', 'ok')]"/>
<filter string="Dissatisfied" name="rating_unhappy" domain="[('rating_text', '=', 'ko')]"/>
<filter string="Happy" name="rating_happy" domain="[('rating_text', '=', 'top')]"/>
<filter string="Neutral" name="rating_okay" domain="[('rating_text', '=', 'ok')]"/>
<filter string="Unhappy" name="rating_unhappy" domain="[('rating_text', '=', 'ko')]"/>
<separator/>
<filter string="Today" name="today" domain="[('create_date', '&gt;', (context_today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'))]"/>
<filter string="Last 7 days" name="last_7days" domain="[('create_date','&gt;', (context_today() - datetime.timedelta(days=7)).strftime('%Y-%m-%d'))]"/>
<filter string="Last 30 days" name="last_month" domain="[('create_date','&gt;', (context_today() - datetime.timedelta(days=30)).strftime('%Y-%m-%d'))]"/>
<separator/>
<filter name="filter_create_date" date="create_date"/>
<group expand="0" string="Group By">
<filter name="filter_rated_on" string="Rated On" date="rated_on">
<filter name="rated_on_last_7_days" string="Last 7 Days" domain="[('rated_on', '&gt;', 'today -7d +1d')]"/>
<filter name="rated_on_last_30_days" string="Last 30 Days" domain="[('rated_on', '&gt;', 'today -30d +1d')]"/>
<filter name="rated_on_last_365_days" string="Last 365 Days" domain="[('rated_on', '&gt;', 'today -365d +1d')]"/>
</filter>
<group>
<filter string="Rated Operator" name="responsible" context="{'group_by':'rated_partner_id'}"/>
<filter string="Customer" name="customer" context="{'group_by':'partner_id'}"/>
<filter string="Rating" name="rating_text" context="{'group_by':'rating_text'}"/>
<filter string="Resource" name="resource" context="{'group_by':'res_name'}"/>
<filter string="Date" name="month" context="{'group_by':'create_date:month'}"/>
<filter string="Submitted on" name="month" context="{'group_by': 'rated_on:month'}"/>
</group>
</search>
</field>
@ -255,7 +214,7 @@
<record id="rating_rating_action" model="ir.actions.act_window">
<field name="name">Ratings</field>
<field name="res_model">rating.rating</field>
<field name="view_mode">kanban,tree,graph,pivot,form</field>
<field name="view_mode">kanban,list,graph,pivot,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
No rating yet
@ -274,7 +233,7 @@
<field name="act_window_id" ref="rating_rating_action"/>
<field name="sequence">5</field>
<field name="view_mode">form</field>
<field name="view_id" ref="rating_rating_view_form_complete"/>
<field name="view_id" ref="rating_rating_view_form"/>
</record>
<!-- Add menu entry in Technical/Discuss -->

View file

@ -1,25 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- External page : thanks message -->
<template id="rating_external_page_view" name="Rating Page Done">
<template id="rating_external_page_view" name="Thanks for your Feedback">
<t t-call="web.frontend_layout">
<div class="container pt-5">
<div class="oe_structure" id="oe_structure_rating_header_thanks_you"/>
<div class="text-center mt-5 pt-5">
<h3 class="d-inline">Thank you, we appreciate your feedback!</h3>
<div class="o_rating_page_thank_you d-flex flex-column justify-content-center">
<div class="container py-5">
<div class="oe_structure" id="oe_structure_rating_header_thanks_you"/>
<h3 class="text-center mt-4 pb-2">Thank you for your feedback!</h3>
<a t-att-href="web_base_url" class="d-block text-decoration-none text-center mb-4">
<i class="fa fa-arrow-left me-1"/> Back to the Homepage
</a>
<div class="oe_structure" id="oe_structure_rating_footer_thanks_you"/>
</div>
<div class="text-center">
<a role="button" t-att-href="web_base_url" class="btn btn-primary my-5">Go back to the Homepage</a>
</div>
<div class="oe_structure" id="oe_structure_rating_footer_thanks_you"/>
</div>
</t>
</template>
<!-- External page: Invalid partner rating -->
<template id="rating_external_page_invalid_partner" name="Not allows to rating">
<t t-call="web.frontend_layout">
<section class="mt128">
<div class="container">
<div class="row" >
<div class="col-lg-4">
<img class="img img-fluid mx-auto" src="/rating/static/src/img/503.svg" alt=""/>
</div>
<div class="col-lg-8 text-lg-start">
<h1>You cannot rate this <t t-out="model_name"/></h1>
<p>
Only the customer of "<t t-out="name"/>" or someone from the same company can give it a rating.
</p>
</div>
<hr class="my-5 opacity-100"/>
<div class="mb128 col-lg-12">
<ul class="list-inline text-center">
<li>
<a t-att-href="web_base_url" class="btn btn-primary">Home</a>
</li>
</ul>
</div>
</div>
</div>
</section>
</t>
</template>
<!-- External page: rate and submit feedback -->
<template id="rating_external_page_submit" name="Rate our Services">
<t t-call="web.frontend_layout">
<div class="container mb-5 mt-4 o_rating_page_submit">
<div class="oe_structure" id="oe_structure_rate_submit_header"/>
<div class="row text-center justify-content-center">
<h1 class="col-12 mt-5">Thank you for rating our services!</h1>
<form class="col-md-6" t-attf-action="/rate/#{token}/submit_feedback" method="post">
@ -42,7 +72,7 @@
</t>
</div>
<p class="mt-5">
Feel free to write a feedback on your experience:
Feel free to share feedback on your experience:
</p>
<input type="hidden" name="csrf_token"
t-att-value="request.csrf_token()"/>
@ -51,6 +81,7 @@
<button type="submit" class="btn btn-primary mt-4"
style="margin-top:8px;">Send Feedback</button>
</form>
<div class="oe_structure" id="oe_structure_rate_submit_footer"/>
</div>
</div>
</t>