38 |
def __init__(self, client): |
def __init__(self, client): |
39 |
events.EventAware.__init__(self, client) |
events.EventAware.__init__(self, client) |
40 |
|
|
41 |
self.__ManualItemSKUisDepartment = gConfig('ManualItemSKUisDepartment') |
self._ManualItemSKUisDepartment = gConfig('ManualItemSKUisDepartment') |
42 |
self.__ManualItemRequestBasePrice = gConfig('ManualItemRequestBasePrice') |
self._ManualItemRequestBasePrice = gConfig('ManualItemRequestBasePrice') |
43 |
self.__TaxRate = float(gConfig('TaxRate'))/100 |
self._TaxRate = float(gConfig('TaxRate'))/100 |
44 |
|
|
45 |
self.__loggedin = 0 |
self._loggedin = 0 |
46 |
self.__quantityRequestedFlag = 0 |
self._quantityRequestedFlag = 0 |
47 |
self.__ticket = 0 |
self._ticket = 0 |
48 |
self.__quantity = 1 |
self._quantity = 1 |
49 |
|
|
50 |
self.registerEventListeners( { |
self.registerEventListeners( { |
51 |
'BeginTicket': self._BeginTicket, |
'BeginTicket': self._BeginTicket, |
105 |
|
|
106 |
|
|
107 |
def _LoginEntered(self, event): |
def _LoginEntered(self, event): |
108 |
self.__login = event.value |
self._login = event.value |
109 |
self.dispatchEvent('RequestPassword') |
self.dispatchEvent('RequestPassword') |
110 |
|
|
111 |
def _RequestPassword(self, event): |
def _RequestPassword(self, event): |
115 |
response="PasswordEntered") |
response="PasswordEntered") |
116 |
|
|
117 |
def _PasswordEntered(self, event): |
def _PasswordEntered(self, event): |
118 |
rs = self.dispatchEvent('VerifyLogin', login=self.__login, password=event.value) |
rs = self.dispatchEvent('VerifyLogin', login=self._login, password=event.value) |
119 |
if rs: |
if rs: |
120 |
self.dispatchEvent('RequestLogin') |
self.dispatchEvent('RequestLogin') |
121 |
return |
return |
122 |
self.__loggedin = 1 |
self._loggedin = 1 |
123 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
124 |
|
|
125 |
|
|
129 |
|
|
130 |
if event.next == 'RequestQuantity': |
if event.next == 'RequestQuantity': |
131 |
rs = 0 |
rs = 0 |
132 |
if not self.__ticket: |
if not self._ticket: |
133 |
self.dispatchEvent('RequestBeginTicket') |
self.dispatchEvent('RequestBeginTicket') |
134 |
self.dispatchEvent('RequestQuantity') |
self.dispatchEvent('RequestQuantity') |
135 |
|
|
136 |
elif event.value: |
elif event.value: |
137 |
if not self.__ticket: |
if not self._ticket: |
138 |
self.dispatchEvent('RequestBeginTicket') |
self.dispatchEvent('RequestBeginTicket') |
139 |
rs = self.dispatchEvent('ProcessSKU', sku=event.value, origEvent=event, quantity=self.__quantity) |
rs = self.dispatchEvent('ProcessSKU', sku=event.value, origEvent=event, quantity=self._quantity) |
140 |
else: |
else: |
141 |
if not self.__ticket and event.next in ('RequestTaxExemption',): |
if not self._ticket and event.next in ('RequestTaxExemption',): |
142 |
self.dispatchEvent('RequestBeginTicket') |
self.dispatchEvent('RequestBeginTicket') |
143 |
|
|
144 |
rs = 1 |
rs = 1 |
152 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
153 |
|
|
154 |
try: |
try: |
155 |
self.__quantity = float(event.value) |
self._quantity = float(event.value) |
156 |
if self.__quantity < 0: |
if self._quantity < 0: |
157 |
raise ValueError |
raise ValueError |
158 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
159 |
except ValueError: |
except ValueError: |
166 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
167 |
return |
return |
168 |
v = int(event.value) - 1 |
v = int(event.value) - 1 |
169 |
if v >= len(self.__items): |
if v >= len(self._items): |
170 |
self.dispatchEvent('RequestCancelItem') |
self.dispatchEvent('RequestCancelItem') |
171 |
elif not hasattr(self.__items[v],'CANCELED'): |
elif not hasattr(self._items[v],'CANCELED'): |
172 |
attrs = {} |
attrs = {} |
173 |
for attr, value in event.__dict__.items(): |
for attr, value in event.__dict__.items(): |
174 |
if attr[0] != '_' and type(value) != types.MethodType: |
if attr[0] != '_' and type(value) != types.MethodType: |
175 |
attrs[attr] = value |
attrs[attr] = value |
176 |
attrs['origlineitem'] = v + 1 |
attrs['origlineitem'] = v + 1 |
177 |
attrs['lineitem'] = len(self.__items) |
attrs['lineitem'] = len(self._items) |
178 |
attrs['extended'] *= -1 |
attrs['extended'] *= -1 |
179 |
attrs['each'] *= -1 |
attrs['each'] *= -1 |
180 |
self.__items[v].CANCELED = 1 |
self._items[v].CANCELED = 1 |
181 |
self.dispatchEvent('CancelItem', **attrs) |
self.dispatchEvent('CancelItem', **attrs) |
182 |
|
|
183 |
|
|
184 |
def _BeginManualItem(self, event): |
def _BeginManualItem(self, event): |
185 |
self.__manualSKU = event.sku |
self._manualSKU = event.sku |
186 |
if self.__ManualItemSKUisDepartment: |
if self._ManualItemSKUisDepartment: |
187 |
self.__manualDepartment = event.sku |
self._manualDepartment = event.sku |
188 |
self.__manualEvents = ['RequestManualDescription'] |
self._manualEvents = ['RequestManualDescription'] |
189 |
else: |
else: |
190 |
self.__manualEvents = ['RequestManualDepartment','RequestManualDescription'] |
self._manualEvents = ['RequestManualDepartment','RequestManualDescription'] |
191 |
|
|
192 |
if self.__ManualItemRequestBasePrice: |
if self._ManualItemRequestBasePrice: |
193 |
self.__manualEvents += ['RequestManualBasePrice','RequestManualPrice'] |
self._manualEvents += ['RequestManualBasePrice','RequestManualPrice'] |
194 |
self.__manualBasePrice = 0 |
self._manualBasePrice = 0 |
195 |
else: |
else: |
196 |
self.__manualEvents += ['RequestManualPrice'] |
self._manualEvents += ['RequestManualPrice'] |
197 |
|
|
198 |
self.__manualEvents.append('RequestEndManualItem') |
self._manualEvents.append('RequestEndManualItem') |
199 |
|
|
200 |
event.dispatchAfter(self.__manualEvents.pop(0)) |
event.dispatchAfter(self._manualEvents.pop(0)) |
201 |
|
|
202 |
def _ManualDepartmentEntered(self, event): |
def _ManualDepartmentEntered(self, event): |
203 |
if not len(event.value): |
if not len(event.value): |
204 |
self.dispatchEvent('Warning',message='Department must be entered') |
self.dispatchEvent('Warning',message='Department must be entered') |
205 |
self.dispatchEvent('RequestManualDepartment') |
self.dispatchEvent('RequestManualDepartment') |
206 |
return |
return |
207 |
self.__manualDepartment = event.value |
self._manualDepartment = event.value |
208 |
self.dispatchEvent(self.__manualEvents.pop(0)) |
self.dispatchEvent(self._manualEvents.pop(0)) |
209 |
|
|
210 |
def _ManualDescriptionEntered(self, event): |
def _ManualDescriptionEntered(self, event): |
211 |
if not len(event.value): |
if not len(event.value): |
212 |
self.dispatchEvent('Warning',message='Description must be entered') |
self.dispatchEvent('Warning',message='Description must be entered') |
213 |
self.dispatchEvent('RequestManualDescription') |
self.dispatchEvent('RequestManualDescription') |
214 |
return |
return |
215 |
self.__manualDescription = event.value |
self._manualDescription = event.value |
216 |
self.dispatchEvent(self.__manualEvents.pop(0)) |
self.dispatchEvent(self._manualEvents.pop(0)) |
217 |
|
|
218 |
def _ManualBasePriceEntered(self, event): |
def _ManualBasePriceEntered(self, event): |
219 |
try: |
try: |
220 |
self.__manualBasePrice = float(event.value) |
self._manualBasePrice = float(event.value) |
221 |
if self.__manualBasePrice < 0: |
if self._manualBasePrice < 0: |
222 |
raise ValueError |
raise ValueError |
223 |
except ValueError: |
except ValueError: |
224 |
self.dispatchEvent('Warning',message='Base price must be entered') |
self.dispatchEvent('Warning',message='Base price must be entered') |
225 |
self.dispatchEvent('RequestManualBasePrice') |
self.dispatchEvent('RequestManualBasePrice') |
226 |
return |
return |
227 |
|
|
228 |
v = self.__manualEvents.pop(0) |
v = self._manualEvents.pop(0) |
229 |
if v == 'RequestManualPrice': |
if v == 'RequestManualPrice': |
230 |
self.dispatchEvent(v, default=self.__manualBasePrice) |
self.dispatchEvent(v, default=self._manualBasePrice) |
231 |
else: |
else: |
232 |
self.dispatchEvent(v) |
self.dispatchEvent(v) |
233 |
|
|
234 |
def _ManualPriceEntered(self, event): |
def _ManualPriceEntered(self, event): |
235 |
try: |
try: |
236 |
self.__manualPrice = float(event.value) |
self._manualPrice = float(event.value) |
237 |
if self.__manualPrice < 0: |
if self._manualPrice < 0: |
238 |
raise ValueError |
raise ValueError |
239 |
except ValueError: |
except ValueError: |
240 |
self.dispatchEvent('Warning',message='Item price must be entered') |
self.dispatchEvent('Warning',message='Item price must be entered') |
241 |
self.dispatchEvent('RequestManualPrice') |
self.dispatchEvent('RequestManualPrice') |
242 |
return |
return |
243 |
|
|
244 |
self.dispatchEvent(self.__manualEvents.pop(0)) |
self.dispatchEvent(self._manualEvents.pop(0)) |
245 |
|
|
246 |
|
|
247 |
def _RequestBeginLayaway(self, event): |
def _RequestBeginLayaway(self, event): |
269 |
'RequestLogOut', |
'RequestLogOut', |
270 |
'RequestExit' ] |
'RequestExit' ] |
271 |
|
|
272 |
if self.__ticket: |
if self._ticket: |
273 |
endingEvents += ['RequestSuspendTicket', |
endingEvents += ['RequestSuspendTicket', |
274 |
'RequestCancelTicket', |
'RequestCancelTicket', |
275 |
'RequestTender', |
'RequestTender', |
303 |
pass |
pass |
304 |
|
|
305 |
def _RequestCancelItem(self, event): |
def _RequestCancelItem(self, event): |
306 |
self.dispatchEvent('Prompt', response='CancelItemEntered', label='Enter Line # to Cancel:', default=len(self.__items)) |
self.dispatchEvent('Prompt', response='CancelItemEntered', label='Enter Line # to Cancel:', default=len(self._items)) |
307 |
|
|
308 |
def _RequestDuplicateLastItem(self, event): |
def _RequestDuplicateLastItem(self, event): |
309 |
pass |
pass |
338 |
|
|
339 |
|
|
340 |
def _RequestEndManualItem(self, event): |
def _RequestEndManualItem(self, event): |
341 |
self.dispatchEvent('EndManualItem', sku=self.__manualSKU, |
self.dispatchEvent('EndManualItem', sku=self._manualSKU, |
342 |
description=self.__manualDescription, |
description=self._manualDescription, |
343 |
department=self.__manualDepartment, |
department=self._manualDepartment, |
344 |
baseprice=self.__manualBasePrice, |
baseprice=self._manualBasePrice, |
345 |
quantity=self.__quantity, |
quantity=self._quantity, |
346 |
price=self.__manualPrice, |
price=self._manualPrice, |
347 |
|
extended = self._quantity * self._manualPrice, |
348 |
taxable=1) |
taxable=1) |
349 |
|
|
350 |
self.dispatchEvent('AddTicketItem', department=self.__manualDepartment, |
self.dispatchEvent('AddTicketItem', department=self._manualDepartment, |
351 |
sku=self.__manualSKU, |
sku=self._manualSKU, |
352 |
quantity=self.__quantity, |
quantity=self._quantity, |
353 |
description=self.__manualDescription, |
description=self._manualDescription, |
354 |
base=self.__manualBasePrice, |
base=self._manualBasePrice, |
355 |
each=self.__manualPrice, |
each=self._manualPrice, |
356 |
extended=round(self.__manualPrice * self.__quantity,2), |
extended=round(self._manualPrice * self._quantity,2), |
357 |
taxable=1, |
taxable=1, |
358 |
lineitem=len(self.__items)+1) |
lineitem=len(self._items)) |
359 |
self.__quantity = 1 |
self._quantity = 1 |
360 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
361 |
|
|
362 |
def _BeginTicket(self, event): |
def _BeginTicket(self, event): |
363 |
self.__ticket = event.serial |
self._ticket = event.serial |
364 |
self.__taxTotal = 0 |
self._taxTotal = 0 |
365 |
self.__subTotal = 0 |
self._subTotal = 0 |
366 |
self.__payments = 0 |
self._payments = 0 |
367 |
self.__taxExempt = 0 |
self._taxExempt = 0 |
368 |
self.__layaway = 0 |
self._layaway = 0 |
369 |
self.__items = [] |
self._items = [] |
370 |
self.dispatchEvent('UpdateTotal', field="subtotal", amount=0.0) |
self.dispatchEvent('UpdateTotal', field="subtotal", amount=0.0) |
371 |
self.dispatchEvent('UpdateTotal', field="tax", amount=0.0) |
self.dispatchEvent('UpdateTotal', field="tax", amount=0.0) |
372 |
self.dispatchEvent('UpdateTotal', field="total", amount=0.0) |
self.dispatchEvent('UpdateTotal', field="total", amount=0.0) |
376 |
event.dispatchAfter('RequestSKU') |
event.dispatchAfter('RequestSKU') |
377 |
|
|
378 |
def _CancelTicket(self, event): |
def _CancelTicket(self, event): |
379 |
self.__ticket = 0 |
self._ticket = 0 |
380 |
event.dispatchAfter('RequestSKU') |
event.dispatchAfter('RequestSKU') |
381 |
|
|
382 |
def _AddTicketItem(self, event): |
def _AddTicketItem(self, event): |
383 |
self.__subTotal += event.extended |
self._subTotal += event.extended |
384 |
if event.taxable: |
if event.taxable: |
385 |
self.__taxTotal += event.extended |
self._taxTotal += event.extended |
386 |
self.__items.append(event) |
self._items.append(event) |
387 |
event.lineitem=len(self.__items)+1 |
event.lineitem=len(self._items)+1 |
388 |
self._updateTotals() |
self._updateTotals() |
389 |
|
|
390 |
def _BeginLayaway(self, event): |
def _BeginLayaway(self, event): |
391 |
self.__layaway = 1 |
self._layaway = 1 |
392 |
|
|
393 |
def _EndLayaway(self, event): |
def _EndLayaway(self, event): |
394 |
self.__layaway = 0 |
self._layaway = 0 |
395 |
self.dispatchEvent('EndTicket') |
self.dispatchEvent('EndTicket') |
396 |
|
|
397 |
def _AddTender(self, event): |
def _AddTender(self, event): |
408 |
|
|
409 |
def _TaxExemptionEntered(self, event): |
def _TaxExemptionEntered(self, event): |
410 |
if event.value: |
if event.value: |
411 |
self.__taxExempt = 1 |
self._taxExempt = 1 |
412 |
else: |
else: |
413 |
self.__taxExempt = 0 |
self._taxExempt = 0 |
414 |
self._updateTotals() |
self._updateTotals() |
415 |
self.dispatchEvent('RequestSKU') |
self.dispatchEvent('RequestSKU') |
416 |
|
|
417 |
|
|
418 |
def _updateTotals(self): |
def _updateTotals(self): |
419 |
tax = round(self.__taxTotal* self.__TaxRate,2) * (self.__taxExempt == 0) |
tax = round(self._taxTotal* self._TaxRate,2) * (self._taxExempt == 0) |
420 |
self.dispatchEvent('UpdateTotal', field="subtotal", amount=self.__subTotal) |
self.dispatchEvent('UpdateTotal', field="subtotal", amount=self._subTotal) |
421 |
self.dispatchEvent('UpdateTotal', field="tax", amount=tax) |
self.dispatchEvent('UpdateTotal', field="tax", amount=tax) |
422 |
self.dispatchEvent('UpdateTotal', field="total", amount=self.__subTotal + tax) |
self.dispatchEvent('UpdateTotal', field="total", amount=self._subTotal + tax) |
423 |
self.dispatchEvent('UpdateTotal', field="balance", amount=self.__subTotal + tax - self.__payments) |
self.dispatchEvent('UpdateTotal', field="balance", amount=self._subTotal + tax - self._payments) |
424 |
tax = round(self.__taxTotal* self.__TaxRate,2) |
tax = round(self._taxTotal* self._TaxRate,2) |
425 |
|
|
426 |
|
|