def select_config(self, tablename):
        """ Get data from table 'config' and fill widgets according to the name of the columns """

        sql = "SELECT * FROM " + self.schema_name + "." + tablename
        row = self.dao.get_row(sql)
        if not row:
            self.controller.show_warning("Any data found in table " + tablename)
            return None
        
        # Iterate over all columns and populate its corresponding widget
        columns = []
        for i in range(0, len(row)):

            column_name = self.dao.get_column_name(i)
            widget_type = utils_giswater.getWidgetType(column_name)
            if widget_type is QCheckBox:
                utils_giswater.setChecked(column_name, row[column_name])
            elif widget_type is QDateEdit:
                utils_giswater.setCalendarDate(column_name, datetime.strptime(row[column_name], '%Y-%m-%d'))
            elif widget_type is QTimeEdit:
                timeparts = str(row[column_name]).split(':')
                if len(timeparts) < 3:
                    timeparts.append("0")
                days = int(timeparts[0]) / 24
                hours = int(timeparts[0]) % 24
                minuts = int(timeparts[1])
                seconds = int(timeparts[2])
                time = QTime(hours, minuts, seconds)
                utils_giswater.setTimeEdit(column_name, time)
                utils_giswater.setText(column_name + "_day", days)
            else:
                utils_giswater.setWidgetText(column_name, row[column_name])
            columns.append(column_name)

        return columns
    def update_table(self, tablename, dialog):
        """ INSERT or UPDATE tables according :param update"""
        
        sql = "SELECT * FROM " + self.schema_name + "." + tablename
        row = self.controller.get_row(sql)

        columns = []
        for i in range(0, len(row)):
            column_name = self.dao.get_column_name(i)
            columns.append(column_name)

        if columns is not None:
            sql = "UPDATE " + self.schema_name + "." + tablename + " SET "
            for column_name in columns:
                if column_name != 'id':
                    widget = dialog.findChild(QWidget, column_name)
                    widget_type = utils_giswater.getWidgetType(dialog, widget)
                    if widget_type is QCheckBox:
                        value = utils_giswater.isChecked(dialog, widget)
                    elif widget_type is QDateEdit:
                        date = dialog.findChild(QDateEdit, str(column_name))
                        value = date.dateTime().toString('dd/MM/yyyy')
                    elif widget_type is QTimeEdit:
                        aux = 0
                        widget_day = str(column_name) + "_day"
                        day = utils_giswater.getText(dialog, widget_day)
                        if day != "null":
                            aux = int(day) * 24
                        time = dialog.findChild(QTimeEdit, str(column_name))
                        timeparts = time.dateTime().toString('HH:mm:ss').split(':')
                        h = int(timeparts[0]) + int(aux)
                        aux = str(h) + ":" + str(timeparts[1]) + ":" + str(timeparts[2])
                        value = aux
                    elif widget_type is QSpinBox:
                        x = dialog.findChild(QSpinBox, str(column_name))
                        value = x.value()
                    elif widget_type is QComboBox:
                        value = utils_giswater.get_item_data(dialog, widget)
                    else:
                        value = utils_giswater.getWidgetText(dialog, widget)
                    if value == 'null':
                        sql += column_name + " = null, "
                    elif value is None:
                        pass
                    else:
                        if type(value) is not bool and widget_type is not QSpinBox:
                            value = value.replace(",", ".")
                        sql += column_name + " = '" + str(value) + "', "
            sql = sql[:len(sql) - 2]
        self.controller.execute_sql(sql)
        dialog.close()
    def update_config(self, tablename, dialog):
        """ Update table @tablename from values get from @dialog """

        sql = "SELECT * FROM " + self.schema_name + "." + tablename
        row = self.dao.get_row(sql)
        columns = []
        for i in range(0, len(row)):
            column_name = self.dao.get_column_name(i)
            if column_name != 'id': 
                columns.append(column_name)

        if columns is None:
            return
        
        sql = "UPDATE " + self.schema_name + "." + tablename + " SET "
        for column_name in columns:         
            widget_type = utils_giswater.getWidgetType(column_name)
            if widget_type is QCheckBox:
                value = utils_giswater.isChecked(column_name)
            elif widget_type is QDateEdit:
                date = dialog.findChild(QDateEdit, str(column_name))
                value = date.dateTime().toString('yyyy-MM-dd')
            elif widget_type is QTimeEdit:
                aux = 0
                widget_day = str(column_name) + "_day"
                day = utils_giswater.getText(widget_day)
                if day != "null":
                    aux = int(day) * 24
                time = dialog.findChild(QTimeEdit, str(column_name))
                timeparts = time.dateTime().toString('HH:mm:ss').split(':')
                h = int(timeparts[0]) + int(aux)
                aux = str(h) + ":" + str(timeparts[1]) + ":00"
                value = aux
            elif widget_type is QSpinBox:
                x = dialog.findChild(QSpinBox, str(column_name))
                value = x.value()
            else:
                value = utils_giswater.getWidgetText(column_name)
              
            if value is not None:  
                if value == 'null':
                    sql += column_name + " = null, "
                else:
                    if type(value) is not bool and widget_type is not QSpinBox:
                        value = value.replace(",", ".")
                    sql += column_name + " = '" + str(value) + "', "

        sql = sql[:- 2]          
        self.controller.execute_sql(sql)
    def go2epa_options_get_data(self, tablename, dialog):
        """ Get data from selected table """
        
        sql = "SELECT * FROM " + self.schema_name + "." + tablename
        row = self.controller.get_row(sql)
        if not row:
            message = "Any data found in table"
            self.controller.show_warning(message, parameter=tablename)
            return None

        # Iterate over all columns and populate its corresponding widget
        columns = []
        for i in range(0, len(row)):
            column_name = self.dao.get_column_name(i)
            widget = dialog.findChild(QWidget, column_name)
            widget_type = utils_giswater.getWidgetType(dialog, widget)
            if row[column_name] is not None:
                if widget_type is QCheckBox:
                    utils_giswater.setChecked(dialog, widget, row[column_name])
                elif widget_type is QComboBox:
                    utils_giswater.set_combo_itemData(widget, row[column_name], 0)
                elif widget_type is QDateEdit:
                    dateaux = row[column_name].replace('/', '-')
                    date = QDate.fromString(dateaux, 'dd-MM-yyyy')
                    utils_giswater.setCalendarDate(dialog, widget, date)
                elif widget_type is QTimeEdit:
                    timeparts = str(row[column_name]).split(':')
                    if len(timeparts) < 3:
                        timeparts.append("0")
                    days = int(timeparts[0]) / 24
                    hours = int(timeparts[0]) % 24
                    minuts = int(timeparts[1])
                    seconds = int(timeparts[2])
                    time = QTime(hours, minuts, seconds)
                    utils_giswater.setTimeEdit(dialog, widget, time)
                    utils_giswater.setText(dialog, column_name + "_day", days)
                else:
                    utils_giswater.setWidgetText(dialog, widget, str(row[column_name]))

            columns.append(column_name)
            
        return columns
