Example #1
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)
Example #2
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)
Example #3
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)
Example #4
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)