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