def open_connection(self): print("Opening Database") path = QFileDialog.getOpenFileName() self.connection = SQLConnection(path) ok = self.connection.open_database() print(ok)
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
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,))
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, ))
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 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()
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)
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 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 __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 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 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
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 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()
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
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)
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")
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)
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])
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 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()
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()