def __init__(self, iface):
        self.iface = iface
        self.pyQGIS = Pyarchinit_pyqgis(self.iface)

        QDialog.__init__(self)
        self.setupUi(self)
        self.currentLayerId = None
        self.load_connection()
Example #2
0
 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 __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
Example #4
0
    def __init__(self, iface, data_list, id_us_dict):
        self.iface = iface
        self.pyQGIS = Pyarchinit_pyqgis(self.iface)
        self.DATA_LIST = data_list
        self.ID_US_DICT = id_us_dict
        QDialog.__init__(self)
        self.setupUi(self)

        ##		self.textbox.setText('1 2 3 4')
        #self.on_draw()
        try:
            self.DB_connect()
        except:
            pass
    def __init__(self, iface):
        self.iface = iface
        self.pyQGIS = Pyarchinit_pyqgis(self.iface)
        QDialog.__init__(self)
        self.setupUi(self)

        self.currentLayerId = None
        try:
            self.connect()
        except:
            pass

        QObject.connect(self.dial_relative_cronology,
                        SIGNAL("valueChanged(int)"), self.set_max_num)
        QObject.connect(self.spinBox_relative_cronology,
                        SIGNAL("valueChanged(int)"), self.set_max_num)

        QObject.connect(self.dial_relative_cronology,
                        SIGNAL("valueChanged(int)"),
                        self.define_order_layer_value)
        QObject.connect(self.dial_relative_cronology,
                        SIGNAL("valueChanged(int)"),
                        self.spinBox_relative_cronology.setValue)

        QObject.connect(self.spinBox_relative_cronology,
                        SIGNAL("valueChanged(int)"),
                        self.define_order_layer_value)
        QObject.connect(self.spinBox_relative_cronology,
                        SIGNAL("valueChanged(int)"),
                        self.dial_relative_cronology.setValue)
	def __init__(self, iface):
		self.iface = iface
		self.pyQGIS = Pyarchinit_pyqgis(self.iface)

		QDialog.__init__(self)
		self.setupUi(self)
		self.currentLayerId = None
		self.load_connection()
	def __init__(self, iface):
		self.iface = iface
		self.pyQGIS = Pyarchinit_pyqgis(self.iface)
		QDialog.__init__(self)
		self.setupUi(self)
		QMessageBox.warning(self, "Alert", "Sistema sperimentale solo per lo sviluppo" ,  QMessageBox.Ok)
		#self.customize_GUI() #call for GUI customizations

		self.currentLayerId = None
Example #8
0
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_Upd_Values(QDialog, Ui_DialogSostituisciValori):
    MSG_BOX_TITLE = "PyArchInit - pyarchinit_US_version 0.4 - Aggiornamento Valori"
    DATA_LIST = []
    DATA_LIST_REC_CORR = []
    DATA_LIST_REC_TEMP = []
    REC_CORR = 0
    REC_TOT = 0
    STATUS = {"usa": "Usa", "trova": "Trova", "nuovo_record": "Nuovo Record"}
    SORT_MODE = 'asc'
    SORTED = {"n": "Non ordinati", "o": "Ordinati"}
    UTILITY = Utility()
    DB_MANAGER = ""
    TABLE_NAME = 'us_table'
    MAPPER_TABLE_CLASS = "US"
    NOME_SCHEDA = "Scheda US"
    ID_TABLE = "id_us"
    CONVERSION_DICT = {}
    SORT_ITEMS = []

    TABLE_FIELDS = []

    def __init__(self, iface):
        self.iface = iface
        self.pyQGIS = Pyarchinit_pyqgis(self.iface)

        QDialog.__init__(self)
        self.setupUi(self)
        self.currentLayerId = None
        self.load_connection()

    def load_connection(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()
        except:
            pass

    def on_pushButton_pressed(self):

        field_position = self.pyQGIS.findFieldFrDict('gid')

        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])

        table_name = str(self.nome_tabellaLineEdit.text())

        id_field = str(self.campoIDLineEdit.text())

        field_2_upd = str(self.nome_campoLineEdit.text())

        value_2_upd = str(self.sostituisci_conLineEdit.text())

        for i in id_list:
            self.update_record(table_name, id_field, [i], [field_2_upd],
                               [value_2_upd])

    def update_record(self, table_value, id_field_value, id_value_list,
                      table_fields_list, data_list):
        self.DB_MANAGER.update(table_value, id_field_value, id_value_list,
                               table_fields_list, data_list)
