[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue-pos doc/technotes/00001.txt src/Config.py ...
From: |
Jason Cater |
Subject: |
gnue-pos doc/technotes/00001.txt src/Config.py ... |
Date: |
Mon, 30 Jun 2003 19:59:03 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue-pos
Branch:
Changes by: Jason Cater <address@hidden> 03/06/30 19:59:03
Modified files:
doc/technotes : 00001.txt
src : Config.py POSClient.py
src/backends/gnue_sb: Driver.py
src/frontends/wx: Driver.py
src/hardware/receiptprinter: plain.py
Added files:
src : Handler.py
Log message:
added support for manually keyed items (overrides, etc)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/doc/technotes/00001.txt.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/Handler.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/Config.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/POSClient.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/backends/gnue_sb/Driver.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/frontends/wx/Driver.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/hardware/receiptprinter/plain.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
Patches:
Index: gnue-pos/doc/technotes/00001.txt
diff -c gnue-pos/doc/technotes/00001.txt:1.1
gnue-pos/doc/technotes/00001.txt:1.2
*** gnue-pos/doc/technotes/00001.txt:1.1 Wed Jun 18 02:50:51 2003
--- gnue-pos/doc/technotes/00001.txt Mon Jun 30 19:59:02 2003
***************
*** 13,20 ****
--- 13,24 ----
RequestTender
RequestAddItem
RequestRemoveItem
+ RequestCancelLastItem
+ RequestDuplicateLastItem
RequestDiscount
RequestExit
+ RequestLogOut
+ RequestQuantity
Data-Related Events
***************
*** 37,40 ****
--- 41,52 ----
CancelTicketItem
PriceLookup
+
+ BeginManualItem
+ EndManualItem
+
+ RequestManualDepartment
+ RequestManualDescription
+ RequestManualBasePrice
+ RequestManualPrice
Index: gnue-pos/src/Config.py
diff -c gnue-pos/src/Config.py:1.2 gnue-pos/src/Config.py:1.3
*** gnue-pos/src/Config.py:1.2 Sun Jun 22 23:48:57 2003
--- gnue-pos/src/Config.py Mon Jun 30 19:59:03 2003
***************
*** 29,39 ****
ConfigOptions = (
! { 'Name' : 'DataConnection',
'Type' : 'Setting',
'Comment' : 'The connection name to use for sales data.',
'Description': 'The connection name to use for sales data.',
'Typecast' : GTypecast.text,
! 'Default' : 'register-config' },
)
--- 29,74 ----
ConfigOptions = (
! { 'Name' : 'BackendConnection',
'Type' : 'Setting',
'Comment' : 'The connection name to use for sales data.',
'Description': 'The connection name to use for sales data.',
'Typecast' : GTypecast.text,
! 'Default' : 'gnuesb' },
!
! { 'Name' : 'BackendProvider',
! 'Type' : 'Setting',
! 'Comment' : 'The backend provider to use for data.',
! 'Description': 'The backend provider to use for data.',
! 'Typecast' : GTypecast.text,
! 'Default' : 'gnue_sb' },
!
! { 'Name' : 'FrontendUI',
! 'Type' : 'Setting',
! 'Comment' : 'The frontend user interface.',
! 'Description': 'The frontend user interface.',
! 'Typecast' : GTypecast.text,
! 'Default' : 'wx' },
!
! { 'Name' : 'ManualItemSKU',
! 'Type' : 'Setting',
! 'Comment' : 'The SKU to use for manually keyed items.',
! 'Description': 'The SKU to use for manually keyed items. (Can be empty to
disabled)',
! 'Typecast' : GTypecast.text,
! 'Default' : '9999' },
!
! { 'Name' : 'ManualItemSKUisDepartment',
! 'Type' : 'Setting',
! 'Comment' : 'The SKU to use for manually keyed items.',
! 'Description': 'The SKU to use for manually keyed items. (Can be empty to
disabled)',
! 'Typecast' : GTypecast.boolean,
! 'Default' : 1 },
!
! { 'Name' : 'ManualItemRequestBasePrice',
! 'Type' : 'Setting',
! 'Comment' : 'The SKU to use for manually keyed items.',
! 'Description': 'The SKU to use for manually keyed items. (Can be empty to
disabled)',
! 'Typecast' : GTypecast.boolean,
! 'Default' : 1 },
)
Index: gnue-pos/src/POSClient.py
diff -c gnue-pos/src/POSClient.py:1.8 gnue-pos/src/POSClient.py:1.9
*** gnue-pos/src/POSClient.py:1.8 Sun Jun 22 23:48:57 2003
--- gnue-pos/src/POSClient.py Mon Jun 30 19:59:03 2003
***************
*** 40,45 ****
--- 40,47 ----
from gnue.pointofsale import VERSION
from gnue.pointofsale.Config import ConfigOptions
+ from Handler import Handler
+
class POSClient(GClientApp, events.EventAware):
#
# GClientApp() overrides
***************
*** 104,124 ****
if hasattr(sys, 'frozen'):
self.frontend.UILoginHandler().getDummyLogin()
#
# Testing stuff....
#
! self.dispatchEvent('BeginTicket', serial=100000)
! self.dispatchEvent('AddTicketItem', sku=123355, description='A Tale of
Two Cities (Dickens, Charles) USED', department=20,
! quantity=1, each=5.95, extended=5.95)
! self.dispatchEvent('AddTicketItem', sku=123356, description='Harry Potter
and the Order of the Phoenix (Rowling, J.K.)', department=20,
! quantity=2, each=29.99, extended=59.98)
! self.dispatchEvent('AddTicketItem', description='Gift Certificate',
department=999,
! quantity=1, each=30.00, extended=30.00)
! self.dispatchEvent('UpdateTotal', field="subtotal", amount=95.93)
! self.dispatchEvent('UpdateTotal', field="mstax", amount=6.72)
! self.dispatchEvent('UpdateTotal', field="total", amount=102.65)
! self.dispatchEvent('EndTicket')
self.frontend.run()
--- 106,128 ----
if hasattr(sys, 'frozen'):
self.frontend.UILoginHandler().getDummyLogin()
+ Handler(self)
#
# Testing stuff....
#
! ## self.dispatchEvent('BeginTicket', serial=100000)
! ## self.dispatchEvent('AddTicketItem', sku=123355, description='A Tale of
Two Cities (Dickens, Charles) USED', department=20,
! ## quantity=1, each=5.95, extended=5.95)
! ## self.dispatchEvent('AddTicketItem', sku=123356, description='Harry
Potter and the Order of the Phoenix (Rowling, J.K.)', department=20,
! ## quantity=2, each=29.99, extended=59.98)
! ## self.dispatchEvent('AddTicketItem', description='Gift Certificate',
department=999,
! ## quantity=1, each=30.00, extended=30.00)
! ## self.dispatchEvent('UpdateTotal', field="subtotal", amount=95.93)
! ## self.dispatchEvent('UpdateTotal', field="mstax", amount=6.72)
! ## self.dispatchEvent('UpdateTotal', field="total", amount=102.65)
! ## self.dispatchEvent('Prompt', label='Enter User ID:', field="login")
! ## self.dispatchEvent('EndTicket')
self.frontend.run()
Index: gnue-pos/src/backends/gnue_sb/Driver.py
diff -c gnue-pos/src/backends/gnue_sb/Driver.py:1.1
gnue-pos/src/backends/gnue_sb/Driver.py:1.2
*** gnue-pos/src/backends/gnue_sb/Driver.py:1.1 Tue Jun 17 18:30:52 2003
--- gnue-pos/src/backends/gnue_sb/Driver.py Mon Jun 30 19:59:03 2003
***************
*** 33,37 ****
class Driver(BaseDriver):
def init(self):
! pass
--- 33,62 ----
class Driver(BaseDriver):
def init(self):
! self.registerEventListeners({
! 'ProcessSKU': self._ProcessSKU,
! 'EndManualItem': self._EndManualItem,
! 'RequestBeginTicket': self._RequestBeginTicket })
+ def _ProcessSKU(self, event):
+ sku = event.sku
+ origEvent= event.origEvent
+ event.setResult(1)
+
+ if 1: # Manually Keyed Item
+ origEvent.dispatchAfter('BeginManualItem', sku=sku)
+ event.setResult(0)
+ else:
+ self.dispatchEvent('AddItem', sku=123, description='Foobar', price=10,
taxable=1)
+
+ if 0: # requiresQuantity
+ origEvent.dispatchAfter('RequestQuantity')
+
+
+
+ def _RequestBeginTicket(self, event):
+ self.dispatchEvent('BeginTicket', serial=123456)
+
+
+ def _EndManualItem(self, event):
+ pass
\ No newline at end of file
Index: gnue-pos/src/frontends/wx/Driver.py
diff -c gnue-pos/src/frontends/wx/Driver.py:1.5
gnue-pos/src/frontends/wx/Driver.py:1.6
*** gnue-pos/src/frontends/wx/Driver.py:1.5 Sun Jun 22 23:48:57 2003
--- gnue-pos/src/frontends/wx/Driver.py Mon Jun 30 19:59:03 2003
***************
*** 36,41 ****
--- 36,44 ----
dollarFormat = '$%.02f'
+ STATUS_USER = 2
+ STATUS_TICKET = 1
+
from wxPython.wx import *
from wxPython.gizmos import *
***************
*** 49,62 ****
('sku',_('Code'), '%s', 0),
('quantity',_('Units'), '%s', 0),
('description',_('Description'), '%s', 0),
('each',_('Price/Unit'), dollarFormat, 1),
! ('extended',_('Extended'), dollarFormat, 1) )
self.totalFieldMapping = {}
self._buildUI()
self.registerEventListeners( {
'BeginTicket': self._BeginTicket,
'EndTicket': self._EndTicket,
'AddTicketItem': self._AddTicketItem,
--- 52,68 ----
('sku',_('Code'), '%s', 0),
('quantity',_('Units'), '%s', 0),
('description',_('Description'), '%s', 0),
+ ('base',_('Base Price'), dollarFormat, 1),
('each',_('Price/Unit'), dollarFormat, 1),
! ('extended',_('Extended'), dollarFormat, 1),
! ('taxable','T', '%s', 0) )
self.totalFieldMapping = {}
self._buildUI()
self.registerEventListeners( {
+ 'Prompt': self._Prompt,
'BeginTicket': self._BeginTicket,
'EndTicket': self._EndTicket,
'AddTicketItem': self._AddTicketItem,
***************
*** 68,78 ****
--- 74,102 ----
app = getWxApp()
app.MainLoop()
+ def _Prompt(self, event):
+ self.inputLabel.SetLabel(event.label)
+ self.inputField.Clear()
+ self.inputField.SetFocus()
+ self.__event = event.response
+ try:
+ self.statusbar.SetStatusText (event.help)
+ except AttributeError:
+ pass
+
+ try:
+ self.__endingEvents = event.endingEvents
+ except AttributeError:
+ self.__endingEvents = ()
+
def _BeginTicket(self, event):
print "Beginning ticket # %s" % event.serial
+ self.statusbar.SetStatusText("Ticket # %s" % event.serial, STATUS_TICKET)
+ self.receiptList.DeleteAllItems()
def _EndTicket(self, event):
print "Ending ticket"
+ self.statusbar.SetStatusText("No Current Ticket", STATUS_TICKET)
def _AddTicketItem(self, event):
# Insert a new row
***************
*** 104,111 ****
frame.SetAutoLayout(1)
EVT_SIZE(frame, self.__OnSize)
! self.statusbar = frame.CreateStatusBar()
! self.statusbar.SetStatusText ('Clerk: 100 (Jason)')
topPanel = wxPanel(frame, -1)
topSizer = wxBoxSizer(wxHORIZONTAL)
--- 128,135 ----
frame.SetAutoLayout(1)
EVT_SIZE(frame, self.__OnSize)
! self.statusbar = frame.CreateStatusBar(3)
! self.statusbar.SetStatusText ('Clerk: 100 (Jason)', STATUS_USER)
topPanel = wxPanel(frame, -1)
topSizer = wxBoxSizer(wxHORIZONTAL)
***************
*** 183,191 ****
frameSizer.Layout()
# self.frame.ShowFullScreen(1)
! frame.SetSize((640,480)) # TODO: Maximize to screen?
frame.Show(1)
def __OnSize(self, event):
self.frame.Layout()
--- 207,216 ----
frameSizer.Layout()
# self.frame.ShowFullScreen(1)
! frame.SetSize((640,480)) # TODO: Maximize to screen?
frame.Show(1)
+ EVT_KEY_DOWN(self.inputField, self.__keypress)
def __OnSize(self, event):
self.frame.Layout()
***************
*** 197,199 ****
--- 222,244 ----
else:
w -= self.receiptList.GetColumnWidth(i)
self.receiptList.SetColumnWidth(pos, w)
+
+ def __keypress(self, event):
+ key = event.GetKeyCode()
+
+ if key in (WXK_RETURN,WXK_NUMPAD_ENTER):
+ self.dispatchEvent(self.__event, value=self.inputField.GetValue())
+ elif key == WXK_ESCAPE:
+ self.inputField.Clear()
+ elif _specialKeys.has_key(key) and _specialKeys[key] in
self.__endingEvents:
+ self.dispatchEvent(self.__event, value=self.inputField.GetValue(),
next=_specialKeys[key])
+ else:
+ event.Skip()
+
+
+ _specialKeys = {
+ '*': 'RequestQuantity',
+ '=': 'RequestTender',
+ '-': 'RequestCancelLastItem',
+ '+': 'RequestDuplicateLastItem',
+ }
\ No newline at end of file
Index: gnue-pos/src/hardware/receiptprinter/plain.py
diff -c gnue-pos/src/hardware/receiptprinter/plain.py:1.2
gnue-pos/src/hardware/receiptprinter/plain.py:1.3
*** gnue-pos/src/hardware/receiptprinter/plain.py:1.2 Mon Jun 23 01:31:11 2003
--- gnue-pos/src/hardware/receiptprinter/plain.py Mon Jun 30 19:59:03 2003
***************
*** 62,68 ****
('quantity',_('Units'), '%s', 0),
('description',_('Description'), '%s', 0),
('each',_('Price/Unit'), dollarFormat, 1),
! ('extended',_('Extended'), dollarFormat, 1) )
self.totalFieldMapping = {}
--- 62,69 ----
('quantity',_('Units'), '%s', 0),
('description',_('Description'), '%s', 0),
('each',_('Price/Unit'), dollarFormat, 1),
! ('extended',_('Extended'), dollarFormat, 1),
! ('taxable',_('T'), '%s', 1) )
self.totalFieldMapping = {}
***************
*** 112,118 ****
# TODO
for field, foo, format, bar in self.receiptColumns:
try:
! self.output.write(format % event.__dict__[field]+' ')
except KeyError:
pass
self.output.write("\n")
--- 113,125 ----
# TODO
for field, foo, format, bar in self.receiptColumns:
try:
! if field == 'taxable':
! if event['taxable']:
! self.output.write('* ')
! else:
! self.output.write(' ')
! else:
! self.output.write(format % event.__dict__[field]+' ')
except KeyError:
pass
self.output.write("\n")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue-pos doc/technotes/00001.txt src/Config.py ...,
Jason Cater <=