コード例 #1
0
    def get_nodes(self):
        """ Fill fields node_1 and node_2 """

        # Get start and end points
        polyline = self.feature.geometry().asPolyline()
        start_point = polyline[0]
        end_point = polyline[len(polyline) - 1]

        # Get parameter 'node_proximity' from config table
        node_proximity = 1
        sql = "SELECT node_proximity FROM " + self.schema_name + ".config"
        row = self.controller.get_row(sql)
        if row:
            node_proximity = row[0]

        # Get closest node from selected points
        node_1 = self.get_node_from_point(start_point, node_proximity)
        node_2 = self.get_node_from_point(end_point, node_proximity)

        widget_name = ""
        layer_source = self.controller.get_layer_source(
            self.iface.activeLayer())
        uri_table = layer_source['table']
        if uri_table == 'v_edit_man_conduit':
            widget_name = 'conduit'
        elif uri_table == 'v_edit_man_varc':
            widget_name = 'varc'
        elif uri_table == 'v_edit_man_siphon':
            widget_name = 'siphon'
        elif uri_table == 'v_edit_man_waccel':
            widget_name = 'waccel'

        # Fill fields node_1 and node_2
        utils_giswater.setText(widget_name + "_node_1", node_1)
        utils_giswater.setText(widget_name + "_node_2", node_2)
コード例 #2
0
    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
コード例 #3
0
    def populate_budget(self, psector_id):
        
        sql = ("SELECT DISTINCT(column_name) FROM information_schema.columns"
               " WHERE table_name = 'v_" + self.plan_om + "_current_psector'")
        rows = self.controller.get_rows(sql)
        columns = []
        for i in range(0, len(rows)):
            column_name = rows[i]
            columns.append(str(column_name[0]))

        sql = ("SELECT total_arc, total_node, total_other, pem, pec, pec_vat, gexpenses, vat, other, pca"
               " FROM " + self.schema_name + ".v_" + self.plan_om + "_current_psector"
               " WHERE psector_id = '" + str(psector_id) + "'")
        row = self.controller.get_row(sql)
        if row:
            for column_name in columns:
                if column_name in row:
                    if row[column_name] is not None:
                        utils_giswater.setText(column_name, row[column_name])
                    else:
                        utils_giswater.setText(column_name, 0)

        self.calc_pec_pem()
        self.calc_pecvat_pec()
        self.calc_pca_pecvat()
コード例 #4
0
 def loadData(self):
     # Tab 'Add. info'
     if self.epa_type == 'TANK':
         sql = "SELECT vmax, area FROM " + self.schema_name + ".man_tank WHERE node_id = " + self.node_id
         row = self.dao.get_row(sql)
         if row:
             utils_giswater.setText("man_tank_vmax", str(row[0]))
             utils_giswater.setText("man_tank_area", str(row[1]))
コード例 #5
0
 def loadData(self):
     # Tab 'Add. info'
     if self.epa_type == 'TANK':
         sql = "SELECT vmax, area FROM "+self.schema_name+".man_tank WHERE node_id = "+self.node_id
         row = self.dao.get_row(sql)
         if row:
             utils_giswater.setText("man_tank_vmax", str(row[0]))
             utils_giswater.setText("man_tank_area", str(row[1]))
コード例 #6
0
 def update_labels(self):
     """ Show text in labels from SELECT """
     sql = "SELECT infiltration, text FROM " + self.schema_name + ".cat_hydrology"
     sql += " WHERE name = '" + str(
         self.dlg_hydrology_selector.hydrology.currentText()) + "'"
     row = self.dao.get_row(sql)
     if row is not None:
         utils_giswater.setText("infiltration", row[0])
         utils_giswater.setText("descript", row[1])
