All pastes #183119 Raw Edit

Stuff

public text v1 · immutable
#183119 ·published 2006-09-26 16:51 UTC
rendered paste body
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/")