Beispiel #5
0
 def mg_config_get_data(self, tablename):                
     ''' Get data from selected table '''
     
     sql = "SELECT *"
     sql+= " FROM "+self.schema_name+"."+tablename
     row = self.dao.get_row(sql)
     if not row:
         self.controller.show_warning("Any data found in table "+tablename)
         return None
     
     # Iterate over all columns and populate its corresponding widget
     columns = []
     for i in range(0, len(row)):
         column_name = self.dao.get_column_name(i)
         widget_type = utils_giswater.getWidgetType(column_name)
         if widget_type is QCheckBox:
             utils_giswater.setChecked(column_name, row[column_name])                        
         else:
             utils_giswater.setWidgetText(column_name, row[column_name])
         columns.append(column_name) 
         
     return columns           
Beispiel #6
0
 def mg_config_accept_table(self, tablename, columns):
     ''' Update values of selected 'tablename' with the content of 'columns' '''
     
     if columns is not None:       
         sql = "UPDATE "+self.schema_name+"."+tablename+" SET "         
         for column_name in columns:
             if column_name != 'id':
                 widget_type = utils_giswater.getWidgetType(column_name)
                 if widget_type is QCheckBox:
                     value = utils_giswater.isChecked(column_name)                      
                 else:
                     value = utils_giswater.getWidgetText(column_name)
                 if value is None or value == 'null':
                     sql+= column_name+" = null, "     
                 else:
                     if type(value) is not bool:
                         value = value.replace(",", ".")
                     sql+= column_name+" = '"+str(value)+"', "           
         
         sql = sql[:-2]
         self.dao.execute_sql(sql)
                     
             
    def insert_or_update(self, update, tablename, dialog):
        """ INSERT or UPDATE tables according :param update"""

        sql = "SELECT *"
        sql += " FROM " + self.schema_name + "." + tablename
        row = self.dao.get_row(sql)

        columns = []
        for i in range(0, len(row)):
            column_name = self.dao.get_column_name(i)
            columns.append(column_name)

        if update:
            if columns is not None:
                sql = "UPDATE " + self.schema_name + "." + tablename + " SET "
                for column_name in columns:
                    if column_name != 'id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is QCheckBox:
                            value = utils_giswater.isChecked(column_name)
                        elif widget_type is QDateEdit:
                            date = dialog.findChild(QDateEdit,
                                                    str(column_name))
                            value = date.dateTime().toString('yyyy-MM-dd')
                        elif widget_type is QTimeEdit:
                            aux = 0
                            widget_day = str(column_name) + "_day"
                            day = utils_giswater.getText(widget_day)
                            if day != "null":
                                aux = int(day) * 24
                            time = dialog.findChild(QTimeEdit,
                                                    str(column_name))
                            timeparts = time.dateTime().toString(
                                'HH:mm:ss').split(':')
                            h = int(timeparts[0]) + int(aux)
                            aux = str(h) + ":" + str(timeparts[1]) + ":00"
                            value = aux
                        elif widget_type is QSpinBox:
                            x = dialog.findChild(QSpinBox, str(column_name))
                            value = x.value()
                        else:
                            value = utils_giswater.getWidgetText(column_name)
                        if value == 'null':
                            sql += column_name + " = null, "
                        elif value is None:
                            pass
                        else:
                            if type(
                                    value
                            ) is not bool and widget_type is not QSpinBox:
                                value = value.replace(",", ".")
                            sql += column_name + " = '" + str(value) + "', "
                sql = sql[:len(sql) - 2]
        else:
            values = "VALUES("
            if columns is not None:
                sql = "INSERT INTO " + self.schema_name + "." + tablename + " ("
                for column_name in columns:
                    if column_name != 'id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is not None:
                            if widget_type is QCheckBox:
                                values += utils_giswater.isChecked(
                                    column_name) + ", "
                            elif widget_type is QDateEdit:
                                date = dialog.findChild(
                                    QDateEdit, str(column_name))
                                values += date.dateTime().toString(
                                    'yyyy-MM-dd') + ", "
                            else:
                                value = utils_giswater.getWidgetText(
                                    column_name)
                            if value is None or value == 'null':
                                sql += column_name + ", "
                                values += "null, "
                            else:
                                values += "'" + value + "',"
                                sql += column_name + ", "
                sql = sql[:len(sql) - 2] + ") "
                values = values[:len(values) - 2] + ")"
                sql += values
        self.controller.execute_sql(sql)
        dialog.close()
    def insert_or_update_new_psector(self, update, tablename, close_dlg=False):

        psector_name = utils_giswater.getWidgetText(self.dlg.name, return_string_null=False)
        if psector_name == "":
            message = "Mandatory field is missing. Please, set a value"
            self.controller.show_warning(message, parameter='Name')
            return

        rotation = utils_giswater.getWidgetText(self.dlg.rotation, return_string_null=False)
        if rotation == "":
            utils_giswater.setWidgetText(self.dlg.rotation, 0)

        name_exist = self.check_name(psector_name)
        if name_exist and not update:
            message = "The name is current in use"
            self.controller.show_warning(message)
            return
        else:
            self.enable_tabs(True)
            self.enable_buttons(True)

        sql = ("SELECT column_name FROM information_schema.columns"
               " WHERE table_name = '" + "v_edit_" + self.plan_om + "_psector'"
               " AND table_schema = '" + self.schema_name.replace('"', '') + "'"
               " ORDER BY ordinal_position")
        rows = self.controller.get_rows(sql)

        columns = []
        for i in range(0, len(rows)):
            column_name = rows[i]
            columns.append(str(column_name[0]))

        if update:
            if columns:
                sql = "UPDATE " + self.schema_name + "." + tablename + " SET "
                for column_name in columns:
                    if column_name != 'psector_id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is QCheckBox:
                            value = utils_giswater.isChecked(column_name)
                        elif widget_type is QDateEdit:
                            date = self.dlg.findChild(QDateEdit, str(column_name))
                            value = date.dateTime().toString('yyyy-MM-dd HH:mm:ss')
                        elif (widget_type is QComboBox) and (column_name == 'expl_id' or column_name == 'sector_id'
                              or column_name == 'result_id' or column_name == 'psector_type'):
                            combo = utils_giswater.getWidget(column_name)
                            elem = combo.itemData(combo.currentIndex())
                            value = str(elem[0])
                        else:
                            value = utils_giswater.getWidgetText(column_name)
                        if value is None or value == 'null':
                            sql += column_name + " = null, "
                        else:
                            if type(value) is not bool:
                                value = value.replace(",", ".")
                            sql += column_name + " = '" + str(value) + "', "

                sql = sql[:len(sql) - 2]
                sql += " WHERE psector_id = '" + utils_giswater.getWidgetText(self.psector_id) + "'"

        else:
            values = "VALUES("
            if columns:
                sql = "INSERT INTO " + self.schema_name + "." + tablename + " ("
                for column_name in columns:
                    if column_name != 'psector_id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is not None:
                            if widget_type is QCheckBox:
                                value = str(utils_giswater.isChecked(column_name)).upper()
                            elif widget_type is QDateEdit:
                                date = self.dlg.findChild(QDateEdit, str(column_name))
                                values += date.dateTime().toString('yyyy-MM-dd HH:mm:ss') + ", "
                            elif (widget_type is QComboBox) and (column_name == 'expl_id' or column_name == 'sector_id'
                                or column_name == 'result_id' or column_name == 'psector_type'):
                                combo = utils_giswater.getWidget(column_name)
                                elem = combo.itemData(combo.currentIndex())
                                value = str(elem[0])
                            else:
                                value = utils_giswater.getWidgetText(column_name)
                            if value is None or value == 'null':
                                sql += column_name + ", "
                                values += "null, "
                            else:
                                values += "'" + value + "', "
                                sql += column_name + ", "

                sql = sql[:len(sql) - 2] + ") "
                values = values[:len(values) - 2] + ")"
                sql += values

        if not update:
            sql += " RETURNING psector_id"
            new_psector_id = self.controller.execute_returning(sql, search_audit=False, log_sql=True)
            utils_giswater.setText(self.dlg.psector_id, str(new_psector_id[0]))

            if new_psector_id and self.plan_om == 'plan':
                sql = ("SELECT parameter FROM " + self.schema_name + ".config_param_user "
                       " WHERE parameter = 'psector_vdefault' AND cur_user = current_user")
                row = self.controller.get_row(sql)
                if row:
                    sql = ("UPDATE " + self.schema_name + ".config_param_user "
                           " SET value = '" + str(new_psector_id[0]) + "' "
                           " WHERE parameter = 'psector_vdefault'")
                else:
                    sql = ("INSERT INTO " + self.schema_name + ".config_param_user (parameter, value, cur_user) "
                           " VALUES ('psector_vdefault', '" + str(new_psector_id[0]) + "', current_user)")
                self.controller.execute_sql(sql, log_sql=True)
        else:
            self.controller.execute_sql(sql, log_sql=True)
            
        self.dlg.tabWidget.setTabEnabled(1, True)
        self.insert_psector_selector(self.plan_om+'_psector_selector', 'psector_id', utils_giswater.getWidgetText(self.dlg.psector_id))

        if close_dlg:
            self.reload_states_selector()
            self.close_dialog()
    def insert_or_update_new_psector(self, update, tablename):

        sql = "SELECT *"
        sql += " FROM " + self.schema_name + "." + tablename
        row = self.dao.get_row(sql)
        columns = []
        for i in range(0, len(row)):
            column_name = self.dao.get_column_name(i)
            columns.append(column_name)

        if update:
            if columns is not None:
                sql = "UPDATE " + self.schema_name + "." + tablename + " SET "
                for column_name in columns:
                    if column_name != 'psector_id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is QCheckBox:
                            value = utils_giswater.isChecked(column_name)
                        elif widget_type is QDateEdit:
                            date = self.dlg.findChild(QDateEdit, str(column_name))
                            value = date.dateTime().toString('yyyy-MM-dd HH:mm:ss')
                        else:
                            value = utils_giswater.getWidgetText(column_name)
                        if value is None or value == 'null':
                            sql += column_name + " = null, "
                        else:
                            if type(value) is not bool:
                                value = value.replace(",", ".")
                            sql += column_name + " = '" + str(value) + "', "

                sql = sql[:len(sql) - 2]
                sql += " WHERE psector_id = '" + self.psector_id.text() + "'"

        else:
            values = "VALUES("
            if columns is not None:
                sql = "INSERT INTO " + self.schema_name + "." + tablename+" ("
                for column_name in columns:
                    if column_name != 'psector_id':
                        widget_type = utils_giswater.getWidgetType(column_name)
                        if widget_type is not None:
                            if widget_type is QCheckBox:
                                values += utils_giswater.isChecked(column_name)+", "
                            elif widget_type is QDateEdit:
                                date = self.dlg.findChild(QDateEdit, str(column_name))
                                values += date.dateTime().toString('yyyy-MM-dd HH:mm:ss')+", "
                            else:
                                value = utils_giswater.getWidgetText(column_name)
                            if value is None or value == 'null':
                                sql += column_name + ", "
                                values += "null, "
                            else:
                                values += "'" + value + "',"
                                sql += column_name + ", "
                sql = sql[:len(sql) - 2]+") "
                values = values[:len(values)-2] + ")"
                sql += values
                
        self.controller.execute_sql(sql)
        
        self.close_dialog()