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="Submited 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)"/></h1>
58 <label for="date_from" class="oe_edit_only" string="Timesheet Period"/>
59 <h2>From <field name="date_from"/> to <field name="date_to"/></h2>
63 <field name="department_id"/>
64 <field name="company_id" groups="base.group_multi_company"/>
67 <field name="total_attendance" widget="float_time"/>
68 <field name="total_timesheet" widget="float_time"/>
69 <field name="total_difference" widget="float_time"/>
70 <field name="user_id" invisible="1"/>
77 <button name="button_dummy" class="oe_inline" string="Go to" type="object" icon="terp-gtk-jump-to-ltr"/> :
78 <field name="date_current" class="oe_inline"/>
81 <button class="oe_inline" icon="terp-gtk-go-back-ltr" name="date_previous" string="" type="object"/>
82 <button class="oe_inline" name="date_today" string="Today" type="object" icon="terp-go-today"/>
83 <button class="oe_inline" icon="terp-gtk-go-back-rtl" name="date_next" string="" type="object"/>
86 <group colspan="4" col="3">
87 <field context="{'name':date_current,'user_id':user_id}" name="attendances_ids" nolabel="1">
88 <tree string="Attendances" editable="bottom">
90 <field name="action"/>
91 <field invisible="1" name="employee_id"/>
96 <button name="sign_in" string="Sign In" type="object" icon="terp-gtk-jump-to-ltr"/>
97 <button name="sign_out" string="Sign Out" type="object" icon="terp-gtk-jump-to-rtl"/>
102 <field name="state_attendance"/>
104 <field colspan="4" context="{'date':date_current,'user_id':user_id}" domain="[('name','=',date_current)]" name="timesheet_ids" nolabel="1">
105 <tree editable="top" string="Timesheet Lines">
106 <field invisible="1" name="date"/>
107 <field domain="[('type','in',['normal', 'contract']), ('state', '<>', 'close'),('use_timesheets','=',1)]" name="account_id" on_change="on_change_account_id(account_id)" context="{'default_use_timesheets': 1}"/>
109 <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
110 <field name="to_invoice" widget="selection"/>
111 <field invisible="1" name="journal_id"/>
112 <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)"/>
113 <field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
114 <field invisible="1" name="amount"/>
115 <field invisible="1" name="general_account_id"/>
116 <field invisible="1" name="user_id" required="1"/>
118 <form string="Timesheet Lines" version="7.0">
120 <field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/>
122 <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
123 <field name="to_invoice"/>
124 <field name="journal_id"/>
125 <field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
126 <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
127 <field name="amount"/>
128 <field name="general_account_id"/>
129 <field name="user_id" required="1"/>
133 <page string="Summary">
134 <field colspan="4" name="period_ids" nolabel="1">
135 <tree colors="red:total_difference<0.1;blue:total_difference>=0.1" string="Period">
137 <field name="total_attendance" widget="float_time"/>
138 <field name="total_timesheet" widget="float_time"/>
139 <field name="total_difference" widget="float_time"/>
149 <record id="view_hr_timesheet_sheet_filter" model="ir.ui.view">
150 <field name="name">hr_timesheet_sheet.sheet.filter</field>
151 <field name="model">hr_timesheet_sheet.sheet</field>
152 <field name="arch" type="xml">
153 <search string="Search Timesheet">
154 <field name="date_from"/>
155 <filter icon="terp-document-new" string="In Draft" domain="[('state','in',('draft', 'new'))]" help="Unvalidated Timesheets"/>
156 <filter icon="terp-camera_test" string="To Approve" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
157 <field name="employee_id"/>
158 <field name="department_id"/>
159 <group expand="0" string="Group By...">
160 <filter string="Employees" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
161 <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
167 <record id="act_hr_timesheet_sheet_form" model="ir.actions.act_window">
168 <field name="name">Timesheets</field>
169 <field name="type">ir.actions.act_window</field>
170 <field name="res_model">hr_timesheet_sheet.sheet</field>
171 <field name="view_type">form</field>
172 <field name="view_id" eval="False"/>
173 <field name="context">{'search_default_my_timesheet':1}</field>
174 <field name="search_view_id" ref="view_hr_timesheet_sheet_filter"/>
175 <field name="help" type="html">
176 <p class="oe_view_nocontent_create">
177 Click to go to your timesheet.
179 You must record timesheets every day and confirm at the end
180 of the week. Once the timesheet is confirmed, it his sent to
181 the manager for validation.
183 Timesheets can also be invoiced to customers, depending on the
184 configuration of the project.
189 <menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="hr_attendance.menu_hr_time_tracking"
190 sequence="2" groups="base.group_hr_user,base.group_hr_manager"/>
196 <record id="hr_timesheet_sheet_company" model="ir.ui.view">
197 <field name="name">res.company.sheet</field>
198 <field name="model">res.company</field>
199 <field name="inherit_id" ref="base.view_company_form"/>
200 <field name="arch" type="xml">
201 <xpath expr="//group[@name='account_grp']" position="after">
202 <group name="timesheets_grp" string="Timesheets">
203 <field name="timesheet_range"/>
204 <field name="timesheet_max_difference"/>
211 hr.analytic.timesheet inheritancy
214 <record id="hr_timesheet_line_form" model="ir.ui.view">
215 <field name="name">hr.analytic.timesheet.form</field>
216 <field name="model">hr.analytic.timesheet</field>
217 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/>
218 <field name="arch" type="xml">
219 <field name="date" position="after">
220 <field name="sheet_id" />
225 <record id="hr_timesheet_line_search" model="ir.ui.view">
226 <field name="name">hr.analytic.timesheet.search</field>
227 <field name="model">hr.analytic.timesheet</field>
228 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_search"/>
229 <field name="arch" type="xml">
230 <field name="date" position="before">
231 <field name="sheet_id"/>
237 hr.attendance inheritancy
240 <record model="ir.ui.view" id="view_hr_attendance_filter">
241 <field name="name">view_hr_attendance_filter</field>
242 <field name="model">hr.attendance</field>
243 <field name="inherit_id" ref="hr_attendance.view_hr_attendance_filter" />
244 <field name="arch" type="xml">
245 <field name="employee_id" position="after">
246 <field name="sheet_id"/>
251 <record id="view_attendance_form" model="ir.ui.view">
252 <field name="name">hr.attendance.form</field>
253 <field name="model">hr.attendance</field>
254 <field name="inherit_id" ref="hr_attendance.view_attendance_form"/>
255 <field name="arch" type="xml">
256 <field name="action_desc" position="after">
257 <field name="sheet_id"/>
261 <record id="view_attendance_tree" model="ir.ui.view">
262 <field name="name">hr.attendance.tree</field>
263 <field name="model">hr.attendance</field>
264 <field name="inherit_id" ref="hr_attendance.view_attendance_tree"/>
265 <field name="arch" type="xml">
266 <field name="action" position="after">
267 <field name="sheet_id"/>
271 <record id="view_attendance_tree_who" model="ir.ui.view">
272 <field name="name">hr.attendance.tree</field>
273 <field name="model">hr.attendance</field>
274 <field name="inherit_id" ref="hr_attendance.view_attendance_who"/>
275 <field name="arch" type="xml">
276 <field name="action" position="after">
277 <field name="sheet_id"/>
283 context="{'search_default_sheet_id': [active_id]}"
284 id="act_hr_timesheet_sheet_sheet_by_account"
285 name="Timesheet by Account"
286 res_model="hr_timesheet_sheet.sheet.account"
287 src_model="hr_timesheet_sheet.sheet"/>
290 context="{'search_default_sheet_id': [active_id]}"
291 id="act_hr_timesheet_sheet_sheet_by_day"
292 name="Timesheet by Day"
293 res_model="hr_timesheet_sheet.sheet.day"
294 src_model="hr_timesheet_sheet.sheet"/>
297 context="{'search_default_sheet_id': [active_id]}"
298 id="act_hr_timesheet_sheet_sheet_2_hr_analytic_timesheet"
299 name="Timesheet Lines"
300 res_model="hr.analytic.timesheet"
301 src_model="hr_timesheet_sheet.sheet"/>
305 context="{'search_default_sheet_id': [active_id]}"
306 id="act_hr_timesheet_sheet_sheet_2_hr_attendance"
308 res_model="hr.attendance"
309 src_model="hr_timesheet_sheet.sheet"/>
311 <record id="hr_timesheet_sheet_tree_simplified" model="ir.ui.view">
312 <field name="name">hr.timesheet.sheet.tree</field>
313 <field name="model">hr_timesheet_sheet.sheet</field>
314 <field eval="10" name="priority"/>
315 <field name="arch" type="xml">
316 <tree colors="blue:state == 'draft';black:state in ('confirm','new');gray:state == 'done'" string="Timesheets">
317 <field name="employee_id"/>
318 <field name="date_from"/>
319 <field name="date_to"/>
320 <field name="department_id"/>
321 <field name="total_attendance" widget="float_time"/>
322 <field name="total_timesheet" widget="float_time"/>
323 <field name="total_difference" widget="float_time"/>
324 <field name="state"/>
329 <record id="hr_timesheet_day_tree" model="ir.ui.view">
330 <field name="name">hr.timesheet.day.tree</field>
331 <field name="model">hr_timesheet_sheet.sheet.day</field>
332 <field name="arch" type="xml">
333 <tree colors="blue:total_difference<0.1;red:total_difference>=0.1" string="Period">
335 <field name="total_attendance" widget="float_time" sum="Total Attendances"/>
336 <field name="total_timesheet" widget="float_time" sum="Total Timesheet"/>
337 <field name="total_difference" widget="float_time" sum="Total Difference"/>
342 <!-- Timesheet Button on Employee Form -->
344 context="{'search_default_employee_id': [active_id], 'default_employee_id': active_id}"
345 id="act_hr_employee_2_hr_timesheet" name="Timesheets" res_model="hr_timesheet_sheet.sheet" src_model="hr.employee"/>
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"/>