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