1
0

views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. from django.shortcuts import render, redirect
  2. from . forms import LoginForm, CreateUserForm, TimeEntryForm, SettingsForm
  3. from . models import User, Setting, Entry
  4. from hashlib import sha256
  5. import datetime
  6. def hash_pin(pin):
  7. return sha256(pin.encode('utf-8')).hexdigest()
  8. def get_user(uid):
  9. user = User.objects.get(id=uid)
  10. return user
  11. def check_setup():
  12. settings = Setting.objects.all()
  13. if len(settings) > 0:
  14. return True
  15. else:
  16. return False
  17. def logout_user(request):
  18. request.session['authenticated'] = False
  19. return redirect('home')
  20. def requires_auth(request):
  21. auth = request.session.get('authenticated', None)
  22. if auth is True:
  23. return True
  24. else:
  25. return False
  26. def setup(request):
  27. if check_setup() is True:
  28. return redirect('home')
  29. form = SettingsForm()
  30. if request.method == "POST":
  31. form = SettingsForm(request.POST)
  32. if form.is_valid():
  33. data = form.cleaned_data
  34. s = Setting()
  35. s.setting = 'Max Daily Hours'
  36. s.value = data['max_daily_hours']
  37. s.save()
  38. s = Setting()
  39. s.setting = 'Session Timeout'
  40. s.value = data['session_timeout']
  41. s.save()
  42. s = Setting()
  43. s.setting = 'Allow Entry Edit'
  44. s.value = data['allow_entry_edit']
  45. s.save()
  46. return redirect('home')
  47. context = {
  48. 'form': form
  49. }
  50. return render(request, 'setup.html', context=context)
  51. def create_user(request):
  52. form = CreateUserForm()
  53. if request.method == "POST":
  54. form = CreateUserForm(request.POST)
  55. if form.is_valid():
  56. data = form.cleaned_data
  57. users = User.objects.filter(pin=hash_pin(data['pin']))
  58. if len(users) == 0:
  59. user = User()
  60. user.first_name = data['first_name']
  61. user.last_name = data['last_name']
  62. user.pin = data['pin']
  63. user.save()
  64. return redirect('timesheet')
  65. else:
  66. form.add_error('pin', 'PIN already exists')
  67. context = {
  68. 'form': form
  69. }
  70. return render(request, 'create_user.html', context=context)
  71. def home(request):
  72. if check_setup() is False:
  73. return redirect('setup')
  74. form = LoginForm
  75. login_error = False
  76. if request.method == "POST":
  77. form = LoginForm(request.POST or None)
  78. if form.is_valid():
  79. data = form.cleaned_data
  80. pin = sha256(data['pin'].encode('utf-8')).hexdigest()
  81. user = User.objects.filter(pin=pin).first()
  82. if user is None:
  83. form.add_error('pin', 'Invalid login')
  84. login_error = True
  85. else:
  86. request.session['authenticated'] = True
  87. request.session['uid'] = user.id
  88. return redirect('timesheet')
  89. context = {
  90. 'form': form,
  91. 'login_error': login_error
  92. }
  93. return render(request, 'home.html', context=context)
  94. def timesheet(request):
  95. if requires_auth(request) is False:
  96. request.session['authenticated'] = False
  97. return redirect('home')
  98. uid = request.session.get('uid')
  99. user = get_user(uid)
  100. form = TimeEntryForm()
  101. if request.method == "POST":
  102. form = TimeEntryForm(request.POST)
  103. if form.is_valid():
  104. data = form.cleaned_data
  105. print(data)
  106. entry = Entry()
  107. entry.user = user
  108. entry.project = data['project']
  109. entry.date = datetime.datetime.now().date()
  110. entry.hours = data['hours']
  111. entry.minutes = data['minutes']
  112. entry.save()
  113. form = TimeEntryForm()
  114. entries = Entry.objects.filter(user__id=uid)
  115. time_entries = list()
  116. total_time_worked = 0
  117. for entry in entries:
  118. time_worked = float(entry.hours) + float(entry.minutes)
  119. e = {
  120. 'date': entry.date,
  121. 'hours': entry.hours,
  122. 'minutes': entry.minutes,
  123. 'project': entry.project,
  124. 'time_worked': time_worked,
  125. }
  126. time_entries.append(e)
  127. total_time_worked = float(total_time_worked) + time_worked
  128. context = {
  129. 'user': user,
  130. 'form': form,
  131. 'entries': time_entries,
  132. 'total_time_worked': total_time_worked,
  133. }
  134. return render(request, 'timesheet.html', context=context)