[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue-pos/src Config.py POSClient.py hardware/ca...
From: |
Jason Cater |
Subject: |
gnue-pos/src Config.py POSClient.py hardware/ca... |
Date: |
Fri, 15 Aug 2003 08:11:02 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue-pos
Branch:
Changes by: Jason Cater <address@hidden> 03/08/15 08:11:02
Modified files:
src : Config.py POSClient.py
src/hardware/cashdrawer: bell.py escpos.py
src/hardware/receiptprinter: escpos.py plain.py
Added files:
src : IOProxy.py
Log message:
* Added common interface for hardware output via device/file/external
command
* Attempted to add logo support to ESC/POS receipt printers (not
working yet)
* More cleanup
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/IOProxy.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/Config.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/POSClient.py.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/hardware/cashdrawer/bell.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/hardware/cashdrawer/escpos.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/hardware/receiptprinter/escpos.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/hardware/receiptprinter/plain.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
Patches:
Index: gnue-pos/src/Config.py
diff -c gnue-pos/src/Config.py:1.6 gnue-pos/src/Config.py:1.7
*** gnue-pos/src/Config.py:1.6 Mon Jul 7 01:29:13 2003
--- gnue-pos/src/Config.py Fri Aug 15 08:11:01 2003
***************
*** 113,117 ****
--- 113,130 ----
'Typecast' : GTypecast.text,
'Default' : '' },
+ { 'Name' : 'ReceiptHeader',
+ 'Type' : 'Setting',
+ 'Comment' : '',
+ 'Description': '',
+ 'Typecast' : GTypecast.text,
+ 'Default' : 'My Sample Store\n123 N Main St\nMy Town, MS
38654\n800-555-1234' },
+
+ { 'Name' : 'ReceiptLogo',
+ 'Type' : 'Setting',
+ 'Comment' : '',
+ 'Description': '',
+ 'Typecast' : GTypecast.text,
+ 'Default' : '' },
)
Index: gnue-pos/src/POSClient.py
diff -c gnue-pos/src/POSClient.py:1.14 gnue-pos/src/POSClient.py:1.15
*** gnue-pos/src/POSClient.py:1.14 Tue Jul 22 13:26:25 2003
--- gnue-pos/src/POSClient.py Fri Aug 15 08:11:01 2003
***************
*** 165,171 ****
mp[p2.lower()] = options[key]
! for device, params in mapping.items():
dr = params['driver'].lower().replace('/','.')
try:
module = dyn_import('gnue.pointofsale.hardware.%s' % dr)
--- 165,174 ----
mp[p2.lower()] = options[key]
! srt = list(mapping.items())
! srt.sort()
!
! for device, params in srt:
dr = params['driver'].lower().replace('/','.')
try:
module = dyn_import('gnue.pointofsale.hardware.%s' % dr)
Index: gnue-pos/src/hardware/cashdrawer/bell.py
diff -c gnue-pos/src/hardware/cashdrawer/bell.py:1.2
gnue-pos/src/hardware/cashdrawer/bell.py:1.3
*** gnue-pos/src/hardware/cashdrawer/bell.py:1.2 Mon Jun 23 01:31:11 2003
--- gnue-pos/src/hardware/cashdrawer/bell.py Fri Aug 15 08:11:02 2003
***************
*** 32,37 ****
--- 32,38 ----
__all__ = ['Driver']
from gnue.common.events.EventAware import EventAware
+ from gnue.pointofsale.IOProxy import simpleOpen
class Driver(EventAware):
***************
*** 39,50 ****
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
self.registerEventListeners({'EndTicket': self._open})
!
def _open(self, event):
! p = open(self.port,'w')
p.write('\007')
p.close()
--- 40,52 ----
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
+ self.device_params = params
self.registerEventListeners({'EndTicket': self._open})
!
def _open(self, event):
! p = simpleOpen(self.device_params)
p.write('\007')
p.close()
Index: gnue-pos/src/hardware/cashdrawer/escpos.py
diff -c gnue-pos/src/hardware/cashdrawer/escpos.py:1.2
gnue-pos/src/hardware/cashdrawer/escpos.py:1.3
*** gnue-pos/src/hardware/cashdrawer/escpos.py:1.2 Tue Jun 24 12:06:42 2003
--- gnue-pos/src/hardware/cashdrawer/escpos.py Fri Aug 15 08:11:02 2003
***************
*** 32,37 ****
--- 32,38 ----
__all__ = ['Driver']
from gnue.common.events.EventAware import EventAware
+ from gnue.pointofsale.IOProxy import simpleOpen
class Driver(EventAware):
***************
*** 39,50 ****
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
- self.registerEventListeners({'EndTicket': self._open})
!
! def _open(self, event):
! p = open(self.port,'w')
p.write('\x1bp\x002\xfa')
p.close()
--- 40,51 ----
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
+ self.device_params = params
+ self.registerEventListeners({'EndTicket': self.open})
! def open(self, event):
! p = simpleOpen(self.device_params)
p.write('\x1bp\x002\xfa')
p.close()
Index: gnue-pos/src/hardware/receiptprinter/escpos.py
diff -c gnue-pos/src/hardware/receiptprinter/escpos.py:1.2
gnue-pos/src/hardware/receiptprinter/escpos.py:1.3
*** gnue-pos/src/hardware/receiptprinter/escpos.py:1.2 Mon Jul 7 01:29:13 2003
--- gnue-pos/src/hardware/receiptprinter/escpos.py Fri Aug 15 08:11:02 2003
***************
*** 38,43 ****
#
def init(self):
! self.twocolor = hasattr(self,'twocolor') and self.width or 0
--- 38,123 ----
#
def init(self):
! self.colors = hasattr(self,'colors') and self.colors or 1
! self.__double = 0
! self.__underline = 0
! self.__doubleheight = 0
! self.__bold = 0
+ def reset(self):
+ return "\x1B@"
+
+ def formfeed(self):
+ return '\n\n\n\n\n\n'
+
+ def beginColor(self, color):
+ if self.colors == 1:
+ return ""
+ else:
+ return "\x1Br" + chr(color)
+
+ def endColor(self, color):
+ if self.colors == 1:
+ return ""
+ else:
+ return "\x1Br\x00"
+
+ def beginBold(self):
+ self.__bold = 1
+ return self.__setPrintMode()
+
+ def endBold(self):
+ self.__bold = 0
+ return self.__setPrintMode()
+
+ def beginDouble(self):
+ self.__double = 1
+ return self.__setPrintMode()
+
+ def endDouble(self):
+ self.__double = 0
+ return self.__setPrintMode()
+
+ def beginDoubleHeight(self):
+ self.__doubleheight = 1
+ return self.__setPrintMode()
+
+ def endDoubleHeight(self):
+ self.__doubleheight = 0
+ return self.__setPrintMode()
+
+ def beginUnderline(self):
+ self.__underline = 1
+ return self.__setPrintMode()
+
+ def endUnderline(self):
+ self.__underline = 0
+ return self.__setPrintMode()
+
+ def __setPrintMode(self):
+ return "\x1B!" + chr(self.__bold * 8 | self.__doubleheight * 16 | \
+ self.__double * 32 | self.__underline * 128)
+
+ def drawImage(self, image):
+ logoOffset = 0
+
+ lw, lh = image.size
+ vw = min(round(lw/8.0+.5),45)
+ vh = min(round(lh/8.0+.5),24)
+ uw = vw * 8
+ uh = vh * 8
+
+ rs = "\x1D\x2A" + chr(vw) + chr(vh) + "\x00"
+
+ for y in range(vh):
+ for x in range(uw):
+ byte = 0
+ for bit in range(8):
+ try:
+ byte |= 2**bit and (image.getpixel((x, (y+1)*8 - (bit+1)*8)) > 0)
+ except IndexError:
+ pass
+ rs += chr(byte)
+
+ return rs + "\x1D\x2F\x00"
Index: gnue-pos/src/hardware/receiptprinter/plain.py
diff -c gnue-pos/src/hardware/receiptprinter/plain.py:1.6
gnue-pos/src/hardware/receiptprinter/plain.py:1.7
*** gnue-pos/src/hardware/receiptprinter/plain.py:1.6 Thu Jul 17 01:16:44 2003
--- gnue-pos/src/hardware/receiptprinter/plain.py Fri Aug 15 08:11:02 2003
***************
*** 30,42 ****
__all__ = ['Driver']
from gnue.common.events.EventAware import EventAware
!
! LEFT_ALIGN=0
! CENTER_ALIGN=0
! RIGHT_ALIGN=2
dollarFormat = '$%.02f'
class Driver(EventAware):
##########################################################
--- 30,50 ----
__all__ = ['Driver']
from gnue.common.events.EventAware import EventAware
! from gnue.common.utils.TextUtils import *
! from gnue.pointofsale.IOProxy import simpleOpen
! from cStringIO import StringIO
!
! try:
! import Image
! except:
! Image = None
dollarFormat = '$%.02f'
+ BLACK = 0
+ RED = 1
+
+
class Driver(EventAware):
##########################################################
***************
*** 55,62 ****
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
! self.output = None
self.totals = {}
self.width = hasattr(self,'width') and self.width or 40
self.totalFields = ( ('subtotal',_('Subtotal')),
--- 63,82 ----
EventAware.__init__(self, instance)
self.instance = instance
self.__dict__.update(params)
! self.device_params = params
! self.output = ""
self.totals = {}
+ self.newline = "\n"
+
+ print self.dest
+
+ # Get the logo
+ logo = gConfig("ReceiptLogo")
+ if logo and Image:
+ self.logo = Image.open(logo)
+ else:
+ self.logo = None
+
self.width = hasattr(self,'width') and self.width or 40
self.totalFields = ( ('subtotal',_('Subtotal')),
***************
*** 67,73 ****
('sku',_('Code'), '%s', 0),
('quantity',_('Units'), '%s', 0),
('description',_('Description'), '%s', 0),
- ('each',_('Price/Unit'), dollarFormat, 1),
('extended',_('Extended'), dollarFormat, 1),
('taxable',_('T'), '%s', 1) )
--- 87,92 ----
***************
*** 75,106 ****
self.registerEventListeners( {
'BeginTicket': self._BeginTicket,
'EndTicket': self._EndTicket,
'CancelTicket': self._CancelTicket,
'AddTicketItem': self._AddTicketItem,
'CancelTicketItem': self._CancelTicketItem,
! 'UpdateTotal': self._UpdateTotal } )
self.init()
! def _BeginTicket(self, event):
! self.output = open(self.port,'w')
! self.totals = {}
! self.output.write("""
- Old Towne Market
- 9120 Pigeon Roost Rd
- Olive Branch, MS 38654
- (662) 893-5669
! Transaction # %s
! %s %s %s
! """ % (event.serial, '06/23/03','12:13pm','Jason'))
def _CancelTicket(self, event):
! self.output.write('\n**** CANCELED ****\n\n\n')
self.output.close()
self.output = None
--- 94,147 ----
self.registerEventListeners( {
'BeginTicket': self._BeginTicket,
+ 'ReprintTicket': self.printTicket,
'EndTicket': self._EndTicket,
'CancelTicket': self._CancelTicket,
'AddTicketItem': self._AddTicketItem,
'CancelTicketItem': self._CancelTicketItem,
! 'UpdateTotal': self._UpdateTotal,
! 'ReceiptPrinter:ReceiptTorn': self._ReceiptTorn } )
self.init()
! #
! #
! #
! def printTicket(self, event=None):
! if not self.output:
! return
!
! d = simpleOpen(self.device_params)
! self.output.seek(0)
! d.write(self.output.read())
! d.close()
+ def printHeader(self):
+ if self.logo:
+ self.write(self.drawImage(self.logo))
+ self.write( gConfig("receiptHeader").replace('\\n','\n'),
alignment=ALIGN_CENTER)
! #
! #
! #
! def _BeginTicket(self, event):
! try:
! self.output.close()
! except:
! pass
!
! self.output = StringIO()
! self.doublespace = 0
! self.totals = {}
!
! self.printHeader()
! self.write("""Trans # %s %s %s
! """ % (event.serial, '06/23/03 12:13pm','100'))
def _CancelTicket(self, event):
! self.write('\n**** CANCELED ****\n', color=RED, double=1,
alignment=ALIGN_CENTER)
self.output.close()
self.output = None
***************
*** 111,119 ****
self.output.write(display+': '+dollarFormat %
self.totals[field]+'\n')
except KeyError:
self.output.write(display+': '+dollarFormat % 0+'\n')
! self.output.write('\n\n\n')
! self.output.close()
! self.output = None
def _AddTicketItem(self, event):
# TODO
--- 152,160 ----
self.output.write(display+': '+dollarFormat %
self.totals[field]+'\n')
except KeyError:
self.output.write(display+': '+dollarFormat % 0+'\n')
! self.output.write(self.formfeed())
! self.printTicket()
!
def _AddTicketItem(self, event):
# TODO
***************
*** 121,127 ****
try:
if field == 'taxable':
if event.taxable:
! self.output.write('* ')
else:
self.output.write(' ')
else:
--- 162,168 ----
try:
if field == 'taxable':
if event.taxable:
! self.output.write(' T')
else:
self.output.write(' ')
else:
***************
*** 134,143 ****
def _CancelTicketItem(self, event):
pass
-
def _UpdateTotal(self, event):
self.totals[event.field] = event.amount
! def write(self, text, double=0, color=0, alignment=0):
! pass
--- 175,286 ----
def _CancelTicketItem(self, event):
pass
def _UpdateTotal(self, event):
self.totals[event.field] = event.amount
+ def write(self, text, double=0, bold=0, color=BLACK, underline=0,
+ doubleheight=0, alignment=ALIGN_LEFT, eol=1, width=0):
! splittext = text.split('\n')
! i = 0
! linehead = ""
!
! for line in splittext:
! divisor = 1
!
! if underline:
! self.output.write(self.beginUnderline())
! if doubleheight:
! self.output.write(self.beginDoubleHeight())
! if double:
! self.output.write(self.beginDouble())
! if color:
! self.output.write(self.beginColor(color))
! if bold:
! self.output.write(self.beginBold())
!
! if self.doublespace:
! l = ""
! for char in tuple(line):
! l += char + ' '
! line = l[:-1]
! elif double:
! divisor = 2
!
! self.output.write(lineWrap(line, alignment=alignment, eol=0,
maxWidth=int((width or self.width)/divisor)))
!
! if bold:
! self.output.write(self.endBold())
! if color:
! self.output.write(self.endColor(color))
! if double:
! self.output.write(self.endDouble())
! if doubleheight:
! self.output.write(self.endDoubleHeight())
! if underline:
! self.output.write(self.endUnderline())
!
! if i < len(splittext)-1:
! self.output.write(self.newline)
!
! i += 1
!
! if eol:
! self.output.write(self.newline)
!
! def writeTuple(self, list):
! i = 0
! for set in list:
! if i != len(list) - 1:
! list['eol'] = 0
! self.write(**list)
!
! def reset(self):
! return ""
!
! def formfeed(self):
! return '\n\n\n\n\n\n'
!
! def beginColor(self):
! return ""
!
! def endColor(self):
! return ""
!
! def beginBold(self):
! return ""
!
! def endBold(self):
! return ""
!
! def beginDouble(self):
! self.doublespace = 1
! return ""
!
! def endDouble(self):
! self.doublespace = 0
! return ""
!
! def beginDoubleHeight(self):
! return ""
!
! def endDoubleHeight(self):
! return ""
!
! def beginUnderline(self):
! return ""
!
! def endUnderline(self):
! return ""
!
! def drawImage(self, image):
! return ""
!
! def cutBetweenSheets(self):
! self.__receiptTorn = 0
! self.dispatchEvent('Prompt', label='Tear off receipt and press enter:',
response='ReceiptPrinter:ReceiptTorn')
! while not self.__receiptTorn:
! pass
!
! def _ReceiptTorn(self, event):
! self.__receiptTorn = 1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue-pos/src Config.py POSClient.py hardware/ca...,
Jason Cater <=