Example #1
0
    def open_connection(self):

        print("Opening Database")
        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        ok = self.connection.open_database()
        print(ok)
Example #2
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Jesus is my saviour")
        #create menu and tool bar
        self.open_database = QAction("Open Database", self)
        self.close_database = QAction("Close Database", self)
        self.find_products = QAction("Find Products", self)
        self.show_products = QAction("Show Products", self)
        #add menu to menu bar
        self.menu = QMenuBar()
        self.database_toolbar = QToolBar()
        self.database_menu = self.menu.addMenu("Database")
        self.products_toolbar = QToolBar()
        self.products_menu = self.menu.addMenu("Products")

        #add actions to menu
        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)

        self.products_menu.addAction(self.find_products)
        self.products_menu.addAction(self.show_products)
        #add actions to toolbar
        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)

        self.products_toolbar.addAction(self.find_products)
        self.products_toolbar.addAction(self.show_products)
        #add toolbar to window
        self.addToolBar(self.database_toolbar)
        self.addToolBar(self.products_toolbar)
        #add menu to toolbar
        self.setMenuBar(self.menu)
        #making connections
        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)

        self.find_products.triggered.connect(self.find_data)
        self.show_products.triggered.connect(self.display_data)

    def open_connection(self):

        print("Opening Database")
        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        ok = self.connection.open_database()
        print(ok)

    def close_connection(self):
        print("Closing Database")

    def display_data(self):
        if not hasattr(self, "display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)
        query = self.connection.find_products((1, ))
        self.display_widget.show_results(query)

    def find_data(self):
        pass
Example #3
0
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("test")
        
        self.open_database = QAction("Open Database",self)
        self.close_database = QAction("Close Database",self)
        self.find_data = QAction("Search Database",self)

        #creates the menu bar
        self.menu = QMenuBar()

        #
        self.database_toolbar = QToolBar()
        self.database_menu = self.menu.addMenu("Database")
        self.search_menu = self.menu.addMenu("Search")

        #adds actions to the menu
        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)
        self.search_menu.addAction(self.find_data)
        
        #add actions to the tool bar
        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)
        self.database_toolbar.addAction(self.find_data)

        #adds tool bar to the window
        self.addToolBar(self.database_toolbar)

        #adds menubar to the window
        self.setMenuBar(self.menu)

        #Connections
        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)
        self.find_data.triggered.connect(self.display_products)

    def open_connection(self):
        path = QFileDialog.getOpenFileName()
        print(path)
        self.connection = SQLConnection(path)
        ok = self.connection.open_database()
        print(ok)

    def close_connection(self):
        pass

    def search_database(self):
        print('hold')

    def display_products(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)
        query = self.connection.find_products_by_number((1,))
Example #4
0
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("test")

        self.open_database = QAction("Open Database", self)
        self.close_database = QAction("Close Database", self)
        self.find_data = QAction("Search Database", self)

        #creates the menu bar
        self.menu = QMenuBar()

        #
        self.database_toolbar = QToolBar()
        self.database_menu = self.menu.addMenu("Database")
        self.search_menu = self.menu.addMenu("Search")

        #adds actions to the menu
        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)
        self.search_menu.addAction(self.find_data)

        #add actions to the tool bar
        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)
        self.database_toolbar.addAction(self.find_data)

        #adds tool bar to the window
        self.addToolBar(self.database_toolbar)

        #adds menubar to the window
        self.setMenuBar(self.menu)

        #Connections
        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)
        self.find_data.triggered.connect(self.display_products)

    def open_connection(self):
        path = QFileDialog.getOpenFileName()
        print(path)
        self.connection = SQLConnection(path)
        ok = self.connection.open_database()
        print(ok)

    def close_connection(self):
        pass

    def search_database(self):
        print('hold')

    def display_products(self):
        if not hasattr(self, "display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)
        query = self.connection.find_products_by_number((1, ))
Example #5
0
def itemFinder(search_item):
    try:
        api = Finding(appid="ScottRus-bf7d-437a-a830-3735324dd553",config_file=None,debug=True)
        response = api.execute('findItemsAdvanced', {'keywords': search_item})
        items = response.dict()
        SQLConnection.get_Ebay_data(items['searchResult'])

        ##EbayDbSQL.set_ebay_dict(items['searchResult'])
        ## item in tings['item']:
           ## ebay_info =  "itemId: {}, title: {}, Selling Status: {}".format(item['itemId'],item['title'],item['sellingStatus'])

    except KeyError:
        print KeyError
Example #6
0
def itemFinder(search_item):
    try:
        api = Finding(appid="ScottRus-bf7d-437a-a830-3735324dd553",
                      config_file=None,
                      debug=True)
        response = api.execute('findItemsAdvanced', {'keywords': search_item})
        items = response.dict()
        SQLConnection.get_Ebay_data(items['searchResult'])

        ##EbayDbSQL.set_ebay_dict(items['searchResult'])
        ## item in tings['item']:
        ## ebay_info =  "itemId: {}, title: {}, Selling Status: {}".format(item['itemId'],item['title'],item['sellingStatus'])

    except KeyError:
        print KeyError
def main():  # Main loop of ICA
    window = Tk()
    window.resizable(0, 0)
    window.title()

    currentSCREEN = Login_Screen.loginScreen(window, None)

    sql = SQLConnection.SQLConnection()
    #currentUser = Users.User([0, "Jason", "Van Bladel", "Admin", 1], 1, sql)
    #currentUser.setPermissions(Users.Permissions(["Hi", "decr", 1,1,1,1,1,1,1,1,1,1,1,1,1,1, 7, 10]))
    #currentSCREEN = Main_Menu.mainMenu(window, currentUser)

    #currentSCREEN = mainMenu(window, ["Jason Van Bladel"])
    #currentUser = User([0, "Jason", "Van Bladel", "Admin"], 1)
    #currentSCREEN = mainMenu(window, currentUser)

    #test patient information for med info screen since DB is down
    testPatientData = [
        20, 10, "Test", "Account", "L", "4/31/2000", "F", "No", "4/21/2020", 0,
        "Insert Race", "Insert ethnicity", 20
    ]
    testPatient = Patient(testPatientData)

    #currentSCREEN = Med_Info_Screen.med_INFO_SCREEN(window,testPatient)
    window.mainloop()
Example #8
0
 def open_connection(self):
     
     print("Opening Database")
     path=QFileDialog.getOpenFileName()
     self.connection=SQLConnection(path)
     ok=self.connection.open_database()
     print(ok)
def performanceMeasurement():

    root = tk.Tk()

    figure1 = plt.Figure(figsize=(6, 5), dpi=100)
    ax1 = figure1.add_subplot(111)
    bar1 = FigureCanvasTkAgg(figure1, root)
    bar1.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH)
    SQL = SQLConnection.SQLConnection()
    numbers = SQL.getWorkEfficiency()
    # print(data.OutreachDetailsDate)
    SQL.closeConnection()
    # performanceMeasurement(data['OutreachDetailsDate'], data['name'].values.tolist())
    df1 = numbers[['name', 'Count_OutreachDetailsPatientId']]
    df1.plot.bar(x='name',
                 y='Count_OutreachDetailsPatientId',
                 rot=0,
                 fontsize=8,
                 color=(0.2, 0.4, 0.6, 0.6),
                 ax=ax1)

    # ax1.set_title(str(numbers['name'].values[0]) + ' work progress')
    toolbar = NavigationToolbar2Tk(bar1, root)
    toolbar.update()
    bar1._tkcanvas.pack(side=TOP, fill=BOTH, expand=True)
    root.mainloop()
 def get_database(self):
     path = QFileDialog.getOpenFileName()
     self.database_path.setText(path)
     self.connection = SQLConnection(path)
     self.open_database
     database = self.connection.open_database()
     time.sleep(0.5)
     self.CreatePopUpWindow()
    def open_connection(self):
        path = QFileDialog.getOpenFileName()

        self.connection = SQLConnection(path)

        opened = self.connection.open_database()

        print(opened)
Example #12
0
    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.close_connection()

        self.connection = SQLConnection(path)
        self.connection.create_database()
        self.statusBar.showMessage("A new Database has been created!")
        self.dbOpen()
Example #13
0
    def openDatabaseConn(self):

        if self.connection:
            self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.dbOpen()
            self.statusBar.showMessage("Database has been opened.")
Example #14
0
    def __init__(self):
        super().__init__()
        check_date()
        add_admin_employee()
        settings = getSettings()
        self.setStyleSheet(css)
        self.connection = SQLConnection("ProductDatabase.db")
        open_db = self.connection.open_database()
        self.Settings()
        self.stacked_layout = QStackedLayout()
        self.add_product()
        self.edit_product()
        self.delete_product()
        self.manage_stock()
        self.create_order()
        self.add_member()
        self.edit_member()
        self.delete_member()
        self.add_employee()
        self.edit_employee()
        self.delete_employee()
        self.preferences()
        self.log_in()
        self.password_reset()
        self.change_password()
        self.widget = QWidget()
        self.widget.setLayout(self.stacked_layout)
    
        
        #Adding The Custom TitleBar
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.title_bar = TitleBar()
        self.title_bar.minimise.clicked.connect(self.minimise_main_window)
        self.title_bar.close.clicked.connect(self.close_main_window)
        self.main_layout = QVBoxLayout()
        self.main_widget = QWidget()
        self.main_layout.addWidget(self.title_bar)
        self.main_layout.addWidget(self.menu)
        self.main_layout.addWidget(self.widget)
        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)
        
        
        self.log_in_function()
        if settings:
            self.setWindowTitle("Beacon Vets Stock Control")
            self.icon = QIcon("{0}".format(str(settings[0][1])))
        else:
            self.icon = QIcon("")

        self.setWindowIcon(self.icon)
Example #15
0
		def openDatabase(self):
				if self.connection:
						self.closeDatabase()

				path = "C3_media_database.db"
				self.connection = SQLConnection(path)
				opened = self.connection.openDatabase()

				if opened:
						self.password = self.connection.getPassword()
						self.databaseLogin()
						self.connection.referentialIntegrity()
						self.statusBar.showMessage("Connected to Database: {0}".format(path))
						time.sleep(2)
						self.statusBar.showMessage("")
Example #16
0
def fuzzySearch(field, input_str, input_type):
    if not Type_Check.checkType(input_str, input_type):
        return
    SQLConn = SQLConnection.SQLConnection()
    query = query_generator.fuzzySearch_sql(field, input_str, input_type)
    df = pd.read_sql(query, SQLConn.conn)
    print(len(df.index))
    if len(df.index) == 0:
        SQLConn.closeConnection()
        return
    plist = []
    data = df.values.tolist()
    for p in data:
        plist.append(Patients.Patient(p))
    SQLConn.closeConnection()
    return plist
Example #17
0
    def openDatabaseConn(self):

        self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.openDatabase.setEnabled(False)
            self.newDatabase.setEnabled(False)
            self.closeDatabase.setEnabled(True)

            self.statusBar.showMessage("Database has been opened.")
            self.databaseNameLabel.setText(path)
            self.enableProxies()
            self.db_open()
Example #18
0
    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.connection.close_database()

        self.connection = SQLConnection(path)
        self.connection.create_database()

        self.databaseNameLabel.setText(path)

        self.closeDatabase.setEnabled(True)
        self.openDatabase.setEnabled(False)
        self.newDatabase.setEnabled(False)

        self.statusBar.showMessage("Database has been created.")

        self.enableProxies()

        self.db_open()
def individualGroupByDate(userID):
    SQL = SQLConnection.SQLConnection()
    data = SQL.getIndWorkEfficiency(userID)

    # print(data.OutreachDetailsDate)
    SQL.closeConnection()
    # performanceMeasurement(data['OutreachDetailsDate'], data['name'].values.tolist())
    plt.bar(x=range(0, len(data['OutreachDetailsDate'])),
            height=data['Count_OutreachDetailsPatientId'])
    # print(data['name'].values[0])
    plt.title(str(data['name'].values[0]) + ' work progress')
    dateTime = data['OutreachDetailsDate'].values.tolist()
    date = []
    for d in dateTime:
        date.append(d[:10])
    # print(date)
    plt.xticks(range(0, len(date)), date, rotation=20, fontsize=7)
    plt.ylim(0, dailyGoal)
    for index, value in enumerate(data['Count_OutreachDetailsPatientId']):
        plt.text(index, value, str(value))
    plt.show()
Example #20
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Jesus is my saviour")
        #create menu and tool bar
        self.open_database=QAction("Open Database",self)
        self.close_database=QAction("Close Database", self)
        self.find_products=QAction("Find Products",self)
        self.show_products=QAction("Show Products",self)
        #add menu to menu bar 
        self.menu=QMenuBar()
        self.database_toolbar=QToolBar()
        self.database_menu=self.menu.addMenu("Database")
        self.products_toolbar=QToolBar()
        self.products_menu=self.menu.addMenu("Products")
        
        #add actions to menu
        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)

        self.products_menu.addAction(self.find_products)
        self.products_menu.addAction(self.show_products)
        #add actions to toolbar
        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)

        self.products_toolbar.addAction(self.find_products)
        self.products_toolbar.addAction(self.show_products)
        #add toolbar to window
        self.addToolBar(self.database_toolbar)
        self.addToolBar(self.products_toolbar)
        #add menu to toolbar 
        self.setMenuBar(self.menu)
        #making connections
        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)

        self.find_products.triggered.connect(self.find_data)
        self.show_products.triggered.connect(self.display_data)


    def open_connection(self):
        
        print("Opening Database")
        path=QFileDialog.getOpenFileName()
        self.connection=SQLConnection(path)
        ok=self.connection.open_database()
        print(ok)
        
    def close_connection(self):
        print("Closing Database")

    def display_data(self):
        if not hasattr(self,"display_widget"):
            self.display_widget=DisplayWidget()
        self.setCentralWidget(self.display_widget)
        query=self.connection.find_products((1,))
        self.display_widget.show_results(query)

    def find_data(self):
        pass
