Added 'lanes_for' which will show recent flowcell lanes ordered by date,
[htsworkflow.git] / htsworkflow / frontend / experiments / models.py
index f60bd0e42506562ecadd77b740f51e0235ed18a9..9329add350cf36dc14887dc68dd44981bcd8231d 100755 (executable)
@@ -1,8 +1,11 @@
+import logging
+
+from django.core.exceptions import ObjectDoesNotExist
+from django.core import urlresolvers
 from django.db import models
+
 from htsworkflow.frontend.samples.models import *
 from htsworkflow.frontend.settings import options
-from django.core.exceptions import ObjectDoesNotExist
-import logging
 
 class ClusterStation(models.Model):
   name = models.CharField(max_length=50, unique=True)
@@ -22,9 +25,6 @@ try:
 except ValueError,e:
   logging.error("invalid value for frontend.default_pm")
 
-
-  
-
 class FlowCell(models.Model):
   
   flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
@@ -32,42 +32,7 @@ class FlowCell(models.Model):
   advanced_run = models.BooleanField(default=False)
   paired_end = models.BooleanField(default=False)
   read_length = models.IntegerField(default=32) #Stanford is currenlty 25
-  
-  lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
-  lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
-  lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
-  lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
-  lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
-  lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
-  lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
-  lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
-
-  lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
-  
-  lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
-  # lane_1_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_1_primer")
-  # lane_2_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_2_primer")
-  # lane_3_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_3_primer")
-  # lane_4_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_4_primer")
-  # lane_5_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_5_primer")
-  # lane_6_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_6_primer")
-  # lane_7_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_7_primer")
-  # lane_8_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_8_primer")
+  control_lane = models.IntegerField(choices=[(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8)], null=True)
 
   cluster_station = models.ForeignKey(ClusterStation, default=3)
   sequencer = models.ForeignKey(Sequencer, default=1)
@@ -91,24 +56,39 @@ class FlowCell(models.Model):
   def Lanes(self):
     library_url = '/admin/samples/library/%s' 
     html = ['<table>']
-    for i in range(1,9):
-        cluster_estimate = getattr(self, 'lane_%d_cluster_estimate' % (i,))
+    #for i in range(1,9):
+    for lane in self.lane_set.all():
+        cluster_estimate = lane.cluster_estimate
         if cluster_estimate is not None:
             cluster_estimate = "%s k" % ((int(cluster_estimate)/1000), )
         else:
             cluster_estimate = 'None'
-       library_id = getattr(self, 'lane_%d_library_id' % (i,))
-        library = getattr(self, 'lane_%d_library' % i)
-       element = '<tr><td>%d</td><td><a href="%s">%s</a></td><td>%s</td></tr>'
+        library_id = lane.library_id
+        library = lane.library
+        element = '<tr><td>%d</td><td><a href="%s">%s</a></td><td>%s</td></tr>'
         expanded_library_url = library_url %(library_id,)
-        html.append(element % (i, expanded_library_url, library, cluster_estimate))
+        html.append(element % (lane.lane_number, expanded_library_url, library, cluster_estimate))
     html.append('</table>')
     return "\n".join(html)
   Lanes.allow_tags = True
 
   class Meta:
     ordering = ["-run_date"]
-  
+
+  def get_admin_url(self):
+    # that's the django way... except it didn't work
+    #return urlresolvers.reverse('admin_experiments_FlowCell_change', args=(self.id,))
+    return '/admin/experiments/flowcell/%s/' % (self.id,)
+
+  def flowcell_type(self):
+    """
+    Convert our boolean 'is paired' flag to a name
+    """
+    if self.paired_end:
+      return u"Paired"
+    else:
+      return u"Single"
+    
 ### -----------------------
 class DataRun(models.Model):
   ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."