Exemplo n.º 1
0
    def __init__(self, parent, new_encounter, for_table, tableRef=None):
        super(addEncounter, self).__init__()

        self.ui = Ui_addEncounter()
        self.ui.setupUi(self)
        self.parent = parent
        self.for_table = for_table
        self.tableRef = tableRef
        self.rows_included = []

        # Contains all of the active filters as well as the rows they apply to.
        self.filter_dict = {}

        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.addFilterButton.clicked.connect(self.addFilter)
        self.ui.removeFilterButton.clicked.connect(self.removeFilter)
        self.ui.addButton.clicked.connect(self.addToEncounter)
        self.ui.removeButton.clicked.connect(self.removeFromEncounter)
        self.ui.acceptButton.clicked.connect(self.acceptEncounter)
        self.ui.instructionButton.clicked.connect(self.instruct)

        # Populate the Library table.
        self.current_library = populateTable(self.ui.libraryTable,
                                             self.parent.libraryName, False)

        # If we are editing an encounter load it up.
        if not new_encounter:
            self.loadEncounter()

        self.ui.currentEncounterTable.setSortingEnabled(False)
        self.ui.currentEncounterTable.setColumnCount(
            len(self.current_library.field_list) + 1)
        i = 1
        for item in self.current_library.field_list:
            self.ui.currentEncounterTable.setHorizontalHeaderItem(
                i, QTableWidgetItem(item))
            i += 1
        self.ui.currentEncounterTable.setHorizontalHeaderItem(
            0, QTableWidgetItem("Qty"))

        # Load the field selector.
        for i in range(self.ui.libraryTable.columnCount()):
            self.ui.filterFieldBox.addItem(
                self.ui.libraryTable.horizontalHeaderItem(i).text())
Exemplo n.º 2
0
    def __init__(self, parent, new_encounter, for_table, tableRef=None):
        super(addEncounter, self).__init__()

        self.ui = Ui_addEncounter()
        self.ui.setupUi(self)
        self.parent = parent
        self.for_table = for_table
        self.tableRef = tableRef
        self.rows_included = []

        # Contains all of the active filters as well as the rows they apply to.
        self.filter_dict = {}

        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.addFilterButton.clicked.connect(self.addFilter)
        self.ui.removeFilterButton.clicked.connect(self.removeFilter)
        self.ui.addButton.clicked.connect(self.addToEncounter)
        self.ui.removeButton.clicked.connect(self.removeFromEncounter)
        self.ui.acceptButton.clicked.connect(self.acceptEncounter)
        self.ui.instructionButton.clicked.connect(self.instruct)

        # Populate the Library table.
        self.current_library = populateTable(self.ui.libraryTable, self.parent.libraryName, False)

        # If we are editing an encounter load it up.
        if not new_encounter:
            self.loadEncounter()

        self.ui.currentEncounterTable.setSortingEnabled(False)
        self.ui.currentEncounterTable.setColumnCount(len(self.current_library.field_list) + 1)
        i = 1
        for item in self.current_library.field_list:
            self.ui.currentEncounterTable.setHorizontalHeaderItem(i, QTableWidgetItem(item))
            i += 1
        self.ui.currentEncounterTable.setHorizontalHeaderItem(0, QTableWidgetItem("Qty"))

        # Load the field selector.
        for i in range(self.ui.libraryTable.columnCount()):
            self.ui.filterFieldBox.addItem(self.ui.libraryTable.horizontalHeaderItem(i).text())