Example #21
0
class MainWindow(QMainWindow):

    """ This is the Main Window class for the proxy finder tool. """

    def __init__(self):

        super().__init__()

        self.setWindowTitle("Proxy Finder Tool")

        self.resize(250, 300)

        # Attached SQL Connection
        self.connection = None

        self.icon = QIcon(QPixmap("./globe.png"))
        self.setWindowIcon(self.icon)

        self.mainSettings()

        self.stacked_layout = QStackedLayout()

        self.mainLayout()

        self.connections()

        self.widget = QWidget()
        self.widget.setLayout(self.stacked_layout)

        self.setCentralWidget(self.widget)

    def mainSettings(self):

        self.refreshButton = QPushButton("Refresh")
        self.exportList = QPushButton("Save List")

        self.statusBar = QStatusBar()

        self.setStatusBar(self.statusBar)

        self.menuBar = QMenuBar()

        # menus for the main menu bar
        self.databaseMenu = self.menuBar.addMenu("Database")
        self.proxyMenu = self.menuBar.addMenu("Proxies")
        self.helpMenu = self.menuBar.addMenu("Help")

        # actions
        self.getList = QAction("Get List", self)
        self.saveList = QAction("Save List", self)

        self.openDatabase = QAction("Open Database", self)
        self.newDatabase = QAction("New Database", self)
        self.closeDatabase = QAction("Close Database", self)
        self.closeDatabase.setEnabled(False)

        self.about = QAction("About", self)

        # add actions to menus
        self.proxyMenu.addAction(self.getList)
        self.proxyMenu.addAction(self.saveList)

        self.databaseMenu.addAction(self.newDatabase)
        self.databaseMenu.addAction(self.openDatabase)
        self.databaseMenu.addAction(self.closeDatabase)

        self.helpMenu.addAction(self.about)

        # set the menu bar
        self.setMenuBar(self.menuBar)

    def mainLayout(self):

        # this is the main initial layout
        self.resultsTable = QListWidget()

        # current database

        self.currentDatabase = QLabel("Current Database: ")
        self.databaseNameLabel = QLabel("None")

        self.currentDbLayout = QHBoxLayout()
        self.currentDbLayout.addWidget(self.currentDatabase)
        self.currentDbLayout.addWidget(self.databaseNameLabel)

        self.currentDbWidget = QWidget()
        self.currentDbWidget.setLayout(self.currentDbLayout)

        # buttons

        self.btnLayout = QHBoxLayout()

        self.getListBtn = QPushButton("Get List")
        self.saveListBtn = QPushButton("Save List")
        self.exportListBtn = QPushButton("Export List")

        self.btnLayout.addWidget(self.getListBtn)
        self.btnLayout.addWidget(self.saveListBtn)
        self.btnLayout.addWidget(self.exportListBtn)

        self.btnWidget = QWidget()
        self.btnWidget.setLayout(self.btnLayout)

        # Main Layout

        self.mainVertical = QVBoxLayout()
        self.mainVertical.addWidget(self.currentDbWidget)
        self.mainVertical.addWidget(self.resultsTable)
        self.mainVertical.addWidget(self.btnWidget)

        self.disableProxies()
        # Main Widget

        self.mainWidget = QWidget()
        self.mainWidget.setLayout(self.mainVertical)

        # Add to Stacked Layout
        self.stacked_layout.addWidget(self.mainWidget)

    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.connection.close_database()

        self.connection = SQLConnection(path)
        self.connection.create_database()

        self.databaseNameLabel.setText(path)

        self.closeDatabase.setEnabled(True)
        self.openDatabase.setEnabled(False)
        self.newDatabase.setEnabled(False)

        self.statusBar.showMessage("Database has been created.")

        self.enableProxies()

        self.db_open()

    def getProxies(self):
        if self.connection == None:
            self.statusBar.showMessage("No Database Open!")
        else:
            thread = ProxyList()
            thread.complete.connect(self.populate_db)
            thread.start()

    def enableProxies(self):
        self.getList.setEnabled(True)
        self.saveList.setEnabled(True)

        self.getListBtn.setEnabled(True)
        self.saveListBtn.setEnabled(True)
        self.exportListBtn.setEnabled(True)

    def populate_db(self, results):

        self.statusBar.showMessage("Collecting Data. Please wait...")

        for i in range(len(proxies)):
            query = self.connection.addProxy(proxies[i])
            self.statusBar.showMessage("Gathering {0} of {1} proxies.".format(i + 1, len(proxies)))

        self.statusBar.showMessage("Gathering Complete!")

    def populate_table_init(self):

        numberOfProxies = self.connection.numberOfProxies()

        if num > 0:
            results = self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def db_open(self):

        numberOfProxies = self.connection.numberOfProxies()
        num = int(numberOfProxies)
        print(num)
        if num > 0:
            self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def disableProxies(self):
        self.getList.setEnabled(False)
        self.saveList.setEnabled(False)

        self.getListBtn.setEnabled(False)
        self.saveListBtn.setEnabled(False)
        self.exportListBtn.setEnabled(False)

    def openDatabaseConn(self):

        self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.openDatabase.setEnabled(False)
            self.newDatabase.setEnabled(False)
            self.closeDatabase.setEnabled(True)

            self.statusBar.showMessage("Database has been opened.")
            self.databaseNameLabel.setText(path)
            self.enableProxies()
            self.db_open()

    def close_connection(self):
        if self.connection:
            self.connection.close_database()
            self.statusBar.showMessage("Database has been closed.")
            self.databaseNameLabel.setText("None")

            self.newDatabase.setEnabled(True)
            self.openDatabase.setEnabled(True)
            self.closeDatabase.setEnabled(False)

            self.connection = None

            self.disableProxies()
        else:
            self.statusBar.showMessage("No Database to close.")

    def connections(self):

        self.newDatabase.triggered.connect(self.createNewDatabase)
        self.openDatabase.triggered.connect(self.openDatabaseConn)
        self.closeDatabase.triggered.connect(self.close_connection)
        self.getListBtn.clicked.connect(self.getProxies)
        self.getList.triggered.connect(self.getProxies)
Example #22
0
class MainWindow(QMainWindow):
    """ This is the main window class for the plastering job management
program """

    def __init__(self):

        super().__init__()

        self.setWindowTitle("Plastering Job Management Application")
        self.resize(500, 300)
        self.icon = QIcon(QPixmap("./icon.png"))
        self.setWindowIcon(self.icon)

        # Connection Attribute stores the database connection
        self.connection = None

        # stacked layout
        self.stackedLayout = QStackedLayout()

        self.widget = QWidget()

        self.widget.setLayout(self.stackedLayout)

        # Set the central widget to the stacked layout

        self.setCentralWidget(self.widget)

        # Add the Menu Bar and Main Settings Etc...
        self.mainSettings()

        # Create the Widgets
        self.initialCentralWidget()
        self.dbOpenLayout()
        self.clientsLayout()
        self.plasterersLayout()

        # Disable database related actions
        self.dbNotOpen()

        # Setup the PyQt Signals and Connections
        self.connections()

    ##
    ##
    def dbNotOpen(self):

        self.addClient.setEnabled(False)
        self.editClients.setEnabled(False)
        self.searchClients.setEnabled(False)

        self.addPlasterer.setEnabled(False)
        self.editPlasterers.setEnabled(False)
        self.viewPlasterers.setEnabled(False)

        self.addJob.setEnabled(False)
        self.viewJobs.setEnabled(False)

        self.newDatabase.setEnabled(True)
        self.openDatabase.setEnabled(True)
        self.closeDatabase.setEnabled(False)

        self.stackedLayout.setCurrentIndex(0)

    def dbOpen(self):

        self.addClient.setEnabled(True)
        self.editClients.setEnabled(True)
        self.searchClients.setEnabled(True)

        self.addPlasterer.setEnabled(True)
        self.editPlasterers.setEnabled(True)
        self.viewPlasterers.setEnabled(True)

        self.addJob.setEnabled(True)
        self.viewJobs.setEnabled(True)

        self.newDatabase.setEnabled(False)
        self.openDatabase.setEnabled(False)
        self.closeDatabase.setEnabled(True)

        self.stackedLayout.setCurrentIndex(1)

    def mainSettings(self):

        # actions
        self.addClient = QAction("Add Client", self)
        self.editClients = QAction("Edit Clients", self)
        self.searchClients = QAction("Search Clients", self)

        self.addPlasterer = QAction("Add Plasterer", self)
        self.editPlasterers = QAction("Edit Plasterers", self)
        self.viewPlasterers = QAction("View Plasterers", self)

        self.addJob = QAction("New Job", self)
        self.viewJobs = QAction("Manage Jobs", self)

        self.help = QAction("Help", self)
        self.about = QAction("About", self)

        self.openDatabase = QAction("Open Database", self)
        self.newDatabase = QAction("New Database", self)
        self.closeDatabase = QAction("Close Database", self)

        # menu bar
        self.menu = QMenuBar()

        # Database Menu
        self.databaseMenu = self.menu.addMenu("Database")
        self.databaseMenu.addAction(self.newDatabase)
        self.databaseMenu.addAction(self.openDatabase)
        self.databaseMenu.addAction(self.closeDatabase)

        # Clients Menu
        self.clientsMenu = self.menu.addMenu("Clients")
        self.clientsMenu.addAction(self.addClient)
        self.clientsMenu.addAction(self.editClients)
        self.clientsMenu.addAction(self.searchClients)

        # Jobs Menu
        self.jobsMenu = self.menu.addMenu("Jobs")
        self.jobsMenu.addAction(self.addJob)
        self.jobsMenu.addAction(self.viewJobs)

        # Plasterers Menu
        self.plasterersMenu = self.menu.addMenu("Plasterers")
        self.plasterersMenu.addAction(self.addPlasterer)
        self.plasterersMenu.addAction(self.editPlasterers)
        self.plasterersMenu.addAction(self.viewPlasterers)

        # Help Menu
        self.helpMenu = self.menu.addMenu("Help")
        self.helpMenu.addAction(self.help)
        self.helpMenu.addAction(self.about)

        # tool bar
        self.toolBar = QToolBar()
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addClient)
        self.toolBar.addAction(self.editClients)
        self.toolBar.addAction(self.searchClients)
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addPlasterer)
        self.toolBar.addAction(self.editPlasterers)
        self.toolBar.addAction(self.viewPlasterers)
        self.toolBar.addSeparator()

        self.toolBar.addAction(self.addJob)
        self.toolBar.addAction(self.viewJobs)
        self.toolBar.addSeparator()
        self.toolBar.setMovable(False)

        self.addToolBar(self.toolBar)

        self.setMenuBar(self.menu)

        self.statusBar = QStatusBar()

        self.setStatusBar(self.statusBar)

    def connections(self):

        self.about.triggered.connect(self.showAboutMessageBox)
        self.newDatabase.triggered.connect(self.createNewDatabase)
        self.openDatabase.triggered.connect(self.openDatabaseConn)
        self.closeDatabase.triggered.connect(self.closeDatabaseConn)
        self.newDbPushButton.clicked.connect(self.createNewDatabase)
        self.openDbPushButton.clicked.connect(self.openDatabaseConn)

        self.clientsPushButton.clicked.connect(self.switchToClientsMenu)
        self.plasterersPushButton.clicked.connect(self.switchToPlasterersMenu)

        self.clientsLayoutWidget.backButton.clicked.connect(self.switchToMainMenu)
        self.plasterersLayoutWidget.backButton.clicked.connect(self.switchToMainMenu)

    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.close_connection()

        self.connection = SQLConnection(path)
        self.connection.create_database()
        self.statusBar.showMessage("A new Database has been created!")
        self.dbOpen()

    def closeDatabaseConn(self):

        if self.connection:
            self.close_connection()
            self.statusBar.showMessage("Database has been closed.")
        else:
            self.statusBar.showMessage("No Database to close!")

    def openDatabaseConn(self):

        if self.connection:
            self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.dbOpen()
            self.statusBar.showMessage("Database has been opened.")

    def close_connection(self):
        if self.connection:
            closed = self.connection.close_database()

            if closed:
                self.statusBar.showMessage("Database has been closed.")
                self.dbNotOpen()
                self.connection = None
            else:
                self.statusBar.showMessage("An error occured!")
        else:
            self.statusBar.showMessage("No Database to close.")

    def dbOpenLayout(self):

        self.setStyleSheet(
            """QPushButton[buttonClass=home] {
                           font-size: 16px; background-color: rgba(188, 188, 188, 50);
                           border: 1px solid rgba(188, 188, 188, 250);
                           height:100px;
                           border-radius:5px;}"""
        )

        self.clientsPushButton = QPushButton("Clients")
        self.clientsPushButton.setProperty("buttonClass", "home")
        self.clientsPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.plasterersPushButton = QPushButton("Plasterers")
        self.plasterersPushButton.setProperty("buttonClass", "home")
        self.plasterersPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.jobsPushButton = QPushButton("Jobs")
        self.jobsPushButton.setProperty("buttonClass", "home")
        self.jobsPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.dbOpenLayout = QHBoxLayout()

        self.dbOpenLayout.addWidget(self.clientsPushButton)
        self.dbOpenLayout.addWidget(self.plasterersPushButton)
        self.dbOpenLayout.addWidget(self.jobsPushButton)

        self.dbOpenWidget = QWidget()

        self.dbOpenWidget.setLayout(self.dbOpenLayout)

        self.stackedLayout.addWidget(self.dbOpenWidget)

    def initialCentralWidget(self):

        self.setStyleSheet(
            """QPushButton[buttonClass=home] {
                           font-size: 16px; background-color: rgba(188, 188, 188, 50);
                           border: 1px solid rgba(188, 188, 188, 250);
                           height:100px;
                           border-radius:5px;}"""
        )

        self.newDbPushButton = QPushButton("New Database")
        self.newDbPushButton.setProperty("buttonClass", "home")
        self.newDbPushButton.setCursor(QCursor(Qt.PointingHandCursor))
        self.openDbPushButton = QPushButton("Open Database")
        self.openDbPushButton.setProperty("buttonClass", "home")
        self.openDbPushButton.setCursor(QCursor(Qt.PointingHandCursor))

        self.mainLayout = QHBoxLayout()

        self.mainLayout.addWidget(self.newDbPushButton)
        self.mainLayout.addWidget(self.openDbPushButton)

        self.mainWidget = QWidget()

        self.mainWidget.setLayout(self.mainLayout)

        self.stackedLayout.addWidget(self.mainWidget)

    def switchToClientsMenu(self):
        self.stackedLayout.setCurrentIndex(2)

    def switchToPlasterersMenu(self):
        self.stackedLayout.setCurrentIndex(3)

    def switchToMainMenu(self):
        self.stackedLayout.setCurrentIndex(1)

    def clientsLayout(self):
        self.clientsLayoutWidget = ClientsMenuWidget()
        self.stackedLayout.addWidget(self.clientsLayoutWidget)

    def plasterersLayout(self):
        self.plasterersLayoutWidget = PlasterersMenuWidget()
        self.stackedLayout.addWidget(self.plasterersLayoutWidget)

    def showAboutMessageBox(self):

        aboutText = """This application allows plasterers to manage their jobs and clients. \n It was developed by Kyle Kirkby using PyQt4 and Python3."""

        QMessageBox.about(self, "About", aboutText)
