Newer
Older
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="hall_contract_overview_form" model="ir.ui.view">
<field name="name">hall.contract.overview</field>
<field name="type">qweb</field>
<field name="model">hall.contract</field>
<field name="arch" type="xml">
<qweb js_class="contract_overview">
<nav class="o_qweb_cp_buttons">
<button type="object" class="btn" id="update_view">
<i class="fa fa-refresh" />
</button>
<button
type="object"
class="btn btn-outline-primary"
id="update_cashpad_values"
groups="base.group_no_one,hall_sale_cashpad.group_hall_cashpad_manager"
>
Mettre à jour les données Cashpad
</button>
</nav>
<div class="o_form_view o_form_readonly o_project_plan">
<div class="o_form_sheet_bg">
<div class="o_form_sheet position-relative">
<t t-set="values" t-value="records.get_overview()" />
<t t-set="job_ids" t-value="values['job_ids']" />
<!-- Cashpad datas -->
<div class="row" groups="base.group_no_one,hall_sale_cashpad.group_hall_cashpad_manager">
<div class="col-12">
<div t-if="job_ids" class="alert alert-warning" role="alert">
<h3 class="text-uppercase fw-bolder mb-4">
</h3>
<table class="table table-sm text-center">
<tr>
<td>en attente</td>
<td>dans la file</td>
<td>en cours</td>
<td>en échec</td>
</tr>
<tr>
<td><t t-out="len(job_ids.filtered(lambda j: j.state == 'pending'))" /></td>
<td><t t-out="len(job_ids.filtered(lambda j: j.state == 'enqueued'))" /></td>
<td><t t-out="len(job_ids.filtered(lambda j: j.state == 'started'))" /></td>
<td><t t-out="len(job_ids.filtered(lambda j: j.state == 'failed'))" /></td>
</tr>
</table>
</div>
<div t-if="not job_ids" class="alert alert-success" role="alert">
Aucune archive en cours de traitement ou en échec
</div>
</div>
</div>
<div class="row">
<!-- Global Values -->
<div class="col-12">
<div class="row">
<h3 class="text-uppercase fw-bolder o_horizontal_separator mb-4">
<t t-if="len(values['contract_ids']) == 1">
- <t t-out="values['contract_ids'].display_name" />
</t>
</h3>
<div class="row">
<!-- Yesterday -->
<t t-call="festa_dashboard.hall_contract_overview_kpi">
<t t-set="date_text" t-value="'le '" />
<t t-set="date" t-value="values['sales']['day']" />
<t t-set="amount" t-value="values['sales']['yesterday']['total_sales']" />
<t t-set="target" t-value="values['sales']['last_year']['total_sales']" />
<t t-set="bottom_text" t-value="'''l'année dernière '''" />
<t t-set="average_sales" t-value="values['sales']['yesterday']['average_sales']" />
<t t-set="currency_id" t-value="values['company_id'].currency_id" />
<t t-set="visitor_ids" t-value="sum(values['flow']['visitor_ids'].filtered(lambda f: f.date >= date.today() - relativedelta(days=1)).mapped('count'))" />
<t t-set="passerby_ids" t-value="sum(values['flow']['passerby_ids'].filtered(lambda f: f.date >= date.today() - relativedelta(days=1)).mapped('count'))" />
<t t-call="festa_dashboard.hall_contract_overview_kpi">
<t t-set="title" t-value="'Ce mois-ci'" />
<t t-set="date_text" t-value="'depuis le '" />
<t t-set="date" t-value="values['sales']['month']" />
<t t-set="amount" t-value="values['sales']['this_month']['total_sales']" />
<t t-set="target" t-value="values['sales']['target_month']" />
<t t-set="bottom_text" t-value="'objectif du mois '" />
<t t-set="average_sales"
t-value="values['sales']['this_month']['average_sales']" />
<t t-set="currency_id" t-value="values['company_id'].currency_id" />
<t t-set="visitor_ids" t-value="sum(values['flow']['visitor_ids'].filtered(lambda f: f.date >= date.today().replace(day=1)).mapped('count'))" />
<t t-set="passerby_ids" t-value="sum(values['flow']['passerby_ids'].filtered(lambda f: f.date >= date.today().replace(day=1)).mapped('count'))" />
<t t-call="festa_dashboard.hall_contract_overview_kpi">
<t t-set="title" t-value="'Cette année'" />
<t t-set="date_text" t-value="'depuis le '" />
<t t-set="date" t-value="values['sales']['year']" />
<t t-set="amount" t-value="values['sales']['this_year']['total_sales']" />
<t t-set="target" t-value="values['sales']['target_year']" />
<t t-set="bottom_text" t-value="'''objectif de l'année '''" />
<t t-set="average_sales" t-value="values['sales']['this_year']['average_sales']" />
<t t-set="currency_id" t-value="values['company_id'].currency_id" />
<t t-set="visitor_ids" t-value="sum(values['flow']['visitor_ids'].mapped('count'))" />
<t t-set="passerby_ids" t-value="sum(values['flow']['passerby_ids'].mapped('count'))" />
</t>
</div>
</div>
<!-- Detail by contract -->
<div class="col-12 mt-4" t-if="values['sales']['revenue_detail']">
<h3 class="text-uppercase fw-bolder o_horizontal_separator mb-4">
Objectif des derniers mois
</h3>
<table class="table table-striped table-hover">
<th t-foreach="values['sales']['revenue_detail']" t-as="revenue">
<t t-out="revenue.day_date" t-options="{'widget': 'date', 'format': 'MMMM yyyy'}" />
</th>
</tr>
</thead>
<tbody>
<tr>
<th>CA HT</th>
<td t-foreach="values['sales']['revenue_detail']" t-as="revenue" class="text-end">
<t t-out="revenue.sales_excl_taxes" t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" />
</td>
</tr>
<tr>
<th>Objectif</th>
<td t-foreach="values['sales']['revenue_detail']" t-as="revenue" class="text-end">
<t t-out="revenue.amount_untaxed_target" t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" />
</td>
</tr>
<tr>
<th>% atteint</th>
<td t-foreach="values['sales']['revenue_detail']" t-as="revenue" class="text-end">
<t
t-out="revenue.sales_excl_taxes / revenue.amount_untaxed_target * 100 if revenue.amount_untaxed_target else 100"
t-options="{'widget': 'float', 'precision': 0}"
/> %
</td>
</tr>
<tr>
<th>Panier moyen</th>
<td t-foreach="values['sales']['revenue_detail']" t-as="revenue" class="text-end">
<t
t-out="revenue.sales_excl_taxes / revenue.nb_receipts if revenue.nb_receipts else 0"
t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}"
/>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Detail by contract -->
<div class="col-12 mt-4" t-if="len(values['contract_ids']) > 1">
<h3 class="text-uppercase fw-bolder o_horizontal_separator mb-4">
Détail par contrat
</h3>
<table class="table table-striped table-borderless table-hover">
<t t-foreach="values['hall_ids']" t-as="hall">
<th colspan="11" class="text-uppercase" style="background-color: rgba(113, 99, 158, 0.2);">
<t t-out="hall.name" />
</th>
</tr>
<tr>
<th>Stand</th>
<th>Enseigne</th>
<th class="td-overview-border-left">
Hier
<small class="test-muted"><t t-out="values['sales']['day']" t-options="{'widget': 'date', 'format': 'dd/MM/yyyy'}" /></small>
</th>
<th colspan="4" class="td-overview-border-left td-overview-border-right">
Ce mois-ci
</th>
<th colspan="4">Cette année</th>
</tr>
<tr class="tr-detail-header">
<td />
<td />
<td class="td-overview-border-left" />
<td class="text-muted td-overview-border-left">CA</td>
<td class="text-muted">Panier moyen</td>
<td class="text-muted">Objectif</td>
<td class="td-overview-border-right" />
<td class="text-muted">CA</td>
<td class="text-muted">Panier moyen</td>
<td class="text-muted">Objectif</td>
t-foreach="values['contract_ids'].filtered('cashpad_id').sorted('commercial_name')"
t-att-class="'text-muted fst-italic' if not contract.active else ''"
<t t-if="contract in hall.contract_ids">
<t t-set="data" t-value="contract.get_overview_sales()"/>
<t
t-set="month_delta"
t-value="data['this_month']['total_sales'] / data['target_month'] * 100 if data['target_month'] else 100"
/>
<t
t-set="year_delta"
t-value="data['this_year']['total_sales'] / data['target_year'] * 100 if data['target_month'] else 100"
/>
<td t-out="contract.stand_id.name"/>
<td t-out="contract.commercial_name"/>
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'/>
t-out="data['this_month']['total_sales']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td
class="text-end"
t-out="data['this_month']['average_sales']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td
class="text-end text-muted"
t-out="data['target_month']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td t-att-class="'text-end text-success td-overview-border-right' if month_delta >= 100 else 'text-end td-overview-border-right text-warning'">
<t t-out="month_delta" t-options='{"widget": "float", "precision": 0}' /> %
</td>
<td
class="text-end"
t-out="data['this_year']['total_sales']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td
class="text-end"
t-out="data['this_year']['average_sales']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td
class="text-end text-muted"
t-out="data['target_year']"
t-options='{"widget": "monetary", "display_currency": values["company_id"].currency_id}'
/>
<td t-att-class="'text-end text-success' if year_delta >= 100 else 'text-end text-warning'">
<t t-out="year_delta" t-options='{"widget": "float", "precision": 0}'/> %
</td>
</t>
</tr>
</tbody>
</t>
</table>
<!-- en table- -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</qweb>
</field>
</record>
<!-- Template main KPI-->
<template id="hall_contract_overview_kpi">
<!-- Last month -->
<div class="col-12 col-sm-6 col-lg-4 text-center mt-4 mb-4">
<!-- Titre -->
<h3><t t-out="title" /></h3>
<!-- Date -->
<t t-out="date_text" />
<t t-out="date" t-options="{'widget': 'date', 'format': 'dd/MM/yyyy'}" />
<!-- CA -->
<p class="display-4">
<t t-out="amount" t-options='{"widget": "monetary", "display_currency": currency_id}' />
</p>
<!-- Pourcentage -->
<t t-if="target and target > 0">
<t t-set="delta" t-value="amount / target * 100" />
<p t-att-class="'text-success h3' if delta >= 100 else 'text-warning h3'">
<t t-out="delta" t-options='{"widget": "float", "precision": 0}' /> %
</p>
</t>
<t t-else="">
<p class="h3">N/A</p>
</t>
<!-- Bottom -->
<p>
<t t-out="bottom_text" />
<t t-out="target" t-options='{"widget": "monetary", "display_currency": currency_id}' />
</p>
<hr />
<p />
<span class="h5">Panier moyen</span>
<p class="display-6">
<t t-out="average_sales" t-options='{"widget": "monetary", "display_currency": currency_id}' />
<hr />
<table class="table align-middle table-sm">
<tr>
<td>
<span class="h5">Visiteurs</span>
</td>
<td>
<span class="lead">
<t t-out="visitor_ids" t-options='{"widget": "float", "precision": 0}' />
</span>
</td>
</tr>
<tr>
<td>
<span class="h5">Passants</span>
</td>
<td>
<span class="lead">
<t t-out="passerby_ids" t-options='{"widget": "float", "precision": 0}' />
</span>
</td>
</tr>
</table>
</div>
</template>
<record id="hall_contract_overview_action" model="ir.actions.act_window">
<field name="name">Overview</field>
<field name="res_model">hall.contract</field>
<field name="view_mode">qweb</field>
<field
name="domain"
>['|', ('date_end', '=', False), ('date_end', '>=', context_today().strftime('%Y-1-1'))]</field>
<field name="context">{'active_test': False}</field>