Ejemplo n.º 1
0
 def process_transfer_form(self, user):
     current_month_transfer = float(self.request.get("current_month"))
     
     if self.request.get("last_month"):
         last_month_transfer = float(self.request.get("last_month"))
     else:
         last_month_transfer = None
     
     if self.request.get("start_date"):
         from datetime import datetime
         start_date = datetime.strptime(self.request.get("start_date"), "%Y-%m-%d").date()
     else:
         start_date = None
             
     user_id = user.user_id
     parent = user.key()
     
     try:
         if start_date:
             # if we're here, it means that this is the first time the user has submitted the form
             # at this point, user has no transfers yet
             transfer = Transfer(
                 user_id=user_id, key_name=user_id, parent=parent, start_date=start_date, monthly_transfers=[current_month_transfer]
             )
         else:
             # user is updating or entering new transfer
             transfer = user.transfers()
         
             if last_month_transfer:
                 # update last month's transfer
                 transfer.monthly_transfers[-1] = last_month_transfer
             
             transfer.monthly_transfers.append(current_month_transfer)
                 
         transfer.put()
         self.render(
             'transfer_dashboard',
             message="Your transfer has been saved.",
             success=True,
             total_transfers=Application.app().total_transfers or 0,
             show_graph=True
         )
     except:
         self.render(
             "transfer_dashboard",
             message="Data not saved. Please ensure that you've entered the correct information.", 
             success=False
         )
Ejemplo n.º 2
0
async def new_transfer(request: Request) -> json_response:
    try:
        transfer = await request.json()
        if len(transfer['master']) < 0:
            return failure_response(403, 'Authorize please')
        if 8 > len(transfer['whom']) > 20:
            return failure_response(400, 'Invalid length of destination email')
        if transfer['amount'] is None or int(transfer['amount']) < 0:
            return failure_response(400, 'Invalid amount')
        pool = request.app['pool']
        async with pool.acquire() as conn:
            async with conn.transaction():
                users = await conn.fetch(
                    'SELECT * FROM users WHERE key=\'{}\''.format(
                        transfer['master']))
                if len(users) == 0:
                    return failure_response(403, 'Authorize please')
                else:
                    if users[0]['email'] == transfer['whom']:
                        return failure_response(400, 'Not bad')
                    if int(users[0]['balance']) < 0:
                        return failure_response(
                            402, 'There is no money in your account')
                    if users[0]['balance'] < int(transfer['amount']):
                        return failure_response(
                            400, 'There is not enough money in your account')
                    u_dests = await conn.fetch(
                        'SELECT * FROM users WHERE email=\'{}\''.format(
                            transfer['whom']))
                    if len(u_dests) == 0:
                        return failure_response(400,
                                                'No such destination email')
                    else:
                        dest = u_dests[0]
                        # how to get last element F**K (MAX & LIMIT didn't work)
                        transfers = await conn.fetch(
                            '''SELECT * FROM transfers''')
                        t = Transfer(master=transfer['master'],
                                     amount=transfer['amount'],
                                     whom=transfer['whom'],
                                     prev=transfer_record_to_json_string(
                                         transfers[-1]))
                        await conn.fetch('''
                        INSERT INTO transfers (transfer_hash, master, whom, amount, time)
                        VALUES (\'{}\', \'{}\', \'{}\', {}, \'{}\')
                        '''.format(t.transfer_hash, users[0]['email'], t.whom,
                                   t.amount, t.time))
                        await conn.fetch(
                            'UPDATE users SET balance={}  WHERE email=\'{}\''.
                            format((users[0]['balance'] -
                                    int(transfer['amount'])),
                                   users[0]['email']))
                        await conn.fetch(
                            'UPDATE users SET balance={}  WHERE email=\'{}\''.
                            format((dest['balance'] + int(transfer['amount'])),
                                   dest['email']))
                        logger.info('New Transfer {} send {} to {}'.format(
                            users[0]['email'], transfer['amount'],
                            transfer['whom']))
                        return success_response(200, 'ok')
    except Exception as e:
        return server_error_response(e)
Ejemplo n.º 3
0
Archivo: user.py Proyecto: tghali/EEU
 def transfers(self):
     return Transfer.get_by_key_name(self.user_id, parent=self)
Ejemplo n.º 4
0
import datetime

from models.transfer import Transfer
from models.application import Application

active_transfers = 0.0
total_transfers = 0.0
today = datetime.date.today()

for transfer in Transfer.all():
    if transfer.start_date <= today:
        total_transfers += sum(transfer.monthly_transfers)
        
app = Application.app()
app.total_transfers = total_transfers
app.put()