class Window(QMainWindow):
    """simple window layout"""
    def __init__(self):
        
        super().__init__()
        #palette = QPalette()
        #palette.setColor(QPalette.Background,QColor(0, 0, 255, 127))

        #self.setPalette(palette)
        
        self.setWindowTitle("Coffee Database PyQt4 SQL")
        self.resize(350,400)
        self.icon = QIcon(QPixmap("./images/coffeeIcon.png"))
        self.setWindowIcon(self.icon)

        #connection
        self.connection = None

        #create the initial layout
        self.initial_layout()
        
    def initial_layout(self):
        
        #create actions
        self.open_database = QAction("Open Database",self)
        self.close_database = QAction("Close Database",self)
        self.show_products = QAction("Show Products",self)
        self.find_products = QAction("Find Products",self)

        self.menu = QMenuBar()
               
        self.database_toolbar = QToolBar()

        self.database_menu = self.menu.addMenu("Database")
        self.products_menu = self.menu.addMenu("Products")

        self.database_menu.addAction(self.open_database)
        self.database_menu.addAction(self.close_database)

        self.products_menu.addAction(self.show_products)
        self.products_menu.addAction(self.find_products)

        self.database_toolbar.addAction(self.open_database)
        self.database_toolbar.addAction(self.close_database)

        self.addToolBar(self.database_toolbar)

        self.setMenuBar(self.menu)

        self.open_database.triggered.connect(self.open_connection)
        self.close_database.triggered.connect(self.close_connection)

        self.show_products.triggered.connect(self.show_products_layout)
        self.find_products.triggered.connect(self.find_products_layout)

    def show_products_layout(self):
        
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
            
        self.setCentralWidget(self.display_widget)
        if self.connection != None:
            query = self.connection.show_all_products()
            print(query)
            self.display_widget.show_results(query)
        else:
            print("A DB Connection must be opened")

    def find_products_layout(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)

        if self.connection != None:
            query = self.connection.find_products_by_number((1,))
            print(query)
            self.display_widget.show_results(query)
        else:
            print("A DB connection must be opened!")
        
    def open_connection(self):
        path = QFileDialog.getOpenFileName()

        self.connection = SQLConnection(path)

        opened = self.connection.open_database()

        print(opened)
    def close_connection(self):
        if self.connection:
            self.connection.close_database()
            print("closed")
        else:
            print("no db to close")
