google_map_review/views/google_map_review_views.xml

263 lines
13 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- ====================== LIST VIEW ====================== -->
<record id="view_google_map_review_list" model="ir.ui.view">
<field name="name">google.map.review.list</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<list string="Google Reviews" default_order="publish_date desc"
decoration-success="rating == 5"
decoration-info="rating == 4"
decoration-warning="rating == 3"
decoration-danger="rating &lt;= 2">
<field name="publish_date" string="Date" optional="show"/>
<field name="company_id" string="Branch" optional="show"/>
<field name="author_name" string="Reviewer" optional="show"/>
<field name="rating_display" string="Rating" optional="show"/>
<field name="rating" string="Stars (num)" optional="hide"/>
<field name="review_text" string="Review" optional="show"/>
<field name="language" string="Language" optional="hide"/>
<field name="reply_text" string="Owner Reply" optional="hide"/>
</list>
</field>
</record>
<!-- ====================== FORM VIEW ====================== -->
<record id="view_google_map_review_form" model="ir.ui.view">
<field name="name">google.map.review.form</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<form string="Google Review">
<sheet>
<div class="oe_title">
<h1>
<field name="rating_display" readonly="1"
style="font-size:2rem; color:#f4c430;"/>
</h1>
</div>
<group>
<group string="Review Details">
<field name="company_id"/>
<field name="author_name"/>
<field name="publish_date"/>
<field name="language"/>
</group>
<group string="Rating">
<field name="rating"
readonly="1"/>
<field name="review_id" string="Google Review ID"/>
</group>
</group>
<notebook>
<page string="Review Text" name="review_text_page">
<field name="review_text"
readonly="1"
style="min-height:120px;"/>
</page>
<page string="Owner Reply" name="reply_page"
invisible="not reply_text">
<field name="reply_text"
readonly="1"
style="min-height:80px;"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- ====================== KANBAN VIEW ====================== -->
<record id="view_google_map_review_kanban" model="ir.ui.view">
<field name="name">google.map.review.kanban</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<kanban default_group_by="company_id"
class="o_kanban_small_column"
quick_create="false">
<field name="company_id"/>
<field name="author_name"/>
<field name="rating"/>
<field name="rating_display"/>
<field name="review_text"/>
<field name="publish_date"/>
<field name="reply_text"/>
<templates>
<t t-name="card">
<div t-attf-class="oe_kanban_card oe_kanban_global_click
#{record.rating.raw_value >= 4 ? 'border-success' :
record.rating.raw_value == 3 ? 'border-warning' :
'border-danger'}">
<div class="o_kanban_record_top mb4">
<div class="o_kanban_record_headings">
<strong class="o_kanban_record_title">
<field name="author_name"/>
</strong>
<span class="o_kanban_record_subtitle text-muted">
<field name="publish_date"
widget="date"/>
</span>
</div>
<span style="font-size:1.1rem; color:#f4c430;">
<field name="rating_display"/>
</span>
</div>
<div class="o_kanban_record_body">
<p class="text-muted" style="font-size:0.85rem;
max-height:80px;
overflow:hidden;">
<field name="review_text"/>
</p>
</div>
<div t-if="record.reply_text.raw_value"
class="o_kanban_record_bottom mt4">
<small class="text-info">
<i class="fa fa-reply"/> Owner replied
</small>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ====================== SEARCH VIEW ====================== -->
<record id="view_google_map_review_search" model="ir.ui.view">
<field name="name">google.map.review.search</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<search string="Search Google Reviews">
<field name="author_name" string="Reviewer"/>
<field name="company_id" string="Branch"/>
<field name="review_text" string="Review Text"/>
<filter name="filter_5_stars" string="5 Stars (★★★★★)"
domain="[('rating', '=', 5)]"/>
<filter name="filter_4_stars" string="4 Stars"
domain="[('rating', '=', 4)]"/>
<filter name="filter_high" string="High (≥ 4 Stars)"
domain="[('rating', '&gt;=', 4)]"/>
<filter name="filter_low" string="Low (≤ 2 Stars)"
domain="[('rating', '&lt;=', 2)]"/>
<separator/>
<filter name="filter_has_reply" string="Has Owner Reply"
domain="[('reply_text', '!=', False)]"/>
<filter name="filter_no_reply" string="No Owner Reply"
domain="[('reply_text', '=', False)]"/>
<separator/>
<filter name="filter_this_month" string="This Month"
domain="[('publish_date', '&gt;=', '=1d')]"/>
<filter name="filter_last_30" string="Last 30 Days"
domain="[('publish_date', '&gt;=', '-30d')]"/>
<filter name="filter_last_90" string="Last 90 Days"
domain="[('publish_date', '&gt;=', '-90d')]"/>
<group>
<filter name="group_by_company" string="Branch"
context="{'group_by': 'company_id'}"/>
<filter name="group_by_rating" string="Rating"
context="{'group_by': 'rating'}"/>
<filter name="group_by_month" string="Month"
context="{'group_by': 'publish_date:month'}"/>
<filter name="group_by_language" string="Language"
context="{'group_by': 'language'}"/>
</group>
</search>
</field>
</record>
<!-- ====================== PIVOT VIEW ====================== -->
<record id="view_google_map_review_pivot" model="ir.ui.view">
<field name="name">google.map.review.pivot</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<pivot string="Reviews Analysis" sample="1">
<field name="company_id" type="row"/>
<field name="publish_date" interval="month" type="col"/>
<field name="rating" type="measure"/>
</pivot>
</field>
</record>
<!-- ====================== GRAPH VIEW ====================== -->
<record id="view_google_map_review_graph" model="ir.ui.view">
<field name="name">google.map.review.graph</field>
<field name="model">google.map.review</field>
<field name="arch" type="xml">
<graph string="Reviews Analysis" type="bar" sample="1">
<field name="company_id" type="row"/>
<field name="rating" type="measure"/>
</graph>
</field>
</record>
<!-- ====================== ACTIONS ====================== -->
<record id="action_google_map_review" model="ir.actions.act_window">
<field name="name">Google Reviews</field>
<field name="res_model">google.map.review</field>
<field name="view_mode">list,kanban,pivot,graph,form</field>
<field name="search_view_id" ref="view_google_map_review_search"/>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Google reviews yet!
</p>
<p>
Set a <b>Google Business Place ID</b> on each company branch,
then trigger the scheduled action or wait for the hourly cron.
</p>
</field>
</record>
<!-- ====================== MENUS ====================== -->
<!-- Top-level app menu -->
<menuitem id="menu_google_review_root"
name="Google Reviews"
web_icon="google_map_review,static/description/icon.svg"
groups="google_map_review.group_google_review_user"
sequence="100"/>
<!-- Sub-menu: Reviews list -->
<menuitem id="menu_google_review_list"
name="All Reviews"
parent="menu_google_review_root"
action="action_google_map_review"
sequence="10"/>
<!-- Sub-menu: Reporting (kanban grouped by company) -->
<record id="action_google_map_review_report" model="ir.actions.act_window">
<field name="name">Reviews by Branch</field>
<field name="res_model">google.map.review</field>
<field name="view_mode">kanban,list,form</field>
<field name="search_view_id" ref="view_google_map_review_search"/>
<field name="context">{'search_default_group_by_company': 1}</field>
</record>
<menuitem id="menu_google_review_report"
name="By Branch (Kanban)"
parent="menu_google_review_root"
action="action_google_map_review_report"
sequence="20"/>
<!-- Sub-menu: Reporting (pivot analysis) -->
<record id="action_google_map_review_pivot_report" model="ir.actions.act_window">
<field name="name">Reviews Analysis</field>
<field name="res_model">google.map.review</field>
<field name="view_mode">pivot,graph,list,form</field>
<field name="search_view_id" ref="view_google_map_review_search"/>
<field name="context">{}</field>
</record>
<menuitem id="menu_google_review_pivot_report"
name="Reviews Analysis"
parent="menu_google_review_root"
action="action_google_map_review_pivot_report"
sequence="30"/>
</data>
</odoo>