Beispiel #1
0
 def __init__(self, user):
     self.memberHome = QtWidgets.QMainWindow()
     self.ui = Ui_memberMainWindow()
     self.ui.setupUi(self.memberHome)
     self.ui.logoutButton.clicked.connect(self.logout)
     self.confirm = confirmView.ConfirmView()
     self.error = errorView.ErrorView()
     self.notification = notificationView.NotificationView()
     self.userController = UserController()
     self.bookController = BookController()
     self.loanController = LoanController()
     self.loanController.update_fines()
     self.ui.searchButton.clicked.connect(self.search_books)
     self.ui.waitingListButton.clicked.connect(self.add_to_waiting_list)
     self.ui.checkoutButton.clicked.connect(self.checkout_book)
     self.ui.cancelSelected.clicked.connect(self.cancel_waiting)
     self.ui.returnBookButton.clicked.connect(self.return_operation)
     self.ui.payFineButton.clicked.connect(self.payment_operation)
     self.ui.resetButton.clicked.connect(self.reset_book_filters)
     self.ui.waitingListWidget.cellDoubleClicked.connect(self.show_book_info_waiting)
     self.ui.viewBookWidget.cellDoubleClicked.connect(self.show_book_info_view)
     self.ui.searchBookWidget.cellDoubleClicked.connect(self.show_book_info_search)
     self.currentUser = user
     self.payment = paymentView.PaymentView(0)
     self.prepare_scene()
     self.current_book_queries = ["", "", ""]
     self.update_lists()
     self.update_scene()
     self.set_button_effects()
     self.book_info = None
     self.check_notifications()
Beispiel #2
0
    def post(self):
        data = request.get_json()["credentials"]
        email = data["email"]
        password = data["password"]

        userController = UserController()

        # validate that user email doesn't already exist
        if (userController.findByEmail(email) != None):
            return {"error": f"User {email} already exists"}

        try:
            message = userController.registration(email, password)
            access_token = create_access_token(identity=email)
            refresh_token = create_refresh_token(identity=email)

            return {
                "message": message,
                "user": email,
                "access_token": access_token,
                "refresh_token": refresh_token
            }

        except:
            return {"error": "Something went wrong"}
Beispiel #3
0
    def user_page(self, nickname_or_id):
        assert len(nickname_or_id) > 0
        u = UserController.get_user_by_nick_or_id(nickname_or_id)
        if u == None:
            return render_template('404.html')

        user_page_data = UserController.get_user_page_data(u)
        return render_template('user_page.html', **user_page_data)
Beispiel #4
0
    def post(self):
        data = parser.parse_args()
        userController = UserController()

        user = userController.findByUsername(data["username"])
        history = userController.getUserBalanceHistory(user.getUserId)

        return history
Beispiel #5
0
    def start(self):
        self.user_controller = UserController()
        self.user_controller.show_options()
        user = self.user_controller.get_user_logged()

        self.task_controller = TaskController()

        self.task_controller.set_user(user)
        self.task_controller.show_menu()
 def __init__(self):
     self.userRegisterFormScreen = QtWidgets.QDialog()
     self.ui = Ui_userRegisterForm()
     self.userController = UserController()
     self.ui.setupUi(self.userRegisterFormScreen)
     self.ui.registerButton.clicked.connect(self.register_user)
     self.ui.cancelButton.clicked.connect(self.terminate)
     self.error = errorView.ErrorView()
     self.currentUser = None
     self.type = 0  # 0 for create user 1 for update user
Beispiel #7
0
 def __init__(self):
     self.login = QtWidgets.QDialog()
     self.ui = Ui_Login()
     self.ui.setupUi(self.login)
     self.ui.loginButton.clicked.connect(self.user_login)
     self.ui.searchButton.clicked.connect(self.guest_search)
     self.userController = UserController()
     self.error = errorView.ErrorView()
     self.ui.loginButton.released.connect(self.released_color_change)
     self.ui.loginButton.pressed.connect(self.pressed_color_change)
     self.ui.searchButton.released.connect(self.released_color_change)
     self.ui.searchButton.pressed.connect(self.pressed_color_change)
Beispiel #8
0
class App():
    def __init__(self):
        self.start()

    def start(self):
        self.user_controller = UserController()
        self.user_controller.show_options()
        user = self.user_controller.get_user_logged()

        self.task_controller = TaskController()

        self.task_controller.set_user(user)
        self.task_controller.show_menu()
    def post(self):
        data = parser.parse_args()
        userController = UserController()

        if (userController.findByUsername(data["username"]) != None):
            return {"message": f"User {data['username']} already exists"}

        try:
            userController.registration(data["username"],
                                        data["password"])  #, data["email"])
            access_token = create_access_token(identity=data["username"])
            refresh_token = create_refresh_token(identity=data["username"])

            return {
                "message": "User successfully created",
                "access_token": access_token,
                "refresh_token": refresh_token
            }

        except:
            return {"message": "Something went wrong"}
Beispiel #10
0
    def post(self):
        data = parser.parse_args()
        userController = UserController()

        try:
            if (userController.findByUsername(data["username"])) == None:
                return {"message": f"User {data.username} doesn't exist"}

            if userController.login(data["username"],
                                    data["password"]) == True:
                access_token = create_access_token(identity=data["username"])
                refresh_token = create_refresh_token(identity=data["username"])

                return {
                    "message": f"Logged in as {data['username']}",
                    "access_token": access_token,
                    "refresh_token": refresh_token
                }
            else:
                return {"message": "Username or password is incorrect."}

        except:
            return {"message": "Something went wrong, please try again"}
