1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# -*- coding: utf-8 -*-
from openerp import api, models
import datetime
from datetime import date, timedelta
class ReportTimesheet(models.AbstractModel):
_name = 'report.coop_shift.report_timesheet'
@api.model
def check_partner_on_leave(self, partner, tocheck_date):
'''
@Function to check if a partner is on leave on specific date
Input:
- partner: A partner record
- tocheck_date: The date to check, expressed in string type under
format 'yyyy-mm-dd'
'''
found_leave = self.env['shift.leave'].search_count(
[('partner_id', '=', partner.id),
('state', '=', 'done'),
('start_date', '<=', tocheck_date),
('stop_date', '>=', tocheck_date)]
)
return found_leave > 0
@api.model
def _get_shifts(self, date_report, shifts):
if shifts:
shifts = self.env['shift.shift'].browse(shifts)
else:
if not date_report:
date_report = date.today().strftime("%Y-%m-%d")
date2 = datetime.datetime.strftime(
datetime.datetime.strptime(date_report, "%Y-%m-%d") +
timedelta(days=1), "%Y-%m-%d")
shifts = self.env['shift.shift'].search([
'&', ('date_begin', '>=', date_report),
('date_begin', '<', date2)])
result = []
for shift in shifts:
registrations = []
ftops = []
for reg in shift.registration_ids:
# Check if a partner is on leave on a report date
is_on_leave = self.check_partner_on_leave(
reg.partner_id, date_report)
if reg.shift_ticket_id.product_id == self.env.ref(
'coop_shift.product_product_shift_ftop'):
ftops.append([reg, is_on_leave])
else:
if reg.state != 'replacing':
registrations.append({
'registration': reg,
'is_on_leave': is_on_leave,
'replacement': reg.replacing_reg_id})
result.append({
'shift': shift,
'registrations': registrations,
'registration_number': len(registrations),
'ftop': ftops,
'ftop_number': len(ftops), })
return result
@api.multi
def render_html(self, data):
self.model = self.env.context.get('active_model')
docs = self.env[self.model].browse(self.env.context.get('active_id'))
date_report = \
data['form'].get('date_report', date.today().strftime("%Y-%m-%d"))
shifts = data['form'].get('shift_ids', [])
shifts_res = self.with_context(
data['form'].get('used_context', {}))._get_shifts(
date_report, shifts)
docargs = {
'doc_ids': self.ids,
'partner_id': self.env.user.partner_id,
'doc_model': self.model,
'data': data['form'],
'docs': docs,
'date': date,
'Shifts': shifts_res,
}
return self.env['report'].render(
'coop_shift.report_timesheet', docargs)