コード例 #1
0
    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)
コード例 #2
0
	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()
コード例 #3
0
ファイル: viewsets.py プロジェクト: waitress-andela/waitress
    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)
コード例 #4
0
ファイル: viewsets.py プロジェクト: waitress-andela/waitress
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
ファイル: viewsets.py プロジェクト: waitress-andela/waitress
    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)
コード例 #8
0
    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)
コード例 #9
0
ファイル: viewsets.py プロジェクト: waitress-andela/waitress
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)