Project

General

Profile

Statistics
| Branch: | Revision:

root / crm / robocrm / models.py @ a048cd77

History | View | Annotate | Download (4.23 KB)

1 988e217a Julian Binder
from django.db import models
2 03f9c52d Julian Binder
from django.contrib.auth.models import User
3
from django.db.models.signals import post_save
4
5 b2863bff Julian Binder
# Machine Model
6
class Machine(models.Model):
7
  type = models.CharField(max_length=20)
8
  id = models.CharField(max_length=10, primary_key=True)
9
  maint = models.BooleanField(default=False)
10 a048cd77 Julian Binder
  dstart = models.DateTimeField(blank=True)
11
  dend = models.DateTimeField(blank=True)
12 bb0c65c6 Julian Binder
  
13
  def __unicode__(self):
14
    return u'%s %s' % (self.type, self.id)
15 988e217a Julian Binder
16
# User Model
17 03f9c52d Julian Binder
class RoboUser(models.Model):
18
  # Field is required when using profiles 
19
  user = models.OneToOneField(User)
20
21
  # Roboclub RFID Card number
22 a048cd77 Julian Binder
  rfid = models.DecimalField(max_digits=10, decimal_places=0, blank=True)
23 cd771306 Julian Binder
  
24 03f9c52d Julian Binder
  # Roboclub Shop Access Permissions
25
  machines = models.ManyToManyField(Machine)
26
27
  # Cell Phone
28 a048cd77 Julian Binder
  cell = models.DecimalField(max_digits=10, decimal_places=0, blank=True)
29 cd771306 Julian Binder
30 03f9c52d Julian Binder
  # Class Level
31
  FRESHMAN = 'FR'
32
  SOPHOMORE = 'SO'
33
  JUNIOR = 'JR'
34
  SENIOR = 'SR'
35
  MASTERS = 'MS'
36
  DOCTORAL = 'DR'
37
  CLASS_LEVEL_CHOICES = (
38
      (FRESHMAN, 'Freshman'),
39
      (SOPHOMORE, 'Sophomore'),
40
      (JUNIOR, 'Junior'),
41
      (SENIOR, 'Senior'),
42 b2863bff Julian Binder
      (MASTERS, 'Masters'),
43 03f9c52d Julian Binder
      (DOCTORAL, 'Doctoral'),
44
  )
45
  class_level = models.CharField(max_length=2, 
46
                                 choices=CLASS_LEVEL_CHOICES,
47
                                 default=FRESHMAN)
48 cd771306 Julian Binder
49 03f9c52d Julian Binder
  # Graduation Year
50
  grad_year = models.DecimalField(max_digits=4, decimal_places=0)
51 cd771306 Julian Binder
52 03f9c52d Julian Binder
  # Primary and Secondary Major/Minors
53
  major = models.CharField(max_length=20)
54 a048cd77 Julian Binder
  sec_major_one = models.CharField(max_length=20, blank=True)
55
  sec_major_two = models.CharField(max_length=20, blank=True)
56 03f9c52d Julian Binder
57
  #Club Rank
58
  JUNIOR_MEM = 'JM'
59
  SENIOR_MEM = 'SM'
60
  OFFICER = 'OM'
61
  CLUB_RANK_CHOICES = (
62
      (JUNIOR_MEM, 'Junior Member'),
63
      (SENIOR_MEM, 'Senior Member'),
64
      (OFFICER, 'Officer'),
65
  )
66
  club_rank = models.CharField(max_length=2, 
67
                               choices=CLUB_RANK_CHOICES,
68
                               default=JUNIOR_MEM)
69
  
70
  # Roboclub Transaction Info
71
  dues_paid = models.DateField()
72
  tshirt_rec = models.BooleanField(default=False)
73 988e217a Julian Binder
  
74 03f9c52d Julian Binder
  # Shop and E-Bench Status
75
  GOOD = 'GD'
76
  FIRST_WARN = 'FS'
77
  SECOND_WARN = 'SD'
78
  SEM_BAN = 'SB'
79
  CLUB_BAN = 'CB'
80
  STATUS_CHOICES = (
81
      (GOOD, 'Good Standing'),
82
      (FIRST_WARN, 'First Warning Recieved'),
83
      (SECOND_WARN, 'Second Warning Recieved'),
84
      (SEM_BAN, 'Semester Ban'),
85
      (CLUB_BAN, 'Club Ban')
86
  )
87
  bench_status = models.CharField(max_length=2,
88
                                  choices=STATUS_CHOICES,
89
                                  default=GOOD)
90
  shop_status = models.CharField(max_length=2,
91
                                  choices=STATUS_CHOICES,
92
                                  default=GOOD)
93 bb0c65c6 Julian Binder
  def __unicode__(self):
94
    return self.user.username;
95
96 03f9c52d Julian Binder
# needed for Django Auth model
97
def create_roboclub_user(sender, instance, created, **kwargs):
98
  if created:
99
      RoboUser.objects.create(user=instance)
100
post_save.connect(create_roboclub_user, sender=User)
101
102
103
# Event Model
104 b2863bff Julian Binder
class Event(models.Model):
105 03f9c52d Julian Binder
  type = models.CharField(max_length=30)
106
  tstart = models.DateTimeField()
107
  tend = models.DateTimeField()
108
  user = models.ForeignKey('RoboUser')
109
  succ = models.BooleanField(default=False)
110
  imgurl = models.URLField()
111
  machine = models.ForeignKey('Machine')
112
  project = models.ForeignKey('Project')
113
  matuse = models.TextField()
114 bb0c65c6 Julian Binder
  
115
  def __unicode__(self):
116
    return u'%s %s %s' (self.type, self.user.username, self.succ)
117 03f9c52d Julian Binder
118
# Project Model
119 b2863bff Julian Binder
class Project(models.Model):
120 03f9c52d Julian Binder
  name = models.CharField(max_length=30)
121 b2863bff Julian Binder
  primuser = models.ForeignKey('RoboUser', related_name='pri+')
122
  users = models.ManyToManyField('RoboUser', related_name='u+')
123 03f9c52d Julian Binder
  charge = models.BooleanField(default=False)
124 bb0c65c6 Julian Binder
  def __unicode__(self):
125
    return self.name
126 03f9c52d Julian Binder
127
# Roboclub Resources Model
128 b2863bff Julian Binder
class RoboResource(models.Model):
129 03f9c52d Julian Binder
  type = models.CharField(max_length=30)
130 b2863bff Julian Binder
  id = models.CharField(max_length=20, primary_key=True)
131 03f9c52d Julian Binder
  checked_out = models.BooleanField(default=False)
132 a048cd77 Julian Binder
  user = models.ForeignKey('RoboUser', related_name='u+', blank=True)
133
  time_out = models.DateTimeField(blank=True)
134
  time_due = models.DateTimeField(blank=True)
135
  officer = models.ForeignKey('RoboUser', related_name='o+', blank=True)
136 bb0c65c6 Julian Binder
  def __unicode__(self):
137
    return u'%s %s %s' (self.type, self.id, self.checked_out)