account/views/account_portal_templates.xml

223 lines
13 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<odoo>
<template id="portal_my_home_menu_invoice" name="Portal layout : invoice menu entries" inherit_id="portal.portal_breadcrumbs" priority="30">
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
<li t-if="page_name == 'invoice'" t-attf-class="breadcrumb-item #{'active ' if not invoice else ''}">
<a t-if="invoice" t-attf-href="/my/invoices?{{ keep_query() }}">Invoices &amp; Bills</a>
<t t-else="">Invoices &amp; Bills</t>
</li>
<li t-if="invoice" class="breadcrumb-item active">
<t t-out="invoice.name" t-if="invoice.name != '/'"/>
<t t-else=""><em>Draft Invoice</em></t>
</li>
</xpath>
</template>
<template id="portal_my_home_invoice" name="Show Invoices &amp; Bills" inherit_id="portal.portal_my_home" customize_show="True" priority="30">
<xpath expr="//div[hasclass('o_portal_docs')]" position="before">
<t t-set="portal_client_category_enable" t-value="True"/>
<t t-set="portal_vendor_category_enable" t-value="True"/>
</xpath>
<div id="portal_client_category" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="icon" t-value="'/account/static/src/img/Bill.svg'"/>
<t t-set="title">Your Invoices</t>
<t t-set="url" t-value="'/my/invoices?filterby=invoices'"/>
<t t-set="text">Follow, download or pay your invoices</t>
<t t-set="placeholder_count" t-value="'invoice_count'"/>
</t>
</div>
<div id="portal_vendor_category" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="icon" t-value="'/account/static/src/img/Bill.svg'"/>
<t t-set="title">Our Invoices</t>
<t t-set="url" t-value="'/my/invoices?filterby=bills'"/>
<t t-set="text">Follow, download or pay our invoices</t>
<t t-set="placeholder_count" t-value="'bill_count'"/>
</t>
</div>
</template>
<template id="portal_my_invoices" name="My Invoices and Payments">
<t t-call="portal.portal_layout">
<t t-set="breadcrumbs_searchbar" t-value="True"/>
<t t-call="portal.portal_searchbar">
<t t-set="title">Invoices</t>
</t>
<t t-if="not invoices">
<p class="alert alert-warning">There are currently no invoices and payments for your account.</p>
</t>
<t t-if="invoices" t-call="portal.portal_table">
<thead>
<tr class="active">
<th>Invoice #</th>
<th>Invoice Date</th>
<th class='d-none d-md-table-cell'>Due Date</th>
<th>Status</th>
<th class="text-end">Amount Due</th>
</tr>
</thead>
<tbody>
<t t-foreach="invoices" t-as="invoice">
<tr>
<td>
<a t-att-href="invoice.get_portal_url()" t-att-title="invoice.name">
<t t-out="invoice.name" t-if="invoice.name != '/'"/>
<em t-else="">Draft Invoice</em>
</a>
</td>
<td><span t-field="invoice.invoice_date"/></td>
<td class='d-none d-md-table-cell'><span t-field="invoice.invoice_date_due"/></td>
<td name="invoice_status">
<t t-if="invoice.state == 'posted'" name="invoice_status_posted">
<span t-if="invoice.payment_state in ('paid', 'in_payment')"
class="badge rounded-pill text-bg-success">
<i class="fa fa-fw fa-check" aria-label="Paid" title="Paid" role="img"/>
<span class="d-none d-md-inline"> Paid</span>
</span>
<span t-elif="invoice.payment_state == 'reversed'"
class="badge rounded-pill text-bg-success">
<i class="fa fa-fw fa-check" aria-label="Reversed" title="Reversed" role="img"/>
<span class="d-none d-md-inline"> Reversed</span>
</span>
<span t-else="" class="badge rounded-pill text-bg-info" name="invoice_status_waiting_for_payment">
<i class="fa fa-fw fa-clock-o" aria-label="Opened" title="Opened" role="img"/>
<span class="d-none d-md-inline"> Waiting for Payment</span>
</span>
</t>
<t t-elif="invoice.state == 'cancel'">
<span class="badge rounded-pill text-bg-warning">
<i class="fa fa-fw fa-remove" aria-label="Cancelled" title="Cancelled" role="img"/>
<span class="d-none d-md-inline"> Cancelled</span>
</span>
</t>
</td>
<td class="text-end"><span t-out="-invoice.amount_residual if invoice.move_type == 'out_refund' else invoice.amount_residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
</tr>
</t>
</tbody>
</t>
</t>
</template>
<template id="portal_invoice_page" name="Invoice/Bill" inherit_id="portal.portal_sidebar" primary="True">
<xpath expr="//div[hasclass('o_portal_sidebar')]" position="inside">
<t t-set="o_portal_fullwidth_alert" groups="sales_team.group_sale_salesman,account.group_account_invoice,account.group_account_readonly">
<t t-call="portal.portal_back_in_edit_mode">
<t t-set="backend_url" t-value="'/web#model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (invoice._name, invoice.id, invoice.env.ref('account.action_move_out_invoice_type').id)"/>
</t>
</t>
<div class="row o_portal_invoice_sidebar">
<!-- Sidebar -->
<t t-call="portal.portal_record_sidebar">
<t t-set="classes" t-value="'col-lg-3 col-xl-4 d-print-none me-lg-auto'"/>
<t t-set="title">
<h2>
<span t-if="invoice.amount_residual > 0" t-field="invoice.amount_residual"/>
<span t-else="1" t-field="invoice.amount_total"/>
</h2>
<div class="small" t-if="invoice.payment_state not in ('paid', 'in_payment') and invoice.move_type == 'out_invoice'"><i class="fa fa-clock-o"/><span class="o_portal_sidebar_timeago ml4" t-att-datetime="invoice.invoice_date_due"/></div>
</t>
<t t-set="entries">
<div class="d-flex flex-column gap-4">
<div class="flex-basis-100 flex-basis-sm-50 flex-basis-lg-100 order-1 order-lg-0">
<div class="o_download_pdf d-flex gap-1 flex-lg-column flex-xl-row">
<div class="flex-grow-1">
<a class="btn btn-secondary d-block o_download_btn" t-att-href="invoice.get_portal_url(report_type='pdf', download=True)" title="Download"><i class="fa fa-download"/> Download</a>
</div>
<div class="flex-grow-1">
<a class="btn btn-secondary d-block o_print_btn o_portal_invoice_print" t-att-href="invoice.get_portal_url(report_type='pdf')" id="print_invoice_report" title="Print" target="_blank"><i class="fa fa-print"/> Print</a>
</div>
</div>
</div>
<div t-if="invoice.invoice_user_id" class="flex-grow-1">
<h6>
<small class="text-muted">
<t t-if="invoice.move_type == 'out_invoice'">
Salesperson
</t>
<t t-if="invoice.move_type == 'in_invoice'">
Purchase Representative
</t>
</small>
</h6>
<div class="o_portal_contact_details d-flex flex-column gap-2">
<div class="d-flex justify-content-start align-items-center gap-2">
<img class="o_avatar o_portal_contact_img rounded" t-att-src="image_data_uri(invoice.invoice_user_id.avatar_128)" alt="Contact"/>
<div>
<h6 class="mb-0" t-out="invoice.invoice_user_id.name"/>
<a href="#discussion" class="d-flex align-items-center gap-2 small fw-bold">
Send message
</a>
</div>
</div>
<div t-field="invoice.invoice_user_id" t-options='{"widget": "contact", "fields": ["city", "phone"]}'/>
</div>
</div>
</div>
</t>
</t>
<!-- Page Content -->
<div id="invoice_content" class="o_portal_content col-12 col-lg-9 col-xl-8">
<t t-if="error or warning" t-call="account.portal_invoice_error"/>
<t t-if="success and (not error and not warning)" t-call="account.portal_invoice_success"/>
<div class="o_portal_html_view shadow p-3">
<div class="o_portal_html_loader text-center">
<i class="fa fa-circle-o-notch fa-spin fa-2x fa-fw text-black-50"></i>
</div>
<iframe id="invoice_html" class="mt8 mb8" width="100%" height="100%" frameborder="0" scrolling="no" t-att-src="invoice.get_portal_url(report_type='html')"/>
</div>
<!-- chatter -->
<div id="invoice_communication" class="mt-4">
<h3>Communication history</h3>
<t t-call="portal.message_thread"/>
</div>
</div>
</div>
</xpath>
</template>
<template id="portal_invoice_error" name="Invoice error/warning display">
<div class="row mr16">
<div t-attf-class="'col-lg-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}" role="alert">
<a href="#" class="close" data-bs-dismiss="alert" aria-label="close" title="close">×</a>
<t t-if="error == 'generic'" name="generic">
There was an error processing this page.
</t>
</div>
</div>
</template>
<template id="portal_invoice_success" name="Invoice success display">
<div class="row mr16">
<div class="col-lg-12 mr16 ml16 alert alert-dismissable alert-success" role="status">
<a href="#" class="close" data-bs-dismiss="alert" aria-label="close" title="close">×</a>
</div>
</div>
</template>
<!-- Get the fields set in required_fields and display them as form elements. Doesn't create the form itself. -->
<template id="portal_invoice_required_fields_form">
<t t-foreach="required_fields" t-as="required_field">
<div t-attf-class="mb-3 #{error.get(required_field.name) and 'o_has_error' or ''} col-xl-6">
<!-- select by default the value passed in the data or corresponding to the "default" attribute on the field -->
<t t-set="field_info" t-value="env[required_field.model]._fields[required_field.name]"/>
<t t-set="default_value" t-value="extra_field_values.get(field_prefix + required_field.name) or field_info.default and field_info.default(required_field.model)"/>
<t t-if="required_field.ttype == 'selection'">
<label class="col-form-label" t-att-for="field_prefix + required_field.name"><t t-out="required_field.field_description"/></label>
<select class="form-select" t-att-name="field_prefix + required_field.name" required="required">
<option t-att-selected="not default_value" disabled="disabled" value=""><t t-out="'Select the %s ...' % required_field.field_description.lower()"/></option>
<t t-foreach="required_field.selection_ids" t-as="selection">
<option t-att-selected="default_value and default_value == selection.value" t-att-value="selection.value"><t t-out="selection.name"/></option>
</t>
</select>
</t>
</div>
</t>
</template>
</odoo>