1 <?xml version="1.0" encoding="utf-8"?>
5 <record id="hr_timesheet_account_form" model="ir.ui.view">
6 <field name="name">hr.timesheet.account.form</field>
7 <field name="model">hr_timesheet_sheet.sheet.account</field>
8 <field name="arch" type="xml">
9 <form string="Timesheet by Accounts" version="7.0">
11 <field name="sheet_id"/>
12 <field name="name" groups="analytic.group_analytic_accounting"/>
13 <field name="total" sum="Total"/>
14 <field name="invoice_rate"/>
19 <record id="hr_timesheet_account_filter" model="ir.ui.view">
20 <field name="name">hr.timesheet.account.filter</field>
21 <field name="model">hr_timesheet_sheet.sheet.account</field>
22 <field name="arch" type="xml">
23 <search string="Search Account">
24 <field name="name" groups="analytic.group_analytic_accounting"/>
25 <field name="invoice_rate"/>
26 <field name="sheet_id" />
30 <record id="hr_timesheet_account_tree" model="ir.ui.view">
31 <field name="name">hr.timesheet.account.tree</field>
32 <field name="model">hr_timesheet_sheet.sheet.account</field>
33 <field name="arch" type="xml">
34 <tree string="Timesheet by Accounts">
35 <field name="sheet_id"/>
36 <field name="name" groups="analytic.group_analytic_accounting"/>
37 <field name="total" sum="Total"/>
38 <field name="invoice_rate"/>
43 <record id="hr_timesheet_sheet_form" model="ir.ui.view">
44 <field name="name">hr.timesheet.sheet.form</field>
45 <field name="model">hr_timesheet_sheet.sheet</field>
46 <field name="arch" type="xml">
47 <form string="Timesheet" version="7.0">
49 <button name="button_confirm" states="draft" string="Submit to Manager" type="object" class="oe_highlight"/>
50 <button name="done" states="confirm" string="Approve" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
51 <button name="action_set_to_draft" states="done" string="Set to Draft" type="object" />
52 <button name="cancel" states="confirm" string="Refuse" type="workflow" groups="base.group_hr_user" />
53 <field name="state" widget="statusbar" statusbar_visible="new,confirm,done"/>
56 <label for="employee_id" class="oe_edit_only"/>
57 <h1><field name="employee_id" on_change="onchange_employee_id(employee_id)" class="oe_inline"/></h1>
60 <label for="date_from" string="Timesheet Period"/>
61 <div><field name="date_from" class="oe_inline"/> to <field name="date_to" class="oe_inline"/></div>
62 <field name="name" invisible="1"/>
63 <field name="department_id" invisible="1"/>
64 <field name="company_id" groups="base.group_multi_company"/>
67 <field name="total_attendance" widget="float_time" groups="base.group_hr_attendance"/>
68 <field name="total_timesheet" widget="float_time" groups="base.group_hr_attendance"/>
69 <field name="total_difference" widget="float_time" groups="base.group_hr_attendance"/>
70 <field name="user_id" invisible="1"/>
74 <page string="Weekly">
75 <widget type="weekly_timesheet">
79 <group groups="base.group_hr_attendance">
80 <field context="{'user_id':user_id}" name="attendances_ids" nolabel="1">
81 <tree string="Attendances" editable="bottom">
83 <field name="action"/>
84 <field invisible="1" name="employee_id"/>
88 <field name="state_attendance" nolabel="1"/>
89 <div align="right" groups="base.group_hr_manager">
90 <button name="attendance_action_change" attrs="{'invisible': [('state_attendance', '=', 'present')]}" type="object" string="Sign In"/>
91 <button name="attendance_action_change" attrs="{'invisible': ['|', ('state_attendance','=',False), ('state_attendance', '=', 'absent')]}" type="object" string="Sign Out"/>
95 <field context="{'user_id':user_id}" name="timesheet_ids" nolabel="1">
96 <tree editable="top" string="Timesheet Lines">
98 <field domain="[('type','in',['normal', 'contract']), ('state', '<>', 'close'),('use_timesheets','=',1)]" name="account_id" on_change="on_change_account_id(account_id, user_id)" context="{'default_use_timesheets': 1}"/>
100 <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time" string="Hours"/>
101 <field name="to_invoice" widget="selection"/>
102 <field invisible="1" name="journal_id"/>
103 <field invisible="1" name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
104 <field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
105 <field invisible="1" name="amount"/>
106 <field invisible="1" name="general_account_id"/>
107 <field invisible="1" name="user_id" required="1"/>
109 <form string="Timesheet Lines" version="7.0">
111 <field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id, user_id)"/>
113 <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
114 <field name="to_invoice"/>
115 <field name="journal_id"/>
116 <field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
117 <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
118 <field name="amount"/>
119 <field name="general_account_id"/>
120 <field name="user_id" required="1"/>
124 <page string="Summary" groups="base.group_hr_attendance">
125 <field name="period_ids">
126 <tree colors="red:total_difference<0.1;blue:total_difference>=0.1" string="Period">
128 <field name="total_attendance" widget="float_time"/>
129 <field name="total_timesheet" widget="float_time"/>
130 <field name="total_difference" widget="float_time"/>
136 <div class="oe_chatter">
137 <field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
138 <field name="message_follower_ids" widget="mail_followers"/>
144 <record id="view_hr_timesheet_sheet_filter" model="ir.ui.view">
145 <field name="name">hr_timesheet_sheet.sheet.filter</field>
146 <field name="model">hr_timesheet_sheet.sheet</field>
147 <field name="arch" type="xml">
148 <search string="Search Timesheet">
149 <field name="date_from"/>
150 <filter icon="terp-document-new" string="In Draft" domain="[('state','in',('draft', 'new'))]" help="Unvalidated Timesheets"/>
151 <filter icon="terp-camera_test" string="To Approve" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
152 <field name="employee_id"/>
153 <field name="department_id"/>
154 <group expand="0" string="Group By...">
155 <filter string="Employees" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
156 <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
162 <record id="act_hr_timesheet_sheet_form" model="ir.actions.act_window">
163 <field name="name">Timesheets</field>
164 <field name="type">ir.actions.act_window</field>
165 <field name="res_model">hr_timesheet_sheet.sheet</field>
166 <field name="view_type">form</field>
167 <field name="view_id" eval="False"/>
168 <field name="context">{'search_default_my_timesheet':1}</field>
169 <field name="search_view_id" ref="view_hr_timesheet_sheet_filter"/>
170 <field name="help" type="html">
171 <p class="oe_view_nocontent_create">
172 Click to go to your timesheet.
174 You must record timesheets every day and confirm at the end
175 of the week. Once the timesheet is confirmed, it his sent to
176 the manager for validation.
178 Timesheets can also be invoiced to customers, depending on the
179 configuration of the project.
184 <menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="hr_attendance.menu_hr_time_tracking"
185 sequence="2" groups="base.group_hr_user"/>
191 <record id="hr_timesheet_sheet_company" model="ir.ui.view">
192 <field name="name">res.company.sheet</field>
193 <field name="model">res.company</field>
194 <field name="inherit_id" ref="base.view_company_form"/>
195 <field name="arch" type="xml">
196 <xpath expr="//group[@name='account_grp']" position="after">
197 <group name="timesheets_grp" string="Timesheets">
198 <field name="timesheet_range"/>
199 <field name="timesheet_max_difference"/>
206 hr.analytic.timesheet inheritancy
209 <record id="hr_timesheet_line_form" model="ir.ui.view">
210 <field name="name">hr.analytic.timesheet.form</field>
211 <field name="model">hr.analytic.timesheet</field>
212 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/>
213 <field name="arch" type="xml">
214 <field name="date" position="after">
215 <field name="sheet_id" />
220 <record id="hr_timesheet_line_search" model="ir.ui.view">
221 <field name="name">hr.analytic.timesheet.search</field>
222 <field name="model">hr.analytic.timesheet</field>
223 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_search"/>
224 <field name="arch" type="xml">
225 <field name="date" position="before">
226 <field name="sheet_id"/>
232 hr.attendance inheritancy
235 <record model="ir.ui.view" id="view_hr_attendance_filter">
236 <field name="name">view_hr_attendance_filter</field>
237 <field name="model">hr.attendance</field>
238 <field name="inherit_id" ref="hr_attendance.view_hr_attendance_filter" />
239 <field name="arch" type="xml">
240 <field name="employee_id" position="after">
241 <field name="sheet_id"/>
246 <record id="view_attendance_form" model="ir.ui.view">
247 <field name="name">hr.attendance.form</field>
248 <field name="model">hr.attendance</field>
249 <field name="inherit_id" ref="hr_attendance.view_attendance_form"/>
250 <field name="arch" type="xml">
251 <field name="action_desc" position="after">
252 <field name="sheet_id"/>
256 <record id="view_attendance_tree" model="ir.ui.view">
257 <field name="name">hr.attendance.tree</field>
258 <field name="model">hr.attendance</field>
259 <field name="inherit_id" ref="hr_attendance.view_attendance_tree"/>
260 <field name="arch" type="xml">
261 <field name="action" position="after">
262 <field name="sheet_id"/>
266 <record id="view_attendance_tree_who" model="ir.ui.view">
267 <field name="name">hr.attendance.tree</field>
268 <field name="model">hr.attendance</field>
269 <field name="inherit_id" ref="hr_attendance.view_attendance_who"/>
270 <field name="arch" type="xml">
271 <field name="action" position="after">
272 <field name="sheet_id"/>
278 context="{'search_default_sheet_id': [active_id]}"
279 id="act_hr_timesheet_sheet_sheet_by_account"
280 name="Timesheet by Account"
281 res_model="hr_timesheet_sheet.sheet.account"
282 src_model="hr_timesheet_sheet.sheet"/>
285 context="{'search_default_sheet_id': [active_id]}"
286 id="act_hr_timesheet_sheet_sheet_by_day"
287 name="Timesheet by Day"
288 res_model="hr_timesheet_sheet.sheet.day"
289 src_model="hr_timesheet_sheet.sheet"/>
292 context="{'search_default_sheet_id': [active_id]}"
293 id="act_hr_timesheet_sheet_sheet_2_hr_analytic_timesheet"
294 name="Timesheet Lines"
295 res_model="hr.analytic.timesheet"
296 src_model="hr_timesheet_sheet.sheet"/>
300 context="{'search_default_sheet_id': [active_id]}"
301 id="act_hr_timesheet_sheet_sheet_2_hr_attendance"
303 res_model="hr.attendance"
304 src_model="hr_timesheet_sheet.sheet"/>
306 <record id="hr_timesheet_sheet_tree_simplified" model="ir.ui.view">
307 <field name="name">hr.timesheet.sheet.tree</field>
308 <field name="model">hr_timesheet_sheet.sheet</field>
309 <field eval="10" name="priority"/>
310 <field name="arch" type="xml">
311 <tree colors="blue:state == 'draft';black:state in ('confirm','new');gray:state == 'done'" string="Timesheets">
312 <field name="employee_id"/>
313 <field name="date_from"/>
314 <field name="date_to"/>
315 <field name="department_id"/>
316 <field name="total_attendance" widget="float_time" groups="base.group_hr_attendance"/>
317 <field name="total_timesheet" widget="float_time"/>
318 <field name="total_difference" widget="float_time" groups="base.group_hr_attendance"/>
319 <field name="state"/>
324 <record id="hr_timesheet_day_tree" model="ir.ui.view">
325 <field name="name">hr.timesheet.day.tree</field>
326 <field name="model">hr_timesheet_sheet.sheet.day</field>
327 <field name="arch" type="xml">
328 <tree colors="blue:total_difference<0.1;red:total_difference>=0.1" string="Period">
330 <field name="total_attendance" widget="float_time" sum="Total Attendances" groups="base.group_hr_attendance"/>
331 <field name="total_timesheet" widget="float_time" sum="Total Timesheet"/>
332 <field name="total_difference" widget="float_time" sum="Total Difference" groups="base.group_hr_attendance"/>
337 <!-- Timesheet Button on Employee Form -->
339 <record id="act_hr_employee_2_hr_timesheet" model="ir.actions.act_window">
340 <field name="res_model">hr_timesheet_sheet.sheet</field>
341 <field name="view_type">form</field>
342 <field name="name">Timesheets</field>
343 <field name="view_mode">tree,form</field>
344 <field name="context">{'search_default_employee_id': [active_id], 'default_employee_id': active_id}</field>
347 <record id="hr_timesheet_sheet_employee_extd_form" model="ir.ui.view">
348 <field name="name">hr.timesheet.sheet.employee.extd_form</field>
349 <field name="model">hr.employee</field>
350 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_employee_extd_form"/>
351 <field name="arch" type="xml">
352 <xpath expr="//div[@name='button_box']" position="inside">
353 <button name="%(act_hr_employee_2_hr_timesheet)d" string="Timesheets" type="action" groups="base.group_hr_manager"/>