Beispiel #11
0
    def __init__(self, user):
        self.userRegisterScreen = userRegisterFormView.UserRegisterFormView()
        self.bookRegisterScreen = bookRegisterFormView.BookRegisterFormView()
        self.librarianHome = QtWidgets.QMainWindow()
        self.ui = Ui_libraryMainWindow()
        self.ui.setupUi(self.librarianHome)
        self.ui.logoutButton.clicked.connect(self.logout)
        self.ui.userResetButton.clicked.connect(self.reset_user_filters)
        self.ui.bookResetButton.clicked.connect(self.reset_book_filters)
        self.ui.userDeleteButton.clicked.connect(self.delete_selected_user)
        self.ui.userCreateButton.clicked.connect(self.register_user_form)
        self.ui.userUpdateButton.clicked.connect(self.update_user_form)
        self.ui.userSearchButton.clicked.connect(self.search_users)
        self.ui.bookSearchButton.clicked.connect(self.search_books)
        self.ui.bookDeleteButton.clicked.connect(self.delete_selected_book)
        self.ui.bookCreateButton.clicked.connect(self.register_book_form)
        self.ui.bookUpdateButton.clicked.connect(self.update_book_form)
        self.ui.userTableWidget.cellDoubleClicked.connect(
            self.update_user_form)
        self.ui.bookTableWidget.cellDoubleClicked.connect(
            self.update_book_form)
        self.currentUser = user
        self.confirm = confirmView.ConfirmView()
        self.error = errorView.ErrorView()
        self.userController = UserController()
        self.bookController = BookController()
        self.loanController = LoanController()
        self.customize_scene()
        self.current_user_queries = ["", "", ""]
        self.current_book_queries = ["", "", ""]
        self.set_button_effects()
        self.book_ids = []
        self.user_ids = []

        self.list_users()
        self.list_books()
Beispiel #12
0
from six.moves.urllib.request import urlopen
from jose import jwt
import urllib.parse

# Controllers
from controllers.UserController import UserController
from controllers.ErrorController import ErrorController

# Set up Flask/Tornado
app = Flask(__name__)
app.debug = True
CORS(app)
limiter = Limiter(app)

# Set up controllers
user_controller = UserController(app)
error_controller = ErrorController(app)

# Read configuration file
config = configparser.ConfigParser()
config.read('config.ini')
environment = config['server']['environment']
if environment is None or environment == '':
    environment = 'production'

# Auth0 config
auth0_domain = config['auth0']['domain']
auth0_audience = config['auth0']['audience']
auth0_algorithms = [config['auth0']['algorithms']]

# Get config variables
import os
from flask import Flask, request
from controllers.UserController import UserController
from service.UserService import UserService
from dataAccessLayer.UserQueries import UserQueries

userQueries = UserQueries()
userService = UserService(userQueries)
userCtrl = UserController(userService)

from controllers.PostController import PostController
from service.PostService import PostService
from dataAccessLayer.PostsQueries import PostsQueries

from dataAccessLayer.CommentsQueries import CommentsQueries

postQueries = PostsQueries()
commentsQueries = CommentsQueries()
postService = PostService(postQueries, commentsQueries)
postCtrl = PostController(postService)


def create_app():
    app = Flask(__name__)
    app.config.from_object('config.ProductionConfig')
    #app.config.from_envvar('APP_CONFIG')
    #app.config.from_pyfile('config.py')
    return app