Example #24
0
class MainWindow(QMainWindow):
    """This class creates the Main window"""

    def __init__(self):
        super().__init__()
        check_date()
        add_admin_employee()
        settings = getSettings()
        self.setStyleSheet(css)
        self.connection = SQLConnection("ProductDatabase.db")
        open_db = self.connection.open_database()
        self.Settings()
        self.stacked_layout = QStackedLayout()
        self.add_product()
        self.edit_product()
        self.delete_product()
        self.manage_stock()
        self.create_order()
        self.add_member()
        self.edit_member()
        self.delete_member()
        self.add_employee()
        self.edit_employee()
        self.delete_employee()
        self.preferences()
        self.log_in()
        self.password_reset()
        self.change_password()
        self.widget = QWidget()
        self.widget.setLayout(self.stacked_layout)
    
        
        #Adding The Custom TitleBar
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.title_bar = TitleBar()
        self.title_bar.minimise.clicked.connect(self.minimise_main_window)
        self.title_bar.close.clicked.connect(self.close_main_window)
        self.main_layout = QVBoxLayout()
        self.main_widget = QWidget()
        self.main_layout.addWidget(self.title_bar)
        self.main_layout.addWidget(self.menu)
        self.main_layout.addWidget(self.widget)
        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)
        
        
        self.log_in_function()
        if settings:
            self.setWindowTitle("Beacon Vets Stock Control")
            self.icon = QIcon("{0}".format(str(settings[0][1])))
        else:
            self.icon = QIcon("")

        self.setWindowIcon(self.icon)

    def minimise_main_window(self):
        self.showMinimized()

    def close_main_window(self):
        self.close()

    def mousePressEvent(self,event):

        if event.button() == Qt.LeftButton:
            self.moving = True; self.offset = event.pos()

    def mouseMoveEvent(self,event):
        try:
            if self.moving:
                self.move(event.globalPos()-self.offset)
        except AttributeError:
            pass

        
        


    def create_title(self):
        self.title = QLabel("Default Text")
        self.title.setAlignment(Qt.AlignCenter)
        self.title.setObjectName('title')
        return self.title

        
    def add_product(self):
        self.title = self.create_title()
        self.title.setText("Add Product ")
        self.add_product_instance = addProductClass("Add Product")
        product_name_info = self.add_product_instance.product_name.text()
        
        self.add_product_layout = QVBoxLayout()
        self.add_product_layout.addWidget(self.title)
        self.add_product_layout.addWidget(self.add_product_instance)
        self.add_product_widget = QWidget()
        self.add_product_widget.setLayout(self.add_product_layout)
        self.setCentralWidget(self.add_product_widget)
        self.stacked_layout.addWidget(self.add_product_widget)

    def edit_product(self):
        self.title = self.create_title()
        self.title.setText("Edit Product ")
        self.edit_product_instance = editProductClass()
        self.edit_product_layout = QVBoxLayout()
        self.edit_product_layout.addWidget(self.title)
        self.edit_product_layout.addWidget(self.edit_product_instance)
        self.edit_product_widget = QWidget()
        self.edit_product_widget.setLayout(self.edit_product_layout)
        self.setCentralWidget(self.edit_product_widget)
        self.stacked_layout.addWidget(self.edit_product_widget)

    def change_view(self):
        if not self.edit_product_instance.isEnabled():
            self.edit_product_instance.setEnabled(True)

    def delete_product(self):
        self.title = self.create_title()
        self.title.setText("Delete Product ")
        self.delete_product_instance = deleteProductClass()
        self.delete_product_layout = QVBoxLayout()
        self.delete_product_layout.addWidget(self.title)
        self.delete_product_layout.addWidget(self.delete_product_instance)
        self.delete_product_widget = QWidget()
        self.delete_product_widget.setLayout(self.delete_product_layout)
        self.setCentralWidget(self.delete_product_widget)
        self.stacked_layout.addWidget(self.delete_product_widget)
        


    def add_member(self):
        self.title = self.create_title()
        self.title.setText("Add Member")
        
        self.add_member_instance = addMemberClass("Add Member")
        self.add_member_layout = QVBoxLayout()
        self.add_member_widget = QWidget()
        self.add_member_layout.addWidget(self.title)
        self.add_member_layout.addWidget(self.add_member_instance)
        self.add_member_widget.setLayout(self.add_member_layout)
        self.setCentralWidget(self.add_member_widget)
        self.stacked_layout.addWidget(self.add_member_widget)

    def edit_member(self):
        self.title = self.create_title()
        self.title.setText("Edit Member")

        
        self.edit_member_instance = editMemberClass("Edit Member")        
        self.edit_member_layout = QVBoxLayout()
        self.edit_member_widget = QWidget()
        self.edit_member_layout.addWidget(self.title)
        self.edit_member_layout.addWidget(self.edit_member_instance)
        self.edit_member_widget.setLayout(self.edit_member_layout)
        self.setCentralWidget(self.edit_member_widget)
        self.stacked_layout.addWidget(self.edit_member_widget)

    def delete_member(self):
        self.title = self.create_title()
        self.title.setText("Delete Member")

        
        self.delete_member_instance = deleteMemberClass("Delete Member")
        self.delete_member_layout = QVBoxLayout()
        self.delete_member_widget = QWidget()
        self.delete_member_layout.addWidget(self.title)
        self.delete_member_layout.addWidget(self.delete_member_instance)
        self.delete_member_widget.setLayout(self.delete_member_layout)
        self.setCentralWidget(self.delete_member_widget)
        self.stacked_layout.addWidget(self.delete_member_widget)
        


    def add_employee(self):
        self.title = self.create_title()
        self.title.setText("Add Employee")
        self.add_employee_instance = addEmployeeClass("Add Employee")
        self.add_employee_layout = QVBoxLayout()
        self.add_employee_widget = QWidget()
        self.add_employee_layout.addWidget(self.title)
        self.add_employee_layout.addWidget(self.add_employee_instance)
        self.add_employee_widget.setLayout(self.add_employee_layout)
        self.setCentralWidget(self.add_employee_widget)
        self.stacked_layout.addWidget(self.add_employee_widget)

    def edit_employee(self):
        self.title = self.create_title()
        self.title.setText("Edit Employee")
        self.edit_employee_instance = editEmployeeClass("Edit Employee")
        self.edit_employee_layout = QVBoxLayout()
        self.edit_employee_widget = QWidget()
        self.edit_employee_layout.addWidget(self.title)
        self.edit_employee_layout.addWidget(self.edit_employee_instance)
        self.edit_employee_widget.setLayout(self.edit_employee_layout)
        self.setCentralWidget(self.edit_employee_widget)
        self.stacked_layout.addWidget(self.edit_employee_widget)

    def delete_employee(self):
        self.title = self.create_title()
        self.title.setText("Delete Employee")
        self.delete_employee_instance = deleteEmployeeClass("Delete Employee")
        self.delete_employee_layout = QVBoxLayout()
        self.delete_employee_widget = QWidget()
        self.delete_employee_layout.addWidget(self.title)
        self.delete_employee_layout.addWidget(self.delete_employee_instance)
        self.delete_employee_widget.setLayout(self.delete_employee_layout)
        self.setCentralWidget(self.delete_employee_widget)
        self.stacked_layout.addWidget(self.delete_employee_widget)

    def manage_stock(self):
        self.title = self.create_title()
        self.title.setText("Manage Stock")
        self.manage_stock_instance = manageStockClass()
        self.manage_stock_layout = QVBoxLayout()
        self.manage_stock_widget = QWidget()
        self.manage_stock_layout.addWidget(self.title)
        self.manage_stock_layout.addWidget(self.manage_stock_instance)
        self.manage_stock_widget.setLayout(self.manage_stock_layout)
        
        self.setCentralWidget(self.manage_stock_widget)
        self.stacked_layout.addWidget(self.manage_stock_widget)

    def create_order(self):
        self.title = self.create_title()
        self.title.setText("Create Order")
        self.create_order_instance = createOrderClass()
        self.create_order_layout = QVBoxLayout()
        self.create_order_layout.addWidget(self.title)
        self.create_order_layout.addWidget(self.create_order_instance)
        self.create_order_widget = QWidget()
        self.create_order_widget.setLayout(self.create_order_layout)
        self.setCentralWidget(self.create_order_widget)
        self.stacked_layout.addWidget(self.create_order_widget)
        self.create_order_instance.display_table.update()
        self.create_order_instance.current_order.update()

    def search(self):
        self.search_instance = SearchClass()
        
        self.search_instance.product_right_click_menu.addAction("Manage Stock" , self.EditStock)
        self.search_instance.product_right_click_menu.addAction("Edit Product" , self.EditProduct)
        self.search_instance.product_right_click_menu.addAction("Delete Product" , self.DeleteProduct)

        self.search_instance.member_right_click_menu.addAction("Edit Member" , self.EditMember)
        self.search_instance.member_right_click_menu.addAction("Delete Member" , self.DeleteMember)
        
        self.search_instance.employee_right_click_menu.addAction("Edit Employee" , self.EditEmployee)
        self.search_instance.employee_right_click_menu.addAction("Delete Employee" , self.DeleteEmployee)
        
        self.search_instance.move(750,300)
        self.search_instance.show()
        self.search_instance.raise_()

    def EditStock(self):
        self.stacked_layout.setCurrentIndex(3)
        self.manage_stock_instance.product_id.setText(
            str(self.search_instance.product_id))
        self.manage_stock_instance.find_product_by_id()
        self.search_instance.close()

        self.setFixedSize(900, 850)

    def EditProduct(self):
        self.stacked_layout.setCurrentIndex(1)
        self.edit_product_instance.find_product_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.edit_product_instance.find_product_by_id()
        self.search_instance.close()

        self.setFixedSize(700, 700)
        
    def DeleteProduct(self):
        self.stacked_layout.setCurrentIndex(2)
        self.delete_product_instance.find_product_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.delete_product_instance.find_product_by_id()
        self.search_instance.close()

        self.setFixedSize(700, 700)
        
    def EditMember(self):
        self.stacked_layout.setCurrentIndex(6)
        self.edit_member_instance.find_member_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.edit_member_instance.find_member_by_id()

        self.search_instance.close()
        self.setFixedSize(700, 800)

    def DeleteMember(self):
        self.stacked_layout.setCurrentIndex(7)
        self.delete_member_instance.find_member_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.delete_member_instance.find_member_by_id()

        self.search_instance.close()
        self.setFixedSize(700, 800)

    def EditEmployee(self):
        self.stacked_layout.setCurrentIndex(9)
        self.edit_employee_instance.find_employee_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.edit_employee_instance.find_employee_by_id()
        self.search_instance.close()
        self.setFixedSize(700, 650)

    def DeleteEmployee(self):
        self.stacked_layout.setCurrentIndex(10)
        self.delete_employee_instance.find_employee_id_line_edit.setText(
            str(self.search_instance.product_id))
        self.delete_employee_instance.find_employee_by_id()
        self.search_instance.close()
        self.setFixedSize(700, 650)
        

    def preferences(self):
        self.preferences_instance = preferencesClass()
        self.preferences_instance.connect(self.preferences_instance.question,
                                          SIGNAL('clicked()'), self.email_question)
        self.stacked_layout.addWidget(self.preferences_instance)

    def log_in(self):
        self.log_in_instance = logInClass()
        self.log_in_instance.enter_button.clicked.connect(self.find_account)
        self.log_in_instance.connect(self.log_in_instance.forgot_password,
                                     SIGNAL('clicked()'), self.reset_password)
        self.stacked_layout.addWidget(self.log_in_instance)

    def keyPressEvent(self, qKeyEvent):
        if self.stacked_layout.currentIndex() == 12:
            if qKeyEvent.key() == Qt.Key_Return: 
                self.find_account()

    def password_reset(self):
        self.password_reset_instance = PasswordResetClass()
        self.password_reset_instance.button.clicked.connect(self.display_message)
        self.password_reset_instance.back.clicked.connect(self.log_in_function)
        self.stacked_layout.addWidget(self.password_reset_instance)

    def change_password(self):
        self.change_password_instance = ChangePasswordClass(
            "Please Enter a new password, then re-enter it below.", 0)
        self.change_password_instance.button.clicked.connect(self.match_passwords)
        self.stacked_layout.addWidget(self.change_password_instance)
        self.change_password_instance2 = ChangePasswordClass(
            "Please enter a new password below. The Code has been sent to your email address.", 1)
        self.change_password_instance2.button.clicked.connect(self.match_codes)
        self.stacked_layout.addWidget(self.change_password_instance2)
                
        
    def Settings(self):
        #Adding Actions
        self.add_product_action = QAction("Add a New Product", self)
        self.add_product_action.setShortcut("Ctrl+P")
        self.edit_product_action = QAction("Edit a Product", self)
        self.delete_a_product_action = QAction("Delete a Product", self)
        self.find_a_product_action = QAction("Find a Product", self)
        self.manage_current_stock_action = QAction("Manage Stock", self)
        self.create_order_action = QAction("Create New Order", self)
        self.create_order_action.setShortcut("Ctrl+O")
        self.add_new_member_action = QAction("Add New Member", self)
        self.add_new_member_action.setShortcut("Ctrl+M")
        self.edit_member_action  = QAction("Edit a Member", self)
        self.remove_a_member_action = QAction("Delete a Member", self)
        self.add_an_employee_action = QAction("Add Employee", self)
        self.add_an_employee_action.setShortcut("Ctrl+E")
        self.edit_employee_action = QAction("Edit an Employee", self)
        self.remove_an_employee_action = QAction("Delete Employee", self)
        self.explanation_action = QAction("Why Can't I Access These?", self)
        self.preferences_action = QAction("Preferences", self) 
        self.search_product_action = QAction("Search Window", self)
        self.search_product_action.setShortcut("Ctrl+F")
        self.change_password_action = QAction("Change Password", self)
        self.log_off_action = QAction("Log off", self)
        self.log_off_action.setShortcut(Qt.Key_Escape)
        #Creating MenuBar
        self.menu = QMenuBar()


        #Adding Menu to MenuBar
        
        self.productsmenu = self.menu.addMenu("Product")
        self.productsmenu.addAction(self.add_product_action)
        self.productsmenu.addAction(self.edit_product_action)
        self.productsmenu.addAction(self.delete_a_product_action)
        self.stockmenu = self.menu.addMenu("Stock")
        self.stockmenu.addAction(self.manage_current_stock_action)
        self.ordermenu = self.menu.addMenu("Order")
        self.ordermenu.addAction(self.create_order_action)
        self.membersmenu = self.menu.addMenu("Member")
        self.membersmenu.addAction(self.add_new_member_action)
        self.membersmenu.addAction(self.edit_member_action)
        self.membersmenu.addAction(self.remove_a_member_action)
        self.employeemenu = self.menu.addMenu("Employee")
        self.employeemenu.addAction(self.add_an_employee_action)
        self.employeemenu.addAction(self.edit_employee_action)
        self.employeemenu.addAction(self.remove_an_employee_action)
        self.employeemenu.addAction(self.explanation_action)
        self.optionsmenu = self.menu.addMenu("Options")
        self.optionsmenu.addAction(self.preferences_action)
        self.optionsmenu.addAction(self.search_product_action)
        self.optionsmenu.addAction(self.change_password_action)
        self.optionsmenu.addAction(self.log_off_action)
        
         #Add connections to buttons
        self.add_product_action.triggered.connect(self.add_product_function)
        self.edit_product_action.triggered.connect(self.edit_product_function)
        self.delete_a_product_action.triggered.connect(self.delete_product_function)
        self.manage_current_stock_action.triggered.connect(self.manage_stock_function)
        self.create_order_action.triggered.connect(self.create_new_order_function)
        self.add_new_member_action.triggered.connect(self.add_new_member_function)
        self.edit_member_action.triggered.connect(self.edit_member_function)
        self.remove_a_member_action.triggered.connect(self.remove_a_member_function)
        self.add_an_employee_action.triggered.connect(self.add_an_employee_function)
        self.edit_employee_action.triggered.connect(self.edit_employee_function)
        self.remove_an_employee_action.triggered.connect(self.remove_an_employee_function)
        self.explanation_action.triggered.connect(self.explanation_function)
        self.search_product_action.triggered.connect(self.search_product_function)
        self.preferences_action.triggered.connect(self.preferences_function)
        self.log_off_action.triggered.connect(self.log_off_function)
        self.change_password_action.triggered.connect(self.change_password_function)

    #Connecting Button Clicks to Doing Something   

    def add_product_function(self, product_name_info):
        self.stacked_layout.setCurrentIndex(0)
        self.add_product_instance.price_button.setText("")
        self.add_product_instance.size_integer.setText("")
        self.add_product_instance.size_button.setCurrentIndex(0)
        self.add_product_instance.category1_button.setCurrentIndex(0)
        self.add_product_instance.category2_button.setCurrentIndex(0)
        self.add_product_instance.location1.setText("")
        self.add_product_instance.location2.setText("")
        self.add_product_instance.product_name.setText("")
        self.add_product_instance.image_pixmap = QPixmap(".\ProductImages\Default.jpg")
        self.add_product_instance.scaled_image = self.add_product_instance.image_pixmap.scaled(
            300, 300, Qt.IgnoreAspectRatio, Qt.FastTransformation)
        self.add_product_instance.image.setPixmap(self.add_product_instance.scaled_image)
        self.edit_product_instance.path.setText("")
        
        self.setFixedSize(700, 600)

    def edit_product_function(self):
        self.stacked_layout.setCurrentIndex(1)
        self.edit_product_instance.find_product_id_line_edit.setText("")
        self.edit_product_instance.price_button.setText("")
        self.edit_product_instance.size_integer.setText("")
        self.edit_product_instance.size_button.setCurrentIndex(0)
        self.edit_product_instance.category1_button.setCurrentIndex(0)
        self.edit_product_instance.category2_button.setCurrentIndex(0)
        self.edit_product_instance.location1.setText("")
        self.edit_product_instance.location2.setText("")
        self.edit_product_instance.product_name.setText("")
        self.edit_product_instance.image_pixmap = QPixmap(".\ProductImages\Default.jpg")
        self.edit_product_instance.scaled_image = self.edit_product_instance.image_pixmap.scaled(
            300, 300, Qt.IgnoreAspectRatio, Qt.FastTransformation)
        self.edit_product_instance.image.setPixmap(self.edit_product_instance.scaled_image)
        self.edit_product_instance.path.setText("")
        
        self.setFixedSize(700, 700)
    def delete_product_function(self):
        self.stacked_layout.setCurrentIndex(2)
        self.delete_product_instance.find_product_id_line_edit.setText("")
        self.delete_product_instance.price_button.setText("")
        self.delete_product_instance.size_integer.setText("")
        self.delete_product_instance.size_button.setCurrentIndex(0)
        self.delete_product_instance.category1_button.setCurrentIndex(0)
        self.delete_product_instance.category2_button.setCurrentIndex(0)
        self.delete_product_instance.location1.setText("")
        self.delete_product_instance.location2.setText("")
        self.delete_product_instance.product_name.setText("")
        self.delete_product_instance.image_pixmap = QPixmap(".\ProductImages\Default.jpg")
        self.delete_product_instance.scaled_image = self.delete_product_instance.image_pixmap.scaled(
            300, 300, Qt.IgnoreAspectRatio, Qt.FastTransformation)
        self.delete_product_instance.image.setPixmap(self.delete_product_instance.scaled_image)
        self.delete_product_instance.path.setText("")
        self.setFixedSize(700, 700)

    def manage_stock_function(self):
        self.stacked_layout.setCurrentIndex(3)
        self.manage_stock_instance.product_id.setText("")
        self.manage_stock_instance.product_name.setText("Product Name")
        self.manage_stock_instance.stock1.setValue(0)
        self.manage_stock_instance.stock2.setValue(0)
        self.manage_stock_instance.prediction.setText("")
        self.manage_stock_instance.current_stock_groupbox.setDisabled(True)
        self.manage_stock_instance.stock_prediction_groupbox.setDisabled(True)
        self.manage_stock_instance.path = (".\images\Default.png")
        self.manage_stock_instance.image_pixmap = QPixmap(self.manage_stock_instance.path)
        self.manage_stock_instance.scaled_image = self.manage_stock_instance.image_pixmap.scaled(
            180, 180, Qt.IgnoreAspectRatio, Qt.FastTransformation)
        self.manage_stock_instance.image.setPixmap(self.manage_stock_instance.scaled_image)
        plt.clf()
        self.setFixedSize(900, 850)

    def create_new_order_function(self):
        self.create_order_instance.current_order.clearContents()
        for line in range(0, self.create_order_instance.current_order.rowCount()):
            self.create_order_instance.current_order.removeRow(line)
        self.create_order_instance.current_order.removeRow(0)
        self.create_order_instance.subtotal.setText("0.0")
        self.create_order_instance.total.setText("0.0")
        self.create_order_instance.discount_line_edit.setText("0.0")
        self.stacked_layout.setCurrentIndex(4)
        self.setFixedSize(1200, 770)
        self.create_order_instance.model.select()

    def add_new_member_function(self):
        self.stacked_layout.setCurrentIndex(5)
        self.add_member_instance.name_title.setCurrentIndex(0)
        self.add_member_instance.first_name.setText("")
        self.add_member_instance.last_name.setText("")
        self.add_member_instance.postcode.setText("")
        self.add_member_instance.county.setCurrentIndex(0)
        self.add_member_instance.city.setText("")
        self.add_member_instance.town.setText("")
        self.add_member_instance.street.setText("")
        self.add_member_instance.houseno.setValue(0)
        self.add_member_instance.telephone_number.setText("")
        self.add_member_instance.email.setText("")
        self.setFixedSize(700, 750)

    def edit_member_function(self):
        self.stacked_layout.setCurrentIndex(6)
        self.edit_member_instance.find_member_id_line_edit.setText("")
        self.edit_member_instance.name_title.setCurrentIndex(0)
        self.edit_member_instance.first_name.setText("")
        self.edit_member_instance.last_name.setText("")
        self.edit_member_instance.postcode.setText("")
        self.edit_member_instance.county.setCurrentIndex(0)
        self.edit_member_instance.city.setText("")
        self.edit_member_instance.town.setText("")
        self.edit_member_instance.street.setText("")
        self.edit_member_instance.houseno.setValue(0)
        self.edit_member_instance.telephone_number.setText("")
        self.edit_member_instance.email.setText("")
        self.setFixedSize(700, 800)
        
    def remove_a_member_function(self):
        self.stacked_layout.setCurrentIndex(7)
        self.edit_member_instance.find_member_id_line_edit.setText("")
        self.delete_member_instance.name_title.setCurrentIndex(0)
        self.delete_member_instance.first_name.setText("")
        self.delete_member_instance.last_name.setText("")
        self.delete_member_instance.postcode.setText("")
        self.delete_member_instance.county.setCurrentIndex(0)
        self.delete_member_instance.city.setText("")
        self.delete_member_instance.town.setText("")
        self.delete_member_instance.street.setText("")
        self.delete_member_instance.houseno.setValue(0)
        self.delete_member_instance.telephone_number.setText("")
        self.delete_member_instance.email.setText("")
        self.setFixedSize(700, 800)

    def add_an_employee_function(self):
        self.stacked_layout.setCurrentIndex(8)
        self.add_employee_instance.user_name_output.setText("")
        self.add_employee_instance.first_name.setText("")
        self.add_employee_instance.first_name_output.setText("")
        self.add_employee_instance.last_name.setText("")
        self.add_employee_instance.last_name_output.setText("")
        self.add_employee_instance.email_address.setText("")
        self.add_employee_instance.email_address_output.setText("")
        self.setFixedSize(700, 600)

    def edit_employee_function(self):
        self.stacked_layout.setCurrentIndex(9)
        self.edit_employee_instance.find_employee_id_line_edit.setText("")
        self.edit_employee_instance.user_name_output.setText("")
        self.edit_employee_instance.first_name.setText("")
        self.edit_employee_instance.first_name_output.setText("")
        self.edit_employee_instance.last_name.setText("")
        self.edit_employee_instance.last_name_output.setText("")
        self.edit_employee_instance.email_address.setText("")
        self.edit_employee_instance.email_address_output.setText("")
        self.setFixedSize(700, 650)
    

    def remove_an_employee_function(self):
        self.stacked_layout.setCurrentIndex(10)
        self.delete_employee_instance.find_employee_id_line_edit.setText("")
        self.delete_employee_instance.user_name_output.setText("")
        self.delete_employee_instance.first_name.setText("")
        self.delete_employee_instance.first_name_output.setText("")
        self.delete_employee_instance.last_name.setText("")
        self.delete_employee_instance.last_name_output.setText("")
        self.delete_employee_instance.email_address.setText("")
        self.delete_employee_instance.email_address_output.setText("")
        self.setFixedSize(700, 650)

    def explanation_function(self):
        self.error_message_instance = ErrorMessageClass(
            """The Reason you cannot access the above options is because you
            \n must be logged into the master account to access them.""")
        self.error_message_instance.move(750,500)
        self.error_message_instance.show()
        self.error_message_instance.raise_()
    def search_product_function(self):
        self.search()

    def preferences_function(self):
        self.stacked_layout.setCurrentIndex(11)
        self.setFixedSize(900, 850)

    def log_off_function(self):
        self.decision = PopUpWindow("Are you sure you want to log off?",
                                    QDialogButtonBox.Yes, QDialogButtonBox.No)
        self.decision.buttonBox.button(QDialogButtonBox.Yes).clicked.connect(
            self.log_off_true)
        self.decision.buttonBox.button(QDialogButtonBox.No).clicked.connect(
            self.log_off_false)

    def log_off_true(self):
        self.log_in_function()
        self.decision.close()
        
    def log_off_false(self):
        self.decision.close()

    def log_in_function(self):
        self.stacked_layout.setCurrentIndex(12)
        self.setFixedSize(600,460)
        self.menu.hide()
        self.log_in_instance.username.setText("")
        self.log_in_instance.password.setText("")

    def password_reset_function(self):
        self.stacked_layout.setCurrentIndex(13)
        self.setFixedSize(600,400)
        self.password_reset_instance.email_address.setText("")

    def change_password_function(self):
        if self.menu.isHidden():
            self.stacked_layout.setCurrentIndex(14)
            self.setFixedSize(600,400)
            self.change_password_instance.password1.setText("")
            self.change_password_instance.password2.setText("")
        else:
            try:
                self.send_code_to_email(self.log_in_instance.username.text())
                self.stacked_layout.setCurrentIndex(15)
                self.setFixedSize(650,400)
                self.change_password_instance2.password1.setText("")
                self.change_password_instance2.password2.setText("")
                self.change_password_instance2.code.setText("")

            except smtplib.SMTPAuthenticationError:
                self.error_message_instance = ErrorMessageClass(
                    """Error: The Gmail account details are not valid.""")
                self.error_message_instance.move(750,500)
                self.error_message_instance.show()
                self.error_message_instance.raise_()

            except TimeoutError:
                self.error_message_instance = ErrorMessageClass(
                    """A connection attempt failed because the connected
                       party did not properly respond after a period of time.""")
                self.error_message_instance.move(750,500)
                self.error_message_instance.show()
                self.error_message_instance.raise_()

            except:
                self.error_message_instance = ErrorMessageClass(
                    """An error occured and the email could not be sent.""")
                self.error_message_instance.move(750,500)
                self.error_message_instance.show()
                self.error_message_instance.raise_()
            


        
    def find_account(self):
        settings = getSettings()
        encrypted_password_entered = change_password(
            self.log_in_instance.password.text(), 3)
        self.return_signal = find_username_and_password(
            self.log_in_instance.username.text(), encrypted_password_entered)
        if self.return_signal == 1:
            self.error_message_instance = ErrorMessageClass(
                """Sorry the Username and Password you entered are incorrect""")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()
        elif self.return_signal == 2:
            if self.log_in_instance.password.text() == 'password':
                self.change_password_function()
            else:
                #IF THE LOG IN IS SUCCESSFUL
                self.create_new_order_function()
                self.menu.show()
                username = find_employee_by_username(self.log_in_instance.username.text())
                EmployeeID = username[3]
                if int(EmployeeID) != 1:
                    self.add_an_employee_action.setDisabled(True)
                    self.edit_employee_action.setDisabled(True)
                    self.remove_an_employee_action.setDisabled(True)
                    self.explanation_action.setVisible(True)
                else:
                    self.add_an_employee_action.setEnabled(True)
                    self.edit_employee_action.setEnabled(True)
                    self.remove_an_employee_action.setEnabled(True)
                    self.explanation_action.setVisible(False)
                check_for_stock_updates(self)



    def reset_password(self):
        self.password_reset_function()

    def email_question(self):
        self.error_message_instance = ErrorMessageClass(
            """This is the email address and password used to send the: \n -
               Invoice Form \n - Password Reset Code \n - Account Reminder
               \n  \n This must be a Gmail account.""")
        self.error_message_instance.move(750,500)
        self.error_message_instance.show()
        self.error_message_instance.raise_()

    def match_passwords(self):
        if self.change_password_instance.password1.text() == self.change_password_instance.password2.text():
            encrypted_password = change_password(self.change_password_instance.password1.text(), 3)
            change_employee_password(self.log_in_instance.username.text(), encrypted_password)
            self.error_message_instance = ErrorMessageClass("Your Password has Sucessfully been changed!")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()
            self.create_new_order_function()
            self.menu.show()
            username = find_employee_by_username(self.log_in_instance.username.text())
            EmployeeID = username[3]
            if int(EmployeeID) != 1:
                self.add_an_employee_action.setDisabled(True)
                self.edit_employee_action.setDisabled(True)
                self.remove_an_employee_action.setDisabled(True)
                self.explanation_action.setVisible(True)
            else:
                self.add_an_employee_action.setEnabled(True)
                self.edit_employee_action.setEnabled(True)
                self.remove_an_employee_action.setEnabled(True)
                self.explanation_action.setVisible(False)


        else:
            self.error_message_instance = ErrorMessageClass("Sorry your passwords do not match.")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()

    def match_codes(self):
        
        if int(self.code) != int(self.change_password_instance2.code.text()):
            self.error_message_instance = ErrorMessageClass(
                """The Code you entered does not match the one emailed to you.""")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()

        elif self.change_password_instance2.password1.text() != self.change_password_instance2.password2.text():
            self.error_message_instance = ErrorMessageClass("The passwords you entered do not match")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()
        
        elif (self.change_password_instance2.password1.text() == self.change_password_instance2.password2.text(
            ) and int(self.code) == int(self.change_password_instance2.code.text())):
            encrypted_password = change_password(self.change_password_instance2.password1.text(), 3)
            change_employee_password(self.log_in_instance.username.text(), encrypted_password)
            self.error_message_instance = ErrorMessageClass("Your Password has Sucessfully been changed!")
            self.error_message_instance.move(750,500)
            self.error_message_instance.show()
            self.error_message_instance.raise_()
            self.create_new_order_function()
            self.menu.show()
            
    

    def display_message(self):
        self.valid = find_employee_by_email(self.password_reset_instance.email_address.text())
        if self.valid:
            username = get_employee_username(self.password_reset_instance.email_address.text())
            password = get_employee_password(self.password_reset_instance.email_address.text())
            first_name = get_employee_first_name(self.password_reset_instance.email_address.text())
            try:
                self.send_password_reset_email(self.password_reset_instance.email_address.text(),
                                               username, password, first_name)
                self.log_in_function()
                self.error_message_instance = ErrorMessageClass(
                    """Your Username and Password have been sent to your email address.""")
                self.error_message_instance.move(750,500)
                self.error_message_instance.show()
                self.error_message_instance.raise_()
            except smtplib.SMTPAuthenticationError:
                self.error_message_instance = ErrorMessageClass("The Gmail Account Details are not valid.")
                self.error_message_instance.move(750,500)
                self.error_message_instance.show()
                self.error_message_instance.raise_()

        else:
            self.error_message_instance = ErrorMessageClass(
                "Sorry the Email address does not match any of the Accounts.")

    def send_password_reset_email(self, email_address, username, password, first_name):
            settings = getSettings()
            subject = ("Your Beacon Vet Account Details")

            send_from = '{0}'.format(settings[0][10])
            decrypted_password = change_password(settings[0][11], -3)

            msg = "\r\n".join([
                  "From: [email protected]",
                    "To: {0}".format(email_address),
                    "Subject: Beacon Vets Account Details",
                  "",
                  ("""Hello {0}, Here are your account details: \n
                    \n Username:   {1} \n  Password:   {2}""".format(
                        first_name, username, password))])

            mail = smtplib.SMTP('smtp.gmail.com','587')
            mail.ehlo()
            mail.starttls()
            mail.login(send_from, decrypted_password)
            mail.sendmail(send_from, email_address, msg)
            mail.close()

    def send_code_to_email(self, username):
        settings = getSettings()
        self.code = random.randint(1000,9999)
        print(self.code)
        send_from = '{0}'.format(settings[0][10])
        decrypted_password = change_password(settings[0][11], -3)
        employee_info = find_employee_by_username(username)
        message = "Hello {0}, \n \n Your Reset Password Code is:  ".format(employee_info[0])
        msg = "\r\n".join([
          "From: [email protected]",
          "To: {0}".format(employee_info[2]),
          "Subject: Password Reset Code",
          "",
          ("{0}{1}".format(message ,str(self.code)))])
        mail = smtplib.SMTP('smtp.gmail.com','587')
        mail.ehlo()
        mail.starttls()
        mail.login('{0}'.format(send_from) , decrypted_password)
        mail.sendmail('{0}'.format(send_from), str(employee_info[2]) , msg)
        mail.close()
 def clockConnection(self):
     if not self.SQL == None:
         self.SQL.closeConnection()
     self.SQL = SQLConnection.SQLConnection()
     self.clockConnectionVar = self.root.after(15 * 60 * 1000,
                                               self.clockConnection)
