diff --git a/smash/web/api_urls.py b/smash/web/api_urls.py index 6d8aaccbd47fe0e59ba944584825cc8a16166024..11678a460f993510bb7765c697d5cfc65dbf6ad9 100644 --- a/smash/web/api_urls.py +++ b/smash/web/api_urls.py @@ -57,6 +57,13 @@ urlpatterns = [ # workers url(r'^workers/(?P<worker_role>[A-z]+)/$', worker.get_workers, name='web.api.workers'), + url(r'^workers/add_availability/(?P<worker_id>\d+)/(?P<weekday>[0-9])/(?P<start_hour>\d{2}:\d{2})/(?P<end_hour>\d{2}:\d{2})/$', + worker.add_worker_availability, name='web.api.workers.add_availability'), + + url(r'^workers/add_extra_availability/(?P<worker_id>\d+)/(?P<start_str_date>\d{4}-\d{2}-\d{2}-\d{2}-\d{2})/(?P<end_str_date>\d{4}-\d{2}-\d{2}-\d{2}-\d{2})/$', + worker.add_worker_extra_availability, name='web.api.workers.add_extra_availability'), + + # daily planning data url(r'^daily_planning/workers/$', worker.workers_for_daily_planning, name='web.api.workers.daily_planning'), url(r'^daily_planning/workers/availabilities$', worker.availabilities, diff --git a/smash/web/api_views/worker.py b/smash/web/api_views/worker.py index dd87beccf1351f016ffd5a45039d7ade62be42be..5410642249c13ef16c52397446130610ca199882 100644 --- a/smash/web/api_views/worker.py +++ b/smash/web/api_views/worker.py @@ -7,7 +7,8 @@ from django.utils import timezone from django.shortcuts import get_object_or_404 from web.models.constants import GLOBAL_STUDY_ID from web.api_views.daily_planning import get_workers_for_daily_planning, get_availabilities -from ..models import Worker +from ..models import Worker, Availability, Holiday +from web.models.constants import AVAILABILITY_EXTRA logger = logging.getLogger(__name__) @@ -95,6 +96,43 @@ def serialize_worker(worker): } return result +def add_worker_availability(request, worker_id, weekday, start_hour, end_hour): + + if worker_id is None or weekday is None or start_hour is None or end_hour is None: + context = { + 'status': '400', 'reason': 'Either worker_id, weekday, start_hour, end_hour or all of them are invalid.' + } + response = HttpResponse(json.dumps(context), content_type='application/json') + response.status_code = 400 + return response + + worker = get_object_or_404(Worker, id=int(worker_id)) + + availability, _ = Availability.objects.update_or_create(person=worker, day_number=weekday, + defaults={'available_from': start_hour, 'available_till': end_hour}) + availability.save() + + return JsonResponse({}, status=200) + +def add_worker_extra_availability(request, worker_id, start_str_date, end_str_date): + + if start_str_date is None or end_str_date is None or worker_id is None: + context = { + 'status': '400', 'reason': 'Either start_date, end_str_date, worker_id or all of them are invalid.' + } + response = HttpResponse(json.dumps(context), content_type='application/json') + response.status_code = 400 + return response + + start_date = datetime.datetime.strptime(start_str_date, "%Y-%m-%d-%H-%M").replace(tzinfo=timezone.now().tzinfo) + end_date = datetime.datetime.strptime(end_str_date, "%Y-%m-%d-%H-%M").replace(tzinfo=timezone.now().tzinfo) + worker = get_object_or_404(Worker, id=int(worker_id)) + + extra_availability, _ = Holiday.objects.update_or_create(person=worker, datetime_start=start_date, datetime_end=end_date, kind=AVAILABILITY_EXTRA) + extra_availability.save() + + return JsonResponse({}, status=200) + def get_worker_availability(request): start_str_date = request.GET.get("start_date") end_str_date = request.GET.get("end_date")