Refine user handling.
[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",'first_name','last_name')
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 class LaneLibraryInline(admin.StackedInline):
78   model = Lane
79   extra = 0
80
81 class Library_Inline(admin.TabularInline):
82   model = Library
83
84 class LibraryTypeOptions(admin.ModelAdmin):
85     model = LibraryType
86
87 class LibraryOptions(admin.ModelAdmin):
88     class Media:
89         css = {
90             "all": ("css/wide_account_number.css",)
91             }
92         
93     date_hierarchy = "creation_date"
94     save_as = True
95     save_on_top = True
96     search_fields = (
97         'id',
98         'library_name',
99         'cell_line__cellline_name',
100         'library_species__scientific_name',
101         'library_species__common_name',
102     )
103     list_display = (
104         'id',
105         #'aligned_reads',
106         #'DataRun',
107         'library_name',
108         'public',
109         #'experiment_type',
110         #'organism',
111         #'antibody_name',
112         #'cell_line',
113         #'libtags',
114         #'made_for',
115         'affiliation',
116         #'made_by',
117         'undiluted_concentration',
118         'creation_date',
119         'stopping_point',
120         #'condition',
121
122     )
123     list_filter = (
124         'experiment_type', 
125         'library_species', 
126         'tags',
127         #'made_for',
128         'affiliations',
129         'made_by', 
130         'antibody',
131         'cell_line',
132         'condition',
133         'stopping_point',
134         'hidden')
135     list_display_links = ('id', 'library_name',)
136     fieldsets = (
137       (None, {
138         'fields': (
139           ('id','library_name','hidden'),
140           ('library_species'),
141           ('library_type', 'experiment_type', 'replicate'),
142           ('cell_line','condition','antibody'),)
143          }),
144          ('Creation Information:', {
145              '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',)
146          }),
147          ('Library/Project Affiliation:', {
148              'fields' : (('affiliations'), ('tags'),)
149          }),
150          )
151     inlines = [
152       LaneLibraryInline,
153     ]
154
155     # some post 1.0.2 version of django has formfield_overrides 
156     # which would replace this code with:
157     # formfield_overrids = {
158     #    models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
159     #}
160     def formfield_for_dbfield(self, db_field, **kwargs):
161       if db_field.name in ('affiliations', 'tags'):
162         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name,
163                                                           (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)