コード例 #7
0
 def show_description(self):
     """ Show description of product plan/om _psector as label"""
     
     selected_list = self.dlg.all_rows.selectionModel().selectedRows()
     des = ""
     for i in range(0, len(selected_list)):
         row = selected_list[i].row()
         des = self.dlg.all_rows.model().record(row).value('descript')
     utils_giswater.setText(self.lbl_descript, des)
コード例 #8
0
 def update_total(self, qtable):
     """ Show description of product plan/om _psector as label """
     
     selected_list = qtable.model()
     if selected_list is None:
         return
     total = 0
     psector_id = utils_giswater.getWidgetText('psector_id')
     for x in range(0, selected_list.rowCount()):
         if int(qtable.model().record(x).value('psector_id')) == int(psector_id):
             if str(qtable.model().record(x).value('total_budget')) != 'NULL':
                 total += float(qtable.model().record(x).value('total_budget'))
     utils_giswater.setText('lbl_total', str(total))
コード例 #9
0
    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
コード例 #10
0
    def click_button_snapping(self, point, btn):  # @UnusedVariable

        if not self.layer_dimensions:
            return

        layer = self.layer_dimensions
        self.iface.setActiveLayer(layer)
        layer.startEditing()

        snapper = QgsMapCanvasSnapper(self.canvas)
        map_point = self.canvas.getCoordinateTransform().transform(point)
        x = map_point.x()
        y = map_point.y()
        event_point = QPoint(x, y)

        # Snapping
        (retval, result) = snapper.snapToBackgroundLayers(
            event_point)  # @UnusedVariable

        # That's the snapped point
        if result:
            # Check feature
            for snapped_point in result:
                if snapped_point.layer == self.layer_node:
                    feat_type = 'node'
                elif snapped_point.layer == self.layer_connec:
                    feat_type = 'connec'
                else:
                    continue

                # Get the point
                point = QgsPoint(snapped_point.snappedVertex)
                snapp_feature = next(
                    snapped_point.layer.getFeatures(
                        QgsFeatureRequest().setFilterFid(
                            snapped_point.snappedAtGeometry)))
                element_id = snapp_feature.attribute(feat_type + '_id')

                # Leave selection
                snapped_point.layer.select([snapped_point.snappedAtGeometry])

                # Get depth of the feature
                if self.project_type == 'ws':
                    fieldname = "depth"
                elif self.project_type == 'ud' and feat_type == 'node':
                    fieldname = "ymax"
                elif self.project_type == 'ud' and feat_type == 'connec':
                    fieldname = "connec_depth"

                sql = ("SELECT " + fieldname + ""
                       " FROM " + self.schema_name + "." + feat_type + ""
                       " WHERE " + feat_type + "_id = '" + element_id + "'")
                row = self.controller.get_row(sql)
                if not row:
                    return

                utils_giswater.setText(self.dialog, "depth", row[0])
                utils_giswater.setText(self.dialog, "feature_id", element_id)
                utils_giswater.setText(self.dialog, "feature_type",
                                       feat_type.upper())
コード例 #11
0
    def get_nodes(self):
        """ Fill fields node_1 and node_2 """

        # Get start and end points
        polyline = self.feature.geometry().asPolyline()
        start_point = polyline[0]
        end_point = polyline[len(polyline) - 1]

        # Get parameter 'node_proximity' from config table
        node_proximity = 1
        sql = "SELECT node_proximity FROM " + self.schema_name + ".config"
        row = self.controller.get_row(sql)
        if row:
            node_proximity = row[0]

        # Get closest node from selected points
        node_1 = self.get_node_from_point(start_point, node_proximity)
        node_2 = self.get_node_from_point(end_point, node_proximity)

        # Fill fields node_1 and node_2
        utils_giswater.setText(self.dialog, "node_1", node_1)
        utils_giswater.setText(self.dialog, "node_2", node_2)