app = create_app()
Beispiel #14
0
class MemberHomeView(Ui_memberMainWindow):
    def __init__(self, user):
        self.memberHome = QtWidgets.QMainWindow()
        self.ui = Ui_memberMainWindow()
        self.ui.setupUi(self.memberHome)
        self.ui.logoutButton.clicked.connect(self.logout)
        self.confirm = confirmView.ConfirmView()
        self.error = errorView.ErrorView()
        self.notification = notificationView.NotificationView()
        self.userController = UserController()
        self.bookController = BookController()
        self.loanController = LoanController()
        self.loanController.update_fines()
        self.ui.searchButton.clicked.connect(self.search_books)
        self.ui.waitingListButton.clicked.connect(self.add_to_waiting_list)
        self.ui.checkoutButton.clicked.connect(self.checkout_book)
        self.ui.cancelSelected.clicked.connect(self.cancel_waiting)
        self.ui.returnBookButton.clicked.connect(self.return_operation)
        self.ui.payFineButton.clicked.connect(self.payment_operation)
        self.ui.resetButton.clicked.connect(self.reset_book_filters)
        self.ui.waitingListWidget.cellDoubleClicked.connect(self.show_book_info_waiting)
        self.ui.viewBookWidget.cellDoubleClicked.connect(self.show_book_info_view)
        self.ui.searchBookWidget.cellDoubleClicked.connect(self.show_book_info_search)
        self.currentUser = user
        self.payment = paymentView.PaymentView(0)
        self.prepare_scene()
        self.current_book_queries = ["", "", ""]
        self.update_lists()
        self.update_scene()
        self.set_button_effects()
        self.book_info = None
        self.check_notifications()

    def prepare_scene(self):
        self.ui.greetingLabel.setText("Hi, " + str(self.currentUser.name) + " " + str(self.currentUser.surname))
        self.ui.dateLabel.setText(datetime.datetime.now().strftime("%Y-%m-%d"))
        self.ui.searchBookWidget.setColumnCount(4)
        self.ui.viewBookWidget.setColumnCount(4)
        self.ui.waitingListWidget.setColumnCount(4)
        self.ui.searchBookWidget.setHorizontalHeaderLabels(["Title", "Author", "Year", "User ID"])
        self.ui.viewBookWidget.setHorizontalHeaderLabels(["Title", "Author", "Return Date", "User ID"])
        self.ui.waitingListWidget.setHorizontalHeaderLabels(["Title", "Author", "Published Year", "User ID"])

    def update_scene(self):
        self.currentUser = self.userController.get_user_by_id(self.currentUser.id)
        self.ui.lastBookLabel.setText("Last Loaned Book : " + self.currentUser.lastLoanedBook)
        self.ui.fineLabel.setText("Current Fine Amount : ₺" + str(self.currentUser.currentFine))
        self.ui.totalBooksLabel.setText("Total Loaned Books : " + str(self.currentUser.totalLoanedBooks))

    def logout(self):
        import views.LoginView as LoginView
        self.memberHome.hide()
        self.ui = LoginView.LoginView()
        self.ui.show()

    def show(self):
        self.memberHome.show()

    def reset_book_filters(self):
        self.current_book_queries = ["", "", ""]
        self.update_lists()

    def payment_operation(self):
        self.payment = paymentView.PaymentView(self.currentUser.currentFine)
        self.payment.paymentPrompt.exec_()
        if self.payment.paymentFlag:
            self.loanController.reset_user_loans(self.currentUser.id)
            self.currentUser.currentFine = 0
            self.currentUser.formerFine = 0
            self.userController.update_member_attributes(self.currentUser)
            self.loanController.update_fines()
        self.update_scene()

    def show_book_info_view(self):
        selected_row = self.ui.viewBookWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.viewBookWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))
            self.book_info = bookInfoView.BookInfoView(selected_book)
            self.book_info.update_scene()
            self.book_info.show()

    def show_book_info_search(self):
        selected_row = self.ui.searchBookWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.searchBookWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(selected_book_id)
            self.book_info = bookInfoView.BookInfoView(selected_book)
            self.book_info.update_scene()
            self.book_info.show()

    def show_book_info_waiting(self):
        selected_row = self.ui.waitingListWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.waitingListWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))
            self.book_info = bookInfoView.BookInfoView(selected_book)
            self.book_info.update_scene()
            self.book_info.show()

    def list_books(self):
        query_result = self.bookController.search_books(self.current_book_queries[0], self.current_book_queries[1],
                                                        self.current_book_queries[2])
        i = 0
        current_row_count = query_result.count()
        self.ui.searchBookWidget.setRowCount(current_row_count)

        for record in query_result:
            self.ui.searchBookWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(record["title"]))
            self.ui.searchBookWidget.setItem(i, 1, QtWidgets.QTableWidgetItem(record["author"]))
            self.ui.searchBookWidget.setItem(i, 2, QtWidgets.QTableWidgetItem(record["year"]))
            self.ui.searchBookWidget.setItem(i, 3, QtWidgets.QTableWidgetItem(str(record["_id"])))
            if record["isAvailable"] is False:
                self.ui.searchBookWidget.item(i, 0).setBackground(QtGui.QColor(255, 68, 68))
                self.ui.searchBookWidget.item(i, 1).setBackground(QtGui.QColor(255, 68, 68))
                self.ui.searchBookWidget.item(i, 2).setBackground(QtGui.QColor(255, 68, 68))
            i = i + 1
        self.show()

    def search_books(self):
        search_title = self.ui.titleLineEdit.text()
        search_author = self.ui.authorLineEdit.text()
        search_year = self.ui.yearLineEdit.text()
        self.current_book_queries = [search_title, search_author, search_year]
        self.update_lists()

    def checkout_book(self):
        selected_row = self.ui.searchBookWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.searchBookWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))
            if selected_book.isAvailable is False:
                self.error.set_error_text("You can't checkout an unavailable book.")
                self.error.errorScreen.exec_()
            else:
                indicator = self.loanController.checkout_book(self.currentUser, selected_book)
                if indicator == 0:
                    self.error.set_error_text("You cannot checkout with existing fines.")
                    self.error.errorScreen.exec_()
                elif indicator == 1:
                    self.error.set_error_text("You cannot borrow more than 4 books.")
                    self.error.errorScreen.exec_()
                elif indicator == 2:
                    self.notification.set_notif_text("\""+selected_book.title+"\" is added to your books.")
                    self.notification.notificationScreen.exec_()
                self.update_lists()
                self.update_scene()

    def add_to_waiting_list(self):
        selected_row = self.ui.searchBookWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.searchBookWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))

            if selected_book.isAvailable is True:
                self.error.set_error_text("You can't add an available book to your waiting list.")
                self.error.errorScreen.exec_()
            elif selected_book.id in self.currentUser.loanedBooks:
                self.error.set_error_text("You already loaned this book.")
                self.error.errorScreen.exec_()
            elif selected_book.isAvailable is False:
                if str(selected_book.id) not in self.currentUser.waitingBooks:
                    self.currentUser.waitingBooks.append(str(selected_book.id))
                if str(self.currentUser.id) not in selected_book.waitingList:
                    selected_book.waitingList.append(str(self.currentUser.id))
                self.userController.update_member_attributes(self.currentUser)
                self.bookController.update_book_attributes(selected_book)
                self.update_lists()

    def update_lists(self):
        self.list_user_waiting_list()
        self.list_books()
        self.list_loaned_books()

    def check_notifications(self):
        for book in self.currentUser.waitingBooks:
            if self.bookController.get_book_by_id(book).isAvailable:
                self.notification.set_notif_text("\"" + self.bookController.get_book_by_id(book).title + "\"" +
                                                 " is available to rent.")
                self.notification.show()

    def list_user_waiting_list(self):
        i = 0
        current_row_count = len(self.currentUser.waitingBooks)
        self.ui.waitingListWidget.setRowCount(current_row_count)

        for record in self.currentUser.waitingBooks:
            waited_book = self.bookController.get_book_by_id(record)
            self.ui.waitingListWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(waited_book.title))
            self.ui.waitingListWidget.setItem(i, 1, QtWidgets.QTableWidgetItem(waited_book.author))
            self.ui.waitingListWidget.setItem(i, 2, QtWidgets.QTableWidgetItem(waited_book.publishedYear))
            self.ui.waitingListWidget.setItem(i, 3, QtWidgets.QTableWidgetItem(str(waited_book.id)))
            if waited_book.isAvailable is False:
                self.ui.waitingListWidget.item(i, 0).setBackground(QtGui.QColor(255, 68, 68))
                self.ui.waitingListWidget.item(i, 1).setBackground(QtGui.QColor(255, 68, 68))
                self.ui.waitingListWidget.item(i, 2).setBackground(QtGui.QColor(255, 68, 68))
            i = i + 1
        self.show()

    def list_loaned_books(self):
        i = 0
        current_row_count = len(self.currentUser.loanedBooks)
        self.ui.viewBookWidget.setRowCount(current_row_count)

        for record in self.currentUser.loanedBooks:
            loaned_book = self.bookController.get_book_by_id(record)
            return_date = self.loanController.get_loan_record(loaned_book.id)["returnDate"]
            self.ui.viewBookWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(loaned_book.title))
            self.ui.viewBookWidget.setItem(i, 1, QtWidgets.QTableWidgetItem(loaned_book.author))
            self.ui.viewBookWidget.setItem(i, 2, QtWidgets.QTableWidgetItem(return_date.strftime("%d %b %Y")))
            self.ui.viewBookWidget.setItem(i, 3, QtWidgets.QTableWidgetItem(str(loaned_book.id)))
            if datetime.datetime.now() > return_date:
                self.ui.viewBookWidget.item(i, 0).setBackground(QtGui.QColor(206,190,190))
                self.ui.viewBookWidget.item(i, 1).setBackground(QtGui.QColor(206,190,190))
                self.ui.viewBookWidget.item(i, 2).setBackground(QtGui.QColor(206,190,190))
            i = i + 1
        self.show()

    def cancel_waiting(self):
        selected_row = self.ui.waitingListWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.waitingListWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))
            self.confirm.confirm_flag = 0
            self.confirm.set_confirm_text("Are you sure you want to cancel waiting for this book?")
            self.confirm.confirmScreen.exec_()
            if self.confirm.confirm_flag is 1:
                self.currentUser.waitingBooks.remove(str(selected_book.id))
                selected_book.waitingList.remove(str(self.currentUser.id))
                self.userController.update_member_attributes(self.currentUser)
                self.bookController.update_book_attributes(selected_book)
        self.update_lists()

    def return_operation(self):
        selected_row = self.ui.viewBookWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.viewBookWidget.item(selected_row, 3).text()
            selected_book = self.bookController.get_book_by_id(str(selected_book_id))
            self.confirm.confirm_flag = 0
            self.confirm.set_confirm_text("Are you sure you want to return this book?")
            self.confirm.confirmScreen.exec_()
            if self.confirm.confirm_flag is 1:
                self.loanController.return_book(self.currentUser, selected_book)
                self.update_lists()
                self.update_scene()

    def set_button_effects(self):
        self.ui.returnBookButton.released.connect(self.released_color_change)
        self.ui.returnBookButton.pressed.connect(self.pressed_color_change)
        self.ui.searchButton.released.connect(self.released_color_change)
        self.ui.searchButton.pressed.connect(self.pressed_color_change)
        self.ui.cancelSelected.released.connect(self.released_color_change)
        self.ui.cancelSelected.pressed.connect(self.pressed_color_change)
        self.ui.checkoutButton.released.connect(self.released_color_change)
        self.ui.checkoutButton.pressed.connect(self.pressed_color_change)
        self.ui.logoutButton.released.connect(self.released_color_change)
        self.ui.logoutButton.pressed.connect(self.pressed_color_change)
        self.ui.waitingListButton.released.connect(self.released_color_change)
        self.ui.waitingListButton.pressed.connect(self.pressed_color_change)
        self.ui.payFineButton.released.connect(self.released_color_change)
        self.ui.payFineButton.pressed.connect(self.pressed_color_change)
        self.ui.resetButton.released.connect(self.released_color_change)
        self.ui.resetButton.pressed.connect(self.pressed_color_change)
    def released_color_change(self):
        if self.memberHome.sender().text() == 'Add To Waiting List':
            self.memberHome.sender().setStyleSheet("QPushButton {\n"
                                                   "color: white;\n"
                                                   "background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dd7a23, stop: 0.1 #e87919, stop: 0.49 #ce650a, stop: 0.5 #c45d03, stop: 1 #d16304);\n"
                                                   "font-size: 20px;\n"
                                                  "border-radius:10px;\n"

                                                   "}")
        else:
            self.memberHome.sender().setStyleSheet("QPushButton {\n"
                                                   "color: white;\n"
                                                   "background-color:  QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dd7a23, stop: 0.1 #e87919, stop: 0.49 #ce650a, stop: 0.5 #c45d03, stop: 1 #d16304);\n"
                                                   "font-size: 30px;\n"
                                                  "border-radius:10px;\n"

                                                   "}")

    def pressed_color_change(self):
        if self.memberHome.sender().text() == 'Add To Waiting List':
            self.memberHome.sender().setStyleSheet("QPushButton {\n"
                                                   "color: white;\n"
                                                   "background-color: red;\n"
                                                   "font-size: 20px;\n"
                                                  "border-radius:10px;\n"

                                                   "}")
        else:
            self.memberHome.sender().setStyleSheet("QPushButton {\n"
                                                   "color: white;\n"
                                                   "background-color:red;\n"
                                                   "font-size: 30px;\n"
                                                  "border-radius:10px;\n"
                                                   "}")
