class pyarchinit_Schedaind(QDialog, Ui_DialogInd): MSG_BOX_TITLE = "PyArchInit - pyarchinit_US_version 0.4 - Scheda Individuo" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 BROWSE_STATUS = "b" STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'individui_table' MAPPER_TABLE_CLASS = "SCHEDAIND" NOME_SCHEDA = "Scheda Individuo" ID_TABLE = "id_scheda_ind" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Sito": "sito", "US": "us", "Area": "area", "Nr. Individuo": "nr_individuo", "Data Schedatura": "data_schedatura", "Schedatore": "schedatore", "Stima del sesso": "sesso", "Stima dell'eta' di morte min": "eta_min", "Stima dell'eta' di morte max": "eta_max", "Classi di eta'": "classi_eta", "Osservazioni": "osservazioni" } SORT_ITEMS = [ ID_TABLE, "Sito", "Area", "US", "Nr. Individuo", "Data schedatura", "Schedatore", "Stima del sesso", "Stima dell'eta' di morte min", "Stima dell'eta' di morte max", "Classi di eta'", "Osservazioni" ] TABLE_FIELDS = [ 'sito', 'area', 'us', 'nr_individuo', 'data_schedatura', 'schedatore', 'sesso', 'eta_min', 'eta_max', 'classi_eta', 'osservazioni' ] DB_SERVER = "not defined" ####nuovo sistema sort def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except Exception as e: QMessageBox.warning(self, "Sistema di connessione", str(e), QMessageBox.Ok) def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS", QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) def customize_GUI(self): pass def loadMapPreview(self, mode=0): pass def charge_list(self): sito_vl = self.UTILITY.tup_2_list_III( self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) try: sito_vl.remove('') except: pass self.comboBox_sito.clear() sito_vl.sort() self.comboBox_sito.addItems(sito_vl) def charge_periodo_list(self): pass def charge_fase_iniz_list(self): pass def charge_fase_fin_list(self): pass #buttons functions def generate_list_pdf(self): data_list = [] for i in range(len(self.DATA_LIST)): data_list.append([ str(self.DATA_LIST[i].sito), #1 - Sito int(self.DATA_LIST[i].area), #2 - Area int(self.DATA_LIST[i].us), #3 - us int(self.DATA_LIST[i].nr_individuo), #4 - nr individuo str(self.DATA_LIST[i].data_schedatura), #5 - data schedatura str(self.DATA_LIST[i].schedatore), #6 - schedatore str(self.DATA_LIST[i].sesso), #7 - sesso str(self.DATA_LIST[i].eta_min), #8 - eta' minima str(self.DATA_LIST[i].eta_max), #9- eta massima str(self.DATA_LIST[i].classi_eta), #10 - classi di eta' str(self.DATA_LIST[i].osservazioni) #11 - osservazioni ]) return data_list def on_pushButton_pdf_exp_pressed(self): Individui_pdf_sheet = generate_pdf() data_list = self.generate_list_pdf() Individui_pdf_sheet.build_Individui_sheets(data_list) def on_pushButton_exp_index_ind_pressed(self): Individui_pdf_index = generate_pdf() data_list = self.generate_list_pdf() Individui_pdf_index.build_index_individui(data_list, data_list[0][0]) """ def on_toolButtonPan_toggled(self): self.toolPan = QgsMapToolPan(self.mapPreview) self.mapPreview.setMapTool(self.toolPan) """ """ def on_pushButton_showSelectedFeatures_pressed(self): field_position = self.pyQGIS.findFieldFrDict(self.ID_TABLE) field_list = self.pyQGIS.selectedFeatures() id_list_sf = self.pyQGIS.findItemInAttributeMap(field_position, field_list) id_list = [] for idl in id_list_sf: sid = idl.toInt() id_list.append(sid[0]) items,order_type = [self.ID_TABLE], "asc" self.empty_fields() self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort(id_list, items, order_type, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for us in temp_data_list: self.DATA_LIST.append(us) self.fill_fields() self.label_status.setText(self.STATUS["usa"]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] """ #buttons functions def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_toolButtonGis_toggled(self): if self.toolButtonGis.isChecked() == True: QMessageBox.warning( self, "Messaggio", "Modalita' GIS attiva. Da ora le tue ricerche verranno visualizzate sul GIS", QMessageBox.Ok) else: QMessageBox.warning( self, "Messaggio", "Modalita' GIS disattivata. Da ora le tue ricerche non verranno piu' visualizzate sul GIS", QMessageBox.Ok) def on_toolButtonPreview_toggled(self): if self.toolButtonPreview.isChecked() == True: QMessageBox.warning( self, "Messaggio", "Modalita' Preview US attivata. Le piante delle US saranno visualizzate nella sezione Piante", QMessageBox.Ok) self.loadMapPreview() else: self.loadMapPreview(1) """ def on_pushButton_addRaster_pressed(self): if self.toolButtonGis.isChecked() == True: self.pyQGIS.addRasterLayer() """ def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEditable(["self.comboBox_sito"], 0) self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEnable(["self.lineEdit_area"], "True") self.setComboBoxEnable(["self.lineEdit_us"], "True") self.setComboBoxEnable(["self.lineEdit_individuo"], "True") self.set_rec_counter('', '') self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.SORT_STATUS = "n" self.label_sort.setText( self.SORTED_ITEMS[self.SORT_STATUS]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning( self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.lineEdit_area"], "False") self.setComboBoxEnable(["self.lineEdit_us"], "False") self.setComboBoxEnable(["self.lineEdit_individuo"], "False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass def data_error_check(self): test = 0 EC = Error_check() if EC.data_is_empty(str(self.comboBox_sito.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Sito. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.lineEdit_area.text())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Area. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.lineEdit_us.text())) == 0: QMessageBox.warning(self, "ATTENZIONE", "Campo US. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.lineEdit_individuo.text())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo nr individuo. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 area = self.lineEdit_area.text() us = self.lineEdit_us.text() nr_individuo = self.lineEdit_individuo.text() eta_min = self.comboBox_eta_min.currentText() eta_max = self.comboBox_eta_max.currentText() if area != "": if EC.data_lenght(area, 3) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Area. \n Il valore deve essere lungo massimo 4 caratteri alfanumerici", QMessageBox.Ok) test = 1 if us != "": if EC.data_is_int(us) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo US. \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if nr_individuo != "": if EC.data_is_int(nr_individuo) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Nr individuo. \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if eta_min != "": if EC.data_is_int(eta_min) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Età minima \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if eta_max != "": if EC.data_is_int(eta_max) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Età massima \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): if self.comboBox_eta_min.currentText() == "": eta_min = None else: eta_min = int(self.comboBox_eta_min.currentText()) if self.comboBox_eta_max.currentText() == "": eta_max = None else: eta_max = int(self.comboBox_eta_max.currentText()) if self.comboBox_classi_eta.currentText() == "": classi_eta = '' else: classi_eta = str(self.comboBox_classi_eta.currentText()) try: data = self.DB_MANAGER.insert_values_ind( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, str(self.comboBox_sito.currentText()), #1 - Sito str(self.lineEdit_area.text()), #2 - area int(self.lineEdit_us.text()), #3 - US int(self.lineEdit_individuo.text()), #4 - individuo str(self.lineEdit_data_schedatura.text() ), #5 - data schedatura str(self.lineEdit_schedatore.text()), #6 - schedatore str(self.comboBox_sesso.currentText()), #7 - sesso eta_min, #8 - eta' min eta_max, #9 - eta' max classi_eta, #10 - classi eta str(self.textEdit_osservazioni.toPlainText() ) #11 - osservazioni ) try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n" + str(e), QMessageBox.Ok) return 0 #insert new row into tableWidget def on_pushButton_insert_row_rapporti_pressed(self): self.insert_new_row('self.tableWidget_rapporti') def on_pushButton_insert_row_inclusi_pressed(self): self.insert_new_row('self.tableWidget_inclusi') def on_pushButton_insert_row_campioni_pressed(self): self.insert_new_row('self.tableWidget_campioni') def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messagio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") except Exception as e: QMessageBox.warning(self, "Messaggio!!!", "Tipo di errore: " + str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" ### self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEnable(["self.lineEdit_area"], "True") self.setComboBoxEnable(["self.lineEdit_us"], "True") self.setComboBoxEnable(["self.lineEdit_individuo"], "True") self.setComboBoxEnable(["self.textEdit_osservazioni"], "False") ### self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.empty_fields() def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning( self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: if self.lineEdit_us.text() != "": us = int(self.lineEdit_us.text()) else: us = "" if self.lineEdit_individuo.text() != "": individuo = int(self.lineEdit_individuo.text()) else: individuo = "" if self.comboBox_eta_min.currentText() != "": eta_min = int(self.comboBox_eta_min.currentText()) else: eta_min = "" if self.comboBox_eta_max.currentText() != "": eta_max = int(self.comboBox_eta_max.currentText()) else: eta_max = "" search_dict = { self.TABLE_FIELDS[0]: "'" + str(self.comboBox_sito.currentText()) + "'", #1 - Sito self.TABLE_FIELDS[1]: "'" + str(self.lineEdit_area.text()) + "'", #2 - Area self.TABLE_FIELDS[2]: us, #3 - US self.TABLE_FIELDS[3]: individuo, #4 - individuo self.TABLE_FIELDS[4]: "'" + str(self.lineEdit_data_schedatura.text()) + "'", #5 - data schedatura self.TABLE_FIELDS[5]: "'" + str(self.lineEdit_schedatore.text()) + "'", #6 - schedatore self.TABLE_FIELDS[6]: "'" + str(self.comboBox_sesso.currentText()) + "'", #7 - sesso self.TABLE_FIELDS[7]: eta_min, #8 - eta min self.TABLE_FIELDS[8]: eta_max, #9 - eta max self.TABLE_FIELDS[9]: "'" + str(self.comboBox_classi_eta.currentText()) + "'", #10 - classi eta self.TABLE_FIELDS[10]: str(self.textEdit_osservazioni.toPlainText() ) #11 - osservazioni } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning( self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.lineEdit_area"], "False") self.setComboBoxEnable(["self.lineEdit_us"], "False") self.setComboBoxEnable(["self.lineEdit_individuo"], "False") self.setComboBoxEnable(["self.textEdit_osservazioni"], "True") else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") if self.toolButtonGis.isChecked() == True: id_us_list = self.charge_id_us_for_individuo() self.pyQGIS.charge_individui_us(id_us_list) self.pyQGIS.charge_individui_from_research( self.DATA_LIST) else: strings = ("Sono stati trovati", self.REC_TOT, "records") if self.toolButtonGis.isChecked() == True: id_us_list = self.charge_id_us_for_individuo() self.pyQGIS.charge_individui_us(id_us_list) self.pyQGIS.charge_individui_from_research( self.DATA_LIST) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.lineEdit_area"], "False") self.setComboBoxEnable(["self.lineEdit_us"], "False") self.setComboBoxEnable(["self.lineEdit_individuo"], "False") self.setComboBoxEnable(["self.textEdit_osservazioni"], "True") QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE ) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] if self.DB_SERVER == 'sqlite': for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): self.DATA_LIST.append(i) else: id_list = [] for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if value != None: sub_list.append(str(value.text())) if bool(sub_list) == True: lista.append(sub_list) return lista def tableInsertData(self, t, d): pass """ self.table_name = t self.data_list = ast.literal_eval(d) self.data_list.sort() #column table count table_col_count_cmd = ("%s.columnCount()") % (self.table_name) table_col_count = ast.literal_eval(table_col_count_cmd) #clear table table_clear_cmd = ("%s.clearContents()") % (self.table_name) ast.literal_eval(table_clear_cmd) for i in range(table_col_count): table_rem_row_cmd = ("%s.removeRow(%d)") % (self.table_name, i) ast.literal_eval(table_rem_row_cmd) #for i in range(len(self.data_list)): #self.insert_new_row(self.table_name) for row in range(len(self.data_list)): cmd = ('%s.insertRow(%s)') % (self.table_name, row) ast.literal_eval(cmd) for col in range(len(self.data_list[row])): #item = self.comboBox_sito.setEditText(self.data_list[0][col] item = QTableWidgetItem(self.data_list[row][col]) exec_str = ('%s.setItem(%d,%d,item)') % (self.table_name,row,col) ast.literal_eval(exec_str) """ def insert_new_row(self, table_name): """insert new row into a table based on table_name""" cmd = table_name + ".insertRow(0)" ast.literal_eval(cmd) def empty_fields(self): #rapporti_row_count = self.tableWidget_rapporti.rowCount() #campioni_row_count = self.tableWidget_campioni.rowCount() #inclusi_row_count = self.tableWidget_inclusi.rowCount() self.comboBox_sito.setEditText("") #1 - Sito self.lineEdit_area.clear() #2 - area self.lineEdit_us.clear() #3 - US self.lineEdit_data_schedatura.clear() #4 - data schedatura self.lineEdit_schedatore.clear() #5 - schedatore self.lineEdit_individuo.clear() #6 - individuo self.comboBox_sesso.setEditText("") #7 - sesso self.comboBox_eta_min.setEditText("") #8 - eta' minima self.comboBox_eta_max.setEditText("") #9 - eta' massima self.comboBox_classi_eta.setEditText("") #10 - classi di eta' self.textEdit_osservazioni.clear() #11 - osservazioni def fill_fields(self, n=0): self.rec_num = n try: self.comboBox_sito.setEditText( str(self.DATA_LIST[self.rec_num].sito)) #1 - Sito self.lineEdit_area.setText(str( self.DATA_LIST[self.rec_num].area)) #2 - area self.lineEdit_us.setText(str( self.DATA_LIST[self.rec_num].us)) #3 - us self.lineEdit_individuo.setText( str(self.DATA_LIST[ self.rec_num].nr_individuo)) #4 - nr individuo self.lineEdit_data_schedatura.setText( str(self.DATA_LIST[ self.rec_num].data_schedatura)) #5 - data schedatura self.lineEdit_schedatore.setText( str(self.DATA_LIST[self.rec_num].schedatore)) #6 - schedatore self.comboBox_sesso.setEditText( str(self.DATA_LIST[self.rec_num].sesso)) #7 - sesso if self.DATA_LIST[self.rec_num].eta_min == None: #8 - eta minima self.comboBox_eta_min.setEditText("") else: self.comboBox_eta_min.setEditText( str(self.DATA_LIST[self.rec_num].eta_min)) if self.DATA_LIST[self.rec_num].eta_max == None: #9 - eta massima self.comboBox_eta_max.setEditText("") else: self.comboBox_eta_max.setEditText( str(self.DATA_LIST[self.rec_num].eta_max)) self.comboBox_classi_eta.setEditText( str(self.DATA_LIST[ self.rec_num].classi_eta)) #10 - classi di eta str( self.textEdit_osservazioni.setText(self.DATA_LIST[ self.rec_num].osservazioni)) #11 - osservazioni if self.toolButtonPreview.isChecked() == True: self.loadMapPreview() except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): if self.comboBox_eta_min.currentText() == "": eta_min = None else: eta_min = self.comboBox_eta_min.currentText() if self.comboBox_eta_max.currentText() == "": eta_max = None else: eta_max = self.comboBox_eta_max.currentText() #data self.DATA_LIST_REC_TEMP = [ str(self.comboBox_sito.currentText()), #1 - Sito str(self.lineEdit_area.text()), #2 - Area str(self.lineEdit_us.text()), #3 - US str(self.lineEdit_individuo.text()), #4 - individuo str(self.lineEdit_data_schedatura.text()), #5 - data schedatura str(self.lineEdit_schedatore.text()), #6 - schedatore str(self.comboBox_sesso.currentText()), #7 - sesso str(eta_min), #8- eta minima str(eta_max), #9 - eta massima str(self.comboBox_classi_eta.currentText()), #10 - classi eta str(self.textEdit_osservazioni.toPlainText()) ] #11 - osservazioni def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning( self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) #f = open('/test_rec_to_update_ind.txt', 'w') #f.write(str(rec_to_update)) #f.close() return rec_to_update def charge_id_us_for_individuo(self): data_list_us = [] for rec in range(len(self.DATA_LIST)): sito = "'" + str(self.DATA_LIST[rec].sito) + "'" area = "'" + str(self.DATA_LIST[rec].area) + "'" us = int(self.DATA_LIST[rec].us) serch_dict_us = {'sito': sito, 'area': area, 'us': us} us_ind = self.DB_MANAGER.query_bool(serch_dict_us, "US") data_list_us.append(us_ind) data_list_id_us = [] for us in range(len(data_list_us)): data_list_id_us.append(data_list_us[us][0].id_us) return data_list_id_us def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()
class pyarchinit_Thesaurus(QDialog, Ui_DialogThesaurus): MSG_BOX_TITLE = "PyArchInit - pyarchinit_version 0.4 - Scheda Campioni" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} BROWSE_STATUS = "b" SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'pyarchinit_thesaurus_sigle' MAPPER_TABLE_CLASS = "PYARCHINIT_THESAURUS_SIGLE" NOME_SCHEDA = "Scheda Thesaurus Sigle" ID_TABLE = "id_thesaurus_sigle" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Nome tabella": "nome_tabella", "Sigla": "sigla", "Sigla estesa": "sigla_estesa", "Descrizione": "descrizione", "Tipologia sigla": "tipologia_sigla" } SORT_ITEMS = [ ID_TABLE, "Nome tabella", "Sigla", "Sigla estesa", "Descrizione", "Tipologia sigla" ] TABLE_FIELDS = [ "nome_tabella", "sigla", "sigla_estesa", "descrizione", "tipologia_sigla" ] DB_SERVER = "not defined" ####nuovo sistema sort def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except Exception as e: QMessageBox.warning(self, "Sistema di connessione", str(e), QMessageBox.Ok) def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() test_conn = conn_str.find('sqlite') if test_conn == 0: self.DB_SERVER = "sqlite" try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = 'b' self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS" + str(e), QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) def charge_list(self): pass ## sito_vl = self.UTILITY.tup_2_list_III(self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) ## ## try: ## sito_vl.remove('') ## except: ## pass ## self.comboBox_sito.clear() ## sito_vl.sort() ## self.comboBox_sito.addItems(sito_vl) #buttons functions def on_pushButton_pdf_pressed(self): pass def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEditable(["self.comboBox_sigla"], 1) self.setComboBoxEditable(["self.comboBox_sigla_estesa"], 1) self.setComboBoxEditable(["self.comboBox_tipologia_sigla"], 1) self.setComboBoxEditable(["self.comboBox_nome_tabella"], 1) self.setComboBoxEnable(["self.comboBox_sigla"], "True") self.setComboBoxEnable(["self.comboBox_sigla_estesa"], "True") self.setComboBoxEnable(["self.comboBox_tipologia_sigla"], "True") self.setComboBoxEnable(["self.comboBox_nome_tabella"], "True") self.set_rec_counter('', '') self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.SORT_STATUS = "n" self.label_sort.setText( self.SORTED_ITEMS[self.SORT_STATUS]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning( self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.setComboBoxEditable(["self.comboBox_sigla"], 1) self.setComboBoxEditable(["self.comboBox_sigla_estesa"], 1) self.setComboBoxEditable(["self.comboBox_tipologia_sigla"], 1) self.setComboBoxEditable(["self.comboBox_nome_tabella"], 1) self.setComboBoxEnable(["self.comboBox_sigla"], "False") self.setComboBoxEnable(["self.comboBox_sigla_estesa"], "False") self.setComboBoxEnable(["self.comboBox_tipologia_sigla"], "False") self.setComboBoxEnable(["self.comboBox_nome_tabella"], "False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass def data_error_check(self): test = 0 EC = Error_check() if EC.data_is_empty(str(self.comboBox_sigla.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Sigla \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str( self.comboBox_sigla_estesa.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Sigla estesa \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str( self.comboBox_tipologia_sigla.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Tipologia sigla. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str( self.comboBox_nome_tabella.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Nome tabella \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str( self.textEdit_descrizione_sigla.toPlainText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Descrizione \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): try: data = self.DB_MANAGER.insert_values_thesaurus( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, str(self.comboBox_nome_tabella.currentText() ), #1 - nome tabella str(self.comboBox_sigla.currentText()), #2 - sigla str(self.comboBox_sigla_estesa.currentText() ), #3 - sigla estesa str(self.textEdit_descrizione_sigla.toPlainText() ), #4 - descrizione str(self.comboBox_tipologia_sigla.currentText()) ) #5 - tipologia sigla try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n" + str(e), QMessageBox.Ok) return 0 def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messagio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") except Exception as e: QMessageBox.warning(self, "Messaggio!!!", "Tipo di errore: " + str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) ### self.setComboBoxEditable(["self.comboBox_sigla"], 1) self.setComboBoxEditable(["self.comboBox_sigla_estesa"], 1) self.setComboBoxEditable(["self.comboBox_tipologia_sigla"], 1) self.setComboBoxEditable(["self.comboBox_nome_tabella"], 1) self.setComboBoxEnable(["self.comboBox_sigla"], "True") self.setComboBoxEnable(["self.comboBox_sigla_estesa"], "True") self.setComboBoxEnable(["self.comboBox_tipologia_sigla"], "True") self.setComboBoxEnable(["self.comboBox_nome_tabella"], "True") self.setComboBoxEnable(["self.textEdit_descrizione_sigla"], "False") ### self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.empty_fields() def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning( self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: search_dict = { self.TABLE_FIELDS[0]: "'" + str(self.comboBox_nome_tabella.currentText()) + "'", #1 - Nome tabella self.TABLE_FIELDS[1]: "'" + str(self.comboBox_sigla.currentText()) + "'", #2 - sigla self.TABLE_FIELDS[2]: "'" + str(self.comboBox_sigla_estesa.currentText()) + "'", #3 - sigla estesa self.TABLE_FIELDS[4]: "'" + str(self.comboBox_tipologia_sigla.currentText()) + "'" #3 - tipologia sigla } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning( self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEditable(["self.comboBox_sigla"], 1) self.setComboBoxEditable(["self.comboBox_sigla_estesa"], 1) self.setComboBoxEditable(["self.comboBox_tipologia_sigla"], 1) self.setComboBoxEditable(["self.comboBox_nome_tabella"], 1) self.setComboBoxEnable(["self.comboBox_sigla"], "False") self.setComboBoxEnable(["self.comboBox_sigla_estesa"], "False") self.setComboBoxEnable(["self.comboBox_tipologia_sigla"], "False") self.setComboBoxEnable(["self.comboBox_nome_tabella"], "False") self.setComboBoxEnable(["self.textEdit_descrizione_sigla"], "True") else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") else: strings = ("Sono stati trovati", self.REC_TOT, "records") self.setComboBoxEditable(["self.comboBox_sigla"], 1) self.setComboBoxEditable( ["self.comboBox_sigla_estesa"], 1) self.setComboBoxEditable( ["self.comboBox_tipologia_sigla"], 1) self.setComboBoxEditable( ["self.comboBox_nome_tabella"], 1) self.setComboBoxEnable(["self.comboBox_sigla"], "False") self.setComboBoxEnable(["self.comboBox_sigla_estesa"], "False") self.setComboBoxEnable( ["self.comboBox_tipologia_sigla"], "False") self.setComboBoxEnable(["self.comboBox_nome_tabella"], "False") self.setComboBoxEnable( ["self.textEdit_descrizione_sigla"], "True") QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def on_pushButton_test_pressed(self): pass ## data = "Sito: " + str(self.comboBox_sito.currentText()) ## ## test = Test_area(data) ## test.run_test() def on_pushButton_draw_pressed(self): pass #self.pyQGIS.charge_layers_for_draw(["1", "2", "3", "4", "5", "7", "8", "9", "10", "12"]) def on_pushButton_sites_geometry_pressed(self): pass ## sito = unicode(self.comboBox_sito.currentText()) ## self.pyQGIS.charge_sites_geometry(["1", "2", "3", "4", "8"], "sito", sito) def on_pushButton_rel_pdf_pressed(self): pass ## check=QMessageBox.warning(self, "Attention", "Under testing: this method can contains some bugs. Do you want proceed?",QMessageBox.Cancel,1) ## if check == 1: ## erp = exp_rel_pdf(unicode(self.comboBox_sito.currentText())) ## erp.export_rel_pdf() def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE ) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] if self.DB_SERVER == 'sqlite': for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): self.DATA_LIST.append(i) else: id_list = [] for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if bool(value) == True: sub_list.append(str(value.text())) lista.append(sub_list) return lista def empty_fields(self): self.comboBox_sigla.setEditText("") #1 - Sigla self.comboBox_sigla_estesa.setEditText("") #2 - Sigla estesa self.comboBox_tipologia_sigla.setEditText("") #1 - Tipologia sigla self.comboBox_nome_tabella.setEditText("") #2 - Nome tabella self.textEdit_descrizione_sigla.clear() #4 - Descrizione def fill_fields(self, n=0): self.rec_num = n str(self.comboBox_sigla.setEditText( self.DATA_LIST[self.rec_num].sigla)) #1 - Sigla str( self.comboBox_sigla_estesa.setEditText( self.DATA_LIST[self.rec_num].sigla_estesa)) #2 - Sigla estesa str( self.comboBox_tipologia_sigla.setEditText(self.DATA_LIST[ self.rec_num].tipologia_sigla)) #3 - tipologia sigla str( self.comboBox_nome_tabella.setEditText( self.DATA_LIST[self.rec_num].nome_tabella)) #4 - nome tabella str( str( self.textEdit_descrizione_sigla.setText(self.DATA_LIST[ self.rec_num].descrizione))) #5 - descrizione sigla def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): #data self.DATA_LIST_REC_TEMP = [ str(self.comboBox_nome_tabella.currentText()), #1 - Nome tabella str(self.comboBox_sigla.currentText()), #2 - sigla str(self.comboBox_sigla_estesa.currentText()), #3 - sigla estesa str(self.textEdit_descrizione_sigla.toPlainText() ), #4 - descrizione str(self.comboBox_tipologia_sigla.currentText() ) #3 - tipologia sigla ] def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning( self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()
def create_dict_field_value(f): fields = f #riceve la lista dei campi diz_field_value = {} for field in fields: #per ogni campi esegue una query per ricavare il valore field_copy = field[1:] print("query su", field_copy) value = "qui il valore" #query al db per ricavare il singolo valore, deve cerca in base a nome_tabella, id record e nome campo ## """VERIFICARE COME ARRIVA IL DATO DAL DB""" diz_field_value[field] = value return diz_field_value #http://www.anthropology-resources.net/Texts/files.html dynamic_replace("il mio /sw preferito: /nome!", ["/gig", "/ugo"],["plugin", "pyArchInit"]) cell_schema = [[ 'Nr US: /us', 'numero di us: /us', '03', 'Area: /area', '05', '06', '07', '09' ], [ 'la fava: /us', 'numero di us: /us', '03', 'Area: /area', '05', '06', '07', '09' ]] conn = Connection() conn_str = conn.conn_str() db = Pyarchinit_db_management(conn_str) print(db.query(ast.literal_eval('SITE'))) #print convert_cell_schema(cell_schema, ['/us', '/area'])
class pyarchinit_Campioni(QDialog, Ui_DialogCampioni): MSG_BOX_TITLE = "PyArchInit - pyarchinit_version 0.4 - Scheda Campioni" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} BROWSE_STATUS = "b" SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'campioni_table' MAPPER_TABLE_CLASS = "CAMPIONI" NOME_SCHEDA = "Scheda Campioni" ID_TABLE = "id_campione" CONVERSION_DICT = { ID_TABLE:ID_TABLE, "Sito":"sito", "Nr Campione":"nr_campione", "Tipo campione":"tipo_campione", "Descrizione":"descrizione", "Area":"area", "US":"us", "Nr. Inventario Materiale":"numero_inventario_materiale", "Nr Cassa":"nr_cassa", "Luogo di conservazione":"luogo_conservazione" } SORT_ITEMS = [ ID_TABLE, "Sito", "Nr Campione", "Tipo campione", "Descrizione", "Area", "US", "Nr. Inventario Materiale", "Nr Cassa", "Luogo di conservazione" ] TABLE_FIELDS = [ "sito", "nr_campione", "tipo_campione", "descrizione", "area", "us", "numero_inventario_materiale", "nr_cassa", "luogo_conservazione" ] DB_SERVER = 'not defined' def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except Exception as e: QMessageBox.warning(self, "Sistema di connessione", str(e), QMessageBox.Ok) def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() test_conn = conn_str.find('sqlite') if test_conn == 0: self.DB_SERVER = "sqlite" try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.BROWSE_STATUS = 'b' self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.charge_list() self.fill_fields() else: QMessageBox.warning(self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning(self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS" + str(e) , QMessageBox.Ok) else: QMessageBox.warning(self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e) , QMessageBox.Ok) def charge_list(self): sito_vl = self.UTILITY.tup_2_list_III(self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) try: sito_vl.remove('') except: pass self.comboBox_sito.clear() sito_vl.sort() self.comboBox_sito.addItems(sito_vl) #buttons functions def on_pushButton_pdf_pressed(self): pass def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items,order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort(id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if(QMessageBox.warning(self,'Errore',"Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel,1)) #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEditable(["self.comboBox_sito"],1) self.setComboBoxEnable(["self.comboBox_sito"],"True") self.setComboBoxEnable(["self.lineEdit_nr_campione"],"True") self.set_rec_counter('', '') self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if(QMessageBox.warning(self,'ATTENZIONE',"Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel,1)) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning(self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), len(self.DATA_LIST)-1 self.set_rec_counter(self.REC_TOT, self.REC_CORR+1) self.setComboBoxEditable(["self.comboBox_sito"],1) self.setComboBoxEnable(["self.comboBox_sito"],"False") self.setComboBoxEnable(["self.lineEdit_nr_campione"],"False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass def data_error_check(self): test = 0 EC = Error_check() if EC.data_is_empty(str(self.comboBox_sito.currentText())) == 0: QMessageBox.warning(self, "ATTENZIONE", "Campo Sito. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.lineEdit_nr_campione.text())) == 0: QMessageBox.warning(self, "ATTENZIONE", "Campo nr_campione \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 nr_campione = self.lineEdit_nr_campione.text() if nr_campione != "": if EC.data_is_int(nr_campione) == 0: QMessageBox.warning(self, "ATTENZIONE", "Campo Nr Campione \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): try: if self.lineEdit_nr_campione.text() == "": nr_campione = None else: nr_campione = int(self.lineEdit_nr_campione.text()) if self.lineEdit_us.text() == "": us = None else: us = int(self.lineEdit_us.text()) if self.lineEdit_cassa.text() == "": nr_cassa = None else: nr_cassa = int(self.lineEdit_cassa.text()) if self.lineEdit_n_inv_mat.text() == "": numero_inventario_materiale = None else: numero_inventario_materiale = int(self.lineEdit_n_inv_mat.text()) data = self.DB_MANAGER.insert_campioni_values( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE)+1, str(self.comboBox_sito.currentText()), #1 - Sito nr_campione, #2 - nr campione str(self.comboBox_tipo_campione.currentText()), #3 - tipo_campione str(self.textEdit_descrizione_camp.toPlainText()), #4 - descrizione str(self.lineEdit_area.text()), #5 - area us, #6 - us numero_inventario_materiale, #7 - inv materiale nr_cassa, #8 - nr_cassa str(self.lineEdit_luogo_conservazione.text())) #9 - luogo conservazione try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n"+ str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n"+str(e), QMessageBox.Ok) return 0 def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if(QMessageBox.warning(self,'Errore',"Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel,1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR+1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), len(self.DATA_LIST)-1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR+1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR-1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR+1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR+1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR-1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR+1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning(self,"Attenzione!!!","Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel,1) if msg != 1: QMessageBox.warning(self,"Messagio!!!","Azione Annullata!") else: try: id_to_delete = ast.literal_eval("self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self,"Messaggio!!!","Record eliminato!") except Exception as e: QMessageBox.warning(self,"Messaggio!!!","Tipo di errore: "+str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) ### self.setComboBoxEnable(["self.comboBox_sito"],"True") self.setComboBoxEnable(["self.lineEdit_nr_campione"],"True") self.setComboBoxEnable(["self.textEdit_descrizione_camp"],"False") ### self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('','') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.empty_fields() def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning(self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: if self.lineEdit_nr_campione.text() == "": nr_campione = None else: nr_campione = int(self.lineEdit_nr_campione.text()) if self.lineEdit_us.text() == "": us = None else: us = int(self.lineEdit_us.text()) if self.lineEdit_cassa.text() == "": nr_cassa = None else: nr_cassa = int(self.lineEdit_cassa.text()) if self.lineEdit_n_inv_mat.text() == "": numero_inventario_materiale = None else: numero_inventario_materiale = int(self.lineEdit_n_inv_mat.text()) search_dict = { self.TABLE_FIELDS[0] : "'"+str(self.comboBox_sito.currentText())+"'", #1 - Sito self.TABLE_FIELDS[1] : nr_campione, #2 - numero_campione self.TABLE_FIELDS[2] : "'"+str(self.comboBox_tipo_campione.currentText())+"'", #3 - tipo campione self.TABLE_FIELDS[4] : "'"+str(self.lineEdit_area.text()) +"'", #4- area self.TABLE_FIELDS[5] : us, #5 - us self.TABLE_FIELDS[6] : numero_inventario_materiale, #6 - numero inventario materiale self.TABLE_FIELDS[7] : nr_cassa, #7- nr cassa self.TABLE_FIELDS[8] : "'"+str(self.lineEdit_luogo_conservazione.text())+"'" #8 - periodo finale } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEnable(["self.comboBox_sito"],"False") self.setComboBoxEnable(["self.lineEdit_nr_campione"],"True") self.setComboBoxEnable(["self.textEdit_descrizione_camp"],"True") else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR+1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") else: strings = ("Sono stati trovati", self.REC_TOT, "records") self.setComboBoxEnable(["self.comboBox_sito"],"False") self.setComboBoxEnable(["self.lineEdit_nr_campione"],"True") self.setComboBoxEnable(["self.textEdit_descrizione_camp"],"True") QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def on_pushButton_test_pressed(self): pass def on_pushButton_index_pdf_pressed(self): Camp_index_pdf = generate_campioni_pdf() data_list = self.generate_list_pdf() Camp_index_pdf.build_index_Campioni(data_list, data_list[0][0]) sito_ec = str(self.comboBox_sito.currentText()) Mat_casse_pdf = generate_campioni_pdf() data_list = self.generate_el_casse_pdf(sito_ec) Mat_casse_pdf.build_index_Casse(data_list, sito_ec) Mat_casse_pdf.build_box_labels_Campioni(data_list, sito_ec) def on_pushButton_exp_champ_sheet_pdf_pressed(self): if self.records_equal_check() == 1: self.update_if(QMessageBox.warning(self,'Errore',"Il record è stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel,1)) Champ_pdf_sheet = generate_campioni_pdf() data_list = self.generate_list_pdf() Champ_pdf_sheet.build_Champ_sheets(data_list) #******************************************************************************** def generate_el_casse_pdf(self, sito): self.sito_ec = sito elenco_casse_res = self.DB_MANAGER.query_distinct('CAMPIONI',[['sito','"' + str(self.sito_ec)+'"']], ['nr_cassa']) elenco_casse_list = [] #accoglie la sigla numerica delle casse presenti per un determinato sito. for i in elenco_casse_res: elenco_casse_list.append(i.nr_cassa) data_for_pdf = [] #contiene i singoli dati per l'esportazione dell'elenco casse elenco_casse_list.sort() for cassa in elenco_casse_list: single_cassa = [] #contiene i dati della singola cassa str_cassa = "<b>"+str(cassa)+"</b>" single_cassa.append(str_cassa) #inserisce la sigla di cassa ###cerca le singole area/us presenti in quella cassa res_inv = self.DB_MANAGER.query_distinct('CAMPIONI',[['sito','"' + str(self.sito_ec)+'"'], ['nr_cassa',cassa]], ['nr_campione', 'tipo_campione']) res_inv_list = [] for i in res_inv: res_inv_list.append(i) n_inv_res_list = "" for i in range(len(res_inv_list)): if i != len(res_inv_list)-1: n_inv_res_list += " N.inv:" + str(res_inv_list[i].nr_campione) + "/"+ str(res_inv_list[i].tipo_campione)+"," else: n_inv_res_list += " N.inv:" + str(res_inv_list[i].nr_campione) + "/"+ str(res_inv_list[i].tipo_campione) #inserisce l'elenco degli inventari single_cassa.append(n_inv_res_list) ###cerca le singole area/us presenti in quella cassa res_us = self.DB_MANAGER.query_distinct('CAMPIONI',[['sito','"' + str(self.sito_ec)+'"'], ['nr_cassa',cassa]], ['area', 'us']) res_us_list = [] for i in res_us: res_us_list.append(i) us_res_list = ""#[] #accoglie l'elenco delle US presenti in quella cassa for i in range(len(res_us_list)): params_dict = {'sito':'"'+str(self.sito_ec)+'"', 'area': '"'+str(res_us_list[i].area)+'"', 'us':'"'+str(res_us_list[i].us)+'"'} res_struct = self.DB_MANAGER.query_bool(params_dict, 'US') res_struct_list = [] for s_strutt in res_struct: res_struct_list.append(s_strutt) structure_string = "" if len(res_struct_list) > 0: for sing_us in res_struct_list: if sing_us.struttura != '': structure_string += "(" + str(sing_us.struttura) + '/' if structure_string != "": structure_string += ")" if i != len(res_us_list)-1: us_res_list += "Area:"+str(res_us_list[i].area) + ",US:"+str(res_us_list[i].us)+structure_string+", " #.append("Area:"+str(i.area) + ",US:"+str(i.us)) else: us_res_list += "Area:"+str(res_us_list[i].area) + ",US:"+str(res_us_list[i].us)+structure_string #.append("Area:"+str(i.area) + ",US:"+str(i.us)) #us_res_list.sort() #inserisce l'elenco delle us single_cassa.append(us_res_list) ###cerca il luogo di conservazione della cassa params_dict = {'sito':'"'+str(self.sito_ec)+'"', 'nr_cassa': '"'+str(cassa)+'"'} res_luogo_conservazione = self.DB_MANAGER.query_bool(params_dict, 'CAMPIONI') luogo_conservazione = res_luogo_conservazione[0].luogo_conservazione single_cassa.append(luogo_conservazione) #inserisce la sigla di cassa data_for_pdf.append(single_cassa) #QMessageBox.warning(self,'tk',str(data_for_pdf), QMessageBox.Ok) return data_for_pdf def generate_list_pdf(self): data_list = [] for i in range(len(self.DATA_LIST)): if str(self.DATA_LIST[i].nr_campione) == 'None': numero_campione = '' else: numero_campione = str(self.DATA_LIST[i].nr_campione) if str(self.DATA_LIST[i].us) == 'None': us = '' else: us = str(self.DATA_LIST[i].us) if str(self.DATA_LIST[i].numero_inventario_materiale) == 'None': numero_inventario_materiale = '' else: numero_inventario_materiale = str(self.DATA_LIST[i].numero_inventario_materiale) if str(self.DATA_LIST[i].nr_cassa) == 'None': nr_cassa = '' else: nr_cassa = str(self.DATA_LIST[i].nr_cassa) data_list.append([ str(self.DATA_LIST[i].sito), #1 - Sito str(numero_campione), #2 - Numero campione str(self.DATA_LIST[i].tipo_campione), #3 - Tipo campione str(self.DATA_LIST[i].descrizione), #4 - Descrizione str(self.DATA_LIST[i].area), #5 - Area str(us), #6 - us str(numero_inventario_materiale), #7 - numero inventario materiale str(self.DATA_LIST[i].luogo_conservazione), #8 - luogo_conservazione str(nr_cassa) #9 - nr cassa ]) return data_list def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i."+ self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort(id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort(id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] id_list = [] for i in self.DB_MANAGER.query(ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i."+ self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort(id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename+".rowCount()") col = ast.literal_eval(self.tablename+".columnCount()") lista=[] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename+".item(r,c)") if bool(value) == True: sub_list.append(str(value.text())) lista.append(sub_list) return lista def empty_fields(self): self.comboBox_sito.setEditText("") #1 - Sito self.lineEdit_nr_campione.clear() #2 - Nr campione self.comboBox_tipo_campione.setEditText("") #3 - Sito self.textEdit_descrizione_camp.clear() #4 - descrizione self.lineEdit_nr_campione.clear() #5 - Nr campione self.lineEdit_area.clear() #6 - area self.lineEdit_us.clear() #7 - us self.lineEdit_n_inv_mat.clear() #8 - numero inventario_materiale self.lineEdit_luogo_conservazione.clear() #9 - luogo di conservazione self.lineEdit_cassa.clear() #10 - cassa def fill_fields(self, n=0): self.rec_num = n if str(self.DATA_LIST[self.rec_num].nr_campione) == 'None': numero_campione = '' else: numero_campione = str(self.DATA_LIST[self.rec_num].nr_campione) if str(self.DATA_LIST[self.rec_num].us) == 'None': us = '' else: us = str(self.DATA_LIST[self.rec_num].us) if str(self.DATA_LIST[self.rec_num].numero_inventario_materiale) == 'None': numero_inventario_materiale = '' else: numero_inventario_materiale = str(self.DATA_LIST[self.rec_num].numero_inventario_materiale) if str(self.DATA_LIST[self.rec_num].nr_cassa) == 'None': nr_cassa = '' else: nr_cassa = str(self.DATA_LIST[self.rec_num].nr_cassa) str(self.comboBox_sito.setEditText(self.DATA_LIST[self.rec_num].sito)) #1 - Sito str(self.lineEdit_nr_campione.setText(numero_campione)) #2 - Numero campione str(self.comboBox_tipo_campione.setEditText(self.DATA_LIST[self.rec_num].tipo_campione)) #3 - Tipo campione str(self.textEdit_descrizione_camp.setText(self.DATA_LIST[self.rec_num].descrizione)) #4 - Descrizione str(self.lineEdit_area.setText(self.DATA_LIST[self.rec_num].area)) #5 - Area str(self.lineEdit_us.setText(us)) #6 - us str(self.lineEdit_n_inv_mat.setText(numero_inventario_materiale)) #7 - numero inventario materiale str(self.lineEdit_luogo_conservazione.setText(self.DATA_LIST[self.rec_num].luogo_conservazione)) #8 - luogo_conservazione str(self.lineEdit_cassa.setText(nr_cassa)) #9 - nr cassa def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): if self.lineEdit_nr_campione.text() == "": nr_campione = None else: nr_campione = int(self.lineEdit_nr_campione.text()) if self.lineEdit_us.text() == "": us = None else: us = int(self.lineEdit_us.text()) if self.lineEdit_cassa.text() == "": nr_cassa = None else: nr_cassa = int(self.lineEdit_cassa.text()) if self.lineEdit_n_inv_mat.text() == "": numero_inventario_materiale = None else: numero_inventario_materiale = int(self.lineEdit_n_inv_mat.text()) #data self.DATA_LIST_REC_TEMP = [ str(self.comboBox_sito.currentText()), #1 - Sito str(nr_campione), #2 - nr campione str(self.comboBox_tipo_campione.currentText()), #3 - tipo campione str(self.textEdit_descrizione_camp.toPlainText()), #4 - descrizione str(self.lineEdit_area.text()), #5 - area str(us), #6 - us str(numero_inventario_materiale), #7 - numero_inventario_materiale str(nr_cassa), #8 - numero cassa str(self.lineEdit_luogo_conservazione.text()) #9 - luogo conservazione ] def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append(ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE+")")], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning(self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()
class pyarchinit_Documentazione(QDialog, Ui_DialogDocumentazione_tipo_doc): MSG_BOX_TITLE = "PyArchInit - pyarchinit_version 0.4 - Scheda Documentazione" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} BROWSE_STATUS = "b" SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'documentazione_table' MAPPER_TABLE_CLASS = "DOCUMENTAZIONE" NOME_SCHEDA = "Scheda Documentazione" ID_TABLE = "id_documentazione" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Sito": "sito", "Nome documentazione": "nome_doc", "Data": "data", "Tipo documentazione": "tipo_documentazione", "Sorgente": "sorgente", "Scala": "scala", "Disegnatore": "disegnatore", "Note": "note", } SORT_ITEMS = [ ID_TABLE, "Sito", "Nome documentazione", "Data", "Tipo documentazione", "Sorgente", "Scala", "Disegnatore", "Note", ] TABLE_FIELDS = [ "sito", "nome_doc", "data", "tipo_documentazione", "sorgente", "scala", "disegnatore", "note", ] DB_SERVER = "not defined" ####nuovo sistema sort def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except Exception as e: QMessageBox.warning(self, "Sistema di connessione", str(e), QMessageBox.Ok) def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() test_conn = conn_str.find('sqlite') if test_conn == 0: self.DB_SERVER = "sqlite" try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = 'b' self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS" + str(e), QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) #################################### def charge_list(self): sito_vl = self.UTILITY.tup_2_list_III( self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) try: sito_vl.remove('') except: pass self.comboBox_sito_doc.clear() sito_vl.sort() self.comboBox_sito_doc.addItems(sito_vl) ################################### #buttons functions def generate_list_pdf(self): data_list = [] for i in range(len(self.DATA_LIST)): sito = str(self.DATA_LIST[i].sito) tipo_doc = str(self.DATA_LIST[i].tipo_documentazione) nome_doc = str(self.DATA_LIST[i].nome_doc) note = str(self.DATA_LIST[i].note) res_us_doc = self.DB_MANAGER.select_us_doc_from_db_sql( sito, tipo_doc, nome_doc) res_usneg_doc = self.DB_MANAGER.select_usneg_doc_from_db_sql( sito, tipo_doc, nome_doc) elenco_us_doc = [] elenco_usneg_doc = [] if bool(res_us_doc) == True: for sing_rec in res_us_doc: tup_area_us = (int(sing_rec[1]), int(sing_rec[3])) elenco_us_doc.append(tup_area_us) if bool(res_usneg_doc) == True: for sing_rec in res_usneg_doc: tup_area_usneg = (int(sing_rec[2]), int(sing_rec[3])) elenco_usneg_doc.append(tup_area_usneg) elenco_us_pdf = elenco_us_doc + elenco_usneg_doc string_to_pdf = "" if bool(elenco_us_pdf) == True: elenco_us_pdf.sort() area_corr = str(elenco_us_pdf[0][0]) us_elenco = "" string_to_pdf = "" for rec_us in range(len(elenco_us_pdf)): if area_corr == str(elenco_us_pdf[rec_us][0]): us_elenco += str(elenco_us_pdf[rec_us][1]) + ", " else: if string_to_pdf == "": string_to_pdf = "Area " + area_corr + ": " + us_elenco[: -2] area_corr = str(elenco_us_pdf[rec_us][0]) us_elenco = str(elenco_us_pdf[rec_us][1]) + ", " else: string_to_pdf += "<br/>Area " + area_corr + ": " + us_elenco[: -2] area_corr = str(elenco_us_pdf[rec_us][0]) us_elenco = str(elenco_us_pdf[rec_us][1]) + ", " string_to_pdf += "<br/>Area " + area_corr + ": " + us_elenco[: -2] else: pass data_list.append([ str(self.DATA_LIST[i].sito), #1 - Sito str(self.DATA_LIST[i].nome_doc), #2 - Area str(self.DATA_LIST[i].data), #4 - definizione stratigrafica str(self.DATA_LIST[i].tipo_documentazione ), #5 - definizione intepretata str(self.DATA_LIST[i].sorgente), #6 - descrizione str(self.DATA_LIST[i].scala), #7 - interpretazione str(self.DATA_LIST[i].disegnatore), #8 - periodo iniziale str(self.DATA_LIST[i].note), #9 - fase iniziale note ]) return data_list def on_pushButton_disegno_doc_pressed(self): sing_layer = [self.DATA_LIST[self.REC_CORR]] self.pyQGIS.charge_vector_layers_doc(sing_layer) def on_pushButton_exp_scheda_doc_pressed(self): single_Documentazione_pdf_sheet = generate_documentazione_pdf() data_list = self.generate_list_pdf() single_Documentazione_pdf_sheet.build_Documentazione_sheets(data_list) def on_pushButton_exp_elenco_doc_pressed(self): Documentazione_index_pdf = generate_documentazione_pdf() data_list = self.generate_list_pdf() Documentazione_index_pdf.build_index_Documentazione( data_list, data_list[0][0]) def on_pushButtonPreview_pressed(self): docstr = (' \"%s\"=\'%s\' AND \"%s\"=\'%s\' AND \"%s\"=\'%s\' ') % ( 'sito', str(self.DATA_LIST[self.REC_CORR].sito), 'nome_doc', str(self.DATA_LIST[self.REC_CORR].nome_doc), 'tipo_doc', str(self.DATA_LIST[self.REC_CORR].tipo_documentazione)) QMessageBox.warning(self, "query", str(docstr), QMessageBox.Ok) dlg = pyarchinit_doc_preview(self, docstr) dlg.exec_() def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) ########################################## #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEditable(["self.comboBox_sito_doc"], 1) self.setComboBoxEnable(["self.comboBox_sito_doc"], "True") self.setComboBoxEnable(["self.comboBox_tipo_doc"], "True") self.setComboBoxEnable(["self.lineEdit_nome_doc"], "True") self.set_rec_counter('', '') self.enable_button(0) ########################################### def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning( self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) ################################################## self.setComboBoxEditable(["self.comboBox_sito_doc"], 1) self.setComboBoxEnable(["self.comboBox_sito_doc"], "False") self.setComboBoxEnable(["self.comboBox_tipo_doc"], "False") self.setComboBoxEnable(["self.lineEdit_nome_doc"], "False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass ################################################## def data_error_check(self): test = 0 EC = Error_check() if EC.data_is_empty(str(self.comboBox_sito_doc.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Sito. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.comboBox_tipo_doc.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Tipo documentazione \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 if EC.data_is_empty(str(self.lineEdit_nome_doc.text())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Nome documentazione \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): try: data = self.DB_MANAGER.insert_values_documentazione( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, str(self.comboBox_sito_doc.currentText()), #1 - Sito str(self.lineEdit_nome_doc.text()), #2 - Nome Documentazione str(self.lineEdit_data_doc.text()), #3 - Data str(self.comboBox_tipo_doc.currentText() ), #4 - Tipo Documentazione str(self.comboBox_sorgente_doc.currentText()), #5 - Sorgente str(self.comboBox_scala_doc.currentText()), #6 - Scala str(self.lineEdit_disegnatore_doc.text()), #7 - Disegnatore str(self.textEdit_note_doc.toPlainText())) #8 - Note try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n" + str(e), QMessageBox.Ok) return 0 def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messaggio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") except Exception as e: QMessageBox.warning(self, "Messaggio!!!", "Tipo di errore: " + str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) ################################################ #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEnable(["self.comboBox_sito_doc"], "True") self.setComboBoxEnable(["self.lineEdit_nome_doc"], "True") self.setComboBoxEnable(["self.comboBox_tipo_doc"], "True") self.setComboBoxEnable(["self.textEdit_note_doc"], "False") self.setComboBoxEditable(["self.comboBox_sito_doc"], 1) self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.empty_fields() ################################################ def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning( self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: search_dict = { self.TABLE_FIELDS[0]: "'" + str(self.comboBox_sito_doc.currentText()) + "'", #1 - Sito self.TABLE_FIELDS[1]: "'" + str(self.lineEdit_nome_doc.text()) + "'", #2 - Nome Documentazione self.TABLE_FIELDS[2]: "'" + str(self.lineEdit_data_doc.text()) + "'", #3 - Data self.TABLE_FIELDS[3]: "'" + str(self.comboBox_tipo_doc.currentText()) + "'", #4 - Tipo Documentazione self.TABLE_FIELDS[4]: "'" + str(self.comboBox_sorgente_doc.currentText()) + "'", #5 - Sorgente self.TABLE_FIELDS[5]: "'" + str(self.comboBox_scala_doc.currentText()) + "'", #6 - Scala self.TABLE_FIELDS[6]: "'" + str(self.lineEdit_disegnatore_doc.text()) + "'" #7 - Disegnatore } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning( self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEnable(["self.comboBox_sito_doc"], "False") self.setComboBoxEnable(["self.lineEdit_nome_doc"], "False") self.setComboBoxEnable(["self.comboBox_tipo_doc"], "False") self.setComboBoxEnable(["self.textEdit_note_doc"], "True") self.setComboBoxEditable(["self.comboBox_sito_doc"], 1) else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") else: strings = ("Sono stati trovati", self.REC_TOT, "records") self.setComboBoxEnable(["self.comboBox_sito_doc"], "False") self.setComboBoxEnable(["self.lineEdit_nome_doc"], "False") self.setComboBoxEnable(["self.comboBox_tipo_doc"], "False") self.setComboBoxEnable(["self.textEdit_note_doc"], "True") self.setComboBoxEditable(["self.comboBox_sito_doc"], 1) QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def on_pushButton_test_pressed(self): pass def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE ) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] if self.DB_SERVER == 'sqlite': for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): self.DATA_LIST.append(i) else: id_list = [] for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if bool(value) == True: sub_list.append(str(value.text())) lista.append(sub_list) return lista def empty_fields(self): self.comboBox_sito_doc.setEditText("") #1 - Sito self.lineEdit_nome_doc.clear() #2 - Nome Dcumentazione self.lineEdit_data_doc.clear() #3 - Data self.comboBox_tipo_doc.setEditText("") #4 - Tipo Documentazione self.comboBox_sorgente_doc.setEditText("") #5 - Sorgente self.comboBox_scala_doc.setEditText("") #6 - Scala self.lineEdit_disegnatore_doc.clear() #7 - Dsegnatore self.textEdit_note_doc.clear() #8 - Note def fill_fields(self, n=0): self.rec_num = n str( self.comboBox_sito_doc.setEditText( self.DATA_LIST[self.rec_num].sito)) #1 - Sito str( self.lineEdit_nome_doc.setText(self.DATA_LIST[ self.rec_num].nome_doc)) #2 - Nome Dcumentazione str(self.lineEdit_data_doc.setText( self.DATA_LIST[self.rec_num].data)) #3 - Data str( self.comboBox_tipo_doc.setEditText(self.DATA_LIST[ self.rec_num].tipo_documentazione)) #4 - Tipo Documentazione str( self.comboBox_sorgente_doc.setEditText( self.DATA_LIST[self.rec_num].sorgente)) #5 - Sorgente str( self.comboBox_scala_doc.setEditText( self.DATA_LIST[self.rec_num].scala)) #6 - Scala str( self.lineEdit_disegnatore_doc.setText( self.DATA_LIST[self.rec_num].disegnatore)) #7 - Dsegnatore str(self.textEdit_note_doc.setText( self.DATA_LIST[self.rec_num].note)) #8 - Note def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): #data self.DATA_LIST_REC_TEMP = [ str(self.comboBox_sito_doc.currentText()), #1 - Sito str(self.lineEdit_nome_doc.text()), #2 - Nome Documentazione str(self.lineEdit_data_doc.text()), #3 - Data str(self.comboBox_tipo_doc.currentText() ), #4 - Tipo Documentazione str(self.comboBox_sorgente_doc.currentText()), #5 - Sorgente str(self.comboBox_scala_doc.currentText()), #6 - Scala str(self.lineEdit_disegnatore_doc.text()), #7 - Disegnatore str(self.textEdit_note_doc.toPlainText()) #8 - Note ] def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning( self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()
def create_dict_field_value(f): fields = f # riceve la lista dei campi diz_field_value = {} for field in fields: # per ogni campi esegue una query per ricavare il valore field_copy = field[1:] print("query su", field_copy) value = "qui il valore" # query al db per ricavare il singolo valore, deve cerca in base a nome_tabella, id record e nome campo ## """VERIFICARE COME ARRIVA IL DATO DAL DB""" diz_field_value[field] = value return diz_field_value # http://www.anthropology-resources.net/Texts/files.html dynamic_replace("il mio /sw preferito: /nome!", ["/gig", "/ugo"],["plugin", "pyArchInit"]) cell_schema = [[ 'Nr US: /us', 'numero di us: /us', '03', 'Area: /area', '05', '06', '07', '09' ], [ 'la fava: /us', 'numero di us: /us', '03', 'Area: /area', '05', '06', '07', '09' ]] conn = Connection() conn_str = conn.conn_str() db = Pyarchinit_db_management(conn_str) print(db.query(eval('SITE'))) # print convert_cell_schema(cell_schema, ['/us', '/area'])
class pyarchinit_Site(QDialog, Ui_DialogSite): """This class provides to manage the Site Sheet""" MSG_BOX_TITLE = "pyArchInit - Scheda Sito" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} BROWSE_STATUS = "b" SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'site_table' MAPPER_TABLE_CLASS = "SITE" NOME_SCHEDA = "Scheda di Sito" ID_TABLE = "id_sito" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Sito": "sito", "Nazione": "nazione", "Regione": "regione", "Descrizione": "descrizione", "Comune": "comune", "Provincia": "provincia", "Definizione sito": "definizione_sito" } SORT_ITEMS = [ ID_TABLE, "Sito", "Descrizione", "Nazione", "Regione", "Comune", "Provincia", "Definizione sito" ] TABLE_FIELDS = [ "sito", "nazione", "regione", "comune", "descrizione", "provincia", "definizione_sito" ] DB_SERVER = "not defined" ####nuovo sistema sort def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except Exception as e: QMessageBox.warning(self, "Sistema di connessione", str(e), QMessageBox.Ok) def enable_button(self, n): """This method Unable or Enable the GUI buttons on browse modality""" self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): """This method Unable or Enable the GUI buttons on searching modality""" self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): """This method establishes a connection between GUI and database""" from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() test_conn = conn_str.find('sqlite') if test_conn == 0: self.DB_SERVER = "sqlite" try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = 'b' self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS" + str(e), QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) def charge_list(self): sito_vl = self.UTILITY.tup_2_list_III( self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) try: sito_vl.remove('') except: pass self.comboBox_sito.clear() sito_vl.sort() self.comboBox_sito.addItems(sito_vl) regioni_list = [ 'Abruzzo', 'Basilicata', 'Calabria', 'Campania', 'Emilia-Romagna', 'Friuli Venezia Giulia', 'Lazio', 'Liguria', 'Lombardia', 'Marche', 'Molise', 'Piemonte', 'Puglia', 'Sardegna', 'Sicilia', 'Toscana', 'Trentino Alto Adige', 'Umbria', 'Valle d\'Aosta', 'Veneto' ] self.comboBox_regione.addItems(regioni_list) province_list = [ 'Agrigento', 'Alessandria', 'Ancona', 'Aosta', 'Arezzo', 'Ascoli Piceno', 'Asti', 'Avellino', 'Bari', 'Barletta-Andria-Trani', 'Basilicata', 'Belluno', 'Benevento', 'Bergamo', 'Biella', 'Bologna', 'Bolzano', 'Brescia', 'Brindisi', 'Cagliari', 'Calabria', 'Caltanissetta', 'Campania', 'Campobasso', 'Carbonia-Iglesias', 'Caserta', 'Catania', 'Catanzaro', 'Chieti', 'Como', 'Cosenza', 'Cremona', 'Crotone', 'Cuneo', 'Emilia-Romagna', 'Enna', 'Fermo', 'Ferrara', 'Firenze', 'Foggia', "Forl'-Cesena", 'Frosinone', 'Genova', 'Gorizia', 'Grosseto', 'Imperia', 'Isernia', "L'Aquila", 'La Spezia', 'Latina', 'Lecce', 'Lecco', 'Livorno', 'Lodi', 'Lucca', 'Macerata', 'Mantova', 'Massa e Carrara', 'Matera', 'Medio Campidano', 'Messina', 'Milano', 'Modena', 'Monza e Brianza', 'Napoli', 'Novara', 'Nuoro', 'Ogliastra', 'Olbia-Tempio', 'Oristano', 'Padova', 'Palermo', 'Parma', 'Pavia', 'Perugia', 'Pesaro e Urbino', 'Pescara', 'Piacenza', 'Pisa', 'Pistoia', 'Pordenone', 'Potenza', 'Prato', 'Ragusa', 'Ravenna', 'Reggio Calabria', 'Reggio Emilia', 'Rieti', 'Rimini', 'Roma', 'Rovigo', 'Salerno', 'Sassari', 'Savona', 'Siena', 'Siracusa', 'Sondrio', 'Taranto', 'Teramo', 'Terni', 'Torino', 'Trapani', 'Trento', 'Treviso', 'Trieste', 'Udine', 'Varese', 'Venezia', 'Verbano-Cusio-Ossola', 'Vercelli', 'Verona', 'Vibo Valentia', 'Vicenza', 'Viterbo' ] self.comboBox_provincia.addItems(province_list) #lista definizione_sito search_dict = { 'nome_tabella': "'" + 'site_table' + "'", 'tipologia_sigla': "'" + 'definizione sito' + "'" } d_sito = self.DB_MANAGER.query_bool(search_dict, 'PYARCHINIT_THESAURUS_SIGLE') d_sito_vl = [] for i in range(len(d_sito)): d_sito_vl.append(d_sito[i].sigla_estesa) d_sito_vl.sort() self.comboBox_definizione_sito.addItems(d_sito_vl) #buttons functions def on_pushButton_pdf_pressed(self): pass def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEnable(["self.comboBox_definizione_sito"], "True") self.setComboBoxEditable(["self.comboBox_definizione_sito"], 1) self.set_rec_counter('', '') self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.SORT_STATUS = "n" self.label_sort.setText( self.SORTED_ITEMS[self.SORT_STATUS]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning( self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass def data_error_check(self): test = 0 EC = Error_check() if EC.data_is_empty(str(self.comboBox_sito.currentText())) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Sito. \n Il campo non deve essere vuoto", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): try: data = self.DB_MANAGER.insert_site_values( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, str(self.comboBox_sito.currentText()), #1 - Sito str(self.comboBox_nazione.currentText()), #2 - nazione str(self.comboBox_regione.currentText()), #3 - regione str(self.comboBox_comune.currentText()), #4 - comune str(self.textEdit_descrizione_site.toPlainText() ), #5 - descrizione str(self.comboBox_provincia.currentText()), #6 - comune str(self.comboBox_definizione_sito.currentText() ), #7 - definizione sito 0) #8 - find check try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n" + str(e), QMessageBox.Ok) return 0 def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messagio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") except Exception as e: QMessageBox.warning(self, "Messaggio!!!", "Tipo di errore: " + str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) ### self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEnable(["self.comboBox_definizione_sito"], "True") self.setComboBoxEnable(["self.textEdit_descrizione_site"], "False") ### self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.empty_fields() def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning( self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: search_dict = { 'sito': "'" + str(self.comboBox_sito.currentText()) + "'", #1 - Sito 'nazione': "'" + str(self.comboBox_nazione.currentText()) + "'", #2 - Nazione 'regione': "'" + str(self.comboBox_regione.currentText()) + "'", #3 - Regione 'comune': "'" + str(self.comboBox_comune.currentText()) + "'", #4 - Comune 'descrizione': str(self.textEdit_descrizione_site.toPlainText() ), #5 - Descrizione 'provincia': "'" + str(self.comboBox_provincia.currentText()) + "'", #6 - Provincia 'definizione_sito': "'" + str(self.comboBox_definizione_sito.currentText()) + "'" #67- definizione_sito } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning( self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.comboBox_definizione_sito"], "True") self.setComboBoxEnable(["self.textEdit_descrizione_site"], "True") else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) ## if self.DB_SERVER == 'sqlite': ## for i in self.DATA_LIST: ## self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [i.id_sito], ['find_check'], [1]) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] ####darivedere self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") if self.toolButton_draw_siti.isChecked() == True: sing_layer = [self.DATA_LIST[self.REC_CORR]] self.pyQGIS.charge_sites_from_research(sing_layer) else: strings = ("Sono stati trovati", self.REC_TOT, "records") self.pyQGIS.charge_sites_from_research(self.DATA_LIST) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.comboBox_definizione_sito"], "True") self.setComboBoxEnable(["self.textEdit_descrizione_site"], "True") QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def on_pushButton_test_pressed(self): data = "Sito: " + str(self.comboBox_sito.currentText()) ## data = [ ## unicode(self.comboBox_sito.currentText()), #1 - Sito ## unicode(self.comboBox_nazione.currentText()), #2 - Nazione ## unicode(self.comboBox_regione.currentText()), #3 - Regione ## unicode(self.comboBox_comune.currentText()), #4 - Comune ## unicode(self.textEdit_descrizione_site.toPlainText()), #5 - Descrizione ## unicode(self.comboBox_provincia.currentText())] #6 - Provincia test = Test_area(data) test.run_test() def on_pushButton_draw_pressed(self): self.pyQGIS.charge_layers_for_draw( ["1", "2", "3", "4", "5", "7", "8", "9", "10", "12", "14", "16"]) def on_pushButton_sites_geometry_pressed(self): sito = str(self.comboBox_sito.currentText()) self.pyQGIS.charge_sites_geometry([ "1", "2", "3", "4", "5", "7", "8", "9", "10", "11", "12", "13", "14", "16" ], "sito", sito) def on_pushButton_draw_sito_pressed(self): sing_layer = [self.DATA_LIST[self.REC_CORR]] self.pyQGIS.charge_sites_from_research(sing_layer) def on_pushButton_rel_pdf_pressed(self): check = QMessageBox.warning( self, "Attention", "Under testing: this method can contains some bugs. Do you want proceed?", QMessageBox.Cancel, 1) if check == 1: erp = exp_rel_pdf(str(self.comboBox_sito.currentText())) erp.export_rel_pdf() def on_toolButton_draw_siti_toggled(self): if self.toolButton_draw_siti.isChecked() == True: QMessageBox.warning( self, "Messaggio", "Modalita' GIS attiva. Da ora le tue ricerche verranno visualizzate sul GIS", QMessageBox.Ok) else: QMessageBox.warning( self, "Messaggio", "Modalita' GIS disattivata. Da ora le tue ricerche non verranno piu' visualizzate sul GIS", QMessageBox.Ok) def on_pushButton_genera_us_pressed(self): self.DB_MANAGER.insert_arbitrary_number_of_us_records( int(self.lineEdit_us_range.text()), str(self.comboBox_sito.currentText()), int(self.lineEdit_area.text()), int(self.lineEdit_n_us.text())) def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE ) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] if self.DB_SERVER == 'sqlite': for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): self.DATA_LIST.append(i) else: id_list = [] for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) ## id_list = [] ## for i in self.DB_MANAGER.query(ast.literal_eval(self.MAPPER_TABLE_CLASS)): ## id_list.append(ast.literal_eval("i."+ self.ID_TABLE)) ## ## temp_data_list = self.DB_MANAGER.query_sort([1], [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if bool(value) == True: sub_list.append(str(value.text())) lista.append(sub_list) return lista def empty_fields(self): self.comboBox_sito.setEditText("") #1 - Sito self.comboBox_nazione.setEditText("") #2 - Nazione self.comboBox_regione.setEditText("") #3 - Regione self.comboBox_comune.setEditText("") #4 - Comune self.textEdit_descrizione_site.clear() #5 - Descrizione self.comboBox_provincia.setEditText("") #6 - Provincia self.comboBox_definizione_sito.setEditText("") #7 - definizione_sito def fill_fields(self, n=0): self.rec_num = n str(self.comboBox_sito.setEditText( self.DATA_LIST[self.rec_num].sito)) #1 - Sito str( self.comboBox_nazione.setEditText( self.DATA_LIST[self.rec_num].nazione)) #2 - Nazione str( self.comboBox_regione.setEditText( self.DATA_LIST[self.rec_num].regione)) #3 - Regione str( self.comboBox_comune.setEditText( self.DATA_LIST[self.rec_num].comune)) #4 - Comune str( self.textEdit_descrizione_site.setText( self.DATA_LIST[self.rec_num].descrizione)) #5 - Descrizione str( self.comboBox_provincia.setEditText( self.DATA_LIST[self.rec_num].provincia)) #6 - Provincia str( self.comboBox_definizione_sito.setEditText(self.DATA_LIST[ self.rec_num].definizione_sito)) #7 - definizione_sito def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): #data self.DATA_LIST_REC_TEMP = [ str(self.comboBox_sito.currentText()), #1 - Sito str(self.comboBox_nazione.currentText()), #2 - Nazione str(self.comboBox_regione.currentText()), #3 - Regione str(self.comboBox_comune.currentText()), #4 - Comune str(self.textEdit_descrizione_site.toPlainText() ), #5 - Descrizione str(self.comboBox_provincia.currentText()), #6 - Provincia str(self.comboBox_definizione_sito.currentText()) ] #7 - Definizione sito def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning( self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()
class pyarchinit_PDFAdministrator(QDialog, Ui_DialogPDFManager): MSG_BOX_TITLE = "PyArchInit - pyarchinit_version 0.4 - Gestione PDF" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} BROWSE_STATUS = "b" SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'pdf_administrator_table' MAPPER_TABLE_CLASS = "PDF_ADMINISTRATOR" NOME_SCHEDA = "Gestione PDF" ID_TABLE = "id_pdf_administrator" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Nome tabella": "table_name", #1 "Schema griglia": "schema_griglia", #2 "Schema fusione celle": "schema_fusione_celle", #3 "Modello": "modello" #4 } SORT_ITEMS = [ "Nome tabella", #1 "Schema griglia", #2 "Schema fusione celle", #3 "Modello" #4 ] TABLE_FIELDS = [ "table_name", #1 "schema_griglia", #2 "schema_fusione_celle", #3 "modello" #4 ] ROW = 0 COL = 0 TABLE_NAME = '' TABLE_NAME_DICT = { 'site_table': 'Sito', 'us_table': 'US', 'periodizzazione_table': 'Periodizzazione' } ID_LIST = '' def __init__(self, parent=None, db=None): QDialog.__init__(self, parent) self.setupUi(self) ## def __init__(self, iface): ## self.iface = iface ## #self.pyQGIS = Pyarchinit_pyqgis(self.iface) ## QDialog.__init__(self) ## self.setupUi(self) self.currentLayerId = None #self.on_pushButton_connect_pressed() self.tableWidget_schema_griglia.itemSelectionChanged.connect( self.cellchanged) def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def connect(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = 'b' self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) #QMessageBox.warning(self, "BENVENUTO", "lanciato da connect prima di charge list", QMessageBox.Ok) self.BROWSE_STATUS = 'x' self.charge_list() self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS" + str(e), QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) def cellchanged(self): self.ROW = self.tableWidget_schema_griglia.currentRow() self.COL = self.tableWidget_schema_griglia.currentColumn() def on_pushButton_inserisci_nome_campo_pressed(self): #a = self.tableWidget_schema_griglia.item() #QMessageBox.warning(self, "Alert", str(self.ROW), QMessageBox.Ok) item = QTableWidgetItem(str(self.comboBox_elenco_campi.currentText())) exec_str = ('self.tableWidget_schema_griglia.setItem(%d,%d,item)') % ( self.ROW, self.COL) ast.literal_ast.literal_eval(exec_str) def cell_click_ed(self): pass #QMessageBox.warning(self, "Test table click" , QMessageBox.Ok) def set_table_name(self, tname): self.TABLE_NAME = tname self.label_tabella_corrente.setText( str(self.TABLE_NAME_DICT[self.TABLE_NAME])) #1 - nome_tabella def charge_list(self): fields_list = self.DB_MANAGER.fields_list(str(self.TABLE_NAME)) try: fields_list.remove('') except: pass self.comboBox_elenco_campi.clear() fields_list.sort() self.comboBox_elenco_campi.addItems(fields_list) def add_id_list(self, id_list): self.ID_LIST = id_list def on_pushButton_charge_default_schema_pressed(self): default_schema = """[["C0R0", "C1R0", "C2R0", "C3R0", "C4R0", "C5R0", "C6R0", "C7R0", "C8R0"], ["C0R1", "C1R1", "C2R1", "C3R1", "C4R1", "C5R1", "C6R1", "C7R1", "C8R1"], ["C0R2", "C1R2", "C2R2", "C3R2", "C4R2", "C5R2", "C6R2", "C7R2", "C8R2"], ["C0R3", "C1R3", "C2R3", "C3R3", "C4R3", "C5R3", "C6R3", "C7R3", "C8R3"], ["C0R4", "C1R4", "C2R4", "C3R4", "C4R4", "C5R4", "C6R4", "C7R4", "C8R4"], ["C0R5", "C1R5", "C2R5", "C3R5", "C4R4", "C5R5", "C6R5", "C7R5", "C8R5"], ["C0R6", "C1R6", "C2R6", "C3R6", "C4R4", "C5R6", "C6R6", "C7R6", "C8R6"]]""" self.tableInsertData('self.tableWidget_schema_griglia', default_schema) QMessageBox.warning(self, "Alert", str(self.ID_LIST), QMessageBox.Ok) #buttons functions def on_pushButton_sort_pressed(self): dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort(id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #set the GUI for a new record if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter('', '') self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.enable_button(1) else: QMessageBox.warning(self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.label_sort.setText(self.SORTED_ITEMS["n"]) self.charge_list() self.charge_records() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.fill_fields(self.REC_CORR) self.enable_button(1) else: pass def data_error_check(self): test = 0 ## EC = Error_check() ## ## if EC.data_is_empty(unicode(self.comboBox_sito.currentText())) == 0: ## QMessageBox.warning(self, "ATTENZIONE", "Campo Sito. \n Il campo non deve essere vuoto", QMessageBox.Ok) ## test = 1 ## return test def insert_new_rec(self): #TableWidget ##Rapporti schema_griglia = self.table2dict("self.tableWidget_schema_griglia") schema_fusione_celle = self.table2dict( "self.tableWidget_gestione_celle") try: data = self.DB_MANAGER.insert_pdf_administrator_values( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, str(self.label_tabella_corrente.text()), #1 - nome_tabella str(schema_griglia), #2 - schema_griglia str(schema_fusione_celle), #3 - schema_fusione_celle str(self.comboBox_modello.currentText())) #4 - modello try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "Attenzione 1 ! \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Attenzione 2 ! \n" + str(e), QMessageBox.Ok) return 0 def on_pushButton_view_all_pressed(self): self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione e' irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messagio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") self.charge_list() except: QMessageBox.warning(self, "Attenzione", "Il database e' vuoto!", QMessageBox.Ok) if bool(self.DATA_LIST) == False: self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.label_sort.setText(self.SORTED_ITEMS["n"]) def on_pushButton_new_search_pressed(self): #self.setComboBoxEditable() if self.records_equal_check() == 1 and self.BROWSE_STATUS == "b": msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #else: self.enable_button_search(0) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) def on_pushButton_search_go_pressed(self): pass def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: self.update_record() id_list = [] for i in self.DATA_LIST: id_list.append( ast.literal_ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR #custom functions def charge_records(self): self.DATA_LIST = [] id_list = [] for i in self.DB_MANAGER.query( ast.literal_ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort(id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def empty_fields(self): schema_griglia = self.tableWidget_schema_griglia.rowCount() schema_fusione_celle = self.tableWidget_gestione_celle.rowCount() for i in range(schema_griglia): self.tableWidget_schema_griglia.removeRow(0) #self.insert_new_row("self.tableWidget_schema_griglia") for i in range(schema_fusione_celle): self.tableWidget_schema_griglia.removeRow(0) #self.insert_new_row("self.tableWidget_gestione_celle") self.comboBox_modello.setEditText("") def fill_fields(self, n=0): self.rec_num = n str( self.label_tabella_corrente.setText( self.DATA_LIST[self.rec_num].table_name)) #1 - Nome tabella self.tableInsertData( "self.tableWidget_schema_griglia", self.DATA_LIST[self.rec_num].schema_griglia) #2 - Schema Griglia self.tableInsertData("self.tableWidget_gestione_celle", self.DATA_LIST[ self.rec_num].schema_fusione_celle) #3 - Schema Fusione self.comboBox_modello.setEditText( self.DATA_LIST[self.rec_num].modello) #4 - modello self.charge_list() def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): #TableWidget ##Rapporti schema_griglia = self.table2dict("self.tableWidget_schema_griglia") schema_fusione_celle = self.table2dict( "self.tableWidget_gestione_celle") self.DATA_LIST_REC_TEMP = [ str(self.label_tabella_corrente.text()), #1 - nome_tabella str(schema_griglia), #2 - schema_griglia str(schema_fusione_celle), #3 - schema fusione celle str(self.comboBox_modello.currentText()) ] #4 - modello def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_ast.literal_eval( "unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_ast.literal_eval(cmd) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close() def table2dict(self, n): self.tablename = n row = ast.literal_ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if value != None: sub_list.append(str(value.text())) if bool(sub_list) == True: lista.append(sub_list) return lista def tableInsertData(self, t, d): """Set the value into alls Grid""" self.table_name = t self.data_list = ast.literal_ast.literal_eval(d) self.data_list.sort() table_col_count_cmd = ("%s.columnCount()") % (self.table_name) table_col_count = ast.literal_ast.literal_eval(table_col_count_cmd) #clear table table_clear_cmd = ("%s.clearContents()") % (self.table_name) ast.literal_ast.literal_eval(table_clear_cmd) for i in range(table_col_count): table_rem_row_cmd = ("%s.removeRow(%d)") % (self.table_name, i) ast.literal_ast.literal_eval(table_rem_row_cmd) #for i in range(len(self.data_list)): #self.insert_new_row(self.table_name) #QMessageBox.warning(self,"Messagio!!!","numero_righe" + str(len(self.data_list))) for row in range(len(self.data_list)): cmd = ('%s.insertRow(%s)') % (self.table_name, row) ast.literal_ast.literal_eval(cmd) #QMessageBox.warning(self,"Messagio!!!","numero colonne" + str(len(self.data_list[row]))) for col in range(len(self.data_list[row])): #item = self.comboBox_sito.setEditText(self.data_list[0][col] item = QTableWidgetItem(str(self.data_list[row][col])) exec_str = ('%s.setItem(%d,%d,item)') % (self.table_name, row, col) ast.literal_ast.literal_eval(exec_str) def on_pushButton_add_row_griglia_pressed(self): self.insert_new_row('self.tableWidget_schema_griglia') def on_pushButton_remove_row_griglia_pressed(self): self.remove_row('self.tableWidget_schema_griglia') def on_pushButton_add_row_cell_pressed(self): self.insert_new_row('self.tableWidget_gestione_celle') def on_pushButton_remove_row_cell_pressed(self): self.remove_row('self.tableWidget_gestione_celle') def insert_new_row(self, table_name): """insert new row into a table based on table_name""" cmd = table_name + ".insertRow(0)" ast.literal_ast.literal_eval(cmd) def remove_row(self, table_name): """insert new row into a table based on table_name""" table_row_count_cmd = ("%s.rowCount()") % (table_name) table_row_count = ast.literal_ast.literal_eval(table_row_count_cmd) rowSelected_cmd = ("%s.selectedIndexes()") % (table_name) rowSelected = ast.literal_ast.literal_eval(rowSelected_cmd) rowIndex = (rowSelected[0].row()) cmd = ("%s.removeRow(%d)") % (table_name, rowIndex) ast.literal_ast.literal_eval(cmd)
class pyarchinit_Periodizzazione(QDialog, Ui_DialogPeriodoFase): MSG_BOX_TITLE = "PyArchInit - Scheda Periodizzazione" DATA_LIST = [] DATA_LIST_REC_CORR = [] DATA_LIST_REC_TEMP = [] REC_CORR = 0 REC_TOT = 0 BROWSE_STATUS = "b" STATUS_ITEMS = {"b": "Usa", "f": "Trova", "n": "Nuovo Record"} SORT_MODE = 'asc' SORTED_ITEMS = {"n": "Non ordinati", "o": "Ordinati"} SORT_STATUS = "n" UTILITY = Utility() DB_MANAGER = "" TABLE_NAME = 'periodizzazione_table' MAPPER_TABLE_CLASS = "PERIODIZZAZIONE" NOME_SCHEDA = "Scheda Periodizzazione" ID_TABLE = "id_perfas" CONVERSION_DICT = { ID_TABLE: ID_TABLE, "Sito": "sito", "Periodo": "periodo", "Fase": "fase", "Cronologia iniziale": "cron_iniziale", "Cronologia finale": "cron_finale", "Descrizione": "descrizione", "Datazione estesa": "datazione_estesa", "Codice periodo": "cont_per" } SORT_ITEMS = [ ID_TABLE, "Sito", "Periodo", "Fase", "Descrizione", "Cronologia iniziale", "Cronologia finale", "Codice periodo" ] TABLE_FIELDS = [ 'sito', 'periodo', 'fase', 'cron_iniziale', 'cron_finale', 'descrizione', 'datazione_estesa', 'cont_per' ] DB_SERVER = "not defined" ####nuovo sistema sort def __init__(self, iface): self.iface = iface self.pyQGIS = Pyarchinit_pyqgis(self.iface) QDialog.__init__(self) self.setupUi(self) self.currentLayerId = None try: self.on_pushButton_connect_pressed() except: pass def enable_button(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_new_search.setEnabled(n) self.pushButton_search_go.setEnabled(n) self.pushButton_sort.setEnabled(n) def enable_button_search(self, n): self.pushButton_connect.setEnabled(n) self.pushButton_new_rec.setEnabled(n) self.pushButton_view_all.setEnabled(n) self.pushButton_first_rec.setEnabled(n) self.pushButton_last_rec.setEnabled(n) self.pushButton_prev_rec.setEnabled(n) self.pushButton_next_rec.setEnabled(n) self.pushButton_delete.setEnabled(n) self.pushButton_save.setEnabled(n) self.pushButton_sort.setEnabled(n) def on_pushButton_connect_pressed(self): from pyarchinit_conn_strings import * conn = Connection() conn_str = conn.conn_str() test_conn = conn_str.find('sqlite') if test_conn == 0: self.DB_SERVER = "sqlite" try: self.DB_MANAGER = Pyarchinit_db_management(conn_str) self.DB_MANAGER.connection() self.charge_records() #charge records from DB #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.label_sort.setText(self.SORTED_ITEMS["n"]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list_sito() self.fill_fields() else: QMessageBox.warning( self, "BENVENUTO", "Benvenuto in pyArchInit" + self.NOME_SCHEDA + ". Il database e' vuoto. Premi 'Ok' e buon lavoro!", QMessageBox.Ok) self.charge_list_sito() self.BROWSE_STATUS = 'x' self.on_pushButton_new_rec_pressed() except Exception as e: e = str(e) if e.find("no such table"): QMessageBox.warning( self, "Alert", "La connessione e' fallita <br><br> Tabella non presente. E' NECESSARIO RIAVVIARE QGIS", QMessageBox.Ok) else: QMessageBox.warning( self, "Alert", "Attenzione rilevato bug! Segnalarlo allo sviluppatore<br> Errore: <br>" + str(e), QMessageBox.Ok) def charge_list(self): pass def charge_list_sito(self): sito_vl = self.UTILITY.tup_2_list_III( self.DB_MANAGER.group_by('site_table', 'sito', 'SITE')) try: sito_vl.remove('') except: pass self.comboBox_sito.clear() sito_vl.sort() self.comboBox_sito.addItems(sito_vl) def on_pushButton_pdf_scheda_exp_pressed(self): Periodizzazione_pdf_sheet = generate_Periodizzazione_pdf( ) #deve essere importata la classe data_list = self.generate_list_pdf() #deve essere aggiunta la funzione Periodizzazione_pdf_sheet.build_Periodizzazione_sheets( data_list) #deve essere aggiunto il file per generare i pdf def on_pushButton_pdf_lista_exp_pressed(self): Periodizzazione_pdf_list = generate_Periodizzazione_pdf( ) #deve essere importata la classe data_list = self.generate_list_pdf() #deve essere aggiunta la funzione Periodizzazione_pdf_list.build_index_Periodizzazione( data_list, data_list[0][0]) #deve essere aggiunto il file per generare i pdf #codice per l'esportazione sperimentale dei PDF # """ dlg = pyarchinit_PDFAdministrator() dlg.set_table_name(self.TABLE_NAME) dlg.connect() msg = QMessageBox.warning(self,'ATTENZIONE',"Vuoi creare un nuovo layout PFD?", QMessageBox.Cancel,1) dlg.connect() ## dlg.on_pushButton_connect_pressed() if msg == 1: dlg.on_pushButton_new_rec_pressed() dlg.charge_list() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) dlg.add_id_list(id_list) dlg.exec_() """ def generate_list_pdf(self): periodo = "" fase = "" cron_iniz = "" cron_fin = "" data_list = [] for i in range(len(self.DATA_LIST)): if self.DATA_LIST[i].periodo == None: periodo = "" else: periodo = str(self.DATA_LIST[i].periodo) if self.DATA_LIST[i].fase == None: fase = "" else: fase = str(self.DATA_LIST[i].fase) if self.DATA_LIST[i].cron_iniziale == None: cron_iniz = "" else: cron_iniz = str(self.DATA_LIST[i].cron_iniziale) if self.DATA_LIST[i].cron_finale == None: cron_fin = "" else: cron_fin = str(self.DATA_LIST[i].cron_finale) data_list.append([ str(self.DATA_LIST[i].sito), #1 - Sito str(periodo), #2 - periodo str(fase), #3 - fase str(cron_iniz), #4 - cron iniz str(cron_fin), #5 - cron fin str(self.DATA_LIST[i].datazione_estesa), #6 - datazione_estesa str(self.DATA_LIST[i].descrizione) #7 - descrizione ]) return data_list #buttons functions def on_pushButton_sort_pressed(self): if self.check_record_state() == 1: pass else: dlg = SortPanelMain(self) dlg.insertItems(self.SORT_ITEMS) dlg.exec_() items, order_type = dlg.ITEMS, dlg.TYPE_ORDER self.SORT_ITEMS_CONVERTED = [] for i in items: self.SORT_ITEMS_CONVERTED.append(self.CONVERSION_DICT[str(i)]) self.SORT_MODE = order_type self.empty_fields() id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.SORT_STATUS = "o" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.fill_fields() def on_pushButton_new_rec_pressed(self): if bool(self.DATA_LIST) == True: if self.data_error_check() == 1: pass else: if self.BROWSE_STATUS == "b": if bool(self.DATA_LIST) == True: if self.records_equal_check() == 1: msg = self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) if self.BROWSE_STATUS != "n": self.BROWSE_STATUS = "n" ### self.setComboBoxEditable(["self.comboBox_sito"], 0) self.setComboBoxEditable(["self.comboBox_periodo"], 0) self.setComboBoxEditable(["self.comboBox_fase"], 0) self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEnable(["self.comboBox_periodo"], "True") self.setComboBoxEnable(["self.comboBox_fase"], "True") ### self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.empty_fields() self.enable_button(0) def on_pushButton_save_pressed(self): #save record if self.BROWSE_STATUS == "b": if self.data_error_check() == 0: if self.records_equal_check() == 1: self.update_if( QMessageBox.warning( self, 'ATTENZIONE', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) self.SORT_STATUS = "n" self.label_sort.setText( self.SORTED_ITEMS[self.SORT_STATUS]) self.enable_button(1) self.fill_fields(self.REC_CORR) else: QMessageBox.warning( self, "ATTENZIONE", "Non è stata realizzata alcuna modifica.", QMessageBox.Ok) else: if self.data_error_check() == 0: test_insert = self.insert_new_rec() if test_insert == 1: self.empty_fields() self.SORT_STATUS = "n" self.label_sort.setText( self.SORTED_ITEMS[self.SORT_STATUS]) self.charge_records() self.charge_list() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEditable(["self.comboBox_periodo"], 1) self.setComboBoxEditable(["self.comboBox_fase"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.comboBox_periodo"], "False") self.setComboBoxEnable(["self.comboBox_fase"], "False") self.fill_fields(self.REC_CORR) self.enable_button(1) else: QMessageBox.warning(self, "ATTENZIONE", "Problema nell'inserimento dati", QMessageBox.Ok) def data_error_check(self): test = 0 EC = Error_check() data_estesa = self.lineEdit_per_estesa.text() if data_estesa != "": if EC.data_lenght(data_estesa, 299) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Datazione estesa. \n non deve superare i 300 caratteri alfanumerici", QMessageBox.Ok) test = 1 periodo = self.comboBox_periodo.currentText() cron_iniz = self.lineEdit_cron_iniz.text() cron_fin = self.lineEdit_cron_fin.text() cod_per = self.lineEdit_codice_periodo.text() if periodo != "": if EC.data_is_int(periodo) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Periodo. \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if cron_iniz != "": if EC.data_is_int(cron_iniz) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Cronologia Iniziale. \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if cron_fin != "": if EC.data_is_int(cron_fin) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Cronologia Finale. \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 if cod_per != "": if EC.data_is_int(cod_per) == 0: QMessageBox.warning( self, "ATTENZIONE", "Campo Codice Periodo \n Il valore deve essere di tipo numerico", QMessageBox.Ok) test = 1 return test def insert_new_rec(self): cont_per = 0 try: if self.lineEdit_cron_iniz.text() == "": cron_iniz = None else: cron_iniz = int(self.lineEdit_cron_iniz.text()) if self.lineEdit_cron_fin.text() == "": cron_fin = None else: cron_fin = int(self.lineEdit_cron_fin.text()) if self.lineEdit_codice_periodo.text() == "": cont_per = None else: cont_per = int(self.lineEdit_codice_periodo.text()) data = self.DB_MANAGER.insert_periodizzazione_values( self.DB_MANAGER.max_num_id(self.MAPPER_TABLE_CLASS, self.ID_TABLE) + 1, #0 - max num id str(self.comboBox_sito.currentText()), #1 - Sito int(self.comboBox_periodo.currentText()), #2 - Periodo int(self.comboBox_fase.currentText()), #3 - Fase cron_iniz, #4 - Cron iniziale cron_fin, #5 - Cron finale str(self.textEdit_descrizione_per.toPlainText() ), #6 - Descrizione str(self.lineEdit_per_estesa.text() ), #7 - Periodizzazione estesa cont_per) #8 - Cont_per try: self.DB_MANAGER.insert_data_session(data) return 1 except Exception as e: e_str = str(e) if e_str.__contains__("Integrity"): msg = self.ID_TABLE + " gia' presente nel database" else: msg = e QMessageBox.warning(self, "Errore", "immisione 1 \n" + str(msg), QMessageBox.Ok) return 0 except Exception as e: QMessageBox.warning(self, "Errore", "Errore di immissione 2 \n" + str(e), QMessageBox.Ok) return 0 def check_record_state(self): ec = self.data_error_check() if ec == 1: return 1 #ci sono errori di immissione elif self.records_equal_check() == 1 and ec == 0: self.update_if( QMessageBox.warning( self, 'Errore', "Il record e' stato modificato. Vuoi salvare le modifiche?", QMessageBox.Cancel, 1)) #self.charge_records() incasina lo stato trova return 0 #non ci sono errori di immissione def on_pushButton_view_all_pressed(self): if self.check_record_state() == 1: pass else: self.empty_fields() self.charge_records() self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText(self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.label_sort.setText(self.SORTED_ITEMS["n"]) #records surf functions def on_pushButton_first_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.fill_fields(0) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_last_rec_pressed(self): if self.check_record_state() == 1: pass else: try: self.empty_fields() self.REC_TOT, self.REC_CORR = len( self.DATA_LIST), len(self.DATA_LIST) - 1 self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_prev_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR - 1 if self.REC_CORR == -1: self.REC_CORR = 0 QMessageBox.warning(self, "Errore", "Sei al primo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_next_rec_pressed(self): if self.check_record_state() == 1: pass else: self.REC_CORR = self.REC_CORR + 1 if self.REC_CORR >= self.REC_TOT: self.REC_CORR = self.REC_CORR - 1 QMessageBox.warning(self, "Errore", "Sei all'ultimo record!", QMessageBox.Ok) else: try: self.empty_fields() self.fill_fields(self.REC_CORR) self.set_rec_counter(self.REC_TOT, self.REC_CORR + 1) except Exception as e: QMessageBox.warning(self, "Errore", str(e), QMessageBox.Ok) def on_pushButton_delete_pressed(self): msg = QMessageBox.warning( self, "Attenzione!!!", "Vuoi veramente eliminare il record? \n L'azione è irreversibile", QMessageBox.Cancel, 1) if msg != 1: QMessageBox.warning(self, "Messagio!!!", "Azione Annullata!") else: try: id_to_delete = ast.literal_eval( "self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE) self.DB_MANAGER.delete_one_record(self.TABLE_NAME, self.ID_TABLE, id_to_delete) self.charge_records() #charge records from DB QMessageBox.warning(self, "Messaggio!!!", "Record eliminato!") except Exception as e: QMessageBox.warning(self, "Messaggio!!!", "Tipo di errore: " + str(e)) if bool(self.DATA_LIST) == False: QMessageBox.warning(self, "Attenzione", "Il database è vuoto!", QMessageBox.Ok) self.DATA_LIST = [] self.DATA_LIST_REC_CORR = [] self.DATA_LIST_REC_TEMP = [] self.REC_CORR = 0 self.REC_TOT = 0 self.empty_fields() self.set_rec_counter(0, 0) #check if DB is empty if bool(self.DATA_LIST) == True: self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.charge_list() self.fill_fields() self.SORT_STATUS = "n" self.label_sort.setText(self.SORTED_ITEMS[self.SORT_STATUS]) def on_pushButton_new_search_pressed(self): if self.check_record_state() == 1: pass else: self.enable_button_search(0) self.setComboBoxEditable(["self.comboBox_sito"], 1) #set the GUI for a new search if self.BROWSE_STATUS != "f": self.BROWSE_STATUS = "f" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.empty_fields() self.set_rec_counter('', '') self.label_sort.setText(self.SORTED_ITEMS["n"]) self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEditable(["self.comboBox_periodo"], 1) self.setComboBoxEditable(["self.comboBox_fase"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "True") self.setComboBoxEnable(["self.comboBox_periodo"], "True") self.setComboBoxEnable(["self.comboBox_fase"], "True") self.setComboBoxEnable(["self.textEdit_descrizione_per"], "False") def on_pushButton_search_go_pressed(self): if self.BROWSE_STATUS != "f": QMessageBox.warning( self, "ATTENZIONE", "Per eseguire una nuova ricerca clicca sul pulsante 'new search' ", QMessageBox.Ok) else: if self.lineEdit_cron_iniz.text() != "": cron_iniziale = "'" + str(self.lineEdit_cron_iniz.text()) + "'" else: cron_iniziale = "" if self.lineEdit_cron_fin.text() != "": cron_finale = "'" + str(self.lineEdit_cron_fin.text()) + "'" else: cron_finale = "" if self.comboBox_periodo.currentText() != "": periodo = "'" + str(self.comboBox_periodo.currentText()) + "'" else: periodo = "" if self.comboBox_fase.currentText() != "": fase = "'" + str(self.comboBox_fase.currentText()) + "'" else: fase = "" search_dict = { 'sito': "'" + str(self.comboBox_sito.currentText()) + "'", #1 - Sito 'periodo': periodo, #2 - Periodo 'fase': fase, #3 - Fase 'cron_iniziale': cron_iniziale, #4 - Cron iniziale 'cron_finale': cron_finale, #5 - Crion finale 'descrizione': str(self.textEdit_descrizione_per.toPlainText() ), #6 - Descrizione 'datazione_estesa': "'" + str(self.lineEdit_per_estesa.text()) + "'", #7 - Periodizzazione estesa 'cont_per': "'" + str(self.lineEdit_codice_periodo.text()) + "'" #8 - Codice periodo } u = Utility() search_dict = u.remove_empty_items_fr_dict(search_dict) if bool(search_dict) == False: QMessageBox.warning( self, "ATTENZIONE", "Non e' stata impostata alcuna ricerca!!!", QMessageBox.Ok) else: res = self.DB_MANAGER.query_bool(search_dict, self.MAPPER_TABLE_CLASS) if bool(res) == False: QMessageBox.warning(self, "ATTENZIONE", "Non e' stato trovato alcun record!", QMessageBox.Ok) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields(self.REC_CORR) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEditable(["self.comboBox_periodo"], 1) self.setComboBoxEditable(["self.comboBox_fase"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.comboBox_periodo"], "False") self.setComboBoxEnable(["self.comboBox_fase"], "False") self.setComboBoxEnable(["self.textEdit_descrizione_per"], "True") else: self.DATA_LIST = [] for i in res: self.DATA_LIST.append(i) self.REC_TOT, self.REC_CORR = len(self.DATA_LIST), 0 self.DATA_LIST_REC_TEMP = self.DATA_LIST_REC_CORR = self.DATA_LIST[ 0] self.fill_fields() self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) self.set_rec_counter(len(self.DATA_LIST), self.REC_CORR + 1) if self.REC_TOT == 1: strings = ("E' stato trovato", self.REC_TOT, "record") else: strings = ("Sono stati trovati", self.REC_TOT, "records") self.setComboBoxEditable(["self.comboBox_sito"], 1) self.setComboBoxEditable(["self.comboBox_periodo"], 1) self.setComboBoxEditable(["self.comboBox_fase"], 1) self.setComboBoxEnable(["self.comboBox_sito"], "False") self.setComboBoxEnable(["self.comboBox_periodo"], "False") self.setComboBoxEnable(["self.comboBox_fase"], "False") self.setComboBoxEnable(["self.textEdit_descrizione_per"], "True") QMessageBox.warning(self, "Messaggio", "%s %d %s" % strings, QMessageBox.Ok) self.enable_button_search(1) def on_pushButton_show_periodo_pressed(self): if self.lineEdit_codice_periodo.text() == "": QMessageBox.warning(self, "Messaggio", "Codice periodo non assegnato", QMessageBox.Ok) else: sito_p = self.comboBox_sito.currentText() cont_per = self.lineEdit_codice_periodo.text() per_label = self.comboBox_periodo.currentText() fas_label = self.comboBox_fase.currentText() self.pyQGIS.charge_vector_layers_periodo(sito_p, int(cont_per), per_label, fas_label) def update_if(self, msg): rec_corr = self.REC_CORR self.msg = msg if self.msg == 1: test = self.update_record() if test == 1: id_list = [] for i in self.DATA_LIST: id_list.append(ast.literal_eval("i." + self.ID_TABLE)) self.DATA_LIST = [] if self.SORT_STATUS == "n": temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE ) #self.DB_MANAGER.query_bool(self.SEARCH_DICT_TEMP, self.MAPPER_TABLE_CLASS) # else: temp_data_list = self.DB_MANAGER.query_sort( id_list, self.SORT_ITEMS_CONVERTED, self.SORT_MODE, self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) self.BROWSE_STATUS = "b" self.label_status.setText( self.STATUS_ITEMS[self.BROWSE_STATUS]) if type(self.REC_CORR) == "<type 'str'>": corr = 0 else: corr = self.REC_CORR return 1 elif test == 0: return 0 #custom functions def charge_records(self): self.DATA_LIST = [] if self.DB_SERVER == 'sqlite': for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): self.DATA_LIST.append(i) else: id_list = [] for i in self.DB_MANAGER.query( ast.literal_eval(self.MAPPER_TABLE_CLASS)): id_list.append(ast.literal_eval("i." + self.ID_TABLE)) temp_data_list = self.DB_MANAGER.query_sort( id_list, [self.ID_TABLE], 'asc', self.MAPPER_TABLE_CLASS, self.ID_TABLE) for i in temp_data_list: self.DATA_LIST.append(i) def setComboBoxEditable(self, f, n): field_names = f value = n for fn in field_names: cmd = ('%s%s%d%s') % (fn, '.setEditable(', n, ')') ast.literal_eval(cmd) def setComboBoxEnable(self, f, v): field_names = f value = v for fn in field_names: cmd = ('%s%s%s%s') % (fn, '.setEnabled(', v, ')') ast.literal_eval(cmd) def datestrfdate(self): now = date.today() today = now.strftime("%d-%m-%Y") return today def table2dict(self, n): self.tablename = n row = ast.literal_eval(self.tablename + ".rowCount()") col = ast.literal_eval(self.tablename + ".columnCount()") lista = [] for r in range(row): sub_list = [] for c in range(col): value = ast.literal_eval(self.tablename + ".item(r,c)") if bool(value) == True: sub_list.append(str(value.text())) lista.append(sub_list) return lista def empty_fields(self): self.comboBox_sito.setEditText("") #1 - Sito self.comboBox_periodo.setEditText("") #2 - Periodo self.comboBox_fase.setEditText("") #3 - Fase self.lineEdit_cron_iniz.clear() #4 - Cronologia iniziale self.lineEdit_cron_fin.clear() #5 - Cronologia finale self.lineEdit_per_estesa.clear() #6 - Datazione estesa self.textEdit_descrizione_per.clear() #7 - Descrizione self.lineEdit_codice_periodo.clear() #8 - Codice periodo def fill_fields(self, n=0): self.rec_num = n try: str( self.comboBox_sito.setEditText( self.DATA_LIST[self.rec_num].sito)) #1 - Sito self.comboBox_periodo.setEditText( str(self.DATA_LIST[self.rec_num].periodo)) #2 - Periodo self.comboBox_fase.setEditText( str(self.DATA_LIST[self.rec_num].fase)) #3 - Fase if self.DATA_LIST[ self. rec_num].cron_iniziale == None: #4 - Cronologia iniziale self.lineEdit_cron_iniz.setText("") else: self.lineEdit_cron_iniz.setText( str(self.DATA_LIST[self.rec_num].cron_iniziale)) if self.DATA_LIST[ self.rec_num].cron_finale == None: #5 - Cronologia finale self.lineEdit_cron_fin.setText("") else: self.lineEdit_cron_fin.setText( str(self.DATA_LIST[self.rec_num].cron_finale)) str( self.lineEdit_per_estesa.setText(self.DATA_LIST[ self.rec_num].datazione_estesa)) #6 - Datazione estesa str( self.textEdit_descrizione_per.setText(self.DATA_LIST[ self.rec_num].descrizione)) #7 - Descrizione if self.DATA_LIST[ self.rec_num].cont_per == None: #8 - Codice periodo self.lineEdit_codice_periodo.setText("") else: self.lineEdit_codice_periodo.setText( str(self.DATA_LIST[self.rec_num].cont_per)) except Exception as e: QMessageBox.warning(self, "Errore Fill Fields", str(e), QMessageBox.Ok) def set_rec_counter(self, t, c): self.rec_tot = t self.rec_corr = c self.label_rec_tot.setText(str(self.rec_tot)) self.label_rec_corrente.setText(str(self.rec_corr)) def set_LIST_REC_TEMP(self): #data if self.lineEdit_cron_iniz.text() == "": cron_iniz = None else: cron_iniz = str(self.lineEdit_cron_iniz.text()) if self.lineEdit_cron_fin.text() == "": cron_fin = None else: cron_fin = str(self.lineEdit_cron_fin.text()) if self.lineEdit_codice_periodo.text() == "": cont_per = None else: cont_per = str(self.lineEdit_codice_periodo.text()) self.DATA_LIST_REC_TEMP = [ str(self.comboBox_sito.currentText()), #1 - Sito str(self.comboBox_periodo.currentText()), #2 - Periodo str(self.comboBox_fase.currentText()), #3 - Fase str(cron_iniz), #4 - Cron iniziale str(cron_fin), #5 - Cron finale str(self.textEdit_descrizione_per.toPlainText() ), #6 - Descrizioene str(self.lineEdit_per_estesa.text()), #7 - Cron estesa str(cont_per) ] #8 - Cont_per def set_LIST_REC_CORR(self): self.DATA_LIST_REC_CORR = [] for i in self.TABLE_FIELDS: self.DATA_LIST_REC_CORR.append( ast.literal_eval("unicode(self.DATA_LIST[self.REC_CORR]." + i + ")")) def records_equal_check(self): self.set_LIST_REC_TEMP() self.set_LIST_REC_CORR() if self.DATA_LIST_REC_CORR == self.DATA_LIST_REC_TEMP: return 0 else: return 1 def update_record(self): try: self.DB_MANAGER.update(self.MAPPER_TABLE_CLASS, self.ID_TABLE, [ ast.literal_eval("int(self.DATA_LIST[self.REC_CORR]." + self.ID_TABLE + ")") ], self.TABLE_FIELDS, self.rec_toupdate()) return 1 except Exception as e: QMessageBox.warning( self, "Messaggio", "Problema di encoding: sono stati inseriti accenti o caratteri non accettati dal database. Se chiudete ora la scheda senza correggere gli errori perderete i dati. Fare una copia di tutto su un foglio word a parte. Errore :" + str(e), QMessageBox.Ok) return 0 def rec_toupdate(self): rec_to_update = self.UTILITY.pos_none_in_list(self.DATA_LIST_REC_TEMP) return rec_to_update def testing(self, name_file, message): f = open(str(name_file), 'w') f.write(str(message)) f.close()