Now using django-reversion to audit changes to django objects.
[htsworkflow.git] / samplebc / samples / models.py
1 from django.db import models
2 from django.db.models import signals
3 from django.contrib.auth.models import User, Group
4
5 #AUDIT_TYPES = [('Create', 'Create'),
6 #               ('Update', 'Update'),
7 #               ('Delete', 'Delete')]
8
9 EXP_TYPES = [('RNASeq', 'RNASeq'),
10              ('ChIPSeq','ChIPSeq'),
11              ('DeNovoSeq','DeNovoSeq'),
12              ('MethylSeq','MethylSeq')]
13
14 FREEZER_BUILDINGS = [('Kerckhoff', 'Kerckhoff')]
15
16
17
18 class Owner(models.Model):
19     name = models.CharField(max_length=32)
20     
21     def __unicode__(self):
22         return u'%s' % (self.name)
23
24
25 class Freezer(models.Model):
26     name = models.CharField(max_length=256)
27     building = models.CharField(max_length=256, choices=FREEZER_BUILDINGS,
28                                 default=FREEZER_BUILDINGS[0][0])
29     loc_desc = models.CharField(max_length=256, blank=True, null=True)
30     temperature = models.FloatField(help_text='Celsius')
31     
32     notes = models.TextField(blank=True, null=True)
33     
34     uuid = models.CharField(max_length=32, unique=True)
35     
36     def __unicode__(self):
37         return u'%s (%s; %sC)' % (self.name, self.building, self.temperature)
38         
39     @models.permalink
40     def get_absolute_url(self):
41         return ('samplebc.samples.views.freezer_summary', [str(self.uuid)])
42
43     
44 class SampleType(models.Model):
45     name = models.CharField(max_length=256)
46     
47     def __unicode__(self):
48         return u'%s' % (self.name)
49
50
51 class Container(models.Model):
52     name = models.CharField(max_length=256)
53     sample_type = models.ManyToManyField(SampleType)
54     max_items = models.IntegerField()
55     freezer = models.ForeignKey(Freezer)
56     
57     notes = models.TextField(blank=True, null=True)
58     
59     uuid = models.CharField(max_length=32, unique=True)
60     
61     def __unicode__(self):
62         return u'%s (spc: %s)' % (self.name, self.space_available())
63         
64     @models.permalink
65     def get_absolute_url(self):
66         return ('samplebc.samples.views.container_summary', [str(self.uuid)])
67         
68     def space_available(self):
69         """
70         returns the space available for the container
71         """
72         return (self.max_items - self.sample_set.count())
73
74
75 class Sample(models.Model):
76     name = models.CharField(max_length=256)
77     sampleid = models.CharField(max_length=64, unique=True)
78     sample_type = models.ForeignKey(SampleType)
79     owner = models.ForeignKey(Owner)
80     
81     description = models.TextField()
82     
83     # Concentration in ng/ul
84     concentration = models.FloatField(help_text='ng/ul', blank=True, null=True)
85     volume = models.FloatField(help_text='ul', blank=True, null=True)
86     container = models.ForeignKey(Container, blank=True, null=True)
87     
88     def __unicode__(self):
89         return u's|%s|%s' % (self.sampleid, self.owner.name)
90         
91     @models.permalink
92     def get_absolute_url(self):
93         return ('samplebc.samples.views.sample_summary', [str(self.sampleid)])
94