コード例 #12
0
    def fill_workids(self):
        """ Auto fill descriptions and workid's """

        workcat_id = utils_giswater.getWidgetText(
            self.dlg_work_end, self.dlg_work_end.workcat_id_end)

        sql = ("SELECT descript, builtdate"
               " FROM " + self.controller.schema_name + ".cat_work"
               " WHERE id = '" + workcat_id + "'")
        row = self.controller.get_row(sql)
        if row:
            utils_giswater.setText(self.dlg_work_end,
                                   self.dlg_work_end.descript, row['descript'])
            utils_giswater.setCalendarDate(self.dlg_work_end,
                                           self.dlg_work_end.builtdate,
                                           row['builtdate'], False)
        else:
            utils_giswater.setText(self.dlg_work_end,
                                   self.dlg_work_end.descript, '')
            utils_giswater.setCalendarDate(self.dlg_work_end,
                                           self.dlg_work_end.builtdate, None,
                                           False)
コード例 #13
0
    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()
コード例 #14
0
    def click_button_snapping(self, point, btn):  #@UnusedVariable

        # Disconnect mouse movement
        self.vertex_marker.hide()
        self.canvas.disconnect(self.canvas,
                               SIGNAL("xyCoordinates(const QgsPoint&)"),
                               self.mouse_move)

        if not self.layer_dimensions:
            return

        layer = self.layer_dimensions
        self.iface.setActiveLayer(layer)
        layer.startEditing()

        # TODO:
        node_group = [
            "Junction", "Valve", "Reduction", "Tank", "Meter", "Manhole",
            "Source", "Hydrant", "Wtp", "Netsamplepoint", "Netelement",
            "Flexunion", "Expantank", "Netwjoin", "Register", "Pump",
            "Waterwell", "Filter"
        ]

        snapper = QgsMapCanvasSnapper(self.canvas)
        map_point = self.canvas.getCoordinateTransform().transform(point)
        x = map_point.x()
        y = map_point.y()
        event_point = QPoint(x, y)

        # Snapping
        (retval, result) = snapper.snapToBackgroundLayers(
            event_point)  # @UnusedVariable

        # That's the snapped point
        if result <> []:

            # Check feature
            for snap_point in result:

                element_type = snap_point.layer.name()
                if element_type in node_group:
                    feat_type = 'node'
                else:
                    continue

                # Get the point
                point = QgsPoint(snap_point.snappedVertex)
                snapp_feature = next(
                    snap_point.layer.getFeatures(
                        QgsFeatureRequest().setFilterFid(
                            snap_point.snappedAtGeometry)))
                element_id = snapp_feature.attribute(feat_type + '_id')

                # Leave selection
                snap_point.layer.select([snap_point.snappedAtGeometry])

                # Get depth of the feature
                if self.project_type == 'ws':
                    fieldname = "depth"
                elif self.project_type == 'ud' and feat_type == 'node':
                    fieldname = "ymax"
                elif self.project_type == 'ud' and feat_type == 'connec':
                    fieldname = "connec_depth"

                sql = "SELECT " + fieldname
                sql += " FROM " + self.schema_name + "." + feat_type
                sql += " WHERE " + feat_type + "_id = '" + element_id + "'"
                row = self.controller.get_row(sql)
                if not row:
                    return

                utils_giswater.setText("depth", row[0])
                utils_giswater.setText("feature_id", element_id)
                utils_giswater.setText("feature_type", element_type)
