def BuildChooser(self, samdb): try: self.purchasedItemNumberList = \ self.chooserLists.buildChooserNumberList \ ('purchase', samdb) wx.StaticText(self.chooserPanel, -1, \ "Select an item number:", (15,5)) self.purchasedItemNumberChoice = wx.Choice(self.chooserPanel, \ -1, (195, 0), \ wx.DefaultSize, \ self.purchasedItemNumberList, \ wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_CHOICE, self.OnPurchasedItemNumberChoice, \ self.purchasedItemNumberChoice) self.purchasedItemDescriptionList = \ self.chooserLists.buildChooserNumberAndInfoList \ ('purchase', samdb) wx.StaticText(self.chooserPanel, -1, \ "Select an item description:", (15,40)) self.purchasedItemDescriptionChoice = \ wx.Choice(self.chooserPanel, -1, (195, 40), \ wx.DefaultSize, \ self.purchasedItemDescriptionList, \ wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_CHOICE, self.OnPurchasedItemDescriptionChoice, \ self.purchasedItemDescriptionChoice) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def BuildChooser(self, samdb): try: self.buyerNumberList = self.chooserLists.buildChooserNumberList \ ('buyer', samdb) wx.StaticText(self.chooserPanel, -1, \ "Select a buyer number:", (15,5)) self.buyerNumberChoice = wx.Choice(self.chooserPanel, \ -1, (175, 0), \ wx.DefaultSize, self.buyerNumberList, \ wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_CHOICE, self.OnBuyerNumberChoice, \ self.buyerNumberChoice) self.buyerNameList = \ self.chooserLists.buildChooserNumberAndInfoList('buyer', samdb) wx.StaticText(self.chooserPanel, -1, \ "Select a buyer name:", (15,40)) self.buyerNameChoice = wx.Choice(self.chooserPanel, \ -1, (175, 40), \ wx.DefaultSize, self.buyerNameList, \ wx.CB_DROPDOWN | wx.CB_READONLY) self.Bind(wx.EVT_CHOICE, self.OnBuyerNameChoice, \ self.buyerNameChoice) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def populateForm(self, samdb, donorNumber): self.donorNumber = donorNumber try: row = self.donors.fetchDonor(samdb, donorNumber) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def OnItemNumberChoice(self, event): indexToDelete = event.GetSelection() itemNumber = event.GetString() if dialogs.displayYesNoDialog('Delete item number ' + \ itemNumber + '?'): try: buyerNumber = self.items.checkItemHasBuyer \ (itemNumber, self.samdb) # If the item hasn't been purchased, # then the buyerNumber is None if buyerNumber is not None: dialogs.displayErrorDialog \ ('This item has been purchased by ' \ + 'buyer number ' + buyerNumber + '.') return else: self.items.deleteItem(self.samdb, itemNumber) self.itemNumberList.pop(indexToDelete) self.itemNumberChoice.SetItems(self.itemNumberList) indexToDelete = \ self.FindItemNumberInItemDescriptionList(itemNumber) self.itemDescriptionList.pop(indexToDelete) self.itemDescriptionChoice.SetItems \ (self.itemDescriptionList) self.con.displayItems(self.samdb) return except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning ", e)
def OnBuyerNameChoice(self, event): indexToDelete = event.GetSelection() buyerString = event.GetString() buyerNumber = buyerString[:3] if dialogs.displayYesNoDialog('Delete buyer number ' + \ buyerNumber + '?'): try: purchasedItems = self.buyers.getBuyersItems \ (self.samdb, buyerNumber) if len(purchasedItems) > 0: errorMessage = self.BuildErrorMessage(buyerNumber,\ purchasedItems) dialogs.displayErrorDialog(errorMessage) return else: self.buyers.DeleteBuyer(self.samdb, buyerNumber) self.buyerNameList.pop(indexToDelete) self.buyerNameChoice.SetItems(self.buyerNameList) self.buyerNumberList.remove(buyerNumber) self.buyerNumberChoice.SetItems(self.buyerNumberList) self.buyerNumberChoice.SetItems(self.buyerNumberList) self.con.displayBuyers(self.samdb) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning ", e)
def OnDonorNumberChoice(self, event): indexToDelete = event.GetSelection() donorNumber = event.GetString() if dialogs.displayYesNoDialog('Delete donor number ' + \ donorNumber + '?'): try: donatedItems = self.donors.getDonorsItems \ (donorNumber, self.samdb) if len(donatedItems) > 0: errorMessage = self.BuildErrorMessage( donorNumber, donatedItems) dialogs.displayErrorDialog(errorMessage) return else: self.donors.deleteDonor(self.samdb, donorNumber) self.donorNumberList.pop(indexToDelete) self.donorNumberChoice.SetItems(self.donorNumberList) self.DeleteDonorNumberInDonorNameList(donorNumber) self.donorNameChoice.SetItems(self.donorNameList) self.con.displayDonors(self.samdb) return except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning ", e)
def buildDonorList(self, samdb): query = "SELECT donor_Number FROM Donors ORDER BY donor_number;" try: rows = samdb.fetchRows(query) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def populateForm(self, samdb, buyerNumber): self.buyerNumber = buyerNumber try: row = self.buyers.fetchBuyer(samdb, buyerNumber) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def buildItemList(self, samdb): query = "SELECT item_Number FROM Items ORDER BY item_number;" try: rows = samdb.fetchRows(query) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def OnPurchasedItemNumberChoice(self, event): indexToDelete = event.GetSelection() purchasedItemNumber = event.GetString() try: row = self.purchases.fetchPurchase \ (self.samdb, purchasedItemNumber) buyerNumber = row[0] winningBid = str(row[1]) if not dialogs.displayYesNoDialog( 'Delete purchase:' + '\n Item number ' + purchasedItemNumber + '\n Buyer number ' + buyerNumber + '\n Winning bid ' + '$' + winningBid): return self.purchases.deletePurchase(self.samdb, purchasedItemNumber) self.purchasedItemNumberList.pop(indexToDelete) self.purchasedItemNumberChoice.SetItems \ (self.purchasedItemNumberList) indexToDelete = \ self.FindItemNumberInItemDescriptionList \ (purchasedItemNumber) self.purchasedItemDescriptionList.pop(indexToDelete) self.purchasedItemDescriptionChoice.SetItems \ (self.purchasedItemDescriptionList) self.con.displayAllPurchases(self.samdb) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def buildPurchasedItemList(self, samdb): query = "SELECT item_Number FROM Items \ WHERE item_purchasedby IS NOT NULL \ AND item_salesprice IS NOT NULL \ ORDER BY item_number;" try: rows = samdb.fetchRows(query) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def OnBuyerNumberChoice(self, event): self.buyerNumber = event.GetString() try: self.con.displayPurchases(self.samdb, self.buyerNumber) PrintOrPreviewDialog.PrintOrPreviewDialog(self, -1, \ 'Preview or Print?', self.message + self.buyerNumber + '?', self.buyerNumber, self.samdb, self.whatToPrint) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def purchaseItem(self, samdb, itemNumber, buyerNumber, salesPrice): query = "UPDATE Items SET item_purchasedby = '" + buyerNumber + \ "', item_salesprice = '" + salesPrice + \ "' WHERE item_number = '" + itemNumber + "';" samdb.executeQuery(query) if self.buyers.hasBuyerPaid(samdb, buyerNumber): self.buyers.cancelBuyerReceipt(samdb, buyerNumber) dialogs.displayErrorDialog( 'Buyer ' + buyerNumber + ' has already paid for other items.\n ' + 'Please print a new shopping cart,\n' + 'collect the proper amount,\n ' + 'and print a new receipt.')
def getProfile(): path = os.getenv('HOME') + '/.sam/profile' try: if not os.path.exists(path): dialogs.displayErrorDialog( 'There is no user profile.\nSee the Auction manager.') sys.exit() else: fp = open(path, 'r').read() profile = eval(fp) return profile except IOError as e: dialogs.displayErrorDialog('Unable to read the profile.') sys.exit()
def __init__(self): wx.Frame.__init__(self, None, -1, title="SAM: the Silent Auction Manager", size=(700, 450)) #self.manePanel = pnl = wx.Panel(self) self.CreateStatusBar() fileMenu = wx.Menu() exitItem = fileMenu.Append(-1, "Exit the program") self.Bind(wx.EVT_MENU, self.onExit, exitItem) aboutMenu = wx.Menu() aboutItem = aboutMenu.Append(-1, "About SAM") self.Bind(wx.EVT_MENU, self.OnAboutDialog, aboutItem) menuBar = wx.MenuBar() menuBar.Append(fileMenu, "File") menuBar.Append(aboutMenu, "About") self.SetMenuBar(menuBar) # Connect to the database connected = False while not connected: connectDialog = connectdialog.ConnectDialog() result = connectDialog.ShowModal() connectDialog.Destroy() if result == wx.ID_OK: try: profile = connectDialog.getProfile() samdb = dbservices.Samdb( dbname = profile['dbName'], \ hostname = profile["hostName"], \ portnumber = int(profile['portNumber']), \ username = profile["userName"], \ password = profile["password"]) connected = True manetoolbook.manetoolbook(self, -1, samdb) except MySQLdb.Error, e: connected = False dialogs.displayErrorDialog("Error %d: %s" % (e.args[0], \ e.args[1])) if not dialogs.displayYesNoDialog("Want to try again?"): exit() else: exit()
def deletePurchase(self, samdb, itemNumber): # Who bought this item? query = 'SELECT item_purchasedby FROM Items \ WHERE item_number = ' + itemNumber + ' ; ' row = samdb.fetchRow(query) buyerNumber = row[0] # Delete the buyer for this item query = 'UPDATE Items SET item_purchasedby = NULL,' \ 'item_salesprice = NULL \ WHERE item_number = ' + itemNumber + ';' samdb.executeQuery(query) if self.buyers.hasBuyerPaid(samdb, buyerNumber): self.buyers.cancelBuyerReceipt(samdb, buyerNumber) dialogs.displayErrorDialog('Buyer ' + buyerNumber + ' has already paid for item number ' + itemNumber + '.\n ' + 'Please print a new shopping cart,\n' + 'refund the proper amount,\n ' + 'and print a new receipt.')
def onSaveButton(self, event): itemNumber = self.itemNumberTC.GetValue() if len(itemNumber) != 3 or \ regularexpression.checkItemNumber(itemNumber) is None: dialogs.displayErrorDialog( "The Item number must be a three-digit decimal number.") return description = regularexpression.escapeQuotes( self.itemDescriptionTC.GetValue()) if not (len(description) > 0): dialogs.displayErrorDialog \ ("The item description must not be null.") return donorNumber = self.donorNumberTC.GetValue() if len(donorNumber) != 3 or \ regularexpression.checkDonorNumber(donorNumber) \ is None: dialogs.displayErrorDialog \ ("The Donor number must be a three-digit decimal number.") return # Can't change the donor number to a value thats not in the database. try: if not self.donors.isValidDonorNumber(self.samdb, donorNumber): dialogs.displayErrorDialog ('Donor number ' + \ donorNumber + ' is not registered.') if self.function == 'edit': self.donorNumberTC.SetValue(self.oldDonorNumber) return except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def OnDonorNameChoice(self, event): indexToDelete = event.GetSelection() donorString = event.GetString() donorNumber = donorString[:3] if dialogs.displayYesNoDialog('Delete donor number ' + \ donorNumber + '?'): donatedItems = self.donors.getDonorsItems \ (donorNumber, self.samdb) if len(donatedItems) > 0: errorMessage = self.BuildErrorMessage(donorNumber, donatedItems) dialogs.displayErrorDialog(errorMessage) return else: self.donors.deleteDonor(self.samdb, donorNumber) self.donorNameList.pop(indexToDelete) self.donorNameChoice.SetItems(self.donorNameList) self.donorNumberList.remove(donorNumber) self.donorNumberChoice.SetItems(self.donorNumberList) self.donorNumberChoice.SetItems(self.donorNumberList) self.con.displayDonors(self.samdb) else: return
def createProfile(dbName, hostName, portNumber, \ userName, password, title, subtitle, date): profile = { 'dbName': dbName, 'hostName': hostName, 'portNumber': portNumber, 'userName': userName, 'password': password, 'title': title, 'subtitle': subtitle, 'date': date } try: homeDirectory = os.getenv('HOME') path = homeDirectory + '/.sam' if not os.path.exists(path): os.makedirs(path) with open(os.path.join(path, 'profile'), 'w') as myFile: myFile.write(str(profile)) except IOError as e: dialogs.displayErrorDialog( 'Profile.createProfile: Unable to write the profile file.') sys.exit()
def OnOKButton(self, event): hostName = self.hostNameTC.GetValue() if not (len(hostName) > 0): dialogs.displayErrorDialog("The host name must not be null.") return portNumber = self.portNumberTC.GetValue() userName = self.userNameTC.GetValue() if not (len(userName) > 0): dialogs.displayErrorDialog("The user name must not be null.") return password = self.passwordTC.GetValue() dbName = self.dbNameTC.GetValue() if not (len(dbName) > 0): dialogs.displayErrorDialog("The database name must not be null.") return title = self.titleTC.GetValue() subtitle = self.subtitleTC.GetValue() date = self.dateTC.GetValue() print hostName, portNumber, userName, password, dbName, \ title, subtitle, date createauction.createAuction(hostName, portNumber, userName, password, \ dbName, title, subtitle, date) dialogs.displayInfoDialog("The auction was created successfully.") # Now write the profile to the user's directory profileservices.createProfile(dbName, hostName, portNumber, userName, password, title, subtitle, date) sys.exit()
except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning: ", e) retailPrice = self.retailPriceTC.GetValue() if regularexpression.checkMoney(retailPrice) == False: dialogs.displayErrorDialog \ ("The retail price must be a decimal number.") return minimumBid = self.minimumBidTC.GetValue() if constants.REQUIREITEMMINIMUMBID: if len(minimumBid) == 0: dialogs.displayErrorDialog("The minimum bid must not be null.") return elif regularexpression.checkMoney(minimumBid) == False: dialogs.displayErrorDialog \ ("The minimum bid must be a decimal number.") return elif len(minimumBid) > 0: if regularexpression.checkMoney(minimumBid) == False: dialogs.displayErrorDialog \ ("The minimum bid must be a decimal number.") return increment = self.incrementTC.GetValue() if constants.REQUIREITEMINCREMENT: if len(increment) == 0: dialogs.displayErrorDialog("The increment must not be null.")
def onSaveButton(self, event): buyerNumber = self.buyerNumberTC.GetValue() if len(buyerNumber) != 3 or \ regularexpression.checkBuyerNumber(buyerNumber) is None: dialogs.displayErrorDialog( "The buyer number must be a three-digit decimal number.") return lastName = regularexpression.escapeQuotes(self.lastNameTC.GetValue()) if not (len(lastName) > 0): dialogs.displayErrorDialog \ ("The buyer's last name must not be null.") return firstName = regularexpression.escapeQuotes(self.firstNameTC.GetValue()) if not (len(firstName) > 0): dialogs.displayErrorDialog \ ("The buyer's first name must not be null.") return street = regularexpression.escapeQuotes(self.streetTC.GetValue()) if ((len(street) == 0) and (constants.REQUIREBUYERADDRESS)): dialogs.displayErrorDialog("The street name must not be null.") return city = regularexpression.escapeQuotes(self.cityStateZipTC.GetValue()) if ((len(city) == 0) and (constants.REQUIREBUYERADDRESS)): dialogs.displayErrorDialog("The city name must not be null.") return telno = self.telnoTC.GetValue() if constants.REQUIREBUYERTELNO: if len(telno) == 0: dialogs.displayErrorDialog( "The telephone number must not be null.") return elif len(telno) != 12 \ or regularexpression.checkTelno(telno) is None: dialogs.displayErrorDialog( "The telephone number must be in the format XXX-XXX-XXXX.") return elif len(telno) > 0: if len(telno) != 12 or regularexpression.checkTelno(telno) is None: dialogs.displayErrorDialog( "The telephone number must be in the format XXX-XXX-XXXX.") return if self.function == 'add': try: self.buyers.addBuyer(self.samdb, buyerNumber, lastName, \ firstName, street, city, telno) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning: ", e)
def __init__(self): wx.Dialog.__init__(self, None, -1, "Connect to Samdb") # Create the text controls about = wx.StaticText(self, -1, about_txt) host_l = wx.StaticText(self, -1, "Host:") port_l = wx.StaticText(self, -1, "Port:") user_l = wx.StaticText(self, -1, "User:"******"Password:"******"hostName")) port_t = wx.TextCtrl\ (self, validator=DataXferValidator(self.profile, "portNumber")) user_t = wx.TextCtrl\ (self, validator=DataXferValidator(self.profile, "userName")) passwd_t = wx.TextCtrl\ (self, style=wx.TE_PASSWORD, \ validator=DataXferValidator(self.profile, "password")) dbname_t = wx.TextCtrl\ (self, validator=DataXferValidator(self.profile, "dbName")) # Use standard button IDs okayButton = wx.Button(self, wx.ID_OK) okayButton.SetDefault() # I'm using "cancel" as "exit". exitButton = wx.Button(self, wx.ID_CANCEL, 'Exit') # Layout with sizers sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(about, 0, wx.ALL, 5) sizer.Add(wx.StaticLine(self), 0, wx.EXPAND | wx.ALL, 5) fgs = wx.FlexGridSizer(5, 2, 5, 5) fgs.Add(host_l, 0, wx.ALIGN_RIGHT) fgs.Add(host_t, 0, wx.EXPAND) fgs.Add(port_l, 0, wx.ALIGN_RIGHT) fgs.Add(port_t, 0, wx.EXPAND) fgs.Add(user_l, 0, wx.ALIGN_RIGHT) fgs.Add(user_t, 0, wx.EXPAND) fgs.Add(passwd_l, 0, wx.ALIGN_RIGHT) fgs.Add(passwd_t, 0, wx.EXPAND) fgs.Add(dbname_l, 0, wx.ALIGN_RIGHT) fgs.Add(dbname_t, 0, wx.EXPAND) fgs.AddGrowableCol(1) sizer.Add(fgs, 0, wx.EXPAND | wx.ALL, 5) btns = wx.StdDialogButtonSizer() btns.AddButton(okayButton) btns.AddButton(exitButton) btns.Realize() sizer.Add(btns, 0, wx.EXPAND | wx.ALL, 5) self.SetSizer(sizer) sizer.Fit(self)
def populatePurchaseForm(self, samdb, itemNumber): try: row = self.purchases.fetchPurchase(samdb, itemNumber) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
def onSaveButton(self, event): try: itemNumber = self.itemNumberTC.GetValue() if len(itemNumber) != 3 or \ regularexpression.checkItemNumber(itemNumber) is None: dialogs.displayErrorDialog( "The Item number must be a three-digit decimal number.") return ## Can't add or change the item number to a value ## not in the database. if not self.items.isValidItemNumber(self.samdb, itemNumber): dialogs.displayErrorDialog ('Item number ' + \ itemNumber + ' is not registered.') if self.function == 'edit': self.itemNumberTC.SetValue(self.oldItemNumber) return buyerNumber = self.buyerNumberTC.GetValue() if len(buyerNumber) != 3 or \ regularexpression.checkBuyerNumber(buyerNumber) \ is None: dialogs.displayErrorDialog \ ("The buyer number must be a three-digit decimal number.") return # Can't change buyer number to a value thats not in the database. if not self.buyers.isValidBuyerNumber(self.samdb, buyerNumber): dialogs.displayErrorDialog ('Buyer number ' + \ buyerNumber + ' is not registered.') if self.function == 'edit': self.buyerNumberTC.SetValue(self.oldBuyerNumber) return ### ENSURE THAT THE SAME ITEM CANt BE PURCHASED BY TWO BUYERS!!! if self.function == 'add': otherBuyerNumber = self.items.checkItemHasBuyer \ (itemNumber, self.samdb) if otherBuyerNumber is not None: dialogs.displayErrorDialog ('Item number ' + itemNumber + \ ' has already been purchased by buyer ' + \ otherBuyerNumber) self.itemNumberTC.Clear() return ''' Don't know why this is here elif self.function == 'edit': self.buyerNumberTC.SetValue(self.oldBuyerNumber) ''' winningBid = self.winningBidTC.GetValue() if len(winningBid) == 0 or \ regularexpression.checkMoney(winningBid) == False: dialogs.displayErrorDialog \ ("The winning bid must be a decimal number "\ + "greater than zero.") return ''' Now that all the data are valid, we can do the most straightforward task, which is to purchase the item. ''' if self.function == 'add': self.purchases.purchaseItem(self.samdb, itemNumber, \ buyerNumber, winningBid) self.clearAll() return ## It's a bit trickier for editing because we can't change ## the item number to a nonexistent value (already chaecked) ## or to the number of an item already purchased if self.function == 'edit': if not itemNumber == self.oldItemNumber: ## if new item number is registered and not purchased, ## then it's okay to change to new item number if self.purchases.hasBeenPurchased \ (self.samdb, itemNumber): dialogs.displayErrorDialog \ ('Item number ' + itemNumber + \ ' has already been purchased.') self.itemNumberTC = self.oldItemNumber return if not dialogs.displayYesNoDialog( 'Change purchase to ' + '\n Item number ' + itemNumber + '\n Buyer number ' + buyerNumber + '\n Winning bid ' + '$' + winningBid): self.clearAll() return if self.function == 'edit' and \ itemNumber == self.oldItemNumber: self.purchases.purchaseItem(self.samdb, itemNumber, \ buyerNumber, winningBid) else: ### Item number changes so delete, add, and update chooser self.purchases.deletePurchase(self.samdb, self.oldItemNumber) self.purchases.purchaseItem(self.samdb, itemNumber, \ buyerNumber, winningBid) self.parent.buildPurchasedItemChooser(self.samdb) # Write all fields for the affected item number. self.clearAll() self.con.displayAllPurchases(self.samdb) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return
if self.function == 'add': try: self.donors.addDonor(self.samdb, donorNumber, name, street, city, contact, telno, email) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning: ", e) else: try: self.donors.updateDonor(self.samdb, donorNumber, name, street, city, contact, telno, email) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning: ", e) self.clearAll() self.con.displayDonors(self.samdb) def populateForm(self, samdb, donorNumber): self.donorNumber = donorNumber try: row = self.donors.fetchDonor(samdb, donorNumber) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e:
def onSaveButton(self, event): donorNumber = self.donorNumberTC.GetValue() if len(donorNumber) != 3 or \ regularexpression.checkDonorNumber(donorNumber) is None: dialogs.displayErrorDialog( "The donor number must be a three-digit decimal number.") return name = regularexpression.escapeQuotes(self.nameTC.GetValue()) if not (len(name) > 0): dialogs.displayErrorDialog("The donor name must not be null.") return street = regularexpression.escapeQuotes(self.streetTC.GetValue()) if ((len(street) == 0) and (constants.REQUIREDONORADDRESS)): dialogs.displayErrorDialog("The street name must not be null.") return city = regularexpression.escapeQuotes(self.cityStateZipTC.GetValue()) if ((len(city) == 0) and (constants.REQUIREDONORADDRESS)): dialogs.displayErrorDialog("The city name must not be null.") return contact = regularexpression.escapeQuotes(self.contactTC.GetValue()) if not (len(contact) > 0): dialogs.displayErrorDialog("The contact name must not be null.") return telno = self.telnoTC.GetValue() if constants.REQUIREDONORTELNO: if len(telno) == 0: dialogs.displayErrorDialog( "The telephone number must not be null.") return elif len(telno) != 12 \ or regularexpression.checkTelno(telno) is None: dialogs.displayErrorDialog( "The telephone number must be in the format XXX-XXX-XXXX.") return elif len(telno) > 0: if len(telno) != 12 or regularexpression.checkTelno(telno) is None: dialogs.displayErrorDialog( "The telephone number must be in the format XXX-XXX-XXXX.") return email = self.emailTC.GetValue() if ((len(street) == 0) and (constants.REQUIREDONOREMAIL)): dialogs.displayErrorDialog("The e-mail address must not be null.") return if self.function == 'add': try: self.donors.addDonor(self.samdb, donorNumber, name, street, city, contact, telno, email) except MySQLdb.Error, e: dialogs.displayErrorDialog(e.args[1]) return except MySQLdb.Warning, e: print("Warning: ", e)