264 lines
13 KiB
XML
264 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 <= 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"
|
|
widget="priority"
|
|
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', '>=', 4)]"/>
|
|
<filter name="filter_low" string="Low (≤ 2 Stars)"
|
|
domain="[('rating', '<=', 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', '>=', '=1d')]"/>
|
|
<filter name="filter_last_30" string="Last 30 Days"
|
|
domain="[('publish_date', '>=', '-30d')]"/>
|
|
<filter name="filter_last_90" string="Last 90 Days"
|
|
domain="[('publish_date', '>=', '-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>
|