Beispiel #1
0
 def save_exchange_amount(self, user_input):
     self.session.set_data('exchange_amount', float(dollars_to_cents(user_input)))
    def post(self):
        # Handle a file upload, or CSV in JSON
        if request.files:
            flask_file = request.files['file']
            stream = codecs.iterdecode(flask_file.stream, 'utf-8')
            reader = csv.DictReader(stream)
        else:
            post_data = request.get_json()
            if not post_data:
                response_object = {'message': 'Please provide a CSV file'}
                return make_response(jsonify(response_object)), 400

            csv_data = post_data.get('csv_data', [])
            f = io.StringIO(csv_data)
            reader = csv.DictReader(f)

        transfers = []
        for line in reader:
            tid = line['Transfer ID']
            transfer = db.session.query(CreditTransfer).filter(
                CreditTransfer.id == tid).first()
            message = ''

            if not transfer:
                message = f'Transfer with ID {tid} not found!'
                transfers.append((tid, None, message))
                continue

            if transfer.transfer_type != TransferTypeEnum.WITHDRAWAL:
                message = f'Not a withdrawal!'
                transfers.append((tid, None, message))
                continue

            got_amount = round(dollars_to_cents(line["UnitAmount"]))
            expected_amount = round(transfer.transfer_amount)
            if got_amount != expected_amount:
                message = f'Transfer Amounts do not match (got {cents_to_dollars(got_amount)}, expected {cents_to_dollars(expected_amount)})!'
                transfers.append((tid, None, message))
                continue

            try:
                if line['Payment Has Been Made'].upper(
                ) == 'TRUE' and line['Bank Payment Date']:
                    transfer.resolve_as_complete_and_trigger_blockchain()
                    message = 'Transfer Success'
                elif line['Payment Has Been Made'] == 'FALSE':
                    transfer.resolve_as_rejected()
                    message = 'Transfer Rejected'
            except Exception as e:
                message = str(e)

            transfers.append((tid, transfer, message))

        output = io.StringIO()
        writer = csv.writer(output)

        writer.writerow([
            'Transfer ID', 'Vendor Account ID', 'Phone', 'First Name',
            'Last Name', 'Transfer Created', 'Transfer Type',
            'Transfer Amount', 'Transfer Status', 'Message'
        ])
        for tid, t, m in transfers:
            writer.writerow([
                tid, t and t.sender_transfer_account.id, t
                and t.sender_transfer_account.primary_user.phone, t
                and t.sender_transfer_account.primary_user.first_name, t
                and t.sender_transfer_account.primary_user.last_name, t
                and t.created, t and t.transfer_type.value, t
                and cents_to_dollars(t.transfer_amount), t
                and t.transfer_status.value, m
            ])
        bytes_output = io.BytesIO()
        bytes_output.write(output.getvalue().encode('utf-8'))
        bytes_output.seek(0)
        return send_file(bytes_output,
                         as_attachment=True,
                         attachment_filename='vendor_payout.csv',
                         mimetype='text/csv')
Beispiel #3
0
 def save_transaction_amount(self, user_input):
     self.session.set_data('transaction_amount', float(dollars_to_cents(user_input)))
Beispiel #4
0
def tets_dollars_to_cents():
    assert CreditTransferUtils.dollars_to_cents(1) == 100