[Top][All Lists]
[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!"""
+)
+
+
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6408 - in trunk/gnue-pointofsale: . samples samples/oldtownemarket,
jcater <=