def save_criticals_step_2(self): unrecognized_comp_alert = WarningBox( "Componente no reconocido", "Cargar el componente\ndesde el autocompletado." ) new_criticals = {} for l in self.criticals_holder_layout.children(): component = l.itemAt(0).widget().text() amount = float(l.itemAt(1).widget().text().replace(",", ".")) new_criticals[component] = amount if not set(new_criticals).issubset(self.existing_comps): unrecognized_comp_alert.exec_() if set(new_criticals).issubset(self.existing_comps): if self.stored_criticals == new_criticals: self.close() if self.stored_criticals != new_criticals: db = db_manager.DB_Manager() db.delete_all_criticals() number_of_criticals = len(new_criticals) endstring = ( "valor crítico" if number_of_criticals == 1 else "valores críticos" ) config_record_details = str(number_of_criticals) + " " + endstring db.save_new_criticals(new_criticals) self.stored_criticals = new_criticals db.log_new_config_record( config="Edición de críticos", details=config_record_details ) db.close_connection() utils.color_criticals_in_orange_in_main_section( self.parent().table, self.stored_criticals ) self.close()
def test_if_packing_list_or_supplier_fields_are_empty(self): if self.packing_list_field.text() == "": WarningBox("Remito faltante", "Ingresar remito\nantes de ejecutar.").exec_() self.packing_list_field.setFocus() return True elif self.supplier_field.text() == "": WarningBox("Proveedor faltante", "Ingresar proveedor\nantes de ejecutar.").exec_() self.supplier_field.setFocus() return True else: return False
def test_if_product_or_model_fields_are_empty(self): if self.product_field.text() == "": WarningBox("Producto faltante", "Ingresar producto\nantes de ejecutar.").exec_() self.product_field.setFocus() return True elif self.model_field.text() == "": WarningBox("Modelo faltante", "Ingresar modelo\nantes de ejecutar.").exec_() self.model_field.setFocus() return True else: return False
def save_criticals_step_1(self): if not self.criticals_holder_layout.children(): db = db_manager.DB_Manager() db.delete_all_criticals() self.stored_criticals = {} db.close_connection() utils.color_criticals_in_orange_in_main_section( self.parent().table, self.stored_criticals ) self.close() elif self.criticals_holder_layout.children(): contents_of_all_line_edits = [] for l in self.criticals_holder_layout.children(): contents_of_all_line_edits.append(l.itemAt(0).widget().text()) contents_of_all_line_edits.append(l.itemAt(1).widget().text()) if tests.test_if_duplicated_first_value_in_line_items_contents( contents_of_all_line_edits ): WarningBox( "Componentes duplicados", "Borrar uno de los\ncomponentes duplicados.", ).exec_() elif all(contents_of_all_line_edits): self.save_criticals_step_2() else: self.fix_empty_field_mid_save()
def fix_empty_field_mid_save(self): empty_field_alert = WarningBox( "Campo vacío", "Completar o borrar campos\nvacíos antes de guardar." ) for layout in self.criticals_holder_layout.layout().children(): layout_1_text = layout.itemAt(0).widget().text() layout_2_text = layout.itemAt(1).widget().text() if layout_1_text == "": if layout_2_text == "": utils.delete_layout(layout) self.adjustSize() self.adjustSize() self.save_criticals_step_2() elif layout_1_text == "" or layout_2_text == "": empty_field_alert.exec() break
def test_if_code_missing(self): code_missing = self.code_field.text() == "" if code_missing: WarningBox("Código faltante", "Ingresar código\nantes de generar.").exec_() return True else: return False
def test_if_there_are_duplicates(self): contents = utils.get_line_items_contents(self.comps_holder_section) duplicates = tests.test_if_duplicated_first_value_in_line_items_contents( contents) if duplicates: WarningBox("Componentes duplicados", "Borrar uno de los componentes duplicados.").exec_() return True else: return False
def test_if_there_are_no_products(self): no_line_items = not self.products_holder_section.children() contents = utils.get_line_items_contents(self.products_holder_section) empty_string = tests.test_if_empty_string_in_line_items_contents(contents) if no_line_items or empty_string: WarningBox( "Sin productos", "Completar o borrar campos\nvacíos antes de ejecutar." ).exec_() return True else: return False
def autoremove_line(self): for line_layout in self.comps_holder_section.layout().children(): two_empty_fields_on_same_line = ( line_layout.itemAt(0).widget().text() == "" and line_layout.itemAt(1).widget().text() == "") if two_empty_fields_on_same_line: if len(self.comps_holder_section.layout().children()) > 1: utils.remove_three_widget_layout(line_layout) return False else: if len(self.comps_holder_section.layout().children()) <= 1: WarningBox( "Sin componentes", "Completar o borrar campos\nvacíos antes de ejecutar.", ).exec_() return True elif not two_empty_fields_on_same_line: WarningBox( "Sin componentes", "Completar o borrar campos\nvacíos antes de ejecutar.", ).exec_() return True
def test_if_there_are_unrecognized_components(self): db = db_manager.DB_Manager() existing_comps = db.get_all_display_names_for_components() db.close_connection() if self.search_field.text() not in existing_comps: WarningBox( "Componente extraño", "Componente no reconocido. Cargar el\ncomponente desde el autocompletado.", ).exec_() return True else: return False
def test_if_there_are_recipe_data(self): contents = utils.get_line_items_contents(self.comps_holder_section) empty_strings_exist = tests.test_if_empty_string_in_line_items_contents( contents) if self.comps_holder_section.children() and empty_strings_exist: WarningBox( "Sin componentes", "Completar o borrar campos\nvacíos antes de ejecutar.", ).exec_() return True else: return False
def test_if_there_are_unrecognized_components(self): contents = utils.get_line_items_contents(self.comps_holder_section) incoming_comps = contents[0::2] db = db_manager.DB_Manager() existing_comps = db.get_all_display_names_for_components() db.close_connection() unrecognized_comps = not set(incoming_comps).issubset(existing_comps) if unrecognized_comps: WarningBox( "Componente extraño", "Componente no reconocido. Cargar el\ncomponente desde el autocompletado.", ).exec_() return True else: return False
def pick_file_and_build_table(self): filepath, _ = QtWidgets.QFileDialog.getOpenFileName( self, "Elegir informe", os.getcwd() + "\\output", "Excel (*.xlsx)" ) if filepath == "": return file_name = filepath.split("/")[(-1)].replace(".xlsx", "") if not file_name.startswith("INFORME DE PRODUCCIÓN"): WarningBox( "Archivo equivocado", "El archivo seleccionado\nno es un informe de producción.", ).exec_() return self.filepicker_button.setEnabled(False) self.filepicker_button.setDefault(False) self.execute_button.setEnabled(True) self.execute_button.setDefault(True) report_name = file_name.replace("INFORME DE PRODUCCIÓN ", "").replace("-", "/") destinations = {"K": "Karina", "B": "Brid", "T": "Tercero"} destination_name = destinations[report_name[0]] filetitle = QtWidgets.QLabel("Informe seleccionado: " + report_name) filetitle.setStyleSheet(outgoing_dialog_table_left_title_style) destination = QtWidgets.QLabel("Destino: " + destination_name) destination.setStyleSheet(outgoing_dialog_table_right_title_style) table_title_section = QtWidgets.QHBoxLayout() table_title_section.addStretch() table_title_section.addWidget(filetitle) table_title_section.addWidget(destination) table_title_section.addStretch() self.layout.addLayout(table_title_section) table = QtWidgets.QTableWidget() table.verticalHeader().setVisible(False) table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) table.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection) table.setColumnCount(3) table.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch) table.setHorizontalHeaderLabels(["Componente", "Necesidad", "Envío"]) table.horizontalHeaderItem(0).setTextAlignment(QtCore.Qt.AlignHCenter) table.horizontalHeaderItem(1).setTextAlignment(QtCore.Qt.AlignHCenter) table.horizontalHeaderItem(2).setTextAlignment(QtCore.Qt.AlignHCenter) table.horizontalHeader().setDefaultSectionSize(110) table.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(1, QtWidgets.QHeaderView.Fixed) table.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.Fixed) wb = openpyxl.load_workbook(filepath, data_only=True) ws = wb["Informe"] self.code = ws["B"][1].value component_names = [] for i in ws["D"][3:]: if i.value is not None: component_names.append(i.value) component_amounts = [] for i in ws["H"][3:]: if i.value is not None: component_amounts.append(float(i.value)) self.outgoing_comps = dict(zip(component_names, component_amounts)) component_needs = [] for i in ws["E"][3:]: if i.value is not None: component_needs.append(float(i.value)) self.outgoing_needs = dict(zip(component_names, component_needs)) table.setRowCount(len(self.outgoing_comps)) utils.populate_table_column_with_list_of_strings( table=table, col_num=0, input_list=self.outgoing_comps.keys() ) utils.populate_table_column_with_list_of_integers( table=table, col_num=1, input_list=self.outgoing_needs.values() ) utils.populate_table_column_with_list_of_integers( table=table, col_num=2, input_list=self.outgoing_comps.values() ) custom_height = table.rowCount() * 30 + 25 if table.rowCount() <= 3: table.setMaximumHeight(custom_height) table.setFixedHeight(custom_height) elif table.rowCount() > 4: table.setMaximumHeight(205) table.setFixedHeight(205) self.layout.addWidget(table) self.center_dialog()