Add feature to manage and print labels.
[htsworkflow.git] / htsworkflow / frontend / labels / admin.py
1 from htsworkflow.frontend.labels.models import LabelContent, LabelTemplate, LabelPrinter
2 from htsworkflow.frontend.inventory.models import PrinterTemplate
3 from htsworkflow.frontend.bcmagic.utils import print_zpl_socket
4 from django.template import Context, Template
5 from django.contrib import admin
6
7 class LabelContentOptions(admin.ModelAdmin):
8     save_as = True
9     save_on_top = True
10     search_fields = (
11         'title',
12         'subtitle',
13         'text',
14         'barcode',
15         'creator',
16     )
17     list_display = ('title','subtitle','text','barcode','template','creator')
18     list_filter = ('template','creator',)
19     fieldsets = (
20       (None, {
21           'fields': (('title','subtitle','text','barcode'),
22                      ('template','creator'))
23
24       }),
25     )
26     actions = ['action_print_labels']
27     
28     def action_print_labels(self, request, queryset):
29         """
30         Django action which prints labels for the selected set of labels from the
31         Django Admin interface.
32         """
33        
34         zpl_list = []
35         #Iterate over selected labels to print
36         for label in queryset.all():
37
38           template_used = LabelTemplate.objects.get(name=label.template.name)
39           # ZPL Template
40           t = Template(template_used.ZPL_code)
41
42           # Django Template Context
43           c = Context({'label': label})
44             
45           # Send rendered template to the printer that the template
46           #  object has been attached to in the database.
47           zpl_list.append(t.render(c))
48         
49         print_zpl_socket(zpl_list, host=template_used.printer.ip_address)
50     
51         self.message_user(request, "%s labels printed." % (len(queryset)))
52                           
53     action_print_labels.short_description = "Print Selected Labels"
54
55 class LabelTemplateOptions(admin.ModelAdmin):
56     save_as = True
57     save_on_top = True
58     list_display = ('name', 'printer', 'ZPL_code')
59
60 class LabelPrinterOptions(admin.ModelAdmin):
61     list_display = ('name', 'ip_address', 'labels')
62
63 admin.site.register(LabelContent, LabelContentOptions)
64 admin.site.register(LabelTemplate, LabelTemplateOptions)
65 admin.site.register(LabelPrinter, LabelPrinterOptions)
66