diff --git a/__manifest__.py b/__manifest__.py index 1c2bd98bf930b9cf2a22888a3adcd1325ccc1106..38e1d02b81d647a90b8899e342abab301df5a14c 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -6,9 +6,10 @@ 'version': '14.0.1.0.1', 'license': "AGPL-3", 'category': 'Sale Management', - 'depends': ['sale_timesheet', 'project'], + 'depends': ['sale_timesheet', 'project', 'hr_timesheet'], 'data': [ 'views/res_config_settings_view.xml', 'views/sale_view.xml', + 'views/hr_timesheet_templates.xml', ], } diff --git a/models/project_overview.py b/models/project_overview.py index daf22435816978745b20457dd7059a30f1224611..7c9e087eafc3a043a6b6601d0b5900ea865ee46a 100644 --- a/models/project_overview.py +++ b/models/project_overview.py @@ -96,7 +96,7 @@ class Project(models.Model): } ] + default_row_vals[:] # ***** Modif Filament ***** - rows_sale_line[sale_line_row_key][-2] = ( + rows_sale_line[sale_line_row_key][-2] = rows_sale_line[sale_line_row_key][-1] =( sale_line.product_uom_qty * sale_line.price_unit / sale_line.taux_horaire diff --git a/views/hr_timesheet_templates.xml b/views/hr_timesheet_templates.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b8df4da14921432831df1793a27b2ba628ecb61 --- /dev/null +++ b/views/hr_timesheet_templates.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="timesheet_plan_ecozimut" model="ir.ui.view"> + <field name="name">Timesheet Plan ecozimut</field> + <field name="type">qweb</field> + <field name="model">project.project</field> + <field name="inherit_id" ref="sale_timesheet.timesheet_plan"/> + <field name="arch" type="xml"> + <xpath expr="//div[@class='o_project_plan_project_timesheet_forecast']" position="replace"> + <div class="o_project_plan_project_timesheet_forecast"> + <t t-if="timesheet_forecast_table and timesheet_forecast_table['rows']"> + <div class="table-responsive"> + <table class="table"> + <thead> + <tr> + <th></th> + <th colspan="5" id="table_plan_title" class="o_right_bordered"><h3>Timesheets</h3></th> + <th colspan="2" id="table_plan_total"></th> + </tr> + <tr> + <t t-foreach="timesheet_forecast_table['header']" t-as="header_val"> + <th t-att-class="'o_right_bordered' if header_val_index in [5,10] else ''"> + <span t-att-title="header_val['tooltip']"><t t-esc="header_val['label']"/></span> + </th> + </t> + </tr> + </thead> + <tbody> + <t t-set="row_is_milestone" t-value="False"/> + <t t-set="current_order" t-value="False"/> + <t t-set="current_order_line" t-value="False"/> + <t t-foreach="timesheet_forecast_table['rows']" t-as="row"> + <t t-set="row_type" t-value="row[0].get('type')"/> + <t t-if="row_type == 'sale_order_line'"> + <t t-set="row_is_milestone" t-value="row[0].get('is_milestone')"/> + </t> + <t t-if="row_type == 'sale_order'"> + <t t-set="current_order" t-value="False"/> + <t t-set="current_order_line" t-value="False"/> + </t> + <t t-if="row_type == 'sale_order_line'"> + <t t-set="current_order_line" t-value="False"/> + </t> + <t t-set="foldable" t-value="row[0].get('has_children')"/> + <tr t-att-class="'o_timesheet_forecast_' + row_type + ' sale_order_' + str(current_order) + ' sale_order_line_' + str(current_order_line)" + t-att-style="'display: none;' if row_type not in ('sale_order', 'sale_order_line') else ''"> + <t t-foreach="row" t-as="row_value"> + <td t-att-class="'o_right_bordered' if row_value_index in [5,10] else '' + ' text-center' if row_value_index != 0 else ''"> + <t t-if="row_value_index == 0"> + <span t-if="foldable" t-att-class="('fa fa-caret-down' if row_type == 'sale_order' else 'fa fa-caret-right') + (' project_overview_foldable' if foldable else '')" + style="cursor: pointer;" t-att-data-model="row[0].get('res_model')" t-att-data-res-id="row[0].get('res_id')"/> + <t t-if="row_type == 'sale_order'"> + <t t-if="env.user.has_group('sales_team.group_sale_salesman')"> + <a type="action" t-att-data-model="row_value['res_model']" t-att-data-res-id="row_value['res_id']" t-att-class="'o_timesheet_plan_redirect' if row_value['res_id'] else ''"> + <t t-esc="row_value.get('label')"/> + </a> + </t> + <t t-else=""> + <t t-esc="row_value.get('label')"/> + </t> + <span t-if="row_value.get('canceled')" class="badge badge-pill o_canceled_tag"> + Cancelled + </span> + </t> + <t t-if="row_type != 'sale_order'"> + <t t-if="not row_is_milestone"> + <span><t t-esc="row_value.get('label')"/></span> + </t> + <t t-if="row_is_milestone"> + <span><i><t t-esc="row_value.get('label')"/></i></span> + </t> + </t> + </t> + <t t-if="row_value_index != 0"> + <t t-if="row_value_index < len(row)-2"> + <t t-if="row_is_milestone"> + <i t-att-class="'text-muted' if not row_value else ''"> + <t t-if="is_uom_day" t-esc="row_value" t-options="{'widget': 'timesheet_uom'}"/> + <t t-else="" t-esc="row_value" t-options="{'widget': 'float_time'}"/> + </i> + </t> + <t t-else=""> + <span t-att-class="'text-muted' if not row_value else ''"> + <t t-if="is_uom_day" t-esc="row_value" t-options="{'widget': 'timesheet_uom'}"/> + <t t-else="" t-esc="row_value" t-options="{'widget': 'float_time'}"/> + </span> + </t> + </t> + <t t-else=""> +<!-- Modif ici pour afficher toute les lignes--> + <t t-if="not row[0].get('type') == 'hr_employee'"> + <span t-att-class="'text-muted' if not row_value else ''"> + <t t-if="is_uom_day" t-esc="row_value" t-options="{'widget': 'timesheet_uom'}"/> + <t t-else="" t-esc="row_value" t-options="{'widget': 'float_time'}"/> + </span> + </t> + </t> + </t> + </td> + </t> + </tr> + <t t-if="row_type == 'sale_order_line'"> + <t t-set="current_order_line" t-value="row[0].get('res_id')"/> + </t> + <t t-if="row_type == 'sale_order'"> + <t t-set="current_order" t-value="row[0].get('res_id')"/> + </t> + </t> + </tbody> + </table> + </div> + </t> + </div> + </xpath> + </field> + </record> +</odoo>