Add an account number field to a library. (Note SCHEMA CHANGE)
[htsworkflow.git] / htsworkflow / frontend / samples / admin.py
1 from django.contrib import admin
2 from django.contrib.admin import widgets
3 from django.contrib.admin.models import User
4 from django.contrib.auth.admin import UserAdmin
5 from django.contrib.auth.forms import UserCreationForm, UserChangeForm
6 from django.db import models
7 from django.utils.translation import ugettext_lazy as _
8
9 from htsworkflow.frontend.samples.models import Antibody, Cellline, Condition, ExperimentType, HTSUser, LibraryType, Species, Affiliation, Library, Tag
10 from htsworkflow.frontend.experiments.models import Lane
11
12 class AffiliationOptions(admin.ModelAdmin):
13     list_display = ('name','contact','email')
14     fieldsets = (
15       (None, {
16           'fields': (('name','contact','email','users'))
17       }),
18     )
19
20     # some post 1.0.2 version of django has formfield_overrides 
21     # which would replace this code with:
22     # formfield_overrids = {
23     #   models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
24     # }
25     def formfield_for_dbfield(self, db_field, **kwargs):
26       if db_field.name == 'users':
27         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
28       rv = super(AffiliationOptions, self).formfield_for_dbfield(db_field, **kwargs)
29     #  print db_field.name, kwargs
30       return rv
31
32 class AntibodyOptions(admin.ModelAdmin):
33     search_fields = ('antigene','nickname','catalog','antibodies','source','biology','notes')
34     list_display = ('antigene','nickname','antibodies','catalog','source','biology','notes')
35     list_filter = ('antibodies','source')
36     fieldsets = (
37       (None, {
38           'fields': (('antigene','nickname','antibodies'),('catalog','source'),('biology'),('notes'))
39       }),
40      )
41
42 class CelllineOptions(admin.ModelAdmin):
43     list_display = ('cellline_name', 'nickname', 'notes')
44     search_fields = ('cellline_name', 'nickname', 'notes')
45     fieldsets = (
46       (None, {
47           'fields': (('cellline_name'),('notes'),)
48       }),
49      )
50
51 class ConditionOptions(admin.ModelAdmin):
52     list_display = (('condition_name'), ('notes'),)
53     fieldsets = (
54       (None, {
55           'fields': (('condition_name'),('nickname'),('notes'),)
56       }),
57      )
58
59 class ExperimentTypeOptions(admin.ModelAdmin):
60   model = ExperimentType
61   #list_display = ('name',)
62   #fieldsets = ( (None, { 'fields': ('name',) }), )
63
64 class HTSUserCreationForm(UserCreationForm):
65     class Meta:
66         model = HTSUser
67         fields = ("username",)
68
69 class HTSUserChangeForm(UserChangeForm):
70     class Meta:
71         model = HTSUser
72         
73 class HTSUserOptions(UserAdmin):
74     form = HTSUserChangeForm
75     add_form = HTSUserCreationForm
76     
77
78 class LaneLibraryInline(admin.StackedInline):
79   model = Lane
80   extra = 0
81
82 class Library_Inline(admin.TabularInline):
83   model = Library
84
85 class LibraryTypeOptions(admin.ModelAdmin):
86     model = LibraryType
87
88 class LibraryOptions(admin.ModelAdmin):
89     class Media:
90         css = {
91             "all": ("css/wide_account_number.css",)
92             }
93         
94     date_hierarchy = "creation_date"
95     save_as = True
96     save_on_top = True
97     search_fields = (
98         'library_id',
99         'library_name',
100         'cell_line__cellline_name',
101         'library_species__scientific_name',
102         'library_species__common_name',
103     )
104     list_display = (
105         'library_id',
106         #'aligned_reads',
107         #'DataRun',
108         'library_name',
109         'public',
110         #'experiment_type',
111         #'organism',
112         #'antibody_name',
113         #'cell_line',
114         #'libtags',
115         #'made_for',
116         'affiliation',
117         #'made_by',
118         'undiluted_concentration',
119         'creation_date',
120         'stopping_point',
121         #'condition',
122
123     )
124     list_filter = (
125         'experiment_type', 
126         'library_species', 
127         'tags',
128         #'made_for',
129         'affiliations',
130         'made_by', 
131         'antibody',
132         'cell_line',
133         'condition',
134         'stopping_point',
135         'hidden')
136     list_display_links = ('library_id', 'library_name',)
137     fieldsets = (
138       (None, {
139         'fields': (
140           ('library_id','library_name','hidden'),
141           ('library_species'),
142           ('library_type', 'experiment_type', 'replicate'),
143           ('cell_line','condition','antibody'),)
144          }),
145          ('Creation Information:', {
146              'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('avg_lib_size','undiluted_concentration', 'ten_nM_dilution', 'successful_pM'), 'account_number', 'notes',)
147          }),
148          ('Library/Project Affiliation:', {
149              'fields' : (('affiliations'), ('tags'),)
150          }),
151          )
152     inlines = [
153       LaneLibraryInline,
154     ]
155
156     # some post 1.0.2 version of django has formfield_overrides 
157     # which would replace this code with:
158     # formfield_overrids = {
159     #   models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
160     # }
161     def formfield_for_dbfield(self, db_field, **kwargs):
162       if db_field.name == 'affiliations':
163         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
164       rv = super(LibraryOptions, self).formfield_for_dbfield(db_field, **kwargs)
165       return rv
166
167 class SpeciesOptions(admin.ModelAdmin):
168     fieldsets = (
169       (None, {
170           'fields': (('scientific_name', 'common_name'),)
171       }),
172     )
173
174 class TagOptions(admin.ModelAdmin):
175     list_display = ('tag_name', 'context')
176     fieldsets = ( 
177         (None, {
178           'fields': ('tag_name', 'context')
179           }),
180         )
181
182 admin.site.register(Affiliation, AffiliationOptions)
183 admin.site.register(Antibody, AntibodyOptions)
184 admin.site.register(Cellline, CelllineOptions)
185 admin.site.register(Condition, ConditionOptions)
186 admin.site.register(ExperimentType, ExperimentTypeOptions)
187 admin.site.register(HTSUser, HTSUserOptions)
188 admin.site.register(LibraryType, LibraryTypeOptions)
189 admin.site.register(Library, LibraryOptions)
190 admin.site.register(Species, SpeciesOptions)
191 admin.site.register(Tag, TagOptions)