|
@@ -1,25 +1,73 @@
|
|
from django.shortcuts import render, redirect
|
|
from django.shortcuts import render, redirect
|
|
-from . forms import LoginForm, CreateUserForm, TimeEntryForm
|
|
|
|
-from . models import User
|
|
|
|
|
|
+from . forms import LoginForm, CreateUserForm, TimeEntryForm, SettingsForm
|
|
|
|
+from . models import User, Setting, Entry
|
|
from hashlib import sha256
|
|
from hashlib import sha256
|
|
|
|
+import datetime
|
|
|
|
|
|
|
|
|
|
def hash_pin(pin):
|
|
def hash_pin(pin):
|
|
return sha256(pin.encode('utf-8')).hexdigest()
|
|
return sha256(pin.encode('utf-8')).hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
+def get_user(uid):
|
|
|
|
+ user = User.objects.get(id=uid)
|
|
|
|
+ return user
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def check_setup():
|
|
|
|
+ settings = Setting.objects.all()
|
|
|
|
+ if len(settings) > 0:
|
|
|
|
+ return True
|
|
|
|
+ else:
|
|
|
|
+ return False
|
|
|
|
+
|
|
|
|
+
|
|
def logout_user(request):
|
|
def logout_user(request):
|
|
- del request.session['authenticated']
|
|
|
|
|
|
+ request.session['authenticated'] = False
|
|
return redirect('home')
|
|
return redirect('home')
|
|
|
|
|
|
|
|
|
|
def requires_auth(request):
|
|
def requires_auth(request):
|
|
- return request.session.get('authenticated')
|
|
|
|
|
|
+ auth = request.session.get('authenticated', None)
|
|
|
|
+ if auth is True:
|
|
|
|
+ return True
|
|
|
|
+ else:
|
|
|
|
+ return False
|
|
|
|
|
|
|
|
|
|
-def get_user(uid):
|
|
|
|
- user = User.objects.get(id=uid)
|
|
|
|
- return user
|
|
|
|
|
|
+def setup(request):
|
|
|
|
+ if check_setup() is True:
|
|
|
|
+ return redirect('home')
|
|
|
|
+
|
|
|
|
+ form = SettingsForm()
|
|
|
|
+
|
|
|
|
+ if request.method == "POST":
|
|
|
|
+ form = SettingsForm(request.POST)
|
|
|
|
+ if form.is_valid():
|
|
|
|
+ data = form.cleaned_data
|
|
|
|
+
|
|
|
|
+ s = Setting()
|
|
|
|
+ s.setting = 'Max Daily Hours'
|
|
|
|
+ s.value = data['max_daily_hours']
|
|
|
|
+ s.save()
|
|
|
|
+
|
|
|
|
+ s = Setting()
|
|
|
|
+ s.setting = 'Session Timeout'
|
|
|
|
+ s.value = data['session_timeout']
|
|
|
|
+ s.save()
|
|
|
|
+
|
|
|
|
+ s = Setting()
|
|
|
|
+ s.setting = 'Allow Entry Edit'
|
|
|
|
+ s.value = data['allow_entry_edit']
|
|
|
|
+ s.save()
|
|
|
|
+
|
|
|
|
+ return redirect('home')
|
|
|
|
+
|
|
|
|
+ context = {
|
|
|
|
+ 'form': form
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return render(request, 'setup.html', context=context)
|
|
|
|
|
|
|
|
|
|
def create_user(request):
|
|
def create_user(request):
|
|
@@ -47,6 +95,8 @@ def create_user(request):
|
|
|
|
|
|
|
|
|
|
def home(request):
|
|
def home(request):
|
|
|
|
+ if check_setup() is False:
|
|
|
|
+ return redirect('setup')
|
|
form = LoginForm
|
|
form = LoginForm
|
|
login_error = False
|
|
login_error = False
|
|
if request.method == "POST":
|
|
if request.method == "POST":
|
|
@@ -55,7 +105,6 @@ def home(request):
|
|
data = form.cleaned_data
|
|
data = form.cleaned_data
|
|
pin = sha256(data['pin'].encode('utf-8')).hexdigest()
|
|
pin = sha256(data['pin'].encode('utf-8')).hexdigest()
|
|
user = User.objects.filter(pin=pin).first()
|
|
user = User.objects.filter(pin=pin).first()
|
|
- print(user)
|
|
|
|
if user is None:
|
|
if user is None:
|
|
form.add_error('pin', 'Invalid login')
|
|
form.add_error('pin', 'Invalid login')
|
|
login_error = True
|
|
login_error = True
|
|
@@ -73,24 +122,51 @@ def home(request):
|
|
|
|
|
|
|
|
|
|
def timesheet(request):
|
|
def timesheet(request):
|
|
- if requires_auth(request):
|
|
|
|
- uid = request.session.get('uid')
|
|
|
|
- user = get_user(uid)
|
|
|
|
|
|
+ if requires_auth(request) is False:
|
|
|
|
+ request.session['authenticated'] = False
|
|
|
|
+ return redirect('home')
|
|
|
|
|
|
- form = TimeEntryForm()
|
|
|
|
|
|
+ uid = request.session.get('uid')
|
|
|
|
+ user = get_user(uid)
|
|
|
|
|
|
- if request.method == "POST":
|
|
|
|
- form = TimeEntryForm(request.POST)
|
|
|
|
- if form.is_valid():
|
|
|
|
- data = form.cleaned_data
|
|
|
|
- print(data)
|
|
|
|
|
|
+ form = TimeEntryForm()
|
|
|
|
|
|
- context = {
|
|
|
|
- 'user': user,
|
|
|
|
- 'form': form,
|
|
|
|
|
|
+ if request.method == "POST":
|
|
|
|
+ form = TimeEntryForm(request.POST)
|
|
|
|
+ if form.is_valid():
|
|
|
|
+ data = form.cleaned_data
|
|
|
|
+ print(data)
|
|
|
|
+ entry = Entry()
|
|
|
|
+ entry.user = user
|
|
|
|
+ entry.project = data['project']
|
|
|
|
+ entry.date = datetime.datetime.now().date()
|
|
|
|
+ entry.hours = data['hours']
|
|
|
|
+ entry.minutes = data['minutes']
|
|
|
|
+ entry.save()
|
|
|
|
+
|
|
|
|
+ form = TimeEntryForm()
|
|
|
|
+
|
|
|
|
+ entries = Entry.objects.filter(user__id=uid)
|
|
|
|
+
|
|
|
|
+ time_entries = list()
|
|
|
|
+ total_time_worked = 0
|
|
|
|
+ for entry in entries:
|
|
|
|
+ time_worked = float(entry.hours) + float(entry.minutes)
|
|
|
|
+ e = {
|
|
|
|
+ 'date': entry.date,
|
|
|
|
+ 'hours': entry.hours,
|
|
|
|
+ 'minutes': entry.minutes,
|
|
|
|
+ 'project': entry.project,
|
|
|
|
+ 'time_worked': time_worked,
|
|
}
|
|
}
|
|
|
|
+ time_entries.append(e)
|
|
|
|
+ total_time_worked = float(total_time_worked) + time_worked
|
|
|
|
|
|
- return render(request, 'timesheet.html', context=context)
|
|
|
|
- else:
|
|
|
|
- request.session['authenticated'] = False
|
|
|
|
- return redirect('home')
|
|
|
|
|
|
+ context = {
|
|
|
|
+ 'user': user,
|
|
|
|
+ 'form': form,
|
|
|
|
+ 'entries': time_entries,
|
|
|
|
+ 'total_time_worked': total_time_worked,
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return render(request, 'timesheet.html', context=context)
|