1 from django.db import models
2 from datetime import datetime
3 from htswfrontend.fctracker.models import Library
6 class Task(models.Model):
7 task_name = models.CharField(max_length=50,unique=True, db_index=True)
8 subject1 = models.ForeignKey(Library,related_name='sbj1_library',verbose_name="Subject")
9 subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject 2 / Control",blank=True,null=True)
11 ('QuEST', 'QuEST Peak Calling'),
12 ('WingPeaks', 'Wing Peak Calling'),
13 ('MACS', 'MACS Peak Calling'),
14 ('qPCR', 'In Silico qPCR'),
15 ('CompareLibs', 'Compare Libaraies'),
16 ('ComparePeakCalls','Compare Peak Calls'),
17 ('ProfileReads','Profile Reads')
19 apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
20 ## userid = # logged in user
21 task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
22 results_location = models.CharField(max_length=2000,blank=True,null=True)
23 submitted_on = models.DateTimeField(core=True,default=datetime.now())
24 run_note = models.CharField(max_length=500,blank=True,null=True)
27 return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
31 ps = self.project_set.all()
35 pstr += '%s, ' % (p.project_name)
39 list_display = ('task_name','apply_calc','subject1','subject2','InProjects','submitted_on','task_status')
40 list_filter = ('apply_calc',)
41 search_fields = ['task_name','id','=subject1__library_id','=subject2__library_id']
44 'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
47 'classes': 'collapse',
48 'fields': (('submitted_on'),('task_status','run_note'))
53 class Project(models.Model):
54 project_name = models.CharField(max_length=50,unique=True, db_index=True)
55 tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True,filter_interface=models.HORIZONTAL)
56 project_notes = models.CharField(max_length=500,blank=True,null=True)
59 return '%s' % (self.project_name)
61 def ProjectTasks(self):
62 ptasks = self.tasks.all().order_by('id')
63 surl = 'http://m304-apple-server.stanford.edu/projects/'
65 tstr += 'function togView(eid){'
66 tstr += 'f=document.getElementById(eid);'
67 tstr += 'if(f.height==0){'
68 tstr += 'f.height=600;'
69 tstr += 'f.style.border=\'solid #cccccc 3px\';'
72 tstr += 'f.style.border=\'none\';'
77 if len(ptasks) > 8: Style = ' style="height:200px;overflow:auto" '
78 tstr += '<div '+Style+'>'
79 tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
82 tstr += '<tr><td width=250>%s</td><td>%s</td></tr>' % (t.task_name,replace(t.task_status,'Complete','<span style="color:green;font-weight:bolder">Complete</span>'))
83 if t.task_status != 'defined': isregistered = True
88 tstr += '<div align=center>'
90 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>'
91 tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
93 tstr += 'REGISTERING ...'
96 tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
100 ProjectTasks.allow_tags = True
103 ptasks = self.tasks.all().order_by('id')
104 tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
105 htmlstr = '%s<br/>%s' % (self.project_name,tasks_counter)
108 ProjTitle.allow_tags = True
111 list_display = ('ProjTitle','ProjectTasks')
113 search_fields = ['project_name','=tasks__subject1__library_id','=tasks__subject2__library_id','tasks__subject1__library_name','tasks__subject2__library_name','project_notes']
116 'fields': (('project_name'),('tasks'),('project_notes'))}),