Example #26
0
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Database Program")

        self.setStyleSheet(css)
        
        #Create Actions
        self.display_member = QAction("Display Member",self)
        self.display_parent = QAction("Display Parent",self)
        self.display_invoices = QAction("Display Invoices",self)
        self.add_member = QAction("Add Member",self)
        self.edit_member = QAction("Edit Member",self)
        self.delete_member = QAction("Delete Member",self)
        self.add_parent = QAction("Add Parent",self)
        self.edit_parent = QAction("Edit Parent",self)
        self.delete_parent = QAction("Delete Parent",self)
        self.manage_invoices = QAction("Manage Invoices",self)
        self.print_invoices = QAction("Print Invoices",self)
        self.email_invoices = QAction("Email Invoices",self)
        self.report_invoice = QAction("Report Invoice",self)
        

        #Create the menu bar
        self.menu_bar = QMenuBar()
        self.database_toolbar = QToolBar()
        self.manage_data_toolbar = QToolBar()
        self.send_invoices_toolbar = QToolBar()
        self.reports_toolbar = QToolBar()
        self.display_database_menu = self.menu_bar.addMenu("Display Database")
        self.manage_data_menu = self.menu_bar.addMenu("Manage Data")
        self.send_invoices_menu = self.menu_bar.addMenu("Send Invoices")
        self.reports_menu = self.menu_bar.addMenu("Reports")
        

        #Create toolbar
        self.display_database_menu.addAction(self.display_member)
        self.display_database_menu.addAction(self.display_parent)
        self.display_database_menu.addAction(self.display_invoices)
        self.manage_data_menu.addAction(self.add_member)
        self.manage_data_menu.addAction(self.edit_member)
        self.manage_data_menu.addAction(self.delete_member)
        self.manage_data_menu.addAction(self.add_parent)
        self.manage_data_menu.addAction(self.edit_parent)
        self.manage_data_menu.addAction(self.delete_parent)
        self.manage_data_menu.addAction(self.manage_invoices)
        self.send_invoices_menu.addAction(self.print_invoices)
        self.send_invoices_menu.addAction(self.email_invoices)
        self.reports_menu.addAction(self.report_invoice)

        #Add toolbars to window
        self.database_toolbar.addAction(self.display_member)
        self.database_toolbar.addAction(self.display_parent)
        self.database_toolbar.addAction(self.display_invoices)
        self.manage_data_toolbar.addAction(self.add_member)
        self.manage_data_toolbar.addAction(self.edit_member)
        self.manage_data_toolbar.addAction(self.delete_member)
        self.manage_data_toolbar.addAction(self.add_parent)
        self.manage_data_toolbar.addAction(self.edit_parent)
        self.manage_data_toolbar.addAction(self.delete_parent)
        self.manage_data_toolbar.addAction(self.manage_invoices)
        self.send_invoices_toolbar.addAction(self.print_invoices)
        self.send_invoices_toolbar.addAction(self.email_invoices)
        self.reports_toolbar.addAction(self.report_invoice)

        #Add toolbar
        self.addToolBar(self.database_toolbar)
        self.addToolBar(self.manage_data_toolbar)
        self.addToolBar(self.send_invoices_toolbar)
        self.addToolBar(self.reports_toolbar)

        #Set menu bar
        self.setMenuBar(self.menu_bar)

        #Create Connections
        self.display_member.triggered.connect(self.show_member)
        self.display_parent.triggered.connect(self.show_parent)
        self.display_invoices.triggered.connect(self.show_invoice)
        self.add_member.triggered.connect(self.add_member_data)
        self.edit_member.triggered.connect(self.edit_member_data)
        self.delete_member.triggered.connect(self.delete_member_data)
        self.add_parent.triggered.connect(self.add_parent_data)
        self.edit_parent.triggered.connect(self.edit_parent_data)
        self.delete_parent.triggered.connect(self.delete_parent_data)
        self.manage_invoices.triggered.connect(self.manage_invoice_data)
        self.print_invoices.triggered.connect(self.print_invoice_data)
        self.email_invoices.triggered.connect(self.email_invoice_data)
        self.report_invoice.triggered.connect(self.report_invoice_data)

        #Resizing
        self.resize(1200,800)

        #Opening Database
        self.open_database()
        self.show_member()

        self.show_login()
        #self.create_file()
        #self.show()
        #self.raise_()
        
    def show_login(self):
        self.loginscreen = LoginScreen()
        self.loginscreen.show()

        self.loginscreen.accept_button.clicked.connect(self.login)

    def create_file(self):
        user = User()
        user.username = "******"
        user.password = "******"
        with open("user.dat",mode="wb") as my_file:
            pickle.dump(user,my_file)
    
    def login(self):
        with open("user.dat",mode="rb") as my_file:
            user = pickle.load(my_file)
            
        if self.loginscreen.username.text() == user.username and self.loginscreen.password.text() == user.password:
            print("Valid")
            window.show()
            window.raise_()
            self.loginscreen.close()
        elif self.loginscreen.username.text() == user.username and self.loginscreen.password.text() != user.password:
            self.incorrect_screen = IncorrectDetails()
            self.incorrect_screen.incorrect_password()
        elif self.loginscreen.username.text() != user.username and self.loginscreen.password.text() == user.password:
            self.incorrect_screen = IncorrectDetails()
            self.incorrect_screen.incorrect_username()
        else:
            self.incorrect_screen = IncorrectDetails()
            self.incorrect_screen.incorrect_username_and_password()
        
    def open_database(self):
        path = "scout_database.db"
        print("Path: ",path)
        self.connection = SQLConnection(path)
        ok = self.connection.open_database()
        print("Opened Ok: ",ok)


    def show_member_table(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.display_widget.show_table("Member")

    def show_parent_table(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.display_widget.show_table("Parent")

    def show_invoice_table(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.display_widget.show_table("Invoice")

    def show_invoice_query(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        query = self.connection.show_invoices()
        self.display_widget.show_results(query)
    
    def show_invoice_relationships(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()   
        self.display_widget.show_relationship_invoice_table()
        self.setCentralWidget(self.display_widget)
        




    def show_member(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        
        query = self.connection.show_members()
        self.display_widget.show_results(query)

        self.search_widget = SearchWidgetMembers()
        self.search_widget.order_combobox.currentIndexChanged.connect(self.search_member)
        
        self.main_layout = QVBoxLayout()
        self.main_widget = QWidget()

        self.title = QLabel("Member Table")
        self.title.setAlignment(Qt.AlignCenter)
        self.title.setObjectName('title')

        self.main_layout.addWidget(self.title)
        self.main_layout.addWidget(self.search_widget)
        self.main_layout.addWidget(self.display_widget)

        self.main_widget.setLayout(self.main_layout)
        
        self.setCentralWidget(self.main_widget)

        
    def search_member(self):
        index = self.search_widget.order_combobox.currentIndex()
        if index == 0:
            query = self.connection.show_members()
        if index == 1:
            query = self.connection.order_member_data("MemberDateOfBirth","ASC")
        if index == 2:
            query = self.connection.order_member_data("MemberFirstName","ASC")
        if index == 3:
            query = self.connection.order_member_data("MemberFirstName","DESC")
        if index == 4:
            query = self.connection.order_member_data("MemberLastName","ASC")
        if index == 5:
            query = self.connection.order_member_data("MemberLastName","DESC")
        if index == 6:
            query = self.connection.order_member_data("MemberTownName","ASC")
        if index == 7:
            query = self.connection.order_member_data("MemberTownName","DESC")
        self.display_widget.model.setQuery(query)
        self.display_widget.results_table.show()

    def show_parent(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        
        query = self.connection.show_parents()
        self.display_widget.show_results(query)

        self.search_widget = SearchWidgetParents()
        self.search_widget.order_combobox.currentIndexChanged.connect(self.search_parent)
        
        self.main_layout = QVBoxLayout()
        self.main_widget = QWidget()

        self.title = QLabel("Parent Table")
        self.title.setAlignment(Qt.AlignCenter)
        self.title.setObjectName('title')

        self.main_layout.addWidget(self.title)
        self.main_layout.addWidget(self.search_widget)
        self.main_layout.addWidget(self.display_widget)

        self.main_widget.setLayout(self.main_layout)
        
        self.setCentralWidget(self.main_widget)

    def search_parent(self):
        index = self.search_widget.order_combobox.currentIndex()
        if index == 0:
            query = self.connection.show_parents()
        if index == 1:
            query = self.connection.order_parent_data("ParentFirstName","ASC")
        if index == 2:
            query = self.connection.order_parent_data("ParentFirstName","DESC")
        if index == 3:
            query = self.connection.order_parent_data("ParentLastName","ASC")
        if index == 4:
            query = self.connection.order_parent_data("ParentLastName","DESC")
        if index == 5:
            query = self.connection.order_parent_data("ParentTownName","ASC")
        if index == 6:
            query = self.connection.order_parent_data("ParentTownName","DESC")
        self.display_widget.model.setQuery(query)
        self.display_widget.results_table.show()

    def show_invoice(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        
        query = self.connection.show_invoices()
        self.display_widget.show_results(query)

        self.search_widget = SearchWidgetInvoice()
        self.search_widget.order_combobox.currentIndexChanged.connect(self.search_invoice)
        
        self.main_layout = QVBoxLayout()
        self.main_widget = QWidget()

        self.title = QLabel("Invoice Table")
        self.title.setAlignment(Qt.AlignCenter)
        self.title.setObjectName('title')

        self.main_layout.addWidget(self.title)
        self.main_layout.addWidget(self.search_widget)
        self.main_layout.addWidget(self.display_widget)

        self.main_widget.setLayout(self.main_layout)
        
        self.setCentralWidget(self.main_widget)

    def search_invoice(self):
        index = self.search_widget.order_combobox.currentIndex()
        if index == 0:
            query = self.connection.show_invoices()
        if index == 1:
            query = self.connection.order_invoice_data("DateInvoiceWasSent","ASC")
        if index == 2:
            query = self.connection.order_invoice_data("ParentFirstName","ASC")
        if index == 3:
            query = self.connection.order_invoice_data("ParentFirstName","DESC")
        if index == 4:
            query = self.connection.order_invoice_data("ParentLastName","ASC")
        if index == 5:
            query = self.connection.order_invoice_data("ParentLastName","DESC")
        if index == 6:
            query = self.connection.order_invoice_data("WasInvoicePaid","ASC")
        self.display_widget.model.setQuery(query)
        self.display_widget.results_table.show()

        
    def add_member_data(self):
        self.show_member_table()

        self.data_dialog = EnterMemberDataDialog()
        self.data_dialog.updatedData.connect(self.display_widget.refresh)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.display_widget)
        self.layout.addWidget(self.data_dialog)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)
        

    def edit_member_data(self):        
        self.show_member_table()

        self.search_dialog = SearchDialog()
        
        self.search_dialog.updatedData.connect(self.return_searched_data_member)

        self.label = QLabel("Click on a field to edit it.")
        self.label.setAlignment(Qt.AlignCenter)
        
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.search_dialog)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.display_widget)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def return_searched_data_member(self):
        text = self.search_dialog.search_for_member.text()
        filter_query = "MemberFirstName like '%{0}%' or MemberLastName like '%{0}%'".format(text)
        self.display_widget.model.setFilter(filter_query)
        self.display_widget.model.select()
        self.display_widget.results_table.setModel(self.display_widget.model)
        
    def delete_member_data(self):
        self.show_member_table()

        self.search_dialog = SearchDialog()
        self.search_dialog.updatedData.connect(self.return_searched_data_member)

        self.display_widget.results_table.doubleClicked.connect(self.delete_row_clicked)

        self.label = QLabel("Double click a row to delete.")
        self.label.setAlignment(Qt.AlignCenter)


        self.layout = QVBoxLayout()
        self.layout.addWidget(self.search_dialog)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.display_widget)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)
        
    
    def add_parent_data(self):
        self.show_parent_table()

        self.data_dialog = EnterParentDataDialog()
        self.data_dialog.updatedData.connect(self.display_widget.refresh)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.display_widget)
        self.layout.addWidget(self.data_dialog)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def edit_parent_data(self):        
        self.show_parent_table()
        
        self.search_dialog = SearchDialogParent()
        
        self.search_dialog.updatedData.connect(self.return_searched_data_parent)

        self.label = QLabel("Click on a field to edit it.")
        self.label.setAlignment(Qt.AlignCenter)
        
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.search_dialog)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.display_widget)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)


    def return_searched_data_parent(self):
        text = self.search_dialog.search_for_member.text()
        filter_query = "ParentFirstName like '%{0}%' or ParentLastName like '%{0}%'".format(text)
        self.display_widget.model.setFilter(filter_query)
        self.display_widget.model.select()
        self.display_widget.results_table.setModel(self.display_widget.model)

    
    def delete_parent_data(self):
        self.show_parent_table()

        self.search_dialog = SearchDialogParent()
        self.search_dialog.updatedData.connect(self.return_searched_data_parent)

        self.display_widget.results_table.doubleClicked.connect(self.delete_row_clicked)

        self.label = QLabel("Double click a row to delete.")
        self.label.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.search_dialog)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.display_widget)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def manage_invoice_data(self):
        self.show_invoice_table()

        self.display_widget_2 = DisplayWidget()
        self.display_widget_2.show_table("Parent")

        self.choose_button = ChooseOption()
        self.data_dialog = EnterInvoiceData()
        self.choose_button.addData.connect(self.add_invoice_data)
        self.choose_button.deleteData.connect(self.delete_invoice_data)

        self.label_layout = QHBoxLayout()
        self.parent_label = QLabel("Parent Table")
        self.parent_label.setAlignment(Qt.AlignCenter)
        self.invoice_label = QLabel("Invoice Table")
        self.invoice_label.setAlignment(Qt.AlignCenter)
        self.label_layout.addWidget(self.parent_label)
        self.label_layout.addWidget(self.invoice_label)
        self.label_widget = QWidget()
        self.label_widget.setLayout(self.label_layout)
        
        self.table_layout = QHBoxLayout()
        self.layout = QVBoxLayout()
        self.tables = QWidget()
        self.table_layout.addWidget(self.display_widget_2)
        self.table_layout.addWidget(self.display_widget)
        self.tables.setLayout(self.table_layout)
        self.layout.addWidget(self.label_widget)
        self.layout.addWidget(self.tables)
        self.layout.addWidget(self.choose_button)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def delete_invoice_data(self):
        self.show_invoice_query()

        self.search_dialog = SearchDialogParent()
        self.search_dialog.updatedData.connect(self.return_searched_data_parent)

        self.display_widget.results_table.doubleClicked.connect(self.delete_row_clicked)

        self.label = QLabel("Double click a row to delete.")
        self.label.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.search_dialog)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.display_widget)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def delete_row_clicked(self):
        row = self.display_widget.results_table.selectedIndexes()[0].row()
        self.display_widget.model.removeRow(row)

    def add_invoice_data(self):
        self.show_invoice_table()

        self.data_dialog = EnterInvoiceData()
        self.data_dialog.updatedData.connect(self.add_invoice_data)

        self.table_layout = QHBoxLayout()
        self.layout = QVBoxLayout()
        self.tables = QWidget()
        self.table_layout.addWidget(self.display_widget_2)
        self.table_layout.addWidget(self.display_widget)
        self.tables.setLayout(self.table_layout)
        self.layout.addWidget(self.tables)
        self.layout.addWidget(self.data_dialog)
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.setCentralWidget(self.main_widget)

    def print_invoice_data(self):
        invoice = SendInvoiceData()
        invoice.print_preview()

    def report_invoice_data(self):
        if not hasattr(self,"display_widget"):
            self.display_widget = DisplayWidget()
        self.setCentralWidget(self.display_widget)
        query = self.connection.report_invoices()
        self.display_widget.show_results(query)

    def email_invoice_data(self):
        invoice = EmailInvoice()
        invoice.exec_()
        values = invoice.return_values()
        print(values)
        invoice.email_document(values[0],values[1],values[2],values[3])
