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',
127 list_display_links = ('id', 'library_name',)
131 ('id','library_name','hidden'),
132 ('library_species', 'cell_line', 'replicate'),
133 ('library_type', 'experiment_type'))
135 ('Creation Information:', {
136 'fields' : (('made_by', 'creation_date', 'stopping_point'),
137 ('amplified_from_sample'),
138 ('gel_cut_size', 'insert_size',
139 'undiluted_concentration'),
140 ('bioanalyzer_concentration','bioanalyzer_image_url'),
141 ('bioanalyzer_summary'),
144 ('Library/Project Affiliation:', {
145 'fields' : (('account_number', 'affiliations'),)
151 actions = ['action_print_library_labels']
153 def action_print_library_labels(self, request, queryset):
155 Django action which prints labels for the selected set of labels from the
156 Django Admin interface.
159 #Probably should ask if the user really meant to print all selected
160 # libraries if the count is above X. X=10 maybe?
162 # Grab the library template
163 #FIXME: Hardcoding library template name. Not a good idea... *sigh*.
164 EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME = "Library"
167 template = PrinterTemplate.objects.get(item_type__name=EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME)
168 except PrinterTemplate.DoesNotExist:
169 self.message_user(request, "Could not find a library template with ItemType.name of '%s'" % \
170 (EVIL_HARDCODED_LIBRARY_TEMPLATE_NAME))
174 t = Template(template.template)
177 #Iterate over selected labels to print
178 for library in queryset.all():
180 # Django Template Context
181 c = Context({'library': library})
183 # Send rendered template to the printer that the template
184 # object has been attached to in the database.
185 zpl_list.append(t.render(c))
187 print_zpl_socket(zpl_list, host=template.printer.ip_address)
189 self.message_user(request, "%s labels printed." % (len(queryset)))
191 action_print_library_labels.short_description = "Print Labels"
193 def formfield_for_dbfield(self, db_field, **kwargs):
194 # Override Field type
195 if db_field.name in ('affiliations', 'tags'):
196 kwargs['widget'] = widgets.FilteredSelectMultiple(
197 db_field.verbose_name,
198 (db_field.name in self.filter_vertical)
200 field = super(LibraryOptions, self).formfield_for_dbfield(db_field,
202 # Override field attributes
203 if db_field.name == "bioanalyzer_summary":
204 field.widget.attrs["rows"] = "3"
207 class SpeciesOptions(admin.ModelAdmin):
210 'fields': (('scientific_name', 'common_name'),)
214 class TagOptions(admin.ModelAdmin):
215 list_display = ('tag_name', 'context')
218 'fields': ('tag_name', 'context')
222 admin.site.register(Library, LibraryOptions)
223 admin.site.register(Affiliation, AffiliationOptions)
224 #admin.site.register(Antibody, AntibodyOptions)
225 admin.site.register(Cellline, CelllineOptions)
226 #admin.site.register(Condition, ConditionOptions)
227 admin.site.register(ExperimentType, ExperimentTypeOptions)
228 #admin.site.register(HTSUser, HTSUserOptions)
229 admin.site.register(LibraryType, LibraryTypeOptions)
230 admin.site.register(Species, SpeciesOptions)
231 #admin.site.register(Tag, TagOptions)