commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r6408 - in trunk/gnue-pointofsale: . samples samples/oldtownemarket


From: jcater
Subject: r6408 - in trunk/gnue-pointofsale: . samples samples/oldtownemarket
Date: Mon, 27 Sep 2004 14:49:25 -0500 (CDT)

Author: jcater
Date: 2004-09-27 14:49:24 -0500 (Mon, 27 Sep 2004)
New Revision: 6408

Added:
   trunk/gnue-pointofsale/samples/
   trunk/gnue-pointofsale/samples/oldtownemarket/
   trunk/gnue-pointofsale/samples/oldtownemarket/pos_backend.py
Log:
Added oldtowne sample

Added: trunk/gnue-pointofsale/samples/oldtownemarket/pos_backend.py
===================================================================
--- trunk/gnue-pointofsale/samples/oldtownemarket/pos_backend.py        
2004-09-27 19:31:44 UTC (rev 6407)
+++ trunk/gnue-pointofsale/samples/oldtownemarket/pos_backend.py        
2004-09-27 19:49:24 UTC (rev 6408)
@@ -0,0 +1,241 @@
+#
+# Copyright 2003 Jason Cater
+#
+# FILE:
+# cater/pos_backend.py
+#
+# DESCRIPTION:
+# Custom backend for my schema
+#
+# NOTES:
+#
+
+from gnue.pointofsale.backends.Base.Driver import Driver as BaseDriver
+from gnue.common.datasources import GConditions
+from gnue.common.datasources.GDataSource import DataSourceWrapper
+from random import randint
+
+CONN = gConfig('BackendConnection')
+MANUAL_SKU = gConfig('ManualItemSKU')
+
+class Driver(BaseDriver):
+  def init(self):
+    self.__totals = {}
+    self.registerEventListeners({
+          'ProcessSKU': self._ProcessSKU,
+          'EmployeeLogin': self._EmployeeLogin,
+#          'EndManualItem': self._EndManualItem,
+          'RequestBeginTicket': self._RequestBeginTicket,
+          'BeginLayaway': self._BeginLayaway,
+          'BeginTicket': self._BeginTicket,
+          'EndTicket': self._EndTicket,
+          'CancelTicket': self._CancelTicket,
+          'VerifyLogin': self._VerifyLogin,
+          'AddDiscount': self._AddDiscount,
+          'AddTender': self._AddTender,
+          'AddTicketItem': self._AddTicketItem,
+          'UpdateTotal': self._UpdateTotal,
+          'CancelTicketItem': self._CancelTicketItem,
+          'TaxExemptionEntered': self._TaxExemptionEntered,
+          'Receipt:GetNotice': self._GetFooter
+})
+    self.__dealermap = {}
+
+  def _EmployeeLogin(self, event):
+    self._login = event.id
+
+  def _VerifyLogin(self, event):
+
+    resultset = self._getResultSet('employees', ('id', 
'first_name','last_name'),
+       conditions={'login': event.login, 'password': event.password, 
'active':'Y'})
+
+    rec = resultset.firstRecord()
+    if not rec:
+      self.dispatchEvent('Warning',message='Invalid Login')
+      event.setResult(1)
+      return
+
+    self.dispatchEvent('EmployeeLogin',
+                       name='%s' % (rec['first_name']),
+                       id=rec['id'],
+                       login=event.login)
+
+
+  def _ProcessSKU(self, event):
+    sku = event.sku
+    origEvent= event.origEvent
+    event.setResult(1)
+    if not hasattr(event,'finalEvent'):
+      event.finalEvent = 'AddTicketItem'
+
+    if sku and sku == MANUAL_SKU:  # Manually Keyed Item
+      # Special item...
+      origEvent.dispatchAfter('BeginManualItem', sku=sku, 
quantity=event.quantity)
+      event.setResult(0)
+
+    elif 1 <= len(sku) <= 3:
+      # Booth number...
+      rs = self._getResultSet('booths', ('dealer',), {'booth': sku})
+      rec = rs.firstRecord()
+      if not rec:
+        self.dispatchEvent('Warning',message='Invalid Dealer Code')
+        return
+
+      self.__dealermap[sku] = rec['dealer']
+
+      origEvent.dispatchAfter('BeginManualItem', sku=sku, 
quantity=event.quantity)
+      event.setResult(0)
+
+    else:
+      # Regular item...
+      price = 10
+      description = 'Foobar'
+##      self.dispatchEvent(event.finalEvent, sku=sku, description=description, 
quantity=event.quantity, price=price, extended=round(event.quantity*price,2), 
taxable=1)
+
+    if 0: # requiresQuantity
+      origEvent.dispatchAfter('RequestQuantity')
+
+
+
+  def _RequestBeginTicket(self, event):
+    datasource = DataSourceWrapper(self.instance.connections,
+                   attributes={'connection': CONN,
+                               'name': 'dtsTicket',
+                               'table': 'tickets' } )
+
+    self.__ticket = serial = 
datasource.triggerExtensions.getSequence('pos_ticket_id_seq')
+
+    self.dispatchEvent('BeginTicket', serial=serial)
+
+
+  def _EndTicket(self, event):
+
+    # Insert the ticket
+    ts = self._createResultSet('pos_tickets', ('id','clerk','station',
+                                                'tax_exemption','subtotal',
+                                                'tax','total'))
+    tr = ts.insertRecord()
+    tr['id'] = self.__ticket
+    tr['clerk'] = self._login
+    tr['station'] = self.instance.registername
+    tr['tax_exemption'] = self.__taxExempt
+    tr['subtotal'] = self.__totals['subtotal']
+    tr['tax'] = self.__totals['tax']
+    tr['total'] = self.__totals['total']
+
+
+    # Then the items...
+    irs = self._createResultSet('pos_ticket_items', ('ticket_id','quantity',
+                                                    'manual_item','department',
+                                                    'sku','description',
+                                                    
'base_amount','unit_amount',
+                                                    'amount','taxable'))
+    for item in self.__items.values():
+      ir = irs.insertRecord()
+      ir['ticket_id'] = self.__ticket
+      ir['quantity'] = item.quantity
+      ir['manual_item'] = len(item.sku) <= 3 and 'Y' or 'N'
+      ir['department'] = item.department
+      ir['sku'] = item.sku
+      ir['description'] = item.description
+      ir['base_amount'] = item.base
+      ir['unit_amount'] = item.each
+      ir['amount'] = item.extended
+      ir['taxable'] = item.taxable and 'Y' or 'N'
+      try:
+        ir['dealer'] = self.__dealermap[item.sku]
+      except KeyError:
+        pass
+
+    # and the payments...
+    trs = self._createResultSet('pos_ticket_payments', 
('ticket_id','payment_type',
+                                                    
'payment_amount','approval_code'))
+    for tender in self.__tenders:
+      tr = trs.insertRecord()
+      tr['ticket_id'] = self.__ticket
+      tr['payment_type'] = tender.type
+      tr['payment_amount'] = tender.amount
+      try:
+        tr['approval_code'] = tender.extra
+      except:
+        pass
+
+    ts.post()
+    irs.post()
+    trs.post()
+    ts._dataObject.commit()
+
+    self.__ticket = 0
+
+
+  def _UpdateTotal(self, event):
+    self.__totals[event.field] = event.amount
+
+
+  def _CancelTicket(self, event):
+    self.__ticket = 0
+
+
+  def _BeginTicket(self, event):
+    self.__layaway = 0
+    self.__items = {}
+    self.__totals = {}
+    self.__tenders = []
+    self.__taxExempt = None
+
+  def _BeginLayaway(self, event):
+    self.__layaway = 1
+
+  def _TaxExemptionEntered(self, event):
+    if event.value:
+      self.__taxExempt = event.value
+    else:
+      self.__taxExempt = None
+
+  def _AddDiscount(self, event):
+    pass
+
+  def _AddTender(self, event):
+    self.__tenders.append(event)
+
+  def _AddTicketItem(self, event):
+    self.__items[event.lineitem] = event
+
+  def _CancelTicketItem(self, event):
+    del self.items[event.lineitem]
+
+
+  def _GetFooter(self, event):
+    i = randint(0, len(_FooterChoices)-1)
+    print "Quote #%s" % i
+    event.setResult(_FooterChoices[i])
+
+
+_FooterChoices = (
+"""\
+Did you know?  Old Towne Market has
+a professional portrait studio. Let
+us take your next family portrait,
+senior picture, or holiday photo.""",
+"""\
+Old Towne Market has something for
+everyone! From antiques, artwork,
+reproductions, and pottery, to
+children's clothing and glassware.""",
+"""\
+Add Old Towne Market to your
+shopping list this coming holiday
+season. We offer gift certificates
+for your convenience.""",
+"""\
+Old Towne Market now carries
+Peter's Pottery. Ask about our
+custom orders.""",
+"""\
+Know a special little girl with
+an upcoming birthday? Old Towne
+Market now hosts tea parties!"""
+)
+
+
+





reply via email to

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