Beispiel #15
0
from flask import Flask, render_template, request, redirect, url_for, json
from controllers.EPSController import EPSController
from controllers.UserController import UserController
from controllers.ExhibitionController import ExhibitionController
from controllers.ExhibitorController import ExhibitorController
from controllers.RegistrationController import RegistrationController
import Helper as hp
import os

app = Flask(__name__)
app.secret_key = os.urandom(24)

global con, cur, ic, uc, xc, ec, rc
con, cur = hp.connectDB()
ic = EPSController.getInstance(con, cur)
uc = UserController.getInstance(con, cur)
xc = ExhibitionController.getInstance(con, cur)
ec = ExhibitorController.getInstance(con, cur)
rc = RegistrationController.getInstance(con, cur)


@app.route('/')
def index():
    return ic.cIndex()


@app.route('/search/')
def search():
    return xc.cSearch('ongoing')

Beispiel #16
0
class LibrarianHomeView(Ui_libraryMainWindow):
    def __init__(self, user):
        self.userRegisterScreen = userRegisterFormView.UserRegisterFormView()
        self.bookRegisterScreen = bookRegisterFormView.BookRegisterFormView()
        self.librarianHome = QtWidgets.QMainWindow()
        self.ui = Ui_libraryMainWindow()
        self.ui.setupUi(self.librarianHome)
        self.ui.logoutButton.clicked.connect(self.logout)
        self.ui.userResetButton.clicked.connect(self.reset_user_filters)
        self.ui.bookResetButton.clicked.connect(self.reset_book_filters)
        self.ui.userDeleteButton.clicked.connect(self.delete_selected_user)
        self.ui.userCreateButton.clicked.connect(self.register_user_form)
        self.ui.userUpdateButton.clicked.connect(self.update_user_form)
        self.ui.userSearchButton.clicked.connect(self.search_users)
        self.ui.bookSearchButton.clicked.connect(self.search_books)
        self.ui.bookDeleteButton.clicked.connect(self.delete_selected_book)
        self.ui.bookCreateButton.clicked.connect(self.register_book_form)
        self.ui.bookUpdateButton.clicked.connect(self.update_book_form)
        self.ui.userTableWidget.cellDoubleClicked.connect(
            self.update_user_form)
        self.ui.bookTableWidget.cellDoubleClicked.connect(
            self.update_book_form)
        self.currentUser = user
        self.confirm = confirmView.ConfirmView()
        self.error = errorView.ErrorView()
        self.userController = UserController()
        self.bookController = BookController()
        self.loanController = LoanController()
        self.customize_scene()
        self.current_user_queries = ["", "", ""]
        self.current_book_queries = ["", "", ""]
        self.set_button_effects()
        self.book_ids = []
        self.user_ids = []

        self.list_users()
        self.list_books()

    def customize_scene(self):
        self.ui.greetingLabel.setText("Hi, " + str(self.currentUser.name) +
                                      " " + str(self.currentUser.surname))
        self.ui.dateLabel.setText(datetime.datetime.now().strftime("%Y-%m-%d"))
        self.ui.userTableWidget.setColumnCount(4)
        self.ui.bookTableWidget.setColumnCount(4)
        self.ui.userTableWidget.setHorizontalHeaderLabels(
            ["Name", "Surname", "Username", "User ID"])
        self.ui.bookTableWidget.setHorizontalHeaderLabels(
            ["Title", "Author", "Published Year", "Book ID"])

    def reset_user_filters(self):
        self.current_user_queries = ["", "", ""]
        self.list_users()

    def reset_book_filters(self):
        self.current_book_queries = ["", "", ""]
        self.list_books()

    def delete_selected_user(self):
        selected_row = self.ui.userTableWidget.currentRow()
        if selected_row > -1:
            selected_user_id = self.ui.userTableWidget.item(selected_row,
                                                            3).text()
            self.confirm.confirm_flag = 0
            self.confirm.confirmScreen.exec_()
            if self.confirm.confirm_flag is 1:
                self.userController.delete_one_user(str(selected_user_id))
                self.loanController.delete_user_from_loans(
                    str(selected_user_id))
                self.bookController.delete_from_all_waiting_lists(
                    str(selected_user_id))

            self.list_users()

    def delete_selected_book(self):
        selected_row = self.ui.bookTableWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.bookTableWidget.item(selected_row,
                                                            3).text()
            self.confirm.confirm_flag = 0
            self.confirm.confirmScreen.exec_()
            if self.confirm.confirm_flag is 1:
                self.bookController.delete_one_book_by_id(
                    str(selected_book_id))
                self.userController.delete_from_all_owned_books(
                    str(selected_book_id))
                self.userController.delete_from_all_waiting_lists(
                    str(selected_book_id))
                self.loanController.delete_book_from_loans(
                    str(selected_book_id))
            self.list_books()

    def list_users(self):
        query_result = self.userController.search_users(
            self.current_user_queries[0], self.current_user_queries[1],
            self.current_user_queries[2])
        i = 0
        current_row_count = query_result.count()
        self.ui.userTableWidget.setRowCount(current_row_count)
        for record in query_result:
            self.ui.userTableWidget.setItem(
                i, 0, QtWidgets.QTableWidgetItem(record["name"]))
            self.ui.userTableWidget.setItem(
                i, 1, QtWidgets.QTableWidgetItem(record["surname"]))
            self.ui.userTableWidget.setItem(
                i, 2, QtWidgets.QTableWidgetItem(record["username"]))
            self.ui.userTableWidget.setItem(
                i, 3, QtWidgets.QTableWidgetItem(str(record["_id"])))
            i = i + 1
        self.show()

    def list_books(self):
        query_result = self.bookController.search_books(
            self.current_book_queries[0], self.current_book_queries[1],
            self.current_book_queries[2])
        i = 0
        current_row_count = query_result.count()
        self.ui.bookTableWidget.setRowCount(current_row_count)
        for record in query_result:
            self.ui.bookTableWidget.setItem(
                i, 0, QtWidgets.QTableWidgetItem(record["title"]))
            self.ui.bookTableWidget.setItem(
                i, 1, QtWidgets.QTableWidgetItem(record["author"]))
            self.ui.bookTableWidget.setItem(
                i, 2, QtWidgets.QTableWidgetItem(record["year"]))
            self.ui.bookTableWidget.setItem(
                i, 3, QtWidgets.QTableWidgetItem(str(record["_id"])))
            if record["isAvailable"] is False:
                self.ui.bookTableWidget.item(i, 0).setBackground(
                    QtGui.QColor(255, 68, 68))
                self.ui.bookTableWidget.item(i, 1).setBackground(
                    QtGui.QColor(255, 68, 68))
                self.ui.bookTableWidget.item(i, 2).setBackground(
                    QtGui.QColor(255, 68, 68))
            i = i + 1
        self.show()

    def logout(self):
        import views.LoginView as LoginView
        self.librarianHome.hide()
        self.ui = LoginView.LoginView()
        self.ui.show()

    def show(self):
        self.librarianHome.show()

    def update_user_form(self):
        selected_row = self.ui.userTableWidget.currentRow()
        if selected_row > -1:
            selected_user_id = self.ui.userTableWidget.item(selected_row,
                                                            3).text()
            self.userRegisterScreen.type = 1
            self.userRegisterScreen.currentUser = self.userController.get_user_by_id(
                str(selected_user_id))
            self.userRegisterScreen.prepare_update(
                self.userRegisterScreen.currentUser)
            self.userRegisterScreen.userRegisterFormScreen.exec_()
            self.list_users()

    def update_book_form(self):
        selected_row = self.ui.bookTableWidget.currentRow()
        if selected_row > -1:
            selected_book_id = self.ui.bookTableWidget.item(selected_row,
                                                            3).text()
            self.bookRegisterScreen.type = 1
            self.bookRegisterScreen.currentBook = self.bookController.get_book_by_id(
                str(selected_book_id))
            self.bookRegisterScreen.prepare_update(
                self.bookRegisterScreen.currentBook)
            self.bookRegisterScreen.bookRegisterFormScreen.exec_()
            self.list_books()

    def register_user_form(self):
        self.userRegisterScreen.type = 0
        self.userRegisterScreen.clear_forms()
        self.userRegisterScreen.userRegisterFormScreen.exec_()
        self.list_users()

    def register_book_form(self):
        self.bookRegisterScreen.type = 0
        self.bookRegisterScreen.clear_forms()
        self.bookRegisterScreen.bookRegisterFormScreen.exec_()
        self.list_books()

    def search_users(self):
        search_username = self.ui.usernameLineEdit.text()
        search_name = self.ui.nameLineEdit.text()
        search_surname = self.ui.surnameLineEdit.text()
        self.current_user_queries = [
            search_username, search_name, search_surname
        ]
        self.list_users()

    def search_books(self):
        search_title = self.ui.titleLineEdit.text()
        search_author = self.ui.authorLineEdit.text()
        search_year = self.ui.yearLineEdit.text()
        self.current_book_queries = [search_title, search_author, search_year]
        self.list_books()

    def released_color_change(self):
        self.librarianHome.sender().setStyleSheet(
            "QPushButton {\n"
            "color: white;\n"
            "background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dd7a23, stop: 0.1 #e87919, stop: 0.49 #ce650a, stop: 0.5 #c45d03, stop: 1 #d16304);\n"
            "font-size: 30px;\n"
            "border-radius:10px;\n"
            "}")

    def pressed_color_change(self):
        self.librarianHome.sender().setStyleSheet("QPushButton {\n"
                                                  "color: white;\n"
                                                  "background-color: red;\n"
                                                  "font-size: 30px;\n"
                                                  "border-radius:10px;\n"
                                                  "}")

    def set_button_effects(self):
        self.ui.logoutButton.released.connect(self.released_color_change)
        self.ui.logoutButton.pressed.connect(self.pressed_color_change)
        self.ui.userSearchButton.released.connect(self.released_color_change)
        self.ui.userSearchButton.pressed.connect(self.pressed_color_change)
        self.ui.userCreateButton.released.connect(self.released_color_change)
        self.ui.userCreateButton.pressed.connect(self.pressed_color_change)
        self.ui.userDeleteButton.released.connect(self.released_color_change)
        self.ui.userDeleteButton.pressed.connect(self.pressed_color_change)
        self.ui.userUpdateButton.released.connect(self.released_color_change)
        self.ui.userUpdateButton.pressed.connect(self.pressed_color_change)
        self.ui.bookSearchButton.released.connect(self.released_color_change)
        self.ui.bookSearchButton.pressed.connect(self.pressed_color_change)
        self.ui.bookDeleteButton.released.connect(self.released_color_change)
        self.ui.bookDeleteButton.pressed.connect(self.pressed_color_change)
        self.ui.bookCreateButton.released.connect(self.released_color_change)
        self.ui.bookCreateButton.pressed.connect(self.pressed_color_change)
        self.ui.bookResetButton.released.connect(self.released_color_change)
        self.ui.bookResetButton.pressed.connect(self.pressed_color_change)
        self.ui.bookUpdateButton.released.connect(self.released_color_change)
        self.ui.bookUpdateButton.pressed.connect(self.pressed_color_change)
        self.ui.userResetButton.released.connect(self.released_color_change)
        self.ui.userResetButton.pressed.connect(self.pressed_color_change)
