def stop(self, request): """ A method that stops meal session. --- parameters: - name: before_midday description: is the time before or after 12 noon? required: true type: boolean paramType: form - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = request.POST.get("before_midday") meal_in_progress = MealSession.in_progress() status = status_code.HTTP_200_OK if before_midday: content = {"status": "Breakfast stopped"} else: content = {"lunch": "Lunch stopped"} if meal_in_progress: meal_in_progress[0].status = False meal_in_progress[0].save() return Response(content, status=status)
def _complete_meal_session_construction_and_save(self, meal_sessions, date_time_to_use): """ Complete the contruction of the meal sessions and save if they do not already exist :param meal_sessions (dict): A dictionary with incomplete meal session data :param date_time_to_use (datetime): A datetime object to use :return: """ meal_session_date = date(year=date_time_to_use.year, month=date_time_to_use.month, day=date_time_to_use.day) meal_sessions['breakfast']['date'] = meal_session_date meal_sessions['lunch']['date'] = meal_session_date for meal_session in meal_sessions.values(): # Ignore creation of meal session if one with in the specified # time already exists if MealSessionLogic.validate_meal_session_times( **{ "name": meal_session.get('name'), "date_sent": meal_session.get('date'), "location_id": meal_session.get('location_id'), "start_time": meal_session.get('start_time'), "end_time": meal_session.get('stop_time'), } ): continue MealSession(**meal_session).save()
def start(self, request): """ A method that starts meal session. --- parameters: - name: before_midday description: is the time before or after 12 noon? required: true type: boolean paramType: form - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = request.POST.get("before_midday") meal_in_progress = MealSession.in_progress() status = status_code.HTTP_200_OK if before_midday: content = {"status": "Breakfast started"} else: content = {"lunch": "Lunch started"} timezone.activate(pytz.timezone("Africa/Lagos")) time = timezone.now() if not meal_in_progress.count(): meal_in_progress = MealSession.objects.create(date=time.date(), status=True) else: meal_in_progress[0].status = True meal_in_progress[0].save() return Response(content, status=status)
def start(self, request): """ A method that starts meal session. --- parameters: - name: before_midday description: is the time before or after 12 noon? required: true type: boolean paramType: form - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = request.POST.get('before_midday') meal_in_progress = MealSession.in_progress() status = status_code.HTTP_200_OK if before_midday: content = {'status': 'Breakfast started'} else: content = {'lunch': 'Lunch started'} timezone.activate(pytz.timezone('Africa/Lagos')) time = timezone.now() if not meal_in_progress.count(): meal_in_progress = MealSession.objects.create(date=time.date(), status=True) else: meal_in_progress[0].status = True meal_in_progress[0].save() return Response(content, status=status)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get("slackUserId") if not slack_id: content = {"status": "You're unauthorized to make this request"} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {"firstname": user.firstname, "lastname": user.lastname} if not user.is_active: content[ "status"] = "User has been deactivated. Contact the Ops team." return Response(content, status=status_code.HTTP_400_BAD_REQUEST) if not meal_in_progress: content["status"] = "There is no meal in progress" return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) before_midday = Time.is_before_midday() if user.is_tapped(): meal_type = "breakfast" if before_midday else "lunch" content["status"] = f"User has tapped in for {meal_type}" return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) mealservice = mealservice[0] if mealservice.count() else MealService() mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content["status"] = "Tap was successful" return Response(content, status=status_code.HTTP_200_OK)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get("slackUserId") if not slack_id: content = {"status": "You're unauthorized to make this request"} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {"firstname": user.firstname, "lastname": user.lastname} if not meal_in_progress: content["status"] = "There is no meal in progress" return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) else: before_midday = Time.is_before_midday() if user.is_tapped(): content["status"] = "User has tapped in for {0}".format("breakfast" if before_midday else "lunch") return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) if not mealservice.count(): mealservice = MealService() else: mealservice = mealservice[0] mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content["status"] = "Tap was successful" return Response(content, status=status_code.HTTP_200_OK)
def untap(self, request, pk): """ A method that untaps a user. --- parameters: - name: pk description: unique id of the user required: true type: string paramType: path - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = Time.is_before_midday() content = {} meal_in_progress = MealSession.in_progress() timenow = timezone.now() user = get_object_or_404(self.queryset, pk=pk) mealservice = MealService.objects.get(user=user, date=meal_in_progress[0].date) status = status_code.HTTP_200_OK if not meal_in_progress: content['status'] = 'There is no meal in progress' else: mealservice = mealservice.set_meal(before_midday, reverse=True) if not mealservice.untapped: untapped = [] else: untapped = json.loads(mealservice.untapped) log = { 'date_untapped': str(timenow), } untapped.append(log) mealservice.untapped = untapped mealservice.date_modified = timenow mealservice.save() content['status'] = 'Untap was successful' return Response(content, status=status)
def untap(self, request, pk): """ A method that untaps a user. --- parameters: - name: pk description: unique id of the user required: true type: string paramType: path - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = Time.is_before_midday() content = {} meal_in_progress = MealSession.in_progress() timenow = timezone.now() user = get_object_or_404(self.queryset, pk=pk) mealservice = MealService.objects.get(user=user, date=meal_in_progress[0].date) status = status_code.HTTP_200_OK if not meal_in_progress: content["status"] = "There is no meal in progress" else: mealservice = mealservice.set_meal(before_midday, reverse=True) if not mealservice.untapped: untapped = [] else: untapped = json.loads(mealservice.untapped) log = {"date_untapped": str(timenow)} untapped.append(log) mealservice.untapped = untapped mealservice.date_modified = timenow mealservice.save() content["status"] = "Untap was successful" return Response(content, status=status)
def start(self, request): """ A method that starts meal session. --- parameters: - name: before_midday description: is the time before or after 12 noon? required: true type: boolean paramType: form - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ # https://buildmedia.readthedocs.org/media/pdf/django-rest-swagger/stable-0.3.x/django-rest-swagger.pdf before_midday = request.POST.get("before_midday") meal_in_progress = MealSession.in_progress() status = status_code.HTTP_200_OK if before_midday: content = {"status": "Breakfast started"} else: content = {"lunch": "Lunch started"} timezone.activate(pytz.timezone("Africa/Lagos")) time = timezone.now() if not meal_in_progress.count(): meal_in_progress = MealSession.objects.create(date=time.date(), status=True) else: meal_in_progress[0].status = True meal_in_progress[0].save() return Response(content, status=status)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get('slackUserId') if not slack_id: content = {'status': 'You\'re unauthorized to make this request'} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {'firstname': user.firstname, 'lastname': user.lastname} if not meal_in_progress: content['status'] = 'There is no meal in progress' return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) else: before_midday = Time.is_before_midday() if user.is_tapped(): content['status'] = 'User has tapped in for {0}'.format( 'breakfast' if before_midday else 'lunch') return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) if not mealservice.count(): mealservice = MealService() else: mealservice = mealservice[0] api_auth_url = os.getenv( 'API_AUTH_URL') + '/users?email={}'.format(user.email) api_auth_headers = {'api-token': os.getenv('ANDELA_API_TOKEN')} auth_resp = None try: auth_resp = requests.get(api_auth_url, headers=api_auth_headers) except ConnectionError: return Response({'msg': 'user unable to tap auth'}, status=400) user_id = auth_resp.json()['values'][0]['id'] payload = auth_resp.json() jwt_token = generate_token(payload) authorization = 'Bearer {}'.format(jwt_token) headers = {'X-Location': 1, 'Authorization': authorization} meal_period = 'breakfast' if before_midday else 'lunch' andela_eats_url = os.getenv('ANDELA_EATS_URL') eats_url = urljoin(andela_eats_url, 'api/v1/orders/collect') data = { 'userId': user_id, 'orderType': meal_period, 'orderDate': datetime.strftime(datetime.now().date(), '%Y-%m-%d') } try: eats_resp = requests.post(eats_url, json=data, headers=headers) except: return Response({'msg': 'user unable to tap eats'}, status=400) mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content['status'] = 'Tap was successful. ' eats_msg = eats_resp.json()['msg'] content['status'] += '{}'.format(eats_msg) return Response(content, status=status_code.HTTP_200_OK)