Files
odoo_source/addons/project/views/project_portal_templates.xml
T
jdoutreloux b8d71b799d [FIX] project : fix issue with alias and display issue in portal
When the alias had been set, if the user wanted to disable it
he had to erase the email first. Otherwise unchecking the check box
didn't work.

Task-2299286

closes odoo/odoo#58634

X-original-commit: 45cd13e14fef0bab6921a1fff79335df9015cbf0
Related: odoo/enterprise#13613
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
2020-09-28 10:57:13 +00:00

274 lines
16 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="portal_layout" name="Portal layout: project menu entry" inherit_id="portal.portal_breadcrumbs" priority="40">
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
<li t-if="page_name == 'project' or project" class="col-lg-2" t-attf-class="breadcrumb-item #{'active ' if not project else ''}">
<a t-if="project" t-attf-href="/my/projects?{{ keep_query() }}">Projects</a>
<t t-else="">Projects</t>
</li>
<li t-if="project" class="breadcrumb-item active text-truncate col-8 col-lg-10">
<t t-esc="project.name"/>
</li>
<li t-if="page_name == 'task' or task" t-attf-class="breadcrumb-item #{'active ' if not task else ''}">
<a t-if="task" t-attf-href="/my/tasks?{{ keep_query() }}">Tasks</a>
<t t-else="">Tasks</t>
</li>
<li t-if="task" class="breadcrumb-item active col-8 col-lg-10 text-truncate">
<span t-field="task.name"/>
</li>
</xpath>
</template>
<template id="portal_my_home" name="Show Projects / Tasks" customize_show="True" inherit_id="portal.portal_my_home" priority="40">
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="title">Projects</t>
<t t-set="url" t-value="'/my/projects'"/>
<t t-set="placeholder_count" t-value="'project_count'"/>
</t>
<t t-call="portal.portal_docs_entry">
<t t-set="title">Tasks</t>
<t t-set="url" t-value="'/my/tasks'"/>
<t t-set="placeholder_count" t-value="'task_count'"/>
</t>
</xpath>
</template>
<template id="portal_my_projects" name="My Projects">
<t t-call="portal.portal_layout">
<t t-set="breadcrumbs_searchbar" t-value="True"/>
<t t-call="portal.portal_searchbar">
<t t-set="title">Projects</t>
</t>
<t t-if="not projects">
<div class="alert alert-warning mt8" role="alert">
There are no projects.
</div>
</t>
<t t-if="projects" t-call="portal.portal_table">
<tbody>
<tr t-foreach="projects" t-as="project">
<td>
<a t-attf-href="/my/project/#{project.id}?{{ keep_query() }}"><span t-field="project.name"/></a>
</td>
<td class="text-right">
<a t-attf-href="/my/tasks?{{keep_query(filterby=project.id)}}">
<t t-esc="project.task_count" />
<t t-esc="project.label_tasks" />
</a>
</td>
</tr>
</tbody>
</t>
</t>
</template>
<template id="portal_my_project" name="My Project">
<t t-call="portal.portal_layout">
<t t-set="o_portal_fullwidth_alert" groups="project.group_project_user">
<t t-call="portal.portal_back_in_edit_mode">
<t t-set="backend_url" t-value="'/web#model=project.project&amp;id=%s&amp;view_type=form' % (project.id)"/>
</t>
</t>
<t t-call="portal.portal_record_layout">
<t t-set="card_header">
<h5 class="mb-0">
<span t-field="project.name" class="text-truncate"/>
<span class="float-right">
<a role="button" t-attf-href="/my/tasks?filterby=#{project.id}" class="btn btn-sm btn-secondary">
<span class="fa fa-tasks" role="img" aria-label="Tasks" title="Tasks"/>
<span t-esc="project.task_count" />
<span t-field="project.label_tasks" />
</a>
</span>
</h5>
</t>
<t t-set="card_body">
<div class="row">
<div t-if="project.partner_id" class="col-12 col-md-6 mb-2 mb-md-0">
<h6>Customer</h6>
<div class="row">
<div class="col flex-grow-0 pr-3">
<img t-if="project.partner_id.image_1024" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(project.partner_id.image_1024)" alt="Contact"/>
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact"/>
</div>
<div class="col pl-sm-0">
<address t-field="project.partner_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'/>
</div>
</div>
</div>
<div t-if="project.user_id" class="col-12 col-md-6">
<h6>Project Manager</h6>
<div class="row">
<div class="col flex-grow-0 pr-3">
<img t-if="project.user_id.image_1024" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(project.user_id.image_1024)" alt="Contact"/>
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact"/>
</div>
<div class="col pl-sm-0">
<address t-field="project.user_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'/>
</div>
</div>
</div>
</div>
</t>
</t>
</t>
</template>
<template id="portal_my_tasks" name="My Tasks">
<t t-call="portal.portal_layout">
<t t-set="breadcrumbs_searchbar" t-value="True"/>
<t t-call="portal.portal_searchbar">
<t t-set="title">Tasks</t>
</t>
<t t-if="not grouped_tasks">
<div class="alert alert-warning mt8" role="alert">
There are no tasks.
</div>
</t>
<t t-if="grouped_tasks">
<t t-call="portal.portal_table">
<t t-foreach="grouped_tasks" t-as="tasks">
<thead>
<tr t-attf-class="{{'thead-light' if not groupby == 'none' else ''}}">
<th class="text-left">Ref</th>
<th t-if="groupby == 'none'">Name</th>
<th t-if="groupby == 'project'">
<em class="font-weight-normal text-muted"><span t-field="tasks[0].sudo().project_id.label_tasks"/> for project:</em>
<span t-field="tasks[0].sudo().project_id.name"/></th>
<th t-if="groupby == 'stage'">
<em class="font-weight-normal text-muted"><span t-field="tasks[0].sudo().project_id.label_tasks"/> in stage:</em>
<span class="text-truncate" t-field="tasks[0].sudo().stage_id.name"/></th>
<th t-if="groupby != 'project'" class="text-center">Project</th>
<th t-if="groupby != 'stage'" class="text-center">Stage</th>
</tr>
</thead>
<tbody>
<t t-foreach="tasks" t-as="task">
<tr>
<td class="text-left">
#<span t-esc="task.id"/>
</td>
<td>
<a t-attf-href="/my/task/#{task.id}?{{ keep_query() }}"><span t-field="task.name"/></a>
</td>
<td t-if="groupby != 'project'" class="text-center">
<span class="badge badge-pill badge-info" title="Current project of the task" t-esc="task.project_id.name" />
</td>
<td t-if="groupby != 'stage'" class="text-center">
<span class="badge badge-pill badge-info" title="Current stage of the task" t-esc="task.stage_id.name" />
</td>
</tr>
</t>
</tbody>
</t>
</t>
</t>
</t>
</template>
<template id="portal_my_task" name="My Task">
<t t-call="portal.portal_layout">
<t t-set="o_portal_fullwidth_alert" groups="project.group_project_user">
<t t-call="portal.portal_back_in_edit_mode">
<t t-set="backend_url" t-value="'/web#model=project.task&amp;id=%s&amp;view_type=form' % (task.id)"/>
</t>
</t>
<t t-call="portal.portal_record_layout">
<t t-set="card_header">
<div class="row no-gutters">
<div class="col-12">
<h5 class="d-flex mb-1 mb-md-0 row">
<span t-field="task.name" class="col-9 text-truncate"/>
<small class="text-muted d-none d-md-inline"> (#<span t-field="task.id"/>)</small>
<div class="col-3 col-md-2 text-right">
<small class="text-right">Status:</small>
<span t-field="task.stage_id.name" class=" badge badge-pill badge-info" title="Current stage of this task"/>
</div>
</h5>
</div>
</div>
</t>
<t t-set="card_body">
<div class="mb-1" t-if="user in task.sudo().project_id.allowed_user_ids">
<strong>Project:</strong> <a t-attf-href="/my/project/#{task.project_id.id}" t-field="task.project_id.name"/>
</div>
<div class="row mb-4">
<div class="col-12 col-md-6 mb-1">
<strong>Date:</strong> <span t-field="task.create_date" t-options='{"widget": "date"}'/>
</div>
<div class="col-12 col-md-6" t-if="task.date_deadline">
<strong>Deadline:</strong> <span t-field="task.date_deadline" t-options='{"widget": "date"}'/>
</div>
</div>
<div class="row mb-4" t-if="task.user_id or task.partner_id">
<div class="col-12 col-md-6 pb-2" t-if="task.user_id">
<strong>Assigned to</strong>
<div class="row">
<div class="col flex-grow-0 pr-3">
<img t-if="task.user_id.image_1024" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(task.user_id.image_1024)" alt="Contact"/>
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact"/>
</div>
<div class="col pl-md-0">
<div t-field="task.user_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'/>
</div>
</div>
</div>
<div class="coll-12 col-md-6 pb-2" t-if="task.partner_id">
<strong>Reported by</strong>
<div class="row">
<div class="col flex-grow-0 pr-3">
<img t-if="task.partner_id.image_1024" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(task.partner_id.image_1024)" alt="Contact"/>
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact"/>
</div>
<div class="col pl-md-0">
<div t-field="task.partner_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'/>
</div>
</div>
</div>
</div>
<div class="row" t-if="task.description or task.attachment_ids">
<div t-if="task.description" t-attf-class="col-12 col-lg-7 mb-4 mb-md-0 {{'col-lg-7' if task.attachment_ids else 'col-lg-12'}}">
<hr class="mb-1"/>
<div class="d-flex my-2">
<strong>Description</strong>
</div>
<div class="py-1 px-2 bg-100 small" t-field="task.description"/>
</div>
<div t-if="task.attachment_ids" t-attf-class="col-12 col-lg-5 o_project_portal_attachments {{'col-lg-5' if task.description else 'col-lg-12'}}">
<hr class="mb-1 d-none d-lg-block"/>
<strong class="d-block mb-2">Attachments</strong>
<div class="row">
<div t-attf-class="col {{'col-lg-6' if not task.description else 'col-lg-12'}}">
<ul class="list-group">
<a class="list-group-item list-group-item-action d-flex align-items-center oe_attachments py-1 px-2" t-foreach='task.attachment_ids' t-as='attachment' t-attf-href="/web/content/#{attachment.id}?download=true&amp;access_token=#{attachment.access_token}" target="_blank" data-no-post-process="">
<div class='oe_attachment_embedded o_image o_image_small mr-2 mr-lg-3' t-att-title="attachment.name" t-att-data-mimetype="attachment.mimetype" t-attf-data-src="/web/image/#{attachment.id}/50x40?access_token=#{attachment.access_token}"/>
<div class='oe_attachment_name text-truncate'><t t-esc='attachment.name'/></div>
</a>
</ul>
</div>
</div>
</div>
</div>
</t>
</t>
<div class="mt32">
<h4><strong>Message and communication history</strong></h4>
<t t-call="portal.message_thread">
<t t-set="object" t-value="task"/>
<t t-set="token" t-value="task.access_token"/>
<t t-set="pid" t-value="pid"/>
<t t-set="hash" t-value="hash"/>
</t>
</div>
</t>
</template>
</odoo>