diff --git a/rattail_cognitive/labels.py b/rattail_cognitive/labels.py index 34e3abb..230cb94 100644 --- a/rattail_cognitive/labels.py +++ b/rattail_cognitive/labels.py @@ -78,9 +78,25 @@ class BlasterTwoUpFormatter(labels.TwoUpCommandFormatter, BlasterFormatter): half_offset = 120 def label_body_commands(self, product, x=0): - description = '%s %s' % (product.description, product.size) + + # Always remove check digit from UPC. + upc = unicode(product.upc)[:-1] + if len(upc) != 13: + raise ValueError(u"UPC format is unexpected: {0}".format(repr(product.upc))) + + # Create barcode command based on type of UPC. + if upc.startswith(u'00'): # UPC-A + barcode_type = u'UPCA+' + barcode = upc[2:] + elif upc.startswith(u'0'): # EAN-13 + barcode_type = u'EAN13+' + barcode = upc[1:] + else: + raise ValueError(u"UPC format is invalid: {0}".format(repr(product.upc))) + + description = u'{0} {1}'.format(product.description, product.size) return [ - 'STRING 5X7(1,1,1,1) %u 5 %s' % (x + 5, description[:17]), - 'STRING 5X7(1,1,1,1) %u 15 %s' % (x + 5, description[17:]), - 'BARCODE UPCA+ %u 75 25 %011u' % (x + 9, product.upc), + u'STRING 5X7(1,1,1,1) {0} 5 {1}'.format(x + 5, description[:17]), + u'STRING 5X7(1,1,1,1) {0} 15 {1}'.format(x + 5, description[17:]), + u'BARCODE {0} {1} 75 25 {2}'.format(barcode_type, x + 9, barcode), ]