class pyarchinit_Upd_Values(QDialog, Ui_DialogSostituisciValori):
	MSG_BOX_TITLE = "PyArchInit - Aggiornamento Valori"
	DATA_LIST = []
	DATA_LIST_REC_CORR = []
	DATA_LIST_REC_TEMP = []
	REC_CORR = 0
	REC_TOT = 0
	STATUS = {"usa": "Usa", "trova": "Trova", "nuovo_record": "Nuovo Record"}
	SORT_MODE = 'asc'
	SORTED = {"n": "Non ordinati", "o": "Ordinati"}
	UTILITY = Utility()
	DB_MANAGER = ""
	TABLE_NAME = 'us_table'
	MAPPER_TABLE_CLASS = "US"
	NOME_SCHEDA = "Scheda US"
	ID_TABLE = "id_us"
	CONVERSION_DICT = {}
	SORT_ITEMS = []
				
	TABLE_FIELDS = []
					

	def __init__(self, iface):
		self.iface = iface
		self.pyQGIS = Pyarchinit_pyqgis(self.iface)

		QDialog.__init__(self)
		self.setupUi(self)
		self.currentLayerId = None
		self.load_connection()


	def load_connection(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()
		except:
			pass


	def on_pushButton_pressed(self):

		field_position = self.pyQGIS.findFieldFrDict('gid')
		

		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])
			
		
		table_name = str(self.nome_tabellaLineEdit.text())
		
		id_field = str(self.campoIDLineEdit.text())
			
		
		field_2_upd = str(self.nome_campoLineEdit.text())

		value_2_upd = str(self.sostituisci_conLineEdit.text())

		for i in id_list:
			self.update_record(table_name, id_field, [i], [field_2_upd], [value_2_upd])


	def update_record(self, table_value, id_field_value, id_value_list, table_fields_list, data_list):
		self.DB_MANAGER.update(table_value, 
						id_field_value,
						id_value_list,
						table_fields_list,
						data_list)
