def create(self, validated_data): email = validated_data.get('email') user = User.objects.create_user( username=email, email=email, password=validated_data.get('password'), first_name=validated_data.get('first_name'), last_name=validated_data.get('last_name'), ) customer = Customer.objects.create( identity_number=validated_data.get('identity_number'), address=validated_data.get('address'), sex=validated_data.get('sex'), user=user, ) BankInformation.objects.create( account_number=BankInformation.generate_account_number(), holder=customer, ) msg = 'Success to register customer' attrs = dict(self.context.get('request').data) task_event_logging.delay(email, msg, attrs) return customer
def list(self, request, *args, **kwargs): customer = request.user.customer serializer = self.get_serializer(instance=customer) msg = 'Retrieve account information.' task_event_logging.delay(customer.user.email, msg, {}) return Response(serializer.data)
def create(self, validated_data): sender = validated_data.get('sender') amount = validated_data.get('amount') # Bank statement for sender. statement_sender = BankStatement() statement_sender.bank_info = sender.bankinformation statement_sender.sender = sender statement_sender.receiver = self.receiver_bank.holder statement_sender.amount = amount statement_sender.is_debit = True statement_sender.description = 'Amount transferred' statement_sender.save() # Bank statement for receiver. statement_receiver = BankStatement() statement_receiver.bank_info = self.receiver_bank statement_receiver.sender = sender statement_receiver.receiver = self.receiver_bank.holder statement_receiver.amount = amount statement_receiver.is_debit = False statement_receiver.description = 'Amount received' statement_receiver.save() msg = 'Transfer succeed.' attrs = dict(self.context.get('request').data) task_event_logging.delay(sender.user.email, msg, attrs) serializer = TransactionSerializer(instance=statement_sender) return serializer.data
def deactivate(self, request, **kwargs): bank_info = self.get_object() bank_info.is_active = False bank_info.save() msg = 'Deactivation bank account.' task_event_logging.delay(bank_info.holder.user.email, msg, {}) return Response(status=status.HTTP_200_OK)
def list(self, request, *args, **kwargs): customer = request.user.customer bank_info = customer.bankinformation data = self.get_serializer(instance=bank_info).data msg = 'Retrieving bank information.' task_event_logging.delay(customer.user.email, msg, {}) return Response(data)
def validate(self, attrs): email = attrs.get('email') if User.objects.filter(username=email).exists(): msg = 'Failed to register customer' task_event_logging.delay(email, msg, attrs) raise serializers.ValidationError( {'username': '******'}) return attrs
def mutations(self, request, **kwargs): bank_info = self.get_object() mutations = bank_info.mutations.filter(is_deleted=False).order_by('-created') mutations = self.paginate_queryset(mutations) serializer = self.get_serializer(instance=mutations, many=True) msg = 'See transaction history.' task_event_logging.delay(bank_info.holder.user.email, msg, {}) return self.get_paginated_response(serializer.data)
def validate(self, attrs): sender = attrs.get('sender') if not sender.bankinformation.is_active: meta = dict(self.context.get('request').data) msg = 'Failed to deposit funds.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'sender': 'Bank account is blocked or inactive.'}) return attrs
def validate(self, attrs): sender = attrs.get('sender') amount = attrs.get('amount') sender_bank = BankInformation.objects.select_for_update().get( pk=sender.bankinformation.pk, ) if sender_bank.total_balance < amount: meta = dict(self.context.get('request').data) msg = 'Amount to transfer is exceeded to be withdraw.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'amount': 'Insufficient funds.'}) return super(WithdrawSerializer, self).validate(attrs)
def create(self, validated_data): sender = validated_data.get('sender') deposit_amount = validated_data.get('amount') deposit = BankStatement() deposit.bank_info = sender.bankinformation deposit.sender = sender deposit.receiver = sender deposit.amount = deposit_amount deposit.is_debit = True deposit.description = 'Amount withdrawn' deposit.save() msg = 'Succeed to withdraw funds.' attrs = dict(self.context.get('request').data) task_event_logging.delay(sender.user.email, msg, attrs) serializer = TransactionSerializer(instance=deposit) return serializer.data
def validate(self, attrs): sender = attrs.get('sender') try: account_number = attrs.get('destination_account_number') self.receiver_bank = BankInformation.objects.select_for_update( ).get(account_number=account_number, ) except BankInformation.DoesNotExist: meta = dict(self.context.get('request').data) msg = 'Failed to transfer, invalid destination account number.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'destination_account_number': 'Invalid account number.'}) # Ensure receiver bank is active. if not self.receiver_bank.is_active: meta = dict(self.context.get('request').data) msg = 'Failed to transfer, receiver bank is inactive.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'receiver': 'Bank account is blocked or inactive.'}) # Ensure sender bank is active. if not sender.bankinformation.is_active: meta = dict(self.context.get('request').data) msg = 'Failed to transfer, sender bank is inactive.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'sender': 'Bank account is blocked or inactive.'}) # Ensure sender bank has sufficient balance. sender_bank = BankInformation.objects.select_for_update().get( pk=sender.bankinformation.pk, ) if sender_bank.total_balance < attrs.get('amount'): meta = dict(self.context.get('request').data) msg = 'Failed to transfer, amount to be transfer is exceeded.' task_event_logging.delay(sender.user.email, msg, meta) raise serializers.ValidationError( {'amount': 'Insufficient funds.'}) return attrs