1 from django.db import models
2 from datetime import datetime
3 from gaworkflow.frontend.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',)
43 'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
46 'classes': 'collapse',
47 'fields': (('submitted_on'),('task_status','run_note'))
52 class Project(models.Model):
53 project_name = models.CharField(max_length=50,unique=True, db_index=True)
54 tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True)
55 project_notes = models.CharField(max_length=500,blank=True,null=True)
58 return '%s' % (self.project_name)
60 def ProjectTasks(self):
61 ptasks = self.tasks.all().order_by('id')
62 surl = 'http://m304-apple-server.stanford.edu/projects/'
64 tstr += 'function togView(eid){'
65 tstr += 'f=document.getElementById(eid);'
66 tstr += 'if(f.height==0){'
67 tstr += 'f.height=600;'
68 tstr += 'f.style.border=\'solid #cccccc 3px\';'
71 tstr += 'f.style.border=\'none\';'
76 if len(ptasks) > 8: Style = ' style="height:200px;overflow:auto" '
77 tstr += '<div '+Style+'>'
78 tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
81 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>'))
82 if t.task_status != 'defined': isregistered = True
87 tstr += '<div align=center>'
89 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>'
90 tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
92 tstr += 'REGISTERING ...'
95 tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
99 ProjectTasks.allow_tags = True
102 ptasks = self.tasks.all().order_by('id')
103 tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
104 htmlstr = '%s<br/>%s' % (self.project_name,tasks_counter)
107 ProjTitle.allow_tags = True
110 list_display = ('ProjTitle','ProjectTasks')
111 # list_filter = ('...',)
114 'fields': (('project_name'),('tasks'),('project_notes'))}),