class UserRegisterFormView(Ui_userRegisterForm):
    def __init__(self):
        self.userRegisterFormScreen = QtWidgets.QDialog()
        self.ui = Ui_userRegisterForm()
        self.userController = UserController()
        self.ui.setupUi(self.userRegisterFormScreen)
        self.ui.registerButton.clicked.connect(self.register_user)
        self.ui.cancelButton.clicked.connect(self.terminate)
        self.error = errorView.ErrorView()
        self.currentUser = None
        self.type = 0  # 0 for create user 1 for update user


    def show(self):
        self.userRegisterFormScreen.show()

    def terminate(self):
        self.userRegisterFormScreen.hide()

    def clear_forms(self):
        self.ui.usernameLineEdit.setText("")
        self.ui.passwordLineEdit.setText("")
        self.ui.nameLineEdit.setText("")
        self.ui.surnameLineEdit.setText("")
        self.ui.emailLineEdit.setText("")

    def prepare_update(self, user):
        self.ui.usernameLineEdit.setText(user.username)
        self.ui.passwordLineEdit.setText(user.password)
        self.ui.nameLineEdit.setText(user.name)
        self.ui.surnameLineEdit.setText(user.surname)
        self.ui.emailLineEdit.setText(user.email_address)

    def register_user(self):
        username = self.ui.usernameLineEdit.text()
        password = self.ui.passwordLineEdit.text()
        name = self.ui.nameLineEdit.text()
        surname = self.ui.surnameLineEdit.text()
        email = self.ui.emailLineEdit.text()
        validation_flag = 0
        error_flag = 0
        if self.type is 0:
            for field in [username, password, name, surname, email]:
                if len(field) == 0:
                    validation_flag = 1
            if validation_flag is 0:
                if self.userController.add_new_member(username, password, name, surname, email) is None:
                    self.error.set_error_text("Username already exists!")
                    error_flag = 1
                    self.error.errorScreen.exec_()
            else:
                self.error.set_error_text("Please fill the blank fields.")
                self.error.errorScreen.exec_()
        elif self.type is 1:
            for field in [username, password, name, surname, email]:
                if len(field) == 0:
                    validation_flag = 1
            if validation_flag is 0:
                self.userController.update_member([username, password, email, name, surname], self.currentUser)
            else:
                self.error.set_error_text("Please fill the blank fields.")
                self.error.errorScreen.exec_()
        if error_flag is 0:
            self.userRegisterFormScreen.hide()
            self.clear_forms()

    def set_button_effects(self):
        self.ui.registerButton.released.connect(self.released_color_change)
        self.ui.registerButton.pressed.connect(self.pressed_color_change)
        self.ui.cancelButton.released.connect(self.released_color_change)
        self.ui.cancelButton.pressed.connect(self.pressed_color_change)

    def released_color_change(self):
        self.userRegisterFormScreen.sender().setStyleSheet("QPushButton {\n"
                                                           "color: white;\n"
                                                           "background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dd7a23, stop: 0.1 #e87919, stop: 0.49 #ce650a, stop: 0.5 #c45d03, stop: 1 #d16304);\n"
                                                           "font-size: 30px;\n"
                                                           "border-radius:10px;\n"
                                                           "}")

    def pressed_color_change(self):
        self.userRegisterFormScreen.sender().setStyleSheet("QPushButton {\n"
                                                           "color: white;\n"
                                                           "background-color: red;\n"
                                                           "font-size: 30px;\n"
                                                           "border-radius:10px;\n"
                                                           "}")
