예제 #1
0
    def get(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        accepts = Accepts.objects.filter(
            Q(request_made_by=payload['_id'])
            | Q(request_acceptor=payload['_id']))
        if len(accepts) == 0:
            connection.close()
            return Response({"message": "No accpets found"},
                            status=status.HTTP_204_NO_CONTENT)
        else:
            serializer = AcceptsSerializer(accepts, many=True)
            serializer = serializer.data
            key = 1
            for item in serializer:
                item['key'] = key
                key += 1
            connection.close()
            return Response({
                "message": "Accepts found",
                "Accepts": serializer
            },
                            status=status.HTTP_200_OK)
예제 #2
0
    def get(self, request, pk):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        try:
            org = Organizations.objects.get(id=pk)
            serializer = OrganizationsSerializer(org)
            serializer = serializer.data
            areas = AreasCatered.objects.filter(org_id=pk)
            areas_serializer = AreasCateredSerializer(areas, many=True)
            serializer['areas_catered'] = areas_serializer.data
            connection.close()
            return Response(
                {
                    "message": "Organization Found",
                    "Organization": serializer
                },
                status=status.HTTP_200_OK)
        except Organizations.DoesNotExist:
            connection.close()
            return Response({"message": "Organization Does Not Exist"},
                            status=status.HTTP_400_BAD_REQUEST)
예제 #3
0
    def get(self, request, pk):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        try:
            item_request = ItemRequest.objects.get(id=pk)
            serializer = ItemRequestSerializer(item_request)
            serializer = serializer.data
            connection.close()
            return Response({
                'message': "Request Found",
                "Request": serializer
            },
                            status=status.HTTP_200_OK)
        except ItemRequest.DoesNotExist:
            connection.close()
            return Response({"maessage": "Request not found"},
                            status=status.HTTP_204_NO_CONTENT)
예제 #4
0
    def post(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token=="":
            connection.close()
            return Response({"message":"Authorization credentials missing"}, status=status.HTTP_403_FORBIDDEN)
        
        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message":payload['message']}, status=status.HTTP_403_FORBIDDEN)

        item_requests = ItemRequest.objects.filter(request_made_by=payload['_id'])
        if len(item_requests) >= 5:
            connection.close()
            return Response({"message":"User has already made maximum requests"}, status=status.HTTP_400_BAD_REQUEST)
        
        req_data = {}
        req_data["item_name"] = request.data.get("item_name", None)
        req_data["quantity"] = request.data.get("quantity", None)
        req_data["location"] = request.data.get("location", None)
        req_data['request_made_by'] = payload['_id']
        req_data['description'] = request.data.get('description', None)
        if req_data['description']=='':
            req_data['description'] = None
        serializer = ItemRequestSerializer(data=req_data)
        if serializer.is_valid():
            serializer.save()
            registration_ids = []

            userDevices = UserFCMDevice.objects.all()
            for userDevice in userDevices:
                print(userDevice.user_id)
                if userDevice.user_id != payload['_id']:
                    registration_ids.append(userDevice.registration_id)
                else:
                    print("Not Taking")

            message_title = "New Request Arrived"
            message_body = req_data['item_name'] + '\nCity: ' + req_data['location']
            data = {
                "url":"https://akina.dscvit.com/feed",
                "click_action":"FLUTTER_NOTIFICATION_CLICK",
                "sound":"default",
                "status":"done",
                "screen":"Requests Page",
                "location":req_data['location']
            }

            result = send_notifs(registration_ids, message_title, message_body, data)
            connection.close()

            if result:
                return Response({"message":"New Request created but, failed to send notifications", "Request":serializer.data}, status=status.HTTP_200_OK)

            return Response({"message":"New Request created", "Request":serializer.data}, status=status.HTTP_201_CREATED)
        else:
            connection.close()
            return Response({"message":"Invalid Request"}, status=status.HTTP_400_BAD_REQUEST)
예제 #5
0
    def post(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        print(request.data)
        org_data = {}
        org_data['name'] = request.data.get("name", None)
        org_data['city'] = request.data.get("city", None)
        org_data['state'] = request.data.get("state", None)
        org_data['country'] = request.data.get("country", None)
        org_data['description'] = request.data.get("description", None)
        org_data['email'] = request.data.get("email", None)
        org_data['phone_no'] = request.data.get("phone_no", None)
        org_data['address'] = request.data.get("address", None)
        org_data['other_contact'] = request.data.get("other_contact", None)
        org_data['web_links'] = request.data.get("web_links", None)

        areas_catered = request.data.get("areas_catered", None)
        if areas_catered == None or len(areas_catered) == 0:
            connection.close()
            return Response({"message": "Please provide Areas catered"},
                            status=status.HTTP_400_BAD_REQUEST)

        serializer = OrganizationsSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            print(serializer.data['id'])
            for area in areas_catered:
                area['org_id'] = serializer.data['id']
                area_serializer = AreasCateredSerializer(data=area)
                if area_serializer.is_valid():
                    area_serializer.save()
                else:
                    print(area_serializer.errors)

            connection.close()
            return Response(
                {
                    "message": "Organization Saved",
                    "organization": serializer.data
                },
                status=status.HTTP_201_CREATED)

        else:
            connection.close()
            return Response({"message": serializer.errors},
                            status=status.HTTP_400_BAD_REQUEST)
예제 #6
0
    def get(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token=="":
            connection.close()
            return Response({"message":"Authorization credentials missing"}, status=status.HTTP_403_FORBIDDEN)
        
        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message":payload['message']}, status=status.HTTP_403_FORBIDDEN)

        location = request.query_params.get('location', None)
        if location==None or location=='':
            connection.close()
            return Response({"message":"Location not provided"}, status=status.HTTP_400_BAD_REQUEST)

        item_requests = ItemRequest.objects.filter(location__iexact=location)
        if len(item_requests) == 0:
            connection.close()
            return Response({"message":"No requests found"}, status=status.HTTP_204_NO_CONTENT)

        serializer = ItemRequestSerializer(item_requests, many=True)
        data = serializer.data

        flag = True

        while flag:
            for item in data:
                request_acceptors = item['accepted_by'].split(',')
                if item['request_made_by']==payload['_id'] or payload['_id'] in request_acceptors:
                    data.remove(item)

            flag = False

            for item in data:
                request_acceptors = item['accepted_by'].split(',')
                if item['request_made_by']==payload['_id'] or payload['_id'] in request_acceptors:
                    flag = True

        key = 1
        for item in data:
            item['key'] = key
            key += 1
        

        if len(data) == 0:
            connection.close()
            return Response({"message":"No requests found"}, status=status.HTTP_204_NO_CONTENT)

        connection.close()
        return Response({"message":"Requests found", "Request":data}, status=status.HTTP_200_OK)
예제 #7
0
    def post(self, request):
        req_data = request.data
        if req_data.get("user_token", None) == None or req_data.get(
                "registration_id", None) == None:
            connection.close()
            return Response(
                {"message": "User token or registration id missing"},
                status=status.HTTP_400_BAD_REQUEST)

        payload = get_user_id(req_data.get("user_token"))
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        req_data = {}
        req_data['user_id'] = payload['_id']
        req_data["registration_id"] = request.data.get("registration_id", None)

        userDevice = UserFCMDevice.objects.filter(
            Q(user_id=req_data['user_id'])
            & Q(registration_id=req_data['registration_id']))
        if len(userDevice) != 0:
            connection.close()
            print('device alreay exists')
            return Response({"message": "Device details updated"},
                            status=status.HTTP_200_OK)
        else:
            data = {
                "user_id": req_data['user_id'],
                "registration_id": req_data['registration_id']
            }
            serializer = UserFCMDeviceSerializer(data=data)
            if serializer.is_valid():
                serializer.save()
                connection.close()
                print("Registered")
                return Response({"message": "Device Registered"},
                                status=status.HTTP_201_CREATED)
            else:
                print(serializer.errors)
                connection.close()
                return Response({"message": "Unable to register device"},
                                status=status.HTTP_400_BAD_REQUEST)
예제 #8
0
    def get(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        orgs = Organizations.objects.all()

        if len(orgs) == 0:
            connection.close()
            return Response({"message": "No Organizations Found"},
                            status=status.HTTP_204_NO_CONTENT)

        serializer = OrganizationsSerializer(orgs, many=True)
        serializer = serializer.data
        key = 1
        for item in serializer:
            areas = AreasCatered.objects.filter(id=item['id'])
            area_serializer = AreasCateredSerializer(areas, many=True)
            item['areas_catered'] = area_serializer.data
            item['key'] = key
            key += 1

        connection.close()
        return Response(
            {
                "message": "Organizations Found",
                "Organization": serializer
            },
            status=status.HTTP_200_OK)
예제 #9
0
    def get(self, request, pk):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        try:
            org = Organizations.objects.get(id=pk)
            org.is_verified = True
            org.save()
            connection.close()
            return Response({"message": "Organization Verified"},
                            status=status.HTTP_200_OK)
        except Organizations.DoesNotExist:
            connection.close()
            return Response({"message": "Organization Does Not Exist"},
                            status=status.HTTP_400_BAD_REQUEST)
예제 #10
0
    def get(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token == "":
            connection.close()
            return Response({"message": "Authorization credentials missing"},
                            status=status.HTTP_403_FORBIDDEN)

        city = request.query_params.get("city", None)
        state = request.query_params.get("state", None)
        country = request.query_params.get("country", None)

        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message": payload['message']},
                            status=status.HTTP_403_FORBIDDEN)

        orgs = Organizations.objects.all()
        result = []
        for org in orgs:
            if org.is_verified:
                serializer = OrganizationsSerializer(org)
                serializer = serializer.data
                areas = AreasCatered.objects.filter(org_id=org.id)
                areas_serializer = AreasCateredSerializer(areas, many=True)
                serializer['areas_catered'] = areas_serializer.data
                result.append(serializer)

        field = None
        field_value = None

        if city != None and city != "":
            field = 'city'
            field_value = city.lower()
        elif state != None and state != "":
            field = 'state'
            field_value = state.lower()
        elif country != None and country != "":
            field = 'country'
            field_value = country.lower()

        to_remove = []

        if field != None:
            for org in result:
                areas = org['areas_catered']
                should_remove = True
                for area in areas:
                    if field_value == (area[field].lower()):
                        should_remove = False
                if should_remove:
                    to_remove.append(org)

        for item in to_remove:
            result.remove(item)

        key = 1
        for item in result:
            item['key'] = key
            key += 1

        if len(result) == 0:
            connection.close()
            return Response({"message": "Organizations not found"},
                            status=status.HTTP_204_NO_CONTENT)

        connection.close()
        return Response(
            {
                "message": "Organizaions found",
                "Organization": result
            },
            status=status.HTTP_200_OK)
예제 #11
0
    def post(self, request):
        token = request.headers.get('Authorization', None)
        if token is None or token=="":
            connection.close()
            return Response({"message":"Authorization credentials missing"}, status=status.HTTP_403_FORBIDDEN)
        
        payload = get_user_id(token)
        if payload['_id'] is None:
            connection.close()
            return Response({"message":payload['message']}, status=status.HTTP_403_FORBIDDEN)

        if request.data.get('request_id', None)==None or request.data.get("location", None)==None:
            connection.close()
            return Response({"message":"Invalid accept"}, status=status.HTTP_400_BAD_REQUEST)

        try:
            item_request = ItemRequest.objects.get(id=int(request.data.get('request_id', None)))
        except ItemRequest.DoesNotExist:
            connection.close()
            return Response({"message":"Request Not Found"}, status=status.HTTP_400_BAD_REQUEST)

        if item_request.request_made_by == payload['_id']:
            connection.close()
            return Response({"message":"User not allowed to accept request"}, status=status.HTTP_400_BAD_REQUEST)
        
        if item_request.location.lower() == request.data.get('location', None).lower():
            accepts = Accepts.objects.filter(Q(request_made_by=item_request.request_made_by) & Q(request_acceptor=payload['_id']))
            
            if len(accepts)!=0:
                accept = accepts[0]

                #################### CHECKING IF USERS BLOCKED EACH OTHER ####################################
                resp = check_blocked(accept.request_made_by, accept.request_acceptor)
                if resp.status_code==200:
                    resp = json.loads(resp.text)
                    connection.close()
                    return Response({"message":resp['message']}, status=status.HTTP_400_BAD_REQUEST)

                items_accepted = accept.request_id
                items_accepted = items_accepted.split(',')
                if str(item_request.id) in items_accepted:
                    connection.close()
                    return Response({'message':"Item Already Accepted"}, status=status.HTTP_400_BAD_REQUEST)
                accept.request_id = accept.request_id + "," + str(item_request.id)
                accept.item_names = accept.item_names + "," +str(item_request.item_name)
                accept.save()
                serializer = AcceptsSerializer(accept)
                item_request.accepted_by = str(item_request.accepted_by) + "," + str(payload['_id'])
                item_request.save()

                registration_ids = []
                
                userDevices = UserFCMDevice.objects.filter(user_id = accept.request_made_by)
                if len(userDevices) != 0:
                    registration_ids.append(userDevices[0].registration_id)
                    message_title = "Request Has been Accepted"
                    message_body = "Your request for " + item_request.item_name + " has been accepted."
                    data = {
                        "url":"https://akina.dscvit.com/mychats",
                        "click_action":"FLUTTER_NOTIFICATION_CLICK",
                        "sound":"default",
                        "status":"done",
                        "screen":"Chats Page"
                    }

                    result = send_notifs(registration_ids, message_title, message_body, data)
                else:
                    result = 1

                if result:
                    connection.close()
                    return Response({"message":"Request Accepted but, failed to send notifications", "Accepts":serializer.data}, status=status.HTTP_200_OK)

                connection.close()
                return Response({"message": "Request Accepted", "Accepts":serializer.data}, status=status.HTTP_200_OK)
            else:

                #################### CHECKING IF USERS BLOCKED EACH OTHER ####################################
                resp = check_blocked(item_request.request_made_by, str(payload['_id']))
                if resp.status_code==200:
                    resp = json.loads(resp.text)
                    connection.close()
                    return Response({"message":resp['message']}, status=status.HTTP_400_BAD_REQUEST)
                    
                accepts = {
                    "request_made_by": item_request.request_made_by,
                    "request_acceptor": str(payload['_id']),
                    "request_id": str(item_request.id),
                    "item_names": str(item_request.item_name)
                }
                serializer = AcceptsSerializer(data=accepts)
                if serializer.is_valid():
                    serializer.save()
                    item_request.accepted_by = payload['_id']
                    item_request.save()

                    registration_ids = []
                    
                    userDevices = UserFCMDevice.objects.filter(user_id = accepts['request_made_by'])
                    if len(userDevices) != 0:
                        registration_ids.append(userDevices[0].registration_id)
                        message_title = "Request Has been Accepted"
                        message_body = "Your request for " + item_request.item_name + " has been accepted."
                        data = {
                            "url":"https://akina.dscvit.com/mychats",
                            "click_action":"FLUTTER_NOTIFICATION_CLICK",
                            "sound":"default",
                            "status":"done",
                            "screen":"Chats Page"
                        }

                        result = send_notifs(registration_ids, message_title, message_body, data)
                    else:
                        result = 1
                    
                    if result:
                        connection.close()
                        return Response({"message":"Request Accepted but, failed to send notifications", "Accepts":serializer.data}, status=status.HTTP_200_OK)

                    connection.close()
                    return Response({"message": "Request Accepted", "Accepts":serializer.data}, status=status.HTTP_200_OK)
                else:
                    connection.close()
                    return Response({"message":"Invalid acceptor"}, status=status.HTTP_400_BAD_REQUEST)
        else:
            connection.close()
            return Response({"message":"Locations are not same"}, status=status.HTTP_400_BAD_REQUEST)