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.template import Context, Template
7 from django.db import models
8 from django.utils.translation import ugettext_lazy as _
9 from django.forms import TextInput, Textarea
11 from htsworkflow.frontend.samples.models import Antibody, Cellline, Condition, ExperimentType, HTSUser, LibraryType, Species, Affiliation, Library, Tag
12 from htsworkflow.frontend.experiments.models import Lane
13 from htsworkflow.frontend.inventory.models import PrinterTemplate
14 from htsworkflow.frontend.bcmagic.utils import print_zpl_socket
16 # Let's disable those pesky delete everything by accident features.
17 admin.site.disable_action('delete_selected')
19 class AffiliationOptions(admin.ModelAdmin):
20 list_display = ('name','contact','email')
23 'fields': (('name','contact','email','users'))
27 # some post 1.0.2 version of django has formfield_overrides
28 # which would replace this code with:
29 # formfield_overrids = {
30 # models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
32 def formfield_for_dbfield(self, db_field, **kwargs):
33 if db_field.name == 'users':
34 kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
35 rv = super(AffiliationOptions, self).formfield_for_dbfield(db_field, **kwargs)
36 # print db_field.name, kwargs
39 class AntibodyOptions(admin.ModelAdmin):
40 search_fields = ('antigene','nickname','catalog','antibodies','source','biology','notes')
41 list_display = ('antigene','nickname','antibodies','catalog','source','biology','notes')
42 list_filter = ('antibodies','source')
45 'fields': (('antigene','nickname','antibodies'),('catalog','source'),('biology'),('notes'))
49 class CelllineOptions(admin.ModelAdmin):
50 list_display = ('cellline_name', 'notes')
51 search_fields = ('cellline_name', 'nickname', 'notes')
54 'fields': (('cellline_name','nickname',),('notes'),)
58 class ConditionOptions(admin.ModelAdmin):
59 list_display = (('condition_name'), ('notes'),)
62 'fields': (('condition_name'),('nickname'),('notes'),)
66 class ExperimentTypeOptions(admin.ModelAdmin):
67 model = ExperimentType
68 #list_display = ('name',)
69 #fieldsets = ( (None, { 'fields': ('name',) }), )
71 class HTSUserCreationForm(UserCreationForm):
74 fields = ("username",'first_name','last_name')
76 class HTSUserChangeForm(UserChangeForm):
80 class HTSUserOptions(UserAdmin):
81 form = HTSUserChangeForm
82 add_form = HTSUserCreationForm
84 class LaneLibraryInline(admin.StackedInline):
88 class Library_Inline(admin.TabularInline):
91 class LibraryTypeOptions(admin.ModelAdmin):
94 class LibraryOptions(admin.ModelAdmin):
97 "all": ("css/wide_account_number.css",)
100 date_hierarchy = "creation_date"
106 'cell_line__cellline_name',
107 'library_species__scientific_name',
108 'library_species__common_name',
115 'undiluted_concentration',
127 list_display_links = ('id', 'library_name',)
131 ('id','library_name','hidden'),
132 ('library_species', 'library_type', 'experiment_type'),
135 ('Experiment Detail:', {
136 'fields': (('cell_line', 'replicate',),
140 'classes': ('collapse',),
142 ('Creation Information:', {
143 'fields' : (('made_by', 'creation_date', 'stopping_point'),
144 ('amplified_from_sample'),
145 ('gel_cut_size', 'insert_size',
146 'undiluted_concentration'),
147 ('bioanalyzer_concentration','bioanalyzer_image_url'),
148 ('bioanalyzer_summary'),
151 ('Library/Project Affiliation:', {
152 'fields' : (('account_number', 'affiliations'),)
158 actions = ['action_print_library_labels']
160 def action_print_library_labels(self, request, queryset):
162 Django action which prints labels for the selected set of labels from the
163 Django Admin interface.
166 #Probably should ask if the user really meant to print all selected
167 # libraries if the count is above X. X=10 maybe?
169 # Grab the library template
170 #FIXME: Hardcoding library template name. Not a good idea... *sigh*.
171 EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME = "Library"
174 template = PrinterTemplate.objects.get(item_type__name=EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME)
175 except PrinterTemplate.DoesNotExist:
176 self.message_user(request, "Could not find a library template with ItemType.name of '%s'" % \
177 (EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME))
181 t = Template(template.template)
184 #Iterate over selected labels to print
185 for library in queryset.all():
187 # Django Template Context
188 c = Context({'library': library})
190 # Send rendered template to the printer that the template
191 # object has been attached to in the database.
192 zpl_list.append(t.render(c))
194 print_zpl_socket(zpl_list, host=template.printer.ip_address)
196 self.message_user(request, "%s labels printed." % (len(queryset)))
198 action_print_library_labels.short_description = "Print Labels"
200 def formfield_for_dbfield(self, db_field, **kwargs):
201 # Override Field type
202 if db_field.name in ('affiliations', 'tags'):
203 kwargs['widget'] = widgets.FilteredSelectMultiple(
204 db_field.verbose_name,
205 (db_field.name in self.filter_vertical)
207 field = super(LibraryOptions, self).formfield_for_dbfield(db_field,
209 # Override field attributes
210 if db_field.name == "bioanalyzer_summary":
211 field.widget.attrs["rows"] = "3"
214 class SpeciesOptions(admin.ModelAdmin):
217 'fields': (('scientific_name', 'common_name'),)
221 class TagOptions(admin.ModelAdmin):
222 list_display = ('tag_name', 'context')
225 'fields': ('tag_name', 'context')
229 admin.site.register(Library, LibraryOptions)
230 admin.site.register(Affiliation, AffiliationOptions)
231 admin.site.register(Antibody, AntibodyOptions)
232 admin.site.register(Cellline, CelllineOptions)
233 admin.site.register(Condition, ConditionOptions)
234 admin.site.register(ExperimentType, ExperimentTypeOptions)
235 #admin.site.register(HTSUser, HTSUserOptions)
236 admin.site.register(LibraryType, LibraryTypeOptions)
237 admin.site.register(Species, SpeciesOptions)
238 #admin.site.register(Tag, TagOptions)