Beispiel #18
0
class LoginView(Ui_Login):
    def __init__(self):
        self.login = QtWidgets.QDialog()
        self.ui = Ui_Login()
        self.ui.setupUi(self.login)
        self.ui.loginButton.clicked.connect(self.user_login)
        self.ui.searchButton.clicked.connect(self.guest_search)
        self.userController = UserController()
        self.error = errorView.ErrorView()
        self.ui.loginButton.released.connect(self.released_color_change)
        self.ui.loginButton.pressed.connect(self.pressed_color_change)
        self.ui.searchButton.released.connect(self.released_color_change)
        self.ui.searchButton.pressed.connect(self.pressed_color_change)

    def show(self):
        loan_controller = LoanController()
        loan_controller.update_fines()
        self.login.show()

    def clear_login_forms(self):
        self.ui.usernameText.setText("")
        self.ui.passText.setText("")

    def get_login_info(self):
        return self.ui.usernameText.text(), self.ui.passText.text()

    def guest_search(self):
        self.login.hide()
        self.ui = guestWindowView.GuestWindowView()
        self.ui.show()

    def user_login(self):
        user, password = self.get_login_info()
        if self.userController.authorization(user, password):
            current_user = self.userController.get_user_by_username(user)
            if current_user.type is "member":
                self.login.hide()
                self.ui = memberHomeView.MemberHomeView(current_user)
            elif current_user.type is "librarian":
                self.login.hide()
                self.ui = librarianHomeView.LibrarianHomeView(current_user)
            self.ui.show()
        else:
            self.error.set_error_text("Wrong username or password")
            self.error.show()
            self.clear_login_forms()


    def released_color_change(self):
        self.login.sender().setStyleSheet("QPushButton {\n"
                                                  "color: white;\n"
                                                  "background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dd7a23, stop: 0.1 #e87919, stop: 0.49 #ce650a, stop: 0.5 #c45d03, stop: 1 #d16304);\n"
                                                  "font-size: 30px;\n"
                                                  "border-radius:10px;\n"
                                                  "}")

    def pressed_color_change(self):
        self.login.sender().setStyleSheet("QPushButton {\n"
                                                  "color: white;\n"
                                                  "background-color: red;\n"
                                                  "font-size: 30px;\n"
                                                  "border-radius:10px;\n"
                                                  "}")
