Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.69 KB | None | 0 0
  1. from django.shortcuts import render, render_to_response, get_object_or_404
  2. from django.http import HttpResponse, HttpResponseRedirect
  3. from proyecto.forms import UserForm, ClienteForm, CuentaAhorroForm, MovimientoForm
  4. from proyecto.models import Cliente, Tarjeta, Banco, Movimiento, CuentaAhorro, Tarjeta
  5. from django.contrib.auth import authenticate, login, logout
  6. from django.contrib.auth.models import User
  7. from django.contrib.auth.decorators import login_required
  8. from apihelper import info
  9. from random import randint
  10. import datetime
  11. import math
  12.  
  13. def index(request):
  14.     template = "pages/homepage.html"
  15.     return render(request, template, {})
  16.  
  17. def register(request):
  18.     registered = False
  19.     if request.method == 'POST':
  20.         user_form = UserForm(data=request.POST)
  21.         cliente_form = ClienteForm(data=request.POST)
  22.        
  23.         if user_form.is_valid() and cliente_form.is_valid():
  24.             user = user_form.save()
  25.             user.set_password(user.password)
  26.             user.save()
  27.            
  28.             cliente = cliente_form.save(commit=False)
  29.             cliente.user = user
  30.             cliente.save()
  31.            
  32.             registered = True
  33.     else:
  34.         user_form = UserForm()
  35.         cliente_form = ClienteForm()
  36.        
  37.     context_dict = {'user_form': user_form, 'cliente_form': cliente_form, 'registered': registered}
  38.     return render(request, 'pages/register.html', context_dict)
  39.  
  40. def user_login(request):
  41.     if request.method == 'POST':
  42.         username = request.POST['username']
  43.         password = request.POST['password']
  44.         user = authenticate(username=username, password=password)
  45.         if user:
  46.             if user.is_active:
  47.                 login(request, user)
  48.                 return HttpResponseRedirect('/')
  49.             else:
  50.                 return HttpResponse(' Tu cuenta no esta activa ')
  51.         else:
  52.             return render(request, 'pages/login.html', {'mensaje': 'Usuario incorrecto'})
  53.     else:
  54.         return render(request, 'pages/login.html', {})
  55.  
  56. @login_required
  57. def user_logout(request):
  58.     logout(request)
  59.     return HttpResponseRedirect('/')
  60.  
  61. @login_required
  62. def create_account(request):
  63.     bancos = Banco.objects.all()
  64.    
  65.     if request.method == 'POST':
  66.         cuentaahorro_form = CuentaAhorroForm(data=request.POST)
  67.         if cuentaahorro_form.is_valid():
  68.             # Crea la cuenta de ahorros
  69.             montoinicial = request.POST['montoinicial']
  70.             cliente = Cliente.objects.get(user=request.user)
  71.             cuentaahorro = cuentaahorro_form.save(commit=False)
  72.             cuentaahorro.cliente = cliente
  73.             cuentaahorro.saldocontable = montoinicial
  74.             cuentaahorro.saldodisponible = montoinicial
  75.             cuentaahorro.save()
  76.            
  77.             # Asocia una tarjeta a la cuenta creada
  78.             tarjeta = Tarjeta()
  79.             tarjeta.cuentaahorro = cuentaahorro
  80.             tarjeta.numerotarjeta = randint(10000000,99999999)
  81.             hoy = datetime.date.today()
  82.             dia = hoy.day
  83.             mes = hoy.month
  84.             anio = hoy.year
  85.             vencimiento = datetime.date(anio+1 ,mes ,dia)
  86.             tarjeta.fechavencimiento = vencimiento
  87.             tarjeta.estadotarjeta = 0
  88.             tarjeta.save()
  89.            
  90.             # Registra como primer movimiento
  91.             movimiento = Movimiento()
  92.             movimiento.cuentaahorro = cuentaahorro
  93.             movimiento.tipomovimiento = 'D'
  94.             movimiento.montomovimiento = montoinicial
  95.             movimiento.fechamovimiento = hoy
  96.             movimiento.save()
  97.            
  98.             return dashboard(request)
  99.     else:
  100.         cuentaahorro_form = CuentaAhorroForm()
  101.  
  102.     context_dict = {'cuentaahorro_form': cuentaahorro_form, 'bancos': bancos}
  103.     return render(request, 'pages/create_account.html', context_dict)
  104.    
  105. @login_required
  106. def dashboard(request):
  107.     cliente = Cliente.objects.get(user=request.user)
  108.     cuentas = CuentaAhorro.objects.filter(cliente=cliente)
  109.     tarjetas = Tarjeta.objects.filter(cuentaahorro=cuentas)
  110.     context_dict = {'tarjetas':tarjetas}
  111.     return render(request, 'pages/dashboard.html', context_dict)
  112.  
  113. def capitaliza(saldoAnt, tep, diasTRANS, diasTEP, montoTrans):
  114.     return 10
  115.  
  116. @login_required
  117. def bankdetail(request, numerotarjeta):
  118.     tarjeta = get_object_or_404(Tarjeta, numerotarjeta=numerotarjeta)
  119.     cuenta = tarjeta.cuentaahorro
  120.     movimientos = Movimiento.objects.filter(cuentaahorro=cuenta)
  121.     movimientos = movimientos.order_by('-fechamovimiento')
  122.     saldo = 0
  123.     if request.method == 'POST':
  124.         movimiento_form = MovimientoForm(data=request.POST)
  125.         if movimiento_form.is_valid():
  126.             nuevomonto = request.POST['nuevomonto']
  127.             fechamov = request.POST['fechamov']
  128.            
  129.             # validacion si puede sacar el dinero
  130.             # segun fecha
  131.             tipomovimiento = request.POST['tipomovimiento']
  132.            
  133.             fechamovFIXED = datetime.datetime.strptime(fechamov, "%Y-%m-%d")
  134.             fechamovFIXED = fechamovFIXED.date()
  135.            
  136.             movimientosAnteriores = []
  137.             for mov in movimientos:
  138.                 if mov.fechamovimiento <= fechamovFIXED:
  139.                     movimientosAnteriores.append(mov)
  140.             movimientosAnteriores.reverse()
  141.            
  142.             for m in movimientosAnteriores:
  143.                 print "%s - %s" % (m.fechamovimiento,m.montomovimiento)
  144.            
  145.             saldoAFecha = 0
  146.             diasTrans = 0
  147.             diasExtra = 0
  148.            
  149.             for i in range(len(movimientosAnteriores)):
  150.                 if i == 0:
  151.                     if len(movimientosAnteriores) == 1:
  152.                         print ">>ENTRO CUANDO HAY UNO"
  153.                         diasExtra = (fechamovFIXED-movimientosAnteriores[i].fechamovimiento).days
  154.                    
  155.                     diasTrans = 0
  156.                 else:
  157.                     if i == (len(movimientosAnteriores)-1):
  158.                         print ">>ENTRO CUANDO HAY VARIOS"
  159.                         diasExtra = (fechamovFIXED-movimientosAnteriores[i].fechamovimiento).days
  160.  
  161.                     diasTrans = (movimientosAnteriores[i].fechamovimiento -
  162.                     movimientosAnteriores[i-1].fechamovimiento).days
  163.  
  164.                 exp = float(diasTrans)/float(360)
  165.  
  166.                 if movimientosAnteriores[i].tipomovimiento == 'R':
  167.                     movimientosAnteriores[i].montomovimiento = movimientosAnteriores[i].montomovimiento * -1
  168.  
  169.                 saldoAFecha = saldoAFecha*(1.0+0.05)**exp
  170.                 saldoAFecha = saldoAFecha + float(movimientosAnteriores[i].montomovimiento)
  171.            
  172.             #aumentandole los dias que el usuario setea
  173.             print diasExtra
  174.             if diasExtra > 0:
  175.                 print "MOSO"
  176.                 exp = float(diasExtra)/float(360)
  177.                 saldoAFecha  = saldoAFecha*(1.0+0.05)**exp
  178.            
  179.             saldo = saldoAFecha
  180.            
  181.             print saldo
  182.             print nuevomonto
  183.            
  184.             puedeTransaccionar = True
  185.             if tipomovimiento == 'R':
  186.                 if float(saldo) <= float(nuevomonto):
  187.                     puedeTransaccionar = False
  188.            
  189.             if puedeTransaccionar:
  190.                 print "SI PUEDE CAUSA"
  191.                
  192.                 movimientonuevo = movimiento_form.save(commit=False)
  193.                 movimientonuevo.cuentaahorro = cuenta
  194.                 movimientonuevo.montomovimiento = nuevomonto
  195.                 movimientonuevo.fechamovimiento = fechamov
  196.                 movimientonuevo.save()
  197.                
  198.                 template = "/dashboard/%s" % numerotarjeta
  199.  
  200.                 #return render(request, template, {'saldo':saldo}
  201.                 #return HttpResponseRedirect(template)
  202.                
  203.     else:
  204.         movimiento_form = MovimientoForm()
  205.  
  206.     # movimientos
  207.     moneda = cuenta.moneda.simbolomoneda
  208.     primerMov = movimientos.last()
  209.     ultimoMov = movimientos.first()
  210.    
  211.     # Resumen
  212.     diasElapsed = (ultimoMov.fechamovimiento-primerMov.fechamovimiento).days
  213.     cantDepositos = 0
  214.     cantRetiros = 0
  215.     for m in movimientos:
  216.         if m.tipomovimiento == 'D':
  217.             cantDepositos = cantDepositos + 1
  218.         elif m.tipomovimiento == 'R':
  219.                 cantRetiros = cantRetiros + 1
  220.    
  221.     context_dict = {'movimiento_form':movimiento_form, 'tarjeta':tarjeta,
  222.                     'movimientos':movimientos,'moneda':moneda,
  223.                     'diasElapsed':diasElapsed, 'cantDepositos':cantDepositos,
  224.                     'cantRetiros':cantRetiros, 'saldo':saldo}
  225.     return render(request, 'pages/dashboard-bank.html', context_dict)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement