from django.db import models # Create your models here. class Office(models.Model): location = models.CharField(maxlength=200) def __str__(self): return self.location class Admin: pass class Department(models.Model): name = models.CharField("Name", maxlength="100") class Admin: pass def __str__(self): return self.name class LoginBox(models.Model): name = models.CharField("Name", maxlength="100") ip = models.IPAddressField("IP") class Admin: pass def __str__(self): return "%s [%s]" % (self.name, self.ip) @classmethod def requestFromLogin(klass, request): try: box = LoginBox.objects.get(ip=request.META['REMOTE_ADDR']) except LoginBox.DoesNotExist: return False return True class Employee(models.Model): fullname = models.CharField("Full Name", maxlength=200) email = models.EmailField("Email", null=True) employeeNumber = models.CharField("Employee Number", maxlength=10) leaver = models.BooleanField("Leaver") contracter = models.BooleanField("Contracter") department = models.ForeignKey(Department, verbose_name = "Department") defaultLocation = models.ForeignKey(Office, null=True, verbose_name = "Default Location") class Admin: pass def __str__(self): return self.fullname def logged_in(self): try: lastEvent = Event.objects.filter(employee=self).order_by('-event_time')[0] except IndexError: return False return ( lastEvent.event == 'IN' ) class Event(models.Model): EVENTS = ( ('IN', 'Login'), ('OUT', 'Logout'), ) employee = models.ForeignKey("Employee", verbose_name = "Employee") event_time = models.DateTimeField("Event Time") event = models.CharField("Event", choices = EVENTS, maxlength = 5) class Admin: pass def __str__(self): return "%s %s %s" % (self.employee, self.event_time, self.event) class OutEvent(models.Model): event = models.ForeignKey(Event, verbose_name = "Event") breaks = models.IntegerField("Total Breaks") hadFood = models.BooleanField("Had Food") hadTaxi = models.BooleanField("Had Taxi") comment = models.CharField("Comment", maxlength = 200) class Admin: pass def __str__(self): return "%s %s %s %s" % (self.event, self.breaks, self.hadFood, self.hadTaxi) ------------------------------------------------------------------------------------- # Create your views here. from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponse, HttpResponseRedirect from timesite.timesheet.models import * from datetime import datetime def index(request): if LoginBox.requestFromLogin(request): return HttpResponseRedirect("/login/") return HttpResponseRedirect("/admin/") def login(request): all_emps = Employee.objects.all().order_by('fullname') return render_to_response('timesheet/login.html', {'all_emps': all_emps}) def login_action(request, employee_id): employee = get_object_or_404(Employee, pk=employee_id) if employee.logged_in(): if request.POST.has_key('doOut'): ev = Event(employee = employee, event_time = datetime.now(), event = "OUT") ev.save() outev = OutEvent(event = ev, breaks = int(request.POST['totalBreaks']), hadFood = request.POST.has_key('hadFood'), hadTaxi = request.POST.has_key('hadTaxi'), comment = request.POST['comment'] ) outev.save() return HttpResponseRedirect("/login/") return render_to_response('timesheet/login_out.html', {'employee': employee}) else: ev = Event(employee = employee, event_time = datetime.now(), event = "IN") ev.save() return HttpResponseRedirect("/login/")