Exemplo n.º 3
0
class addEncounter(QWidget):
    def __init__(self, parent, new_encounter, for_table, tableRef=None):
        super(addEncounter, self).__init__()

        self.ui = Ui_addEncounter()
        self.ui.setupUi(self)
        self.parent = parent
        self.for_table = for_table
        self.tableRef = tableRef
        self.rows_included = []

        # Contains all of the active filters as well as the rows they apply to.
        self.filter_dict = {}

        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.addFilterButton.clicked.connect(self.addFilter)
        self.ui.removeFilterButton.clicked.connect(self.removeFilter)
        self.ui.addButton.clicked.connect(self.addToEncounter)
        self.ui.removeButton.clicked.connect(self.removeFromEncounter)
        self.ui.acceptButton.clicked.connect(self.acceptEncounter)
        self.ui.instructionButton.clicked.connect(self.instruct)

        # Populate the Library table.
        self.current_library = populateTable(self.ui.libraryTable, self.parent.libraryName, False)

        # If we are editing an encounter load it up.
        if not new_encounter:
            self.loadEncounter()

        self.ui.currentEncounterTable.setSortingEnabled(False)
        self.ui.currentEncounterTable.setColumnCount(len(self.current_library.field_list) + 1)
        i = 1
        for item in self.current_library.field_list:
            self.ui.currentEncounterTable.setHorizontalHeaderItem(i, QTableWidgetItem(item))
            i += 1
        self.ui.currentEncounterTable.setHorizontalHeaderItem(0, QTableWidgetItem("Qty"))

        # Load the field selector.
        for i in range(self.ui.libraryTable.columnCount()):
            self.ui.filterFieldBox.addItem(self.ui.libraryTable.horizontalHeaderItem(i).text())



    def instruct(self):
        msg = QMessageBox()
        msg.setWindowTitle("Instructions")
        msg.setText("How to filter:\n" +
                    "Select field to filter from the dropdown.\n\n" +
                    "Text Fields: Enter substring to filter.\n" +
                    "Numeric Fields: Enter range in form of min-max, you can leave either blank.\n")
        msg.exec_()


    def cancel(self):
        self.close()


    def addFilter(self):
        '''
        If the field type is text then the user can only search for a specific string.
        If the field type is int then the user can specify a range or a max or min value.
        '''
        new_filter = self.ui.filterEdit.text()
        field_to_filter = self.ui.filterFieldBox.currentText()

        self.filter_dict[new_filter] = []

        # Determine the field type.
        filter_type = self.current_library.field_types[field_to_filter]
        column_of_interest = self.current_library.field_list.index(field_to_filter)
        # Filter current selection based on the entered string.
        if filter_type == "text":
            for i in range(self.ui.libraryTable.rowCount()):
#                if not self.ui.libraryTable.isRowHidden(i):
                    # Make the cell lowercase.
                current_field = self.ui.libraryTable.item(i, column_of_interest).text().lower()
                if new_filter.lower() not in current_field:
                    self.filter_dict[new_filter].append(i)
                    self.ui.libraryTable.setRowHidden(i, True)

        else:
            if re.match('\d*-?\d*', new_filter) is not None:
                search_list = new_filter.split('-')
                if len(search_list) > 1:
                    if len(search_list) > 2:
                        print(1)
                        errorMessage("Invalid syntax for filter, please\nsee help button for usage.")
                        return
                    if search_list[0] == '':
                        mini = 0
                    else:
                        mini = int(search_list[0])
                    if search_list[1] == '':
                        maxi = sys.maxsize
                    else:
                        maxi = int(search_list[1])
                    if not checkInt(mini) or not checkInt(maxi):
                        print(2)
                        errorMessage("Invalid syntax for filter, please\nsee help button for usage.")
                        return
                    for i in range(self.ui.libraryTable.rowCount()):
