Beispiel #1
0
    def list(self, request):
        """
        A method that tells if time is before mid-day or not.
        """
        before_midday = Time.is_before_midday()
        content = {"before_midday": before_midday}

        return Response(content, status=status_code.HTTP_200_OK)
Beispiel #2
0
    def list(self, request):
        """
        A method that tells if time is before mid-day or not.
        """
        before_midday = Time.is_before_midday()
        content = {"before_midday": before_midday}

        return Response(content, status=status_code.HTTP_200_OK)
Beispiel #3
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)
Beispiel #4
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]

            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)
Beispiel #5
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)
Beispiel #6
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)
Beispiel #7
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)