Example #27
0
 def open_database(self):
     path = "scout_database.db"
     print("Path: ",path)
     self.connection = SQLConnection(path)
     ok = self.connection.open_database()
     print("Opened Ok: ",ok)
Example #28
0
def main():

    # Create logging environment
    logging_ini_path = Path(__file__).resolve().parent / 'logging.ini'
    logging.config.fileConfig(logging_ini_path)
    mainLogger = logging.getLogger('root')

    # Create header in log file
    mainLogger.info("____________________")
    mainLogger.info("Entering Application")
    mainLogger.info("--------------------")

    # Get configs
    configsListPath = input("Path to your config file: ")
    if configsListPath == "":
        configsListPath = "C:\data\configs.json"
    try:
        assert os.path.exists(
            configsListPath), "File does not exist at " + str(configsListPath)
    except AssertionError:
        subLogger.warning(f"Failed to find csv file at {configsListPath}")
    try:
        with open(configsListPath) as json_config_file:
            cfg = json.load(json_config_file)
    except KeyError:
        print("KeyError")

    data = ""
    exit_sentinel = False
    currentEnvironment = {}

    # Initiate Menu Loop
    while exit_sentinel == False:

        # Print CLI pointer with environment if applicable
        try:
            envName = currentEnvironment["name"]
        except:
            envName = "null"
        command = input(f"env: {envName}>")

        # Check given command
        if command == "env":
            print("Available Environments:")
            for env in cfg:
                print(f"      {env}")

            valid_environment = False
            while valid_environment == False:
                selectedEnvironment = input("select an environment: ")
                try:
                    currentEnvironment = cfg[selectedEnvironment]
                    valid_environment = True
                except KeyError:
                    print(f"'{selectedEnvironment}'' is not a valid choice")
                    valid_environment = False

        elif command == "connect":
            if currentEnvironment:
                sql = SQLConnection.SQLConnection(currentEnvironment)
                sql.name = currentEnvironment["name"]
                sql.host = currentEnvironment["host"]
                sql.user = currentEnvironment["user"]
                sql.password = currentEnvironment["password"]
                sql.database = currentEnvironment["database"]
                sql.menu()
            else:
                print("Please use 'env' to select an environment first")
        elif command == "exit" or command == "quit":
            exit_sentinel = True
        else:
            main_menu_selection = "none"
