diff --git a/static/src/css/lefilament_tdb.css b/static/src/css/lefilament_tdb.css index 774b23c43b7427ebbbb9c5db14f3978ea420db9b..c2edb2ccc1317cf3f8b821b0ba6e782c07eabb17 100644 --- a/static/src/css/lefilament_tdb.css +++ b/static/src/css/lefilament_tdb.css @@ -1,3 +1,11 @@ +.lefilament_dashboard { + padding-top: 40px; + padding-bottom: 40px; + background-color: #fefefe; +} +.lefilament_dashboard .display-6, .lefilament_dashboard .card-title { + color: #495057; +} p.card-maj { font-size: 10px; font-style: italic; diff --git a/templates/lefilament_dashboard.xml b/templates/lefilament_dashboard.xml index 1c0b72c3011732fdbd767e4b8d5e6d52d1910c3c..4da6f18b0f4bf33ce79e496694ad1d6fae76ab8c 100644 --- a/templates/lefilament_dashboard.xml +++ b/templates/lefilament_dashboard.xml @@ -11,511 +11,509 @@ <i class="fa fa-refresh" /> </button> </nav> - <div class="o_form_view o_form_readonly"> - <div class="o_form_sheet_bg"> - <div class="o_form_sheet position-relative"> - <t - t-set="values" - t-value="records.retrieve_datas_dashboard()" - /> - <div class="row"> - <!-- Column 1 --> - <div class="col-12 col-md-6 col-lg-4"> - <h3 - class="text-uppercase fw-bolder o_horizontal_separator mb-4" - >En Cours</h3> - <!-- Facturé --> - <div class="card mb32"> - <t - t-set="invoiced" - t-value="sum(values.get('invoice_ids').mapped('amount_untaxed_signed'))" - /> - <div class="card-body"> - <a - type="action" - data-model="account.move" - t-att-data-domain="[('id','in', values.get('invoice_ids').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > - <h5 class="card-title">Facturé</h5> - <p class="display-6"> - <t - t-out="invoiced" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </p> - </a> - </div> - </div> - <!-- Commandes --> - <div class="card mb32"> - <t - t-set="ordered" - t-value="sum(values.get('order_line_ids').mapped('price_subtotal'))" - /> - <div class="card-body"> - <a - type="action" - data-model="sale.order" - t-att-data-domain="[('id','in', values.get('order_line_ids').mapped('order_id').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > - <h5 - class="card-title" - >Commandes en cours</h5> - <p class="display-6"> - <t - t-out="ordered" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - - </p> - </a> - </div> + <div class="lefilament_dashboard"> + <div class="container"> + <t + t-set="values" + t-value="records.retrieve_datas_dashboard()" + /> + <div class="row"> + <!-- Column 1 --> + <div class="col-12 col-md-6 col-lg-4"> + <h3 + class="text-uppercase fw-bolder o_horizontal_separator mb-4" + >En Cours</h3> + <!-- Facturé --> + <div class="card mb32"> + <t + t-set="invoiced" + t-value="sum(values.get('invoice_ids').mapped('amount_untaxed_signed'))" + /> + <div class="card-body"> + <a + type="action" + data-model="account.move" + t-att-data-domain="[('id','in', values.get('invoice_ids').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" + > + <h5 class="card-title">Facturé</h5> + <p class="display-6"> + <t + t-out="invoiced" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + </p> + </a> </div> - <!-- Pipe --> - <div class="card mb32"> - <div class="card-body"> - <a - type="action" - data-model="crm.lead" - t-att-data-domain="[('id','in', values.get('lead_ids').ids)]" - data-views='[[0, "kanban"],[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > - <h5 class="card-title">Pipe</h5> - <p class="display-6"> - <t - t-out="sum(values.get('lead_ids').mapped('prorated_revenue'))" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> + </div> + <!-- Commandes --> + <div class="card mb32"> + <t + t-set="ordered" + t-value="sum(values.get('order_line_ids').mapped('price_subtotal'))" + /> + <div class="card-body"> + <a + type="action" + data-model="sale.order" + t-att-data-domain="[('id','in', values.get('order_line_ids').mapped('order_id').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" + > + <h5 + class="card-title" + >Commandes en cours</h5> + <p class="display-6"> + <t + t-out="ordered" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> - </p> - </a> - </div> + </p> + </a> </div> </div> - - <!-- Column 2 --> - <div class="col-12 col-md-6 col-lg-4"> - <h3 - class="text-uppercase fw-bolder o_horizontal_separator mb-4" - >Objectif</h3> - <div class="card"> - <div class="card-body"> - <p class="display-5 mb16"> + <!-- Pipe --> + <div class="card mb32"> + <div class="card-body"> + <a + type="action" + data-model="crm.lead" + t-att-data-domain="[('id','in', values.get('lead_ids').ids)]" + data-views='[[0, "kanban"],[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" + > + <h5 class="card-title">Pipe</h5> + <p class="display-6"> <t - t-out="values.get('target')" + t-out="sum(values.get('lead_ids').mapped('prorated_revenue'))" t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" /> </p> - <div class="progress" style="height: 60px;"> - <div - class="progress-bar progress-bar-striped bg-success" - role="progressbar" - t-att-aria-valuenow="values['progress'] * 100" - aria-valuemin="0" - aria-valuemax="100" - t-attf-style="width: {{values['progress'] * 100}}%; font-size: 14px; font-weight: 600;" - > + </a> + </div> + </div> + </div> + + <!-- Column 2 --> + <div class="col-12 col-md-6 col-lg-4"> + <h3 + class="text-uppercase fw-bolder o_horizontal_separator mb-4" + >Objectif</h3> + <div class="card"> + <div class="card-body"> + <p class="display-5 mb16"> + <t + t-out="values.get('target')" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + + </p> + <div class="progress" style="height: 60px;"> + <div + class="progress-bar progress-bar-striped bg-success" + role="progressbar" + t-att-aria-valuenow="values['progress'] * 100" + aria-valuemin="0" + aria-valuemax="100" + t-attf-style="width: {{values['progress'] * 100}}%; font-size: 14px; font-weight: 600;" + > + <t + t-out="round(values.get('progress') * 100, 0)" + t-options="{'widget': 'float', 'precision': 0}" + /> % + </div> + </div> + <table class="table-legend mt16"> + <tr> + <td + style="background-color: #8ED8A2; width: 20px;" + class="progress-bar-striped" + /> + <td>Facturé</td> + <td class="nb"><t + t-out="invoiced" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /></td> + <td class="nb"> <t - t-out="round(values.get('progress') * 100, 0)" + t-out="values['progress'] * 100" t-options="{'widget': 'float', 'precision': 0}" /> % - </div> - </div> - <table class="table-legend mt16"> - <tr> - <td - style="background-color: #8ED8A2; width: 20px;" - class="progress-bar-striped" - /> - <td>Facturé</td> - <td class="nb"><t - t-out="invoiced" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /></td> - <td class="nb"> - <t - t-out="values['progress'] * 100" - t-options="{'widget': 'float', 'precision': 0}" - /> % - </td> - </tr> - <tr> - <td - style="background-color: #F6DCA2; width: 20px;" - class="progress-bar-striped" - /> - <td>Commandes</td> - <td class="nb"><t - t-out="ordered" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /></td> - <td class="nb"> - <t - t-out="round(ordered / values['target'], 2) * 100" - t-options="{'widget': 'float', 'precision': 0}" - /> % - </td> - </tr> - <tr> - <td - style="background-color: #F6CCA2; width: 20px;" - class="progress-bar-striped" - /> - <td>Pipe Gagné</td> - <td class="nb"><t - t-out="values['pipe_win']" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /></td> - <td class="nb"><t - t-out="round(values['pipe_win'] / values['target'], 2) * 100" - t-options="{'widget': 'float', 'precision': 0}" - /> %</td> - </tr> - <tr class="table-legend-total"> - <td style="width: 20px;" /> - <td>Total</td> - <td class="nb"><t - t-out="(values['pipe_win'] + ordered + invoiced)" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /></td> - <td class="nb"> - <t - t-out="round((values['pipe_win'] + ordered + invoiced) / values['target'], 2) * 100" - t-options="{'widget': 'float', 'precision': 0}" - /> % - </td> - </tr> - <tr> - <td style="width: 20px;" /> - <td /> - <td class="nb" /> - <td class="nb" /> - </tr> - <tr> - <td - style="background-color: #eee; width: 20px;" - class="progress-bar-striped" + </td> + </tr> + <tr> + <td + style="background-color: #F6DCA2; width: 20px;" + class="progress-bar-striped" + /> + <td>Commandes</td> + <td class="nb"><t + t-out="ordered" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /></td> + <td class="nb"> + <t + t-out="round(ordered / values['target'], 2) * 100" + t-options="{'widget': 'float', 'precision': 0}" + /> % + </td> + </tr> + <tr> + <td + style="background-color: #F6CCA2; width: 20px;" + class="progress-bar-striped" + /> + <td>Pipe Gagné</td> + <td class="nb"><t + t-out="values['pipe_win']" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /></td> + <td class="nb"><t + t-out="round(values['pipe_win'] / values['target'], 2) * 100" + t-options="{'widget': 'float', 'precision': 0}" + /> %</td> + </tr> + <tr class="table-legend-total"> + <td style="width: 20px;" /> + <td>Total</td> + <td class="nb"><t + t-out="(values['pipe_win'] + ordered + invoiced)" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /></td> + <td class="nb"> + <t + t-out="round((values['pipe_win'] + ordered + invoiced) / values['target'], 2) * 100" + t-options="{'widget': 'float', 'precision': 0}" + /> % + </td> + </tr> + <tr> + <td style="width: 20px;" /> + <td /> + <td class="nb" /> + <td class="nb" /> + </tr> + <tr> + <td + style="background-color: #eee; width: 20px;" + class="progress-bar-striped" + /> + <td>À facturer</td> + <td class="nb"> + <t + t-out="values['target'] - invoiced" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" /> - <td>À facturer</td> - <td class="nb"> - <t - t-out="values['target'] - invoiced" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </td> - <td class="nb"> - <t - t-out="round((values['target'] - invoiced) / values['target'], 2) * 100" - t-options="{'widget': 'float', 'precision': 0}" - /> % - </td> - </tr> - </table> - </div> + </td> + <td class="nb"> + <t + t-out="round((values['target'] - invoiced) / values['target'], 2) * 100" + t-options="{'widget': 'float', 'precision': 0}" + /> % + </td> + </tr> + </table> </div> </div> + </div> - <!-- Column 3 --> - <div class="col-12 col-md-6 col-lg-4"> - <h3 - class="text-uppercase fw-bolder o_horizontal_separator mb-4" - >Trésorerie</h3> - <!-- Banques --> - <div class="card mb32"> - <div class="card-body"> - <ul - class="nav nav-tabs" - id="cash-tab" - role="tablist" + <!-- Column 3 --> + <div class="col-12 col-md-6 col-lg-4"> + <h3 + class="text-uppercase fw-bolder o_horizontal_separator mb-4" + >Trésorerie</h3> + <!-- Banques --> + <div class="card mb32"> + <div class="card-body"> + <ul + class="nav nav-tabs" + id="cash-tab" + role="tablist" + > + <li + class="nav-item" + role="presentation" > - <li - class="nav-item" - role="presentation" + <button + class="nav-link active" + id="cash-tab" + data-bs-toggle="tab" + data-bs-target="#cash" + type="button" + role="tab" + aria-controls="cash" + aria-selected="true" > - <button - class="nav-link active" - id="cash-tab" - data-bs-toggle="tab" - data-bs-target="#cash" - type="button" - role="tab" - aria-controls="cash" - aria-selected="true" - > - Trésorerie - </button> - </li> - <li - class="nav-item" - role="presentation" + Trésorerie + </button> + </li> + <li + class="nav-item" + role="presentation" + > + <button + class="nav-link" + id="bank-tab" + data-bs-toggle="tab" + data-bs-target="#bank" + type="button" + role="tab" + aria-controls="bank" + aria-selected="false" + >Banques + </button> + </li> + </ul> + <div + class="tab-content mt16" + id="cashContent" + > + <div + class="tab-pane fade show active" + id="cash" + role="tabpanel" + aria-labelledby="cash-tab" + > + <p class="card-maj"> + Denière mise à jour le <t + t-out="values['date_maj']" + t-options="{'widget': 'date', 'format': 'dd MMM yyyy'}" + /></p> + <a + type="action" + data-model="account.bank.statement" + t-att-data-domain="[('id','in', values.get('statement_line_ids').mapped('statement_id').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" > - <button - class="nav-link" - id="bank-tab" - data-bs-toggle="tab" - data-bs-target="#bank" - type="button" - role="tab" - aria-controls="bank" - aria-selected="false" - >Banques - </button> - </li> - </ul> + <p class="display-6"> + <t + t-out="sum(values.get('statement_line_ids').mapped('amount'))" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + + </p> + </a> + </div> <div - class="tab-content mt16" - id="cashContent" + class="tab-pane fade" + id="bank" + role="tabpanel" + aria-labelledby="bank-tab" > - <div - class="tab-pane fade show active" - id="cash" - role="tabpanel" - aria-labelledby="cash-tab" + <table + class="table table-striped table-sm table-bordered table-hover" > - <p class="card-maj"> - Denière mise à jour le <t - t-out="values['date_maj']" - t-options="{'widget': 'date', 'format': 'dd MMM yyyy'}" - /></p> - <a - type="action" - data-model="account.bank.statement" - t-att-data-domain="[('id','in', values.get('statement_line_ids').mapped('statement_id').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" + <t + t-foreach="values['cash_by_bank']" + t-as="bank" > - <p class="display-6"> - <t - t-out="sum(values.get('statement_line_ids').mapped('amount'))" + <tr> + <td + t-out="bank['journal_id'][1]" + /> + <td + class="text-right" + t-out="bank['amount']" t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" /> - - </p> - </a> - </div> - <div - class="tab-pane fade" - id="bank" - role="tabpanel" - aria-labelledby="bank-tab" - > - <table - class="table table-striped table-sm table-bordered table-hover" - > - <t - t-foreach="values['cash_by_bank']" - t-as="bank" - > - <tr> - <td - t-out="bank['journal_id'][1]" - /> - <td - class="text-right" - t-out="bank['amount']" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </tr> - </t> - </table> - </div> + </tr> + </t> + </table> </div> </div> </div> + </div> - <!-- To paid --> - <div class="card mb32"> - <div class="card-body"> - <ul - class="nav nav-tabs" - id="cash-tab" - role="tablist" + <!-- To paid --> + <div class="card mb32"> + <div class="card-body"> + <ul + class="nav nav-tabs" + id="cash-tab" + role="tablist" + > + <li + class="nav-item" + role="presentation" > - <li - class="nav-item" - role="presentation" - > - <button - class="nav-link active" - id="cust_to_pay-tab" - data-bs-toggle="tab" - data-bs-target="#cust_to_pay" - type="button" - role="tab" - aria-controls="cust_to_pay" - aria-selected="true" - > - Facturé non encaissé - </button> - </li> - <li - class="nav-item" - role="presentation" + <button + class="nav-link active" + id="cust_to_pay-tab" + data-bs-toggle="tab" + data-bs-target="#cust_to_pay" + type="button" + role="tab" + aria-controls="cust_to_pay" + aria-selected="true" > - <button - class="nav-link" - id="provider_to_pay-tab" - data-bs-toggle="tab" - data-bs-target="#provider_to_pay" - type="button" - role="tab" - aria-controls="provider_to_pay" - aria-selected="false" - >Fournisseurs - </button> - </li> - </ul> + Facturé non encaissé + </button> + </li> + <li + class="nav-item" + role="presentation" + > + <button + class="nav-link" + id="provider_to_pay-tab" + data-bs-toggle="tab" + data-bs-target="#provider_to_pay" + type="button" + role="tab" + aria-controls="provider_to_pay" + aria-selected="false" + >Fournisseurs + </button> + </li> + </ul> + <div + class="tab-content mt16" + id="toPayContent" + > <div - class="tab-content mt16" - id="toPayContent" + class="tab-pane fade show active" + id="cust_to_pay" + role="tabpanel" + aria-labelledby="cust_to_pay-tab" > - <div - class="tab-pane fade show active" - id="cust_to_pay" - role="tabpanel" - aria-labelledby="cust_to_pay-tab" + <a + type="action" + data-model="account.move" + t-att-data-domain="[('id','in', values.get('to_get').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" > - <a - type="action" - data-model="account.move" - t-att-data-domain="[('id','in', values.get('to_get').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > - <p class="display-6"> - <t - t-out="sum(values.get('to_get').mapped('amount_residual_signed'))" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </p> - </a> - </div> - <div - class="tab-pane fade" - id="provider_to_pay" - role="tabpanel" - aria-labelledby="provider_to_pay-tab" + <p class="display-6"> + <t + t-out="sum(values.get('to_get').mapped('amount_residual_signed'))" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + </p> + </a> + </div> + <div + class="tab-pane fade" + id="provider_to_pay" + role="tabpanel" + aria-labelledby="provider_to_pay-tab" + > + <a + type="action" + data-model="account.move" + t-att-data-domain="[('id','in', values.get('to_pay').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" > - <a - type="action" - data-model="account.move" - t-att-data-domain="[('id','in', values.get('to_pay').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > - <p class="display-6"> - <t - t-out="sum(values.get('to_pay').mapped('amount_residual_signed'))" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </p> - </a> - </div> + <p class="display-6"> + <t + t-out="sum(values.get('to_pay').mapped('amount_residual_signed'))" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + </p> + </a> </div> </div> </div> + </div> - <!-- Variation --> - <div class="card mb32"> - <div class="card-body"> - <ul - class="nav nav-tabs" - id="variation-tab" - role="tablist" + <!-- Variation --> + <div class="card mb32"> + <div class="card-body"> + <ul + class="nav nav-tabs" + id="variation-tab" + role="tablist" + > + <li + class="nav-item" + role="presentation" > - <li - class="nav-item" - role="presentation" - > - <button - class="nav-link active" - id="variation-tab" - data-bs-toggle="tab" - data-bs-target="#variation" - type="button" - role="tab" - aria-controls="variation" - aria-selected="true" - > - Variation - </button> - </li> - <li - class="nav-item" - role="presentation" + <button + class="nav-link active" + id="variation-tab" + data-bs-toggle="tab" + data-bs-target="#variation" + type="button" + role="tab" + aria-controls="variation" + aria-selected="true" > - <button - class="nav-link" - id="inout-tab" - data-bs-toggle="tab" - data-bs-target="#inout" - type="button" - role="tab" - aria-controls="inout" - aria-selected="false" - >Entrées/Sorties - </button> - </li> - </ul> + Variation + </button> + </li> + <li + class="nav-item" + role="presentation" + > + <button + class="nav-link" + id="inout-tab" + data-bs-toggle="tab" + data-bs-target="#inout" + type="button" + role="tab" + aria-controls="inout" + aria-selected="false" + >Entrées/Sorties + </button> + </li> + </ul> + <div + class="tab-content mt16" + id="variationContent" + > <div - class="tab-content mt16" - id="variationContent" + class="tab-pane fade show active" + id="variation" + role="tabpanel" + aria-labelledby="variation-tab" > - <div - class="tab-pane fade show active" - id="variation" - role="tabpanel" - aria-labelledby="variation-tab" + <a + type="action" + data-model="account.bank.statement.line" + t-att-data-domain="[('id','in', values.get('variation').ids)]" + data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' + tabindex="-1" > - <a - type="action" - data-model="account.bank.statement.line" - t-att-data-domain="[('id','in', values.get('variation').ids)]" - data-views='[[0, "list"], [0, "pivot"], [0, "graph"], [0, "form"]]' - tabindex="-1" - > + <p class="display-6"> + <t + t-out="sum(values.get('variation').mapped('amount'))" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + + </p> + </a> + </div> + <div + class="tab-pane fade" + id="inout" + role="tabpanel" + aria-labelledby="inout-tab" + > + <div class="row"> + <div class="col-6"> + <p><strong + >Encaissé</strong></p> <p class="display-6"> <t - t-out="sum(values.get('variation').mapped('amount'))" + t-out="sum(values.get('in').mapped('amount'))" + t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" + /> + </p> + </div> + <div class="col-6"> + <p><strong + >Décaissé</strong></p> + <p class="display-6"> + <t + t-out="sum(values.get('out').mapped('amount'))" t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" /> - </p> - </a> - </div> - <div - class="tab-pane fade" - id="inout" - role="tabpanel" - aria-labelledby="inout-tab" - > - <div class="row"> - <div class="col-6"> - <p><strong - >Encaissé</strong></p> - <p class="display-6"> - <t - t-out="sum(values.get('in').mapped('amount'))" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </p> - </div> - <div class="col-6"> - <p><strong - >Décaissé</strong></p> - <p class="display-6"> - <t - t-out="sum(values.get('out').mapped('amount'))" - t-options="{'widget': 'monetary', 'display_currency': values['company_id'].currency_id}" - /> - </p> - </div> </div> </div> </div>