Skip to content

Commit c1250b4

Browse files
Merge pull request #77 from hbrunn/14.0-542-reset-overtime-balance
[ADD] #542 wizard to reset overtime balance
2 parents 3184763 + 02ad579 commit c1250b4

File tree

6 files changed

+112
-0
lines changed

6 files changed

+112
-0
lines changed

ps_timesheet_invoicing/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"security/ir.model.access.csv",
4444
"wizard/time_line_invoice.xml",
4545
"wizard/change_chargecode_view.xml",
46+
"wizard/ps_reset_overtime.xml",
4647
"wizard/hr_employee_wizard.xml",
4748
"report/hr_chargeability_report.xml",
4849
"report/report_invoice.xml",

ps_timesheet_invoicing/security/ir.model.access.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ access_change_chargecode,access_change_chargecode,model_change_chargecode,group_
1717
access_hr_timesheet_current_open,access_hr_timesheet_current_open,model_hr_timesheet_current_open,base.group_user,1,1,1,1
1818
fleet_vehicle_driver_user,fleet_vehicle_driver_user,model_fleet_vehicle_driver,fleet.fleet_group_user,1,0,0,0
1919
fleet_vehicle_driver_manager,fleet_vehicle_driver_manager,model_fleet_vehicle_driver,fleet.fleet_group_manager,1,1,1,1
20+
access_ps_reset_overtime,access_ps_reset_overtime,model_ps_reset_overtime,group_reset_overtime,1,1,1,1

ps_timesheet_invoicing/security/ps_security.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@
5959
/>
6060
<field name="domain_force">[(1,'=',1)]</field>
6161
</record>
62+
<record id="group_reset_overtime" model="res.groups">
63+
<field name="name">Reset overtime balance</field>
64+
<field name="users" eval="[(4, ref('base.user_admin'))]" />
65+
</record>
6266
<!-- default settings /-->
6367
<record id="base.user_admin" model="res.users">
6468
<field

ps_timesheet_invoicing/wizard/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
from . import time_line_invoice
33
from . import change_chargecode
44
from . import hr_employee_wizard
5+
from . import ps_reset_overtime
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from datetime import timedelta
2+
3+
from odoo import _, fields, models
4+
5+
6+
class PsResetOvertime(models.TransientModel):
7+
_name = "ps.reset.overtime"
8+
_description = "Reset overtime for employee"
9+
10+
date = fields.Date(
11+
"Reset date",
12+
default=fields.Date.today().replace(month=1, day=1) - timedelta(days=1),
13+
required=True,
14+
)
15+
16+
def action_reset_overtime(self):
17+
PsTimeLine = self.env["ps.time.line"]
18+
OvertimeBalanceReport = self.env["overtime.balance.report"]
19+
employees = self.env["hr.employee"].browse(
20+
self.env.context.get("active_ids", [])
21+
)
22+
uom_hour = self.env.ref("uom.product_uom_hour")
23+
created_lines = PsTimeLine.browse([])
24+
for overtime_data in OvertimeBalanceReport.read_group(
25+
[
26+
("date", "<=", self.date),
27+
("user_id.employee_ids", "in", employees.ids),
28+
],
29+
["user_id"],
30+
["user_id", "overtime_balanced"],
31+
orderby="date",
32+
lazy=False,
33+
):
34+
if not overtime_data["overtime_balanced"]:
35+
continue
36+
user_id = overtime_data["user_id"][0]
37+
ps_time_line = PsTimeLine.search(
38+
[
39+
(
40+
"id",
41+
"in",
42+
OvertimeBalanceReport.search(overtime_data["__domain"]).ids,
43+
),
44+
("project_id.overtime_hrs", "=", True),
45+
],
46+
limit=1,
47+
) or PsTimeLine.search(
48+
[("user_id", "=", user_id), ("project_id.overtime_hrs", "=", True)],
49+
limit=1,
50+
)
51+
overtime_project = ps_time_line.project_id or self.env[
52+
"project.project"
53+
].search([("project_id.overtime_hrs", "=", True)], limit=1)
54+
overtime_project_task = ps_time_line.task_id
55+
created_lines += PsTimeLine.create(
56+
{
57+
"name": _("Reset Overtime"),
58+
"account_id": overtime_project.analytic_account_id.id,
59+
"project_id": overtime_project.id,
60+
"task_id": overtime_project_task.id,
61+
"date": self.date,
62+
"unit_amount": -overtime_data["overtime_balanced"],
63+
"product_uom_id": uom_hour.id,
64+
"ot": True,
65+
"user_id": user_id,
66+
}
67+
)
68+
69+
return {
70+
"type": "ir.actions.act_window",
71+
"name": _("Created lines"),
72+
"res_model": PsTimeLine._name,
73+
"views": [(False, "tree")],
74+
"domain": [("id", "in", created_lines.ids)],
75+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<odoo>
2+
<record id="view_ps_reset_overtime_form" model="ir.ui.view">
3+
<field name="model">ps.reset.overtime</field>
4+
<field name="arch" type="xml">
5+
<form>
6+
<group>
7+
<field name="date" />
8+
</group>
9+
<footer>
10+
<button
11+
type="object"
12+
name="action_reset_overtime"
13+
class="btn btn-primary"
14+
string="Reset overtime"
15+
/>
16+
or
17+
<button special="cancel" string="Cancel" class="oe_link" />
18+
</footer>
19+
</form>
20+
</field>
21+
</record>
22+
<record model="ir.actions.act_window" id="action_ps_reset_overtime">
23+
<field name="name">Reset overtime</field>
24+
<field name="res_model">ps.reset.overtime</field>
25+
<field name="view_mode">form</field>
26+
<field name="target">new</field>
27+
<field name="groups_id" eval="[(4,ref('group_reset_overtime'))]" />
28+
<field name="binding_model_id" ref="hr.model_hr_employee" />
29+
</record>
30+
</odoo>

0 commit comments

Comments
 (0)