#                        if not self.ui.libraryTable.isRowHidden(i):
                            # Make the cell an int.
                        current_field = int(self.ui.libraryTable.item(i, column_of_interest).text())
                        if not mini <= current_field <= maxi:
                            self.filter_dict[new_filter].append(i)
                            self.ui.libraryTable.setRowHidden(i, True)

                else:
                    if not checkInt(new_filter):
                        errorMessage("Invalid syntax for filter, please\nsee help button for usage.")
                        return
                    for i in range(self.ui.libraryTable.rowCount()):
               #        if not self.ui.libraryTable.isRowHidden(i):
                        # Make the cell an int.
                        current_field = int(self.ui.libraryTable.item(i, column_of_interest).text())
                        if not current_field == int(new_filter):
                            self.filter_dict[new_filter].append(i)
                            self.ui.libraryTable.setRowHidden(i, True)

            else:
                errorMessage("Invalid syntax for filter, please\nsee help button for usage.")

        self.ui.filterList.addItem(field_to_filter + ": " + new_filter)
        print(self.filter_dict)

    def removeFilter(self):
        if self.ui.filterList.currentItem() is None:
            return
        filter_to_remove = self.ui.filterList.currentItem().text()
        filter_to_remove = filter_to_remove.split(':')[-1]
        filter_to_remove = filter_to_remove[1:]

        self.ui.filterList.takeItem(self.ui.filterList.currentRow())

        rows_filtered = self.filter_dict[filter_to_remove]
        remove_rows = list(rows_filtered)
        for item in rows_filtered:
            for key in self.filter_dict:
                if key == filter_to_remove:
                    continue
                if item in self.filter_dict[key]:
                    remove_rows.remove(item)
                    break

        self.filter_dict.pop(filter_to_remove, None)

        for row in remove_rows:
            self.ui.libraryTable.setRowHidden(row, False)

    def addToEncounter(self):
        current_row = self.ui.currentEncounterTable.rowCount()
        try:
            selected_row = self.ui.libraryTable.selectedIndexes()[0].row()
        except IndexError:
            return
        if selected_row in self.rows_included:
            errorMessage("The entry is already in the encounter, feel free\nto change the quantity.")
            return
        self.rows_included.append(selected_row)
        self.ui.currentEncounterTable.insertRow(self.ui.currentEncounterTable.rowCount())
        for i in range(self.ui.libraryTable.columnCount()):

            newItem = QTableWidgetItem(self.ui.libraryTable.item(selected_row, i).text())
            newItem.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            self.ui.currentEncounterTable.setItem(current_row, i+1, newItem)
        newItem = QTableWidgetItem(str(self.ui.qtyCount.value()))
        self.ui.currentEncounterTable.setItem(current_row, 0, newItem)

    def removeFromEncounter(self):
        self.ui.currentEncounterTable.removeRow(self.ui.currentEncounterTable.currentRow())

    def acceptEncounter(self):
        if self.ui.encounterNameEdit.text() == "":
            errorMessage("Encounter name blank!")
            return
        if self.ui.encounterNameEdit.text() in self.parent.encounter_list:
            errorMessage("Encounter already exists!")
            return
        if ',' in self.ui.encounterNameEdit.text():
            errorMessage("Commas not allowed in encounter name!")
            return
        if self.ui.currentEncounterTable.rowCount() == 0:
            errorMessage("Must have at least one entry!")
            return
        # Write the encounter to the group file.
        if not self.for_table:
            with open(self.parent.filename, 'a') as file:
                # Write the header.
                file.write("encounter:" + self.ui.encounterNameEdit.text() + '\n')
                for row in range(self.ui.currentEncounterTable.rowCount()):
                    file.write('~' + self.ui.currentEncounterTable.item(row, 0).text())
                    file.write(',')
                    file.write(self.ui.currentEncounterTable.item(row, 1).text() + '\n')
                file.write('\n')

        # If for a table then write to a temporary file.
        else:
            with open("groups/~temp.csv", 'a') as file:
                file.write("table_encounter:" + self.ui.encounterNameEdit.text() + '\n')
                for row in range(self.ui.currentEncounterTable.rowCount()):
                    file.write('~' + self.ui.currentEncounterTable.item(row, 0).text())
                    file.write(',')
                    file.write(self.ui.currentEncounterTable.item(row, 1).text() + '\n')
                file.write('\n')

        # Clear the current encounter table.
        if not self.for_table:
            self.parent.encounter_list.append(self.ui.encounterNameEdit.text())
            self.parent.ui.encounterList.addItem(QListWidgetItem(self.ui.encounterNameEdit.text()))
        else:
            self.tableRef.ui.tableWidget.insertRow(self.tableRef.ui.tableWidget.rowCount())
            newItem = QTableWidgetItem(self.ui.encounterNameEdit.text())
            newItem.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            self.tableRef.ui.tableWidget.setItem(self.tableRef.ui.tableWidget.rowCount()-1, 0, newItem)
        self.close()
