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', 'nickname', 'notes')
51 search_fields = ('cellline_name', 'nickname', 'notes')
54 'fields': (('cellline_name'),('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',
130 list_display_links = ('id', 'library_name',)
134 ('id','library_name','hidden'),
135 ('library_species', 'cell_line', 'replicate'),
136 ('library_type', 'experiment_type'))
138 ('Creation Information:', {
139 'fields' : (('made_by', 'creation_date', 'stopping_point'),
140 ('amplified_from_sample'),
141 ('gel_cut_size', 'insert_size',
142 'undiluted_concentration'),
143 ('bioanalyzer_concentration','bioanalyzer_image_url'),
144 ('bioanalyzer_summary'),
147 ('Library/Project Affiliation:', {
148 'fields' : (('account_number', 'affiliations'),)
154 actions = ['action_print_library_labels']
156 def action_print_library_labels(self, request, queryset):
158 Django action which prints labels for the selected set of labels from the
159 Django Admin interface.
162 #Probably should ask if the user really meant to print all selected
163 # libraries if the count is above X. X=10 maybe?
165 # Grab the library template
166 #FIXME: Hardcoding library template name. Not a good idea... *sigh*.
167 EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME = "Library"
170 template = PrinterTemplate.objects.get(item_type__name=EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME)
171 except PrinterTemplate.DoesNotExist:
172 self.message_user(request, "Could not find a library template with ItemType.name of '%s'" % \
173 (EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME))
177 t = Template(template.template)
180 #Iterate over selected labels to print
181 for library in queryset.all():
183 # Django Template Context
184 c = Context({'library': library})
186 # Send rendered template to the printer that the template
187 # object has been attached to in the database.
188 zpl_list.append(t.render(c))
190 print_zpl_socket(zpl_list, host=template.printer.ip_address)
192 self.message_user(request, "%s labels printed." % (len(queryset)))
194 action_print_library_labels.short_description = "Print Labels"
196 def formfield_for_dbfield(self, db_field, **kwargs):
197 # Override Field type
198 if db_field.name in ('affiliations', 'tags'):
199 kwargs['widget'] = widgets.FilteredSelectMultiple(
200 db_field.verbose_name,
201 (db_field.name in self.filter_vertical)
203 field = super(LibraryOptions, self).formfield_for_dbfield(db_field,
205 # Override field attributes
206 if db_field.name == "bioanalyzer_summary":
207 field.widget.attrs["rows"] = "3"
210 class SpeciesOptions(admin.ModelAdmin):
213 'fields': (('scientific_name', 'common_name'),)
217 class TagOptions(admin.ModelAdmin):
218 list_display = ('tag_name', 'context')
221 'fields': ('tag_name', 'context')
225 admin.site.register(Library, LibraryOptions)
226 admin.site.register(Affiliation, AffiliationOptions)
227 #admin.site.register(Antibody, AntibodyOptions)
228 admin.site.register(Cellline, CelllineOptions)
229 #admin.site.register(Condition, ConditionOptions)
230 admin.site.register(ExperimentType, ExperimentTypeOptions)
231 #admin.site.register(HTSUser, HTSUserOptions)
232 admin.site.register(LibraryType, LibraryTypeOptions)
233 admin.site.register(Species, SpeciesOptions)
234 #admin.site.register(Tag, TagOptions)