class DatabaseClass(QWidget):
    """Representation of Preferences Menu"""
    def __init__(self):
        super().__init__()

        #Group Box
        self.group_box = QGroupBox("Preferences:")

        #Creating Buttons
        self.current_database_label = QLabel("Current Database:")
        self.open_database = QPushButton("Open Database")
        self.new_database = QPushButton("Create New Database")
        self.database_path = QLineEdit("database.db")
        self.database_path.setReadOnly(True)
        self.open_database.clicked.connect(self.get_database)

        self.database_layout = QGridLayout()
        self.database_widget = QWidget()
        self.database_layout.addWidget(self.current_database_label, 0,0)
        self.database_layout.addWidget(self.database_path, 0,1)
        self.database_layout.addWidget(self.open_database, 1,0)
        #self.database_layout.addWidget(self.new_database, 1,0)
        self.database_widget.setLayout(self.database_layout)

        self.main_layout = QVBoxLayout()
        self.main_layout.addWidget(self.database_widget)
        
        self.setLayout(self.main_layout)

    def get_database(self):
        path = QFileDialog.getOpenFileName()
        self.database_path.setText(path)
        self.connection = SQLConnection(path)
        self.open_database
        database = self.connection.open_database()
        time.sleep(0.5)
        self.CreatePopUpWindow()
        

    def CreatePopUpWindow(self):
        self.pop_up_instance = PopUpWindow("Beacon Vets Stock Control", 300, 100)
        self.icon = QIcon(QPixmap("./images/Logo.jpg"))
        self.pop_up_instance.setWindowIcon(self.icon)
        self.label = QLabel("Database Sucessfully Opened!")
        self.label.setAlignment(Qt.AlignCenter)
        self.buttonBox = QDialogButtonBox()
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.clicked_ok)
        self.buttonBox.button(QDialogButtonBox.Cancel).clicked.connect(self.clicked_cancel)
        self.pop_up_layout = QVBoxLayout()
        self.pop_up_widget = QWidget()
        self.pop_up_layout.addWidget(self.label)
        self.pop_up_layout.addWidget(self.buttonBox)
        self.pop_up_widget.setLayout(self.pop_up_layout)
        self.pop_up_instance.setCentralWidget(self.pop_up_widget)
        self.pop_up_instance.move(750,500)
        self.pop_up_instance.show()
        self.pop_up_instance.raise_()        

    def clicked_ok(self):
        self.pop_up_instance.close()


    def clicked_cancel(self):
        self.pop_up_instance.close()
