82aa0373911cd9cf1d506913b1a4423a5efce8b8
[htsworkflow.git] / gaworkflow / frontend / exp_track / models.py
1 from django.db import models
2 from datetime import datetime
3 from gaworkflow.frontend.fctracker.models import Library 
4
5 class Task(models.Model):
6   task_name = models.CharField(max_length=50,unique=True, db_index=True)
7   subject1 = models.ForeignKey(Library,related_name='sbj1_library',verbose_name="Subject")
8   subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject 2 / Control",blank=True,null=True)
9   CALCS = (
10       ('QuEST', 'QuEST Peak Calling'),
11       ('WingPeaks', 'Wing Peak Calling'),
12       ('qPCR', 'In Silico qPCR'),
13       ('CompareLibs', 'Compare Libaraies'),
14       ('ComparePeakCalls','Compare Peak Calls'),
15       ('ProfileReads','Profile Reads')
16     )
17   apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
18   ## userid = # logged in user
19   task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
20   results_location = models.CharField(max_length=2000,blank=True,null=True) 
21   submitted_on = models.DateTimeField(core=True,default=datetime.now())
22   run_note = models.CharField(max_length=500,blank=True,null=True)
23   
24   def __str__(self):
25       return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
26
27   def InProjects(self):
28       return '...'
29       ps = self.project_set.all()
30       pstr = 'In '
31       return pstr
32       for p in ps:
33         pstr += '%s, ' % (p.project_name) 
34       return pstr
35
36   class Admin:
37     list_display = ('task_name','apply_calc','subject1','subject2','InProjects','submitted_on','task_status')
38     list_filter = ('apply_calc',)
39     fields = (
40         (None, {
41           'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
42            }),
43           ('system fields', {
44              'classes': 'collapse',
45            'fields': (('submitted_on'),('task_status','run_note'))
46           }),
47         )
48     
49     
50 class Project(models.Model):
51     project_name = models.CharField(max_length=50,unique=True, db_index=True)
52     tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True)
53     project_notes = models.CharField(max_length=500,blank=True,null=True)
54     
55     def __str__(self):
56       return '%s' % (self.project_name)
57
58     def ProjectTasks(self):
59       ptasks = self.tasks.all().order_by('id')
60       surl = 'data analysis server' 
61       tstr = '<script>'
62       tstr += 'function togView(eid){'
63       tstr += 'f=document.getElementById(eid);'
64       tstr += 'if(f.height==0){'
65       tstr += 'f.height=400;'
66       tstr += 'f.style.border=\'solid #cccccc 3px\';'
67       tstr += '}else{'
68       tstr += 'f.height=0;'
69       tstr += 'f.style.border=\'none\';'
70       tstr += '}'
71       tstr += '}'
72       tstr += '</script>'
73       tstr += '<table><tr><th>Task</th><th>Job Status</th>'
74       for t in ptasks:
75         tstr += '<tr><td width=250>%s</td><td>%s</td></tr>'  % (t.task_name,t.task_status)
76
77       tstr += '</table>'
78       tstr += '<div>'
79       tstr += '<div align=center><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></div>'
80       tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe></div>'
81       
82       return tstr
83     
84     ProjectTasks.allow_tags = True
85
86     class Admin:
87       list_display = ('project_name','ProjectTasks')
88       # list_filter = ('...',)
89       fields = (
90         (None, {
91           'fields': (('project_name'),('tasks'),('project_notes'))}),
92         )