Example #11
0
class pyarchinit_Interactive_Matrix(QDialog, Ui_DialogInteractiveMatrix):
    MSG_BOX_TITLE = "PyArchInit - Scheda Sistema Matrix Interattivo"
    DB_MANAGER = ""
    DATA_LIST = ""
    ID_US_DICT = {}

    if os.name == 'posix':
        HOME = os.environ['HOME']
    elif os.name == 'nt':
        HOME = os.environ['HOMEPATH']

    QUANT_PATH = ('%s%s%s') % (HOME, os.sep,
                               "pyarchinit_Quantificazioni_folder")

    def __init__(self, iface, data_list, id_us_dict):
        self.iface = iface
        self.pyQGIS = Pyarchinit_pyqgis(self.iface)
        self.DATA_LIST = data_list
        self.ID_US_DICT = id_us_dict
        QDialog.__init__(self)
        self.setupUi(self)

        ##		self.textbox.setText('1 2 3 4')
        #self.on_draw()
        try:
            self.DB_connect()
        except:
            pass

    def DB_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()
        except Exception as e:
            e = str(e)
            QMessageBox.warning(
                self, "Alert",
                "Attenzione rilevato bug! Segnalarlo allo sviluppatore <br> Errore: <br>"
                + str(e), QMessageBox.Ok)

    def generate_matrix(self):
        data = []
        for sing_rec in self.DATA_LIST:
            us = str(sing_rec.us)
            rapporti_stratigrafici = ast.literal_eval(sing_rec.rapporti)
            for sing_rapp in rapporti_stratigrafici:
                try:
                    if sing_rapp[0] == 'Taglia' or sing_rapp[
                            0] == 'Copre' or sing_rapp[
                                0] == 'Si appoggia a' or sing_rapp[
                                    0] == 'Riempie' or sing_rapp[
                                        0] == 'Si lega a' or sing_rapp[
                                            0] == 'Uguale a':
                        if sing_rapp[1] != '':
                            harris_rapp = (us, str(sing_rapp[1]))
                            data.append(harris_rapp)
                except Exception as e:
                    QMessageBox.warning(
                        self, "Messaggio",
                        "Problema nel sistema di esportazione del Matrix:" +
                        str(e), QMessageBox.Ok)

        sito = self.DATA_LIST[0].sito

        search_dict = {'sito': "'" + str(sito) + "'"}

        periodizz_data_list = self.DB_MANAGER.query_bool(
            search_dict, 'PERIODIZZAZIONE')

        periodi_data_values = []
        for i in periodizz_data_list:
            periodi_data_values.append([i.periodo, i.fase])

        periodi_us_list = []

        clust_number = 0
        for i in periodi_data_values:
            search_dict = {
                'sito': "'" + str(sito) + "'",
                'periodo_iniziale': "'" + str(i[0]) + "'",
                'fase_iniziale': "'" + str(i[1]) + "'"
            }

            us_group = self.DB_MANAGER.query_bool(search_dict, 'US')

            cluster_label = "cluster%d" % (clust_number)

            periodo_label = "Periodo %s - Fase %s" % (str(i[0]), str(i[1]))

            sing_per = [cluster_label, periodo_label]

            sing_us = []
            for rec in us_group:
                sing_us.append(rec.us)

            sing_per.insert(0, sing_us)

            periodi_us_list.append(sing_per)

            clust_number += 1

        matrix_exp = HARRIS_MATRIX_EXP(data, periodi_us_list)
        data_plotting = matrix_exp.export_matrix()

        return data_plotting

        QMessageBox.warning(self, "Messaggio",
                            "Esportazione del Matrix terminata",
                            QMessageBox.Ok)

    def plot_matrix(self, dp):
        self.data_plot = dp

        G1 = nx.DiGraph(self.data_plot)  # now make it a Graph
        #G1.write_dot(G1,'test.dot')
        #nx.write_dot(G1,'test.dot')
        #plt.title("draw_networkx")
        pos = nx.graphviz_layout(G1, prog='dot')
        #fig = plt.figure()

        #self.widgetMatrix.canvas.ax = self.fig.add_subplot(111)

        self.widgetMatrix.canvas.ax.set_title(
            'click su una US per disegnarla a video', picker=True)
        self.widgetMatrix.canvas.ax.set_ylabel('ylabel',
                                               picker=True,
                                               bbox=dict(facecolor='red'))

        points = []
        key = []
        for k, v in list(pos.items()):
            key.append(k)
            points.append(v)

        for i in range(len(key)):
            self.widgetMatrix.canvas.ax.text(points[i][0],
                                             points[i][1],
                                             key[i],
                                             picker=True,
                                             ha='center',
                                             alpha=0)

        self.widgetMatrix.canvas.ax.plot(nx.draw(G1,
                                                 pos,
                                                 with_labels=True,
                                                 arrows=True,
                                                 node_color='w',
                                                 node_shape='s',
                                                 node_size=400),
                                         'o',
                                         picker=1000)

        #self.widgetMatrix.canvas.fig.canvas.mpl_connect('pick_event', self.on_pick)
        self.widgetMatrix.canvas.mpl_connect('pick_event', self.on_pick)
        self.widgetMatrix.canvas.draw()

    def on_pick(self, event):
        # The event received here is of the type
        # matplotlib.backend_bases.PickEvent
        #.canvas
        # It carries lots of information, of which we're using
        # only a small amount here.
        # 		def onpick1(event):
        #if isinstance(event.artist, Text):
        text = event.artist
        value = text.get_prop_tup()
        text_to_pass = value[2]
        ##				print('Hai selezionato l\'US:', text.get_text())
        ##		box_points = event.artist.get_bbox().get_points()
        idus = self.ID_US_DICT[int(text_to_pass)]
        self.pyQGIS.charge_vector_layers_from_matrix(idus)
        #msg = "'Hai selezionato l\'US:' %s" % text_to_pass #str(dir(text.get_label))

        #QMessageBox.information(self, "Click!", msg)

    def testing(self, name_file, message):
        f = open(str(name_file), 'w')
        f.write(str(message))
        f.close()
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()