You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.2 KiB
56 lines
2.2 KiB
# -*- coding: utf8 -*-
|
|
from datetime import datetime
|
|
from itertools import groupby
|
|
from openerp import http
|
|
from openerp.http import request
|
|
|
|
from openerp.addons.beesdoo_shift.models.planning import float_to_time
|
|
|
|
class ShiftPortalController(http.Controller):
|
|
|
|
@http.route('/shift_irregular_worker', auth='public', website=True)
|
|
def shift_irregular_worker(self, **kwargs):
|
|
# Get all the shifts in the future with no worker
|
|
now = datetime.now()
|
|
shifts = request.env['beesdoo.shift.shift'].sudo().search(
|
|
[('start_time', '>', now.strftime("%Y-%m-%d %H:%M:%S")),
|
|
('worker_id', '=', False)],
|
|
order="start_time, task_template_id, task_type_id",
|
|
)
|
|
|
|
# Grouby task_template_id, if no task_template_id is specified
|
|
# then group by start_time
|
|
groupby_func = lambda s: (s.task_template_id, s.start_time, s.task_type_id)
|
|
groupby_iter = groupby(shifts, groupby_func)
|
|
|
|
shifts_and_count = []
|
|
for (keys, grouped_shifts) in groupby_iter:
|
|
(task_template, _, _) = keys
|
|
s = list(grouped_shifts)
|
|
free_space = len(s)
|
|
# Among shifts with at least 5 worker max, shows only shifts
|
|
# where there is at least two free spaces
|
|
if task_template.worker_nb > 5 and free_space >= 2:
|
|
shifts_and_count.append([free_space, s[0]])
|
|
# Show available shifts if there is less than 5 worker max
|
|
if task_template.worker_nb <= 5:
|
|
shifts_and_count.append([free_space, s[0]])
|
|
|
|
return request.render('beesdoo_website_shift.shift_template',
|
|
{
|
|
'shift_templates': shifts_and_count
|
|
}
|
|
)
|
|
|
|
@http.route('/shift_template_regular_worker', auth='public', website=True)
|
|
def shift_template_regular_worker(self, **kwargs):
|
|
# Get all the task template
|
|
template = request.env['beesdoo.shift.template']
|
|
task_templates = template.sudo().search([], order="planning_id, day_nb_id, start_time")
|
|
|
|
return request.render('beesdoo_website_shift.task_template',
|
|
{
|
|
'task_templates': task_templates,
|
|
'float_to_time': float_to_time
|
|
}
|
|
)
|