Exemple #1
0
    def post(self, request):
        ser = AddReviewSerializer(data=request.data)
        if ser.is_valid():
            ser.save(addresser=request.user)
            
            id = request.data.get("addressee")
            profile = self.get_profile(id)
            reviews = Review.objects.filter(addressee__id=id)
            sum = 0
            for review in reviews:
                sum = sum + review.estimation
            rating = sum / len(reviews)
            estimation = request.data.get("estimation")
            positiveAssessment = profile.positiveAssessment
            negativeAssessment = profile.negativeAssessment
            if(float(estimation) > 3):
                positiveAssessment += 1
            else:
                negativeAssessment += 1
            profileSerializer = ProfileSerializer(instance=profile, data={}, partial=True)

            if profileSerializer.is_valid():
                profileSerializer.save(rating = rating, positiveAssessment = positiveAssessment, negativeAssessment = negativeAssessment)
            return Response(rating, status=200)
        else:
            logger.error(ser.error_messages)
            return Response(status=400)
Exemple #2
0
    def post(self, request):
        ser = AddDecisionSerializer(data=request.data)
        if ser.is_valid():
            ser.save(arbitrator=request.user)
            task = self.get_object(request.data.get("dispute"))

            rightContractor = request.data.get("rightContractor")
            if(int(rightContractor) == task.contractor.id):
                profileContractor = self.get_profile(task.contractor)
                balance = profileContractor.balance + task.price
                profileSerializer = ProfileSerializer(instance=profileContractor, data={}, partial=True)
                if profileSerializer.is_valid():
                    profileSerializer.save(balance = balance)
                    self.updateHistory(task.id)
            else:
                if (int(rightContractor) == task.author.id):
                    profileSender = self.get_profile(task.author)
                    balance = profileSender.balance + task.price
                    profileSerializer = ProfileSerializer(instance=profileSender, data={}, partial=True)
                    if profileSerializer.is_valid():
                        profileSerializer.save(balance = balance)
                        paymentHistory = self.get_payment(task.id)
                        self.check_object_permissions(request, paymentHistory)
                        paymentHistory.delete()

            serializer = TaskSerializer(instance=task, data={}, partial=True)
            if serializer.is_valid():
                serializer.save(state=STATE.resolved.value)
            return Response(status=200)
        else:
            logger.error(ser.error_messages)
            return Response(status=400)
class AuthorizedProfileSerializer(serializers.ModelSerializer):
    user = ProfileSerializer(source="user.profile", read_only=True)
    follow_status = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Profile
        fields = ['user', 'biography', 'image', 'isPrivate', 'follow_status']

    def get_follow_status(self, profile):
        visiter = self.context.get("request_user")
        if not visiter:
            return None
        elif visiter.pk == profile.user.pk:
            return "is_owner"
        elif FollowRequest.objects.filter(sender=visiter,
                                          receiver=profile.user,
                                          accepted=True).exists():
            return "following"
        elif FollowRequest.objects.filter(sender=visiter,
                                          receiver=profile.user,
                                          accepted=False).exists():
            return "sent"
        elif FollowRequest.objects.filter(sender=visiter,
                                          receiver=profile.user).count() == 0:
            return "not_sent"
class PostSerializer(serializers.ModelSerializer):
    author = ProfileSerializer(source="author.profile", read_only=True)
    image = serializers.SerializerMethodField(read_only=True)
    likes = serializers.SerializerMethodField(read_only=True)
    is_liked = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Post
        fields = [
            'author', 'id', 'image', 'title', 'content', 'likes', 'is_liked',
            'date_posted'
        ]

    def get_image(self, post):
        return post.author.profile.image.url

    def get_likes(self, post):
        return post.likes.count()

    def get_is_liked(self, post):
        user = self.context.get("request_user")
        if user in post.likes.all():
            return True
        else:
            return False
class LikeNotificationSerializer(serializers.ModelSerializer):
    sender = ProfileSerializer(source="sender.profile", read_only=True)
    sender_image = serializers.SerializerMethodField(read_only=True)
    receiver = ProfileSerializer(source="receiver.profile", read_only=True)
    post = PostForNotificationsSerializer(read_only=True)
    notification_type = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = LikeNotification
        fields = [
            'sender', 'receiver', 'post', 'timestamp', 'viewed',
            'notification_type', 'sender_image'
        ]

    def get_sender_image(self, obj):
        return obj.sender.profile.image.url

    def get_notification_type(self, obj):
        return 'like'
Exemple #6
0
 def get(self, request, pk, format=None):
     task = self.get_object(pk)
     doneJobs = DoneJob.objects.filter(task__category=task.category)
     authors = []
     for job in doneJobs:
         profile = Profile.objects.get(user=job.author)
         if profile not in authors and job.author != task.author:
             authors.append(Profile.objects.get(user=job.author))
     authors = sorted(authors, key=byRatingSort, reverse=True)[:10]
     serializer = ProfileSerializer(authors, many=True)
     return Response(serializer.data)
Exemple #7
0
    def put(self, request, pk, format=None):
        try:
            snippet = self.get_object(pk)
            dataDict = json.dumps(request.data)
            dataString = json.loads(dataDict)

            profile = self.get_profile(request.user)
            if(profile.balance<0):
                return Response("insufficient cash", status=400)
            profileDict = ProfileSerializer(profile)
            profileSerializer = ProfileSerializer( instance=profile, data={}, partial=True)

            req = Request.objects.filter(task=snippet)
            if(not snippet.approved and dataString["contractor"] and request.user == snippet.author and req):
                serializer = ApprovedTaskSerializer(
                    instance=snippet, data=request.data, partial=True)
                self.check_object_permissions(request, snippet)
                self.addHistory(request.user.id, dataString["contractor"], snippet.price, snippet.id)
                if profileSerializer.is_valid():
                    newBalance = profile.balance - snippet.price
                    profileSerializer.save(balance = newBalance)

                if serializer.is_valid():
                    serializer.save(state=STATE.inProgress.value)
                    return Response(serializer.data)
                return Response(serializer.errors, status=400)
        except:
            return Response(status=400)
class LatestMessageSerializer(serializers.ModelSerializer):
    user = ProfileSerializer(source="user.profile", read_only=True)
    latest_message = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Profile
        fields = ['id', 'image', 'user', 'latest_message']

    def get_latest_message(self, profile):
        user = self.context.get('request_user')
        message = Message.objects.filter(receiver=user,
                                         sender=profile.user).last()
        message = Message.objects.filter(
            Q(receiver=user, sender=profile.user)
            | Q(receiver=profile.user, sender=user)).distinct().order_by(
                "-timestamp").first()
        return MessageSerializer(message, context={"request_user": user}).data
Exemple #9
0
    def get(self, request, pk, format=None):
        try:
            snippet = self.get_object(pk)
            profile = self.get_profile(snippet.contractor)
            profileDict = ProfileSerializer(profile)
            profileSerializer = ProfileSerializer(instance=profile, data={}, partial=True)

            req = Request.objects.filter(task=snippet)
            if(profile and request.user == snippet.author and req):
                serializer = ApprovedTaskSerializer(instance=snippet, data=request.data, partial=True)
                self.check_object_permissions(request, snippet)
                self.updateHistory(snippet.id)

                if profileSerializer.is_valid():
                    newBalance = profile.balance + snippet.price
                    profileSerializer.save(balance = newBalance)

                if serializer.is_valid():
                    serializer.save(state=STATE.completed.value)
                    return Response(serializer.data)
                return Response(serializer.errors, status=400)
        except:
            return Response(status=400)