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)
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)
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)
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)