Ejemplo n.º 1
0
 def login(self, request, pk=None):
     serializer = LoginSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     user, token = serializer.save()
     user = UserSerializer(user).data
     data = {
         'user': {
             'id':
             user.get('id'),
             'identification':
             user.get('identification'),
             'username':
             user.get('username'),
             'email':
             user.get('email'),
             'name':
             '{} {}'.format(user.get('first_name'), user.get('last_name')),
             'position':
             user.get('position')
         },
         'token': token
     }
     return Response(data)
Ejemplo n.º 2
0
    def membership(self, request):
        if request.method == 'GET':
            if request.user.is_authenticated:
                data = UserSerializer(self.request.user, many=False).data
                data['membership_fee'] = MembershipSetting.get_solo().membership_fee
                data['pickup_locations'] = PartnerSer(Partner.objects.filter(pickup_location=True), many=True).data
                return Response(data)
            return Response({'status': 'error', 'detail': 'Not authenticated.'}, 401)
        if request.method == 'POST':
            user = request.user
            if not user.is_authenticated:
                return Response({'status': 'error', 'detail': 'Not authenticated.'}, 401)
            data = request.data
            if user.status == 'Pending Approval':
                raise APIException('Your membership request in pending approval.')
            if user.status == 'Member':
                raise APIException('You are already a member.')
            membership_setting = MembershipSetting.get_solo()
            if not data.get('full_name'):
                raise APIException('Full name is required.')
            if not data.get('mobile'):
                raise APIException('Mobile number is required.')
            if not data.get('pickup_location'):
                raise APIException('Pickup Location is required')
            user.full_name = data.get('full_name')
            user.mobile = data.get('mobile')
            user.save()
            CardStatus.objects.update_or_create(user=user, season=season(), defaults={'status': 'Awaiting Approval',
                                                                                      'pickup_location_id': data.get(
                                                                                          'pickup_location')})
            payment_type = 'Renewal' if user.status == 'Expired' else 'Membership'
            payment = Payment(user=user, amount=float(membership_setting.membership_fee), type=payment_type, channel='Android')
            if data.get('esewa'):
                response = json.loads(data.get('esewa_response'))
                if float(response['totalAmount']) < float(payment.amount):
                    raise APIException('You did not pay the full amount.')
                esewa_payment = EsewaPayment(amount=payment.amount, pid=response['productId'],
                                             ref_id=response['transactionDetails']['referenceId'])
                if esewa_payment.verify():
                    payment.save()
                    esewa_payment.payment = payment
                    esewa_payment.get_details()
                    esewa_payment.save()
                else:
                    raise APIException('Payment via eSewa failed!')

            elif data.get('receipt'):
                receipt_no = data.get('receipt_no')
                if not receipt_no:
                    raise APIException('Receipt number is required.')
                elif not receipt_no.isdigit():
                    raise APIException('Invalid receipt number.')
                elif not ReceiptData.objects.filter(active=True, from_no__lte=receipt_no, to_no__gte=receipt_no).exists():
                    raise APIException('Invalid receipt number.')
                elif DirectPayment.objects.filter(receipt_no=receipt_no, payment__verified_by__isnull=False).exists():
                    raise APIException('Invalid receipt number.')
                else:
                    payment.save()
                    DirectPayment.objects.create(payment=payment, receipt_no=receipt_no)
            elif data.get('deposit'):
                if not request.data.get('voucher_image'):
                    raise APIException('Voucher image is required.')
                else:
                    payment.save()
                    bd = BankDeposit.objects.create(payment=payment, voucher_image=request.data.get('voucher_image'),
                                                    bank=BankAccount.objects.first())
                    if not bd.voucher_image:
                        payment.delete()
                        raise APIException('Could not save voucher image.')
            else:
                raise APIException('No payment method specified.')
            user.status = 'Pending Approval'
            user.save()
            data = UserSerializer(user, many=False).data
            return Response(data)