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="Subject")
10 subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject 2 / Control",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')
20 apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
21 ## userid = # logged in user
22 task_params = models.CharField(max_length=200,blank=True,null=True,default="")
23 task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
24 results_location = models.CharField(max_length=2000,blank=True,null=True)
25 submitted_on = models.DateTimeField(core=True,default=datetime.now())
26 run_note = models.CharField(max_length=500,blank=True,null=True)
29 return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
33 ps = self.project_set.all()
37 pstr += '%s, ' % (p.project_name)
41 list_display = ('task_name','apply_calc','subject1','subject2','task_params','InProjects','submitted_on','task_status')
42 list_filter = ('apply_calc',)
43 search_fields = ['task_name','id','=subject1__library_id','=subject2__library_id']
46 'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'),('task_params'))
49 'classes': 'collapse',
50 'fields': (('submitted_on'),('task_status','run_note'))
55 class Project(models.Model):
56 project_name = models.CharField(max_length=50,unique=True, db_index=True)
57 tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True,filter_interface=models.HORIZONTAL)
58 project_notes = models.CharField(max_length=500,blank=True,null=True)
61 return '%s' % (self.project_name)
63 def ProjectTasks(self):
64 ptasks = self.tasks.all().order_by('id')
65 surl = settings.TASKS_PROJS_SERVER+'/projects/'
67 tstr += 'function togView(eid){'
68 tstr += 'f=document.getElementById(eid);'
69 tstr += 'if(f.height==0){'
70 tstr += 'f.height=600;'
71 tstr += 'f.style.border=\'solid #cccccc 3px\';'
74 tstr += 'f.style.border=\'none\';'
79 if len(ptasks) > 8: Style = ' style="height:200px;overflow:auto" '
80 tstr += '<div '+Style+'>'
81 tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
84 taskdesc = t.task_name+'<div style="font-size:80%">Details: '+t.apply_calc+' on '+t.subject1.library_id
85 if t.subject2 is not None:
86 taskdesc += ' and '+t.subject2.library_id
87 taskdesc += ' (TaskId:'+t.id.__str__()+')'
88 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>'))
89 if t.task_status != 'defined': isregistered = True
94 tstr += '<div align=center>'
96 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>'
97 tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
99 tstr += 'REGISTERING ...'
102 tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
106 ProjectTasks.allow_tags = True
109 ptasks = self.tasks.all().order_by('id')
110 tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
111 htmlstr = '%s<br/>%s' % (self.project_name,tasks_counter)
114 ProjTitle.allow_tags = True
117 list_display = ('ProjTitle','ProjectTasks')
119 search_fields = ['project_name','=tasks__subject1__library_id','=tasks__subject2__library_id','tasks__subject1__library_name','tasks__subject2__library_name','project_notes']
122 'fields': (('project_name'),('tasks'),('project_notes'))}),