commit-gnue
[Top][All Lists]
Advanced

[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")




reply via email to

[Prev in Thread] Current Thread [Next in Thread]