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')
def save_transaction_amount(self, user_input): self.session.set_data('transaction_amount', float(dollars_to_cents(user_input)))
def tets_dollars_to_cents(): assert CreditTransferUtils.dollars_to_cents(1) == 100