Import of sampletracker.bzr revno 42! What a great revision number to migrate to...
[htsworkflow.git] / samplebc / samples / models.py
1 from django.db import models
2
3 # Create your models here.
4
5 EXP_TYPES = [('RNASeq', 'RNASeq'),
6              ('ChIPSeq','ChIPSeq'),
7              ('DeNovoSeq','DeNovoSeq'),
8              ('MethylSeq','MethylSeq')]
9 FREEZER_BUILDINGS = [('Kerckhoff', 'Kerckhoff')]
10
11
12 class Owner(models.Model):
13     name = models.CharField(max_length=32)
14     
15     def __unicode__(self):
16         return u'%s' % (self.name)
17
18
19 class Freezer(models.Model):
20     name = models.CharField(max_length=256)
21     building = models.CharField(max_length=256, choices=FREEZER_BUILDINGS,
22                                 default=FREEZER_BUILDINGS[0][0])
23     loc_desc = models.CharField(max_length=256, blank=True, null=True)
24     temperature = models.FloatField(help_text='Celsius')
25     
26     uuid = models.CharField(max_length=32, unique=True)
27     
28     def __unicode__(self):
29         return u'%s (%s; %sC)' % (self.name, self.building, self.temperature)
30         
31     @models.permalink
32     def get_absolute_url(self):
33         return ('samplebc.samples.views.freezer_summary', [str(self.uuid)])
34     
35     
36 class SampleType(models.Model):
37     name = models.CharField(max_length=256)
38     
39     def __unicode__(self):
40         return u'%s' % (self.name)
41
42
43 class Container(models.Model):
44     name = models.CharField(max_length=256)
45     sample_type = models.ManyToManyField(SampleType)
46     max_items = models.IntegerField()
47     freezer = models.ForeignKey(Freezer)
48     
49     uuid = models.CharField(max_length=32, unique=True)
50     
51     def __unicode__(self):
52         return u'%s (spc: %s)' % (self.name, self.space_available())
53         
54     @models.permalink
55     def get_absolute_url(self):
56         return ('samplebc.samples.views.container_summary', [str(self.uuid)])
57         
58     def space_available(self):
59         """
60         returns the space available for the container
61         """
62         return (self.max_items - self.sample_set.count())
63
64
65 class Sample(models.Model):
66     name = models.CharField(max_length=256)
67     sampleid = models.CharField(max_length=64, unique=True)
68     sample_type = models.ForeignKey(SampleType)
69     owner = models.ForeignKey(Owner)
70     # Concentration in ng/ul
71     concentration = models.FloatField(help_text='ng/ul', blank=True, null=True)
72     volume = models.FloatField(help_text='ul', blank=True, null=True)
73     container = models.ForeignKey(Container, blank=True, null=True)
74     
75     def __unicode__(self):
76         return u's|%s|%s' % (self.sampleid, self.owner.name)
77         
78     @models.permalink
79     def get_absolute_url(self):
80         return ('samplebc.samples.views.sample_summary', [str(self.sampleid)])