- Rename the 'Use Rating on Project' feature into 'Customer Ratings' - Rename the 'Set Email Template to Stages' link to 'Set a Rating Email Template on Stages' - Add an optional list view for the Stages menu - display warning if the rating_template_id field is set and if one of the selected project_ids doesn't have the rating_status field set to true - Project form view revamp - rename the '% on tasks' stat button into 'Customer Satisfaction' - Remove the 'no option' for the rating frequency field because it is required - project form : Add a 'Go to Website' stat button - Project dashboard: remove the 'Customer Ratings' menu item in more - Ratings page: the 'Last 30 days' filter include ratings from today - remove the Appointment / Helpdesk Customer Satisfaction / Live Support menu items TASK ID : 1251
213 lines
14 KiB
XML
213 lines
14 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
|
|
<!-- Page : List of project -->
|
|
<template id="rating_index" name="Project Rating List">
|
|
<t t-call="portal.frontend_layout">
|
|
<t t-set="additional_title">Project Satisfaction</t>
|
|
<div id="wrap" class="row mt4">
|
|
<div class="oe_structure" id="oe_structure_project_rating_index_1"/>
|
|
<div class="container o_portal_project_rating">
|
|
<h3>Projects</h3>
|
|
<div class="oe_structure" id="oe_structure_project_rating_index_2"/>
|
|
<div class="row">
|
|
<t t-if="not projects">
|
|
<div class="mt64 text-center">
|
|
No project rating published for now.
|
|
</div>
|
|
</t>
|
|
<t t-foreach="projects" t-as="project">
|
|
<div t-if="project.rating_percentage_satisfaction != -1" class="col-md-6 col-4 col-lg-4 col-xl-4">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="caption">
|
|
<span class="badge badge-secondary float-right"><t t-esc="project.privacy_visibility"/></span>
|
|
<h4><t t-esc="project.name"/></h4>
|
|
<p t-if="project.date" class="text-muted">
|
|
<i class="fa fa-calendar"/> End date : <t t-esc="project.date"/>
|
|
</p>
|
|
<p t-if="project.alias_name and project.alias_domain" class="text-muted">
|
|
<i class="fa fa-envelope"/> Email : <t t-esc="project.alias_name"/>@<t t-esc="project.alias_domain"/>
|
|
</p>
|
|
<div class="row">
|
|
<div class="col-lg-6 text-center">
|
|
<h2><t t-esc="len(project.task_ids)"/></h2>
|
|
<p><t t-esc="project.label_tasks"/></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="caption">
|
|
<p>
|
|
<a role="button" t-att-href="'/project/rating/%s' % project.id" class="btn btn-primary btn-lg btn-block">
|
|
<i class="fa fa-arrow-circle-right "/> See the feedbacks
|
|
</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
<div class="oe_structure" id="oe_structure_project_rating_index_3"/>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<!-- Page : Project Rating Page (and widgets) -->
|
|
<template id="portal_project_rating_progressbar">
|
|
<div class="progress o_rating_progress">
|
|
<t t-set="percent_rating_5" t-value="int(round((stats['rating_5'] / float(stats['total'])) * 100)) if stats['total'] else 0.0"/>
|
|
<div class="progress-bar bg-success" t-attf-style="width: #{percent_rating_5}%;" title="Happy">
|
|
<t t-esc="percent_rating_5"/>%
|
|
</div>
|
|
<t t-set="percent_rating_3" t-value="int(round((stats['rating_3'] / float(stats['total'])) * 100)) if stats['total'] else 0.0"/>
|
|
<div class="progress-bar bg-warning" t-attf-style="width: #{percent_rating_3}%;" title="Average">
|
|
<t t-esc="percent_rating_3"/>%
|
|
</div>
|
|
<t t-set="percent_rating_1" t-value="int(round((stats['rating_1'] / float(stats['total'])) * 100)) if stats['total'] else 0.0"/>
|
|
<div class="progress-bar bg-danger" t-attf-style="width: #{percent_rating_1}%;" title="Bad">
|
|
<t t-esc="percent_rating_1"/>%
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<template id="portal_project_rating_partner_stat">
|
|
<t t-foreach="partner_stats.values()" t-as="partner_stat">
|
|
<div class="row mt8" t-if="partner_stat['total']" title="Top 5 partner ratings of last 15 days.">
|
|
<div class="col-md-1">
|
|
<img t-if="partner_stat['rated_partner'].image_1024" class="o_top_partner_image" t-att-src="image_data_uri(partner_stat['rated_partner'].image_1024)" alt="Rated partner"/>
|
|
<img t-if="not partner_stat['rated_partner'].image_1024" class="o_top_partner_image" src='/web/static/src/img/placeholder.png' alt="Placeholder"/>
|
|
</div>
|
|
<div class="col-md-4 o_smiley_no_padding_right">
|
|
<span class="ml8" t-esc="partner_stat['rated_partner'].name"/>
|
|
</div>
|
|
<div class="col-md-4 o_smiley_no_padding_right">
|
|
<div class="col-md-4 o_smiley_no_padding_right o_smiley_no_padding_left">
|
|
<span t-if="partner_stat['rating_5']">
|
|
<img title="happy" alt="Happy face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_5.png'/>
|
|
<span class="o_rating_count" t-esc="partner_stat['rating_5']"/>
|
|
</span>
|
|
<span t-if="not partner_stat['rating_5']">
|
|
<img title="happy" alt="Happy face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_5.png'/>
|
|
<span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_5']"/>
|
|
</span>
|
|
</div>
|
|
<div class="col-md-4 o_smiley_no_padding_right o_smiley_no_padding_left">
|
|
<span t-if="partner_stat['rating_3']">
|
|
<img title="average" alt="Neutral face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_3.png'/>
|
|
<span class="o_rating_count" t-esc="partner_stat['rating_3']"/>
|
|
</span>
|
|
<span t-if="not partner_stat['rating_3']">
|
|
<img title="average" alt="Neutral face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_3.png'/>
|
|
<span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_3']"/>
|
|
</span>
|
|
</div>
|
|
<div class="col-md-4 o_smiley_no_padding_right o_smiley_no_padding_left">
|
|
<span t-if="partner_stat['rating_1']">
|
|
<img title="bad" alt="Sad face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_1.png'/>
|
|
<span class="o_rating_count" t-esc="partner_stat['rating_1']"/>
|
|
</span>
|
|
<span t-if="not partner_stat['rating_1']">
|
|
<img title="bad" alt="Sad face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_1.png'/>
|
|
<span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_1']"/>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 o_smiley_no_padding_left">
|
|
<strong class="float-right"><t t-esc="int(round(partner_stat['percentage_happy']))"/>%</strong>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
<template id="portal_project_rating_popover">
|
|
<div t-attf-id="rating_#{rating.id}" class="container d-none">
|
|
<div class="row">
|
|
<div class="col-lg-4">
|
|
<img t-if="rating.partner_id.image_1024" class="img-fluid" t-att-src="image_data_uri(rating.partner_id.image_1024)" alt="Rated partner"/>
|
|
<img t-if="not rating.partner_id.image_1024" class="img-fluid" src='/web/static/src/img/placeholder.png' alt="Placeholder"/>
|
|
</div>
|
|
<div class="col-lg-8">
|
|
<div class="mt4">
|
|
<strong><t t-esc="rating.rated_partner_id.name"/></strong> - <span class="rating_timeduration"><t t-esc="rating.create_date"/></span>
|
|
</div>
|
|
<strong>Rated by: </strong><t t-esc="rating.partner_id.name" />
|
|
</div>
|
|
</div>
|
|
<div class="row o_top_partner_feedback" t-if="rating.feedback">
|
|
<div class="col-lg-12">
|
|
<t t-esc="rating.feedback" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<template id="rating_project_rating_page" name="Project Rating Page">
|
|
<t t-call="portal.frontend_layout">
|
|
<div id="wrap" class="row mt4">
|
|
<div class="oe_structure" id="oe_structure_project_rating_page_1"/>
|
|
<div class="container o_project o_portal_project_rating">
|
|
<br/>
|
|
<h2 t-esc="project.name"/>
|
|
<br/>
|
|
<div class="row mb32">
|
|
<div class="col-lg-12">
|
|
<div class="o_page_header">
|
|
<div class="justify-content-end" groups="project.group_project_manager">
|
|
<t t-call="website.publish_management">
|
|
<t t-set="object" t-value="project"/>
|
|
<t t-set="publish_edit" t-value="True"/>
|
|
</t>
|
|
</div>
|
|
<h3>Customer Ratings</h3>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-lg-7">
|
|
<t t-foreach="ratings" t-as="rating">
|
|
<img t-attf-src='/rating/static/src/img/#{rating._get_rating_image_filename()}'
|
|
class="mt4 o_rating_image"
|
|
t-att-alt="rating.res_name"
|
|
t-att-data-id="rating.id"
|
|
t-att-data-rating-date="rating.write_date"/>
|
|
<t t-call="website_project.portal_project_rating_popover"/>
|
|
</t>
|
|
</div>
|
|
<div class="col-lg-5 o_vertical_separator">
|
|
<div t-if="statistics['period_statistics']['days_06']">
|
|
<h5>Last 7 days</h5>
|
|
<t t-call="website_project.portal_project_rating_progressbar">
|
|
<t t-set="stats" t-value="statistics['period_statistics']['days_06']"/>
|
|
</t>
|
|
</div>
|
|
<div t-if="statistics['period_statistics']['days_30']">
|
|
<h5>Last 30 days</h5>
|
|
<t t-call="website_project.portal_project_rating_progressbar">
|
|
<t t-set="stats" t-value="statistics['period_statistics']['days_30']"/>
|
|
</t>
|
|
</div>
|
|
<div t-if="statistics['period_statistics']['days_90']">
|
|
<h5>Last 3 months</h5>
|
|
<t t-call="website_project.portal_project_rating_progressbar">
|
|
<t t-set="stats" t-value="statistics['period_statistics']['days_90']"/>
|
|
</t>
|
|
</div>
|
|
<div>
|
|
<t t-call="website_project.portal_project_rating_partner_stat">
|
|
<t t-set="partner_stats" t-value="statistics['partner_statistics']"/>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="oe_structure" id="oe_structure_project_rating_page_2"/>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
|
|
</data>
|
|
</odoo>
|