1 from django.db import models
2 from datetime import datetime
3 from htswfrontend import settings
4 from htswfrontend.fctracker.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(core=True,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)
42 list_display = ('task_name','apply_calc','subject1','subject2','task_params','InProjects','submitted_on','task_status')
43 list_filter = ('apply_calc',)
44 search_fields = ['task_name','id','=subject1__library_id','=subject2__library_id']
47 'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'),('task_params'))
50 'classes': 'collapse',
51 'fields': (('submitted_on'),('task_status','run_note'))
56 class Project(models.Model):
57 project_name = models.CharField(max_length=50,unique=True, db_index=True)
58 tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True,filter_interface=models.HORIZONTAL)
59 project_notes = models.CharField(max_length=500,blank=True,null=True)
62 return '%s' % (self.project_name)
64 def ProjectTasks(self):
65 ptasks = self.tasks.all().order_by('id')
66 surl = settings.TASKS_PROJS_SERVER+'/projects/'
68 tstr += 'function togView(eid){'
69 tstr += 'f=document.getElementById(eid);'
70 tstr += 'if(f.height==0){'
71 tstr += 'f.height=600;'
72 tstr += 'f.style.border=\'solid #cccccc 3px\';'
75 tstr += 'f.style.border=\'none\';'
80 if len(ptasks) > 8: Style = ' style="height:200px;overflow:auto" '
81 tstr += '<div '+Style+'>'
82 tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
85 taskdesc = t.task_name+'<div style="font-size:80%">Details: '+t.apply_calc+' on '+t.subject1.library_id
86 if t.subject2 is not None:
87 taskdesc += ' and '+t.subject2.library_id
88 taskdesc += ' (TaskId:'+t.id.__str__()+')'
89 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>'))
90 if t.task_status != 'defined': isregistered = True
95 tstr += '<div align=center>'
97 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>'
98 tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
100 tstr += 'REGISTERING ...'
103 tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
107 ProjectTasks.allow_tags = True
110 ptasks = self.tasks.all().order_by('id')
111 tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
112 htmlstr = '%s<br/>%s' % (self.project_name,tasks_counter)
115 ProjTitle.allow_tags = True
118 list_display = ('ProjTitle','ProjectTasks')
120 search_fields = ['project_name','=tasks__subject1__library_id','=tasks__subject2__library_id','tasks__subject1__library_name','tasks__subject2__library_name','project_notes']
123 'fields': (('project_name'),('tasks'),('project_notes'))}),