--- /dev/null
+from htsworkflow.frontend import settings
+
+import ftplib
+import socket
+import StringIO
+
+
+def print_zpl(zpl_text, host=settings.BCPRINTER_PRINTER1_HOST):
+ """
+ Sends zpl_text to printer
+ """
+ ftp = ftplib.FTP(host=host, user='blank', passwd='')
+ ftp.login()
+ ftp.storlines("STOR printme.txt", StringIO.StringIO(zpl_text))
+ ftp.quit()
+
+
+def print_zpl_socket(zpl_text, host=settings.BCPRINTER_PRINTER1_HOST, port=settings.BCPRINTER_PRINTER1_PORT):
+ """
+ Sends zpl_text to printer via a socket
+ """
+ s = socket.socket()
+ # PORT 9100 is default for Zebra tabletop/desktop printers
+ # PORT 6101 is default for Zebra mobile printers
+ s.connect((host, port))
+ s.sendall(zpl_text)
+ s.close()
\ No newline at end of file
from htsworkflow.frontend.inventory.models import Item, LongTermStorage
from htsworkflow.frontend.experiments.models import FlowCell
from htsworkflow.frontend.bcmagic.forms import BarcodeMagicForm
+from htsworkflow.frontend.bcprinter.util import print_zpl_socket
+from htsworkflow.frontend import settings
from htsworkflow.util.jsonutil import encode_json
from django.core.exceptions import ObjectDoesNotExist
'bcmagic': BarcodeMagicForm()
}
+INVENTORY_ITEM_PRINT_DEFAULTS = {
+ 'default': 'inventory/default.zpl',
+ 'host': settings.BCPRINTER_PRINTER1_HOST
+}
+
+def getTemplateByType(item_type):
+ """
+ returns template to use given item_type
+ """
+ if item_type in INVENTORY_ITEM_PRINT_DEFAULTS:
+ return INVENTORY_ITEM_PRINT_DEFAULTS[item_type]
+ else:
+ return INVENTORY_ITEM_PRINT_DEFAULTS['default']
+
@login_required
def data_items(request):
"""
context_instance=RequestContext(request))
@login_required
-def item_summary(request, uuid):
+def item_summary(request, uuid, msg=''):
"""
Display a summary for an item
"""
context_dict = {
'page_name': 'Item Summary',
'item': item,
- 'uuid': uuid
+ 'uuid': uuid,
+ 'msg': msg
}
context_dict.update(INVENTORY_CONTEXT_DEFAULTS)
context_dict,
context_instance=RequestContext(request))
+
+def _item_print(item, request):
+ """
+ Prints an item given a type of item label to print
+ """
+ #FIXME: Hard coding this for now... need to abstract later.
+ context = {'item': item}
+
+ # Print using barcode_id
+ if not item.force_use_uuid and (item.barcode_id is None or len(item.barcode_id.strip())):
+ context['use_uuid'] = False
+ msg = 'Printing item with barcode id: %s' % (item.barcode_id)
+ # Print using uuid
+ else:
+ context['use_uuid'] = True
+ msg = 'Printing item with UUID: %s' % (item.uuid)
+
+ c = RequestContext(request, context)
+ t = get_template(getTemplateByType(item.item_type.name))
+ print_zpl_socket(t.render(c))
+
+ return msg
+
+@login_required
+def item_print(request, uuid):
+ """
+ Print a label for a given item
+ """
+ try:
+ item = Item.objects.get(uuid=uuid)
+ except ObjectDoesNotExist, e:
+ item = None
+ msg = "Item with UUID %s does not exist" % (uuid)
+
+ if item is not None:
+ msg = _item_print(item, request)
+
+ return item_summary(request, uuid, msg)
+
+
def link_flowcell_and_device(request, flowcell, serial):
"""
Updates database records of a flowcell being archived on a device with a particular serial #
'htsworkflow.frontend.reports',
'htsworkflow.frontend.inventory',
'htsworkflow.frontend.bcmagic',
+ 'htsworkflow.frontend.bcprinter',
'django.contrib.databrowse',
)
RESULT_HOME_DIR='/Users/diane/proj/solexa/results/flowcells'
LINK_FLOWCELL_STORAGE_DEVICE_URL = options.get('frontend', 'link_flowcell_storage_device_url')
-
+# PORT 9100 is default for Zebra tabletop/desktop printers
+# PORT 6101 is default for Zebra mobile printers
+BCPRINTER_PRINTER1_HOST = options.get('bcprinter', 'printer1_host')
+BCPRINTER_PRINTER1_PORT = int(options.get('bcprinter', 'printer1_port'))
+BCPRINTER_PRINTER2_HOST = options.get('bcprinter', 'printer2_host')
+BCPRINTER_PRINTER2_PORT = int(options.get('bcprinter', 'printer2_port'))