class SearchApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.hospitalOracle = HospitalOracle()
        self.pushButtonSearch.clicked.connect(self.searchForInfo)

    def searchForInfo(self):
        # Get query from field
        PFNAME = self.patientSFNameLineEdit.text().strip()
        PLNAME = self.patientSLNameLineEdit.text().strip()

        # Store result from Oracle
        storage = self.hospitalOracle.searchPatient(PFNAME, PLNAME)

        # Reset table
        self.tableWidget.setRowCount(0)

        # Insert into table
        for rowPosition, row in enumerate(storage):
            self.tableWidget.insertRow(rowPosition)
            for colPosition, data in enumerate(row):
                self.tableWidget.setItem(
                    rowPosition, colPosition,
                    QtWidgets.QTableWidgetItem(str(data).strip()))
class InsertApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.hospitalOracle = HospitalOracle()
        self.pushButtonInsert.clicked.connect(self.insertIntoPatient)

    def insertIntoPatient(self):
        PFNAME = self.pFNameLineEdit.text().strip()
        PLNAME = self.pLNameLineEdit.text().strip()
        PDOB = self.pDoBLineEdit.text().strip()
        PGENDER = self.pGenderLineEdit.text().strip()
        PPHONE = self.pPhoneLineEdit.text().strip()
        PADDRESS = self.pAddressLineEdit.text().strip()
        PDOBLIST = PDOB.split('-')
        WillInsert = True
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)

        if PFNAME is '' or PLNAME is '' or PGENDER is '' or PPHONE is '' or PADDRESS is '':
            msg.setText("All fields must not be empty")
            msg.setWindowTitle("Failed")
            msg.setStandardButtons(QMessageBox.Ok)
            msg.exec_()
            WillInsert = False

        if (len(PDOBLIST) != 3 or len(PDOBLIST[0]) != 4
                or len(PDOBLIST[1]) != 2 or len(PDOBLIST[2]) != 2
                or int(PDOBLIST[1]) > 12 or int(PDOBLIST[1]) < 0
                or int(PDOBLIST[2]) < 0 or int(PDOBLIST[2]) > 31):
            msg.setText("Please enter date of birth correctly")
            msg.setWindowTitle("Failed")
            msg.setStandardButtons(QMessageBox.Ok)
            msg.exec_()
            WillInsert = False

        if WillInsert:
            self.hospitalOracle.insertIntoPatient(PFNAME, PLNAME, PDOB,
                                                  PGENDER, PPHONE, PADDRESS)
            msg.setText("Add patient successfully")
            msg.setWindowTitle("Successfully")
            msg.setStandardButtons(QMessageBox.Ok)
            msg.exec_()
class ReportApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.hospitalOracle = HospitalOracle()
        self.pushButtonSearch.clicked.connect(self.showReport)

    def showReport(self):
        PFNAME = self.patientSFNameLineEdit.text().strip()
        PLNAME = self.patientSLNameLineEdit.text().strip()

        storage = self.hospitalOracle.makeAReport(PFNAME, PLNAME)

        # Reset table
        self.tableWidget.setRowCount(0)
        self.tableWidget_2.setRowCount(0)

        rowOut = 0
        rowIn = 0
        listOut = [0, 1, 3, 4, 6]
        listIn = [0, 2, 3, 5, 7]
        for row in storage:
            if row[1] is not None:
                colPositionOut = 0
                self.tableWidget.insertRow(rowOut)
                for posOut in listOut:
                    self.tableWidget.setItem(
                        rowOut, colPositionOut,
                        QtWidgets.QTableWidgetItem(str(row[posOut]).strip()))
                    colPositionOut += 1
                rowOut += 1
            else:
                colPositionIn = 0
                self.tableWidget_2.insertRow(rowIn)
                for posIn in listIn:
                    self.tableWidget_2.setItem(
                        rowIn, colPositionIn,
                        QtWidgets.QTableWidgetItem(str(row[posIn]).strip()))
                    colPositionIn += 1
                rowIn += 1
class ListApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.hospitalOracle = HospitalOracle()
        self.pushButtonSearchPatients.clicked.connect(self.searchPatients)

    def searchPatients(self):
        # Get input
        DFNAME = self.doctorSFNameLineEdit.text().strip()
        DLNAME = self.doctorSLNameLineEdit.text().strip()

        # Ger data from table
        storage = self.hospitalOracle.listPatientTreatedByDoctor(DFNAME, DLNAME)

        # Reset all rows
        self.tableWidget.setRowCount(0)
        self.tableWidget_2.setRowCount(0)
        
        # Insert to 2 tables
        rowOut = 0
        rowIn = 0
        listOut = [0,1,2,3,4,5,6,7,8]
        listIn = [0,1,2,3,4,9,10,11]
        for row in storage:
            if row[5] is not None:
                colPositionOut = 0
                self.tableWidget.insertRow(rowOut)
                for posOut in listOut:
                    self.tableWidget.setItem(rowOut, colPositionOut, QtWidgets.QTableWidgetItem(str(row[posOut]).strip()))
                    colPositionOut += 1
                rowOut += 1
            else:
                colPositionIn = 0
                self.tableWidget_2.insertRow(rowIn)
                for posIn in listIn:
                    self.tableWidget_2.setItem(rowIn, colPositionIn, QtWidgets.QTableWidgetItem(str(row[posIn]).strip()))
                    colPositionIn += 1
                rowIn += 1
 def __init__(self):
     QtWidgets.QMainWindow.__init__(self)
     Ui_MainWindow.__init__(self)
     self.setupUi(self)
     self.hospitalOracle = HospitalOracle()
     self.pushButtonInsert.clicked.connect(self.insertIntoPatient)
 def __init__(self):
     QtWidgets.QMainWindow.__init__(self)
     Ui_MainWindow.__init__(self)
     self.setupUi(self)
     self.hospitalOracle = HospitalOracle()
     self.pushButtonSearchPatients.clicked.connect(self.searchPatients)