Beispiel #19
0
def login():
    from controllers.UserController import UserController
    return UserController.login()
Beispiel #20
0
 def post(self):
     data = parser.parse_args()
     userController = UserController()
     user_info = userController.findByUsername(data["username"])
     return user_info.__dict__
Beispiel #21
0
from flask import Flask, session, redirect, url_for, render_template, request, jsonify
import os, string, random, simplejson
from datetime import timedelta
from controllers.UserController import UserController
from controllers.AccountController import AccountController

app = Flask(__name__)

app.config.from_object(os.environ['APP_SETTING'])
app.permanent_session_lifetime = timedelta(seconds=86400)

user = UserController()
account = AccountController()

## home page
@app.route('/')
def index():
	try:
		if session['logged_in'] == True:
			return redirect(url_for('viewAccounts'))
	except KeyError:
		return render_template('index.html')

## dashboard
@app.route('/dashboard/<account_id>', methods=['GET'])
def dashboard(account_id):
	try:
		if session['logged_in'] == True:
			meta_data = account.getAccountData(session['username'], account_id)
			if not meta_data:
				return render_template('dashboard.html', error="This account is not associated with this user!")
 def __init__(self):
     self.client = DbClient.Instance()
     self.userController = UserController()
     self.bookController = BookController()
class LoanController:
    def __init__(self):
        self.client = DbClient.Instance()
        self.userController = UserController()
        self.bookController = BookController()

    def checkout_book(self, user, book):
        if user.currentFine is not 0:
            return 0
        elif len(user.loanedBooks) >= 4:
            return 1
        else:
            user.loanedBooks.append(book.id)
            if book.id in user.waitingBooks:
                user.waitingBooks.remove(str(book.id))
            book.isAvailable = False
            user.totalLoanedBooks = user.totalLoanedBooks + 1
            user.lastLoanedBook = book.title
            self.userController.update_member_attributes(user)
            self.bookController.update_book_attributes(book)
            new_loan = Loan(str(user.id), str(book.id))
            self.client.add_loan_record(new_loan)
            return 2

    def return_book(self, user, book):
        loan_info = self.get_loan_record(str(book.id))
        existing_loan = Loan(str(loan_info["user_id"]),
                             str(loan_info["book_id"]))
        existing_loan.startDate = loan_info["startDate"]
        existing_loan.returnDate = loan_info["returnDate"]
        existing_loan.check_status()
        self.update_loan_attributes(existing_loan)
        user.loanedBooks.remove(str(book.id))
        book.isAvailable = True
        user.formerFine = user.formerFine + existing_loan.currentFine
        self.client.delete_loan_record(str(book.id))
        self.bookController.update_book_attributes(book)
        self.userController.update_member_attributes(user)
        self.update_fines()
        self.available_notification(book)

    def available_notification(self, returned_book):
        mail_client = MailClient()
        for waiting_user_id in returned_book.waitingList:
            waiting_user = self.userController.get_user_by_id(
                str(waiting_user_id))
            _thread.start_new_thread(
                mail_client.send_email,
                (waiting_user.username, waiting_user.email_address,
                 returned_book.title))
            # mail_client.send_email(waiting_user.username,waiting_user.email_address,returned_book.title)

    def get_loan_record(self, book_id):
        return self.client.find_loan_record(str(book_id))

    def instantiate_loan(self, loan_info):
        existing_loan = Loan(str(loan_info["user_id"]),
                             str(loan_info["book_id"]))
        existing_loan.startDate = loan_info["startDate"]
        existing_loan.returnDate = loan_info["returnDate"]
        return existing_loan

    def update_fines(self):
        self.reset_fines()
        loans = self.client.db.loans.find({})
        for loan in loans:
            existing_loan = self.instantiate_loan(loan)
            existing_loan.check_status()
            self.update_loan_attributes(existing_loan)
            existing_user = self.userController.get_user_by_id(
                str(existing_loan.user_id))
            existing_user.currentFine = existing_user.currentFine + existing_loan.currentFine
            self.userController.update_member_attributes(existing_user)

    def reset_fines(self):
        current_users = self.client.search_user_db("", "", "")
        for person in current_users:
            user_op = self.userController.get_user_by_id(str(person["_id"]))
            user_op.currentFine = user_op.formerFine
            self.userController.update_member_attributes(user_op)

    def delete_user_from_loans(self, user_id):
        loans = self.client.db.loans.find({})
        for loan in loans:
            if loan["user_id"] == user_id:
                op_book = self.bookController.get_book_by_id(
                    str(loan["book_id"]))
                op_book.isAvailable = True
                self.bookController.update_book_attributes(op_book)
                self.client.delete_loan_record(str(loan["book_id"]))

    def delete_book_from_loans(self, book_id):
        loans = self.client.db.loans.find({})
        for loan in loans:
            if loan["book_id"] == book_id:
                self.client.delete_loan_record(str(loan["book_id"]))

    def update_loan_attributes(self, loan):
        self.client.update_loan_attributes_db(loan)

    def reset_user_loans(self, user_id):
        loans = self.client.db.loans.find({})
        for loan_info in loans:
            if loan_info["user_id"] == user_id and loan_info["status"] == 1:
                updated_loan = self.instantiate_loan(loan_info)
                updated_loan.startDate = datetime.datetime.now(
                ) - datetime.timedelta(days=40)
                updated_loan.check_status()
                self.update_loan_attributes(updated_loan)
Beispiel #24
0
def check_if_token_in_blacklist(decrypted_token):
    jti = decrypted_token["jti"]
    return UserController.tokenIsBlacklisted(jti)
Beispiel #25
0
def register():
    from controllers.UserController import UserController
    return UserController.createAccount()