Exemplo n.º 4
0
class addEncounter(QWidget):
    def __init__(self, parent, new_encounter, for_table, tableRef=None):
        super(addEncounter, self).__init__()

        self.ui = Ui_addEncounter()
        self.ui.setupUi(self)
        self.parent = parent
        self.for_table = for_table
        self.tableRef = tableRef
        self.rows_included = []

        # Contains all of the active filters as well as the rows they apply to.
        self.filter_dict = {}

        self.ui.cancelButton.clicked.connect(self.cancel)
        self.ui.addFilterButton.clicked.connect(self.addFilter)
        self.ui.removeFilterButton.clicked.connect(self.removeFilter)
        self.ui.addButton.clicked.connect(self.addToEncounter)
        self.ui.removeButton.clicked.connect(self.removeFromEncounter)
        self.ui.acceptButton.clicked.connect(self.acceptEncounter)
        self.ui.instructionButton.clicked.connect(self.instruct)

        # Populate the Library table.
        self.current_library = populateTable(self.ui.libraryTable,
                                             self.parent.libraryName, False)

        # If we are editing an encounter load it up.
        if not new_encounter:
            self.loadEncounter()

        self.ui.currentEncounterTable.setSortingEnabled(False)
        self.ui.currentEncounterTable.setColumnCount(
            len(self.current_library.field_list) + 1)
        i = 1
        for item in self.current_library.field_list:
            self.ui.currentEncounterTable.setHorizontalHeaderItem(
                i, QTableWidgetItem(item))
            i += 1
        self.ui.currentEncounterTable.setHorizontalHeaderItem(
            0, QTableWidgetItem("Qty"))

        # Load the field selector.
        for i in range(self.ui.libraryTable.columnCount()):
            self.ui.filterFieldBox.addItem(
                self.ui.libraryTable.horizontalHeaderItem(i).text())

    def instruct(self):
        msg = QMessageBox()
        msg.setWindowTitle("Instructions")
        msg.setText(
            "How to filter:\n" +
            "Select field to filter from the dropdown.\n\n" +
            "Text Fields: Enter substring to filter.\n" +
            "Numeric Fields: Enter range in form of min-max, you can leave either blank.\n"
        )
        msg.exec_()

    def cancel(self):
        self.close()

    def addFilter(self):
        '''
        If the field type is text then the user can only search for a specific string.
        If the field type is int then the user can specify a range or a max or min value.
        '''
        new_filter = self.ui.filterEdit.text()
        field_to_filter = self.ui.filterFieldBox.currentText()

        self.filter_dict[new_filter] = []

        # Determine the field type.
        filter_type = self.current_library.field_types[field_to_filter]
        column_of_interest = self.current_library.field_list.index(
            field_to_filter)
        # Filter current selection based on the entered string.
        if filter_type == "text":
            for i in range(self.ui.libraryTable.rowCount()):
                #                if not self.ui.libraryTable.isRowHidden(i):
                # Make the cell lowercase.
                current_field = self.ui.libraryTable.item(
                    i, column_of_interest).text().lower()
                if new_filter.lower() not in current_field:
                    self.filter_dict[new_filter].append(i)
                    self.ui.libraryTable.setRowHidden(i, True)

        else:
            if re.match('\d*-?\d*', new_filter) is not None:
                search_list = new_filter.split('-')
                if len(search_list) > 1:
                    if len(search_list) > 2:
                        print(1)
                        errorMessage(
                            "Invalid syntax for filter, please\nsee help button for usage."
                        )
                        return
                    if search_list[0] == '':
                        mini = 0
                    else:
                        mini = int(search_list[0])
                    if search_list[1] == '':
                        maxi = sys.maxsize
                    else:
                        maxi = int(search_list[1])
                    if not checkInt(mini) or not checkInt(maxi):
                        print(2)
                        errorMessage(
                            "Invalid syntax for filter, please\nsee help button for usage."
                        )
                        return
                    for i in range(self.ui.libraryTable.rowCount()):
                        #                        if not self.ui.libraryTable.isRowHidden(i):
                        # Make the cell an int.
                        current_field = int(
                            self.ui.libraryTable.item(
                                i, column_of_interest).text())
                        if not mini <= current_field <= maxi:
                            self.filter_dict[new_filter].append(i)
                            self.ui.libraryTable.setRowHidden(i, True)

                else:
                    if not checkInt(new_filter):
                        errorMessage(
                            "Invalid syntax for filter, please\nsee help button for usage."
                        )
                        return
                    for i in range(self.ui.libraryTable.rowCount()):
                        #        if not self.ui.libraryTable.isRowHidden(i):
                        # Make the cell an int.
                        current_field = int(
                            self.ui.libraryTable.item(
                                i, column_of_interest).text())
                        if not current_field == int(new_filter):
                            self.filter_dict[new_filter].append(i)
                            self.ui.libraryTable.setRowHidden(i, True)

            else:
                errorMessage(
                    "Invalid syntax for filter, please\nsee help button for usage."
                )

        self.ui.filterList.addItem(field_to_filter + ": " + new_filter)
        print(self.filter_dict)

    def removeFilter(self):
        if self.ui.filterList.currentItem() is None:
            return
        filter_to_remove = self.ui.filterList.currentItem().text()
        filter_to_remove = filter_to_remove.split(':')[-1]
        filter_to_remove = filter_to_remove[1:]

        self.ui.filterList.takeItem(self.ui.filterList.currentRow())

        rows_filtered = self.filter_dict[filter_to_remove]
        remove_rows = list(rows_filtered)
        for item in rows_filtered:
            for key in self.filter_dict:
                if key == filter_to_remove:
                    continue
                if item in self.filter_dict[key]:
                    remove_rows.remove(item)
                    break

        self.filter_dict.pop(filter_to_remove, None)

        for row in remove_rows:
            self.ui.libraryTable.setRowHidden(row, False)

    def addToEncounter(self):
        current_row = self.ui.currentEncounterTable.rowCount()
        try:
            selected_row = self.ui.libraryTable.selectedIndexes()[0].row()
        except IndexError:
            return
        if selected_row in self.rows_included:
            errorMessage(
                "The entry is already in the encounter, feel free\nto change the quantity."
            )
            return
        self.rows_included.append(selected_row)
        self.ui.currentEncounterTable.insertRow(
            self.ui.currentEncounterTable.rowCount())
        for i in range(self.ui.libraryTable.columnCount()):

            newItem = QTableWidgetItem(
                self.ui.libraryTable.item(selected_row, i).text())
            newItem.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            self.ui.currentEncounterTable.setItem(current_row, i + 1, newItem)
        newItem = QTableWidgetItem(str(self.ui.qtyCount.value()))
        self.ui.currentEncounterTable.setItem(current_row, 0, newItem)

    def removeFromEncounter(self):
        self.ui.currentEncounterTable.removeRow(
            self.ui.currentEncounterTable.currentRow())

    def acceptEncounter(self):
        if self.ui.encounterNameEdit.text() == "":
            errorMessage("Encounter name blank!")
            return
        if self.ui.encounterNameEdit.text() in self.parent.encounter_list:
            errorMessage("Encounter already exists!")
            return
        if ',' in self.ui.encounterNameEdit.text():
            errorMessage("Commas not allowed in encounter name!")
            return
        if self.ui.currentEncounterTable.rowCount() == 0:
            errorMessage("Must have at least one entry!")
            return
        # Write the encounter to the group file.
        if not self.for_table:
            with open(self.parent.filename, 'a') as file:
                # Write the header.
                file.write("encounter:" + self.ui.encounterNameEdit.text() +
                           '\n')
                for row in range(self.ui.currentEncounterTable.rowCount()):
                    file.write(
                        '~' +
                        self.ui.currentEncounterTable.item(row, 0).text())
                    file.write(',')
                    file.write(
                        self.ui.currentEncounterTable.item(row, 1).text() +
                        '\n')
                file.write('\n')

        # If for a table then write to a temporary file.
        else:
            with open("groups/~temp.csv", 'a') as file:
                file.write("table_encounter:" +
                           self.ui.encounterNameEdit.text() + '\n')
                for row in range(self.ui.currentEncounterTable.rowCount()):
                    file.write(
                        '~' +
                        self.ui.currentEncounterTable.item(row, 0).text())
                    file.write(',')
                    file.write(
                        self.ui.currentEncounterTable.item(row, 1).text() +
                        '\n')
                file.write('\n')

        # Clear the current encounter table.
        if not self.for_table:
            self.parent.encounter_list.append(self.ui.encounterNameEdit.text())
            self.parent.ui.encounterList.addItem(
                QListWidgetItem(self.ui.encounterNameEdit.text()))
        else:
            self.tableRef.ui.tableWidget.insertRow(
                self.tableRef.ui.tableWidget.rowCount())
            newItem = QTableWidgetItem(self.ui.encounterNameEdit.text())
            newItem.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            self.tableRef.ui.tableWidget.setItem(
                self.tableRef.ui.tableWidget.rowCount() - 1, 0, newItem)
        self.close()