예제 #1
0
    def financial_data(self, request):
        profile = request.user.profile
        earned = models.TaskWorker.objects.prefetch_related('task__project').values(
            'task__project__price').filter(worker=request.user,
                                           is_paid=True).values_list('task__project__price', flat=True)
        awaiting_payment = models.TaskWorker.objects.prefetch_related('task__project').values(
            'task__project__price').filter(worker=request.user,
                                           is_paid=False, status=models.TaskWorker.STATUS_ACCEPTED).values_list(
            'task__project__price', flat=True)
        response_data = {
            "is_worker": profile.is_worker,
            "is_requester": profile.is_requester,
            "awaiting_payment": sum(awaiting_payment) if len(awaiting_payment) else 0,
            "total_earned": sum(earned) if len(earned) else 0,
            "is_discount_eligible": is_discount_eligible(request.user)
        }
        response_data.update({'tasks_completed': models.TaskWorker.objects.filter(worker=request.user, status__in=[
            models.TaskWorker.STATUS_ACCEPTED, models.TaskWorker.STATUS_SUBMITTED]).count()})
        if hasattr(request.user, 'stripe_customer') and request.user.stripe_customer is not None:
            response_data.update({"account_balance": round(request.user.stripe_customer.account_balance, 2) / 100})
            response_data.update({"held_for_liability": 0})
            response_data.update({"default_card": request.user.stripe_customer.stripe_data.get('default_card')})
        if hasattr(request.user, 'stripe_account') and request.user.stripe_account is not None:
            response_data.update({"default_bank": request.user.stripe_account.stripe_data.get('default_bank')})

        return Response(response_data, status.HTTP_200_OK)
예제 #2
0
    def create_charge(self, amount, user):
        application_fee = self.get_chargeback_fee(amount)
        discount_applied = is_discount_eligible(user)
        if discount_applied:
            f = 0.5
        else:
            f = 1
        amount_to_charge = int(math.ceil(
            (amount * f + 30) / 0.966))  # 2.9% + 30c + 0.5%
        description = "Daemo crowdsourcing prepaid tasks for {} {}".format(
            user.first_name, user.last_name)
        charge = self._create_charge(
            customer_id=user.stripe_customer.stripe_id,
            amount=amount_to_charge,
            application_fee=application_fee,
            description=description)
        stripe_data = {
            "amount": int(amount),
            "status": charge.status,
            "description": description
        }
        # amount_total = int(amount - 0.029 * amount - 30 - self.get_chargeback_fee(amount))
        user.stripe_customer.account_balance += amount
        user.stripe_customer.save()

        return StripeCharge.objects.create(stripe_id=charge.stripe_id,
                                           customer=user.stripe_customer,
                                           stripe_data=stripe_data,
                                           balance=int(math.ceil(amount * f)),
                                           discount_applied=discount_applied,
                                           raw_amount=amount_to_charge,
                                           discount=f)
예제 #3
0
    def financial_data(self, request):
        profile = request.user.profile
        earned = models.TaskWorker.objects.prefetch_related('task__project').values(
            'task__project__price').filter(worker=request.user,
                                           is_paid=True).values_list('task__project__price', flat=True)
        awaiting_payment = models.TaskWorker.objects.prefetch_related('task__project').values(
            'task__project__price').filter(worker=request.user,
                                           is_paid=False, status=models.TaskWorker.STATUS_ACCEPTED).values_list(
            'task__project__price', flat=True)
        response_data = {
            "is_worker": profile.is_worker,
            "is_requester": profile.is_requester,
            "awaiting_payment": sum(awaiting_payment) if len(awaiting_payment) else 0,
            "total_earned": sum(earned) if len(earned) else 0,
            "is_discount_eligible": is_discount_eligible(request.user)
        }
        response_data.update({'tasks_completed': models.TaskWorker.objects.filter(worker=request.user, status__in=[
            models.TaskWorker.STATUS_ACCEPTED, models.TaskWorker.STATUS_SUBMITTED]).count()})
        if hasattr(request.user, 'stripe_customer') and request.user.stripe_customer is not None:
            response_data.update({"account_balance": round(request.user.stripe_customer.account_balance, 2) / 100})
            response_data.update({"held_for_liability": 0})

            if hasattr(request.user.stripe_customer, 'stripe_data') and \
                    request.user.stripe_customer.stripe_data is not None:
                response_data.update({"default_card": request.user.stripe_customer.stripe_data.get('default_card')})
        if hasattr(request.user, 'stripe_account') and request.user.stripe_account is not None \
            and hasattr(request.user.stripe_account, 'stripe_data') and \
                request.user.stripe_account.stripe_data is not None:
            response_data.update({"default_bank": request.user.stripe_account.stripe_data.get('default_bank')})

        return Response(response_data, status.HTTP_200_OK)
예제 #4
0
    def create_charge(self, amount, user):
        application_fee = self.get_chargeback_fee(amount)
        discount_applied = is_discount_eligible(user)
        if discount_applied:
            f = 0.5
        else:
            f = 1
        amount_to_charge = int(math.ceil((amount * f + 30) / 0.966))  # 2.9% + 30c + 0.5%
        description = "Daemo crowdsourcing prepaid tasks for {} {}".format(user.first_name, user.last_name)
        charge = self._create_charge(customer_id=user.stripe_customer.stripe_id, amount=amount_to_charge,
                                     application_fee=application_fee, description=description)
        stripe_data = {
            "amount": int(amount),
            "status": charge.status,
            "description": description
        }
        # amount_total = int(amount - 0.029 * amount - 30 - self.get_chargeback_fee(amount))
        user.stripe_customer.account_balance += amount
        user.stripe_customer.save()

        return StripeCharge.objects.create(stripe_id=charge.stripe_id, customer=user.stripe_customer,
                                           stripe_data=stripe_data, balance=int(math.ceil(amount * f)),
                                           discount_applied=discount_applied,
                                           raw_amount=amount_to_charge, discount=f)