Refactor the Edit Time Sheet view for "autocommit" mode
I.e. instead of letting changes queue up for "batch" mode, immediately flush changes to server after each edit.
This commit is contained in:
parent
d21c8bcaeb
commit
7ca03df04d
5 changed files with 309 additions and 26 deletions
|
@ -28,6 +28,8 @@ from __future__ import unicode_literals, absolute_import
|
|||
|
||||
import datetime
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from rattail import enum
|
||||
from rattail.db import model, api
|
||||
from rattail.time import localtime, make_utc, get_sunday
|
||||
|
@ -350,13 +352,21 @@ class TimeSheetView(View):
|
|||
max_time = localtime(self.rattail_config, datetime.datetime.combine(weekdays[-1] + datetime.timedelta(days=1), datetime.time(0)))
|
||||
shifts = Session.query(cls)\
|
||||
.filter(cls.employee_uuid.in_([e.uuid for e in employees]))\
|
||||
.filter(cls.start_time >= make_utc(min_time))\
|
||||
.filter(cls.start_time < make_utc(max_time))\
|
||||
.filter(sa.or_(
|
||||
sa.and_(
|
||||
cls.start_time >= make_utc(min_time),
|
||||
cls.start_time < make_utc(max_time),
|
||||
),
|
||||
sa.and_(
|
||||
cls.start_time == None,
|
||||
cls.end_time >= make_utc(min_time),
|
||||
cls.end_time < make_utc(max_time),
|
||||
)))\
|
||||
.all()
|
||||
|
||||
for employee in employees:
|
||||
employee_shifts = sorted([s for s in shifts if s.employee_uuid == employee.uuid],
|
||||
key=lambda s: s.start_time)
|
||||
key=lambda s: s.start_time or s.end_time)
|
||||
if not hasattr(employee, 'weekdays'):
|
||||
employee.weekdays = [{} for day in weekdays]
|
||||
setattr(employee, '{}_hours'.format(shift_type), datetime.timedelta(0))
|
||||
|
|
|
@ -97,10 +97,20 @@ class TimeSheetView(BaseTimeSheetView):
|
|||
shift = Session.query(model.WorkedShift).get(uuid)
|
||||
assert shift
|
||||
updated[uuid] = shift
|
||||
start_time = datetime.datetime.strptime(data['start_time'][uuid], time_format)
|
||||
shift.start_time = make_utc(localtime(self.rattail_config, start_time))
|
||||
end_time = datetime.datetime.strptime(data['end_time'][uuid], time_format)
|
||||
shift.end_time = make_utc(localtime(self.rattail_config, end_time))
|
||||
|
||||
start_time = data['start_time'][uuid] or None
|
||||
if start_time:
|
||||
start_time = datetime.datetime.strptime(start_time, time_format)
|
||||
shift.start_time = make_utc(localtime(self.rattail_config, start_time))
|
||||
else:
|
||||
shift.start_time = None
|
||||
|
||||
end_time = data['end_time'][uuid] or None
|
||||
if end_time:
|
||||
end_time = datetime.datetime.strptime(end_time, time_format)
|
||||
shift.end_time = make_utc(localtime(self.rattail_config, end_time))
|
||||
else:
|
||||
shift.end_time = None
|
||||
|
||||
self.request.session.flash("Changes were applied: created {}, updated {}, "
|
||||
"deleted {} Worked Shifts".format(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue