1 from django.db import models
2 from datetime import datetime
3 from htsworkflow.frontend import settings
4 from htsworkflow.frontend.samples.models import Library
7 class Task(models.Model):
8 task_name = models.CharField(max_length=50,unique=True, db_index=True)
9 subject1 = models.ForeignKey(Library,related_name='sbj1_library',verbose_name="Subject1 (Signal/Hpa2)")
10 subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject2 (Control/Msp1)",blank=True,null=True)
12 ('QuEST', 'QuEST Peak Calling'),
13 ('WingPeaks', 'Wing Peak Calling'),
14 ('MACS', 'MACS Peak Calling'),
15 ('qPCR', 'In Silico qPCR'),
16 ('CompareLibs', 'Compare Libaraies'),
17 ('ComparePeakCalls','Compare Peak Calls'),
18 ('ProfileReads','Profile Reads'),
19 ('Methylseq','Methylseq'),
21 apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
22 ## userid = # logged in user
23 task_params = models.CharField(max_length=200,blank=True,null=True,default="")
24 task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
25 results_location = models.CharField(max_length=2000,blank=True,null=True)
26 submitted_on = models.DateTimeField(default=datetime.now())
27 run_note = models.CharField(max_length=500,blank=True,null=True)
30 return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
34 ps = self.project_set.all()
38 pstr += '%s, ' % (p.project_name)
41 class Project(models.Model):
42 project_name = models.CharField(max_length=50,unique=True, db_index=True)
43 tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True)
44 project_notes = models.CharField(max_length=500,blank=True,null=True)
47 return '%s' % (self.project_name)
49 def ProjectTasks(self):
50 ptasks = self.tasks.all().order_by('id')
51 surl = settings.TASKS_PROJS_SERVER+'/projects/'
53 tstr += 'function togView(eid){'
54 tstr += 'f=document.getElementById(eid);'
55 tstr += 'if(f.height==0){'
56 tstr += 'f.height=600;'
57 tstr += 'f.style.border=\'solid #cccccc 3px\';'
60 tstr += 'f.style.border=\'none\';'
65 if len(ptasks) > 8: Style = ' style="height:200px;overflow:auto" '
66 tstr += '<div '+Style+'>'
67 tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
70 taskdesc = t.task_name+'<div style="font-size:80%">Details: '+t.apply_calc+' on '+t.subject1.id
71 if t.subject2 is not None:
72 taskdesc += ' and '+t.subject2.id
73 taskdesc += ' (TaskId:'+t.id.__str__()+')'
74 tstr += '<tr><td width=250>%s</td><td>%s</td></tr>' % (taskdesc,replace(t.task_status,'Complete','<span style="color:green;font-weight:bolder">Complete</span>'))
75 if t.task_status != 'defined': isregistered = True
80 tstr += '<div align=center>'
82 tstr += '<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>'
83 tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
85 tstr += 'REGISTERING ...'
88 tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
92 ProjectTasks.allow_tags = True
95 ptasks = self.tasks.all().order_by('id')
96 tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
97 htmlstr = '%s<br/>%s' % (self.project_name,tasks_counter)
100 ProjTitle.allow_tags = True