Turn the library_id back into the primary key for samples_library (SCHEMA CHANGE!)
[htsworkflow.git] / htsworkflow / frontend / analysis / models.py
1 from django.db import models
2 from datetime import datetime
3 from htsworkflow.frontend import settings
4 from htsworkflow.frontend.samples.models import Library 
5 from string import *
6
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="Subject1 (Signal/Hpa2)")
10   subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject2 (Control/Msp1)",blank=True,null=True)
11   CALCS = (
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'),
19       ('Methylseq','Methylseq'),
20     )
21   apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
22   ## userid = # logged in user
23   task_params = models.CharField(max_length=200,blank=True,null=True,default="")
24   task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
25   results_location = models.CharField(max_length=2000,blank=True,null=True) 
26   submitted_on = models.DateTimeField(default=datetime.now())
27   run_note = models.CharField(max_length=500,blank=True,null=True)
28   
29   def __str__(self):
30       return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
31
32   def InProjects(self):
33       return '...'
34       ps = self.project_set.all()
35       pstr = 'In '
36       return pstr
37       for p in ps:
38         pstr += '%s, ' % (p.project_name) 
39       return pstr
40
41 class Project(models.Model):
42     project_name = models.CharField(max_length=50,unique=True, db_index=True)
43     tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True) 
44     project_notes = models.CharField(max_length=500,blank=True,null=True)
45     
46     def __str__(self):
47       return '%s' % (self.project_name)
48
49     def ProjectTasks(self):
50       ptasks = self.tasks.all().order_by('id')
51       surl = settings.TASKS_PROJS_SERVER+'/projects/'
52       tstr = '<script>'
53       tstr += 'function togView(eid){'
54       tstr += 'f=document.getElementById(eid);'
55       tstr += 'if(f.height==0){'
56       tstr += 'f.height=600;'
57       tstr += 'f.style.border=\'solid #cccccc 3px\';'
58       tstr += '}else{'
59       tstr += 'f.height=0;'
60       tstr += 'f.style.border=\'none\';'
61       tstr += '}'
62       tstr += '}'
63       tstr += '</script>'
64       Style = ''
65       if len(ptasks) > 8:  Style = ' style="height:200px;overflow:auto" '
66       tstr += '<div '+Style+'>'
67       tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
68       isregistered = False
69       for t in ptasks:
70         taskdesc = t.task_name+'<div style="font-size:80%">Details: '+t.apply_calc+' on '+t.subject1.id
71         if t.subject2 is not None:
72           taskdesc += ' and '+t.subject2.id
73         taskdesc += ' (TaskId:'+t.id.__str__()+')'
74         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>'))
75         if t.task_status != 'defined': isregistered = True
76
77       tstr += '</table>'
78       tstr += '</div>' 
79       tstr += '<div>'
80       tstr += '<div align=center>'
81       if isregistered:
82         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>'
83         tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
84       else:
85         tstr += 'REGISTERING ...'    
86  
87       tstr += '</div>'    
88       tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
89       tstr += '</div>'
90       return tstr
91
92     ProjectTasks.allow_tags = True
93
94     def ProjTitle(self):
95       ptasks = self.tasks.all().order_by('id')
96       tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
97       htmlstr = '%s<br/>%s'  % (self.project_name,tasks_counter)
98       return htmlstr
99
100     ProjTitle.allow_tags = True
101