(no commit message)
[htsworkflow.git] / gaworkflow / frontend / analys_track / models.py
1 from django.db import models
2 from datetime import datetime
3 from gaworkflow.frontend.fctracker.models import Library 
4 from string import *
5
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)
10   CALCS = (
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')
18     )
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)
25   
26   def __str__(self):
27       return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
28
29   def InProjects(self):
30       return '...'
31       ps = self.project_set.all()
32       pstr = 'In '
33       return pstr
34       for p in ps:
35         pstr += '%s, ' % (p.project_name) 
36       return pstr
37
38   class Admin:
39     list_display = ('task_name','apply_calc','subject1','subject2','InProjects','submitted_on','task_status')
40     list_filter = ('apply_calc',)
41     fields = (
42         (None, {
43           'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
44            }),
45           ('system fields', {
46              'classes': 'collapse',
47            'fields': (('submitted_on'),('task_status','run_note'))
48           }),
49         )
50     
51     
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)
56     
57     def __str__(self):
58       return '%s' % (self.project_name)
59
60     def ProjectTasks(self):
61       ptasks = self.tasks.all().order_by('id')
62       surl = 'http://m304-apple-server.stanford.edu/projects/' 
63       tstr = '<script>'
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\';'
69       tstr += '}else{'
70       tstr += 'f.height=0;'
71       tstr += 'f.style.border=\'none\';'
72       tstr += '}'
73       tstr += '}'
74       tstr += '</script>'
75       Style = ''
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>'
79       isregistered = False
80       for t in ptasks:      
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
83
84       tstr += '</table>'
85       tstr += '</div>'
86       tstr += '<div>'
87       tstr += '<div align=center>'
88       if isregistered:
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>'
91       else:
92         tstr += 'REGISTERING ...'    
93  
94       tstr += '</div>'    
95       tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
96       tstr += '</div>'
97       return tstr
98     
99     ProjectTasks.allow_tags = True
100
101     def ProjTitle(self):
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)
105       return htmlstr
106
107     ProjTitle.allow_tags = True
108
109     class Admin:
110       list_display = ('ProjTitle','ProjectTasks')
111       # list_filter = ('...',)
112       fields = (
113         (None, {
114           'fields': (('project_name'),('tasks'),('project_notes'))}),
115         )