ca3f7308f5827105643d2aed2f7be0c5a8801a4b
[htsworkflow.git] / htsworkflow / frontend / experiments / admin.py
1 from htsworkflow.frontend.experiments.models import FlowCell, DataRun, ClusterStation, Sequencer, Lane
2 from django.contrib import admin
3 from django.contrib.admin.widgets import FilteredSelectMultiple
4 from django.forms import ModelForm
5 from django.forms.fields import Field, CharField
6 from django.forms.widgets import TextInput
7 from django.utils.translation import ugettext_lazy as _
8
9 class DataRunOptions(admin.ModelAdmin):
10   search_fields = [
11       'run_folder',
12       'run_note',
13       'config_params',
14       '=fcid__lane_1_library__library_id',
15       '=fcid__lane_2_library__library_id',
16       '=fcid__lane_3_library__library_id',
17       '=fcid__lane_4_library__library_id',
18       '=fcid__lane_5_library__library_id',
19       '=fcid__lane_6_library__library_id',
20       '=fcid__lane_7_library__library_id',
21       '=fcid__lane_8_library__library_id'
22       'fcid__lane_1_library__library_name',
23       'fcid__lane_2_library__library_name',
24       'fcid__lane_3_library__library_name',
25       'fcid__lane_4_library__library_name',
26       'fcid__lane_5_library__library_name',
27       'fcid__lane_6_library__library_name',
28       'fcid__lane_7_library__library_name',
29       'fcid__lane_8_library__library_name'  ]
30   list_display = [
31       'run_folder', 
32       'Flowcell_Info', 
33       'run_start_time',
34       'main_status', 
35       'run_note',
36   ]
37   list_filter = ('run_status', 'run_start_time')
38
39 # lane form setup needs to come before Flowcell form config
40 # as flowcell refers to the LaneInline class
41 class LaneForm(ModelForm):
42     comment = CharField(widget=TextInput(attrs={'size':'80'}), required=False)
43     
44     class Meta:
45         model = Lane
46
47 class LaneInline(admin.StackedInline):
48     """
49     Controls display of Lanes on the Flowcell form.
50     """
51     model = Lane
52     max_num = 8
53     extra = 8
54     form = LaneForm
55     raw_id_fields = ('library',)
56     fieldsets = (
57       (None, {
58         'fields': ('lane_number', 'flowcell',
59                    ('library',),
60                    ('pM', 'cluster_estimate'),
61                    'comment',)
62       }),
63     )
64
65 class LaneOptions(admin.ModelAdmin):
66     """
67     Controls display of Lane browser
68     """
69     list_display = ('flowcell', 'lane_number', 'library', 'comment')
70     fieldsets = (
71       (None, {
72         'fields': ('lane_number', 'flowcell',
73                    ('library'),
74                    ('pM', 'cluster_estimate'))
75       }),
76       ('Optional', {
77         'classes': ('collapse', ),
78         'fields': ('comment', )
79       }),
80     )
81     
82 class FlowCellOptions(admin.ModelAdmin):
83     date_hierarchy = "run_date"
84     save_on_top = True
85     search_fields = ('flowcell_id',
86         'sequencer__name',
87         'cluster_station__name',
88         '=lane__library__library_id',
89         'lane__library__library_name')
90     list_display = ('flowcell_id','run_date','Lanes')
91     list_filter = ('sequencer','cluster_station')
92     fieldsets = (
93         (None, {
94             'fields': ('run_date', ('flowcell_id','cluster_station','sequencer'), ('read_length', 'control_lane', 'paired_end'),)
95         }),
96         #('Lanes:', {
97         #   'fields' : (('lane__library__library_id', 'lane__pM', 'lane__cluster_estimate'),)
98         #}),
99         ('Notes:', { 'fields': ('notes',),}),
100     )
101     inlines = [
102       LaneInline,
103     ]
104
105 class ClusterStationOptions(admin.ModelAdmin):
106     list_display = ('name', )
107     fieldsets = ( ( None, { 'fields': ( 'name', ) } ), )
108
109 class SequencerOptions(admin.ModelAdmin):
110     list_display = ('name', )
111     fieldsets = ( ( None, { 'fields': ( 'name', ) } ), )
112     
113
114 admin.site.register(DataRun, DataRunOptions)
115 admin.site.register(FlowCell, FlowCellOptions)
116 admin.site.register(ClusterStation, ClusterStationOptions)
117 admin.site.register(Sequencer, SequencerOptions)
118 admin.site.register(Lane, LaneOptions)