Example #30
0
class MainWindow(QMainWindow):
		"""docstring for MainWindowQMainWindow"""
		def __init__(self):
				super( ).__init__()

				self.setWindowTitle("C3 Media Database Management Systems")

				self.availableGraphics = [':Logo.png', ':splash.png', ':home-icon.png',':items-icon.png',':customers-icon.png',':loan-icon.png',':test-icon.png',':logout-icon.png',':quit-icon.png', ':password-icon.png']

				self.icon = QIcon(QPixmap(self.availableGraphics[0]))
				self.setWindowIcon(self.icon)

				self.setFixedSize(1200,680)

				#Connection Attribute stores the database connection
				self.connection = None
				self.access = False

				#stacked layout
				self.stackedLayout = QStackedLayout()

				#Main Widget
				self.widget = QWidget()
				self.widget.setLayout(self.stackedLayout)

				#set central widget to the stacked layout
				self.setCentralWidget(self.widget)

				#add menubar, status and toolbars
				self.settings()
				self.createActionShortcuts()

				#generate widgets
				self.initialCentralWidget()
				self.loggedInWidget()
				self.CreateNewItemWidget()
				self.CreateNewCustomerWidget()
				self.CreateNewLoanWidget()
				self.CreateNewPatTestWidget()
				self.CreateManageItemsWidget()
				self.CreateManageCustomersWidget()
				self.CreateManageLoansLayout()
				self.CreateManagePatTestsLayout()

				#disable actions
				self.DisableActions()

				#set Qt action signals, connections and shortcuts
				self.connections()
				self.createActionShortcuts()

				self.setStyleSheet(maincss)




		def addConnectionsToWidgets(self):
				self.newItem.addConnection(self.connection)
				self.newCustomer.addConnection(self.connection)
				self.newLoan.addConnection(self.connection)
				self.newPatTest.addConnection(self.connection)

				self.manageItems.addConnection(self.connection)
				self.manageCustomers.addConnection(self.connection)
				self.manageLoans.addConnection(self.connection)
				self.managePatTests.addConnection(self.connection)

		def settings(self):
				#file actions
				self.open = QAction("Open Database", self)
				self.closeDatabaseAction = QAction("Close Database", self)
				self.new = QAction("New", self)
				self.Print = QAction("Export", self)
				self.ChangePasswordAction = QAction("Change Password", self)
				self.logoutAction = QAction("Logout", self)
				self.closeWindowAction = QAction("Close Window", self)

				#edit actions
				self.cut = QAction("Cut", self)
				self.copy = QAction("Copy", self)
				self.paste = QAction("Paste...", self)
				self.selectAll = QAction("Select All", self)


				#item actions
				self.addItemAction = QAction('Add Item', self)
				self.manageItemsAction = QAction('Manage Items', self)

				#customer actions
				self.addCustomerAction = QAction('Add Customer', self)
				self.manageCustomersAction = QAction('Manage Customers', self)

				#loan actions
				self.addLoanAction = QAction('Add Loan', self)
				self.manageLoansAction = QAction('Manage Loans', self)

				#pat_test actions
				self.addPatTestAction = QAction('Add Pat Test', self)
				self.managePatTestsAction = QAction('Manage Pat Tests', self)

				#Minimize window actions
				self.homeAction = QAction('Home', self)
				self.minimizeAction = QAction("Minimize", self)


				#help action
				self.help = QAction('Help', self)
				self.about = QAction('About', self)


				#menubar
				self.menubar = QMenuBar()

				#add file menu and add actions to file menu
				self.fileMenu = self.menubar.addMenu("File")
				self.fileMenu.addAction(self.open)
				self.fileMenu.addAction(self.new)
				self.fileMenu.addAction(self.Print)
				self.fileMenu.addSeparator()
				self.fileMenu.addAction(self.ChangePasswordAction)
				self.fileMenu.addAction(self.logoutAction)
				self.fileMenu.addSeparator()
				self.fileMenu.addAction(self.closeWindowAction)


				#add edit menu and add actions to edit menu
				self.editMenu = self.menubar.addMenu("Edit")
				self.editMenu.addAction(self.cut)
				self.editMenu.addAction(self.copy)
				self.editMenu.addAction(self.paste)
				self.editMenu.addAction(self.selectAll)
				self.editMenu.addSeparator()


				#item menu
				self.itemMenu = self.menubar.addMenu("Item")
				self.itemMenu.addAction(self.addItemAction)
				self.itemMenu.addAction(self.manageItemsAction)

				#customer menu
				self.customerMenu = self.menubar.addMenu("Customer")
				self.customerMenu.addAction(self.addCustomerAction)
				self.customerMenu.addAction(self.manageCustomersAction)

				#loan menu
				self.loanMenu = self.menubar.addMenu("Loan")
				self.loanMenu.addAction(self.addLoanAction)
				self.loanMenu.addAction(self.manageLoansAction)


				#pat test menu
				self.patTestMenu = self.menubar.addMenu("Pat Test")
				self.patTestMenu.addAction(self.addPatTestAction)
				self.patTestMenu.addAction(self.managePatTestsAction)

				#window menu
				self.windowMenu = self.menubar.addMenu("Window")
				self.windowMenu.addAction(self.homeAction)
				self.windowMenu.addAction(self.minimizeAction)

				#help menu
				self.helpMenu = self.menubar.addMenu("Help")
				self.helpMenu.addAction(self.help)
				self.helpMenu.addAction(self.about)

				#create menubar
				self.setMenuBar(self.menubar)

				#================== ToolBar ===================#

				#================== Widgets ===================#



				#home widgets
				self.homeTitle = QToolButton()
				self.homeTitle.setText('   Home')
				self.homeTitle.setIcon(QIcon(self.availableGraphics[2]))
				self.homeTitle.setIconSize(QSize(30,30))
				self.homeTitle.setToolButtonStyle(2)
				self.homeTitle.setObjectName('homeButton')
				self.homeTitle.setProperty("buttonClass","leftToolBar")
				self.homeTitle.setCursor(QCursor(Qt.PointingHandCursor))

				#home widgets
				self.logoutButton = QToolButton()
				self.logoutButton.setText('   Logout')
				self.logoutButton.setIcon(QIcon(self.availableGraphics[7]))
				self.logoutButton.setIconSize(QSize(30,30))
				self.logoutButton.setToolButtonStyle(2)
				self.logoutButton.setProperty("buttonClass","leftToolBar")
				self.logoutButton.setCursor(QCursor(Qt.PointingHandCursor))

				#home widgets
				self.changePasswordButton = QToolButton()
				self.changePasswordButton.setText('   Change Password')
				self.changePasswordButton.setIcon(QIcon(self.availableGraphics[9]))
				self.changePasswordButton.setIconSize(QSize(30,30))
				self.changePasswordButton.setToolButtonStyle(2)
				self.changePasswordButton.setProperty("buttonClass","leftToolBar")
				self.changePasswordButton.setCursor(QCursor(Qt.PointingHandCursor))

				#home widgets
				self.quitButton = QToolButton()
				self.quitButton.setText('   Quit Application')
				self.quitButton.setIcon(QIcon(self.availableGraphics[8]))
				self.quitButton.setIconSize(QSize(30,30))
				self.quitButton.setToolButtonStyle(2)
				self.quitButton.setProperty("buttonClass","leftToolBar")
				self.quitButton.setCursor(QCursor(Qt.PointingHandCursor))

				#item widgets
				self.addItemButton = QToolButton()
				self.addItemButton.setText('   Add Item')
				self.addItemButton.setIcon(QIcon(self.availableGraphics[3]))
				self.addItemButton.setIconSize(QSize(30,30))
				self.addItemButton.setToolButtonStyle(2)
				self.addItemButton.setObjectName('addItem')
				self.addItemButton.setProperty("buttonClass","leftToolBar")
				self.addItemButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.manageItemsButton = QToolButton()
				self.manageItemsButton.setText('   Manage Items')
				self.manageItemsButton.setIcon(QIcon(self.availableGraphics[3]))
				self.manageItemsButton.setIconSize(QSize(30,30))
				self.manageItemsButton.setToolButtonStyle(2)
				self.manageItemsButton.setObjectName('manageItem')
				self.manageItemsButton.setProperty("buttonClass","leftToolBar")
				self.manageItemsButton.setCursor(QCursor(Qt.PointingHandCursor))

				#customer widgets
				self.addCustomerButton = QToolButton()
				self.addCustomerButton.setText('   Add Customer')
				self.addCustomerButton.setIcon(QIcon(self.availableGraphics[4]))
				self.addCustomerButton.setIconSize(QSize(30,30))
				self.addCustomerButton.setToolButtonStyle(2)
				self.addCustomerButton.setObjectName('addCust')
				self.addCustomerButton.setProperty("buttonClass","leftToolBar")
				self.addCustomerButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.manageCustomersButton = QToolButton()
				self.manageCustomersButton.setText('   Manage Customers')
				self.manageCustomersButton.setIcon(QIcon(self.availableGraphics[4]))
				self.manageCustomersButton.setIconSize(QSize(30,30))
				self.manageCustomersButton.setToolButtonStyle(2)
				self.manageCustomersButton.setObjectName('manageCust')
				self.manageCustomersButton.setProperty("buttonClass","leftToolBar")
				self.manageCustomersButton.setCursor(QCursor(Qt.PointingHandCursor))

				#loan widgets
				self.addLoanButton = QToolButton()
				self.addLoanButton.setText('   Add Loan')
				self.addLoanButton.setIcon(QIcon(self.availableGraphics[5]))
				self.addLoanButton.setIconSize(QSize(30,30))
				self.addLoanButton.setToolButtonStyle(2)
				self.addLoanButton.setObjectName('addLoan')
				self.addLoanButton.setProperty("buttonClass","leftToolBar")
				self.addLoanButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.manageLoansButton = QToolButton()
				self.manageLoansButton.setText('   Manage Loans')
				self.manageLoansButton.setIcon(QIcon(self.availableGraphics[5]))
				self.manageLoansButton.setIconSize(QSize(30,30))
				self.manageLoansButton.setToolButtonStyle(2)
				self.manageLoansButton.setObjectName('manageLoan')
				self.manageLoansButton.setProperty("buttonClass","leftToolBar")
				self.manageLoansButton.setCursor(QCursor(Qt.PointingHandCursor))

				#test widgets
				self.addPatTestButton = QToolButton()
				self.addPatTestButton.setText('   Add Pat-Test')
				self.addPatTestButton.setIcon(QIcon(self.availableGraphics[6]))
				self.addPatTestButton.setIconSize(QSize(30,30))
				self.addPatTestButton.setToolButtonStyle(2)
				self.addPatTestButton.setObjectName('addTest')
				self.addPatTestButton.setProperty("buttonClass","leftToolBar")
				self.addPatTestButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.managePatTestsButton = QToolButton()
				self.managePatTestsButton.setText('   Manage Pat-Tests')
				self.managePatTestsButton.setIcon(QIcon(self.availableGraphics[6]))
				self.managePatTestsButton.setIconSize(QSize(30,30))
				self.managePatTestsButton.setToolButtonStyle(2)
				self.managePatTestsButton.setObjectName('manageTest')
				self.managePatTestsButton.setProperty("buttonClass","leftToolBar")
				self.managePatTestsButton.setCursor(QCursor(Qt.PointingHandCursor))



				#tool bar
				self.leftToolBar = QToolBar()
				self.leftToolBar.setObjectName('left')
				self.leftToolBar.setMovable(False)
				self.addToolBar(Qt.LeftToolBarArea, self.leftToolBar)

				self.spacerWidget = QWidget()
				self.spacerWidget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

				self.leftToolBar.addWidget(self.homeTitle)

				self.leftToolBar.addWidget(self.addItemButton)
				self.leftToolBar.addWidget(self.manageItemsButton)

				self.leftToolBar.addWidget(self.addCustomerButton)
				self.leftToolBar.addWidget(self.manageCustomersButton)

				self.leftToolBar.addWidget(self.addLoanButton)
				self.leftToolBar.addWidget(self.manageLoansButton)

				self.leftToolBar.addWidget(self.addPatTestButton)
				self.leftToolBar.addWidget(self.managePatTestsButton)


				self.leftToolBar.addWidget(self.spacerWidget)

				self.leftToolBar.addWidget(self.logoutButton)
				self.leftToolBar.addWidget(self.changePasswordButton)
				self.leftToolBar.addWidget(self.quitButton)


				self.statusBar = QStatusBar()

				self.setStatusBar(self.statusBar)

		def collapseApp(self):
			self.showMinimized()


		def createActionShortcuts(self):
				#file menu shortcuts
				self.open.setShortcut('Ctrl+O')
				self.new.setShortcut('Ctrl+N')
				self.Print.setShortcut('Ctrl+P')
				self.logoutAction.setShortcut('Ctrl+Shift+L')
				self.closeWindowAction.setShortcut('Ctrl+W')

				#edit menu shortcuts
				self.cut.setShortcut('Ctrl+X')
				self.copy.setShortcut('Ctrl+C')
				self.paste.setShortcut('Ctrl+V')
				self.selectAll.setShortcut('Ctrl+A')

				#window shortcuts
				self.homeAction.setShortcut('Ctrl+Shift+H')
				self.minimizeAction.setShortcut('Ctrl+M')

		def connections(self):
				#menubar connections
				self.open.triggered.connect(self.openDatabase)
				self.new.triggered.connect(self.SelectNewRecordTableDialog)
				self.ChangePasswordAction.triggered.connect(self.changePasswordDialog)
				self.closeWindowAction.triggered.connect(self.close)
				self.minimizeAction.triggered.connect(self.collapseApp)
				self.homeAction.triggered.connect(self.switchToMainMenu)

				#toolbar actions
				self.homeTitle.clicked.connect(self.switchToMainMenu)
				self.addItemButton.clicked.connect(self.switchToNewItem)
				self.addCustomerButton.clicked.connect(self.switchToNewCustomer)
				self.addLoanButton.clicked.connect(self.switchToNewLoan)
				self.addPatTestButton.clicked.connect(self.switchToNewPatTest)

				self.manageItemsButton.clicked.connect(self.switchToManageItems)
				self.manageCustomersButton.clicked.connect(self.switchToManageCustomers)
				self.manageLoansButton.clicked.connect(self.switchToManageLoans)
				self.managePatTestsButton.clicked.connect(self.switchToManagePatTests)

				self.logoutButton.clicked.connect(self.closeDatabase)
				self.changePasswordButton.clicked.connect(self.changePasswordDialog)
				self.quitButton.clicked.connect(self.close)

				#button connections
				self.openDatabaseButton.clicked.connect(self.openDatabase)
				self.closeAppButton.clicked.connect(self.close)

				self.newItem.cancelButton.clicked.connect(self.switchToMainMenu)
				self.newCustomer.cancelButton.clicked.connect(self.switchToMainMenu)
				self.newLoan.cancelButton.clicked.connect(self.switchToMainMenu)
				self.newPatTest.cancelButton.clicked.connect(self.switchToMainMenu)

				#login connections
				self.logoutAction.triggered.connect(self.closeDatabase)

		def DisableActions(self):
				#file actions
				self.open.setEnabled(True)
				self.new.setEnabled(False)
				self.Print.setEnabled(False)
				self.ChangePasswordAction.setEnabled(False)
				self.logoutAction.setEnabled(False)

				#edit actions
				self.cut.setEnabled(False)
				self.copy.setEnabled(False)
				self.paste.setEnabled(False)
				self.selectAll.setEnabled(False)

				#item actions
				self.addItemAction.setEnabled(False)
				self.manageItemsAction.setEnabled(False)

				#customer actions
				self.addCustomerAction.setEnabled(False)
				self.manageCustomersAction.setEnabled(False)

				#loan actions
				self.addLoanAction.setEnabled(False)
				self.manageLoansAction.setEnabled(False)

				#pat_test actions
				self.addPatTestAction.setEnabled(False)
				self.managePatTestsAction.setEnabled(False)

				#window actions
				self.homeAction.setEnabled(True)

				#help actions
				self.help.setEnabled(False)
				self.about.setEnabled(True)

				#database actions
				self.open.setEnabled(True)
				self.closeDatabaseAction.setEnabled(False)

				#ToolBar Acions
				self.homeTitle.setEnabled(False)

				self.addItemButton.setEnabled(False)
				self.manageItemsButton.setEnabled(False)

				self.addCustomerButton.setEnabled(False)
				self.manageCustomersButton.setEnabled(False)

				self.addLoanButton.setEnabled(False)
				self.manageLoansButton.setEnabled(False)

				self.addPatTestButton.setEnabled(False)
				self.managePatTestsButton.setEnabled(False)

				self.logoutButton.setEnabled(False)
				self.changePasswordButton.setEnabled(False)
				self.quitButton.setEnabled(True)


		def enableActions(self):
				#file actions
				self.open.setEnabled(True)
				self.new.setEnabled(True)
				self.ChangePasswordAction.setEnabled(True)
				self.logoutAction.setEnabled(True)

				#edit actions
				self.cut.setEnabled(True)
				self.copy.setEnabled(True)
				self.paste.setEnabled(True)
				self.selectAll.setEnabled(True)

				#item actions
				self.addItemAction.setEnabled(True)
				self.manageItemsAction.setEnabled(True)

				#customer actions
				self.addCustomerAction.setEnabled(True)
				self.manageCustomersAction.setEnabled(True)

				#loan actions
				self.addLoanAction.setEnabled(True)
				self.manageLoansAction.setEnabled(True)

				#pat_test actions
				self.addPatTestAction.setEnabled(True)
				self.managePatTestsAction.setEnabled(True)

				#window actions
				self.homeAction.setEnabled(True)

				#help actions
				self.help.setEnabled(True)
				self.about.setEnabled(True)


				#database actions
				self.open.setEnabled(False)
				self.closeDatabaseAction.setEnabled(True)

				#add connection to widgets
				self.addConnectionsToWidgets()

				#toolbar actions
				self.homeTitle.setEnabled(True)

				self.addItemButton.setEnabled(True)
				self.manageItemsButton.setEnabled(True)

				self.addCustomerButton.setEnabled(True)
				self.manageCustomersButton.setEnabled(True)

				self.addLoanButton.setEnabled(True)
				self.manageLoansButton.setEnabled(True)

				self.addPatTestButton.setEnabled(True)
				self.managePatTestsButton.setEnabled(True)

				self.logoutButton.setEnabled(True)
				self.changePasswordButton.setEnabled(True)
				self.quitButton.setEnabled(True)


		def openDatabase(self):
				if self.connection:
						self.closeDatabase()

				path = "C3_media_database.db"
				self.connection = SQLConnection(path)
				opened = self.connection.openDatabase()

				if opened:
						self.password = self.connection.getPassword()
						self.databaseLogin()
						self.connection.referentialIntegrity()
						self.statusBar.showMessage("Connected to Database: {0}".format(path))
						time.sleep(2)
						self.statusBar.showMessage("")

		def closeDatabase(self):
				if self.connection:
						closed = self.connection.closeDatabase()

						if closed:
								self.statusBar.showMessage("Database has been closed.")
								self.DisableActions()
								self.stackedLayout.setCurrentIndex(0)
								self.access = False
						else:
								self.statusBar.showMessage("An error occured!")
				else:
						self.statusBar.showMessage("No Database to close.")

		def SelectNewRecordTableDialog(self):
				self.selectTableDialogBox = RadioButtonWidget("Please Select a Table", ("Item", "Customer", "Loan", "PAT-Test"), self)
				self.selectTableDialogBox.exec_()



		def initialCentralWidget(self):
				self.openDatabaseButton = QPushButton("Open Database")
				self.openDatabaseButton.setMaximumWidth(200)
				self.openDatabaseButton.setProperty("buttonClass","home")
				self.openDatabaseButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.closeAppButton = QPushButton("Close Application")
				self.closeAppButton.setMaximumWidth(200)
				self.closeAppButton.setProperty("buttonClass","home")
				self.closeAppButton.setCursor(QCursor(Qt.PointingHandCursor))

				self.databaseLayout = QVBoxLayout()

				self.databaseLayout.addWidget(self.openDatabaseButton,Qt.AlignCenter)
				self.databaseLayout.addWidget(self.closeAppButton,Qt.AlignCenter)
				self.databaseLayout.setAlignment(Qt.AlignHCenter)

				self.databaseWidget = QWidget()

				self.databaseWidget.setLayout(self.databaseLayout)

				self.stackedLayout.addWidget(self.databaseWidget)

		def loggedInWidget(self):
				self.mainMenu = MainMenuWidget(self)
				self.mainMenu.setLayout(self.mainMenu.mainLayout)
				self.stackedLayout.addWidget(self.mainMenu)

		def switchToMainMenu(self):
				self.stackedLayout.setCurrentIndex(1)
				self.setStyleSheet(atMain)

		def switchToNewItem(self):
				if hasattr(self, 'newItem'):
						self.newItem.clearForm()
				self.stackedLayout.setCurrentIndex(2)
				self.setStyleSheet(addItemPressed)


		def switchToNewCustomer(self):
				if hasattr(self, 'newCustomer'):
						self.newCustomer.clearForm()
				self.stackedLayout.setCurrentIndex(3)
				self.setStyleSheet(addCustomerPressed)

		def switchToNewLoan(self):
				if hasattr(self, 'newLoan'):
						self.newLoan.clearForm()
				self.stackedLayout.setCurrentIndex(4)
				self.setStyleSheet(addLoanPressed)

		def switchToNewPatTest(self):
				if hasattr(self, 'newPatTest'):
						self.newPatTest.clearForm()
				self.stackedLayout.setCurrentIndex(5)
				self.setStyleSheet(addTestPressed)

		def switchToManageItems(self):
				if hasattr(self, 'manageItems'):
					self.manageItems.clearForm()
				self.stackedLayout.setCurrentIndex(6)
				self.setStyleSheet(manageItemPressed)

		def switchToManageCustomers(self):
				if hasattr(self, 'manageCustomers'):
					self.manageCustomers.clearForm()
				self.stackedLayout.setCurrentIndex(7)
				self.setStyleSheet(manageCustomerPressed)

		def switchToManageLoans(self):
				if hasattr(self, 'manageLoans'):
						self.manageLoans.showAllLoansInTable()
						self.manageLoans.leftWidget.setEnabled(True)
						self.manageLoans.rightWidget.setEnabled(False)
				self.stackedLayout.setCurrentIndex(8)
				self.setStyleSheet(manageLoanPressed)

		def switchToManagePatTests(self):
			if hasattr(self, 'managePatTests'):
				self.managePatTests.showAllPatTestsInTable()
				self.managePatTests.showAllItemsInTable()
			self.stackedLayout.setCurrentIndex(9)
			self.setStyleSheet(manageTestPressed)

		def CreateNewItemWidget(self):
				self.newItem =  NewItemWidget(self)
				self.stackedLayout.addWidget(self.newItem)

		def CreateNewCustomerWidget(self):
				self.newCustomer = NewCustomerWidget(self)
				self.stackedLayout.addWidget(self.newCustomer)

		def CreateNewLoanWidget(self):
				self.newLoan = NewLoanWidget(self)
				self.stackedLayout.addWidget(self.newLoan)

		def CreateNewPatTestWidget(self):
				self.newPatTest = NewPatTestWidget(self)
				self.stackedLayout.addWidget(self.newPatTest)

		def CreateManageItemsWidget(self):
				self.manageItems = ManageItemsWidget(self)
				self.stackedLayout.addWidget(self.manageItems)

		def CreateManageCustomersWidget(self):
				self.manageCustomers = ManageCustomersWidget(self)
				self.stackedLayout.addWidget(self.manageCustomers)

		def CreateManageLoansLayout(self):
				self.manageLoans = ManageLoansWidget(self)
				self.stackedLayout.addWidget(self.manageLoans)

		def CreateManagePatTestsLayout(self):
				self.managePatTests = ManagePatTestsWidget(self)
				self.stackedLayout.addWidget(self.managePatTests)

		def showAboutMessageBox(self):

				aboutText = """This application was built by Joel Butcher using Python3, PyQt4 and uses Sqlite3. \n
								It is design for use by the media department of Cambridge Community Church \n
								to enable the organisation of the equipment owned by the department """

				QMessageBox.about(self, "About", aboutText)

		def createLoginDialog(self):
				self.loginDialog = LoginDialog(self)
				self.loginDialog.exec_()

		def changePasswordDialog(self):
				self.changePasswordWindow = ChangePasswordDialog(self,self.password)
				self.changePasswordWindow.addConnection(self.connection)
				self.changePasswordWindow.exec_()

		def databaseLogin(self):
				self.createLoginDialog()
				password = self.loginDialog.password_entry.text()
				if password == self.password:
						self.access = True
						self.enableActions()
						self.switchToMainMenu()
				else:
						self.login_error_dialog = LoginErrorDialog()
						self.login_error_dialog.exec_()
						self.access = False

		def closeEvent(self, event):
				self.stackedLayout.setCurrentIndex(1)
				if self.access == False:
						self.closeDatabase()

		def closeEvent(self, event):
				self.closeDatabase()