48 |
LOGIN_COLOR = wxColour(255,220,220) |
LOGIN_COLOR = wxColour(255,220,220) |
49 |
LOGIN_EVENTS = ('LoginEntered','PasswordEntered') |
LOGIN_EVENTS = ('LoginEntered','PasswordEntered') |
50 |
SPECIAL_COLOR = wxColour(220,255,220) |
SPECIAL_COLOR = wxColour(220,255,220) |
51 |
SPECIAL_EVENTS = ('TaxExemptionEntered',) |
SPECIAL_EVENTS = ('TaxExemptionEntered','CancelItemEntered', 'QuantityEntered') |
52 |
|
|
53 |
|
|
54 |
class Driver(BaseDriver): |
class Driver(BaseDriver): |
58 |
('total',_('Total')), |
('total',_('Total')), |
59 |
('balance',_('Balance')) ) |
('balance',_('Balance')) ) |
60 |
|
|
61 |
self.receiptColumns = ( ('department',_('Dept'), '%s', 0), |
self.receiptColumns = ( ('lineitem',_('#'), '%s', 1, 1), |
62 |
('sku',_('Code'), '%s', 0), |
('department',_('Dept'), '%s', 0, 0), |
63 |
('quantity',_('Units'), '%s', 0), |
('sku',_('Code'), '%s', 0, 0), |
64 |
('description',_('Description'), '%s', 0), |
('quantity',_('Units'), '%s', 0, 0), |
65 |
('base',_('Base Price'), dollarFormat, 1), |
('description',_('Description'), '%s', 0, 0), |
66 |
('each',_('Price/Unit'), dollarFormat, 1), |
('base',_('Base Price'), dollarFormat, 1, 0), |
67 |
('extended',_('Extended'), dollarFormat, 1), |
('each',_('Price/Unit'), dollarFormat, 1, 0), |
68 |
('taxable','T', '%s', 0) ) |
('extended',_('Extended'), dollarFormat, 1, 0), |
69 |
|
('taxable',_('Tax?'), 'bool', 0, 1) ) |
70 |
|
|
71 |
self.totalFieldMapping = {} |
self.totalFieldMapping = {} |
72 |
|
|
74 |
|
|
75 |
self.registerEventListeners( { |
self.registerEventListeners( { |
76 |
'Prompt': self._Prompt, |
'Prompt': self._Prompt, |
77 |
|
'EmployeeLogin': self._EmployeeLogin, |
78 |
'BeginTicket': self._BeginTicket, |
'BeginTicket': self._BeginTicket, |
79 |
'EndTicket': self._EndTicket, |
'EndTicket': self._EndTicket, |
80 |
'AddTicketItem': self._AddTicketItem, |
'AddTicketItem': self._AddTicketItem, |
104 |
self.inputField.SetBackgroundColour(BASE_COLOR) |
self.inputField.SetBackgroundColour(BASE_COLOR) |
105 |
|
|
106 |
try: |
try: |
107 |
default = event.default |
default = str(event.default) |
108 |
except: |
except: |
109 |
default = "" |
default = "" |
110 |
|
|
132 |
|
|
133 |
# And set each column |
# And set each column |
134 |
j = 0 |
j = 0 |
135 |
for field, foo, format, bar in self.receiptColumns: |
for field, foo, format, bar, none in self.receiptColumns: |
136 |
try: |
try: |
137 |
self.receiptList.SetStringItem(i, j, format % event.__dict__[field]) |
v = event.__dict__[field] |
138 |
|
if format == 'bool': |
139 |
|
format = '%s' |
140 |
|
v = v and 'Yes' or 'No' |
141 |
|
self.receiptList.SetStringItem(i, j, format % v) |
142 |
except KeyError: |
except KeyError: |
143 |
pass |
pass |
144 |
j += 1 |
j += 1 |
160 |
EVT_SIZE(frame, self.__OnSize) |
EVT_SIZE(frame, self.__OnSize) |
161 |
|
|
162 |
self.statusbar = frame.CreateStatusBar(3) |
self.statusbar = frame.CreateStatusBar(3) |
163 |
self.statusbar.SetStatusText ('Clerk: 100 (Jason)', STATUS_USER) |
self.statusbar.SetStatusText ('Not Logged In', STATUS_USER) |
164 |
|
|
165 |
topPanel = wxPanel(frame, -1) |
topPanel = wxPanel(frame, -1) |
166 |
topSizer = wxBoxSizer(wxHORIZONTAL) |
topSizer = wxBoxSizer(wxHORIZONTAL) |
177 |
|
|
178 |
# Add the columns for our receipt list |
# Add the columns for our receipt list |
179 |
i = 0 |
i = 0 |
180 |
for field, description, format, rightJustify in self.receiptColumns: |
for field, description, format, rightJustify, small in self.receiptColumns: |
181 |
self.receiptList.InsertColumn(i, description, |
self.receiptList.InsertColumn(i, description, |
182 |
format = wxLIST_FORMAT_RIGHT and rightJustify or wxLIST_FORMAT_LEFT) |
format = wxLIST_FORMAT_RIGHT and rightJustify or wxLIST_FORMAT_LEFT) |
183 |
|
if small: |
184 |
|
self.receiptList.SetColumnWidth(i, self.receiptList.GetColumnWidth(i)/2) |
185 |
|
|
186 |
i += 1 |
i += 1 |
187 |
|
|
188 |
totalPanel2 = wxPanel(bottomPanel, -1, style=wxRAISED_BORDER) |
totalPanel2 = wxPanel(bottomPanel, -1, style=wxRAISED_BORDER) |
243 |
self.__intext = 1 |
self.__intext = 1 |
244 |
EVT_CHAR(self.inputField, self.__ontext) |
EVT_CHAR(self.inputField, self.__ontext) |
245 |
|
|
246 |
|
|
247 |
|
def _EmployeeLogin(self, event): |
248 |
|
self.statusbar.SetStatusText ('Clerk: %s (%s)' % (event.name, event.login), STATUS_USER) |
249 |
|
|
250 |
|
|
251 |
def __OnSize(self, event): |
def __OnSize(self, event): |
252 |
self.frame.Layout() |
self.frame.Layout() |
253 |
w = self.receiptList.GetClientSizeTuple()[0] |
w = self.receiptList.GetClientSizeTuple()[0] |
271 |
self.inputField.Clear() |
self.inputField.Clear() |
272 |
elif _specialKeys.has_key(key) and _specialKeys[key] in self.__endingEvents: |
elif _specialKeys.has_key(key) and _specialKeys[key] in self.__endingEvents: |
273 |
self.dispatchEvent(self.__event, value=self.inputField.GetValue(), next=_specialKeys[key]) |
self.dispatchEvent(self.__event, value=self.inputField.GetValue(), next=_specialKeys[key]) |
274 |
|
elif self.__event == 'CancelItemEntered' and key in (WXK_UP, WXK_DOWN): |
275 |
|
c = self.receiptList.GetItemCount() |
276 |
|
for r in range(c): |
277 |
|
if self.receiptList.GetItemState(r,wxLIST_STATE_SELECTED): |
278 |
|
break |
279 |
|
|
280 |
|
st = "" |
281 |
|
self.receiptList.SetItemState(r,0,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED) |
282 |
|
if key == WXK_UP: |
283 |
|
if r > 0: |
284 |
|
st = "%d" % (r) |
285 |
|
else: |
286 |
|
st = "1" |
287 |
|
elif key == WXK_DOWN: |
288 |
|
if r < c - 1: |
289 |
|
st = "%d" % (r + 2) |
290 |
|
else: |
291 |
|
st = "%d" % (c) |
292 |
|
if len(st): |
293 |
|
self.inputField.SetValue(st) |
294 |
|
self.inputField.SetSelection(0, len(st)) |
295 |
|
self.receiptList.SetItemState(int(st)-1,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED) |
296 |
|
|
297 |
else: |
else: |
298 |
event.Skip() |
event.Skip() |
299 |
|
|
300 |
def __ontext(self, event): |
def __ontext(self, event): |
301 |
if event.GetKeyCode() != 32: |
key = event.GetKeyCode() |
302 |
|
if key != 32: |
303 |
wxCallAfter(self.__fixtext) |
wxCallAfter(self.__fixtext) |
304 |
event.Skip() |
event.Skip() |
305 |
|
|
306 |
|
|
307 |
def __fixtext(self): |
def __fixtext(self): |
308 |
ip = self.inputField.GetInsertionPoint() |
ip = self.inputField.GetInsertionPoint() |
309 |
self.inputField.SetValue(string.capwords(self.inputField.GetValue())) |
self.inputField.SetValue(string.capwords(self.inputField.GetValue())) |
311 |
|
|
312 |
|
|
313 |
_specialKeys = { |
_specialKeys = { |
314 |
|
WXK_F12: 'RequestTaxExemption', |
315 |
|
|
316 |
WXK_MULTIPLY: 'RequestQuantity', |
WXK_MULTIPLY: 'RequestQuantity', |
317 |
WXK_DIVIDE: 'RequestTender', |
WXK_DIVIDE: 'RequestCancelItem', |
318 |
WXK_SUBTRACT: 'RequestCancelLastItem', |
WXK_SUBTRACT: 'RequestCancelLastItem', |
319 |
WXK_ADD: 'RequestDuplicateLastItem', |
WXK_ADD: 'RequestDuplicateLastItem', |
320 |
WXK_F12: 'RequestTaxExemption', |
|
321 |
|
# Grrrrr.... WX's keymaps above don't seem to be right |
322 |
|
391: 'RequestQuantity', |
323 |
|
396: 'RequestCancelItem', |
324 |
|
394: 'RequestCancelLastItem', |
325 |
|
392: 'RequestDuplicateLastItem', |
326 |
|
|
327 |
|
|
328 |
} |
} |
329 |
|
|