from django.db import models
-from gaworkflow.frontend.fctracker.models import FlowCell
+from datetime import datetime
+from gaworkflow.frontend.fctracker.models import Library
-class DataRun(models.Model):
- #ConfTemplate = "READ_LENGTH 25\nGENOME_DIR /Volumes/Genomes/hg18\nELAND_GENOME /Volumes/Genomes/hg18\nANALYSIS eland\nGENOME_FILE all_chr.fa\nELAND_MULTIPLE_INSTANCES 8"
- ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
- ##-----
- run_folder = models.CharField(max_length=50,unique=True, db_index=True)
- fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id") #, null=True)
- config_params = models.TextField(default=ConfTemplate)
- run_start_time = models.DateTimeField(core=True)
- RUN_STATUS_CHOICES = (
- (0, 'Solexa Pipeline Not Yet Started'),
- (1, 'Solexa Pipeline Started'),
- (2, 'Solexa Pipeline Interrupted'),
- (3, 'Solexa Pipeline Finished'),
- (4, 'CollectReads Started'),
- (5, 'CollectReads Finished'),
+class Task(models.Model):
+ task_name = models.CharField(max_length=50,unique=True, db_index=True)
+ subject1 = models.ForeignKey(Library,related_name='sbj1_library',verbose_name="Subject")
+ subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject 2 / Control",blank=True,null=True)
+ CALCS = (
+ ('QuEST', 'QuEST Peak Calling'),
+ ('WingPeaks', 'Wing Peak Calling'),
+ ('qPCR', 'In Silico qPCR'),
+ ('CompareLibs', 'Compare Libaraies'),
+ ('ComparePeakCalls','Compare Peak Calls'),
+ ('ProfileReads','Profile Reads')
)
- run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
- run_note = models.CharField(max_length=500,blank=True)
+ apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
+ ## userid = # logged in user
+ task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
+ results_location = models.CharField(max_length=2000,blank=True,null=True)
+ submitted_on = models.DateTimeField(core=True,default=datetime.now())
+ run_note = models.CharField(max_length=500,blank=True,null=True)
- #def __unicode__(self):
- # return ...
+ def __str__(self):
+ return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
+
+ def InProjects(self):
+ return '...'
+ ps = self.project_set.all()
+ pstr = 'In '
+ return pstr
+ for p in ps:
+ pstr += '%s, ' % (p.project_name)
+ return pstr
class Admin:
- list_display = ('run_folder','fcid','run_start_time','run_status','run_note')
- list_filter = ('run_status','run_start_time')
+ list_display = ('task_name','apply_calc','subject1','subject2','InProjects','submitted_on','task_status')
+ list_filter = ('apply_calc',)
+ fields = (
+ (None, {
+ 'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
+ }),
+ ('system fields', {
+ 'classes': 'collapse',
+ 'fields': (('submitted_on'),('task_status','run_note'))
+ }),
+ )
+
+class Project(models.Model):
+ project_name = models.CharField(max_length=50,unique=True, db_index=True)
+ tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True)
+ project_notes = models.CharField(max_length=500,blank=True,null=True)
+
+ def __str__(self):
+ return '%s' % (self.project_name)
+
+ def ProjectTasks(self):
+ ptasks = self.tasks.all().order_by('id')
+ surl = 'data analysis server'
+ tstr = '<script>'
+ tstr += 'function togView(eid){'
+ tstr += 'f=document.getElementById(eid);'
+ tstr += 'if(f.height==0){'
+ tstr += 'f.height=400;'
+ tstr += 'f.style.border=\'solid #cccccc 3px\';'
+ tstr += '}else{'
+ tstr += 'f.height=0;'
+ tstr += 'f.style.border=\'none\';'
+ tstr += '}'
+ tstr += '}'
+ tstr += '</script>'
+ tstr += '<table><tr><th>Task</th><th>Job Status</th>'
+ for t in ptasks:
+ tstr += '<tr><td width=250>%s</td><td>%s</td></tr>' % (t.task_name,t.task_status)
+
+ tstr += '</table>'
+ tstr += '<div>'
+ tstr += '<div align=center><a onClick="togView(\'RFrame'+self.id.__str__()+'\');" href="'+surl+self.id.__str__()+'/" title="View Results Page" target="RFrame'+self.id.__str__()+'">VIEW PROJECT RESULTS</a></div>'
+ tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe></div>'
+
+ return tstr
+
+ ProjectTasks.allow_tags = True
+
+ class Admin:
+ list_display = ('project_name','ProjectTasks')
+ # list_filter = ('...',)
+ fields = (
+ (None, {
+ 'fields': (('project_name'),('tasks'),('project_notes'))}),
+ )