Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
 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
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
    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
Пример #11
0
    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
Пример #12
0
 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
Пример #13
0
    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.')
Пример #14
0
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()
Пример #15
0
    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()
Пример #16
0
    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.')
Пример #17
0
    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
Пример #18
0
 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
Пример #19
0
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()
Пример #20
0
    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()
Пример #21
0
        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.")
Пример #22
0
    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)
Пример #23
0
    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)
Пример #24
0
 def populatePurchaseForm(self, samdb, itemNumber):
     try:
         row = self.purchases.fetchPurchase(samdb, itemNumber)
     except MySQLdb.Error, e:
         dialogs.displayErrorDialog(e.args[1])
         return
Пример #25
0
    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
Пример #26
0
        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:
Пример #27
0
    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)