コード例 #15
0
    def master_new_psector(self, psector_id=None, enable_tabs=False):
        """ Button 45: New psector """

        # Create the dialog and signals
        self.dlg = Plan_psector()
        utils_giswater.setDialog(self.dlg)
        self.list_elemets = {}
        update = False  # if false: insert; if true: update
        tab_arc_node_other = self.dlg.findChild(QTabWidget, "tabWidget_2")
        tab_arc_node_other.setTabEnabled(0, enable_tabs)
        tab_arc_node_other.setTabEnabled(1, enable_tabs)
        tab_arc_node_other.setTabEnabled(2, enable_tabs)

        # tab General elements
        self.psector_id = self.dlg.findChild(QLineEdit, "psector_id")
        self.priority = self.dlg.findChild(QComboBox, "priority")
        sql = "SELECT DISTINCT(id) FROM "+self.schema_name+".value_priority ORDER BY id"
        rows = self.dao.get_rows(sql)
        utils_giswater.fillComboBox("priority", rows, False)

        scale = self.dlg.findChild(QLineEdit, "scale")
        scale.setValidator(QDoubleValidator())
        rotation = self.dlg.findChild(QLineEdit, "rotation")
        rotation.setValidator(QDoubleValidator())

        # tab Bugdet
        sum_expenses = self.dlg.findChild(QLineEdit, "sum_expenses")
        other = self.dlg.findChild(QLineEdit, "other")
        other.setValidator(QDoubleValidator())
        other_cost = self.dlg.findChild(QLineEdit, "other_cost")

        sum_oexpenses = self.dlg.findChild(QLineEdit, "sum_oexpenses")
        gexpenses = self.dlg.findChild(QLineEdit, "gexpenses")
        gexpenses.setValidator(QDoubleValidator())
        gexpenses_cost = self.dlg.findChild(QLineEdit, "gexpenses_cost")
        self.dlg.gexpenses_cost.textChanged.connect(partial(self.cal_percent, sum_oexpenses, gexpenses, gexpenses_cost))

        sum_gexpenses = self.dlg.findChild(QLineEdit, "sum_gexpenses")
        vat = self.dlg.findChild(QLineEdit, "vat")
        vat.setValidator(QDoubleValidator())
        vat_cost = self.dlg.findChild(QLineEdit, "vat_cost")
        self.dlg.gexpenses_cost.textChanged.connect(partial(self.cal_percent, sum_gexpenses, vat, vat_cost))

        sum_vexpenses = self.dlg.findChild(QLineEdit, "sum_vexpenses")

        self.dlg.other.textChanged.connect(partial(self.cal_percent, sum_expenses, other, other_cost))
        self.dlg.other_cost.textChanged.connect(partial(self.sum_total, sum_expenses, other_cost, sum_oexpenses))
        self.dlg.gexpenses.textChanged.connect(partial(self.cal_percent, sum_oexpenses, gexpenses, gexpenses_cost))
        self.dlg.gexpenses_cost.textChanged.connect(partial(self.sum_total, sum_oexpenses, gexpenses_cost, sum_gexpenses))
        self.dlg.vat.textChanged.connect(partial(self.cal_percent, sum_gexpenses, vat, vat_cost))
        self.dlg.vat_cost.textChanged.connect(partial(self.sum_total, sum_gexpenses, vat_cost, sum_vexpenses))

        # Tables
        # tab Elements
        tbl_arc_plan = self.dlg.findChild(QTableView, "tbl_arc_plan")
        tbl_arc_plan.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.fill_table(tbl_arc_plan, self.schema_name + ".plan_arc_x_psector")

        tbl_node_plan = self.dlg.findChild(QTableView, "tbl_node_plan")
        tbl_node_plan.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.fill_table(tbl_node_plan, self.schema_name + ".plan_node_x_psector")

        tbl_other_plan = self.dlg.findChild(QTableView, "tbl_other_plan")
        tbl_other_plan.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.fill_table(tbl_other_plan, self.schema_name + ".plan_other_x_psector")

        # tab Elements
        self.dlg.btn_add_arc_plan.pressed.connect(partial(self.snapping, "v_edit_arc", "plan_arc_x_psector", tbl_arc_plan, "arc"))
        self.dlg.btn_del_arc_plan.pressed.connect(partial(self.multi_rows_delete, tbl_arc_plan, "plan_arc_x_psector", "id"))

        self.dlg.btn_add_node_plan.pressed.connect(partial(self.snapping, "v_edit_node", "plan_node_x_psector", tbl_node_plan, "node"))
        self.dlg.btn_del_node_plan.pressed.connect(partial(self.multi_rows_delete, tbl_node_plan, "plan_node_x_psector", "id"))

        self.dlg.btn_del_other_plan.pressed.connect(partial(self.multi_rows_delete, tbl_other_plan, "plan_other_x_psector", "id"))

        ##
        # if a row is selected from mg_psector_mangement(button 46)
        # Si psector_id contiene "1" o "0" python lo toma como boolean, si es True, quiere decir que no contiene valor
        # y por lo tanto es uno nuevo. Convertimos ese valor en 0 ya que ningun id va a ser 0. de esta manera si psector_id
        # tiene un valor distinto de 0, es que el sector ya existe y queremos hacer un update.
        ##
        if isinstance(psector_id, bool):
            psector_id = 0

        if psector_id != 0:

            sql = "SELECT psector_id, name, priority, descript, text1, text2, observ, atlas_id, scale, rotation "
            sql += " FROM " + self.schema_name + ".plan_psector"
            sql += " WHERE psector_id = " + str(psector_id)
            row = self.dao.get_row(sql)
            if row is None:
                return

            self.psector_id.setText(str(row["psector_id"]))
            utils_giswater.setRow(row)
            utils_giswater.fillWidget("name")
            utils_giswater.fillWidget("descript")
            index = self.priority.findText(row["priority"], Qt.MatchFixedString)
            if index >= 0:
                self.priority.setCurrentIndex(index)
            utils_giswater.fillWidget("text1")
            utils_giswater.fillWidget("text2")
            utils_giswater.fillWidget("observ")
            utils_giswater.fillWidget("atlas_id")
            utils_giswater.fillWidget("scale")
            utils_giswater.fillWidget("rotation")

            # Fill tables tbl_arc_plan, tbl_node_plan, tbl_v_plan_other_x_psector with selected filter
            expr = " psector_id = " + str(psector_id)
            tbl_arc_plan.model().setFilter(expr)
            tbl_arc_plan.model().select()

            expr = " psector_id = " + str(psector_id)
            tbl_node_plan.model().setFilter(expr)
            tbl_node_plan.model().select()

            # Total other Prices
            total_other_price = 0
            sql = "SELECT SUM(budget) FROM " + self.schema_name + ".v_plan_other_x_psector"
            sql += " WHERE psector_id = '" + str(psector_id) + "'"
            row = self.dao.get_row(sql)
            if row is not None:
                if row[0]:
                    total_other_price = row[0]
            utils_giswater.setText("sum_v_plan_other_x_psector", total_other_price)

            # Total arcs
            total_arcs = 0
            sql = "SELECT SUM(budget) FROM " + self.schema_name + ".v_plan_arc_x_psector"
            sql += " WHERE psector_id = '" + str(psector_id) + "'"
            row = self.dao.get_row(sql)
            if row is not None:
                if row[0]:
                    total_arcs = row[0]
            utils_giswater.setText("sum_v_plan_x_arc_psector", total_arcs)

            # Total nodes
            total_nodes = 0
            sql = "SELECT SUM(budget) FROM " + self.schema_name + ".v_plan_node_x_psector"
            sql += " WHERE psector_id = '" + str(psector_id) + "'"
            row = self.dao.get_row(sql)
            if row is not None:
                if row[0]:
                    total_nodes = row[0]
            utils_giswater.setText("sum_v_plan_x_node_psector", total_nodes)

            sum_expenses = total_other_price + total_arcs + total_nodes
            utils_giswater.setText("sum_expenses", sum_expenses)
            update = True

        # Buttons
        self.dlg.btn_accept.pressed.connect(partial(self.insert_or_update_new_psector, update, 'plan_psector'))
        self.dlg.btn_cancel.pressed.connect(self.close_dialog)
        self.dlg.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.dlg.open()