diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d21a50b79..fb11abb21 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,12 +9,14 @@ You can find more information about our code of conduct on: https://github.com/G As well as Giswater is developed in Python (qgis plugin) and PL/SQL(PostgreSQL database) there are three main repositories to manage it (QGIS-PLUGIN, DB-MODEL and DOCS). Right now this is the repository for the QGIS-PLUGIN. ## TABLE OF CONTENTS + 1- Bug report.
2- Working with issues.
3- Make new code contribution.
4- Contributors list.
## BUG REPORT + If you’re experiencing a problem while working with Giswater, please, report it so our developers can revise and fix it, by submitting the following information and sending an e-mail to bugreport@giswater.org 1. Contact Information: name and e-mail address.
@@ -27,18 +29,22 @@ This report is generated by clicking on the button ‘Check project' on utilitie After a few seconds an extensive report for project status is generated within a dialog. Screenshot of this dialog should be sent such that (at least errors & warnings).
More information: https://www.giswater.org/bug-report
- ## WORKING WITH ISSUES + ### Create a new issue: + If you spot a problem with the docs, search if an issue already exists. If a related issue doesn't exist, you can open a new issue using a relevant issue form.
### Solve an issue: + Scan through our existing issues to find one that interests you. You can narrow down the search using labels as filters. See Labels for more information. As a general rule, we don’t assign issues to anyone. If you find an issue to work on, you are welcome to open a PR with a fix.
## MAKE NEW CODE CONTRIBUTION + To get an overview of the project, read the README. Here are some resources to help you get started with open source contributions.
### Finding ways to contribute with project: + - Set up Git.
- GitHub flow.
- Collaborating with pull requests.
@@ -46,14 +52,15 @@ To get an overview of the project, read the README. Here are some resources to h - To navigate our codebase with confidence, see the introduction to working in the docs repository.
### Choose te repo: + To make new code you need to choose what repo are you looking for:
Use the https://github.com/Giswater/docs repository to work with DOCS
Use the https://github.com/Giswater/giswater_qgis_plugin repository to work with PYTHON QGIS PLUGIN.
Use the https://github.com/Giswater/giswater_dbmodel repository to work with DATABASE MODEL.
Rest of repositories are no significant. Some of them they are deprecated or some of them are not used yet. - ### Make changes locally: + 1- Install Git LFS.
2- Fork the repository.
3- Using GitHub Desktop.
@@ -66,6 +73,7 @@ Rest of repositories are no significant. Some of them they are deprecated or som 10- Once your changes are ready, don't forget to self-review to speed up the review process.
### Create Pull Request: + When you're finished with the changes, create a pull request, also known as a PR.
Fill the "Ready for review" template so that we can review your PR. This template helps reviewers understand your changes as well as the purpose of your pull request. Don't forget to link PR to issue if you are solving one.
Enable the checkbox to allow maintainer edits so the branch can be updated for a merge. Once you submit your PR, a team member will review your proposal. We may ask questions or request for additional information.
@@ -73,6 +81,7 @@ We may ask for changes to be made before a PR can be merged, either using sugges As you update your PR and apply changes, mark each conversation as resolved. Once your PR is merged, your contributions will be publicly visible on the GitHub.
## CONTRIBUTORS LIST + Nicole Aguiar, Frelance GIS consultant.
Jordi Blanch, Stagier on BGEO OPEN GIS.
Guillem Esteve, Stagier on BGEO OPEN GIS.
@@ -94,4 +103,5 @@ Edgar Fuste, GIS developer on BGEO OPEN GIS.
Albert Bofill, GIS analyst on BGEO OPEN GIS.
Barbara Rzepka, GIS analyst on BGEO OPEN GIS.
Xavier Torret, GIS analyst on BGEO OPEN GIS.
- +Daniel Marín, Backend on BGEO OPEN GIS.
+Ferran Martínez, Frontend on BGEO OPEN GIS.
diff --git a/config/giswater.config b/config/giswater.config index 23840c6a8..808b7d3ca 100644 --- a/config/giswater.config +++ b/config/giswater.config @@ -71,7 +71,6 @@ ud = 26, 27, 219 # plan 45 = GwPsectorButton 46 = GwPsectorManagerButton -50 = GwPriceManagerButton 219 = GwNetscenarioManagerButton # utilities 58 = GwPrintButton @@ -83,7 +82,7 @@ ud = 26, 27, 219 217 = GwUtilsManagerButton # toc 306 = GwAddChildLayerButton -308 = GwEpaWorldButton +308 = GwLayerStyleChangeButton [menu] load = true @@ -137,7 +136,6 @@ dlg_plan_psector = 5.-giswater-plugin#5-2-5-1-new-planification-sector #dlg_psector_rapport = None dlg_psector_manager = 5.-giswater-plugin#5-2-5-2-psector-manager #dlg_psector_duplicate = None -dlg_price_manager = 5.-giswater-plugin#5-2-5-3-network-cost-manager #plan_estimate_result_new = None #price_result_selector = None #utils diff --git a/config/user_params.config b/config/user_params.config index 006705039..5c3adc898 100644 --- a/config/user_params.config +++ b/config/user_params.config @@ -8,6 +8,7 @@ force_superuser = False #Forces the main Giswater dialog to be enabled, even if disable_updateall_attributetable = False #Disables button "Update all" from attribute table show_psector_ruberband_duration = 5 #Manage rubberband duration force_create_qgis_group_layer = False #Creates missing groups in ToC when adding layers +force_commit = None [init.log] log_level = 20 #Default log level. CRITICAL = 50, FATAL = CRITICAL, ERROR = 40, WARNING = 30, WARN = WARNING, INFO = 20, DEBUG = 10, NOTSET = 0 @@ -68,7 +69,6 @@ shortcut_toggle_log_db = Alt+1 #Shortcut to show DB&Notify logs # plan 45 = None #GwPsectorButton 46 = None #GwPsectorManagerButton -50 = None #GwPriceManagerButton # utilities 58 = None #GwPrintButton 59 = None #GwProjectCheckButton @@ -92,6 +92,7 @@ _psector_manager_keep_open = True _search_open_loadproject = None _curselectors_open_loadproject = False _mincut_manager_keep_open = False +_workcat_manager_keep_open = True [init.user_edit_tricks] _keep_maptool_active = False @@ -320,6 +321,14 @@ _dlg_nonvisual_pattern_ws_width = None _dlg_nonvisual_pattern_ws_height = None _dlg_psector_repair_width = None _dlg_psector_repair_height = None +_dlg_comp_x_pages_width = None +_dlg_comp_x_pages_height = None +_dlg_workcat_manager_width = None +_dlg_workcat_manager_height = None +_dlg_style_manager_width = None +_dlg_style_manager_height = None +_dlg_feature_add_width = None +_dlg_feature_add_height = None [session.dialogs_position] dlg_admin_translation_x = None @@ -520,6 +529,14 @@ _dlg_nonvisual_pattern_ws_x = None _dlg_nonvisual_pattern_ws_y = None _dlg_psector_repair_x = None _dlg_psector_repair_y = None +_dlg_comp_x_pages_x = None +_dlg_comp_x_pages_y = None +_dlg_workcat_manager_x = None +_dlg_workcat_manager_y = None +_dlg_style_manager_x = None +_dlg_style_manager_y = None +_dlg_feature_add_x = None +_dlg_feature_add_y = None [session.dialogs_tab] _dlg_selector_basic = None @@ -929,6 +946,9 @@ _gw_fct_create_hydrology_scenario_empty_infiltration = None _gw_fct_create_hydrology_scenario_empty_text = None _gw_fct_create_hydrology_scenario_empty_expl = None _gw_fct_create_hydrology_scenario_empty_active = None +_gw_fct_graphanalytics_mapzones_advanced_checkdata = None +_gw_fct_waterbalance_method = None +_gw_fct_graphanalytics_mapzones_plan_exploitation = None [session.docker] _position = None @@ -1066,3 +1086,9 @@ _cmb_expl_id = None _cmb_sector_id = None _chk_active = None +[session.composer_pages] +_last_composer = None +_folder_path = None +_prefix = None +_single = None + diff --git a/core/admin/admin_btn.py b/core/admin/admin_btn.py index 45f529880..6c2751ff4 100644 --- a/core/admin/admin_btn.py +++ b/core/admin/admin_btn.py @@ -465,7 +465,7 @@ def load_base(self, dict_folders): """""" for folder in dict_folders.keys(): status = self._execute_files(folder, set_progress_bar=True) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -479,11 +479,11 @@ def load_locale(self): return False else: status = self._execute_files(folder_locale, True, set_progress_bar=True) - if status is False and self.dev_commit is False: + if tools_os.set_boolean(status, False) is False and tools_os.set_boolean(self.dev_commit, False) is False: return False else: status = self._execute_files(self.folder_locale, True, set_progress_bar=True) - if status is False and self.dev_commit is False: + if tools_os.set_boolean(status, False) is False and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -494,7 +494,7 @@ def update_minor_dict_folders(self, folder_update, new_project, project_type, no folder_utils = os.path.join(folder_update, 'utils') if self._process_folder(folder_utils) is True: status = self._load_sql(folder_utils, no_ct, set_progress_bar=True) - if status is False: + if tools_os.set_boolean(status, False) is False: return False if new_project: @@ -504,13 +504,13 @@ def update_minor_dict_folders(self, folder_update, new_project, project_type, no folder_project_type = os.path.join(folder_update, folder_project) if self._process_folder(folder_project_type): status = self._load_sql(folder_project_type, no_ct, set_progress_bar=True) - if status is False: + if tools_os.set_boolean(status, False) is False: return False folder_locale = os.path.join(folder_update, 'i18n', self.locale) if self._process_folder(folder_locale) is True: status = self._execute_files(folder_locale, True, set_progress_bar=True) - if status is False: + if tools_os.set_boolean(status, False) is False: return False return True @@ -529,27 +529,15 @@ def update_dict_folders(self, new_project=False, project_type=False, no_ct=False for sub_folder in sub_folders: folder_update = os.path.join(self.folder_updates, folder, sub_folder) if new_project: - if self.dev_commit is True: - if str(sub_folder) > '31100': - status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) - if status is False: - return False - else: - if str(sub_folder) > '31100' and str(sub_folder) <= str(self.plugin_version).replace('.', ''): - status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) - if status is False: - return False + if str(sub_folder) > '31100' and str(sub_folder) <= str(self.plugin_version).replace('.', ''): + status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) + if tools_os.set_boolean(status, False) is False: + return False else: - if self.dev_commit is True: - if str(sub_folder) > str(self.project_version).replace('.', '') and str(sub_folder) > '31100': - status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) - if status is False: - return False - else: - if str(sub_folder) > str(self.project_version).replace('.', '') and str(sub_folder) > '31100' and str(sub_folder) <= str(self.plugin_version).replace('.', ''): - status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) - if status is False: - return False + if str(sub_folder) > str(self.project_version).replace('.', '') and str(sub_folder) > '31100' and str(sub_folder) <= str(self.plugin_version).replace('.', ''): + status = self.update_minor_dict_folders(folder_update, new_project, project_type, no_ct) + if tools_os.set_boolean(status, False) is False: + return False return True def load_childviews(self): @@ -559,11 +547,11 @@ def load_childviews(self): return False else: status = self._execute_files(folder_childviews, True, set_progress_bar=True) - if status is False and self.dev_commit is False: + if tools_os.set_boolean(status, False) is False and tools_os.set_boolean(self.dev_commit, False) is False: return False else: status = self._execute_files(self.folder_childviews, True, set_progress_bar=True) - if status is False and self.dev_commit is False: + if tools_os.set_boolean(status, False) is False and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -573,7 +561,7 @@ def load_sample_data(self, project_type): tools_db.dao.commit() folder = os.path.join(self.folder_example, 'user', project_type) status = self._execute_files(folder, set_progress_bar=True) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -583,7 +571,7 @@ def load_inv_data(self, project_type): tools_db.dao.commit() folder = os.path.join(self.folder_example, 'inv', project_type) status = self._execute_files(folder, set_progress_bar=True) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -594,7 +582,7 @@ def load_dev_data(self, project_type): folder = os.path.join(self.folder_example, 'dev', project_type) status = self._execute_files(folder, set_progress_bar=True) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -678,7 +666,7 @@ def _init_show_database(self): self.folder_example = os.path.join(self.sql_dir, 'example') # Variable to commit changes even if schema creation fails - self.dev_commit = global_vars.gw_dev_mode + self.dev_commit = tools_gw.get_config_parser('system', 'force_commit', "user", "init", prefix=True) # Create dialog object self.dlg_readsql = GwAdminUi(self) @@ -1082,7 +1070,7 @@ def _load_sql(self, path_folder, no_ct=False, utils_schema_name=None, set_progre for (path, ficheros, archivos) in os.walk(path_folder): status = self._execute_files(path, no_ct=no_ct, utils_schema_name=utils_schema_name, set_progress_bar=set_progress_bar) - if not status: + if not tools_os.set_boolean(status, False): return False return True @@ -1170,7 +1158,7 @@ def _rename_project_data_schema(self, schema, create_project=None): # Check if the new project name already exists sql = "SELECT schema_name, schema_name FROM information_schema.schemata" - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) for row in rows: if str(self.schema) == str(row[0]): msg = "This project name alredy exist." @@ -1248,22 +1236,22 @@ def _load_fct_ftrg(self): folder = os.path.join(self.folder_utils, self.file_pattern_fct) status = self._execute_files(folder) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.folder_utils, self.file_pattern_ftrg) status = self._execute_files(folder) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.folder_software, self.file_pattern_fct) status = self._execute_files(folder) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.folder_software, self.file_pattern_ftrg) status = self._execute_files(folder) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -1514,7 +1502,7 @@ def _populate_data_schema_name(self, widget): return # Populate Project data schema Name sql = "SELECT schema_name FROM information_schema.schemata" - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) if rows is None: return @@ -1568,7 +1556,7 @@ def _filter_srid_changed(self): "FROM public.spatial_ref_sys " "WHERE CAST(srid AS TEXT) LIKE '" + str(filter_value)) sql += "%' AND srtext ILIKE 'PROJCS%' ORDER BY substr(srtext, 1, 6), srid" - self.last_srids = tools_db.get_rows(sql) + self.last_srids = tools_db.get_rows(sql, commit=self.dev_commit) # Populate Table self.model_srid = QSqlQueryModel() @@ -1685,7 +1673,13 @@ def _reload_fct_ftrg(self): self.task1.setProgress(100) status = (self.error_count == 0) - self._manage_result_message(status, parameter="Reload") + if status: + tools_qt.show_info_box("Reload completed successfully", title="Success") + tools_db.dao.commit() + else: + tools_qt.show_info_box("Reload failed", title="Error") + tools_db.dao.rollback() + if status: tools_db.dao.commit() else: @@ -1797,7 +1791,7 @@ def _execute_files(self, filedir, i18n=False, no_ct=False, utils_schema_name=Non tools_log.log_info(os.path.join(filedir, file)) self.current_sql_file += 1 status = self._read_execute_file(filedir, file, schema_name, self.project_epsg, set_progress_bar) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False else: @@ -1807,7 +1801,7 @@ def _execute_files(self, filedir, i18n=False, no_ct=False, utils_schema_name=Non tools_log.log_info(os.path.join(filedir, file)) self.current_sql_file += 1 status = self._read_execute_file(filedir, file, schema_name, self.project_epsg, set_progress_bar) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and not tools_os.set_boolean(self.dev_commit, False): return False return status @@ -1835,13 +1829,12 @@ def _read_execute_file(self, filedir, file, schema_name, project_epsg, set_progr if f: f_to_read = str(f.read().replace("SCHEMA_NAME", schema_name).replace("SRID_VALUE", project_epsg)) status = tools_db.execute_sql(str(f_to_read), filepath=filepath, commit=self.dev_commit, is_thread=True) - - if status is False: + if tools_os.set_boolean(status, False) is False: self.error_count = self.error_count + 1 tools_log.log_info(f"_read_execute_file error {filepath}") tools_log.log_info(f"Message: {lib_vars.session_vars['last_error']}") self.message_infolog = f"_read_execute_file error {filepath}\nMessage: {lib_vars.session_vars['last_error']}" - if self.dev_commit is False: + if tools_os.set_boolean(self.dev_commit, False) is False: tools_db.dao.rollback() if hasattr(self, 'task_create_schema') and not isdeleted(self.task_create_schema): @@ -1855,7 +1848,7 @@ def _read_execute_file(self, filedir, file, schema_name, project_epsg, set_progr tools_log.log_info(f"_read_execute_file exception: {file}") tools_log.log_info(str(e)) self.message_infolog = f"_read_execute_file exception: {file}\n {str(e)}" - if self.dev_commit is False: + if tools_os.set_boolean(self.dev_commit, False) is False: tools_db.dao.rollback() if hasattr(self, 'task_create_schema') and not isdeleted(self.task_create_schema): self.task_create_schema.cancel() @@ -1919,7 +1912,7 @@ def _copy_project_start(self, schema): new_schema_name = tools_qt.get_text(self.dlg_readsql_copy, self.dlg_readsql_copy.schema_rename_copy) sql = "SELECT schema_name, schema_name FROM information_schema.schemata" - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) for row in rows: if str(new_schema_name) == str(row[0]): @@ -2303,7 +2296,7 @@ def _update_manage_ui(self): sql = (f"SELECT cat_feature.id, cat_feature.id " f"FROM {schema_name}.cat_feature WHERE id <> 'LINK' " f"AND active IS TRUE ORDER BY id") - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) tools_qt.fill_combo_values(self.dlg_readsql.cmb_formname_fields, rows) @@ -2432,19 +2425,19 @@ def _manage_create_field(self, form_name, is_multi_addfield): # Populate widgettype combo sql = (f"SELECT DISTINCT(id), idval FROM {schema_name}.config_typevalue " f"WHERE typevalue = 'widgettype_typevalue' AND addparam->>'createAddfield' = 'TRUE'") - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) tools_qt.fill_combo_values(self.dlg_manage_fields.widgettype, rows) # Populate datatype combo sql = (f"SELECT id, idval FROM {schema_name}.config_typevalue " f"WHERE typevalue = 'datatype_typevalue' AND addparam->>'createAddfield' = 'TRUE'") - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) tools_qt.fill_combo_values(self.dlg_manage_fields.datatype, rows) # Populate layoutname combo sql = (f"SELECT id, idval FROM {schema_name}.config_typevalue " f"WHERE typevalue = 'layout_name_typevalue' AND addparam->>'createAddfield' = 'TRUE'") - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) tools_qt.fill_combo_values(self.dlg_manage_fields.layoutname, rows) # Set default value for formtype widget @@ -2497,7 +2490,7 @@ def _manage_delete_field(self, form_name, is_multi_addfield): f"FROM {schema_name}.ve_config_addfields " f"WHERE cat_feature_id = '{form_name}'") - rows = tools_db.get_rows(sql) + rows = tools_db.get_rows(sql, commit=self.dev_commit) tools_qt.fill_combo_values(self.dlg_manage_fields.cmb_fields, rows) @@ -2521,7 +2514,7 @@ def _manage_accept(self, action, form_name, is_multi=False): sql = (f"UPDATE {schema_name}.config_param_system " f"SET value = 'TRUE'" f"WHERE parameter = 'admin_config_control_trigger'") - tools_db.execute_sql(sql) + tools_db.execute_sql(sql, commit=self.dev_commit) # Execute manage add fields function @@ -2591,13 +2584,13 @@ def _manage_accept(self, action, form_name, is_multi=False): body = body.replace('""', 'null') # Execute manage add fields function - json_result = tools_gw.execute_procedure('gw_fct_admin_manage_addfields', body, schema_name) + json_result = tools_gw.execute_procedure('gw_fct_admin_manage_addfields', body, schema_name, commit=self.dev_commit) if not json_result or json_result['status'] == 'Failed': # set admin_config_control_trigger with prev user value sql = (f"UPDATE {schema_name}.config_param_system " f"SET value = '{config_trg_user_value}'" f"WHERE parameter = 'admin_config_control_trigger'") - tools_db.execute_sql(sql) + tools_db.execute_sql(sql, commit=self.dev_commit) return self._manage_json_message(json_result, parameter="Field configured in 'config_form_fields'") @@ -2669,7 +2662,7 @@ def _manage_accept(self, action, form_name, is_multi=False): sql = (f"UPDATE {schema_name}.config_param_system " f"SET value = '{config_trg_user_value}'" f"WHERE parameter = 'admin_config_control_trigger'") - tools_db.execute_sql(sql) + tools_db.execute_sql(sql, commit=self.dev_commit) def _change_project_type(self, widget): """ Take current project type changed """ @@ -2788,12 +2781,10 @@ def _insert_inp_into_db(self, folder_path=None): sql += values if progress % 500 == 0: - # TODO:: Use dev_commit or dev_user? tools_db.execute_sql(sql, commit=self.dev_commit) sql = "" if sql != "": - # TODO:: Use dev_commit or dev_user? tools_db.execute_sql(sql, commit=self.dev_commit) _file.close() @@ -2928,7 +2919,7 @@ def _manage_user_params(self): sql = (f"UPDATE {self.schema_name}.config_param_user " f"SET value = '{composers_path_vdef}' " f"WHERE parameter = 'qgis_composers_folderpath' AND cur_user = current_user") - tools_db.execute_sql(sql) + tools_db.execute_sql(sql, commit=self.dev_commit) def _select_active_locales(self, sqlite_cursor): @@ -3068,19 +3059,19 @@ def _load_base_utils(self): folder = os.path.join(self.sql_dir, 'corporate', 'utils', 'utils') status = self._execute_files(folder, utils_schema_name='utils') - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.sql_dir, 'corporate', 'utils', 'utils', 'fct') status = self._execute_files(folder, utils_schema_name='utils') - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.sql_dir, 'corporate', 'utils', 'ws') status = self._execute_files(folder, utils_schema_name=self.ws_project_name) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False folder = os.path.join(self.sql_dir, 'corporate', 'utils', 'ud') status = self._execute_files(folder, utils_schema_name=self.ud_project_name) - if not status and self.dev_commit is False: + if not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.dev_commit, False) is False: return False return True @@ -3105,7 +3096,7 @@ def _update_utils_schema(self, schema_version=None, schema_name=None): folder_update = os.path.join(folder_utils_updates, folder, sub_folder, 'utils') if self._process_folder(folder_update): status = self._load_sql(folder_update, utils_schema_name='utils') - if status is False: + if tools_os.set_boolean(status, False) is False: return False if self.project_type_selected == 'ws': folder_update = os.path.join(folder_utils_updates, folder, sub_folder, 'ws') @@ -3113,7 +3104,7 @@ def _update_utils_schema(self, schema_version=None, schema_name=None): if schema_name is None: schema_name = self.ws_project_name status = self._load_sql(folder_update, utils_schema_name=schema_name) - if status is False: + if tools_os.set_boolean(status, False) is False: return False if self.project_type_selected == 'ud': folder_update = os.path.join(folder_utils_updates, folder, sub_folder, 'ud') @@ -3121,12 +3112,12 @@ def _update_utils_schema(self, schema_version=None, schema_name=None): if schema_name is None: schema_name = self.ud_project_name status = self._load_sql(folder_update, utils_schema_name=schema_name) - if status is False: + if tools_os.set_boolean(status, False) is False: return False folder_update = os.path.join(folder_utils_updates, folder, sub_folder, 'i18n', self.locale) if self._process_folder(folder_update) is True: status = self._execute_files(folder_update, True) - if status is False: + if tools_os.set_boolean(status, False) is False: return False return True diff --git a/core/load_project.py b/core/load_project.py index e5acd2b47..5b0029532 100644 --- a/core/load_project.py +++ b/core/load_project.py @@ -46,7 +46,7 @@ def project_read(self, show_warning=True, main=None): # Check if loaded project is valid for Giswater if not self._check_project(show_warning): - return + return False # Force commit before opening project and set new database connection if not self._check_database_connection(show_warning): @@ -143,9 +143,6 @@ def project_read(self, show_warning=True, main=None): if tools_os.set_boolean(force_tab_expl, False): self._force_tab_exploitation() - # Manage epa POV - tools_gw.set_epa_world(False, is_init=True) - # Set lib_vars.project_epsg lib_vars.project_epsg = tools_qgis.get_epsg() tools_gw.connect_signal(QgsProject.instance().crsChanged, tools_gw.set_epsg, @@ -510,7 +507,7 @@ def _check_user_roles(self): self._enable_toolbar("epa") self._hide_button("308", False) - elif lib_vars.project_vars['project_role'] == 'role_master' or lib_vars.project_vars['project_role'] == 'role_admin': + elif lib_vars.project_vars['project_role'] == 'role_master' or lib_vars.project_vars['project_role'] == 'role_admin' or lib_vars.project_vars['project_role'] == 'role_system': self._enable_toolbar("om") self._enable_toolbar("edit") self._enable_toolbar("cad") diff --git a/core/shared/dimensioning.py b/core/shared/dimensioning.py index c0a09bfa5..7ebf373b6 100644 --- a/core/shared/dimensioning.py +++ b/core/shared/dimensioning.py @@ -513,8 +513,7 @@ def _set_widgets(self, dialog, db_return, field): widget = tools_gw.add_tableview(db_return, field, dialog) widget = tools_gw.add_tableview_header(widget, field) widget = tools_gw.fill_tableview_rows(widget, field) - widget = tools_gw.set_tablemodel_config(dialog, widget, field['widgetname'], sort_order=1, - isQStandardItemModel=True) + widget = tools_gw.set_tablemodel_config(dialog, widget, field['widgetname'], sort_order=1) tools_qt.set_tableview_config(widget) widget.setObjectName(widget.property('columnname')) diff --git a/core/shared/document.py b/core/shared/document.py index ecea711fd..c69c5febb 100644 --- a/core/shared/document.py +++ b/core/shared/document.py @@ -8,13 +8,17 @@ import os import webbrowser from functools import partial +from osgeo import gdal +from pyproj import CRS, Transformer -from qgis.PyQt.QtWidgets import QAbstractItemView, QTableView, QFileDialog -from qgis.PyQt.QtCore import pyqtSignal, QObject +from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem +from qgis.PyQt.QtWidgets import QAbstractItemView, QTableView, QFileDialog, QCompleter, QWidget +from qgis.PyQt.QtCore import pyqtSignal, QObject, Qt from ..utils import tools_gw from ..ui.ui_manager import GwDocUi, GwDocManagerUi from ... import global_vars +from ..utils.snap_manager import GwSnapManager from ...libs import lib_vars, tools_qt, tools_db, tools_qgis, tools_os @@ -30,11 +34,15 @@ def __init__(self, single_tool=True): self.single_tool_mode = single_tool self.previous_dialog = None self.iface = global_vars.iface + self.snapper_manager = GwSnapManager(self.iface) + self.vertex_marker = self.snapper_manager.vertex_marker self.canvas = global_vars.canvas self.schema_name = lib_vars.schema_name self.files_path = [] self.project_type = tools_gw.get_project_type() - self.doc_tables = ["doc_x_node","doc_x_arc","doc_x_connec","doc_x_gully"] + self.doc_tables = ["doc_x_node", "doc_x_arc", "doc_x_connec", "doc_x_gully", "doc_x_workcat", "doc_x_psector", "doc_x_visit"] + self.point_xy = {"x": None, "y": None} + self.is_new = False @@ -46,6 +54,7 @@ def get_document(self, tablename=None, qtable=None, item_id=None, feature=None, self.dlg_add_doc = GwDocUi(self) tools_gw.load_settings(self.dlg_add_doc) self.doc_id = None + self.doc_name = None self.files_path = [] # Capture the current layer to return it at the end of the operation @@ -60,10 +69,7 @@ def get_document(self, tablename=None, qtable=None, item_id=None, feature=None, # Setting lists self.ids = [] self.list_ids = {'arc': [], 'node': [], 'connec': [], 'gully': [], 'element': []} - - # Setting layers self.layers = {'arc': [], 'node': [], 'connec': [], 'gully': [], 'element': []} - self.layers['arc'] = tools_gw.get_layers_from_feature_type('arc') self.layers['node'] = tools_gw.get_layers_from_feature_type('node') self.layers['connec'] = tools_gw.get_layers_from_feature_type('connec') @@ -92,25 +98,44 @@ def get_document(self, tablename=None, qtable=None, item_id=None, feature=None, layer.selectByIds([feature.id()]) # Set icons + tools_gw.add_icon(self.dlg_add_doc.btn_add_geom, "133") tools_gw.add_icon(self.dlg_add_doc.btn_insert, "111", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_insert_workcat, "111", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_insert_psector, "111", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_insert_visit, "111", sub_folder="24x24") tools_gw.add_icon(self.dlg_add_doc.btn_delete, "112", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_delete_workcat, "112", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_delete_psector, "112", sub_folder="24x24") + tools_gw.add_icon(self.dlg_add_doc.btn_delete_visit, "112", sub_folder="24x24") tools_gw.add_icon(self.dlg_add_doc.btn_snapping, "137") - self.dlg_add_doc.tabWidget.setTabEnabled(1, False) # Fill combo boxes self._fill_combo_doc_type(self.dlg_add_doc.doc_type) - # Set current/selected date and link - if row: - tools_qt.set_calendar(self.dlg_add_doc, 'date', row.value('date')) - tools_qt.set_widget_text(self.dlg_add_doc, 'path', row.value('path')) - self.files_path.append(row.value('path')) + # If document exists + if item_id: + self.is_new = False + # Enable tabs + for n in range(1, 5): + self.dlg_add_doc.tabWidget.setTabEnabled(n, True) + + self._fill_dialog_document(self.dlg_add_doc, "doc", None, doc_id=item_id) + self._activate_relations() + self._fill_table_doc_workcat() + self._fill_table_doc_psector() + self._fill_table_doc_visit() + # If document is new else: + self.is_new = True + # Disable tabs + for n in range(1, 5): + self.dlg_add_doc.tabWidget.setTabEnabled(n, False) + tools_qt.set_calendar(self.dlg_add_doc, 'date', None) # Adding auto-completion to a QLineEdit table_object = "doc" - tools_gw.set_completer_object(self.dlg_add_doc, table_object) + tools_gw.set_completer_object(self.dlg_add_doc, table_object, field_id="name") # Adding auto-completion to a QLineEdit for default feature if feature_type is None: @@ -118,27 +143,61 @@ def get_document(self, tablename=None, qtable=None, item_id=None, feature=None, viewname = f"v_edit_{feature_type}" tools_gw.set_completer_widget(viewname, self.dlg_add_doc.feature_id, str(feature_type) + "_id") + # Config Workcat + tools_gw.set_completer_widget("cat_work", self.dlg_add_doc.feature_id_workcat, "id") + + self.dlg_add_doc.btn_insert_workcat.clicked.connect(partial(self._insert_workcat, self.dlg_add_doc)) + self.dlg_add_doc.btn_delete_workcat.clicked.connect(partial(self._delete_workcat, self.dlg_add_doc)) + self.dlg_add_doc.feature_id_workcat.textChanged.connect( + partial(tools_gw.set_completer_object, self.dlg_add_doc, "workcat")) + + # Config Psector + tools_gw.set_completer_widget("plan_psector", self.dlg_add_doc.feature_id_psector, "name") + + self.dlg_add_doc.btn_insert_psector.clicked.connect(partial(self._insert_psector, self.dlg_add_doc)) + self.dlg_add_doc.btn_delete_psector.clicked.connect(partial(self._delete_psector, self.dlg_add_doc)) + self.dlg_add_doc.feature_id_psector.textChanged.connect( + partial(tools_gw.set_completer_object, self.dlg_add_doc, "psector")) + + # Config Visit + tools_gw.set_completer_widget("om_visit", self.dlg_add_doc.feature_id_visit, "id") + + self.dlg_add_doc.btn_insert_visit.clicked.connect(partial(self._insert_visit, self.dlg_add_doc)) + self.dlg_add_doc.btn_delete_visit.clicked.connect(partial(self._delete_visit, self.dlg_add_doc)) + self.dlg_add_doc.feature_id_visit.textChanged.connect( + partial(tools_gw.set_completer_object, self.dlg_add_doc, "visit")) + # Set signals self.excluded_layers = ["v_edit_arc", "v_edit_node", "v_edit_connec", "v_edit_element", "v_edit_gully", "v_edit_element"] layers_visibility = tools_gw.get_parent_layers_visibility() + # Dialog self.dlg_add_doc.rejected.connect(lambda: tools_gw.reset_rubberband(self.rubber_band)) self.dlg_add_doc.rejected.connect(partial(tools_gw.restore_parent_layers_visibility, layers_visibility)) + self.dlg_add_doc.rejected.connect( + lambda: setattr(self, 'layers', tools_gw.manage_close(self.dlg_add_doc, table_object, cur_active_layer, self.single_tool_mode, self.layers)) + ) + # Widgets + self.dlg_add_doc.doc_name.textChanged.connect(partial(self._check_doc_exists)) self.dlg_add_doc.doc_type.currentIndexChanged.connect(self._activate_relations) self.dlg_add_doc.btn_path_url.clicked.connect(partial(self._open_web_browser, self.dlg_add_doc, "path")) self.dlg_add_doc.btn_path_doc.clicked.connect( - lambda: setattr(self, 'files_path', self._get_file_dialog(self.dlg_add_doc, "path"))) + lambda: setattr(self, 'files_path', self._get_file_dialog(self.dlg_add_doc, "path")) + ) + self.dlg_add_doc.btn_add_geom.clicked.connect(self._get_point_xy) + # Dialog buttons self.dlg_add_doc.btn_accept.clicked.connect( - partial(self._manage_document_accept, table_object, tablename, qtable, item_id)) - self.dlg_add_doc.btn_cancel.clicked.connect(lambda: setattr(self, 'layers', tools_gw.manage_close( - self.dlg_add_doc, table_object, cur_active_layer, self.single_tool_mode, self.layers))) - self.dlg_add_doc.rejected.connect(lambda: setattr(self, 'layers', tools_gw.manage_close( - self.dlg_add_doc, table_object, cur_active_layer, self.single_tool_mode, self.layers))) + partial(self._manage_document_accept, table_object, tablename, qtable, item_id, True) + ) + self.dlg_add_doc.btn_cancel.clicked.connect( + lambda: setattr(self, 'layers', tools_gw.manage_close(self.dlg_add_doc, table_object, cur_active_layer, self.single_tool_mode, self.layers)) + ) + self.dlg_add_doc.btn_apply.clicked.connect( + partial(self._manage_document_accept, table_object, tablename, qtable, item_id, False) + ) + # Tab relations self.dlg_add_doc.tab_feature.currentChanged.connect( partial(tools_gw.get_signal_change_tab, self.dlg_add_doc, self.excluded_layers)) - - self.dlg_add_doc.doc_id.textChanged.connect( - partial(self._fill_dialog_document, self.dlg_add_doc, table_object, None)) self.dlg_add_doc.btn_insert.clicked.connect( partial(tools_gw.insert_feature, self, self.dlg_add_doc, table_object, False, False, None, None)) self.dlg_add_doc.btn_delete.clicked.connect( @@ -170,6 +229,194 @@ def get_document(self, tablename=None, qtable=None, item_id=None, feature=None, return self.dlg_add_doc + def _fill_table_doc_workcat(self): + expr_filter = f"name = '{self.doc_name}'" + table_name = "v_ui_doc_x_workcat" + + tools_qt.fill_table(self.dlg_add_doc.tbl_doc_x_workcat, table_name, expr_filter) + + + def _insert_workcat(self, dialog): + """Associate an existing workcat with the current document, ensuring no duplicates and clearing the input field""" + workcat_id = tools_qt.get_text(dialog, "feature_id_workcat") + + if workcat_id == 'null': + message = "You need to enter a workcat id" + tools_qgis.show_warning(message, dialog=dialog) + return + + sql = f"INSERT INTO doc_x_workcat (doc_id, workcat_id) VALUES ('{self.doc_id}', '{workcat_id}')" + result = tools_db.execute_sql(sql) + + if result: + dialog.feature_id_workcat.clear() + self._fill_table_doc_workcat() + + + def _delete_workcat(self, dialog): + """Delete the selected workcat from the document""" + qtable = dialog.tbl_doc_x_workcat + # Get selected rows + selected_list = qtable.selectionModel().selectedRows() + if len(selected_list) == 0: + message = "Any record selected" + tools_qgis.show_warning(message, dialog=dialog) + return + + col_idx = tools_qt.get_col_index_by_col_name(qtable, "workcat_id") + workcat_ids = [] + for row in selected_list: + workcat_id = qtable.model().index(row.row(), col_idx).data() + workcat_ids.append(workcat_id) + + inf_text = ", ".join(workcat_ids) + message = "Are you sure you want to delete these records?" + title = "Delete records" + answer = tools_qt.show_question(message, title, inf_text) + + if not answer: + return + + for workcat_id in workcat_ids: + sql = f"DELETE FROM doc_x_workcat WHERE doc_id = '{self.doc_id}' AND workcat_id = '{workcat_id}'" + tools_db.execute_sql(sql) + + self._fill_table_doc_workcat() + + + def _fill_table_doc_psector(self): + expr_filter = f"doc_name = '{self.doc_name}'" + table_name = "v_ui_doc_x_psector" + + tools_qt.fill_table(self.dlg_add_doc.tbl_doc_x_psector, table_name, expr_filter) + + + def _insert_psector(self, dialog): + """Associate an existing psector with the current document, ensuring no duplicates and clearing the input field""" + psector_name = tools_qt.get_text(dialog, "feature_id_psector") + + if psector_name == 'null' or not psector_name: + message = "You need to enter a psector name" + tools_qgis.show_warning(message, dialog=dialog) + return + + sql = f"SELECT psector_id FROM plan_psector WHERE name = '{psector_name}'" + row = tools_db.get_row(sql) + if not row: + message = "Psector name not found" + tools_qgis.show_warning(message, dialog=dialog) + return + psector_id = row[0] + + sql = f"INSERT INTO doc_x_psector (doc_id, psector_id) VALUES ('{self.doc_id}', '{psector_id}')" + result = tools_db.execute_sql(sql) + + if result: + dialog.feature_id_psector.clear() + self._fill_table_doc_psector() + + + def _delete_psector(self, dialog): + """Delete the selected psector from the document""" + qtable = dialog.tbl_doc_x_psector + selected_list = qtable.selectionModel().selectedRows() + if len(selected_list) == 0: + message = "No record selected" + tools_qgis.show_warning(message, dialog=dialog) + return + + col_idx = tools_qt.get_col_index_by_col_name(qtable, "psector_name") + psector_names = [] + psector_ids = [] + for row in selected_list: + psector_name = qtable.model().index(row.row(), col_idx).data() + psector_names.append(psector_name) + + for psector_name in psector_names: + sql = f"SELECT psector_id FROM plan_psector WHERE name = '{psector_name}'" + row = tools_db.get_row(sql) + if row: + psector_ids.append(row[0]) + + if not psector_ids: + message = "No valid psector IDs found" + tools_qgis.show_warning(message, dialog=dialog) + return + + inf_text = ", ".join(map(str, psector_names)) + message = "Are you sure you want to delete these records?" + title = "Delete records" + answer = tools_qt.show_question(message, title, inf_text) + + if not answer: + return + + for psector_id in psector_ids: + sql = f"DELETE FROM doc_x_psector WHERE doc_id = '{self.doc_id}' AND psector_id = '{psector_id}'" + tools_db.execute_sql(sql) + + self._fill_table_doc_psector() + + def _fill_table_doc_visit(self): + expr_filter = f"doc_name = '{self.doc_name}'" + table_name = "v_ui_doc_x_visit" + + tools_qt.fill_table(self.dlg_add_doc.tbl_doc_x_visit, table_name, expr_filter) + + def _insert_visit(self, dialog): + """Associate an existing visit with the current document, ensuring no duplicates and clearing the input field""" + visit_id = tools_qt.get_text(dialog, "feature_id_visit") + + if visit_id == 'null' or not visit_id: + message = "You need to enter a visit ID" + tools_qgis.show_warning(message, dialog=dialog) + return + + sql = f"INSERT INTO doc_x_visit (doc_id, visit_id) VALUES ('{self.doc_id}', '{visit_id}')" + result = tools_db.execute_sql(sql) + + if result: + dialog.feature_id_visit.clear() + self._fill_table_doc_visit() + + + def _delete_visit(self, dialog): + """Delete the selected visit from the document""" + qtable = dialog.tbl_doc_x_visit + selected_list = qtable.selectionModel().selectedRows() + if len(selected_list) == 0: + message = "No record selected" + tools_qgis.show_warning(message, dialog=dialog) + return + + col_idx = tools_qt.get_col_index_by_col_name(qtable, "visit_id") + visit_ids = [] + for row in selected_list: + visit_id = qtable.model().index(row.row(), col_idx).data() + visit_ids.append(visit_id) + + inf_text = ", ".join(map(str, visit_ids)) + message = "Are you sure you want to delete these records?" + title = "Delete records" + answer = tools_qt.show_question(message, title, inf_text) + + if not answer: + return + + for visit_id in visit_ids: + sql = f"DELETE FROM doc_x_visit WHERE doc_id = '{self.doc_id}' AND visit_id = '{visit_id}'" + tools_db.execute_sql(sql) + + self._fill_table_doc_visit() + + + def _get_existing_doc_names(self): + """ list of existing names """ + sql = "SELECT name FROM doc ORDER BY name;" + rows = tools_db.get_rows(sql) + return [row['name'] for row in rows if 'name' in row] + + def manage_documents(self): """ Button 66: Edit document """ @@ -182,29 +429,54 @@ def manage_documents(self): # Adding auto-completion to a QLineEdit table_object = "doc" - tools_gw.set_completer_object(self.dlg_man, table_object) + tools_gw.set_completer_object(self.dlg_man, table_object, field_id="name") - # Set a model with selected filter. Attach that model to selected table - message = tools_qt.fill_table(self.dlg_man.tbl_document, f"{self.schema_name}.{table_object}") - if message: - tools_qgis.show_warning(message) - tools_gw.set_tablemodel_config(self.dlg_man, self.dlg_man.tbl_document, table_object) + status = self._fill_table() + if not status: + return False, False - # Set dignals - self.dlg_man.doc_id.textChanged.connect( - partial(tools_qt.filter_by_id, self.dlg_man, self.dlg_man.tbl_document, self.dlg_man.doc_id, table_object, "id")) + # Set signals + self.dlg_man.doc_name.textChanged.connect(self._fill_table) self.dlg_man.tbl_document.doubleClicked.connect( partial(self._open_selected_object_document, self.dlg_man, self.dlg_man.tbl_document, table_object)) self.dlg_man.btn_cancel.clicked.connect(partial(tools_gw.close_dialog, self.dlg_man)) self.dlg_man.rejected.connect(partial(tools_gw.close_dialog, self.dlg_man)) - self.dlg_man.btn_delete.clicked.connect( - partial(tools_gw.delete_selected_rows, self.dlg_man.tbl_document, table_object)) + self.dlg_man.btn_delete.clicked.connect(self._handle_delete) self.dlg_man.btn_create.clicked.connect(partial(self.open_document_dialog)) # Open form tools_gw.open_dialog(self.dlg_man, dlg_name='doc_manager') + def _handle_delete(self): + tools_gw.delete_selected_rows(self.dlg_man.tbl_document, "doc") + self._refresh_manager_table() + + + def _fill_table(self, filter_text=None): + # Set a model with selected filter. Attach that model to selected table + view = "v_ui_doc" + if filter_text is None: + filter_text = "" + complet_list = tools_gw.get_list(view, filter_name=filter_text, id_field="name") + if complet_list is False: + return False + for field in complet_list['body']['data']['fields']: + if field.get('hidden'): continue + model = self.dlg_man.tbl_document.model() + if model is None: + model = QStandardItemModel() + self.dlg_man.tbl_document.setModel(model) + model.removeRows(0, model.rowCount()) + + if field['value']: + self.dlg_man.tbl_document = tools_gw.add_tableview_header(self.dlg_man.tbl_document, field) + self.dlg_man.tbl_document = tools_gw.fill_tableview_rows(self.dlg_man.tbl_document, field) + tools_gw.set_tablemodel_config(self.dlg_man, self.dlg_man.tbl_document, 'v_ui_doc', 0) + tools_qt.set_tableview_config(self.dlg_man.tbl_document, sectionResizeMode=0) + + return True + # region private functions def open_document_dialog(self): @@ -212,11 +484,13 @@ def open_document_dialog(self): def _refresh_manager_table(self): + """ Refresh the manager table """ try: - if getattr(self, 'dlg_man') and self.dlg_man: - self.dlg_man.tbl_document.model().select() - except: - pass + if getattr(self, 'dlg_man', None): + # Use the existing _fill_table method to refresh the table + self._fill_table() + except Exception as e: + print(f"Error refreshing manager table: {e}") def _fill_combo_doc_type(self, widget): @@ -233,7 +507,6 @@ def _fill_combo_doc_type(self, widget): self._activate_relations() - def _activate_relations(self): """ Force user to set doc_id and doc_type """ @@ -244,9 +517,14 @@ def _activate_relations(self): else: self.dlg_add_doc.tabWidget.setTabEnabled(1, True) + def _activate_tabs(self, activate): + + # Enable tabs + for n in range(2, 5): + self.dlg_add_doc.tabWidget.setTabEnabled(n, activate) - def _fill_table_doc(self, dialog, feature_type, feature_id): + def _fill_table_doc(self, dialog, feature_type, feature_id): widget = "tbl_doc_x_" + feature_type widget = dialog.findChild(QTableView, widget) widget.setSelectionBehavior(QAbstractItemView.SelectRows) @@ -259,126 +537,161 @@ def _fill_table_doc(self, dialog, feature_type, feature_id): tools_qgis.show_warning(message) - def _manage_document_accept(self, table_object, tablename=None, qtable=None, item_id=None): + def _manage_document_accept(self, table_object, tablename=None, qtable=None, item_id=None, close_dlg=True): """ Insert or update table 'document'. Add document to selected feature """ # Get values from dialog - doc_id = tools_qt.get_text(self.dlg_add_doc, "doc_id", False, False) + name = tools_qt.get_text(self.dlg_add_doc, "doc_name", False, False) doc_type = tools_qt.get_combo_value(self.dlg_add_doc, self.dlg_add_doc.doc_type) date = tools_qt.get_calendar_date(self.dlg_add_doc, "date", datetime_format="yyyy/MM/dd") path = tools_qt.get_text(self.dlg_add_doc, "path", return_string_null=False) observ = tools_qt.get_text(self.dlg_add_doc, "observ", False, False) + # Validations + if not name: + message = "The 'name' field is mandatory." + tools_qgis.show_warning(message, dialog=self.dlg_add_doc) + return + if doc_type in (None, '', -1): message = "You need to insert doc_type" tools_qgis.show_warning(message, dialog=self.dlg_add_doc) return + # Get SRID + srid = lib_vars.data_epsg + + # Prepare the_geom value + the_geom = None + if self.point_xy["x"] is not None and self.point_xy["y"] is not None: + the_geom = f"ST_SetSRID(ST_MakePoint({self.point_xy['x']},{self.point_xy['y']}), {srid})" + # Check if this document already exists - sql = (f"SELECT DISTINCT(id)" - f" FROM {table_object}" - f" WHERE id = '{doc_id}'") + if item_id is None: + item_id = self.doc_id + sql = f"SELECT DISTINCT(id) FROM {table_object} WHERE id = '{item_id}'" row = tools_db.get_row(sql, log_info=False) # If document not exists perform an INSERT - if row is None: + if row is None and self.is_new: if len(self.files_path) <= 1: - if doc_id in (None, ''): - sql, doc_id = self._insert_doc_sql(doc_type, observ, date, path) - else: - sql = (f"INSERT INTO doc (id, doc_type, path, observ, date)" - f" VALUES ('{doc_id}', '{doc_type}', '{path}', '{observ}', '{date}');") - self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable) - self.doc_added.emit() + sql, doc_id = self._insert_doc_sql(doc_type, observ, date, path, the_geom, name) else: - # Ask question before executing - msg = ("You have selected multiple documents. In this case, doc_id will be a sequencial number for " - "all selected documents and your doc_id won't be used.") + msg = ("You have selected multiple documents. In this case, name will be a sequential number for " + "all selected documents and your name won't be used.") answer = tools_qt.show_question(msg, tools_qt.tr("Add document")) if answer: for file in self.files_path: - sql, doc_id = self._insert_doc_sql(doc_type, observ, date, file) - self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable) - self.doc_added.emit() - # If document exists perform an UPDATE + sql, doc_id = self._insert_doc_sql(doc_type, observ, date, file, the_geom, name) else: - message = "Are you sure you want to update the data?" - answer = tools_qt.show_question(message) - if not answer: - return + doc_id = row['id'] if len(self.files_path) <= 1: - sql = self._update_doc_sql(doc_type, observ, date, doc_id, path) - self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable) + sql = self._update_doc_sql(doc_type, observ, date, doc_id, path, the_geom, name) else: - # If document have more than 1 file perform an INSERT - # Ask question before executing - msg = ("You have selected multiple documents. In this case, doc_id will be a sequencial number for " - "all selected documents and your doc_id won't be used.") + msg = ("You have selected multiple documents. In this case, name will be a sequential number for " + "all selected documents and your name won't be used.") answer = tools_qt.show_question(msg, tools_qt.tr("Add document")) if answer: for cont, file in enumerate(self.files_path): if cont == 0: - sql = self._update_doc_sql(doc_type, observ, date, doc_id, file) - self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable) + sql = self._update_doc_sql(doc_type, observ, date, doc_id, file, the_geom, name) else: - sql, doc_id = self._insert_doc_sql(doc_type, observ, date, file) - self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable) + sql, doc_id = self._insert_doc_sql(doc_type, observ, date, file, the_geom, name) + + self._update_doc_tables(sql, doc_id, table_object, tablename, item_id, qtable, name, close_dlg=close_dlg) + self.doc_added.emit() + + # Clear the_geom after use + self.point_xy = {"x": None, "y": None} # Refresh manager table + self._refresh_manager_table() tools_gw.execute_class_function(GwDocManagerUi, '_refresh_manager_table') - def _insert_doc_sql(self, doc_type, observ, date, path): - - sql = (f"INSERT INTO doc (doc_type, path, observ, date)" - f" VALUES ('{doc_type}', '{path}', '{observ}', '{date}') RETURNING id;") + def _insert_doc_sql(self, doc_type, observ, date, path, the_geom, name): + fields = "doc_type, path, observ, date, name" + values = f"'{doc_type}', '{path}', '{observ}', '{date}', '{name}'" + if the_geom: + fields += ", the_geom" + values += f", {the_geom}" + sql = (f"INSERT INTO doc ({fields}) " + f"VALUES ({values}) RETURNING id;") new_doc_id = tools_db.execute_returning(sql) sql = "" doc_id = str(new_doc_id[0]) return sql, doc_id - def _update_doc_sql(self, doc_type, observ, date, doc_id, path): + def _update_doc_sql(self, doc_type, observ, date, doc_id, path, the_geom, name): sql = (f"UPDATE doc " - f" SET doc_type = '{doc_type}', observ = '{observ}', path = '{path}', date = '{date}'" - f" WHERE id = '{doc_id}';") + f"SET doc_type = '{doc_type}', observ = '{observ}', path = '{path}', date = '{date}', name = '{name}'") + if the_geom: + sql += f", the_geom = {the_geom}" + sql += f" WHERE id = '{doc_id}';" return sql - def _update_doc_tables(self, sql, doc_id, table_object, tablename, item_id, qtable): + def _update_doc_tables(self, sql, doc_id, table_object, tablename, item_id, qtable, doc_name, close_dlg=True): + + arc_ids = self.list_ids['arc'] + node_ids = self.list_ids['node'] + connec_ids = self.list_ids['connec'] + workcat_ids = self._get_associated_workcat_ids() + psector_ids = self._get_associated_psector_ids() + visit_ids = self._get_associated_visit_ids() + gully_ids = self.list_ids['gully'] - # Manage records in tables @table_object_x_@feature_type + # Clear the current records for table in self.doc_tables: if table == 'doc_x_gully' and self.project_type != 'ud': continue - sql += (f"\nDELETE FROM {table}" - f" WHERE doc_id = '{doc_id}';") - - if self.list_ids['arc']: - for feature_id in self.list_ids['arc']: - sql += (f"\nINSERT INTO doc_x_arc (doc_id, arc_id)" - f" VALUES ('{doc_id}', '{feature_id}');") - if self.list_ids['node']: - for feature_id in self.list_ids['node']: - sql += (f"\nINSERT INTO doc_x_node (doc_id, node_id)" - f" VALUES ('{doc_id}', '{feature_id}');") - if self.list_ids['connec']: - for feature_id in self.list_ids['connec']: - sql += (f"\nINSERT INTO doc_x_connec (doc_id, connec_id)" - f" VALUES ('{doc_id}', '{feature_id}');") - if self.project_type == 'ud' and self.list_ids['gully']: - for feature_id in self.list_ids['gully']: - sql += (f"\nINSERT INTO doc_x_gully (doc_id, gully_id)" - f" VALUES ('{doc_id}', '{feature_id}');") + sql += f"\nDELETE FROM {table} WHERE doc_id = '{doc_id}';" + + # Insert the new records for arcs + for feature_id in arc_ids: + sql += f"\nINSERT INTO doc_x_arc (doc_id, arc_id) VALUES ('{doc_id}', '{feature_id}');" + + # Insert the new records for nodes + for feature_id in node_ids: + sql += f"\nINSERT INTO doc_x_node (doc_id, node_id) VALUES ('{doc_id}', '{feature_id}');" + # Insert the new records for connec + for feature_id in connec_ids: + sql += f"\nINSERT INTO doc_x_connec (doc_id, connec_id) VALUES ('{doc_id}', '{feature_id}');" + + # Insert the new records for workcat + for feature_id in workcat_ids: + sql += f"\nINSERT INTO doc_x_workcat (doc_id, workcat_id) VALUES ('{doc_id}', '{feature_id}');" + + # Insert the new records for psector + for feature_id in psector_ids: + sql += f"\nINSERT INTO doc_x_psector (doc_id, psector_id) VALUES ('{doc_id}', '{feature_id}');" + + # Insert the new records for visit + for feature_id in visit_ids: # New lines + sql += f"\nINSERT INTO doc_x_visit (doc_id, visit_id) VALUES ('{doc_id}', '{feature_id}');" + + # Insert the new records for gully + if self.project_type == 'ud': + for feature_id in gully_ids: + sql += f"\nINSERT INTO doc_x_gully (doc_id, gully_id) VALUES ('{doc_id}', '{feature_id}');" + + # Execute the SQL statements status = tools_db.execute_sql(sql) if status: self.doc_id = doc_id - tools_gw.manage_close(self.dlg_add_doc, table_object, None, self.single_tool_mode, self.layers) + self.doc_name = doc_name + self.is_new = False + self._activate_tabs(True) + if close_dlg: + tools_gw.manage_close(self.dlg_add_doc, table_object, None, self.single_tool_mode, self.layers) + else: + msg = "Values saved successfully." + tools_qgis.show_info(msg, dialog=self.dlg_add_doc) - if tablename is None: - return - else: + # Update the associated table + if tablename: sql = (f"INSERT INTO doc_x_{tablename} (doc_id, {tablename}_id) " f" VALUES('{doc_id}', '{item_id}')") tools_db.execute_sql(sql) @@ -388,6 +701,52 @@ def _update_doc_tables(self, sql, doc_id, table_object, tablename, item_id, qtab tools_qgis.show_warning(message) + def _get_associated_workcat_ids(self, doc_id=None): + """Get workcat_ids linked to documento""" + if doc_id is None: + doc_id = self.doc_id + sql = f"SELECT workcat_id FROM doc_x_workcat WHERE doc_id = '{doc_id}'" + rows = tools_db.get_rows(sql) + if not rows: + return [] + return [row['workcat_id'] for row in rows if 'workcat_id' in row] + + + def _get_associated_psector_ids(self, doc_id=None): + """Get psector_ids linked to documento""" + if doc_id is None: + doc_id = self.doc_id + sql = f"SELECT psector_id FROM doc_x_psector WHERE doc_id = '{doc_id}'" + rows = tools_db.get_rows(sql) + if not rows: + return [] + return [row['psector_id'] for row in rows if 'psector_id' in row] + + + def _get_associated_visit_ids(self, doc_id=None): + """Get visit_ids linked to the document""" + if doc_id is None: + doc_id = self.doc_id + sql = f"SELECT visit_id FROM doc_x_visit WHERE doc_id = '{doc_id}'" + rows = tools_db.get_rows(sql) + if not rows: + return [] + return [row['visit_id'] for row in rows if 'visit_id' in row] + + + def _check_doc_exists(self, name=""): + sql = f"SELECT name FROM doc WHERE name = '{name}'" + row = tools_db.get_row(sql, log_info=False) + if row: + self.dlg_add_doc.btn_accept.setEnabled(False) + tools_qt.set_stylesheet(self.dlg_add_doc.doc_name) + self.dlg_add_doc.doc_name.setToolTip("Document name already exists") + return + self.dlg_add_doc.btn_accept.setEnabled(True) + tools_qt.set_stylesheet(self.dlg_add_doc.doc_name, style="") + self.dlg_add_doc.doc_name.setToolTip("") + + def _open_selected_object_document(self, dialog, widget, table_object): selected_list = widget.selectionModel().selectedRows() @@ -400,16 +759,17 @@ def _open_selected_object_document(self, dialog, widget, table_object): # Get object_id from selected row field_object_id = "id" - widget_id = table_object + "_id" - selected_object_id = widget.model().record(row).value(field_object_id) + id_col_idx = tools_qt.get_col_index_by_col_name(widget, field_object_id) + selected_object_id = widget.model().item(row, id_col_idx).text() # Close this dialog and open selected object - keep_open_form = tools_gw.get_config_parser('dialogs_actions', 'doc_manager_keep_open', "user", "init", prefix=True) + keep_open_form = tools_gw.get_config_parser('dialogs_actions', 'doc_manager_keep_open', "user", "init", + prefix=True) if tools_os.set_boolean(keep_open_form, False) is not True: dialog.close() - self.get_document(row=widget.model().record(row)) - tools_qt.set_widget_text(self.dlg_add_doc, widget_id, selected_object_id) + # Assuming 'row' is the QStandardItemModel row data + self.get_document(row=widget.model().item(row, 0), item_id=selected_object_id) def _open_web_browser(self, dialog, widget=None): @@ -425,6 +785,12 @@ def _open_web_browser(self, dialog, widget=None): webbrowser.open(url) + def _get_point_xy(self): + """ Capture point XY from the canvas """ + self.snapper_manager.add_point(self.vertex_marker) + self.point_xy = self.snapper_manager.point_xy + + def _get_file_dialog(self, dialog, widget): """ Get file dialog """ @@ -448,11 +814,18 @@ def _get_file_dialog(self, dialog, widget): for file in files_path: file_text += f"{file}\n\n" if files_path: - tools_qt.set_widget_text(dialog, widget, str(file_text)) + tools_qt.set_widget_text(dialog, widget, str("\n\n".join(files_path))) + self.files_path = files_path + gps_coordinates = self.get_geolocation_gdal(files_path[0]) + if gps_coordinates: + self.point_xy = {"x": gps_coordinates[0], "y": gps_coordinates[1]} + else: + self.point_xy = {"x": None, "y": None} + return files_path - def _fill_dialog_document(self, dialog, table_object, single_tool_mode=None): + def _fill_dialog_document(self, dialog, table_object, single_tool_mode=None, doc_id=None): # Reset list of selected records self.ids, self.list_ids = tools_gw.reset_feature_list() @@ -461,39 +834,75 @@ def _fill_dialog_document(self, dialog, table_object, single_tool_mode=None): if global_vars.project_type == 'ud': list_feature_type.append('gully') - object_id = tools_qt.get_text(dialog, table_object + "_id") - + object_name = tools_qt.get_text(dialog, table_object + "_name") + filter_str = f"name = '{object_name}'" + if object_name in (None, "", "null"): + filter_str = f"id = '{doc_id}'" # Check if we already have data with selected object_id sql = (f"SELECT * " f" FROM {table_object}" - f" WHERE id = '{object_id}'") + f" WHERE {filter_str}") row = tools_db.get_row(sql, log_info=False) - # If object_id not found: Clear data - if not row: - # Reset widgets - widgets = ["doc_type", "observ", "path"] - if widgets: - for widget_name in widgets: - tools_qt.set_widget_text(dialog, widget_name, "") - - if single_tool_mode is not None: - self.layers = tools_gw.remove_selection(single_tool_mode, self.layers) - else: - self.layers = tools_gw.remove_selection(True, self.layers) - - for feature_type in list_feature_type: - tools_qt.reset_model(dialog, table_object, feature_type) - - return - # Fill input widgets with data of the @row + tools_qt.set_widget_text(dialog, "doc_name", row["name"]) tools_qt.set_widget_text(dialog, "doc_type", row["doc_type"]) + tools_qt.set_calendar(dialog, "date", row["date"]) tools_qt.set_widget_text(dialog, "observ", row["observ"]) tools_qt.set_widget_text(dialog, "path", row["path"]) + self.doc_id = doc_id + self.doc_name = row["name"] + # Check related @feature_type for feature_type in list_feature_type: - tools_gw.get_rows_by_feature_type(self, dialog, table_object, feature_type) + tools_gw.get_rows_by_feature_type(self, dialog, table_object, feature_type, feature_id=doc_id, feature_idname="doc_id") + + + def convert_to_degrees(self, value): + """ Convert GPS coordinates stored in EXIF to degrees """ + d = float(value[0]) + m = float(value[1]) + s = float(value[2]) + return d + (m / 60.0) + (s / 3600.0) + + + def get_geolocation_gdal(self, file_path): + """ Extract geolocation metadata from an image file using GDAL """ + dataset = gdal.Open(file_path) + if not dataset: + return None + + metadata = dataset.GetMetadata() + if not metadata: + return None + + lat = metadata.get("EXIF_GPSLatitude") + lat_ref = metadata.get("EXIF_GPSLatitudeRef") + lon = metadata.get("EXIF_GPSLongitude") + lon_ref = metadata.get("EXIF_GPSLongitudeRef") + epsg = lib_vars.data_epsg + + if lat and lon and lat_ref and lon_ref: + lat_values = lat.strip("()").split() + lon_values = lon.strip("()").split() + lat_values = [v.strip("(),") for v in lat_values] + lon_values = [v.strip("(),") for v in lon_values] + + lat = self.convert_to_degrees(lat_values) + if lat_ref != "N": + lat = -lat + lon = self.convert_to_degrees(lon_values) + if lon_ref != "E": + lon = -lon + + # Perform coordinate transformation + crs_in = CRS.from_epsg(4326) + crs_out = CRS.from_epsg(epsg) + transformer = Transformer.from_crs(crs_in, crs_out, always_xy=True) + x, y = transformer.transform(lon, lat) + + return x, y + # endregion \ No newline at end of file diff --git a/core/shared/info.py b/core/shared/info.py index 0b41c51fd..407c5d662 100644 --- a/core/shared/info.py +++ b/core/shared/info.py @@ -31,7 +31,7 @@ from .element import GwElement from .visit_gallery import GwVisitGallery from .visit import GwVisit - +from .workcat import GwWorkcat from ..utils import tools_gw, tools_backend_calls from ..threads.toggle_valve_state import GwToggleValveTask @@ -374,7 +374,7 @@ def _manage_new_feature(self, complet_result, dialog): for field in result['fields']: if 'hidden' in field and field['hidden']: continue - if 'layoutname' in field and field['layoutname'] == 'lyt_none': + if 'layoutname' in field and field['layoutname'] in ('lyt_none', 'lyt_buttons'): continue if field.get('tabname') not in ('tab_data', 'tab_none'): continue @@ -434,8 +434,7 @@ def _open_generic_form(self, complet_result): pass finally: action_edit.setEnabled(is_enabled) - - action_edit.triggered.connect(partial(self._manage_edition, self.dlg_generic, action_edit, fid, new_feature, True)) + action_edit.triggered.connect(partial(self._manage_edition, self.dlg_generic, action_edit, fid, new_feature, generic=True)) action_edit.setChecked(layer.isEditable() and can_edit) # Signals @@ -514,11 +513,27 @@ def _open_custom_form(self, feature_id, complet_result, tab_type=None, sub_tag=N for tab in self.visible_tabs: tabs_to_show.append(self.visible_tabs[tab]['tabName']) - for x in range(self.tab_main.count() - 1, 0, -1): - if self.tab_main.widget(x).objectName() not in tabs_to_show: - tools_qt.remove_tab(self.tab_main, self.tab_main.widget(x).objectName()) - elif new_feature and self.tab_main.widget(x).objectName() != 'tab_data': - tools_qt.enable_tab_by_tab_name(self.tab_main, self.tab_main.widget(x).objectName(), False) + # Reorder tabs + tab_order = {} + for tab in self.visible_tabs.values(): + tab_order[tab['tabName']] = tab['orderby'] + + for tab_name, tab_index in sorted(tab_order.items(), key=lambda item: item[1]): + old_position = tools_qt.get_tab_index_by_tab_name(self.tab_main, tab_name) + new_position = tab_index + self.tab_main.tabBar().moveTab(old_position, new_position) + + for x in range(self.tab_main.count() - 1, -1, -1): + tab_name = self.tab_main.widget(x).objectName() + try: + self.tab_main.setTabText(x, self.visible_tabs[tab_name]['tabLabel']) + self.tab_main.setTabToolTip(x, self.visible_tabs[tab_name]['tooltip']) + except Exception as e: + pass + if tab_name not in tabs_to_show: + tools_qt.remove_tab(self.tab_main, tab_name) + elif new_feature and tab_name != 'tab_data': + tools_qt.enable_tab_by_tab_name(self.tab_main, tab_name, False) # Actions self._get_actions() @@ -811,11 +826,10 @@ def _manage_actions_signals(self, complet_result, list_points, new_feature, tab_ child_type = complet_result['body']['feature']['childType'] # Actions signals - self.action_edit.triggered.connect(partial(self._manage_edition, dlg_cf, self.action_edit, fid, new_feature, False)) + self.action_edit.triggered.connect(partial(self._manage_edition, dlg_cf, self.action_edit, fid, new_feature, generic=False)) + self.dlg_cf.btn_apply.clicked.connect(partial(self._manage_edition, dlg_cf, self.action_edit, fid, new_feature, False, from_apply=True)) self.action_catalog.triggered.connect(partial(self._open_catalog, tab_type, self.feature_type, child_type)) - self.action_workcat.triggered.connect( - partial(self._get_catalog, 'new_workcat', self.tablename, child_type, self.feature_id, list_points, - id_name)) + self.action_workcat.triggered.connect(partial(GwWorkcat(self.iface, self.canvas).create_workcat)) self.action_mapzone.triggered.connect( partial(self._get_catalog, 'new_mapzone', self.tablename, child_type, self.feature_id, list_points, id_name)) @@ -1583,13 +1597,12 @@ def _get_last_value(self, dialog, generic=False): pass - def _manage_edition(self, dialog, action_edit, fid, new_feature=None, generic=False): + def _manage_edition(self, dialog, action_edit, fid, new_feature=None, generic=False, from_apply=False): # With the editing QAction we need to collect the last modified value (self.get_last_value()), # since the "editingFinished" signals of the widgets are not detected. # Therefore whenever the cursor enters a widget, it will ask if we want to save changes - - if not action_edit.isChecked(): + if not action_edit.isChecked() or from_apply: self._get_last_value(dialog, generic) if str(self.my_json) == '{}' and str(self.my_json_epa) == '{}': tools_qt.set_action_checked(action_edit, False) @@ -1613,6 +1626,11 @@ def _manage_edition(self, dialog, action_edit, fid, new_feature=None, generic=Fa if save and accepted: self._reload_epa_tab(dialog) self._reset_my_json() + if from_apply: + action_edit.setChecked(True) + tools_gw.enable_all(dialog, self.complet_result['body']['data']) + if self.epa_complet_result: + tools_gw.enable_all(dialog, self.epa_complet_result['body']['data']) else: tools_qt.set_action_checked(action_edit, True) tools_gw.enable_all(dialog, self.complet_result['body']['data']) @@ -1806,6 +1824,10 @@ def _accept(self, dialog, complet_result, _json, p_widget=None, clear_json=False new_feature.setAttribute(k, v) _json.pop(k, None) + epa_type = tools_qt.get_text(dialog, 'tab_data_epa_type') + if epa_type != 'null': + _json['epa_type'] = epa_type + if not self.layer_new_feature.isEditable(): self.layer_new_feature.startEditing() self.layer_new_feature.updateFeature(new_feature) @@ -1868,9 +1890,7 @@ def _accept(self, dialog, complet_result, _json, p_widget=None, clear_json=False return False if clear_json: - _json = {} - - self._reset_my_json(False) + _json.clear() if "Accepted" in json_result['status']: msg_text = json_result['message']['text'] @@ -2118,17 +2138,23 @@ def _accept_auto_update(self, dialog, complet_result, _json, p_widget=None, clea # Manage change epa_type message if _json.get('epa_type'): - - widget_epatype = dialog.findChild(QComboBox, 'tab_data_epa_type') - message = "You are going to change the epa_type. With this operation you will lose information about " \ - "current epa_type values of this object. Would you like to continue?" - title = "Change epa_type" - answer = tools_qt.show_question(message, title) - if not answer: - widget_epatype.blockSignals(True) - tools_qt.set_combo_value(widget_epatype, self.epa_type, 1) - widget_epatype.blockSignals(False) - return + if new_feature is None: + can_edit = tools_os.set_boolean(tools_db.check_role_user('role_epa')) + if not can_edit: + message = "You are not enabled to modify this epa_type widget" + title = "Change epa_type" + tools_qt.show_info_box(message, title) + return + widget_epatype = dialog.findChild(QComboBox, 'tab_data_epa_type') + message = "You are going to change the epa_type. With this operation you will lose information about " \ + "current epa_type values of this object. Would you like to continue?" + title = "Change epa_type" + answer = tools_qt.show_question(message, title) + if not answer: + widget_epatype.blockSignals(True) + tools_qt.set_combo_value(widget_epatype, self.epa_type, 1) + widget_epatype.blockSignals(False) + return self.epa_type = _json.get('epa_type') # Call accept fct @@ -2267,18 +2293,7 @@ def _set_auto_update_combobox(self, field, dialog, widget, new_feature): if widget.property('isfilter'): return widget if widget.property('widgetcontrols') is not None and 'saveValue' in widget.property('widgetcontrols'): if widget.property('widgetcontrols')['saveValue'] is False: return widget - - if self._check_tab_data(field): # Tab data - if field['isautoupdate'] and self.new_feature_id is None: - _json = {} - widget.currentIndexChanged.connect(partial(self._clean_my_json, widget)) - widget.currentIndexChanged.connect(partial(tools_gw.get_values, dialog, widget, _json)) - widget.currentIndexChanged.connect(partial(self._accept_auto_update, dialog, self.complet_result, _json, widget, True, False, new_feature=new_feature)) - else: - widget.currentIndexChanged.connect(partial(tools_gw.get_values, dialog, widget, self.my_json)) - else: # Other tabs - widget.currentIndexChanged.connect(partial(tools_gw.get_values, dialog, widget, self.my_json_epa)) - # TODO: Make autoupdate widgets work + widget.currentIndexChanged.connect(partial(self._handle_combobox_change, widget, dialog, field)) return widget @@ -2349,6 +2364,21 @@ def _set_auto_update_checkbox(self, field, dialog, widget, new_feature): return widget + def _handle_combobox_change(self, widget, dialog, field): + _json = {} + if self._check_tab_data(field): # Tab data + if field['isautoupdate'] and self.new_feature_id is None: + self._clean_my_json(widget) + tools_gw.get_values(dialog, widget, _json) + self._accept_auto_update(dialog, self.complet_result, _json, widget, True, False, + new_feature=self.new_feature_id) + else: + tools_gw.get_values(dialog, widget, self.my_json) + else: # Other tabs + tools_gw.get_values(dialog, widget, self.my_json_epa) + # TODO: Make autoupdate widgets work for other tabs as well + + def run_settopology(self, widget, **kwargs): """ Sets node_1/2 from lineedit & converts widget into button if function run successfully """ @@ -2788,7 +2818,7 @@ def _fill_tbl(self, complet_result, dialog, widgetname, linkedobject, filter_fie widget = tools_gw.add_tableview_header(widget, field) widget = tools_gw.fill_tableview_rows(widget, field) tools_qt.set_tableview_config(widget, edit_triggers=QTableView.DoubleClicked, sectionResizeMode=0) - widget = tools_gw.set_tablemodel_config(dialog, widget, linkedobject, 1, True) + widget = tools_gw.set_tablemodel_config(dialog, widget, linkedobject, 1) if 'tab_epa' in widgetname: widget.doubleClicked.connect(partial(epa_tbl_doubleClicked, widget, self.dlg_cf)) model = widget.model() @@ -3062,8 +3092,11 @@ def _get_id(self, dialog, action, option, emit_point, child_type, point, event): """ Get selected attribute from snapped feature """ # @options{'key':['att to get from snapped feature', 'widget name destination']} - options = {'arc': ['arc_id', 'tab_data_arc_id'], 'node': ['node_id', 'tab_data_parent_id'], - 'set_to_arc': ['arc_id', '_set_to_arc']} + options = { + 'arc': ['arc_id', 'tab_data_arc_id'], + 'node': ['node_id', 'tab_data_parent_id'], + 'set_to_arc': ['arc_id', '_set_to_arc'] + } if event == Qt.RightButton: self._cancel_snapping_tool(dialog, action) @@ -3134,6 +3167,9 @@ def _set_to_arc(self, feat_id, child_type): level = int(json_result['message']['level']) tools_qgis.show_message(json_result['message']['text'], level) + # Refresh to_arc from tab_data + tools_qt.set_widget_text(self.dlg_cf, "tab_data_to_arc", feat_id) + # Refresh tab epa epa_type = tools_qt.get_text(self.dlg_cf, 'tab_data_epa_type') if epa_type and epa_type.lower() in ('valve', 'shortpipe', 'pump'): @@ -3375,7 +3411,7 @@ def open_epa_dlg(**kwargs): complet_list = get_list(view, id_name, feature_id) fill_tbl(complet_list, tbl, info, view, info.dlg) - tools_gw.set_tablemodel_config(info.dlg, tbl, view, schema_name=info.schema_name, isQStandardItemModel=True) + tools_gw.set_tablemodel_config(info.dlg, tbl, view, schema_name=info.schema_name) info.dlg.btn_accept.clicked.connect(partial(save_tbl_changes, view, info, info.dlg, pk)) # Add & Delete buttons @@ -3547,7 +3583,7 @@ def refresh_epa_tbl(tblview, dlg, **kwargs): view = tableview['view'] complet_list = get_list(view, id_name, feature_id) fill_tbl(complet_list, tbl, info, view, dlg) - tools_gw.set_tablemodel_config(dlg, tbl, view, schema_name=info.schema_name, isQStandardItemModel=True) + tools_gw.set_tablemodel_config(dlg, tbl, view, schema_name=info.schema_name) def reload_tbl_dscenario(info, tablename, tableview, id_name, feature_id): diff --git a/core/shared/psector.py b/core/shared/psector.py index 9ca95838d..71c3ca771 100644 --- a/core/shared/psector.py +++ b/core/shared/psector.py @@ -16,7 +16,7 @@ from sip import isdeleted from qgis.PyQt.QtCore import Qt -from qgis.PyQt.QtGui import QDoubleValidator, QIntValidator, QKeySequence, QColor +from qgis.PyQt.QtGui import QDoubleValidator, QIntValidator, QKeySequence, QColor, QCursor from qgis.PyQt.QtSql import QSqlQueryModel, QSqlTableModel, QSqlError from qgis.PyQt.QtWidgets import QAbstractItemView, QAction, QCheckBox, QComboBox, QDateEdit, QLabel, \ QLineEdit, QTableView, QWidget, QDoubleSpinBox, QTextEdit, QPushButton, QGridLayout, QMenu @@ -26,7 +26,7 @@ from .document import GwDocument, global_vars from ..toolbars.utilities.toolbox_btn import GwToolBoxButton from ..shared.psector_duplicate import GwPsectorDuplicate -from ..ui.ui_manager import GwPsectorUi, GwPsectorRapportUi, GwPsectorManagerUi, GwPriceManagerUi, GwReplaceArc, GwPsectorRepairUi +from ..ui.ui_manager import GwPsectorUi, GwPsectorRapportUi, GwPsectorManagerUi, GwReplaceArc, GwPsectorRepairUi from ..utils import tools_gw from ...libs import lib_vars, tools_db, tools_qgis, tools_qt, tools_log, tools_os from ..utils.snap_manager import GwSnapManager @@ -375,9 +375,9 @@ def get_psector(self, psector_id=None, list_coord=None): if not canvas_rec.intersects(psector_rec) or (psector_rec.width() < (canvas_width * 10) / 100 or psector_rec.height() < (canvas_height * 10) / 100): max_x, max_y, min_x, min_y = tools_qgis.get_max_rectangle_from_coords(list_coord) tools_qgis.zoom_to_rectangle(max_x, max_y, min_x, min_y, margin=50) - - filter_ = "psector_id = '" + str(psector_id) + "'" - message = tools_qt.fill_table(self.tbl_document, f"v_ui_doc_x_psector", filter_) + self.psector_name = self.dlg_plan_psector.findChild(QLineEdit, "name").text() + filter_ = f"psector_name = '{self.psector_name}'" + message = tools_qt.fill_table(self.tbl_document, "v_ui_doc_x_psector", filter_) if message: tools_qgis.show_warning(message, dialog=self.dlg_plan_psector) self.tbl_document.doubleClicked.connect(partial(tools_qt.document_open, self.tbl_document, 'path')) @@ -459,13 +459,13 @@ def get_psector(self, psector_id=None, list_coord=None): self.dlg_plan_psector.other.editingFinished.connect(partial(self.calculate_percents, 'plan_psector', 'other')) self.dlg_plan_psector.btn_doc_insert.clicked.connect(self.document_insert) - self.dlg_plan_psector.btn_doc_delete.clicked.connect(partial(tools_qt.delete_rows_tableview, self.tbl_document)) + self.dlg_plan_psector.btn_doc_delete.clicked.connect(partial(tools_gw.delete_selected_rows, self.tbl_document, 'doc_x_psector')) self.dlg_plan_psector.btn_doc_new.clicked.connect(partial(self.manage_document, self.tbl_document)) self.dlg_plan_psector.btn_open_doc.clicked.connect(partial(tools_qt.document_open, self.tbl_document, 'path')) self.cmb_status.currentIndexChanged.connect(partial(self.show_status_warning)) # Create list for completer QLineEdit - sql = "SELECT DISTINCT(id) FROM v_ui_document ORDER BY id" + sql = "SELECT DISTINCT(name) FROM v_ui_doc ORDER BY name" list_items = tools_db.create_list_for_completer(sql) tools_qt.set_completer_lineedit(self.dlg_plan_psector.doc_id, list_items) @@ -870,7 +870,7 @@ def enable_buttons(self, enabled): def enable_relation_tab(self, tablename): psector_name = f"{tools_qt.get_text(self.dlg_plan_psector, self.dlg_plan_psector.name)}" - sql = f"SELECT name FROM {tablename} WHERE LOWER(name) = '{psector_name}'" + sql = f"SELECT name FROM {tablename} WHERE name = '{psector_name}'" rows = tools_db.get_rows(sql) if not rows: if self.dlg_plan_psector.name.text() != '': @@ -894,7 +894,8 @@ def check_tab_position(self): elif self.dlg_plan_psector.tabWidget.currentIndex() == 4: self.populate_budget(self.dlg_plan_psector, psector_id) elif self.dlg_plan_psector.tabWidget.currentIndex() == 5: - expr = f"psector_id = '{psector_id}'" + self.psector_name = self.dlg_plan_psector.findChild(QLineEdit, "name").text() + expr = f"psector_name = '{self.psector_name}'" message = tools_qt.fill_table(self.tbl_document, f"{self.schema_name}.v_ui_doc_x_psector", expr) tools_gw.set_tablemodel_config(self.dlg_plan_psector, self.tbl_document, "v_ui_doc_x_psector") if message: @@ -1584,10 +1585,10 @@ def manage_update_state(self, model, row, record): def document_insert(self): """ Insert a document related to the current visit """ - doc_id = self.doc_id.text() + doc_name = self.doc_id.text() psector_id = self.psector_id.text() - if not doc_id: - message = "You need to insert doc_id" + if not doc_name: + message = "You need to insert a document name" tools_qgis.show_warning(message, dialog=self.dlg_plan_psector) return if not psector_id: @@ -1595,6 +1596,16 @@ def document_insert(self): tools_qgis.show_warning(message, dialog=self.dlg_plan_psector) return + # Get doc_id using doc_name + sql = f"SELECT id FROM doc WHERE name = '{doc_name}'" + row = tools_db.get_row(sql) + if not row: + message = "Document name not found" + tools_qgis.show_warning(message, dialog=self.dlg_plan_psector) + return + + doc_id = row['id'] + # Check if document already exist sql = (f"SELECT doc_id" f" FROM doc_x_psector" @@ -1613,6 +1624,7 @@ def document_insert(self): message = "Document inserted successfully" tools_qgis.show_info(message, dialog=self.dlg_plan_psector) + self.doc_id.clear() self.dlg_plan_psector.tbl_document.model().select() @@ -1925,39 +1937,19 @@ def multi_rows_delete(self, dialog, widget, table_name, column_id, label, action tools_db.execute_sql(sql) widget.model().select() + def _show_context_menu(self, pos): + """ Show custom context menu """ + menu = QMenu(self.tbl_om_result_cat) - def manage_prices(self): - """ Button 50: Plan estimate result manager """ + action_set_current = QAction("Current Result", self.tbl_om_result_cat) + action_set_current.triggered.connect(partial(self.update_price_vdefault)) + menu.addAction(action_set_current) - # Create the dialog and signals - self.dlg_merm = GwPriceManagerUi(self) - tools_gw.load_settings(self.dlg_merm) + action_delete = QAction("Delete", self.tbl_om_result_cat) + action_delete.triggered.connect(partial(self.delete_merm, self.dlg_merm)) + menu.addAction(action_delete) - # Set current value - sql = (f"SELECT name FROM plan_result_cat WHERE result_id IN (SELECT result_id FROM selector_plan_result " - f"WHERE cur_user = current_user)") - row = tools_db.get_row(sql) - if row: - tools_qt.set_widget_text(self.dlg_merm, 'lbl_vdefault_price', str(row[0])) - - # Tables - tablename = 'plan_result_cat' - self.tbl_om_result_cat = self.dlg_merm.findChild(QTableView, "tbl_om_result_cat") - tools_qt.set_tableview_config(self.tbl_om_result_cat) - - # Set signals - self.dlg_merm.btn_cancel.clicked.connect(partial(tools_gw.close_dialog, self.dlg_merm)) - self.dlg_merm.rejected.connect(partial(tools_gw.close_dialog, self.dlg_merm)) - self.dlg_merm.btn_delete.clicked.connect(partial(self.delete_merm, self.dlg_merm)) - self.dlg_merm.btn_update_result.clicked.connect(partial(self.update_price_vdefault)) - self.dlg_merm.txt_name.textChanged.connect(partial(self.filter_merm, self.dlg_merm, tablename)) - - self.fill_table(self.dlg_merm, self.tbl_om_result_cat, tablename) - tools_gw.set_tablemodel_config(self.tbl_om_result_cat, self.dlg_merm.tbl_om_result_cat, tablename) - - # Open form - self.dlg_merm.setWindowFlags(Qt.WindowStaysOnTopHint) - tools_gw.open_dialog(self.dlg_merm, dlg_name="price_manager") + menu.exec(QCursor.pos()) def update_price_vdefault(self): @@ -2184,15 +2176,11 @@ def _refresh_tables_relations(self): tools_gw.load_tableview_psector(self.dlg_plan_psector, 'connec') if self.project_type.upper() == 'UD': tools_gw.load_tableview_psector(self.dlg_plan_psector, 'gully') - tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_arc", self.tablename_psector_x_arc, - isQStandardItemModel=True) - tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_node", self.tablename_psector_x_node, - isQStandardItemModel=True) - tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_connec", self.tablename_psector_x_connec, - isQStandardItemModel=True) + tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_arc", self.tablename_psector_x_arc) + tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_node", self.tablename_psector_x_node) + tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_connec", self.tablename_psector_x_connec) if self.project_type.upper() == 'UD': - tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_gully", self.tablename_psector_x_gully, - isQStandardItemModel=True) + tools_gw.set_tablemodel_config(self.dlg_plan_psector, "tbl_psector_x_gully", self.tablename_psector_x_gully) def _check_layers_visible(self, layer_name, the_geom, field_id): @@ -2373,7 +2361,7 @@ def _replace_arc(self): def _open_arc_replace_form(self, point): - self.dlg_replace_arc = GwReplaceArc() + self.dlg_replace_arc = GwReplaceArc(self) tools_gw.load_settings(self.dlg_replace_arc) event_point = self.snapper_manager.get_event_point(point=point) diff --git a/core/shared/search.py b/core/shared/search.py index cd78b84da..ca1e6d1da 100644 --- a/core/shared/search.py +++ b/core/shared/search.py @@ -5,28 +5,24 @@ or (at your option) any later version. """ # -*- coding: utf-8 -*- -import csv import os import re -import sys from functools import partial from qgis.PyQt.QtCore import QStringListModel, Qt, QTimer -from qgis.PyQt.QtGui import QColor -from qgis.PyQt.QtSql import QSqlTableModel from qgis.PyQt.QtWidgets import QAbstractItemView, QComboBox, QCompleter, QFileDialog, QGridLayout, QHeaderView, \ QLabel, QLineEdit, QSizePolicy, QSpacerItem, QTableView, QTabWidget, QWidget, QDockWidget, QCheckBox -from qgis.core import QgsPointXY, QgsGeometry +from qgis.core import QgsPointXY from libs import tools_os -from .document import GwDocument from .info import GwInfo from .psector import GwPsector from .visit import GwVisit -from ..ui.ui_manager import GwInfoGenericUi, GwSearchWorkcatUi +from .workcat import GwWorkcat +from ..ui.ui_manager import GwInfoGenericUi from ..utils import tools_gw from ... import global_vars -from ...libs import lib_vars, tools_db, tools_qgis, tools_qt +from ...libs import lib_vars, tools_qgis, tools_qt class GwSearch: @@ -345,16 +341,8 @@ def _check_tab(self, completer): # Tab 'workcat' elif tab_selected == 'workcat': - list_coord = re.search('\(\((.*)\)\)', str(item['sys_geometry'])) - if not list_coord: - msg = "Empty coordinate list" - tools_qgis.show_warning(msg) - return - points = tools_qgis.get_geometry_vertex(list_coord) - tools_qgis.draw_polygon(points, self.rubber_band) - max_x, max_y, min_x, min_y = tools_qgis.get_max_rectangle_from_coords(list_coord) - tools_qgis.zoom_to_rectangle(max_x, max_y, min_x, min_y) - self._workcat_open_table_items(item) + workcat_instance = GwWorkcat(global_vars.iface, global_vars.canvas) + workcat_instance.workcat_open_table_items(item) return # Tab 'psector' @@ -495,7 +483,7 @@ def _add_combobox(self, field): widget.setProperty('columnname', field['columnname']) list_items = self._get_list_items(widget, field) tools_qt.fill_combo_values(widget, list_items) - tools_qt.set_combo_value(widget, field.get('selectedId'), 0) + tools_qt.set_combo_value(widget, field.get('selectedId'), 0, add_new=False) # noinspection PyUnresolvedReferences widget.currentIndexChanged.connect(partial(self._clear_lineedits)) @@ -582,438 +570,4 @@ def _select_row_by_feature_id(self, tab_main, feature_id, column_index=0): row = matching_items[0].row() tbl_hydro.selectRow(row) - def _workcat_open_table_items(self, item): - """ Create the view and open the dialog with his content """ - - workcat_id = item['sys_id'] - field_id = item['filter_text'] - display_name = item['display_name'] - if workcat_id is None: - return False - - self._update_selector_workcat(workcat_id) - current_selectors = self._get_current_selectors() - self._force_expl(workcat_id) - - self.items_dialog = GwSearchWorkcatUi(self) - - tools_gw.add_icon(self.items_dialog.btn_doc_insert, "111", sub_folder="24x24") - tools_gw.add_icon(self.items_dialog.btn_doc_delete, "112", sub_folder="24x24") - tools_gw.add_icon(self.items_dialog.btn_doc_new, "34", sub_folder="24x24") - tools_gw.add_icon(self.items_dialog.btn_open_doc, "170") - - tools_gw.load_settings(self.items_dialog) - self.items_dialog.btn_state1.setEnabled(False) - self.items_dialog.btn_state0.setEnabled(False) - - search_csv_path = tools_gw.get_config_parser('btn_search', 'search_csv_path', "user", "session") - tools_qt.set_widget_text(self.items_dialog, self.items_dialog.txt_path, search_csv_path) - - self.items_dialog.tbl_psm.setSelectionBehavior(QAbstractItemView.SelectRows) - self.items_dialog.tbl_psm.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - self.items_dialog.tbl_psm_end.setSelectionBehavior(QAbstractItemView.SelectRows) - self.items_dialog.tbl_psm_end.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - self.items_dialog.tbl_document.setSelectionBehavior(QAbstractItemView.SelectRows) - self.items_dialog.tbl_document.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) - - self._set_enable_qatable_by_state(self.items_dialog.tbl_psm, 1, self.items_dialog.btn_state1) - self._set_enable_qatable_by_state(self.items_dialog.tbl_psm_end, 0, self.items_dialog.btn_state0) - - # Create list for completer QLineEdit - sql = "SELECT DISTINCT(id) FROM v_ui_document ORDER BY id" - list_items = tools_db.create_list_for_completer(sql) - tools_qt.set_completer_lineedit(self.items_dialog.doc_id, list_items) - - table_name = "v_ui_workcat_x_feature" - table_name_end = "v_ui_workcat_x_feature_end" - table_doc = "v_ui_doc_x_workcat" - self.items_dialog.btn_doc_insert.clicked.connect( - partial(self._document_insert, self.items_dialog, 'doc_x_workcat', 'workcat_id', item['sys_id'])) - self.items_dialog.btn_doc_delete.clicked.connect(partial(tools_qt.delete_rows_tableview, self.items_dialog.tbl_document)) - self.items_dialog.btn_doc_new.clicked.connect( - partial(self._manage_document, self.items_dialog.tbl_document, item['sys_id'])) - self.items_dialog.btn_open_doc.clicked.connect(partial(tools_qt.document_open, self.items_dialog.tbl_document, 'path')) - self.items_dialog.tbl_document.doubleClicked.connect( - partial(tools_qt.document_open, self.items_dialog.tbl_document, 'path')) - - self.items_dialog.btn_close.clicked.connect(partial(tools_gw.close_dialog, self.items_dialog)) - self.items_dialog.btn_path.clicked.connect( - partial(self._get_folder_dialog, self.items_dialog, self.items_dialog.txt_path)) - self.items_dialog.rejected.connect(partial(self._restore_selectors, current_selectors)) - self.items_dialog.rejected.connect(partial(tools_gw.close_dialog, self.items_dialog)) - self.items_dialog.rejected.connect(self._reset_rubber_band) - self.items_dialog.btn_state1.clicked.connect( - partial(self._force_state, self.items_dialog.btn_state1, 1, self.items_dialog.tbl_psm)) - self.items_dialog.btn_state0.clicked.connect( - partial(self._force_state, self.items_dialog.btn_state0, 0, self.items_dialog.tbl_psm_end)) - self.items_dialog.btn_export_to_csv.clicked.connect( - partial(self.export_to_csv, self.items_dialog, self.items_dialog.tbl_psm, self.items_dialog.tbl_psm_end, - self.items_dialog.txt_path)) - - self.items_dialog.txt_name.textChanged.connect(partial( - self._workcat_filter_by_text, self.items_dialog, self.items_dialog.tbl_psm, self.items_dialog.txt_name, - table_name, workcat_id, field_id)) - self.items_dialog.txt_name_end.textChanged.connect(partial( - self._workcat_filter_by_text, self.items_dialog, self.items_dialog.tbl_psm_end, - self.items_dialog.txt_name_end, table_name_end, workcat_id, field_id)) - self.items_dialog.tbl_psm.doubleClicked.connect(partial(self._open_feature_form, self.items_dialog.tbl_psm)) - self.items_dialog.tbl_psm.clicked.connect(partial(self._get_parameters, self.items_dialog.tbl_psm)) - self.items_dialog.tbl_psm_end.doubleClicked.connect(partial(self._open_feature_form, self.items_dialog.tbl_psm_end)) - self.items_dialog.tbl_psm_end.clicked.connect(partial(self._get_parameters, self.items_dialog.tbl_psm_end)) - - expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" - self._workcat_fill_table(self.items_dialog.tbl_psm, table_name, expr=expr) - tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_psm, table_name) - expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" - self._workcat_fill_table(self.items_dialog.tbl_psm_end, table_name_end, expr=expr) - tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_psm_end, table_name_end) - expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" - self._workcat_fill_table(self.items_dialog.tbl_document, table_doc, expr=expr) - tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_document, table_doc) - - # Add data to workcat search form - table_name = "v_ui_workcat_x_feature" - table_name_end = "v_ui_workcat_x_feature_end" - extension = '_end' - self._fill_label_data(workcat_id, table_name) - self._fill_label_data(workcat_id, table_name_end, extension) - - tools_gw.open_dialog(self.items_dialog, dlg_name='search_workcat') - title = self.items_dialog.windowTitle() - self.items_dialog.setWindowTitle(f"{title} - {display_name}") - text = tools_qt.get_text(self.items_dialog, self.items_dialog.lbl_init, False, False) - tools_qt.set_widget_text(self.items_dialog, self.items_dialog.lbl_init, f"{text} {field_id}") - text = tools_qt.get_text(self.items_dialog, self.items_dialog.lbl_end, False, False) - tools_qt.set_widget_text(self.items_dialog, self.items_dialog.lbl_end, f"{text} {field_id}") - - - def _manage_document(self, qtable, item_id): - """ Access GUI to manage documents e.g Execute action of button 34 """ - - manage_document = GwDocument(single_tool=False) - dlg_docman = manage_document.get_document(tablename='workcat', qtable=qtable, item_id=item_id) - dlg_docman.btn_accept.clicked.connect(partial(tools_gw.set_completer_object, dlg_docman, 'doc')) - tools_qt.remove_tab(dlg_docman.tabWidget, 'tab_rel') - - - def _get_current_selectors(self): - """ Take the current selector_expl and selector_state to restore them at the end of the operation """ - - current_tab = tools_gw.get_config_parser('dialogs_tab', 'selector_basic', "user", "session") - form = f'"currentTab":"{current_tab}"' - extras = f'"selectorType":"selector_basic", "filterText":""' - body = tools_gw.create_body(form=form, extras=extras) - json_result = tools_gw.execute_procedure('gw_fct_getselectors', body) - return json_result - - - def _restore_selectors(self, current_selectors): - """ Restore selector_expl and selector_state to how the user had it """ - - qgis_project_add_schema = lib_vars.project_vars['add_schema'] - for form_tab in current_selectors['body']['form']['formTabs']: - if form_tab['tableName'] not in ('selector_expl', 'selector_state'): - continue - selector_type = form_tab['selectorType'] - tab_name = form_tab['tabName'] - field_id = None - if form_tab['tableName'] == 'selector_expl': - field_id = 'expl_id' - elif form_tab['tableName'] == 'selector_state': - field_id = 'id' - for field in form_tab['fields']: - _id = field[field_id] - extras = (f'"selectorType":"{selector_type}", "tabName":"{tab_name}", ' - f'"id":"{_id}", "isAlone":"False", "value":"{field["value"]}", ' - f'"addSchema":"{qgis_project_add_schema}"') - body = tools_gw.create_body(extras=extras) - tools_gw.execute_procedure('gw_fct_setselectors', body) - tools_qgis.refresh_map_canvas() - - - def _force_expl(self, workcat_id): - """ Active exploitations are compared with workcat farms. - If there is consistency nothing happens, if there is no consistency force this exploitations to selector.""" - - sql = (f"SELECT a.expl_id, a.expl_name FROM " - f" (SELECT expl_id, expl_name FROM v_ui_workcat_x_feature " - f" WHERE workcat_id='{workcat_id}' " - f" UNION SELECT expl_id, expl_name FROM v_ui_workcat_x_feature_end " - f" WHERE workcat_id='{workcat_id}'" - f" ) AS a " - f" WHERE expl_id NOT IN " - f" (SELECT expl_id FROM selector_expl " - f" WHERE cur_user=current_user)") - rows = tools_db.get_rows(sql) - if not rows: - return - - if len(rows) > 0: - for row in rows: - sql = (f"INSERT INTO selector_expl(expl_id, cur_user) " - f" VALUES('{row[0]}', current_user)") - tools_db.execute_sql(sql) - msg = "Your exploitation selector has been updated" - tools_qgis.show_info(msg) - - - def _update_selector_workcat(self, workcat_id): - """ Update table selector_workcat """ - - sql = ("DELETE FROM selector_workcat " - " WHERE cur_user = current_user;\n") - sql += (f"INSERT INTO selector_workcat(workcat_id, cur_user) " - f" VALUES('{workcat_id}', current_user);\n") - tools_db.execute_sql(sql) - - - def _set_enable_qatable_by_state(self, qtable, _id, qbutton): - - sql = (f"SELECT state_id FROM selector_state " - f" WHERE cur_user = current_user AND state_id ='{_id}'") - row = tools_db.get_row(sql) - if row is None: - qtable.setEnabled(False) - qbutton.setEnabled(True) - - - def _get_folder_dialog(self, dialog, widget): - """ Get folder dialog """ - - widget.setStyleSheet(None) - try: - folder_path = os.path.expanduser("~/Documents" if os.name == 'nt' else "~") - except Exception: - folder_path = os.path.expanduser("~") - - # Open dialog to select folder - os.chdir(folder_path) - file_dialog = QFileDialog() - file_dialog.setFileMode(QFileDialog.Directory) - - msg = "Save as" - folder_path, filter_ = file_dialog.getSaveFileName(None, tools_qt.tr(msg), folder_path, '*.csv') - if folder_path: - tools_qt.set_widget_text(dialog, widget, str(folder_path)) - - - def _force_state(self, qbutton, state, qtable): - """ Force selected state and set qtable enabled = True """ - - sql = (f"SELECT state_id " - f"FROM selector_state " - f"WHERE cur_user = current_user AND state_id = '{state}'") - row = tools_db.get_row(sql) - if row: - return - - sql = (f"INSERT INTO selector_state(state_id, cur_user) " - f"VALUES('{state}', current_user)") - tools_db.execute_sql(sql) - qtable.setEnabled(True) - qbutton.setEnabled(False) - tools_qgis.refresh_map_canvas() - qtable.model().select() - - - def _write_to_csv(self, dialog, folder_path=None, all_rows=None): - - with open(folder_path, "w") as output: - writer = csv.writer(output, lineterminator='\n') - writer.writerows(all_rows) - tools_gw.set_config_parser('btn_search', 'search_csv_path', f"{tools_qt.get_text(dialog, 'txt_path')}") - message = "The csv file has been successfully exported" - tools_qgis.show_info(message, dialog=dialog) - - - def _workcat_filter_by_text(self, dialog, qtable, widget_txt, table_name, workcat_id, field_id): - """ Filter list of workcats by workcat_id and field_id """ - - result_select = tools_qt.get_text(dialog, widget_txt) - if result_select != 'null': - expr = (f"workcat_id = '{workcat_id}'" - f" and {field_id} ILIKE '%{result_select}%'") - else: - expr = f"workcat_id ILIKE '%{workcat_id}%'" - self._workcat_fill_table(qtable, table_name, expr=expr) - tools_gw.set_tablemodel_config(dialog, qtable, table_name) - - - def _workcat_fill_table(self, widget, table_name, set_edit_triggers=QTableView.NoEditTriggers, expr=None): - """ Fill table @widget filtering query by @workcat_id - Set a model with selected filter. - Attach that model to selected table - @setEditStrategy: - 0: OnFieldChange - 1: OnRowChange - 2: OnManualSubmit - """ - - if self.schema_name not in table_name: - table_name = self.schema_name + "." + table_name - - # Set model - model = QSqlTableModel(db=lib_vars.qgis_db_credentials) - model.setTable(table_name) - model.setEditStrategy(QSqlTableModel.OnFieldChange) - model.setSort(0, 0) - model.select() - - widget.setEditTriggers(set_edit_triggers) - # Check for errors - if model.lastError().isValid(): - if 'Unable to find table' in model.lastError().text(): - tools_db.reset_qsqldatabase_connection(self.items_dialog) - else: - tools_qgis.show_warning(model.lastError().text(), dialog=self.items_dialog) - # Attach model to table view - if expr: - widget.setModel(model) - widget.model().setFilter(expr) - else: - widget.setModel(model) - - - def _open_feature_form(self, qtable): - """ Zoom feature with the code set in 'network_code' of the layer set in 'network_feature_type' """ - - tools_gw.reset_rubberband(self.aux_rubber_band) - # Get selected code from combo - element = qtable.selectionModel().selectedRows() - if len(element) == 0: - message = "Any record selected" - tools_qgis.show_warning(message) - return - - row = element[0].row() - - feature_type = qtable.model().record(row).value('feature_type').lower() - table_name = "v_edit_" + feature_type - - feature_id = qtable.model().record(row).value('feature_id') - - self.customForm = GwInfo(tab_type='data') - complet_result, dialog = self.customForm.get_info_from_id(table_name, feature_id, 'data') - - # Get list of all coords in field geometry - try: - list_coord = re.search('\((.*)\)', str(complet_result['body']['feature']['geometry']['st_astext'])) - max_x, max_y, min_x, min_y = tools_qgis.get_max_rectangle_from_coords(list_coord) - tools_qgis.zoom_to_rectangle(max_x, max_y, min_x, min_y, 1) - except Exception: - pass - - - def _fill_label_data(self, workcat_id, table_name, extension=None): - - if workcat_id == "null": - return - - features = ['NODE', 'CONNEC', 'GULLY', 'ELEMENT', 'ARC'] - for feature in features: - sql = (f"SELECT feature_id " - f" FROM {table_name}") - sql += f" WHERE workcat_id = '{workcat_id}' AND feature_type = '{feature}'" - rows = tools_db.get_rows(sql) - if extension is not None: - widget_name = f"lbl_total_{feature.lower()}{extension}" - else: - widget_name = f"lbl_total_{feature.lower()}" - - widget = self.items_dialog.findChild(QLabel, str(widget_name)) - if not rows: - total = 0 - else: - total = len(rows) - - # Add data to workcat search form - widget.setText(str(feature.lower().title()) + "s: " + str(total)) - if self.project_type == 'ws' and feature == 'GULLY': - widget.setVisible(False) - - if not rows: - continue - - length = 0 - if feature == 'ARC': - for row in rows: - arc_id = str(row[0]) - sql = (f"SELECT st_length2d(the_geom)::numeric(12,2) " - f" FROM arc" - f" WHERE arc_id = '{arc_id}'") - row = tools_db.get_row(sql) - if row: - length = length + row[0] - else: - message = "Some data is missing. Check gis_length for arc" - tools_qgis.show_warning(message, parameter=arc_id, dialog=self.items_dialog) - return - if extension is not None: - widget = self.items_dialog.findChild(QLabel, f"lbl_length{extension}") - else: - widget = self.items_dialog.findChild(QLabel, "lbl_length") - - # Add data to workcat search form - widget.setText(f"Total arcs length: {length}") - - - def _document_insert(self, dialog, tablename, field, field_value): - """ - Insert a document related to the current visit - :param dialog: (QDialog ) - :param tablename: Name of the table to make the queries (String) - :param field: Field of the table to make the where clause (String) - :param field_value: Value to compare in the clause where (String) - """ - - doc_id = dialog.doc_id.text() - if not doc_id: - message = "You need to insert doc_id" - tools_qgis.show_warning(message, dialog=dialog) - return - - # Check if document already exist - sql = (f"SELECT doc_id" - f" FROM {tablename}" - f" WHERE doc_id = '{doc_id}' AND {field} = '{field_value}'") - row = tools_db.get_row(sql) - if row: - msg = "Document already exist" - tools_qgis.show_warning(msg, dialog=dialog) - return - - # Insert into new table - sql = (f"INSERT INTO {tablename} (doc_id, {field})" - f" VALUES ('{doc_id}', '{field_value}')") - status = tools_db.execute_sql(sql) - if status: - message = "Document inserted successfully" - tools_qgis.show_info(message, dialog=dialog) - - dialog.tbl_document.model().select() - - - def _get_parameters(self, qtable, index): - - tools_gw.reset_rubberband(self.aux_rubber_band) - row = index.row() - column_index = tools_qt.get_col_index_by_col_name(qtable, 'feature_type') - feature_type = index.sibling(row, column_index).data().lower() - column_index = tools_qt.get_col_index_by_col_name(qtable, 'feature_id') - feature_id = index.sibling(row, column_index).data() - layer = tools_qgis.get_layer_by_tablename(f"v_edit_{feature_type}") - if not layer: - return - - feature = tools_qt.get_feature_by_id(layer, feature_id, f"{feature_type}_id") - try: - width = {"arc": 5} - geometry = feature.geometry() - self.aux_rubber_band.setToGeometry(geometry, None) - self.aux_rubber_band.setColor(QColor(255, 0, 0, 125)) - self.aux_rubber_band.setWidth(width.get(feature_type, 10)) - self.aux_rubber_band.show() - except AttributeError: - pass - # endregion diff --git a/core/shared/selector.py b/core/shared/selector.py index b866b2460..7bf951936 100644 --- a/core/shared/selector.py +++ b/core/shared/selector.py @@ -412,8 +412,8 @@ def _set_selector(self, dialog, widget, is_alone, disable_parent, check_all_over search_class = docker_search.property('class') search_class.refresh_tab() elif tab_name == 'tab_sector': - # Reload epa world filters if sector changed - tools_gw.set_epa_world(selector_change=True) + """# TODO: Reload epa world filters if sector changed""" + # tools_gw.set_epa_world(selector_change=True) widget_filter = tools_qt.get_widget(dialog, f"txt_filter_{tab_name}") if widget_filter and tools_qt.get_text(dialog, widget_filter, False, False) not in (None, ''): diff --git a/core/shared/visit.py b/core/shared/visit.py index 33dcccc80..a827501b0 100644 --- a/core/shared/visit.py +++ b/core/shared/visit.py @@ -493,8 +493,8 @@ def _set_signals(self): self.dlg_add_visit.btn_event_update.clicked.connect(self._event_update) self.tabs.currentChanged.connect(partial(self._manage_tab_changed, self.dlg_add_visit)) self.visit_id.textChanged.connect(partial(self._manage_visit_id_change, self.dlg_add_visit)) - self.dlg_add_visit.btn_doc_insert.clicked.connect(self._document_insert) - self.dlg_add_visit.btn_doc_delete.clicked.connect(self._document_delete) + self.dlg_add_visit.btn_doc_insert.clicked.connect(partial(self._document_insert, self.dlg_add_visit)) + self.dlg_add_visit.btn_doc_delete.clicked.connect(partial(self._document_delete, self.dlg_add_visit)) self.dlg_add_visit.btn_doc_new.clicked.connect(self._manage_document) self.dlg_add_visit.btn_open_doc.clicked.connect(partial(tools_qt.document_open, self.tbl_document, 'path')) self.tbl_document.doubleClicked.connect(partial(tools_qt.document_open, self.tbl_document, 'path')) @@ -1262,7 +1262,7 @@ def _set_completers(self): self.dlg_add_visit.doc_id.setCompleter(self.completer) model = QStringListModel() - sql = "SELECT DISTINCT(id) FROM v_ui_document" + sql = "SELECT DISTINCT(name) FROM v_ui_doc ORDER BY name" rows = tools_db.get_rows(sql) values = [] if rows: @@ -1724,18 +1724,38 @@ def _event_delete(self): self._manage_events_changed() - def _document_insert(self): + def _document_insert(self, dialog): """ Insert a document related to the current visit. """ - doc_id = self.doc_id.text() + doc_name = self.doc_id.text() visit_id = self.visit_id.text() - if not doc_id: - message = "You need to insert doc_id" - tools_qgis.show_warning(message, dialog=self.dlg_add_visit) + if not doc_name: + message = "You need to insert a document name" + tools_qgis.show_warning(message, dialog=dialog) return if not visit_id: message = "You need to insert visit_id" - tools_qgis.show_warning(message, dialog=self.dlg_add_visit) + tools_qgis.show_warning(message, dialog=dialog) + return + + # Get doc_id using doc_name + sql = f"SELECT id FROM doc WHERE name = '{doc_name}'" + row = tools_db.get_row(sql) + if not row: + message = "Document name not found" + tools_qgis.show_warning(message, dialog=dialog) + return + + doc_id = row['id'] + + # Check if document already exists + sql = (f"SELECT doc_id" + f" FROM doc_x_visit" + f" WHERE doc_id = '{doc_id}' AND visit_id = '{visit_id}'") + row = tools_db.get_row(sql) + if row: + msg = "Document already exists" + tools_qgis.show_warning(msg, dialog=dialog) return # Insert into new table @@ -1744,19 +1764,20 @@ def _document_insert(self): status = tools_db.execute_sql(sql) if status: message = "Document inserted successfully" - tools_qgis.show_info(message, dialog=self.dlg_add_visit) + tools_qgis.show_info(message, dialog=dialog) self.dlg_add_visit.tbl_document.model().select() + self.doc_id.clear() - def _document_delete(self): + def _document_delete(self, dialog): """ Delete a document from the current visit. """ # Get selected rows. 0 is the column of the pk 0 'id' selected_list = self.tbl_document.selectionModel().selectedRows(0) if len(selected_list) == 0: message = "Any record selected" - tools_qt.show_info_box(message) + tools_qgis.show_warning(message, dialog=dialog) return selected_id = [] @@ -1773,7 +1794,7 @@ def _document_delete(self): status = tools_db.execute_sql(sql) if status: message = "Documents deleted successfully" - tools_qgis.show_info(message, dialog=self.dlg_add_visit) + tools_qgis.show_info(message, dialog=dialog) self.tbl_document.model().select() diff --git a/core/shared/workcat.py b/core/shared/workcat.py new file mode 100644 index 000000000..3248f9c9f --- /dev/null +++ b/core/shared/workcat.py @@ -0,0 +1,691 @@ +""" +This file is part of Giswater 3 +The program is free software: you can redistribute it and/or modify it under the terms of the GNU +General Public License as published by the Free Software Foundation, either version 3 of the License, +or (at your option) any later version. +""" +# -*- coding: utf-8 -*- +import csv +import os +import re +from functools import partial + +from qgis.PyQt.QtCore import QDate, Qt +from qgis.PyQt.QtGui import QColor, QStandardItemModel, QCursor +from qgis.PyQt.QtSql import QSqlTableModel +from qgis.PyQt.QtWidgets import QAbstractItemView, QComboBox, QFileDialog, QLabel, QHeaderView, QTableView, QMenu, QAction + +from .document import GwDocument +from ..ui.ui_manager import GwWorkcatManagerUi, GwInfoWorkcatUi, GwSearchWorkcatUi +from ..utils import tools_gw +from ...libs import lib_vars, tools_db, tools_qgis, tools_qt, tools_os + + +class GwWorkcat: + def __init__(self, iface, canvas): + self.iface = iface + self.canvas = canvas + self.schema_name = lib_vars.schema_name + self.project_type = tools_gw.get_project_type() + self.rubber_band = tools_gw.create_rubberband(self.canvas) + self.aux_rubber_band = tools_gw.create_rubberband(self.canvas) + self.items_dialog = None + + def manage_workcats(self): + """ Manager to display and manage workcats """ + self.dlg_man = GwWorkcatManagerUi(self) + self.dlg_man.setProperty('class_obj', self) + tools_gw.load_settings(self.dlg_man) + self.dlg_man.tbl_workcat.setSelectionBehavior(QAbstractItemView.SelectRows) + tools_qt.set_tableview_config(self.dlg_man.tbl_workcat) + + # Populate custom context menu + self.dlg_man.tbl_workcat.setContextMenuPolicy(Qt.CustomContextMenu) + self.dlg_man.tbl_workcat.customContextMenuRequested.connect(self._show_context_menu) + + # Auto-completion + table_object = "workcat" + tools_gw.set_completer_object(self.dlg_man, table_object, field_id="name") + + # Fill table + status = self._fill_workcat_table() + if not status: + return False, False + + # Set signals + self.dlg_man.workcat_name.textChanged.connect(self._fill_workcat_table) + self.dlg_man.tbl_workcat.doubleClicked.connect( + partial(self._open_selected_workcat, self.dlg_man, self.dlg_man.tbl_workcat)) + self.dlg_man.btn_cancel.clicked.connect(partial(tools_gw.close_dialog, self.dlg_man)) + self.dlg_man.rejected.connect(partial(tools_gw.close_dialog, self.dlg_man)) + self.dlg_man.btn_delete.clicked.connect(self._handle_delete) + self.dlg_man.btn_create.clicked.connect(partial(self.create_workcat)) + + # Open form + tools_gw.open_dialog(self.dlg_man, dlg_name='workcat_manager') + + + def _handle_delete(self): + tools_gw.delete_selected_rows(self.dlg_man.tbl_workcat, "cat_work") + self._refresh_manager_table() + + + def _fill_workcat_table(self, filter_text=None): + view = "cat_work" + if filter_text is None: + filter_text = "" + complet_list = tools_gw.get_list(view, filter_name=filter_text, id_field="id") + if complet_list is False: + return False + for field in complet_list['body']['data']['fields']: + if field.get('hidden'): + continue + model = self.dlg_man.tbl_workcat.model() + if model is None: + model = QStandardItemModel() + self.dlg_man.tbl_workcat.setModel(model) + model.removeRows(0, model.rowCount()) + if field['value']: + self.dlg_man.tbl_workcat = tools_gw.add_tableview_header(self.dlg_man.tbl_workcat, field) + self.dlg_man.tbl_workcat = tools_gw.fill_tableview_rows(self.dlg_man.tbl_workcat, field) + tools_gw.set_tablemodel_config(self.dlg_man, self.dlg_man.tbl_workcat, 'cat_work', 0) + tools_qt.set_tableview_config(self.dlg_man.tbl_workcat, sectionResizeMode=0) + return True + + + def _open_selected_workcat(self, dialog, widget): + selected_list = widget.selectionModel().selectedRows() + if len(selected_list) == 0: + message = "Any record selected" + tools_qgis.show_warning(message, dialog=dialog) + return + row = selected_list[0].row() + field_object_id = "id" + id_col_idx = tools_qt.get_col_index_by_col_name(widget, field_object_id) + selected_object_id = widget.model().item(row, id_col_idx).text() + + keep_open_form = tools_gw.get_config_parser('dialogs_actions', 'workcat_manager_keep_open', "user", "init", + prefix=True) + if tools_os.set_boolean(keep_open_form, False) is not True: + dialog.close() + + self.open_workcat(selected_object_id) + + + def open_workcat(self, workcat_id): + item = {'sys_id': workcat_id, 'filter_text': '', 'display_name': 'Workcat Details'} + self.workcat_open_table_items(item) + + + def _refresh_manager_table(self): + try: + if getattr(self, 'dlg_man', None): + self._fill_workcat_table() + except Exception as e: + print(f"Error refreshing manager table: {e}") + + def create_workcat(self): + dialog = GwInfoWorkcatUi(self) + tools_gw.load_settings(dialog) + dialog.setWindowTitle("New Workcat") + dialog.builtdate.setDate(QDate.currentDate()) + dialog.raise_() + dialog.activateWindow() + dialog.setWindowFlags(dialog.windowFlags() | Qt.WindowStaysOnTopHint) + dialog.btn_accept.clicked.connect(partial(self._save_new_workcat, dialog)) + dialog.btn_cancel.clicked.connect(dialog.reject) + + dialog.cat_work_id.textChanged.connect(partial(self._check_workcat_exists, dialog)) + + dialog.show() + + + def _save_new_workcat(self, dialog): + workid = dialog.cat_work_id.text() + descript = dialog.descript.toPlainText() + link = dialog.link.toPlainText() + workid_key1 = dialog.workid_key_1.text() + workid_key2 = dialog.workid_key_2.text() + builddate = dialog.builtdate.date().toString("yyyy-MM-dd") + + sql = (f"INSERT INTO cat_work (id, descript, link, workid_key1, workid_key2, builtdate) " + f"VALUES ('{workid}', '{descript}', '{link}', '{workid_key1}', '{workid_key2}', '{builddate}')") + + status = tools_db.execute_sql(sql) + if status: + tools_qgis.show_info("Workcat created successfully.") + self._refresh_manager_table() + dialog.accept() + else: + tools_qgis.show_warning("Error creating Workcat.") + + + def _check_workcat_exists(self, dialog): + workid = dialog.cat_work_id.text() + sql = f"SELECT id FROM cat_work WHERE id = '{workid}'" + row = tools_db.get_row(sql, log_info=False) + if row: + dialog.cat_work_id.setStyleSheet("border: 1px solid red") + dialog.btn_accept.setEnabled(False) + dialog.cat_work_id.setToolTip("Workcat ID already exists") + else: + dialog.cat_work_id.setStyleSheet("") + dialog.btn_accept.setEnabled(True) + dialog.cat_work_id.setToolTip("") + + + def workcat_open_table_items(self, item): + """ Create the view and open the dialog with his content """ + + workcat_id = item['sys_id'] + field_id = item['filter_text'] + display_name = item['display_name'] + if workcat_id is None: + return False + + self._update_selector_workcat(workcat_id) + current_selectors = self._get_current_selectors() + self._force_expl(workcat_id) + + self.items_dialog = GwSearchWorkcatUi(self) + + tools_gw.add_icon(self.items_dialog.btn_doc_insert, "111", sub_folder="24x24") + tools_gw.add_icon(self.items_dialog.btn_doc_delete, "112", sub_folder="24x24") + tools_gw.add_icon(self.items_dialog.btn_doc_new, "34", sub_folder="24x24") + tools_gw.add_icon(self.items_dialog.btn_open_doc, "170") + + tools_gw.load_settings(self.items_dialog) + self.items_dialog.btn_state1.setEnabled(False) + self.items_dialog.btn_state0.setEnabled(False) + + search_csv_path = tools_gw.get_config_parser('btn_search', 'search_csv_path', "user", "session") + tools_qt.set_widget_text(self.items_dialog, self.items_dialog.txt_path, search_csv_path) + + self.items_dialog.tbl_psm.setSelectionBehavior(QAbstractItemView.SelectRows) + self.items_dialog.tbl_psm.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.items_dialog.tbl_psm_end.setSelectionBehavior(QAbstractItemView.SelectRows) + self.items_dialog.tbl_psm_end.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.items_dialog.tbl_document.setSelectionBehavior(QAbstractItemView.SelectRows) + self.items_dialog.tbl_document.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + + self._set_enable_qatable_by_state(self.items_dialog.tbl_psm, 1, self.items_dialog.btn_state1) + self._set_enable_qatable_by_state(self.items_dialog.tbl_psm_end, 0, self.items_dialog.btn_state0) + + # Create and configure QComboBox + sql = "SELECT id, name as idval FROM v_ui_doc ORDER BY name" + rows = tools_db.get_rows(sql) + tools_qt.fill_combo_values(self.items_dialog.doc_id, rows, index_to_show=1, add_empty=True) + tools_qt.set_autocompleter(self.items_dialog.doc_id) + + table_name = "v_ui_workcat_x_feature" + table_name_end = "v_ui_workcat_x_feature_end" + table_doc = "v_ui_doc_x_workcat" + self.items_dialog.btn_doc_insert.clicked.connect( + partial(self._document_insert, self.items_dialog, 'doc_x_workcat', 'workcat_id', item['sys_id'])) + self.items_dialog.btn_doc_delete.clicked.connect(partial(tools_gw.delete_selected_rows, self.items_dialog.tbl_document, 'doc_x_workcat')) + self.items_dialog.btn_doc_new.clicked.connect( + partial(self._manage_document, self.items_dialog.tbl_document, item['sys_id'])) + self.items_dialog.btn_open_doc.clicked.connect(partial(tools_qt.document_open, self.items_dialog.tbl_document, 'path')) + self.items_dialog.tbl_document.doubleClicked.connect( + partial(tools_qt.document_open, self.items_dialog.tbl_document, 'path')) + + self.items_dialog.btn_close.clicked.connect(partial(tools_gw.close_dialog, self.items_dialog)) + self.items_dialog.btn_path.clicked.connect( + partial(self._get_folder_dialog, self.items_dialog, self.items_dialog.txt_path)) + self.items_dialog.rejected.connect(partial(self._restore_selectors, current_selectors)) + self.items_dialog.rejected.connect(partial(tools_gw.close_dialog, self.items_dialog)) + self.items_dialog.rejected.connect(self._reset_rubber_band) + self.items_dialog.btn_state1.clicked.connect( + partial(self._force_state, self.items_dialog.btn_state1, 1, self.items_dialog.tbl_psm)) + self.items_dialog.btn_state0.clicked.connect( + partial(self._force_state, self.items_dialog.btn_state0, 0, self.items_dialog.tbl_psm_end)) + self.items_dialog.btn_export_to_csv.clicked.connect( + partial(self.export_to_csv, self.items_dialog, self.items_dialog.tbl_psm, self.items_dialog.tbl_psm_end, + self.items_dialog.txt_path)) + + self.items_dialog.txt_name.textChanged.connect(partial( + self._workcat_filter_by_text, self.items_dialog, self.items_dialog.tbl_psm, self.items_dialog.txt_name, + table_name, workcat_id, field_id)) + self.items_dialog.txt_name_end.textChanged.connect(partial( + self._workcat_filter_by_text, self.items_dialog, self.items_dialog.tbl_psm_end, + self.items_dialog.txt_name_end, table_name_end, workcat_id, field_id)) + self.items_dialog.tbl_psm.doubleClicked.connect(partial(self._open_feature_form, self.items_dialog.tbl_psm)) + self.items_dialog.tbl_psm.clicked.connect(partial(self._get_parameters, self.items_dialog.tbl_psm)) + self.items_dialog.tbl_psm_end.doubleClicked.connect(partial(self._open_feature_form, self.items_dialog.tbl_psm_end)) + self.items_dialog.tbl_psm_end.clicked.connect(partial(self._get_parameters, self.items_dialog.tbl_psm_end)) + + expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" + self._workcat_fill_table(self.items_dialog.tbl_psm, table_name, expr=expr) + tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_psm, table_name) + expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" + self._workcat_fill_table(self.items_dialog.tbl_psm_end, table_name_end, expr=expr) + tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_psm_end, table_name_end) + expr = "workcat_id ILIKE '%" + str(workcat_id) + "%'" + self._workcat_fill_table(self.items_dialog.tbl_document, table_doc, expr=expr) + tools_gw.set_tablemodel_config(self.items_dialog, self.items_dialog.tbl_document, table_doc) + + # Add data to workcat search form + table_name = "v_ui_workcat_x_feature" + table_name_end = "v_ui_workcat_x_feature_end" + extension = '_end' + self._fill_label_data(workcat_id, table_name) + self._fill_label_data(workcat_id, table_name_end, extension) + + tools_gw.open_dialog(self.items_dialog, dlg_name='search_workcat') + title = self.items_dialog.windowTitle() + self.items_dialog.setWindowTitle(f"{title} - {display_name}") + text = tools_qt.get_text(self.items_dialog, self.items_dialog.lbl_init, False, False) + tools_qt.set_widget_text(self.items_dialog, self.items_dialog.lbl_init, f"{text} {field_id}") + text = tools_qt.get_text(self.items_dialog, self.items_dialog.lbl_end, False, False) + tools_qt.set_widget_text(self.items_dialog, self.items_dialog.lbl_end, f"{text} {field_id}") + + + def _manage_document(self, qtable, item_id): + """ Access GUI to manage documents e.g Execute action of button 34 """ + + manage_document = GwDocument(single_tool=False) + dlg_docman = manage_document.get_document(tablename='workcat', qtable=qtable, item_id=item_id) + dlg_docman.btn_accept.clicked.connect(partial(tools_gw.set_completer_object, dlg_docman, 'doc')) + tools_qt.remove_tab(dlg_docman.tabWidget, 'tab_rel') + + + def _get_current_selectors(self): + """ Take the current selector_expl and selector_state to restore them at the end of the operation """ + + current_tab = tools_gw.get_config_parser('dialogs_tab', 'selector_basic', "user", "session") + form = f'"currentTab":"{current_tab}"' + extras = f'"selectorType":"selector_basic", "filterText":""' + body = tools_gw.create_body(form=form, extras=extras) + json_result = tools_gw.execute_procedure('gw_fct_getselectors', body) + return json_result + + + def _restore_selectors(self, current_selectors): + """ Restore selector_expl and selector_state to how the user had it """ + + qgis_project_add_schema = lib_vars.project_vars['add_schema'] + for form_tab in current_selectors['body']['form']['formTabs']: + if form_tab['tableName'] not in ('selector_expl', 'selector_state'): + continue + selector_type = form_tab['selectorType'] + tab_name = form_tab['tabName'] + field_id = None + if form_tab['tableName'] == 'selector_expl': + field_id = 'expl_id' + elif form_tab['tableName'] == 'selector_state': + field_id = 'id' + for field in form_tab['fields']: + _id = field[field_id] + extras = (f'"selectorType":"{selector_type}", "tabName":"{tab_name}", ' + f'"id":"{_id}", "isAlone":"False", "value":"{field["value"]}", ' + f'"addSchema":"{qgis_project_add_schema}"') + body = tools_gw.create_body(extras=extras) + tools_gw.execute_procedure('gw_fct_setselectors', body) + tools_qgis.refresh_map_canvas() + + + def _force_expl(self, workcat_id): + """ Active exploitations are compared with workcat farms. + If there is consistency nothing happens, if there is no consistency force this exploitations to selector.""" + + sql = (f"SELECT a.expl_id, a.expl_name FROM " + f" (SELECT expl_id, expl_name FROM v_ui_workcat_x_feature " + f" WHERE workcat_id='{workcat_id}' " + f" UNION SELECT expl_id, expl_name FROM v_ui_workcat_x_feature_end " + f" WHERE workcat_id='{workcat_id}'" + f" ) AS a " + f" WHERE expl_id NOT IN " + f" (SELECT expl_id FROM selector_expl " + f" WHERE cur_user=current_user)") + rows = tools_db.get_rows(sql) + if not rows: + return + + if len(rows) > 0: + for row in rows: + sql = (f"INSERT INTO selector_expl(expl_id, cur_user) " + f" VALUES('{row[0]}', current_user)") + tools_db.execute_sql(sql) + msg = "Your exploitation selector has been updated" + tools_qgis.show_info(msg) + + + def _update_selector_workcat(self, workcat_id): + """ Update table selector_workcat """ + + sql = ("DELETE FROM selector_workcat " + " WHERE cur_user = current_user;\n") + sql += (f"INSERT INTO selector_workcat(workcat_id, cur_user) " + f" VALUES('{workcat_id}', current_user);\n") + tools_db.execute_sql(sql) + + + def _set_enable_qatable_by_state(self, qtable, _id, qbutton): + + sql = (f"SELECT state_id FROM selector_state " + f" WHERE cur_user = current_user AND state_id ='{_id}'") + row = tools_db.get_row(sql) + if row is None: + qtable.setEnabled(False) + qbutton.setEnabled(True) + + + def _get_folder_dialog(self, dialog, widget): + """ Get folder dialog """ + + widget.setStyleSheet(None) + try: + folder_path = os.path.expanduser("~/Documents" if os.name == 'nt' else "~") + except Exception: + folder_path = os.path.expanduser("~") + + # Open dialog to select folder + os.chdir(folder_path) + file_dialog = QFileDialog() + file_dialog.setFileMode(QFileDialog.Directory) + + msg = "Save as" + folder_path, filter_ = file_dialog.getSaveFileName(None, tools_qt.tr(msg), folder_path, '*.csv') + if folder_path: + tools_qt.set_widget_text(dialog, widget, str(folder_path)) + + + def _force_state(self, qbutton, state, qtable): + """ Force selected state and set qtable enabled = True """ + + sql = (f"SELECT state_id " + f"FROM selector_state " + f"WHERE cur_user = current_user AND state_id = '{state}'") + row = tools_db.get_row(sql) + if row: + return + + sql = (f"INSERT INTO selector_state(state_id, cur_user) " + f"VALUES('{state}', current_user)") + tools_db.execute_sql(sql) + qtable.setEnabled(True) + qbutton.setEnabled(False) + tools_qgis.refresh_map_canvas() + qtable.model().select() + + + def _write_to_csv(self, dialog, folder_path=None, all_rows=None): + + with open(folder_path, "w") as output: + writer = csv.writer(output, lineterminator='\n') + writer.writerows(all_rows) + tools_gw.set_config_parser('btn_search', 'search_csv_path', f"{tools_qt.get_text(dialog, 'txt_path')}") + message = "The csv file has been successfully exported" + tools_qgis.show_info(message, dialog=dialog) + + + def _workcat_filter_by_text(self, dialog, qtable, widget_txt, table_name, workcat_id, field_id): + """ Filter list of workcats by workcat_id and field_id """ + + result_select = tools_qt.get_text(dialog, widget_txt) + if result_select != 'null': + expr = (f"workcat_id = '{workcat_id}'" + f" and {field_id} ILIKE '%{result_select}%'") + else: + expr = f"workcat_id ILIKE '%{workcat_id}%'" + self._workcat_fill_table(qtable, table_name, expr=expr) + tools_gw.set_tablemodel_config(dialog, qtable, table_name) + + + def _workcat_fill_table(self, widget, table_name, set_edit_triggers=QTableView.NoEditTriggers, expr=None): + """ Fill table @widget filtering query by @workcat_id + Set a model with selected filter. + Attach that model to selected table + @setEditStrategy: + 0: OnFieldChange + 1: OnRowChange + 2: OnManualSubmit + """ + + if self.schema_name not in table_name: + table_name = self.schema_name + "." + table_name + + # Set model + model = QSqlTableModel(db=lib_vars.qgis_db_credentials) + model.setTable(table_name) + model.setEditStrategy(QSqlTableModel.OnFieldChange) + model.setSort(0, 0) + model.select() + + widget.setEditTriggers(set_edit_triggers) + # Check for errors + if model.lastError().isValid(): + if 'Unable to find table' in model.lastError().text(): + tools_db.reset_qsqldatabase_connection(self.items_dialog) + else: + tools_qgis.show_warning(model.lastError().text(), dialog=self.items_dialog) + # Attach model to table view + if expr: + widget.setModel(model) + widget.model().setFilter(expr) + else: + widget.setModel(model) + + + def _show_context_menu(self): + """ Show custom context menu """ + menu = QMenu(self.dlg_man.tbl_workcat) + + action_create = QAction("Create", self.dlg_man.tbl_workcat) + action_create.triggered.connect(partial(self.create_workcat)) + menu.addAction(action_create) + + action_delete = QAction("Delete", self.dlg_man.tbl_workcat) + action_delete.triggered.connect(partial(self._handle_delete)) + menu.addAction(action_delete) + + # Show menu + menu.exec(QCursor.pos()) + + + def _open_feature_form(self, qtable): + """ Zoom feature with the code set in 'network_code' of the layer set in 'network_feature_type' """ + from .info import GwInfo # Avoid circular import + + tools_gw.reset_rubberband(self.aux_rubber_band) + # Get selected code from combo + element = qtable.selectionModel().selectedRows() + if len(element) == 0: + message = "Any record selected" + tools_qgis.show_warning(message) + return + + row = element[0].row() + + feature_type = qtable.model().record(row).value('feature_type').lower() + table_name = "v_edit_" + feature_type + + feature_id = qtable.model().record(row).value('feature_id') + + self.customForm = GwInfo(tab_type='data') + complet_result, dialog = self.customForm.get_info_from_id(table_name, feature_id, 'data') + + # Get list of all coords in field geometry + try: + list_coord = re.search('\((.*)\)', str(complet_result['body']['feature']['geometry']['st_astext'])) + max_x, max_y, min_x, min_y = tools_qgis.get_max_rectangle_from_coords(list_coord) + tools_qgis.zoom_to_rectangle(max_x, max_y, min_x, min_y, 1) + except Exception: + pass + + + def _fill_label_data(self, workcat_id, table_name, extension=None): + + if workcat_id == "null": + return + + features = ['NODE', 'CONNEC', 'GULLY', 'ELEMENT', 'ARC'] + for feature in features: + sql = (f"SELECT feature_id " + f" FROM {table_name}") + sql += f" WHERE workcat_id = '{workcat_id}' AND feature_type = '{feature}'" + rows = tools_db.get_rows(sql) + if extension is not None: + widget_name = f"lbl_total_{feature.lower()}{extension}" + else: + widget_name = f"lbl_total_{feature.lower()}" + + widget = self.items_dialog.findChild(QLabel, str(widget_name)) + if not rows: + total = 0 + else: + total = len(rows) + + # Add data to workcat search form + widget.setText(str(feature.lower().title()) + "s: " + str(total)) + if self.project_type == 'ws' and feature == 'GULLY': + widget.setVisible(False) + + if not rows: + continue + + length = 0 + if feature == 'ARC': + for row in rows: + arc_id = str(row[0]) + sql = (f"SELECT st_length2d(the_geom)::numeric(12,2) " + f" FROM arc" + f" WHERE arc_id = '{arc_id}'") + row = tools_db.get_row(sql) + if row: + length = length + row[0] + else: + message = "Some data is missing. Check gis_length for arc" + tools_qgis.show_warning(message, parameter=arc_id, dialog=self.items_dialog) + return + if extension is not None: + widget = self.items_dialog.findChild(QLabel, f"lbl_length{extension}") + else: + widget = self.items_dialog.findChild(QLabel, "lbl_length") + + # Add data to workcat search form + widget.setText(f"Total arcs length: {length}") + + + def _document_insert(self, dialog, tablename, field, field_value): + """ + Insert a document related to the current visit + :param dialog: (QDialog ) + :param tablename: Name of the table to make the queries (String) + :param field: Field of the table to make the where clause (String) + :param field_value: Value to compare in the clause where (String) + """ + doc_id = tools_qt.get_combo_value(dialog, dialog.doc_id) + + if not doc_id: + message = "Any document selected" + tools_qgis.show_warning(message, dialog=dialog) + return + + # Check if document already exist + sql = (f"SELECT doc_id" + f" FROM {tablename}" + f" WHERE doc_id = '{doc_id}' AND {field} = '{field_value}'") + row = tools_db.get_row(sql) + if row: + msg = "Document already exist" + tools_qgis.show_warning(msg, dialog=dialog) + return + + # Insert into new table + sql = (f"INSERT INTO {tablename} (doc_id, {field})" + f" VALUES ('{doc_id}', '{field_value}')") + status = tools_db.execute_sql(sql) + if status: + message = "Document inserted successfully" + tools_qgis.show_info(message, dialog=dialog) + + dialog.doc_id.blockSignals(True) + dialog.doc_id.setCurrentIndex(0) + dialog.doc_id.hidePopup() + dialog.doc_id.blockSignals(False) + dialog.tbl_document.model().select() + + + def _get_parameters(self, qtable, index): + + tools_gw.reset_rubberband(self.aux_rubber_band) + row = index.row() + column_index = tools_qt.get_col_index_by_col_name(qtable, 'feature_type') + feature_type = index.sibling(row, column_index).data().lower() + column_index = tools_qt.get_col_index_by_col_name(qtable, 'feature_id') + feature_id = index.sibling(row, column_index).data() + layer = tools_qgis.get_layer_by_tablename(f"v_edit_{feature_type}") + if not layer: + return + + feature = tools_qt.get_feature_by_id(layer, feature_id, f"{feature_type}_id") + try: + width = {"arc": 5} + geometry = feature.geometry() + self.aux_rubber_band.setToGeometry(geometry, None) + self.aux_rubber_band.setColor(QColor(255, 0, 0, 125)) + self.aux_rubber_band.setWidth(width.get(feature_type, 10)) + self.aux_rubber_band.show() + except AttributeError: + pass + + + def _reset_rubber_band(self): + tools_gw.reset_rubberband(self.rubber_band) + tools_gw.reset_rubberband(self.aux_rubber_band) + + + def export_to_csv(self, dialog, qtable_1=None, qtable_2=None, path=None): + + folder_path = tools_qt.get_text(dialog, path) + if folder_path is None or folder_path == 'null': + path.setStyleSheet("border: 1px solid red") + return + + path.setStyleSheet(None) + if folder_path.find('.csv') == -1: + folder_path += '.csv' + if qtable_1: + model_1 = qtable_1.model() + else: + return + + model_2 = None + if qtable_2: + model_2 = qtable_2.model() + + # Convert qtable values into list + all_rows = [] + headers = [] + for i in range(0, model_1.columnCount()): + headers.append(str(model_1.headerData(i, Qt.Horizontal))) + all_rows.append(headers) + for rows in range(0, model_1.rowCount()): + row = [] + for col in range(0, model_1.columnCount()): + row.append(str(model_1.data(model_1.index(rows, col)))) + all_rows.append(row) + if qtable_2 is not None: + headers = [] + for i in range(0, model_2.columnCount()): + headers.append(str(model_2.headerData(i, Qt.Horizontal))) + all_rows.append(headers) + for rows in range(0, model_2.rowCount()): + row = [] + for col in range(0, model_2.columnCount()): + row.append(str(model_2.data(model_2.index(rows, col)))) + all_rows.append(row) + + # Write list into csv file + try: + if os.path.exists(folder_path): + msg = "Are you sure you want to overwrite this file?" + answer = tools_qt.show_question(msg, "Overwrite") + if answer: + self._write_to_csv(dialog, folder_path, all_rows) + else: + self._write_to_csv(dialog, folder_path, all_rows) + except Exception: + msg = "File path doesn't exist or you dont have permission or file is opened" + tools_qgis.show_warning(msg, dialog=dialog) diff --git a/core/threads/project_schema_create.py b/core/threads/project_schema_create.py index 73af1babd..ef36b1a0d 100644 --- a/core/threads/project_schema_create.py +++ b/core/threads/project_schema_create.py @@ -12,7 +12,7 @@ from .task import GwTask from ..utils import tools_gw -from ...libs import tools_qt, tools_log +from ...libs import tools_qt, tools_log, tools_os, tools_db, tools_qgis class GwCreateSchemaTask(GwTask): @@ -56,7 +56,7 @@ def run(self): self.admin.progress_value = 0 tools_log.log_info(f"Task 'Create schema' execute function 'def main_execution'") status = self.main_execution() - if not status: + if not tools_os.set_boolean(status, False): tools_log.log_info("Function main_execution returned False") return False tools_log.log_info(f"Task 'Create schema' execute function 'def custom_execution'") @@ -85,6 +85,7 @@ def finished(self, result): if self.db_exception is not None: error, sql, filepath = self.db_exception tools_qt.manage_exception_db(error, sql, filepath=filepath) + tools_db.dao.rollback() return # Handle exception @@ -132,28 +133,31 @@ def main_execution(self): tools_log.log_info(f"Number of SQL files 'TOTAL': {self.admin.total_sql_files}") status = self.admin.load_base(self.dict_folders_process['load_base']) - if (not status and self.admin.dev_commit is False) or self.isCanceled(): + if (not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.admin.dev_commit, False) is False) \ + or self.isCanceled(): return False status = self.admin.load_locale() - if (not status and self.admin.dev_commit is False) or self.isCanceled(): + if (not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.admin.dev_commit, False) is False) \ + or self.isCanceled(): return False status = self.admin.update_dict_folders(True, project_type, dict_update_folders=self.dict_folders_process['update_35to39']) - if (not status and self.admin.dev_commit is False) or self.isCanceled(): + if (not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.admin.dev_commit, False) is False) \ + or self.isCanceled(): return False - status = self.admin.load_childviews() - if (not status and self.admin.dev_commit is False) or self.isCanceled(): - return False + # status = self.admin.load_childviews() + # if (not tools_os.set_boolean(status, False) and tools_os.set_boolean(self.admin.dev_commit, False) is False) \ + # or self.isCanceled(): + # return False - status = True + json_result = None if exec_last_process: tools_log.log_info("Execute function 'gw_fct_admin_schema_lastprocess'") - status = self.admin.execute_last_process(True, project_name_schema, self.admin.schema_type, + json_result = self.admin.execute_last_process(True, project_name_schema, self.admin.schema_type, project_locale, project_srid) - - if (not status and self.admin.dev_commit is False) or self.isCanceled(): + if (not json_result or json_result['status'] == 'Failed' and tools_os.set_boolean(self.admin.dev_commit, False) is False) or self.isCanceled(): return False return True diff --git a/core/threads/project_schema_update.py b/core/threads/project_schema_update.py index 749ca6b19..0eb7a2568 100644 --- a/core/threads/project_schema_update.py +++ b/core/threads/project_schema_update.py @@ -105,7 +105,7 @@ def finished(self, result): def main_execution(self): schema_name = self.admin._get_schema_name() sql = f"DELETE FROM {schema_name}.audit_check_data WHERE fid = 133 AND cur_user = current_user;" - tools_db.execute_sql(sql) + tools_db.execute_sql(sql, commit=False) # Get all updates folders, to update self.dict_folders_process['updates'] = self.get_updates_dict_folders() self.status = self.admin.load_updates(self.params['project_type'], update_changelog=True, schema_name=schema_name, dict_update_folders=self.dict_folders_process['updates']) diff --git a/core/toolbars/buttons.py b/core/toolbars/buttons.py index 716b5d489..ddbb04674 100644 --- a/core/toolbars/buttons.py +++ b/core/toolbars/buttons.py @@ -51,7 +51,6 @@ # Plan from .plan.psector_button import GwPsectorButton from .plan.psector_manager_button import GwPsectorManagerButton -from .plan.price_manager_button import GwPriceManagerButton from .plan.netscenario_manager_btn import GwNetscenarioManagerButton # Utilities @@ -65,4 +64,4 @@ # ToC from .toc.add_child_layer_button import GwAddChildLayerButton -from .toc.epa_world_button import GwEpaWorldButton +from .toc.layerstyle_change_button import GwLayerStyleChangeButton diff --git a/core/toolbars/edit/arc_fusion_button.py b/core/toolbars/edit/arc_fusion_button.py index f2876ec4b..b9ed0b5e8 100644 --- a/core/toolbars/edit/arc_fusion_button.py +++ b/core/toolbars/edit/arc_fusion_button.py @@ -153,7 +153,7 @@ def open_arc_fusion_dlg(self): # Fill ComboBox cmb_statetype sql = "SELECT id, name as idval FROM value_state_type WHERE id IS NOT NULL AND state = 0" rows = tools_db.get_rows(sql) - tools_qt.fill_combo_values(self.dlg_fusion.cmb_statetype, rows, add_empty=True) + tools_qt.fill_combo_values(self.dlg_fusion.cmb_statetype, rows) state_type = tools_gw.get_config_parser("btn_arc_fusion", "cmb_statetype", "user", "session") if state_type not in (None, 'None', ''): tools_qt.set_widget_text(self.dlg_fusion, "cmb_statetype", state_type) diff --git a/core/toolbars/edit/document_button.py b/core/toolbars/edit/document_button.py index 0a7119256..76da35603 100644 --- a/core/toolbars/edit/document_button.py +++ b/core/toolbars/edit/document_button.py @@ -15,7 +15,7 @@ class GwDocumentButton(GwAction): def __init__(self, icon_path, action_name, text, toolbar, action_group, list_tabs=None, doc_tables=None, feature_type=None): super().__init__(icon_path, action_name, text, toolbar, action_group) self.list_tabs = list_tabs if list_tabs else ["node", "arc", "connec", "gully"] - self.doc_tables = doc_tables if doc_tables else ["doc_x_node","doc_x_arc","doc_x_connec","doc_x_gully"] + self.doc_tables = doc_tables if doc_tables else ["doc_x_node", "doc_x_arc", "doc_x_connec", "doc_x_gully", "doc_x_workcat", "doc_x_psector", "doc_x_visit"] self.feature_type = feature_type self.document = GwDocument() diff --git a/core/toolbars/edit/feature_delete_button.py b/core/toolbars/edit/feature_delete_button.py index d94afb65d..acba8d728 100644 --- a/core/toolbars/edit/feature_delete_button.py +++ b/core/toolbars/edit/feature_delete_button.py @@ -243,8 +243,11 @@ def _manage_selection(self): # Get selected features of the layer features = layer.selectedFeatures() for feature in features: - # Append 'feature_id' into the list - selected_id = feature.attribute(field_id) + try: + # Append 'feature_id' into the list + selected_id = feature.attribute(field_id) + except Exception: + pass if selected_id: tools_qt.set_widget_text(self.dlg_feature_delete, self.dlg_feature_delete.feature_id, str(selected_id)) diff --git a/core/toolbars/epa/go2epa_button.py b/core/toolbars/epa/go2epa_button.py index 3d03a1f9e..274a12229 100644 --- a/core/toolbars/epa/go2epa_button.py +++ b/core/toolbars/epa/go2epa_button.py @@ -468,7 +468,7 @@ def _set_completer_result(self, widget, viewname, field_name): def _refresh_go2epa_options(self, dialog): """ Refresh widgets into layouts on go2epa_options form """ - + if dialog: for lyt in dialog.findChildren(QGridLayout, QRegularExpression('lyt_')): i = 0 @@ -556,9 +556,10 @@ def _update_values(self, _json): return False tools_gw.manage_current_selections_docker(json_result) + """# TODO: do this with symbology?""" # Refresh epa world view if is active and it has changed - if tools_gw.is_epa_world_active() and any(widget['widget'] == 'inp_options_networkmode' for widget in _json): - tools_gw.set_epa_world(True, selector_change=True) + # if tools_gw.is_epa_world_active() and any(widget['widget'] == 'inp_options_networkmode' for widget in _json): + # tools_gw.set_epa_world(True, selector_change=True) message = "Values has been updated" tools_qgis.show_info(message) diff --git a/core/toolbars/epa/go2epa_manager_button.py b/core/toolbars/epa/go2epa_manager_button.py index 381dfd818..48f4e0cc3 100644 --- a/core/toolbars/epa/go2epa_manager_button.py +++ b/core/toolbars/epa/go2epa_manager_button.py @@ -10,13 +10,14 @@ from functools import partial from qgis.PyQt.QtCore import Qt, QRegExp -from qgis.PyQt.QtWidgets import QAbstractItemView, QTableView +from qgis.PyQt.QtWidgets import QAbstractItemView, QTableView, QDialog from qgis.PyQt.QtGui import QRegExpValidator, QStandardItemModel from ..dialog import GwAction from ...ui.ui_manager import GwEpaManagerUi from ...utils import tools_gw -from ....libs import tools_qt, tools_db, tools_qgis, tools_os +from ....libs import tools_qt, tools_db, tools_qgis, tools_os, lib_vars +from ....libs.tools_qt import GwEditDialog class GwGo2EpaManagerButton(GwAction): @@ -48,18 +49,16 @@ def _manage_go2epa(self): self.dlg_manager.btn_archive.setEnabled(False) if self.project_type != 'ws': self.dlg_manager.btn_set_corporate.setVisible(False) - self.dlg_manager.btn_archive.setVisible(False) # Fill combo box and table view # self._fill_combo_result_id() self.dlg_manager.tbl_rpt_cat_result.setSelectionBehavior(QAbstractItemView.SelectRows) self._fill_manager_table() - model = self.dlg_manager.tbl_rpt_cat_result.model() - model.itemChanged.connect(partial(self._update_data)) - model.flags = lambda index: self.flags(index, model) # Set signals - self.dlg_manager.btn_archive.clicked.connect(partial(self._set_rpt_archived, self.dlg_manager.tbl_rpt_cat_result, + self.dlg_manager.btn_edit.clicked.connect(partial(self._manage_edit_row, self.dlg_manager, self.dlg_manager.tbl_rpt_cat_result)) + self.dlg_manager.btn_show_inp_data.clicked.connect(partial(self._show_inp_data, self.dlg_manager, self.dlg_manager.tbl_rpt_cat_result)) + self.dlg_manager.btn_archive.clicked.connect(partial(self._toggle_rpt_archived, self.dlg_manager.tbl_rpt_cat_result, 'result_id')) self.dlg_manager.btn_set_corporate.clicked.connect(partial(self._epa2data, self.dlg_manager.tbl_rpt_cat_result, 'result_id')) @@ -68,7 +67,6 @@ def _manage_go2epa(self): selection_model = self.dlg_manager.tbl_rpt_cat_result.selectionModel() selection_model.selectionChanged.connect(partial(self._fill_txt_infolog)) selection_model.selectionChanged.connect(partial(self._enable_buttons)) - self.dlg_manager.tbl_rpt_cat_result.doubleClicked.connect(partial(self._set_result_id, self.dlg_manager, self.dlg_manager.tbl_rpt_cat_result)) self.dlg_manager.btn_close.clicked.connect(partial(tools_gw.close_dialog, self.dlg_manager)) self.dlg_manager.rejected.connect(partial(tools_gw.close_dialog, self.dlg_manager)) self.dlg_manager.txt_result_id.textChanged.connect(partial(self._fill_manager_table)) @@ -85,7 +83,8 @@ def _fill_manager_table(self, filter_id=None): if complet_list is False: return False, False for field in complet_list['body']['data']['fields']: - if field.get('hidden'): continue + if field.get('hidden'): + continue model = self.dlg_manager.tbl_rpt_cat_result.model() if model is None: model = QStandardItemModel() @@ -96,8 +95,8 @@ def _fill_manager_table(self, filter_id=None): self.dlg_manager.tbl_rpt_cat_result = tools_gw.add_tableview_header(self.dlg_manager.tbl_rpt_cat_result, field) self.dlg_manager.tbl_rpt_cat_result = tools_gw.fill_tableview_rows(self.dlg_manager.tbl_rpt_cat_result, field) - tools_gw.set_tablemodel_config(self.dlg_manager, self.dlg_manager.tbl_rpt_cat_result, 'v_ui_rpt_cat_result', isQStandardItemModel=True) - tools_qt.set_tableview_config(self.dlg_manager.tbl_rpt_cat_result, edit_triggers=QTableView.DoubleClicked) + tools_gw.set_tablemodel_config(self.dlg_manager, self.dlg_manager.tbl_rpt_cat_result, 'v_ui_rpt_cat_result') + tools_qt.set_tableview_config(self.dlg_manager.tbl_rpt_cat_result, edit_triggers=QTableView.NoEditTriggers) return complet_list @@ -120,24 +119,10 @@ def _get_list(self, table_name='v_ui_rpt_cat_result', filter_id=None): return complet_list - def flags(self, index, model): + def _update_data(self, result_id, columnname, value): - # print(index.column()) - if index.column() != 1: - flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled - return flags - - return QStandardItemModel.flags(model, index) - - - def _update_data(self, item): - - index = item.index() - result_id = index.sibling(index.row(), 0).data() - value = index.sibling(index.row(), index.column()).data() - - sql = f"UPDATE v_ui_rpt_cat_result SET expl_id = {value} WHERE result_id = '{result_id}';" - result = tools_db.execute_sql(sql) + sql = f"""UPDATE v_ui_rpt_cat_result SET "{columnname}" = $${value}$$ WHERE result_id = '{result_id}';""" + result = tools_db.execute_sql(sql, log_sql = True) if result: self._fill_manager_table(tools_qt.get_text(self.dlg_manager, 'txt_result_id')) @@ -158,13 +143,39 @@ def _fill_txt_infolog(self, selected): msg = "" + try: + # Get column index for column addparam + col_ind = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'addparam') + addparam = json.loads(f'{row[col_ind].data()}') + + # Construct custom message with addparam keys + if not addparam: + raise + + msg += "Properties:
" + corporate_last_dates = addparam['corporateLastDates'] + if corporate_last_dates: + corporate_start = corporate_last_dates.get('start') + corporate_end = corporate_last_dates.get('end') + if corporate_start and corporate_end: + msg += f"Corporate from {corporate_start} to {corporate_end}" + elif corporate_start and not corporate_end: + msg += f"Corporate since {corporate_start}" + elif not corporate_start and corporate_end: + msg += f"Corporate until {corporate_end}" + msg += "
" + except Exception: + pass + try: # Get column index for column export_options col_ind = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'export_options') export_options = json.loads(f'{row[col_ind].data()}') # Construct message with all data rows - msg += f"Export Options:
" + if msg: + msg += "
" + msg += "Export Options:
" for text in export_options: msg += f"{text} : {export_options[text]}
" except Exception: @@ -174,8 +185,9 @@ def _fill_txt_infolog(self, selected): # Get column index for column network_stats col_ind = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'network_stats') network_stats = json.loads(f'{row[col_ind].data()}') - - msg += f"
Network Status:
" + if msg: + msg += "
" + msg += "Network Status:
" for text in network_stats: msg += f"{text} : {network_stats[text]}
" except Exception: @@ -185,8 +197,9 @@ def _fill_txt_infolog(self, selected): # Get column index for column inp_options col_ind = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'inp_options') inp_options = json.loads(f'{row[col_ind].data()}') - - msg += f"
Inp Options:
" + if msg: + msg += "
" + msg += "Inp Options:
" for text in inp_options: msg += f"{text} : {inp_options[text]}
" except Exception: @@ -199,16 +212,30 @@ def _fill_txt_infolog(self, selected): def _enable_buttons(self, selected): set_corporate_enabled, archive_enabled = True, True selected_rows = self.dlg_manager.tbl_rpt_cat_result.selectionModel().selectedRows() + last_status = None for idx, index in enumerate(selected_rows): + is_corporate = None + # set corporate col_idx = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'rpt_stats') row = index.row() status = index.sibling(row, col_idx).data() if not status: set_corporate_enabled = False + + col_idx = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'iscorporate') + if col_idx is None: + row = index.row() + is_corporate = index.sibling(row, col_idx).data() + + # toggle archive col_idx = tools_qt.get_col_index_by_col_name(self.dlg_manager.tbl_rpt_cat_result, 'status') status = index.sibling(row, col_idx).data() - if status != 'COMPLETED': - archive_enabled = False + if last_status is None: + last_status = status + if is_corporate is None: + if status == 'PARTIAL' or status != last_status or tools_os.set_boolean(is_corporate, False): + archive_enabled = False + last_status = status if not selected_rows: set_corporate_enabled, archive_enabled = False, False @@ -274,7 +301,7 @@ def _multi_rows_delete(self, widget, table_name, column_id): self._fill_manager_table(tools_qt.get_text(self.dlg_manager, 'txt_result_id')) - def _set_rpt_archived(self, widget, column_id): + def _toggle_rpt_archived(self, widget, column_id): """ Call gw_fct_set_rpt_archived with selected result_id :param QTableView widget: origin :param table_name: table origin @@ -291,9 +318,12 @@ def _set_rpt_archived(self, widget, column_id): row = selected_list[0].row() col = tools_qt.get_col_index_by_col_name(widget, str(column_id)) result_id = widget.model().index(row, col).data() + col = tools_qt.get_col_index_by_col_name(widget, "status") + status = widget.model().index(row, col).data() # check corporate - extras = f'"result_id":"{result_id}"' + action = 'RESTORE' if status == 'ARCHIVED' else 'ARCHIVE' + extras = f'"result_id":"{result_id}", "action": "{action}"' body = tools_gw.create_body(extras=extras) result = tools_gw.execute_procedure('gw_fct_set_rpt_archived', body) @@ -368,17 +398,67 @@ def _epa2data(self, widget, column_id): # Refresh table self._fill_manager_table() - def _set_result_id(self, dialog, widget): + + def _manage_edit_row(self, dialog, widget): + + # Get selected rows selected_list = widget.selectionModel().selectedRows() if len(selected_list) == 0: message = "Any record selected" - tools_qgis.show_warning(message, dialog=dialog) + tools_qgis.show_warning(message, dialog=self.dlg_manager) return + index = selected_list[0] + + columnname = "descript" + column = tools_qt.get_col_index_by_col_name(widget, columnname) + row = index.row() + model = widget.model() + value = model.item(row, column).text() + header = model.headerData(column, Qt.Horizontal) + result_id = model.data(model.index(row, 0)) + + edit_dialog = GwEditDialog(dialog, title=f"Edit {header}", label_text=f"Set new '{header}' value for result '{result_id}':", + widget_type="QTextEdit", initial_value=value) + if edit_dialog.exec_() == QDialog.Accepted: + new_value = edit_dialog.get_value() + self._update_data(result_id, columnname, new_value) + + + def _show_inp_data(self, dialog, widget): + # Get selected rows + selected_list = widget.selectionModel().selectedRows() + if len(selected_list) == 0: + message = "Any record selected" + tools_qgis.show_warning(message, dialog=self.dlg_manager) + return + + result_ids = [] + for index in selected_list: + result_id = widget.model().data(widget.model().index(index.row(), 0)) + result_ids.append(result_id) + + if not result_ids: + return + + result_ids_json = "ARRAY[" + ",".join(f"'{result_id}'" for result_id in result_ids) + "]" + json_result = tools_gw.execute_procedure( + function_name="gw_fct_getinpdata", + parameters=result_ids_json, + schema_name=f"{lib_vars.schema_name}", + commit=False + ) + + if not json_result or 'status' not in json_result or json_result['status'] == 'Failed': + message = "Failed to retrieve GeoJSON data." + tools_qgis.show_warning(message, dialog=self.dlg_manager) + return + + # Zoom layer arc if exists + arc_layer = tools_qgis.get_layer_by_layername("Rpt INP Arc") + if arc_layer: + tools_qgis.zoom_to_layer(arc_layer) + + message = "Data retrieved and displayed successfully." + tools_qgis.show_info(message, dialog=self.dlg_manager) - row = selected_list[0].row() - table_model = widget.model() - result_id = table_model.data(table_model.index(row, 0)) - sql = f"DELETE FROM selector_rpt_main WHERE cur_user = current_user;" \ - f"INSERT INTO selector_rpt_main (result_id, cur_user) VALUES ('{result_id}', current_user);" - tools_db.execute_sql(sql) # endregion diff --git a/core/toolbars/plan/netscenario_manager_btn.py b/core/toolbars/plan/netscenario_manager_btn.py index b255c9556..d694d4d2a 100644 --- a/core/toolbars/plan/netscenario_manager_btn.py +++ b/core/toolbars/plan/netscenario_manager_btn.py @@ -79,8 +79,6 @@ def _open_netscenario_manager(self): self.dlg_netscenario_manager.btn_execute.clicked.connect(partial(self._execute_current_netscenario)) self.dlg_netscenario_manager.btn_delete.clicked.connect(partial(self._delete_selected_netscenario)) self.dlg_netscenario_manager.btn_delete.clicked.connect(partial(tools_gw.refresh_selectors)) - self.tbl_netscenario.doubleClicked.connect(partial(self._update_current_netscenario, - self.dlg_netscenario_manager, self.tbl_netscenario)) self.tbl_netscenario.doubleClicked.connect(self._open_netscenario) self.dlg_netscenario_manager.btn_update_netscenario.clicked.connect( partial(self._update_current_netscenario, self.dlg_netscenario_manager, self.tbl_netscenario)) diff --git a/core/toolbars/plan/price_manager_button.py b/core/toolbars/plan/price_manager_button.py deleted file mode 100644 index 25a46ef77..000000000 --- a/core/toolbars/plan/price_manager_button.py +++ /dev/null @@ -1,22 +0,0 @@ -""" -This file is part of Giswater 3 -The program is free software: you can redistribute it and/or modify it under the terms of the GNU -General Public License as published by the Free Software Foundation, either version 3 of the License, -or (at your option) any later version. -""" -# -*- coding: utf-8 -*- -from ..dialog import GwAction -from ...shared.psector import GwPsector - - -class GwPriceManagerButton(GwAction): - """ Button 50: Price manager """ - - def __init__(self, icon_path, action_name, text, toolbar, action_group): - super().__init__(icon_path, action_name, text, toolbar, action_group) - self.psector = GwPsector() - - - def clicked_event(self): - self.psector.manage_prices() - diff --git a/core/toolbars/toc/add_child_layer_button.py b/core/toolbars/toc/add_child_layer_button.py index f7bc9d20b..bc7b40d43 100644 --- a/core/toolbars/toc/add_child_layer_button.py +++ b/core/toolbars/toc/add_child_layer_button.py @@ -123,13 +123,12 @@ def _add_child_layer(self): if not geom_field: continue geom_field = geom_field.replace(" ", "") - style_id = field['style_id'] group = context['level_1'] sub_group = context['level_2'] sub_sub_group = context.get('level_3') widgetAction.defaultWidget().stateChanged.connect( partial(self._check_action_ischecked, layer_name, the_geom, geom_field, group, sub_group, - sub_sub_group, style_id, alias.strip())) + sub_sub_group, alias.strip())) main_menu.exec_(click_point) @@ -143,20 +142,19 @@ def _manage_load_all(self, menu, state=None): def _check_action_ischecked(self, tablename, the_geom=None, field_id=None, group=None, - sub_group=None, sub_sub_group=None, style_id=None, alias=None, state=None): + sub_group=None, sub_sub_group=None, alias=None, state=None): """ Control if user check or uncheck action menu, then add or remove layer from toc :param tablename: Postgres table name (String) :param the_geom: Geometry field of the table (String) :param field_id: Field id of the table (String) :param child_layers: List of layers (StringList) :param group: Name of the group that will be created in the toc (String) - :param style_id: Id of the style we want to load (integer or String) :param is_checked: This parameter is sent by the action itself with the trigger (Bool) """ if state == 2: layer = tools_qgis.get_layer_by_tablename(tablename) if layer is None: - tools_gw.add_layer_database(tablename, the_geom, field_id, group, sub_group, style_id, alias, sub_sub_group=sub_sub_group) + tools_gw.add_layer_database(tablename, the_geom, field_id, group, sub_group, alias=alias, sub_sub_group=sub_sub_group) elif state == 0: layer = tools_qgis.get_layer_by_tablename(tablename) if layer is not None: diff --git a/core/toolbars/toc/epa_world_button.py b/core/toolbars/toc/epa_world_button.py deleted file mode 100644 index 1e1a3c116..000000000 --- a/core/toolbars/toc/epa_world_button.py +++ /dev/null @@ -1,196 +0,0 @@ -""" -This file is part of Giswater 3 -The program is free software: you can redistribute it and/or modify it under the terms of the GNU -General Public License as published by the Free Software Foundation, either version 3 of the License, -or (at your option) any later version. -""" -# -*- coding: utf-8 -*- - -from qgis.PyQt.QtCore import QObject - -from ..dialog import GwAction -from ...utils import tools_gw -from ....libs import tools_qgis, tools_db, tools_os, tools_qt -from .... import global_vars - -layers_subsetstrings = {} -layers_stylesheets = {} - - -def _get_sectors(): - sectors = "NULL" - - # get selected selectors - sql = f'SELECT sector_id FROM selector_sector WHERE cur_user = current_user' - rows = tools_db.get_rows(sql) - if rows: - sectors = ", ".join(str(x[0]) for x in rows) - - return sectors - - -def _get_layers(): - arc_layers = [lyr for lyr in [tools_qgis.get_layer_by_tablename('v_edit_arc')] if lyr is not None] - node_layers = [lyr for lyr in [tools_qgis.get_layer_by_tablename('v_edit_node')] if lyr is not None] - connec_layers = [lyr for lyr in [tools_qgis.get_layer_by_tablename('v_edit_connec')] if lyr is not None] - gully_layers = [lyr for lyr in [tools_qgis.get_layer_by_tablename('v_edit_gully')] if lyr is not None] - link_layers = [lyr for lyr in [tools_qgis.get_layer_by_tablename('v_edit_link')] if lyr is not None] - - return arc_layers, node_layers, connec_layers, gully_layers, link_layers - - -def is_epa_world_active(default=False): - return tools_os.set_boolean(tools_gw.get_config_parser("epa_world", "epa_world_active", 'user', 'session'), default) - - -def set_epa_world(_set_epa_world=None, selector_change=False, is_init=False): - - # Style - epa_style = {"Arc": 201, "Connec": 202, "Link": 203, "Node": 204, "Gully": 205} - - # Get layers - arc_layers, node_layers, connec_layers, gully_layers, link_layers = _get_layers() - - # Get set_epa_world from config - if _set_epa_world is None: - _set_epa_world = is_epa_world_active(False) - # Deactivate EPA - if not _set_epa_world: - tools_gw.set_config_parser("epa_world", "epa_world_active", str(_set_epa_world), 'user', 'session') - # Disable current filters and set previous layer filters - for layer in arc_layers + node_layers + connec_layers + gully_layers + link_layers: - if is_init: - # Manage style & filter - style_manager = layer.styleManager() - if style_manager.currentStyle() == "GwEpaStyle": - layer.setSubsetString(None) - if not style_manager.setCurrentStyle("GwStyle"): - style_manager.setCurrentStyle(tools_qt.tr('default', context_name='QgsMapLayerStyleManager')) - else: - layer.setSubsetString(layers_subsetstrings.get(layer.name())) - - # Manage style - style_manager = layer.styleManager() - style_manager.setCurrentStyle(layers_stylesheets.get(layer.name())) - - # Activate EPA - else: - tools_gw.set_config_parser("epa_world", "epa_world_active", str(_set_epa_world), 'user', 'session') - if not selector_change: - # Get layers subsetStrings - for layer in arc_layers + node_layers + connec_layers + gully_layers + link_layers: - layers_subsetstrings[layer.name()] = layer.subsetString() - - # Manage style - style_manager = layer.styleManager() - layers_stylesheets[layer.name()] = style_manager.currentStyle() - - if style_manager.setCurrentStyle("GwEpaStyle"): - pass - else: - style_id = epa_style.get(f"{layer.name()}", 204) - tools_gw.set_layer_style(style_id, layer, True) - - sectors = _get_sectors() - # Get inp_options_networkmode - inp_options_networkmode = tools_gw.get_config_value('inp_options_networkmode') - try: - inp_options_networkmode = int(inp_options_networkmode[0]) - except (ValueError, IndexError, TypeError): - pass - - body = tools_gw.create_body() - json_result = tools_gw.execute_procedure('gw_fct_getnodeborder', body) - nodes = json_result.get('body', {}).get('data', {}).get('nodes', []) - - sql = f"is_operative = true AND epa_type != 'UNDEFINED' AND sector_id IN ({sectors})" - - # arc - for layer in arc_layers: - layer.setSubsetString(sql) - - # node - for layer in node_layers: - nodes_sql = sql - if nodes: - node_ids = "','".join(str(node) for node in nodes) - nodes_sql += " OR node_id IN ('{}')".format(node_ids) - layer.setSubsetString(nodes_sql) - - if global_vars.project_type == 'ws': - # ws connec - for layer in connec_layers: - if inp_options_networkmode == 4: - layer.setSubsetString(sql) - else: - layer.setSubsetString("FALSE") - - # ws link - for layer in link_layers: - if inp_options_networkmode == 4: - layer.setSubsetString(sql) - else: - layer.setSubsetString("FALSE") - - elif global_vars.project_type == 'ud': - # ud connec - for layer in connec_layers: - layer.setSubsetString("FALSE") - - # ud gully - for layer in gully_layers: - if inp_options_networkmode == 2: - layer.setSubsetString(sql) - else: - layer.setSubsetString("FALSE") - - # ud link - for layer in link_layers: - if inp_options_networkmode == 2: - layer.setSubsetString(sql + ' AND feature_type = \'GULLY\'') - else: - layer.setSubsetString("FALSE") - - return _set_epa_world - - -class GwEpaWorldButton(GwAction): - """ Button 308: Switch EPA world """ - - def __init__(self, icon_path, action_name, text, toolbar, action_group): - - super().__init__(icon_path, action_name, text, toolbar, action_group) - self.action.setCheckable(True) - tools_gw.set_config_parser("epa_world", "epa_world_active", 'false', 'user', 'session') - - def clicked_event(self): - - self._switch_epa_world() - - # region private functions - - def _switch_epa_world(self): - - # Check world type - epa_world_active = is_epa_world_active() - - # Apply filters - _set_epa_world = not epa_world_active - - set_epa_world(_set_epa_world) - - # Set action checked - self._action_set_checked(_set_epa_world) - - # Show message - if _set_epa_world: - msg = "EPA point of view activated" - else: - msg = "EPA point of view deactivated" - tools_qgis.show_info(msg) - - def _action_set_checked(self, checked): - # Set checked - self.action.setChecked(checked) - - # endregion diff --git a/core/toolbars/toc/layerstyle_change_button.py b/core/toolbars/toc/layerstyle_change_button.py new file mode 100644 index 000000000..57baff5e4 --- /dev/null +++ b/core/toolbars/toc/layerstyle_change_button.py @@ -0,0 +1,118 @@ +""" +This file is part of Giswater 3 +The program is free software: you can redistribute it and/or modify it under the terms of the GNU +General Public License as published by the Free Software Foundation, either version 3 of the License, +or (at your option) any later version. +""" +# -*- coding: utf-8 -*- +import json +from functools import partial + +from typing import List, Tuple, Optional +from qgis.PyQt.QtCore import QObject, QPoint +from qgis.PyQt.QtWidgets import QMenu, QAction +from qgis.PyQt.QtGui import QCursor +from qgis.core import QgsMapLayerStyle +from ..dialog import GwAction +from ...utils import tools_gw +from ....libs import tools_qgis, tools_db + + +def get_contexts_params() -> List[Tuple[int, str]]: + + # TODO: manage roles + sql = """ + SELECT id, idval, addparam + FROM config_style + WHERE is_templayer = false AND active = true + """ + rows = tools_db.get_rows(sql) + + if not rows: + return [] + + # Process rows to extract the order and sort them accordingly + processed_rows = [] + for row in rows: + id, idval, addparam = row + order_by = 999 # Default order if not specified + if addparam: + try: + order_by = addparam.get("orderBy", 999) + except Exception: + pass + + processed_rows.append((id, idval, order_by)) + + # Sort the rows by order_by + processed_rows.sort(key=lambda x: x[2]) + + return [(row[0], row[1]) for row in processed_rows] + + +def get_styles_for_context(styleconfig_id: int) -> List[Tuple[str, str]]: + """Fetch styles from the sys_style table for a given context.""" + + sql = f"SELECT layername, stylevalue FROM sys_style WHERE styleconfig_id = {styleconfig_id}" + rows = tools_db.get_rows(sql) + return [(row[0], row[1]) for row in rows] if rows else [] + + +def apply_styles_to_layers(styleconfig_id: int, style_name: str, force_refresh: bool = False) -> None: + """Apply styles to layers based on the selected context.""" + + styles = get_styles_for_context(styleconfig_id) + for layername, qml in styles: + layer = tools_qgis.get_layer_by_tablename(layername) + if layer: + valid_qml, error_message = tools_gw.validate_qml(qml) + if not valid_qml: + msg = "The QML file is invalid" + tools_qgis.show_warning(msg, parameter=error_message, title=style_name) + else: + style_manager = layer.styleManager() + + if (style_manager is None or style_manager.currentStyle() == style_name) and not force_refresh: + continue + + # Set the style or add it if it doesn't exist + if not style_manager.setCurrentStyle(style_name) or force_refresh: + style = QgsMapLayerStyle() + style.readFromLayer(layer) + style_manager.addStyle(style_name, style) + style_manager.setCurrentStyle(style_name) + tools_qgis.create_qml(layer, qml) + + +class GwLayerStyleChangeButton(GwAction): + """Button 308: Switch layers' styles""" + + def __init__(self, icon_path: str, action_name: str, text: str, toolbar: QObject, action_group: QObject): + super().__init__(icon_path, action_name, text, toolbar, action_group) + + def clicked_event(self) -> None: + """Show the menu directly when the button is clicked.""" + + self.menu: QMenu = QMenu() + self._populate_menu() + cursor = QCursor() + x = cursor.pos().x() + y = cursor.pos().y() + click_point = QPoint(x + 5, y + 5) + self.menu.exec_(click_point) + + def _populate_menu(self) -> None: + """Populate the menu with available contexts.""" + + # contexts = get_available_contexts() + contexts_params = get_contexts_params() + for styleconfig_id, style_name in contexts_params: + action: QAction = QAction(style_name, self.menu) + action.triggered.connect(partial(self._apply_context, styleconfig_id, style_name)) + self.menu.addAction(action) + + def _apply_context(self, styleconfig_id: int, style_name: str) -> None: + """Apply styles for the selected context.""" + + apply_styles_to_layers(styleconfig_id, style_name) + tools_qgis.show_info(f"Applied styles for context: {style_name}") diff --git a/core/toolbars/utilities/csv_btn.py b/core/toolbars/utilities/csv_btn.py index 5f7adf09b..9f6f52aaf 100644 --- a/core/toolbars/utilities/csv_btn.py +++ b/core/toolbars/utilities/csv_btn.py @@ -104,7 +104,8 @@ def _populate_combos(self, combo, field_id, fields, table_name): "role_edit": "'role_basic', 'role_om', 'role_edit'", "role_epa": "'role_basic', 'role_om', 'role_edit', 'role_epa'", "role_master": "'role_basic', 'role_om', 'role_edit', 'role_epa', 'role_master'", - "role_admin": "'role_basic', 'role_om', 'role_edit', 'role_epa', 'role_master', 'role_admin'"} + "role_admin": "'role_basic', 'role_om', 'role_edit', 'role_epa', 'role_master', 'role_admin'", + "role_system": "''role_basic', 'role_om', 'role_edit', 'role_epa', 'role_master', 'role_admin, 'role_system'"} sql = (f"SELECT DISTINCT({field_id}), {fields}" f" FROM {table_name}" diff --git a/core/toolbars/utilities/mapzone_manager.py b/core/toolbars/utilities/mapzone_manager.py index e2aa6e9d7..240847c44 100644 --- a/core/toolbars/utilities/mapzone_manager.py +++ b/core/toolbars/utilities/mapzone_manager.py @@ -10,6 +10,7 @@ from functools import partial from sip import isdeleted +from qgis.PyQt.QtGui import QCursor from qgis.PyQt.QtCore import Qt, QPoint from qgis.PyQt.QtWidgets import QAction, QMenu, QTableView, QAbstractItemView, QGridLayout, QLabel, QWidget, QComboBox from qgis.PyQt.QtSql import QSqlTableModel @@ -63,6 +64,11 @@ def manage_mapzones(self): qtableview.setObjectName(f"tbl_{view}") qtableview.clicked.connect(partial(self._manage_highlight, qtableview, view)) qtableview.doubleClicked.connect(partial(self.manage_update, self.mapzone_mng_dlg, None)) + + # Populate custom context menu + qtableview.setContextMenuPolicy(Qt.CustomContextMenu) + qtableview.customContextMenuRequested.connect(partial(self._show_context_menu, qtableview)) + tab_idx = self.mapzone_mng_dlg.main_tab.addTab(qtableview, f"{view.split('_')[-1].capitalize()}") self.mapzone_mng_dlg.main_tab.widget(tab_idx).setObjectName(view) @@ -151,7 +157,7 @@ def _fill_mapzone_table(self, set_edit_triggers=QTableView.NoEditTriggers, expr= model = QSqlTableModel(db=lib_vars.qgis_db_credentials) table_name = self.table_name if show_all: - table_name = table_name.replace('v_ui_', '') + table_name = table_name.replace('v_ui_', 'vu_') model.setTable(table_name) # model.setFilter(f"dscenario_id = {self.selected_dscenario_id}") model.setEditStrategy(QSqlTableModel.OnFieldChange) @@ -383,6 +389,32 @@ def get_snapped_feature_id(self, dialog, action, layer_name, option, widget_name partial(self._get_id, dialog, action, option, emit_point, child_type), 'mapzone_manager_snapping', 'get_snapped_feature_id_ep_canvasClicked_get_id') + def _show_context_menu(self, qtableview, pos): + """ Show custom context menu """ + menu = QMenu(qtableview) + + action_create = QAction("Create", qtableview) + action_create.triggered.connect(partial(self.manage_create, self.mapzone_mng_dlg, qtableview)) + menu.addAction(action_create) + + action_update = QAction("Update", qtableview) + action_update.triggered.connect(partial(self.manage_update, self.mapzone_mng_dlg, qtableview)) + menu.addAction(action_update) + + action_delete = QAction("Delete", qtableview) + action_delete.triggered.connect(partial(self._manage_delete)) + menu.addAction(action_delete) + + action_toggle_active = QAction("Toggle Active", qtableview) + action_toggle_active.triggered.connect(self._manage_toggle_active) + menu.addAction(action_toggle_active) + + action_config = QAction("Config", qtableview) + action_config.triggered.connect(partial(self.manage_config, self.mapzone_mng_dlg, qtableview)) + menu.addAction(action_config) + + menu.exec(QCursor.pos()) + def _mouse_moved(self, layer, point): """ Mouse motion detection """ @@ -495,7 +527,6 @@ def _add_node_parent(self, dialog): node_parent_id = self.node_parent to_arc_list = json.dumps(list(self.to_arc_list)) preview = tools_qt.get_text(dialog, 'txt_preview') - parameters = f'"action": "ADD", "configZone": "{self.mapzone_type}", "mapzoneId": "{self.mapzone_id}", ' \ f'"nodeParent": "{node_parent_id}", "toArc": {to_arc_list}' if self.netscenario_id is not None: @@ -637,7 +668,8 @@ def _accept_config(self, dialog): extras = f'"parameters": {{{parameters}}}' body = tools_gw.create_body(extras=extras) json_result = tools_gw.execute_procedure('gw_fct_config_mapzones', body) - if json_result is None: + if not json_result or 'status' not in json_result: + tools_qgis.show_message("Failed to get a valid response from gw_fct_config_mapzones.", level=2) return if 'status' in json_result and json_result['status'] == 'Accepted': diff --git a/core/toolbars/utilities/style_manager.py b/core/toolbars/utilities/style_manager.py new file mode 100644 index 000000000..a42d41907 --- /dev/null +++ b/core/toolbars/utilities/style_manager.py @@ -0,0 +1,584 @@ +""" +This file is part of Giswater 3 +The program is free software: you can redistribute it and/or modify it under the terms of the GNU +General Public License as published by the Free Software Foundation, either version 3 of the License, +or (at your option) any later version. +""" +# -*- coding: utf-8 -*- +from functools import partial +import json +import tempfile + +from ..toc.layerstyle_change_button import apply_styles_to_layers +from ...ui.ui_manager import GwStyleManagerUi, GwCreateStyleGroupUi +from ...utils import tools_gw +from ....libs import lib_vars, tools_db, tools_qgis, tools_qt +from .... import global_vars + +from qgis.PyQt.QtWidgets import QDialog, QLabel, QHeaderView, QTableView, QMenu, QAction, QMessageBox +from qgis.PyQt.QtCore import Qt +from qgis.PyQt.QtSql import QSqlTableModel + + +class GwStyleManager: + + def __init__(self): + """Initializes the StyleManager with basic configurations.""" + self.plugin_dir = lib_vars.plugin_dir + self.iface = global_vars.iface + self.schema_name = lib_vars.schema_name + self.style_mng_dlg = None + + + def manage_styles(self): + """Manages the user interface for style management.""" + self.style_mng_dlg = GwStyleManagerUi(self) + tools_gw.load_settings(self.style_mng_dlg) + + # Add icons to the buttons + tools_gw.add_icon(self.style_mng_dlg.btn_add_group, "111", sub_folder="24x24") + tools_gw.add_icon(self.style_mng_dlg.btn_delete_group, "112", sub_folder="24x24") + + # Load layers and populate the menu + layers_data = self._load_layers_with_geom() + if layers_data: + self._populate_layers_menu(layers_data) + + # Populate the combobox with style groups + self.populate_stylegroup_combobox() + self._load_styles() + + # Connect signals to the corresponding methods + self.style_mng_dlg.btn_add_group.clicked.connect(partial(self._add_style_group, self.style_mng_dlg)) + self.style_mng_dlg.btn_delete_group.clicked.connect(self._delete_style_group) + self.style_mng_dlg.cmb_stylegroup.currentIndexChanged.connect(self._filter_styles) + self.style_mng_dlg.txt_style_name.textChanged.connect(self._filter_styles) + + # Connect signals to the style buttons + self.style_mng_dlg.btn_delete_style.clicked.connect(self._delete_selected_styles) + self.style_mng_dlg.btn_update_style.clicked.connect(self._update_selected_style) + self.style_mng_dlg.btn_refresh_all.clicked.connect(self._refresh_all_styles) + + # Open the style management dialog + tools_gw.open_dialog(self.style_mng_dlg, 'style_manager') + + + def populate_stylegroup_combobox(self): + """Populates the style group combobox with data from the database.""" + contexts_params = self.get_contexts_params() + + self.style_mng_dlg.cmb_stylegroup.clear() + self.style_mng_dlg.cmb_stylegroup.addItem("") + + for context_id, context_name in contexts_params: + self.style_mng_dlg.cmb_stylegroup.addItem(context_name, context_id) + + def get_contexts_params(self): + """Retrieves style context parameters from the database.""" + sql = """ + SELECT id, idval, addparam + FROM config_style + WHERE id != 0 AND (is_templayer = false OR is_templayer IS NULL) + """ + rows = tools_db.get_rows(sql) + + if not rows: + return [] + + processed_rows = [] + for row in rows: + id, idval, addparam = row + order_by = 999 + if addparam: + try: + order_by = addparam.get("orderBy", 999) + except Exception: + pass + + processed_rows.append((id, idval, order_by)) + + processed_rows.sort(key=lambda x: x[2]) + + return [(row[0], row[1]) for row in processed_rows] + + + def _load_sys_roles(self, dialog_create): + """Load roles in combobox.""" + sql = "SELECT id FROM sys_role" + roles = tools_db.get_rows(sql) + dialog_create.sys_role.clear() + for role in roles: + dialog_create.sys_role.addItem(role[0]) + + + def _add_style_group(self, dialog): + """Logic for adding a style group using the Qt Designer dialog.""" + dialog_create = GwCreateStyleGroupUi(self) + tools_gw.load_settings(dialog_create) + + self._load_sys_roles(dialog_create) + + dialog_create.btn_add.clicked.connect(partial(self._handle_add_feature, dialog_create)) + dialog_create.feature_id.textChanged.connect(partial(self._check_style_exists, dialog_create)) + dialog_create.idval.textChanged.connect(partial(self._check_style_exists, dialog_create)) + + tools_gw.open_dialog(dialog_create, dlg_name='create_style_group') + + + def _handle_add_feature(self, dialog_create): + """Handles the logic when the add button is clicked.""" + + # Gather data from the dialog fields + feature_id = dialog_create.feature_id.text() + idval = dialog_create.idval.text() + descript = dialog_create.descript.text() + sys_role = dialog_create.sys_role.currentText() + + # Validate that the mandatory fields are not empty + if not feature_id or not idval: + tools_qgis.show_warning("Feature ID and Idval cannot be empty.", dialog=self.style_mng_dlg) + return + + # Start building the SQL query + sql = f"INSERT INTO config_style (id, idval" + + # Initialize the values part with the mandatory fields + values = f"'{feature_id}', '{idval}'" + + # Add optional fields if they are not empty + if descript: + sql += ", descript" + values += f", '{descript}'" + if sys_role: + sql += ", sys_role" + values += f", '{sys_role}'" + + # Close the fields section of the SQL query + sql += f") VALUES ({values}) RETURNING id;" + + try: + # Execute the SQL command and retrieve the new ID + tools_db.execute_sql(sql) + tools_qgis.show_info("Feature added successfully!", dialog=self.style_mng_dlg) + self.populate_stylegroup_combobox() + dialog_create.accept() + + except Exception as e: + tools_qgis.show_warning(f"Failed to add feature: {e}", dialog=self.style_mng_dlg) + + + def _filter_styles(self): + """Applies a filter based on the text in the textbox and the selection in the combobox.""" + search_text = self.style_mng_dlg.txt_style_name.text().strip() + selected_stylegroup_name = self.style_mng_dlg.cmb_stylegroup.currentText().strip() + + filter_str = "" + + if search_text: + filter_str += f"layername LIKE '%{search_text}%'" + + if selected_stylegroup_name: + if filter_str: + filter_str += " AND " + filter_str += f"category = '{selected_stylegroup_name}'" + + model = self.style_mng_dlg.tbl_style.model() + model.setFilter(filter_str) + model.select() + + + def _load_styles(self): + """Loads styles into the table based on the selected style group.""" + selected_stylegroup_name = self.style_mng_dlg.cmb_stylegroup.currentText() + + # Prepare the SQL query to load data from the view + model = QSqlTableModel(db=lib_vars.qgis_db_credentials) + model.setTable(f"{lib_vars.schema_name}.v_ui_sys_style") + + if selected_stylegroup_name: + # Apply filter based on the selected style group + model.setFilter(f"category = '{selected_stylegroup_name}'") + model.select() + + # Check for any errors + if model.lastError().isValid(): + tools_qgis.show_warning(f"Database Error: {model.lastError().text()}", dialog=self.style_mng_dlg) + return + + self.style_mng_dlg.tbl_style.setModel(model) + model.setEditStrategy(QSqlTableModel.OnManualSubmit) + self.style_mng_dlg.tbl_style.setSelectionBehavior(QTableView.SelectRows) + self.style_mng_dlg.tbl_style.setEditTriggers(QTableView.NoEditTriggers) + + # Customize table view + header = self.style_mng_dlg.tbl_style.horizontalHeader() + header.setSectionResizeMode(QHeaderView.Interactive) + header.setStretchLastSection(True) + + + def _check_style_exists(self, dialog_create): + feature_id_text = dialog_create.feature_id.text().strip() + idval_text = dialog_create.idval.text().strip() + color = "border: 1px solid red" + has_error = False + + dialog_create.feature_id.setStyleSheet("") + dialog_create.feature_id.setToolTip("") + dialog_create.idval.setStyleSheet("") + dialog_create.idval.setToolTip("") + + # Validates Feature ID if it's not empty + if feature_id_text: + try: + feature_id = int(feature_id_text) + sql_id = f"SELECT id FROM config_style WHERE id = '{feature_id}'" + row_id = tools_db.get_row(sql_id, log_info=False) + + if row_id: + dialog_create.feature_id.setStyleSheet(color) + dialog_create.feature_id.setToolTip("Feature ID already exists") + has_error = True + except ValueError: + dialog_create.feature_id.setStyleSheet(color) + dialog_create.feature_id.setToolTip("Feature ID must be an integer") + has_error = True + + # Validates Idval if it's not empty + if idval_text: + sql_idval = f"SELECT idval FROM config_style WHERE idval = '{idval_text}'" + row_idval = tools_db.get_row(sql_idval, log_info=False) + + if row_idval: + dialog_create.idval.setStyleSheet(color) + dialog_create.idval.setToolTip("Category already exists") + has_error = True + else: + dialog_create.idval.setStyleSheet("") + dialog_create.idval.setToolTip("") + + dialog_create.btn_add.setEnabled(not has_error) + + + def _delete_style_group(self): + """Logic for deleting a style group with cascade deletion.""" + selected_stylegroup_name = self.style_mng_dlg.cmb_stylegroup.currentText() + + if not selected_stylegroup_name: + tools_qgis.show_warning("Please select a style group to delete.", dialog=self.style_mng_dlg) + return + + confirm = tools_qt.show_question( + f"Are you sure you want to delete the style group '{selected_stylegroup_name}'?\n\n" + "This will also delete all related entries in the sys_style table.", + "Confirm Cascade Delete", + force_action=True + ) + + if not confirm: + return + + try: + sql_delete_related = f"DELETE FROM sys_style WHERE styleconfig_id = (SELECT id FROM config_style WHERE idval = '{selected_stylegroup_name}')" + tools_db.execute_sql(sql_delete_related) + + sql_delete_group = f"DELETE FROM config_style WHERE idval = '{selected_stylegroup_name}'" + tools_db.execute_sql(sql_delete_group) + + tools_qgis.show_info(f"Style group '{selected_stylegroup_name}' and related entries have been deleted.", dialog=self.style_mng_dlg) + self.populate_stylegroup_combobox() + self._load_styles() + + except Exception as e: + tools_qgis.show_warning(f"Failed to delete style group: {e}", dialog=self.style_mng_dlg) + + + #Functions for btn style top right of the dialog + def _delete_selected_styles(self): + """Logic for deleting the selected styles from the table.""" + selected_rows = self.style_mng_dlg.tbl_style.selectionModel().selectedRows() + + if len(selected_rows) == 0: + tools_qgis.show_warning("Please select one or more styles to delete.", dialog=self.style_mng_dlg) + return + + confirm = tools_qt.show_question( + "Are you sure you want to delete the selected styles?", + "Confirm Deletion", + force_action=True + ) + + if not confirm: + return + + try: + for index in selected_rows: + row = index.row() + layername_index = self.style_mng_dlg.tbl_style.model().index(row, 0) + idval_index = self.style_mng_dlg.tbl_style.model().index(row, 1) + + layername = self.style_mng_dlg.tbl_style.model().data(layername_index) + idval = self.style_mng_dlg.tbl_style.model().data(idval_index) + + sql_get_id = ( + f"SELECT id FROM {lib_vars.schema_name}.config_style " + f"WHERE idval = '{idval}';" + ) + row_result = tools_db.get_row(sql_get_id) + + if not row_result: + tools_qgis.show_warning(f"Could not find the corresponding ID for the selected style {idval}.", dialog=self.style_mng_dlg) + continue + + styleconfig_id = row_result[0] + + # Delete the selected row from sys_style using the retrieved numeric `styleconfig_id` + sql_delete_style = ( + f"DELETE FROM {lib_vars.schema_name}.sys_style " + f"WHERE layername = '{layername}' AND styleconfig_id = {styleconfig_id};" + ) + tools_db.execute_sql(sql_delete_style) + + tools_qgis.show_info("Selected styles were successfully deleted.", dialog=self.style_mng_dlg) + self._load_styles() + + except Exception as e: + tools_qgis.show_warning(f"Failed to delete styles: {e}", dialog=self.style_mng_dlg) + + + def _load_layers_with_geom(self): + """Load layers with geometry for the Add Style button.""" + try: + body = tools_gw.create_body() + json_result = tools_gw.execute_procedure('gw_fct_getaddlayervalues', body) + if not json_result or json_result['status'] != 'Accepted': + tools_qgis.show_warning("Failed to load layers.", dialog=self.style_mng_dlg) + return None + + return json_result['body']['data']['fields'] + + except Exception as e: + tools_qgis.show_warning(f"Failed to load layers: {e}", dialog=self.style_mng_dlg) + return None + + + def _populate_layers_menu(self, layers): + """Populate the Add Style button with layers grouped by context.""" + try: + menu = QMenu(self.style_mng_dlg.btn_add_style) + dict_menu = {} + for layer in layers: + # Filter only layers that have a geometry field + if layer['geomField'] == "None" or not layer['geomField']: + continue # Skip layers without a geometry field + + context = json.loads(layer['context']) + + # Level 1 of the context + if 'level_1' in context and context['level_1'] not in dict_menu: + menu_level_1 = menu.addMenu(f"{context['level_1']}") + dict_menu[context['level_1']] = menu_level_1 + + # Level 2 of the context + if 'level_2' in context and f"{context['level_1']}_{context['level_2']}" not in dict_menu: + menu_level_2 = dict_menu[context['level_1']].addMenu(f"{context['level_2']}") + dict_menu[f"{context['level_1']}_{context['level_2']}"] = menu_level_2 + + # Level 3 of the context + if 'level_3' in context and f"{context['level_1']}_{context['level_2']}_{context['level_3']}" not in dict_menu: + menu_level_3 = dict_menu[f"{context['level_1']}_{context['level_2']}"].addMenu( + f"{context['level_3']}") + dict_menu[f"{context['level_1']}_{context['level_2']}_{context['level_3']}"] = menu_level_3 + + alias = layer['layerName'] if layer['layerName'] is not None else layer['tableName'] + alias = f"{alias} " + + # Add actions and submenus at the appropriate context level + if 'level_3' in context: + sub_menu = dict_menu[f"{context['level_1']}_{context['level_2']}_{context['level_3']}"] + else: + sub_menu = dict_menu[f"{context['level_1']}_{context['level_2']}"] + + action = QAction(alias, self.style_mng_dlg.btn_add_style) + action.triggered.connect(partial(self._add_layer_style, layer['tableName'], layer['geomField'])) + sub_menu.addAction(action) + + # Assign the menu to the button + self.style_mng_dlg.btn_add_style.setMenu(menu) + + except Exception as e: + tools_qgis.show_warning(f"Failed to load layers: {e}", dialog=self.style_mng_dlg) + + def _add_layer_style(self, table_name, geom_field): + """Add a new style for the specified layer, copying from 'GwBasic' if available.""" + try: + selected_stylegroup_name = self.style_mng_dlg.cmb_stylegroup.currentText().strip() + + if not selected_stylegroup_name: + tools_qgis.show_warning( + "Please select a style group before adding a new style.", dialog=self.style_mng_dlg + ) + return + + sql_get_id = ( + f"SELECT id FROM {lib_vars.schema_name}.config_style " + f"WHERE idval = '{selected_stylegroup_name}';" + ) + row_result = tools_db.get_row(sql_get_id) + + if not row_result: + tools_qgis.show_warning( + f"Could not find an ID for the style group '{selected_stylegroup_name}'.", dialog=self.style_mng_dlg + ) + return + + new_styleconfig_id = row_result[0] + sql_check_exists = ( + f"SELECT COUNT(*) " + f"FROM {lib_vars.schema_name}.sys_style " + f"WHERE layername = '{table_name}' AND styleconfig_id = {new_styleconfig_id};" + ) + style_exists = tools_db.get_row(sql_check_exists)[0] > 0 + + if style_exists: + tools_qgis.show_warning( + f"A style already exists for the layer '{table_name}' in the selected style group.", + dialog=self.style_mng_dlg + ) + return + + sql_gw_basic = ( + f"SELECT styletype, stylevalue, active " + f"FROM {lib_vars.schema_name}.sys_style " + f"WHERE layername = '{table_name}' AND styleconfig_id = (" + f"SELECT id FROM {lib_vars.schema_name}.config_style WHERE idval = 'GwBasic'" + f");" + ) + existing_style = tools_db.get_row(sql_gw_basic) + + if existing_style: + styletype, stylevalue, active = existing_style + stylevalue_clean = stylevalue.replace("'", "''") + else: + styletype = 'qml' + stylevalue_clean = '' + active = True + + sql_insert_style = ( + f"INSERT INTO {lib_vars.schema_name}.sys_style " + f"(layername, styleconfig_id, styletype, stylevalue, active) " + f"VALUES ('{table_name}', {new_styleconfig_id}, '{styletype}', '{stylevalue_clean}', {active});" + ) + + tools_db.execute_sql(sql_insert_style) + + # Show success message + msg = ( + f"A new style has been added to '{selected_stylegroup_name}' for the layer '{table_name}' " + f"using the 'GwBasic' style information.\n" + f"You can change it and use 'Update Style' to create a personalized version." + ) + tools_qgis.show_message(msg, 3, dialog=self.style_mng_dlg) + + self._load_styles() + + except Exception as e: + tools_qgis.show_warning( + f"An error occurred while adding the style for layer '{table_name}':\n{str(e)}", + dialog=self.style_mng_dlg + ) + + + def _update_selected_style(self): + """Update the selected styles in the database with the current QGIS layer style.""" + selected_rows = self.style_mng_dlg.tbl_style.selectionModel().selectedRows() + + if not selected_rows: + tools_qgis.show_warning("Please select one or more styles to update.", dialog=self.style_mng_dlg) + return + + try: + for index in selected_rows: + layername_index = self.style_mng_dlg.tbl_style.model().index(index.row(), 0) + idval_index = self.style_mng_dlg.tbl_style.model().index(index.row(), 1) + + layername = self.style_mng_dlg.tbl_style.model().data(layername_index) + idval = self.style_mng_dlg.tbl_style.model().data(idval_index) + + msg = f"Are you sure you want to update the style of {layername} ({idval}) with the symbology" \ + f" of the layer in the project? \nYou are going to lose previous information!" + + reply = tools_qt.show_question(msg, "Update Confirmation", force_action=True) + if not reply: + continue + + layer = tools_qgis.get_layer_by_tablename(layername) + if layer is None: + tools_qgis.show_warning(f"Layer '{layername}' not found in QGIS.", dialog=self.style_mng_dlg) + continue + + style_value = '' + with tempfile.NamedTemporaryFile(delete=False, suffix=".qml") as tmp_file: + layer.saveNamedStyle(tmp_file.name) + with open(tmp_file.name, 'r', encoding='utf-8') as file: + style_value = file.read() + + style_value = style_value.replace("'", "''") + + sql_get_id = ( + f"SELECT id FROM {lib_vars.schema_name}.config_style " + f"WHERE idval = '{idval}';" + ) + styleconfig_id = tools_db.get_row(sql_get_id) + if not styleconfig_id: + tools_qgis.show_warning(f"Could not find config_style ID for idval '{idval}'.", dialog=self.style_mng_dlg) + continue + + sql_update = ( + f"UPDATE {lib_vars.schema_name}.sys_style " + f"SET stylevalue = '{style_value}' " + f"WHERE layername = '{layername}' AND styleconfig_id = {styleconfig_id[0]}" + ) + tools_db.execute_sql(sql_update) + + msg = "Selected styles updated successfully!" + tools_qgis.show_success(msg, dialog=self.style_mng_dlg) + self._load_styles() + + except Exception as e: + tools_qgis.show_warning(f"Failed to update styles: {e}", dialog=self.style_mng_dlg) + + + def _refresh_all_styles(self): + """Refresh all styles in the database based on the current QGIS layer styles.""" + try: + # Get all loaded layers in the project + loaded_layers = self.iface.mapCanvas().layers() + set_styles = set() + + for layer in loaded_layers: + style_manager = layer.styleManager() + # Get all loaded styles in the layer + available_styles = style_manager.styles() + for style_name in available_styles: + set_styles.add(style_name) + + for style in set_styles: + sql_get_id = ( + f"SELECT id FROM {lib_vars.schema_name}.config_style " + f"WHERE idval = '{style}';" + ) + styleconfig_id = tools_db.get_row(sql_get_id) + + if styleconfig_id: + # Apply the style with force_refresh=True + apply_styles_to_layers(styleconfig_id[0], style, force_refresh=True) + # TODO: show message of all refreshed styles + # tools_qgis.show_warning(f"Style '{style}' not found in database.", dialog=self.style_mng_dlg) + + msg = "All layers have been successfully refreshed." + tools_qgis.show_success(msg) + self._load_styles() + + except Exception as e: + tools_qgis.show_warning(f"Database Error: {e}", dialog=self.style_mng_dlg) + diff --git a/core/toolbars/utilities/toolbox_btn.py b/core/toolbars/utilities/toolbox_btn.py index d5392b872..d7acde21b 100644 --- a/core/toolbars/utilities/toolbox_btn.py +++ b/core/toolbars/utilities/toolbox_btn.py @@ -638,8 +638,8 @@ def _populate_functions_dlg(self, dialog, result, module=tools_backend_calls): else: feature_types = result['functionparams'].get('featureType') self._populate_cmb_type(feature_types) - self.dlg_functions.cmb_feature_type.currentIndexChanged.connect(partial(self._populate_layer_combo)) - self._populate_layer_combo() + self.dlg_functions.cmb_feature_type.currentIndexChanged.connect(partial(self._populate_layer_combo, feature_types)) + self._populate_layer_combo(feature_types) tools_gw.build_dialog_options(dialog, result, 0, self.function_list, self.temp_layers_added, module) self._load_settings_values(dialog, result) self._load_parametric_values(dialog, result) @@ -704,8 +704,7 @@ def _get_all_group_layers(self, feature_type): return list_items - def _populate_layer_combo(self): - + def _populate_layer_combo(self, feature_types): feature_type = tools_qt.get_combo_value(self.dlg_functions, self.dlg_functions.cmb_feature_type, 0) self.layers = [] self.layers = self._get_all_group_layers(feature_type) @@ -714,12 +713,14 @@ def _populate_layer_combo(self): legend_layers = tools_qgis.get_project_layers() for feature_type, layer in self.layers: if layer in legend_layers: - elem = [] + layer_name = tools_qgis.get_layer_source_table_name(layer) - elem.append(layer.name()) - elem.append(layer_name) - elem.append(feature_type) - layers.append(elem) + if feature_types.get(feature_type.lower()) is not None and layer_name in feature_types.get(feature_type.lower()): + elem = [] + elem.append(layer.name()) + elem.append(layer_name) + elem.append(feature_type) + layers.append(elem) if not layers: elem = [f"There is no layer related to {feature_type}.", None, None] layers.append(elem) diff --git a/core/toolbars/utilities/utils_manager_btn.py b/core/toolbars/utilities/utils_manager_btn.py index 2d882f08b..46e86e566 100644 --- a/core/toolbars/utilities/utils_manager_btn.py +++ b/core/toolbars/utilities/utils_manager_btn.py @@ -12,10 +12,13 @@ from qgis.PyQt.QtCore import QPoint from qgis.PyQt.QtWidgets import QAction, QMenu +from .style_manager import GwStyleManager +from .... import global_vars from ..dialog import GwAction from .mapzone_manager import GwMapzoneManager from ...shared.info import GwInfo from ...shared.psector import GwPsector +from ...shared.workcat import GwWorkcat class GwUtilsManagerButton(GwAction): @@ -69,7 +72,7 @@ def _fill_utils_menu(self): del action action_group = self.action.property('action_group') - buttons = [['Mapzones manager', '_mapzones_manager'], ['Prices manager', '_prices_manager']] + buttons = [['Mapzones manager', '_mapzones_manager'], ['Workcat manager', '_workcat_manager'], ['Style manager', '_style_manager']] for button in buttons: button_name = button[0] @@ -87,11 +90,6 @@ def _fill_utils_menu(self): obj_action.triggered.connect(partial(getattr(self, button_function))) obj_action.triggered.connect(partial(self._save_last_selection, self.menu, button_function)) - - def _prices_manager(self): - self.psector = GwPsector() - self.psector.manage_prices() - # region mapzone manager functions def _mapzones_manager(self): @@ -99,3 +97,18 @@ def _mapzones_manager(self): self.mapzones_manager = GwMapzoneManager() self.mapzones_manager.manage_mapzones() # endregion + + # region workcat manager functions + + def _workcat_manager(self): + self.workcat = GwWorkcat(global_vars.iface, global_vars.canvas) + self.workcat.manage_workcats() + # endregion + + # region style manager functions + + def _style_manager(self): + self.style = GwStyleManager() + self.style.manage_styles() + + # endregion diff --git a/core/ui/dialog.py b/core/ui/dialog.py index 251fa954c..2602200b7 100644 --- a/core/ui/dialog.py +++ b/core/ui/dialog.py @@ -40,7 +40,8 @@ def __init__(self, class_obj, subtag=None): elif item.layout() is not None: self.layout().addLayout(item.layout(), row + 1, column, rowSpan, columnSpan) self.layout().addWidget(self.messageBar(), 0, 0, 1, -1) - except Exception: + except Exception as e: + print("Exception GWdialog: ", e) self._messageBar = global_vars.iface self.setProperty('class_obj', class_obj) diff --git a/core/ui/shared/info_workcat.ui b/core/ui/shared/info_workcat.ui index 0b8ed6d13..c09864f02 100644 --- a/core/ui/shared/info_workcat.ui +++ b/core/ui/shared/info_workcat.ui @@ -292,7 +292,14 @@ + cat_work_id + descript + link + workid_key_1 + workid_key_2 + builtdate btn_accept + btn_cancel diff --git a/core/ui/shared/visit.ui b/core/ui/shared/visit.ui index a9a96ab3c..68fce98c5 100644 --- a/core/ui/shared/visit.ui +++ b/core/ui/shared/visit.ui @@ -14,10 +14,14 @@ Visit - - - + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + @@ -318,9 +322,6 @@ - - - @@ -396,6 +397,9 @@ + + + @@ -677,18 +681,10 @@ - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - tab_widget - descript btn_add_geom button_box feature_id diff --git a/core/ui/toolbars/basic/info_feature.ui b/core/ui/toolbars/basic/info_feature.ui index 1afea31e2..e353f7eb8 100644 --- a/core/ui/toolbars/basic/info_feature.ui +++ b/core/ui/toolbars/basic/info_feature.ui @@ -53,6 +53,13 @@ + + + + Apply + + + @@ -88,8 +95,8 @@ 0 0 - 734 - 368 + 726 + 335 @@ -109,8 +116,8 @@ 0 0 - 734 - 368 + 98 + 28 @@ -144,8 +151,8 @@ 0 0 - 734 - 360 + 111 + 64 @@ -183,8 +190,8 @@ 0 0 - 734 - 360 + 98 + 42 diff --git a/core/ui/toolbars/basic/search_workcat.ui b/core/ui/toolbars/basic/search_workcat.ui index 723483e07..56327499d 100644 --- a/core/ui/toolbars/basic/search_workcat.ui +++ b/core/ui/toolbars/basic/search_workcat.ui @@ -6,8 +6,8 @@ 0 0 - 547 - 728 + 551 + 737 @@ -19,8 +19,8 @@ Workcat search - - + + @@ -48,7 +48,7 @@ - + 0 @@ -301,7 +301,17 @@ - + + + + 0 + 0 + + + + true + + @@ -370,7 +380,7 @@ - + diff --git a/core/ui/toolbars/edit/doc.ui b/core/ui/toolbars/edit/doc.ui index f62fa5ad6..65994c7e6 100644 --- a/core/ui/toolbars/edit/doc.ui +++ b/core/ui/toolbars/edit/doc.ui @@ -6,7 +6,7 @@ 0 0 - 303 + 361 431 @@ -38,11 +38,11 @@ Document - + - + 80 @@ -69,7 +69,7 @@ QFrame::Plain - Doc id: + Doc name: Qt::AutoText @@ -86,7 +86,7 @@ - + true @@ -332,6 +332,25 @@ + + + + + 0 + 0 + + + + + 0 + 25 + + + + Add geom + + + @@ -382,7 +401,7 @@ - 0 + 3 @@ -444,6 +463,123 @@ + + + Workcat + + + + + + + + + + + + + + + ../icons/111b.png../icons/111b.png + + + + + + + + + + + ../icons/112b.png../icons/112b.png + + + + + + + + + + + + + Psector + + + + + + + + + + + + + + + ../icons/111b.png../icons/111b.png + + + + + + + + + + + ../icons/112b.png../icons/112b.png + + + + + + + + + + + + + Visit + + + + + + + + + + + + + + + ../icons/111b.png../icons/111b.png + + + + + + + + + + + ../icons/112b.png../icons/112b.png + + + + + + + + + + @@ -455,13 +591,6 @@ - - - - Accept - - - @@ -475,6 +604,20 @@ + + + + Accept + + + + + + + Apply + + + diff --git a/core/ui/toolbars/edit/doc_manager.ui b/core/ui/toolbars/edit/doc_manager.ui index aa9871884..847075884 100644 --- a/core/ui/toolbars/edit/doc_manager.ui +++ b/core/ui/toolbars/edit/doc_manager.ui @@ -41,7 +41,7 @@ - + 0 @@ -54,9 +54,9 @@ - + - Filter by: Doc id + Filter by: Doc name @@ -95,6 +95,12 @@ + + + 0 + 0 + + Create diff --git a/core/ui/toolbars/plan/price_manager.ui b/core/ui/toolbars/edit/workcat_manager.ui similarity index 75% rename from core/ui/toolbars/plan/price_manager.ui rename to core/ui/toolbars/edit/workcat_manager.ui index 89e9b91ca..2d91c1710 100644 --- a/core/ui/toolbars/plan/price_manager.ui +++ b/core/ui/toolbars/edit/workcat_manager.ui @@ -1,17 +1,17 @@ - dlg_price_manager - + dlg_workcat_manager + 0 0 - 417 - 783 + 643 + 785 - Price result management + Workcat management @@ -20,64 +20,48 @@ - - - - - 0 - 0 - - - - Delete - - - - - + + Qt::Horizontal - 80 + 40 20 - + Close - - - - - - - Qt::Horizontal + + + + + 0 + 0 + - - - 40 - 20 - + + - + - + - Filter by: Result id + Filter by: Workcat name - - + + 0 @@ -85,27 +69,40 @@ - + Delete - - - - Current result + + + + Qt::Horizontal + + + + 80 + 20 + + + + + + + + true - + - + 0 0 - + Create diff --git a/core/ui/toolbars/epa/go2epa_manager.ui b/core/ui/toolbars/epa/go2epa_manager.ui index c3aac2052..6e84e2984 100644 --- a/core/ui/toolbars/epa/go2epa_manager.ui +++ b/core/ui/toolbars/epa/go2epa_manager.ui @@ -57,6 +57,13 @@ + + + + Close + + + @@ -64,7 +71,7 @@ - + @@ -90,14 +97,7 @@ - - - - Close - - - - + Set corporate @@ -114,13 +114,6 @@ - - - - true - - - @@ -134,10 +127,31 @@ - + - Archive + Toggle archive + + + + + + + Edit + + + + + + + true + + + + + + + Show inp data diff --git a/core/ui/toolbars/om/mincut.ui b/core/ui/toolbars/om/mincut.ui index 6f8a78966..9dc871e3e 100644 --- a/core/ui/toolbars/om/mincut.ui +++ b/core/ui/toolbars/om/mincut.ui @@ -993,11 +993,13 @@ false + + + - - + diff --git a/core/ui/toolbars/utilities/create_style_group.ui b/core/ui/toolbars/utilities/create_style_group.ui new file mode 100644 index 000000000..c63c5c279 --- /dev/null +++ b/core/ui/toolbars/utilities/create_style_group.ui @@ -0,0 +1,191 @@ + + + dlg_feature_add + + + + 0 + 0 + 405 + 255 + + + + Add category + + + + + + Cancel + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + + Data + + + + + + + + + 0 + 0 + + + + Category name: + + + + + + + + 0 + 0 + + + + Category ID: + + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 44 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 44 + 20 + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 44 + 20 + + + + + + + + Description: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 44 + 20 + + + + + + + + Role: + + + + + + + + + + + + + + + + Accept + + + + + + + mainTab + feature_id + idval + descript + sys_role + btn_add + btn_cancel + + + + diff --git a/core/ui/toolbars/utilities/style_manager.ui b/core/ui/toolbars/utilities/style_manager.ui new file mode 100644 index 000000000..439aff1c1 --- /dev/null +++ b/core/ui/toolbars/utilities/style_manager.ui @@ -0,0 +1,191 @@ + + + dlg_style_manager + + + + 0 + 0 + 975 + 785 + + + + Style management + + + + + + + + + + + + Close + + + + + + + true + + + + + + + Filter by: layername + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Refresh all + + + + + + + + 0 + 0 + + + + Delete style + + + + + + + + 0 + 0 + + + + Update style + + + + + + + + 0 + 0 + + + + Add style + + + + + + + Qt::Horizontal + + + + 80 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Filter by: Category + + + + + + + + + + + diff --git a/core/ui/ui_manager.py b/core/ui/ui_manager.py index a5ac5817c..85ca0f22d 100644 --- a/core/ui/ui_manager.py +++ b/core/ui/ui_manager.py @@ -182,6 +182,10 @@ class GwFeatureReplaceUi(GwDialog, FORM_CLASS): FORM_CLASS = _get_ui_class('featuretype_change.ui', 'edit') class GwFeatureTypeChangeUi(GwDialog, FORM_CLASS): pass + +FORM_CLASS = _get_ui_class('workcat_manager.ui', 'edit') +class GwWorkcatManagerUi(GwDialog, FORM_CLASS): + pass # endregion @@ -257,10 +261,6 @@ class GwNonVisualLidsUi(GwDialog, FROM_CLASS): class GwPsectorUi(GwDialog, FORM_CLASS): pass -FORM_CLASS = _get_ui_class('price_manager.ui', 'plan') -class GwPriceManagerUi(GwDialog, FORM_CLASS): - pass - FORM_CLASS = _get_ui_class('psector_duplicate.ui', 'plan') class GwPsectorDuplicateUi(GwDialog, FORM_CLASS): pass @@ -322,6 +322,14 @@ class GwCreateWorkspaceUi(GwDialog, FORM_CLASS): class GwMapzoneManagerUi(GwDialog, FORM_CLASS): pass +FORM_CLASS = _get_ui_class('style_manager.ui', 'utilities') +class GwStyleManagerUi(GwDialog, FORM_CLASS): + pass + +FORM_CLASS = _get_ui_class('create_style_group.ui', 'utilities') +class GwCreateStyleGroupUi(GwDialog, FORM_CLASS): + pass + FORM_CLASS = _get_ui_class('mapzone_config.ui', 'utilities') class GwMapzoneConfigUi(GwDialog, FORM_CLASS): pass diff --git a/core/utils/tools_backend_calls.py b/core/utils/tools_backend_calls.py index 6cdb37059..0a6c39fe2 100644 --- a/core/utils/tools_backend_calls.py +++ b/core/utils/tools_backend_calls.py @@ -56,6 +56,17 @@ def add_object(**kwargs): tools_qgis.show_warning(message, parameter=func_params['sourcewidget']) return + # Special case for documents: get the document ID using the name + print(tab_name) + if qtable_name == 'tbl_document' or 'doc' in tab_name: + sql = f"SELECT id FROM doc WHERE name = '{object_id}'" + row = tools_db.get_row(sql, log_sql=True) + if not row: + tools_qgis.show_warning("Document name not found", parameter=object_id) + return + # Use the found document ID + object_id = row['id'] + # Check if this object exists view_object = f"v_ui_{func_params['sourceview']}" sql = ("SELECT * FROM " + view_object + "" @@ -398,7 +409,7 @@ def filter_table(**kwargs): model.clear() tools_gw.add_tableview_header(qtable, field) tools_gw.fill_tableview_rows(qtable, field) - tools_gw.set_tablemodel_config(dialog, qtable, linkedobject, 1, True) + tools_gw.set_tablemodel_config(dialog, qtable, linkedobject, 1) tools_qt.set_tableview_config(qtable) return complet_list @@ -437,7 +448,7 @@ def filter_table_mincut(**kwargs): model.clear() tools_gw.add_tableview_header(qtable, field) tools_gw.fill_tableview_rows(qtable, field) - tools_gw.set_tablemodel_config(dialog, qtable, field['widgetname'], 1, True) + tools_gw.set_tablemodel_config(dialog, qtable, field['widgetname'], 1) tools_qt.set_tableview_config(qtable) return complet_list @@ -559,7 +570,7 @@ def add_query_layer(**kwargs): vlayer = QgsVectorLayer(uri.uri(False), f'{layer_name}', "postgres") if vlayer.isValid(): - tools_qt.add_layer_to_toc(vlayer, group) + tools_qgis.add_layer_to_toc(vlayer, group) def refresh_attribute_table(**kwargs): @@ -796,7 +807,7 @@ def fill_tbl(complet_result, dialog, widgetname, linkedobject, filter_fields): if widget is None: continue widget = tools_gw.add_tableview_header(widget, field) widget = tools_gw.fill_tableview_rows(widget, field) - widget = tools_gw.set_tablemodel_config(dialog, widget, field['widgetname'], 1, True) + widget = tools_gw.set_tablemodel_config(dialog, widget, field['widgetname'], 1) tools_qt.set_tableview_config(widget) widget_list = [] diff --git a/core/utils/tools_gw.py b/core/utils/tools_gw.py index f7f9ee368..e1f57a23b 100644 --- a/core/utils/tools_gw.py +++ b/core/utils/tools_gw.py @@ -45,7 +45,7 @@ from . import tools_backend_calls from ..load_project_menu import GwMenuLoad from ..utils.select_manager import GwSelectManager -from ..toolbars.toc import epa_world_button +from ..toolbars.toc import layerstyle_change_button from ... import global_vars from ...libs import lib_vars, tools_qgis, tools_qt, tools_log, tools_os, tools_db from ...libs.tools_qt import GwHyperLinkLabel, GwHyperLinkLineEdit @@ -542,10 +542,10 @@ def draw_wkt_geometry(wkt_string, rubber_band, color, width): tools_qgis.show_warning('Unsuported geometry type', parameter=geometry_type) -def enable_feature_type(dialog, widget_name='tbl_relation', ids=None): - +def enable_feature_type(dialog, widget_name='tbl_relation', ids=None, widget_table=None): feature_type = tools_qt.get_widget(dialog, 'feature_type') - widget_table = tools_qt.get_widget(dialog, widget_name) + if widget_table is None: + widget_table = tools_qt.get_widget(dialog, widget_name) if feature_type is not None and widget_table is not None: if len(ids) > 0: feature_type.setEnabled(False) @@ -613,7 +613,7 @@ def add_layer_database(tablename=None, the_geom="the_geom", field_id="id", group :param group: Name of the group that will be created in the toc (String) :param style_id: Id of the style we want to load (integer or String) """ - style_id_epa = "-1" + tablename_og = tablename schema_name = tools_db.dao_db_credentials['schema'].replace('"', '') field_id = field_id.replace(" ", "") @@ -622,7 +622,7 @@ def add_layer_database(tablename=None, the_geom="the_geom", field_id="id", group if the_geom: try: uri.setSrid(f"{lib_vars.data_epsg}") - except: + except Exception: pass create_groups = get_config_parser("system", "force_create_qgis_group_layer", "user", "init", prefix=False) create_groups = tools_os.set_boolean(create_groups, default=False) @@ -636,43 +636,20 @@ def add_layer_database(tablename=None, the_geom="the_geom", field_id="id", group f"user={tools_db.dao_db_credentials['user']} password={tools_db.dao_db_credentials['password']} " \ f"port={tools_db.dao_db_credentials['port']} mode=2 schema={tools_db.dao_db_credentials['schema']} " \ f"column={the_geom} table={tablename}" - if alias: tablename = alias + if alias: + tablename = alias layer = QgsRasterLayer(connString, tablename) - tools_qt.add_layer_to_toc(layer, group, sub_group, create_groups=create_groups) + tools_qgis.add_layer_to_toc(layer, group, sub_group, create_groups=create_groups) else: - if alias: tablename = alias + if alias: + tablename = alias layer = QgsVectorLayer(uri.uri(), f'{tablename}', 'postgres') - tools_qt.add_layer_to_toc(layer, group, sub_group, create_groups=create_groups, sub_sub_group=sub_sub_group) + tools_qgis.add_layer_to_toc(layer, group, sub_group, create_groups=create_groups, sub_sub_group=sub_sub_group) - # The triggered function (action.triggered.connect(partial(...)) as the last parameter sends a boolean, - # if we define style_id = None, style_id will take the boolean of the triggered action as a fault, - # therefore, we define it with "-1" + # Apply styles to layer if style_id in (None, "-1"): - # Get style_id from tablename - sql = f"SELECT id FROM sys_style WHERE idval = '{tablename_og}'" - row = tools_db.get_row(sql) - if row: - style_id = row[0] - - # Get style_id for Gw Epa Style - sql = f"SELECT id FROM sys_style WHERE idval = '{tablename_og} SWMM point of view'" - row = tools_db.get_row(sql) - if row: - style_id_epa = row[0] - else: - sql = f"SELECT id FROM sys_style WHERE idval = '{tablename_og} EPANET point of view'" - row = tools_db.get_row(sql) - if row: - style_id_epa = row[0] - - # Apply style to layer if it has one configured - if style_id not in (None, "-1"): - set_layer_style(style_id, layer) - - # Apply Gw EPA style to layer if it has one configured - if style_id_epa not in (None, "-1"): - set_layer_style(style_id_epa, layer, True) + set_layer_styles(tablename_og, layer) if tablename: # Set layer config @@ -713,6 +690,8 @@ def add_layer_database(tablename=None, the_geom="the_geom", field_id="id", group global_vars.iface.mapCanvas().refresh() def validate_qml(qml_content): + if not qml_content: + return False, "QML is empty!" qml_content_no_spaces = qml_content.replace("\n", "").replace("\t", "") try: root = ET.fromstring(qml_content_no_spaces) @@ -721,14 +700,16 @@ def validate_qml(qml_content): return False, str(e) -def set_layer_style(style_id, layer, is_epa=False): - body = f'$${{"data":{{"style_id":"{style_id}"}}}}$$' - style = execute_procedure('gw_fct_getstyle', body) - if style is None or style['status'] == 'Failed': +def set_layer_styles(tablename, layer): + body = f'$${{"data":{{"layername":"{tablename}"}}}}$$' + json_return = execute_procedure('gw_fct_getstyle', body) + if json_return is None or json_return['status'] == 'Failed': return - if 'styles' in style['body']: - if 'style' in style['body']['styles']: - qml = style['body']['styles']['style'] + if 'styles' in json_return['body']: + for style_name, qml in json_return['body']['styles'].items(): + + if qml is None: + continue valid_qml, error_message = validate_qml(qml) if not valid_qml: @@ -737,18 +718,13 @@ def set_layer_style(style_id, layer, is_epa=False): else: style_manager = layer.styleManager() - # read valid style from layer - style = QgsMapLayerStyle() - style.readFromLayer(layer) - - style_name = "GwEpaStyle" if is_epa else "GwStyle" + default_style_name = tools_qt.tr('default', context_name='QgsMapLayerStyleManager') # add style with new name - style_manager.addStyle(style_name, style) + style_manager.renameStyle(default_style_name, style_name) # set new style as current style_manager.setCurrentStyle(style_name) - tools_qgis.create_qml(layer, qml) - style_manager.setCurrentStyle("GwStyle") + def add_layer_temp(dialog, data, layer_name, force_tab=True, reset_text=True, tab_idx=1, del_old_layers=True, group='GW Temporal Layers', call_set_tabs_enabled=True, close=True): @@ -1169,7 +1145,10 @@ def delete_selected_rows(widget, table_object): for i in range(0, len(selected_list)): row = selected_list[i].row() - id_ = widget.model().record(row).value(str(field_object_id)) + if isinstance(widget.model(), QStandardItemModel): + id_ = widget.model().item(row, 0).text() + else: + id_ = widget.model().record(row).value(str(field_object_id)) inf_text += f"{id_}, " list_id += f"'{id_}', " inf_text = inf_text[:-2] @@ -1181,7 +1160,8 @@ def delete_selected_rows(widget, table_object): sql = (f"DELETE FROM {table_object} " f"WHERE {field_object_id} IN ({list_id})") tools_db.execute_sql(sql) - widget.model().select() + if hasattr(widget.model(), 'select'): + widget.model().select() # Refresh if it's a QSqlTableModel def set_tabs_enabled(dialog): @@ -1948,6 +1928,29 @@ def fill_typeahead(completer, model, field, dialog, widget, feature_id=None): if not widget: return + + # Detect the active tab + active_tab_name = "" + tab_widget = dialog.findChild(QTabWidget) + if tab_widget: + active_tab_name = tab_widget.tabText(tab_widget.currentIndex()) + + # Custom logic for the "Doc" tab + if active_tab_name == "Doc": + search_text = tools_qt.get_text(dialog, widget) + query = f"SELECT name as idval FROM doc WHERE name ILIKE '%{search_text}%'" + rows = tools_db.get_rows(query) + + if not rows: + # Handle the case when no matching documents are found + print("No matching documents found.") + list_items = [] + else: + list_items = [row['idval'] for row in rows] + + tools_qt.set_completer_object(completer, model, widget, list_items) + return + parent_id = "" if 'parentId' in field: parent_id = field["parentId"] @@ -2210,10 +2213,11 @@ def get_expression_filter(feature_type, list_ids=None, layers=None): """ list_ids = list_ids[feature_type] - field_id = feature_type + "_id" if len(list_ids) == 0: return None + field_id = feature_type + "_id" + # Set expression filter with features in the list expr_filter = field_id + " IN (" for i in range(len(list_ids)): @@ -2575,15 +2579,29 @@ def manage_json_return(json_result, sql, rubber_band=None, i=None): elif style_type[key]['style'] == 'qml': style_id = style_type[key]['id'] - extras = f'"style_id":"{style_id}"' + extras = f'"style_id":"{style_id}", "layername":"{key}"' body = create_body(extras=extras) style = execute_procedure('gw_fct_getstyle', body) if style is None or style.get('status') == 'Failed': return if 'styles' in style['body']: - if 'style' in style['body']['styles']: - qml = style['body']['styles']['style'] - tools_qgis.create_qml(v_layer, qml) + for style_name, qml in style['body']['styles'].items(): + if qml is None: + continue + + valid_qml, error_message = validate_qml(qml) + if not valid_qml: + msg = "The QML file is invalid." + tools_qgis.show_warning(msg, parameter=error_message) + else: + style_manager = v_layer.styleManager() + + default_style_name = tools_qt.tr('default', context_name='QgsMapLayerStyleManager') + # add style with new name + style_manager.renameStyle(default_style_name, style_name) + # set new style as current + style_manager.setCurrentStyle(style_name) + tools_qgis.create_qml(v_layer, qml) elif style_type[key]['style'] == 'unique': color = style_type[key]['values']['color'] @@ -2607,10 +2625,15 @@ def manage_json_return(json_result, sql, rubber_band=None, i=None): tools_qgis.clean_layer_group_from_toc('GW Temporal Layers') -def get_rows_by_feature_type(class_object, dialog, table_object, feature_type): +def get_rows_by_feature_type(class_object, dialog, table_object, feature_type, feature_id=None, feature_idname=None): """ Get records of @feature_type associated to selected @table_object """ - object_id = tools_qt.get_text(dialog, table_object + "_id") + if feature_id is None: + feature_id = tools_qt.get_text(dialog, table_object + "_id") + + if feature_idname is None: + feature_idname = f"{table_object}_id" + table_relation = table_object + "_x_" + feature_type widget_name = "tbl_" + table_relation @@ -2621,7 +2644,7 @@ def get_rows_by_feature_type(class_object, dialog, table_object, feature_type): sql = (f"SELECT {feature_type}_id " f"FROM {table_relation} " - f"WHERE {table_object}_id = '{object_id}'") + f"WHERE {feature_idname} = '{feature_id}'") rows = tools_db.get_rows(sql, log_info=False) if rows: for row in rows: @@ -2629,7 +2652,7 @@ def get_rows_by_feature_type(class_object, dialog, table_object, feature_type): class_object.ids.append(str(row[0])) expr_filter = get_expression_filter(feature_type, class_object.list_ids, class_object.layers) - table_name = f"v_edit_{feature_type}" + table_name = f"{class_object.schema_name}.v_edit_{feature_type}" tools_qt.set_table_model(dialog, widget_name, table_name, expr_filter) @@ -2708,23 +2731,26 @@ def get_layers_from_feature_type(feature_type): def get_role_permissions(qgis_project_role): + role_admin = False role_master = False role_edit = False role_om = False role_epa = False role_basic = False - role_admin = tools_db.check_role_user("role_admin") - if not role_admin: - role_master = tools_db.check_role_user("role_master") - if not role_master: - role_epa = tools_db.check_role_user("role_epa") - if not role_epa: - role_edit = tools_db.check_role_user("role_edit") - if not role_edit: - role_om = tools_db.check_role_user("role_om") - if not role_om: - role_basic = tools_db.check_role_user("role_basic") + role_system = tools_db.check_role_user("role_system") + if not role_system: + role_admin = tools_db.check_role_user("role_admin") + if not role_admin: + role_master = tools_db.check_role_user("role_master") + if not role_master: + role_epa = tools_db.check_role_user("role_epa") + if not role_epa: + role_edit = tools_db.check_role_user("role_edit") + if not role_edit: + role_om = tools_db.check_role_user("role_om") + if not role_om: + role_basic = tools_db.check_role_user("role_basic") if role_basic or qgis_project_role == 'role_basic': return 'role_basic' @@ -2738,6 +2764,8 @@ def get_role_permissions(qgis_project_role): return 'role_master' elif role_admin or qgis_project_role == 'role_admin': return 'role_admin' + elif role_system or qgis_project_role == 'role_system': + return 'role_system' else: return 'role_basic' @@ -2886,7 +2914,7 @@ def selection_changed(class_object, dialog, table_object, query=False, lazy_widg load_tablename(dialog, table_object, class_object.feature_type, expr_filter) tools_qt.set_lazy_init(table_object, lazy_widget=lazy_widget, lazy_init_function=lazy_init_function) - enable_feature_type(dialog, table_object, ids=ids) + enable_feature_type(dialog, widget_table=table_object, ids=ids) class_object.ids = ids @@ -2935,7 +2963,7 @@ def set_model_signals(class_object): class_object._manage_tab_feature_buttons )) -def insert_feature(class_object, dialog, table_object, query=False, remove_ids=True, lazy_widget=None, +def insert_feature(class_object, dialog, table_object, is_psector=False, remove_ids=True, lazy_widget=None, lazy_init_function=None): """ Select feature with entered id. Set a model with selected filter. Attach that model to selected table @@ -2943,7 +2971,12 @@ def insert_feature(class_object, dialog, table_object, query=False, remove_ids=T tools_qgis.disconnect_signal_selection_changed() feature_type = get_signal_change_tab(dialog) - # Clear list of ids + + # Initialize the list for the specific feature type if it doesn't exist + if feature_type not in class_object.list_ids: + class_object.list_ids[feature_type] = [] + + # Clear the temporary ids list when switching tabs or as needed if remove_ids: class_object.ids = [] @@ -2961,10 +2994,12 @@ def insert_feature(class_object, dialog, table_object, query=False, remove_ids=T if feature_id == 'null': message = "You need to enter a feature id" - tools_qt.show_info_box(message) + tools_qt.tools_qgis.show_warning(message, dialog=dialog) return - # Iterate over all layers of the group + # Temporarily store IDs to be added for this feature type + selected_ids = [] + for layer in class_object.layers[feature_type]: if layer.selectedFeatureCount() > 0: # Get selected features of the layer @@ -2972,17 +3007,23 @@ def insert_feature(class_object, dialog, table_object, query=False, remove_ids=T for feature in features: # Append 'feature_id' into the list selected_id = feature.attribute(field_id) - if selected_id not in class_object.ids: - class_object.ids.append(selected_id) - if feature_id not in class_object.ids: - # If feature id doesn't exist in list -> add - class_object.ids.append(str(feature_id)) + if selected_id not in selected_ids: + selected_ids.append(selected_id) - # Set expression filter with features in the list - expr_filter = f'"{field_id}" IN ( ' - for i in range(len(class_object.ids)): - expr_filter += f"'{class_object.ids[i]}', " - expr_filter = expr_filter[:-2] + ")" + if feature_id not in selected_ids: + selected_ids.append(str(feature_id)) + + # Append the new IDs to the existing list, ensuring no duplicates + class_object.list_ids[feature_type] = list(set(class_object.list_ids[feature_type] + selected_ids)) + + # Generate expression filter for the IDs + if class_object.list_ids[feature_type]: + expr_filter = f'"{field_id}" IN (' + for i in range(len(class_object.list_ids[feature_type])): + expr_filter += f"'{class_object.list_ids[feature_type][i]}', " + expr_filter = expr_filter[:-2] + ")" + else: + expr_filter = f'"{field_id}" IN (NULL)' # Check expression (is_valid, expr) = tools_qt.check_expression_filter(expr_filter) @@ -2998,18 +3039,18 @@ def insert_feature(class_object, dialog, table_object, query=False, remove_ids=T layer.selectByIds(id_list) # Reload contents of table 'tbl_xxx_xxx_@feature_type' - if query: - _insert_feature_psector(dialog, feature_type, ids=class_object.ids) + if is_psector: + _insert_feature_psector(dialog, feature_type, ids=selected_ids) layers = remove_selection(True, class_object.layers) class_object.layers = layers else: load_tablename(dialog, table_object, feature_type, expr_filter) tools_qt.set_lazy_init(table_object, lazy_widget=lazy_widget, lazy_init_function=lazy_init_function) - # Update list - class_object.list_ids[feature_type] = class_object.ids - enable_feature_type(dialog, table_object, ids=class_object.ids) - connect_signal_selection_changed(class_object, dialog, table_object, feature_type) + enable_feature_type(dialog, table_object, ids=class_object.list_ids[feature_type]) + + # Clear the feature_id text field + tools_qt.set_widget_text(dialog, "feature_id", "") def remove_selection(remove_groups=True, layers=None): @@ -3129,7 +3170,7 @@ def manage_docker_options(option_name='position'): lib_vars.session_vars['dialog_docker'].position = 2 -def set_tablemodel_config(dialog, widget, table_name, sort_order=0, isQStandardItemModel=False, schema_name=None): +def set_tablemodel_config(dialog, widget, table_name, sort_order=0, schema_name=None): """ Configuration of tables. Set visibility and width of columns """ widget = tools_qt.get_widget(dialog, widget) @@ -3143,7 +3184,7 @@ def set_tablemodel_config(dialog, widget, table_name, sort_order=0, isQStandardI # Set width and alias of visible columns columns_to_delete = [] - sql = (f"SELECT columnindex, width, alias, visible, style" + sql = (f"SELECT columnname, columnindex, width, alias, visible, style" f" FROM {config_table}" f" WHERE objectname = '{table_name}'" f" ORDER BY columnindex") @@ -3152,32 +3193,51 @@ def set_tablemodel_config(dialog, widget, table_name, sort_order=0, isQStandardI if not rows: return widget + # Create a dictionary to store the desired column positions + column_order = {} + for row in rows: + column_order[row['columnname']] = row['columnindex'] + + # Clear columns_dict + widget.setProperty('columns', None) + + # Reorder columns in the widget according to columnindex + header = widget.horizontalHeader() + for column_name, column_index in sorted(column_order.items(), key=lambda item: item[1]): + col_idx = tools_qt.get_col_index_by_col_name(widget, column_name) + if col_idx is not None: + header.moveSection(header.visualIndex(col_idx), column_index) + + columns_dict: Dict[str, str] = {} for row in rows: + col_idx = tools_qt.get_col_index_by_col_name(widget, row['columnname']) + if col_idx is None: + continue + columns_dict[str(row['alias'] if row['alias'] else row['columnname'])] = str(row['columnname']) if not row['visible']: - columns_to_delete.append(row['columnindex']) + columns_to_delete.append(col_idx) else: style = row.get('style') if style: stretch = style.get('stretch') if stretch is not None: stretch = 1 if stretch else 0 - widget.horizontalHeader().setSectionResizeMode(row['columnindex'], stretch) + widget.horizontalHeader().setSectionResizeMode(col_idx, stretch) width = row['width'] if width is None: width = 100 - widget.setColumnWidth(row['columnindex'], width) + widget.setColumnWidth(col_idx, width) if row['alias'] is not None: - widget.model().setHeaderData(row['columnindex'], Qt.Horizontal, row['alias']) - + widget.model().setHeaderData(col_idx, Qt.Horizontal, row['alias']) + widget.setProperty('columns', columns_dict) # Set order - if isQStandardItemModel: - widget.model().sort(0, sort_order) - else: + if isinstance(widget.model(), QStandardItemModel) is False: widget.model().setSort(0, sort_order) widget.model().select() # Delete columns for column in columns_to_delete: - widget.hideColumn(column) + if column: + widget.hideColumn(column) return widget @@ -3287,6 +3347,7 @@ def load_tablename(dialog, table_object, feature_type, expr_filter): return None table_name = f"v_edit_{feature_type}" + expr = tools_qt.set_table_model(dialog, widget, table_name, expr_filter) if widget_name is not None: set_tablemodel_config(dialog, widget_name, table_name) @@ -3429,7 +3490,7 @@ def manage_close(dialog, table_object, cur_active_layer=None, single_tool_mode=N return layers -def delete_records(class_object, dialog, table_object, query=False, lazy_widget=None, lazy_init_function=None, extra_field=None): +def delete_records(class_object, dialog, table_object, is_psector=False, lazy_widget=None, lazy_init_function=None, extra_field=None): """ Delete selected elements of the table """ tools_qgis.disconnect_signal_selection_changed() @@ -3457,10 +3518,10 @@ def delete_records(class_object, dialog, table_object, query=False, lazy_widget= if len(selected_list) == 0: message = "Any record selected" - tools_qt.show_info_box(message) + tools_qt.tools_qgis.show_warning(message, dialog=dialog) return - if query: + if is_psector: full_list = widget.model() for x in range(0, full_list.rowCount()): class_object.ids.append(widget.model().record(x).value(f"{feature_type}_id")) @@ -3505,7 +3566,7 @@ def delete_records(class_object, dialog, table_object, query=False, lazy_widget= return # Update model of the widget with selected expr_filter - if query: + if is_psector: state = None if extra_field is not None and len(selected_list) == 1: state = widget.model().record(selected_list[0].row()).value(extra_field) @@ -3519,13 +3580,12 @@ def delete_records(class_object, dialog, table_object, query=False, lazy_widget= # Build a list of feature id's and select them tools_qgis.select_features_by_ids(feature_type, expr, layers=class_object.layers) - if query: + if is_psector: class_object.layers = remove_selection(layers=class_object.layers) # Update list class_object.list_ids[feature_type] = class_object.ids enable_feature_type(dialog, table_object, ids=class_object.ids) - connect_signal_selection_changed(class_object, dialog, table_object, query) def get_parent_layers_visibility(): @@ -3618,16 +3678,6 @@ def execute_class_function(dlg_class, func_name: str, kwargs: dict = None): tools_log.log_debug(f"Exception in tools_gw.execute_class_function (executing {func_name} from {dlg_class.__name__}): {e}") -def is_epa_world_active(default=False): - return epa_world_button.is_epa_world_active(default) - - -def set_epa_world(_set_epa_world=None, selector_change=False, is_init=False): - """ Activate or deactivate EPA world. If @_set_epa_world is None it will just refresh the filters """ - - epa_world_button.set_epa_world(_set_epa_world, selector_change, is_init) - - def open_dlg_help(): """ Opens the help page for the last focused dialog """ @@ -4185,7 +4235,7 @@ def fill_tbl(complet_result, dialog, widgetname, linkedobject, filter_fields): if widget is None: continue widget = add_tableview_header(widget, field) widget = fill_tableview_rows(widget, field) - widget = set_tablemodel_config(dialog, widget, short_name, 1, True) + widget = set_tablemodel_config(dialog, widget, short_name, 1) tools_qt.set_tableview_config(widget, edit_triggers=QTableView.DoubleClicked) widget_list = [] @@ -4216,6 +4266,33 @@ def _get_list(complet_result, form_name='', filter_fields='', widgetname='', for return complet_list + +def get_list(table_name, filter_name="", filter_id=None, filter_active=None, id_field=None): + if id_field is None: + id_field = "id_val" + + feature = f'"tableName":"{table_name}"' + filter_fields = f'"limit": -1, "{id_field}": {{"filterSign":"ILIKE", "value":"{filter_name}"}}' + + if filter_id is not None: + filter_fields += f', "{id_field}": {{"filterSign":"=", "value":"{filter_id}"}}' + + if filter_active is not None: + filter_fields += f', "active": {{"filterSign":"=", "value":"{filter_active}"}}' + + body = create_body(feature=feature, filter_fields=filter_fields) + json_result = execute_procedure('gw_fct_getlist', body) + + if json_result is None or json_result['status'] == 'Failed': + return False + + complet_list = json_result + if not complet_list: + return False + + return complet_list + + # startregion # Info buttons diff --git a/dbmodel b/dbmodel index 46b09d6d7..419aa8451 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit 46b09d6d7bbf660a51c0eab1f7941b1cfae6882e +Subproject commit 419aa8451682ad05754f56d6ab490a72d813104f diff --git a/i18n/giswater_ca_ES.qm b/i18n/giswater_ca_ES.qm index fb940e208..449d0b263 100644 Binary files a/i18n/giswater_ca_ES.qm and b/i18n/giswater_ca_ES.qm differ diff --git a/i18n/giswater_ca_ES.ts b/i18n/giswater_ca_ES.ts index 8b08fddac..852bb687c 100644 --- a/i18n/giswater_ca_ES.ts +++ b/i18n/giswater_ca_ES.ts @@ -80,10 +80,6 @@ GwElementManagerButton Gestor d'elements - - GwEpaWorldButton - Món epa - ResultManager Gestor de resultats @@ -132,6 +128,10 @@ 76_text Filtre de lots + + GwLayerStyleChangeButton + Estils Giswater + 18_text Connexió amb comercial @@ -2297,11 +2297,11 @@ admin_addfields - lbl_query_text - Text de consulta: + lbl_data_type + Tipus dada: - tooltip_lbl_query_text + tooltip_lbl_data_type None @@ -2313,59 +2313,59 @@ None - lbl_form_type - Tipus formulari: + lbl_query_filter + Filtre text consulta: - tooltip_lbl_form_type + tooltip_lbl_query_filter None - lbl_data_type - Tipus dada: + lbl_num_dec + Num decimals: - tooltip_lbl_data_type + tooltip_lbl_num_dec None - lbl_not_update - No Actualitzat + lbl_reload_field + Recargar camp: - tooltip_lbl_not_update + tooltip_lbl_reload_field None - lbl_num_dec - Num decimals: + btn_open + Obrir - tooltip_lbl_num_dec + tooltip_btn_open None - lbl_reload_field - Recargar camp: + lbl_editability + Editabilitat: - tooltip_lbl_reload_field + tooltip_lbl_editability None - lbl_query_filter - Filtre text consulta: + tab_update + Actualitzar - tooltip_lbl_query_filter + tooltip_tab_update None - tab_create - Crear + lbl_form_type + Tipus formulari: - tooltip_tab_create + tooltip_lbl_form_type None @@ -2377,44 +2377,44 @@ None - dlg_main_addfields - Diàleg + lbl_column_id + Nom columna: - tooltip_dlg_main_addfields + tooltip_lbl_column_id None - lbl_typeahead - Mecanografia: + tab_delete + Esborrar - tooltip_lbl_typeahead + tooltip_tab_delete None - lbl_tooltip - Tooltip: + tab_create + Crear - tooltip_lbl_tooltip + tooltip_tab_create None - tab_delete - Esborrar + lbl_widget_type + Tipus de widget: - tooltip_tab_delete + tooltip_lbl_widget_type None - lbl_widgetcontrols - Controls del widget: + lbl_query_text + Text de consulta: - tooltip_lbl_widgetcontrols - Exemple de configuració keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_lbl_query_text + None btn_cancel @@ -2425,51 +2425,59 @@ Cancelar - lbl_field_name - Nom de camp: + lbl_widget_function + Finció del widget - tooltip_lbl_field_name + tooltip_lbl_widget_function None - lbl_widget_type - Tipus de widget: + lbl_auto_update + Auto-actualitzable: - tooltip_lbl_widget_type + tooltip_lbl_auto_update None - tab_update - Actualitzar + lbl_widgetcontrols + Controls del widget: - tooltip_tab_update + tooltip_lbl_widgetcontrols + Exemple de configuració keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + + + lbl_field_name + Nom de camp: + + + tooltip_lbl_field_name None - lbl_stylesheet - Full d'estil: + lbl_active + Actiu: - tooltip_lbl_stylesheet + tooltip_lbl_active None - lbl_placeholder - Macador de posició: + lbl_typeahead + Mecanografia: - tooltip_lbl_placeholder + tooltip_lbl_typeahead None - lbl_editability - Editabilitat: + lbl_tooltip + Tooltip: - tooltip_lbl_editability + tooltip_lbl_tooltip None @@ -2481,27 +2489,19 @@ Acceptar - lbl_linkedobject - Objecte vinculat: - - - tooltip_lbl_linkedobject - None - - - btn_open - Obrir + lbl_stylesheet + Full d'estil: - tooltip_btn_open + tooltip_lbl_stylesheet None - lbl_widget_function - Finció del widget + lbl_placeholder + Macador de posició: - tooltip_lbl_widget_function + tooltip_lbl_placeholder None @@ -2521,83 +2521,83 @@ None - lbl_field_length - Longitud de camp: + lbl_null_value + Valor nul: - tooltip_lbl_field_length + tooltip_lbl_null_value None - lbl_action_function - Funció d'acció: + lbl_editable + Editable: - tooltip_lbl_action_function + tooltip_lbl_editable None - lbl_active - Actiu: + lbl_linkedobject + Objecte vinculat: - tooltip_lbl_active + tooltip_lbl_linkedobject None - lbl_column_id - Nom columna: + lbl_action_function + Funció d'acció: - tooltip_lbl_column_id + tooltip_lbl_action_function None - lbl_auto_update - Auto-actualitzable: + dlg_main_addfields + Diàleg - tooltip_lbl_auto_update + tooltip_dlg_main_addfields None - lbl_null_value - Valor nul: + grb_mandatory + Configuració obligatoria de camps - tooltip_lbl_null_value + tooltip_grb_mandatory None - lbl_editable - Editable: + lbl_enabled + Habilitat: - tooltip_lbl_editable + tooltip_lbl_enabled None - grb_mandatory - Configuració obligatoria de camps + lbl_field_length + Longitud de camp: - tooltip_grb_mandatory + tooltip_lbl_field_length None - lbl_enabled - Habilitat: + lbl_mandatory + Obligtori: - tooltip_lbl_enabled + tooltip_lbl_mandatory None - lbl_mandatory - Obligtori: + lbl_not_update + No Actualitzat - tooltip_lbl_mandatory + tooltip_lbl_not_update None @@ -2612,19 +2612,27 @@ Acceptar - lbl_connec - Connexió: + lbl_user_name + Nom d'usuari: - tooltip_lbl_connec + tooltip_lbl_user_name None - lbl_user_name - Nom d'usuari: + dlg_main_credentials + Diàleg - tooltip_lbl_user_name + tooltip_dlg_main_credentials + None + + + lbl_connec + Connexió: + + + tooltip_lbl_connec None @@ -2643,14 +2651,6 @@ tooltip_lbl_password None - - dlg_main_credentials - Diàleg - - - tooltip_dlg_main_credentials - None - admin_dbproject @@ -2663,108 +2663,108 @@ Nom d'un esquema nou. El nom ha d'escriures en minúscules utilitzant les lletres de l'alfabet anglès y sense espais ni guions. - lbl_locale - Idioma: + lbl_filter + Fliltrar SRID: - tooltip_lbl_locale - Idioma esquema + tooltip_lbl_filter + Identificador de referència espacial. Només es permeten els valors que es mostren en la taula - btn_accept - Acceptar + lbl_project_type + Tipus de projecte: - tooltip_btn_accept - Acceptar + tooltip_lbl_project_type + None - dlg_main_dbproject - Crear esquema de projecte + lbl_descript + Descripció: - tooltip_dlg_main_dbproject + tooltip_lbl_descript None - btn_push_file - ... + rdb_inp + Importar dades INP - tooltip_btn_push_file + tooltip_rdb_inp None - btn_close - Tancar + lbl_source + Font de dades: - tooltip_btn_close - Close + tooltip_lbl_source + None - lbl_filter - Fliltrar SRID: + rdb_empty + Sense dades - tooltip_lbl_filter - Identificador de referència espacial. Només es permeten els valors que es mostren en la taula + tooltip_rdb_empty + None - lbl_project_type - Tipus de projecte: + rdb_sample_inv + Exemple inventari - tooltip_lbl_project_type + tooltip_rdb_sample_inv None - lbl_descript - Descripció: + rdb_sample_full + Exemple complet - tooltip_lbl_descript + tooltip_rdb_sample_full None - rdb_inp - Importar dades INP + btn_close + Tancar - tooltip_rdb_inp - None + tooltip_btn_close + Close - lbl_source - Font de dades: + lbl_locale + Idioma: - tooltip_lbl_source - None + tooltip_lbl_locale + Idioma esquema - rdb_empty - Sense dades + btn_push_file + ... - tooltip_rdb_empty + tooltip_btn_push_file None - rdb_sample_inv - Exemple inventari + dlg_main_dbproject + Crear esquema de projecte - tooltip_rdb_sample_inv + tooltip_dlg_main_dbproject None - rdb_sample_full - Exemple complet + btn_accept + Acceptar - tooltip_rdb_sample_full - None + tooltip_btn_accept + Acceptar grb_projectschema @@ -2778,21 +2778,29 @@ admin_gisproject - btn_accept - Acceptar + lbl_gis_file + Nom arxiu QGIS - tooltip_btn_accept - Acceptar + tooltip_lbl_gis_file + None - lbl_gis_file - Nom arxiu QGIS + btn_gis_folder + ... - tooltip_lbl_gis_file + tooltip_btn_gis_folder None + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + lbl_gis_folder Carpeta: @@ -2817,14 +2825,6 @@ tooltip_lbl_role None - - btn_gis_folder - ... - - - tooltip_btn_gis_folder - None - dlg_main_gisproject Crear projecte QGIS @@ -2844,22 +2844,6 @@ admin_importinp - - btn_run - Run - - - tooltip_btn_run - None - - - btn_close - Tancar - - - tooltip_btn_close - Tancar - dlg_main_importinp Paràmetres de configuració @@ -2877,32 +2861,32 @@ None - tab_config - Configuració + btn_close + Tancar - tooltip_tab_config - None + tooltip_btn_close + Tancar - - - admin_projectinfo - lbl_info - Informació sobre les noves actualitzacions: + tab_config + Configuració - tooltip_lbl_info + tooltip_tab_config None - dlg_main_projectinfo - Actualitzar SQL + btn_run + Run - tooltip_dlg_main_projectinfo + tooltip_btn_run None + + + admin_projectinfo btn_close Tancar @@ -2919,17 +2903,25 @@ tooltip_btn_update None - - - admin_qtdialog - btn_cancel - Cancelar + dlg_main_projectinfo + Actualitzar SQL - tooltip_btn_cancel - Cancelar + tooltip_dlg_main_projectinfo + None + + + lbl_info + Informació sobre les noves actualitzacions: + + + tooltip_lbl_info + None + + + admin_qtdialog lbl_path Ruta UI @@ -2939,12 +2931,20 @@ None - lbl_formname - Nom formulari: + btn_cancel + Cancelar - tooltip_lbl_formname - None + tooltip_btn_cancel + Cancelar + + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar dlg_main_qtdialog @@ -2962,6 +2962,17 @@ tooltip_btn_path None + + lbl_formname + Nom formulari: + + + tooltip_lbl_formname + None + + + + admin_renameproj btn_accept Acceptar @@ -2970,9 +2981,14 @@ tooltip_btn_accept Acceptar - - - admin_renameproj + + dlg_readsq_rename + Renombrar projecte + + + tooltip_dlg_readsq_rename + None + lbl_rename_copy Si us plau, configureu un nou nom @@ -2989,12 +3005,15 @@ tooltip_btn_cancel Cancelar + + + admin_sysfields - dlg_readsq_rename - Renombrar projecte + lbl_placeholder + Macador de posició: - tooltip_dlg_readsq_rename + tooltip_lbl_placeholder None @@ -3005,15 +3024,12 @@ tooltip_btn_accept Acceptar - - - admin_sysfields - lbl_column_id - Id columna: + grb_additional_conf + Configuració adicional - tooltip_lbl_column_id + tooltip_grb_additional_conf None @@ -3025,168 +3041,168 @@ None - btn_cancel - Cancelar + lbl_stylesheet + Full d'estil: - tooltip_btn_cancel - Cancelar + tooltip_lbl_stylesheet + None - lbl_widgetcontrols - Controls del widget: + dlg_main_sysfields + Diàleg - tooltip_lbl_widgetcontrols - Exemple de configuració keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_dlg_main_sysfields + None - btn_open - Obrir + grb_basic_conf + Configuració bàsica - tooltip_btn_open + tooltip_grb_basic_conf None - lbl_mandatory - Obligtori: + tab_create + Crear - tooltip_lbl_mandatory + tooltip_tab_create None - lbl_layout_order - Ordre de disseny: + btn_open + Obrir - tooltip_lbl_layout_order + tooltip_btn_open None - grb_additional_conf - Configuració adicional + lbl_column_id + Id columna: - tooltip_grb_additional_conf + tooltip_lbl_column_id None - lbl_layout_name - Nom de disseny: + lbl_editability + Editabilitat: - tooltip_lbl_layout_name + tooltip_lbl_editability None - lbl_label - Etiqueta: + lbl_editable + Editable: - tooltip_lbl_label + tooltip_lbl_editable None - lbl_hidden - Ocult + lbl_enabled + Habilitat: - tooltip_lbl_hidden + tooltip_lbl_enabled None - lbl_form_name - Nom formulari: + lbl_widgetcontrols + Controls del widget: - tooltip_lbl_form_name - None + tooltip_lbl_widgetcontrols + Exemple de configuració keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} - btn_accept - Acceptar + lbl_form_name + Nom formulari: - tooltip_btn_accept - Acceptar + tooltip_lbl_form_name + None - lbl_enabled - Habilitat: + btn_cancel + Cancelar - tooltip_lbl_enabled - None + tooltip_btn_cancel + Cancelar - lbl_editable - Editable: + lbl_hidden + Ocult - tooltip_lbl_editable + tooltip_lbl_hidden None - grb_basic_conf - Configuració bàsica + lbl_label + Etiqueta: - tooltip_grb_basic_conf + tooltip_lbl_label None - lbl_tooltip - Tooltip: + lbl_layout_name + Nom de disseny: - tooltip_lbl_tooltip + tooltip_lbl_layout_name None - tab_create - Crear + lbl_layout_order + Ordre de disseny: - tooltip_tab_create + tooltip_lbl_layout_order None - lbl_placeholder - Macador de posició: + lbl_mandatory + Obligtori: - tooltip_lbl_placeholder + tooltip_lbl_mandatory None - dlg_main_sysfields - Diàleg + lbl_tooltip + Tooltip: - tooltip_dlg_main_sysfields + tooltip_lbl_tooltip None + + + admin_translation - lbl_editability - Editabilitat: + chk_py_msg + Traduir formularis i missatges python - tooltip_lbl_editability + tooltip_chk_py_msg None - lbl_stylesheet - Full d'estil: + grb_translate_files + Traduir fitxers - tooltip_lbl_stylesheet + tooltip_grb_translate_files None - - - admin_translation grb_info_connection Informació de la connexió @@ -3204,19 +3220,19 @@ None - grb_translate_files - Traduir fitxers + lbl_scode + Codi font: - tooltip_grb_translate_files + tooltip_lbl_scode None - lbl_host - Amfitrió: + btn_connection + Provar connexió - tooltip_lbl_host + tooltip_btn_connection None @@ -3228,19 +3244,11 @@ None - lbl_port - Port: - - - tooltip_lbl_port - None - - - lbl_scode - Codi font: + lbl_user + Usuari: - tooltip_lbl_scode + tooltip_lbl_user None @@ -3252,35 +3260,27 @@ None - lbl_user - Usuari: - - - tooltip_lbl_user - None - - - chk_py_msg - Traduir formularis i missatges python + lbl_host + Amfitrió: - tooltip_chk_py_msg + tooltip_lbl_host None - btn_connection - Provar connexió + lbl_database + Base de dades: - tooltip_btn_connection + tooltip_lbl_database None - lbl_database - Base de dades: + lbl_port + Port: - tooltip_lbl_database + tooltip_lbl_port None @@ -3295,83 +3295,35 @@ None - tab_api_manager - Administrador Api - - - tooltip_tab_api_manager - None - - - btn_info - Actualitzar Esquema - - - tooltip_btn_info - Actualitzar versió del schema seleccionat - - - tab_advanced - Avançat - - - tooltip_tab_advanced - None - - - lbl_use_constrains - Utilitzar restrinccions: - - - tooltip_lbl_use_constrains - None - - - btn_translation - Arxius de traducció - - - tooltip_btn_translation - None - - - lbl_ui_path - Rauta UI + lbl_system_feature + Nom de l'element - tooltip_lbl_ui_path + tooltip_lbl_system_feature None - btn_copy - Copiar - - - tooltip_btn_copy - Copiar l'esquema de base de dades seleccionat - - - btn_create_view - Crear + lbl_add_fields_feature + Nom de l'element: - tooltip_btn_create_view + tooltip_lbl_add_fields_feature None - btn_schema_file_to_db - File to DB + btn_import_ui + Importar - tooltip_btn_schema_file_to_db + tooltip_btn_import_ui None - btn_create_field - Crear + tab_fields_manager + Fields manager - tooltip_btn_create_field + tooltip_tab_fields_manager None @@ -3390,14 +3342,6 @@ tooltip_grb_manage_addfields Crear, configurar o eliminar un camp adicional relacionat amb un tipus d'entitat seleccionada o per a tots els tipus d'elements definits en un projecte. - - btn_import_ui - Importar - - - tooltip_btn_import_ui - None - grb_schema_update Actualitzar @@ -3415,28 +3359,28 @@ None - btn_constrains - Restriccions + grb_conection + Connexió - tooltip_btn_constrains + tooltip_grb_conection None - grb_conection - Connexió + grb_visit + Visita - tooltip_grb_conection - None + tooltip_grb_visit + Crear, configurar o eliminar la definició de visita relacionada amb un tipus d'entitat seleccionada o per tots els tipus d'elements definits en un projecte. - tab_fields_manager - Fields manager + grb_load_cf + Cargar arxiu personalitzat - tooltip_tab_fields_manager - None + tooltip_grb_load_cf + Seleccioni una carpeta amb arxius .sql que vulgui executar en un esquema seleccionat grb_files_generator @@ -3446,14 +3390,6 @@ tooltip_grb_files_generator None - - grb_load_cf - Cargar arxiu personalitzat - - - tooltip_grb_load_cf - Seleccioni una carpeta amb arxius .sql que vulgui executar en un esquema seleccionat - btn_update_field Actualitzar @@ -3463,227 +3399,227 @@ None - btn_export_ui - Exportar + btn_custom_select_file + ... - tooltip_btn_export_ui + tooltip_btn_custom_select_file None - btn_custom_select_file - ... + btn_custom_load_file + Cargar arxiu - tooltip_btn_custom_select_file + tooltip_btn_custom_load_file None - btn_schema_rename - Rename + grb_project_scin + Informació de l'esquema del projecte - tooltip_btn_schema_rename - Renembrar l'esquema de base de dades seleccionat + tooltip_grb_project_scin + None - tab_general - General + grb_manage_ui + Administrar UI - tooltip_tab_general + tooltip_grb_manage_ui None - btn_visit_create - Crear + btn_gis_create + Crear arxiu porjecte QGIS - tooltip_btn_visit_create + tooltip_btn_gis_create None - lbl_add_fields_feature - Nom de l'element: + lbl_connection + Nom connexió: - tooltip_lbl_add_fields_feature - None + tooltip_lbl_connection + Nom de la connexió de la base de dades definida en QGIS - lbl_child_feature - Nom de l'element: + btn_create_qgis_template + Plantilles QGIS - tooltip_lbl_child_feature + tooltip_btn_create_qgis_template None - btn_visit_delete - Esborrar + lbl_reload_func_sch + Recargar funcions: - tooltip_btn_visit_delete + tooltip_lbl_reload_func_sch None - tab_schema_manager - Admionistrador d'esquema + btn_path + ... - tooltip_tab_schema_manager + tooltip_btn_path None - btn_visit_update - Actualitzar + btn_delete + Esborrar - tooltip_btn_visit_update - None + tooltip_btn_delete + Eliminar l'esquema de base de dades seleccionat - lbl_system_feature - Nom de l'element + btn_update_schema + Execuatr - tooltip_lbl_system_feature + tooltip_btn_update_schema None - btn_gis_create - Crear arxiu porjecte QGIS + btn_create_field + Crear - tooltip_btn_gis_create + tooltip_btn_create_field None - lbl_ui_form_name - Nom del formulari + btn_create_view + Crear - tooltip_lbl_ui_form_name + tooltip_btn_create_view None - btn_close - Tancar + btn_schema_file_to_db + File to DB - tooltip_btn_close - Close + tooltip_btn_schema_file_to_db + None - lbl_connection - Nom connexió: + btn_update_sys_field + Actualitzar - tooltip_lbl_connection - Nom de la connexió de la base de dades definida en QGIS + tooltip_btn_update_sys_field + None - grb_visit - Visita + btn_delete_field + Esborrar - tooltip_grb_visit - Crear, configurar o eliminar la definició de visita relacionada amb un tipus d'entitat seleccionada o per tots els tipus d'elements definits en un projecte. + tooltip_btn_delete_field + None - btn_custom_load_file - Cargar arxiu + btn_schema_create + Create DB project schema - tooltip_btn_custom_load_file + tooltip_btn_schema_create None - lbl_name - Nom: + grb_manage_childviews + Administrar vistes secundaries - tooltip_lbl_name - Nom de l'esquema de la base de dades + tooltip_grb_manage_childviews + Recrear vistes secundaries per a un tipus d'element seleccionat o per a tot tipus d'elements definits en un projecte. - btn_create_qgis_template - Plantilles QGIS + btn_export_ui + Exportar - tooltip_btn_create_qgis_template + tooltip_btn_export_ui None - lbl_reload_func_sch - Recargar funcions: + lbl_child_feature + Nom de l'element: - tooltip_lbl_reload_func_sch + tooltip_lbl_child_feature None - btn_delete_field - Esborrar + tab_schema_manager + Admionistrador d'esquema - tooltip_btn_delete_field + tooltip_tab_schema_manager None - lbl_project_type - Tipus projecte: + tab_api_manager + Administrador Api - tooltip_lbl_project_type - Tipus de giswater + tooltip_tab_api_manager + None - dlg_main - Giswater + tab_advanced + Avançat - tooltip_dlg_main + tooltip_tab_advanced None - grb_manage_ui - Administrar UI + btn_visit_update + Actualitzar - tooltip_grb_manage_ui + tooltip_btn_visit_update None - grb_manage_childviews - Administrar vistes secundaries + btn_visit_delete + Esborrar - tooltip_grb_manage_childviews - Recrear vistes secundaries per a un tipus d'element seleccionat o per a tot tipus d'elements definits en un projecte. + tooltip_btn_visit_delete + None - btn_update_schema - Execuatr + btn_visit_create + Crear - tooltip_btn_update_schema + tooltip_btn_visit_create None - btn_path - ... + btn_schema_rename + Rename - tooltip_btn_path - None + tooltip_btn_schema_rename + Renembrar l'esquema de base de dades seleccionat - grb_project_scin - Informació de l'esquema del projecte + lbl_use_constrains + Utilitzar restrinccions: - tooltip_grb_project_scin + tooltip_lbl_use_constrains None @@ -3695,118 +3631,110 @@ None - btn_schema_create - Create DB project schema + tab_general + General - tooltip_btn_schema_create + tooltip_tab_general None - btn_update_sys_field - Actualitzar + lbl_ui_path + Rauta UI - tooltip_btn_update_sys_field + tooltip_lbl_ui_path None - btn_delete - Esborrar + lbl_name + Nom: - tooltip_btn_delete - Eliminar l'esquema de base de dades seleccionat + tooltip_lbl_name + Nom de l'esquema de la base de dades - - - admin_visitclass - lbl_class_id - Id clase: + btn_translation + Arxius de traducció - tooltip_lbl_class_id + tooltip_btn_translation None - btn_ok - Acceptar + lbl_project_type + Tipus projecte: - tooltip_btn_ok - None + tooltip_lbl_project_type + Tipus de giswater - lbl_visit_type - Tipus visita: + btn_info + Actualitzar Esquema - tooltip_lbl_visit_type - None + tooltip_btn_info + Actualitzar versió del schema seleccionat - btn_class_cancel - Cancel + btn_close + Tancar - tooltip_btn_class_cancel - None + tooltip_btn_close + Close - btn_class_ok - Acceptar + dlg_main + Giswater - tooltip_btn_class_ok + tooltip_dlg_main None - lbl_feat_type - Tipus d'element: - - - tooltip_lbl_feat_type - None - - - btn_param_create - Crear + btn_copy + Copiar - tooltip_btn_param_create - None + tooltip_btn_copy + Copiar l'esquema de base de dades seleccionat - dlg_main_visitclass - Gestionar clase de visita + btn_constrains + Restriccions - tooltip_dlg_main_visitclass + tooltip_btn_constrains None - lbl_multi_event - Event múltiple: + lbl_ui_form_name + Nom del formulari - tooltip_lbl_multi_event + tooltip_lbl_ui_form_name None + + + admin_visitclass - lbl_param_opt - Opcions paràmetre: + lbl_feat_type + Tipus d'element: - tooltip_lbl_param_opt + tooltip_lbl_feat_type None - lbl_multi_feat - Element múltiples: + dlg_main_visitclass + Gestionar clase de visita - tooltip_lbl_multi_feat + tooltip_dlg_main_visitclass None @@ -3818,19 +3746,19 @@ None - btn_cancel - Cancelar + lbl_active + Actiu: - tooltip_btn_cancel - Cancelar + tooltip_lbl_active + None - btn_param_update - Actualitzar + lbl_class_id + Id clase: - tooltip_btn_param_update + tooltip_lbl_class_id None @@ -3842,11 +3770,19 @@ None - btn_param_delete - Esborrar + lbl_multi_event + Event múltiple: - tooltip_btn_param_delete + tooltip_lbl_multi_event + None + + + lbl_param_opt + Opcions paràmetre: + + + tooltip_lbl_param_opt None @@ -3858,16 +3794,21 @@ None - lbl_active - Actiu: + lbl_multi_feat + Element múltiples: - tooltip_lbl_active + tooltip_lbl_multi_feat + None + + + lbl_visit_type + Tipus visita: + + + tooltip_lbl_visit_type None - - - admin_visitparam btn_cancel Cancelar @@ -3877,51 +3818,62 @@ Cancelar - lbl_parameter_type - Tipus paràmetre: + btn_class_cancel + Cancel - tooltip_lbl_parameter_type + tooltip_btn_class_cancel None - lbl_data_type - Tipus dada: + btn_ok + Acceptar - tooltip_lbl_data_type + tooltip_btn_ok None - lbl_form_type - Tipus formulari: + btn_param_create + Crear - tooltip_lbl_form_type + tooltip_btn_param_create None - lbl_default_value - Valor per defecte: + btn_class_ok + Acceptar - tooltip_lbl_default_value + tooltip_btn_class_ok None - lbl_parameter_name - Nom paràmetre: + btn_param_delete + Esborrar - tooltip_lbl_parameter_name + tooltip_btn_param_delete None - lbl_descript - Descripció: + btn_param_update + Actualitzar - tooltip_lbl_descript + tooltip_btn_param_update + None + + + + admin_visitparam + + lbl_form_type + Tipus formulari: + + + tooltip_lbl_form_type None @@ -3933,19 +3885,19 @@ None - grb_params - Paràmetres + lbl_parameter_name + Nom paràmetre: - tooltip_grb_params + tooltip_lbl_parameter_name None - lbl_editable - Editable: + lbl_enabled + Habilitat: - tooltip_lbl_editable + tooltip_lbl_enabled None @@ -3957,27 +3909,35 @@ None - lbl_enabled - Habilitat: + btn_cancel + Cancelar - tooltip_lbl_enabled + tooltip_btn_cancel + Cancelar + + + lbl_editable + Editable: + + + tooltip_lbl_editable None - lbl_widgettype - Tipus de widget: + lbl_descript + Descripció: - tooltip_lbl_widgettype + tooltip_lbl_descript None - btn_ok - Acceptar + lbl_default_value + Valor per defecte: - tooltip_btn_ok + tooltip_lbl_default_value None @@ -3988,6 +3948,22 @@ tooltip_lbl_mandatory None + + lbl_data_type + Tipus dada: + + + tooltip_lbl_data_type + None + + + grb_params + Paràmetres + + + tooltip_grb_params + None + lbl_query_text Text de consulta: @@ -3996,6 +3972,22 @@ tooltip_lbl_query_text None + + lbl_parameter_type + Tipus paràmetre: + + + tooltip_lbl_parameter_type + None + + + lbl_widgettype + Tipus de widget: + + + tooltip_lbl_widgettype + None + dlg_main_visitparam Gestionar paràmetre de visita @@ -4004,6 +3996,14 @@ tooltip_dlg_main_visitparam None + + btn_ok + Acceptar + + + tooltip_btn_ok + None + arc_fusion @@ -4011,14 +4011,6 @@ title Fusionar arc - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - lbl_enddate Data de finalització: @@ -4036,13 +4028,21 @@ None - lbl_workcat_id_end - Expedient baixa: + tab_loginfo + Info log - tooltip_lbl_workcat_id_end + tooltip_tab_loginfo None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + btn_accept Acceptar @@ -4052,11 +4052,11 @@ Acceptar - tab_loginfo - Info log + lbl_workcat_id_end + Expedient baixa: - tooltip_tab_loginfo + tooltip_lbl_workcat_id_end None @@ -4075,108 +4075,108 @@ Assignació de fugues - tab_infolog + lbl_leaks Fugues - tooltip_tab_infolog + tooltip_lbl_leaks None - lbl_cluster_length - Longitud del cluster (m): + lbl_max_distance + Distància màxima (m): - tooltip_lbl_cluster_length - Suma màxima de longituds de tuberia dintre d'un cluster, en metres. + tooltip_lbl_max_distance + Distància màxima, e metres, entre la tuberia inicial i altres tuberies incluides en el cluster. - lbl_pipes - Canonades + lbl_diameter_range + Rang de diàmetre: - tooltip_lbl_pipes - None + tooltip_lbl_diameter_range + Rang de diàmetres basats en factors de la tuberia inicial. - lbl_diameter_range - Rang de diàmetre: + lbl_diameter + Filt6rar per diàmetre: - tooltip_lbl_diameter_range - Rang de diàmetres basats en factors de la tuberia inicial. + tooltip_lbl_diameter + Utilitza només tuberies amb el rang de diàmetres de l'inicial. - chk_all_leaks - Utilitzar totes les fugues + lbl_cluster_length + Longitud del cluster (m): - tooltip_chk_all_leaks - Calcula les fugues per kilòmetre i any utilitzant totes les dades disponibles, independentment del paramatre 'anys a calcular'. + tooltip_lbl_cluster_length + Suma màxima de longituds de tuberia dintre d'un cluster, en metres. - tab_infolog - Info log + lbl_builtdate + Filtrar per data d'instalació: - tooltip_tab_infolog - None + tooltip_lbl_builtdate + Utilitza només les tuberies que coincidexen amb l'interval de dates d'instalació de la inicial. - dlg_assignation - Assignació de fugues + lbl_buffer + Distància de buffer (m): - tooltip_dlg_assignation - None + tooltip_lbl_buffer + Distance from a leak at which pipes are selected to be assigned that leak. - lbl_material - Filtrar per material: + lbl_years + Anys a calcular - tooltip_lbl_material - Utilitza només tuberies del mateix material que la inicial. + tooltip_lbl_years + Nombre d'anys de dades de fugues a tenir en compte, en funció de l'antiguitat. - lbl_max_distance - Distància màxima (m): + chk_all_leaks + Utilitzar totes les fugues - tooltip_lbl_max_distance - Distància màxima, e metres, entre la tuberia inicial i altres tuberies incluides en el cluster. + tooltip_chk_all_leaks + Calcula les fugues per kilòmetre i any utilitzant totes les dades disponibles, independentment del paramatre 'anys a calcular'. - lbl_builtdate - Filtrar per data d'instalació: + lbl_builtdate_range + Rang de data de construcció (anys): - tooltip_lbl_builtdate - Utilitza només les tuberies que coincidexen amb l'interval de dates d'instalació de la inicial. + tooltip_lbl_builtdate_range + Interval de dates de construcció, en anys anteriors i posteriors a la tuberia inicial - lbl_years - Anys a calcular + lbl_pipes + Canonades - tooltip_lbl_years - Nombre d'anys de dades de fugues a tenir en compte, en funció de l'antiguitat. + tooltip_lbl_pipes + None - lbl_buffer - Distància de buffer (m): + tab_infolog + Fugues - tooltip_lbl_buffer - Distance from a leak at which pipes are selected to be assigned that leak. + tooltip_tab_infolog + None - lbl_builtdate_range - Rang de data de construcció (anys): + dlg_assignation + Assignació de fugues - tooltip_lbl_builtdate_range - Interval de dates de construcció, en anys anteriors i posteriors a la tuberia inicial + tooltip_dlg_assignation + None tab_config @@ -4187,20 +4187,20 @@ None - lbl_leaks - Fugues + lbl_material + Filtrar per material: - tooltip_lbl_leaks - None + tooltip_lbl_material + Utilitza només tuberies del mateix material que la inicial. - lbl_diameter - Filt6rar per diàmetre: + tab_infolog + Info log - tooltip_lbl_diameter - Utilitza només tuberies amb el rang de diàmetres de l'inicial. + tooltip_tab_infolog + None @@ -4210,12 +4210,12 @@ Dibuixar cercle CAD - chk_deleete_prev - Eliminar cercles anteriors + btn_accept + Acceptar - tooltip_chk_deleete_prev - None + tooltip_btn_accept + Acceptar btn_cancel @@ -4226,27 +4226,27 @@ Cancelar - lbl_ins_radius - Inserir radi: + dlg_auxcircle + Dibuixar cercle CAD - tooltip_lbl_ins_radius + tooltip_dlg_auxcircle None - btn_accept - Acceptar + chk_deleete_prev + Eliminar cercles anteriors - tooltip_btn_accept - Acceptar + tooltip_chk_deleete_prev + None - dlg_auxcircle - Dibuixar cercle CAD + lbl_ins_radius + Inserir radi: - tooltip_dlg_auxcircle + tooltip_lbl_ins_radius None @@ -4257,35 +4257,27 @@ Afegir punt CAD - dlg_auxpoint - Afegir punt CAD - - - tooltip_dlg_auxpoint - None - - - rb_right - Punt final + lbl_disty + Distància Y: - tooltip_rb_right + tooltip_lbl_disty None - chk_delete_prev - Eliminar punts anteriors + btn_accept + Acceptar - tooltip_chk_delete_prev - None + tooltip_btn_accept + Acceptar - lbl_disty - Distància Y: + rb_right + Punt final - tooltip_lbl_disty + tooltip_rb_right None @@ -4296,6 +4288,14 @@ tooltip_btn_cancel Cancelar + + chk_delete_prev + Eliminar punts anteriors + + + tooltip_chk_delete_prev + None + rb_left Punt inicial @@ -4313,12 +4313,12 @@ None - btn_accept - Acceptar + dlg_auxpoint + Afegir punt CAD - tooltip_btn_accept - Acceptar + tooltip_dlg_auxpoint + None @@ -4328,20 +4328,20 @@ Configuració - btn_cancel - Cancelar + tab_featurecat + Feature cat - tooltip_btn_cancel - Cancelar + tooltip_tab_featurecat + None - btn_accept - Acceptar + tab_addfields + Camps adicionals - tooltip_btn_accept - Acceptar + tooltip_tab_addfields + None tab_admin @@ -4351,6 +4351,14 @@ tooltip_tab_admin None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + dlg_config Configuració @@ -4360,113 +4368,132 @@ None - tab_basic - Bàsic + tab_mantype + Man type - tooltip_tab_basic + tooltip_tab_mantype None - tab_addfields - Camps adicionals + tab_basic + Bàsic - tooltip_tab_addfields + tooltip_tab_basic None - tab_featurecat - Feature cat + btn_accept + Acceptar - tooltip_tab_featurecat - None + tooltip_btn_accept + Acceptar + + + create_style_group - tab_mantype - Man type + idval + - tooltip_tab_mantype - None + tooltip_idval + Nom de la categoria - - - crm_trace - lbl_inst - Instruccions: + lbl_cat_id + ID de categoria: - tooltip_lbl_inst - None + tooltip_lbl_cat_id + - - - csv - btn_file_csv - ... + feature_id + - tooltip_btn_file_csv - None + tooltip_feature_id + ID de categoria - lbl_file - Arxiu: + descript + - tooltip_lbl_file - None + tooltip_descript + Descripció - lbl_delimiter - Delimitador: + lbl_cat_name + Nom de la categoria: - tooltip_lbl_delimiter - None + tooltip_lbl_cat_name + - btn_accept + btn_add Acceptar - tooltip_btn_accept + tooltip_btn_add Acceptar - lbl_set_of_charac - Conjunt de caràcters + lbl_descript + Descripció: - tooltip_lbl_set_of_charac - None + tooltip_lbl_descript + - lbl_import_type - Importar tipus: + lbl_role + Rol: - tooltip_lbl_import_type - None + tooltip_lbl_role + - lbl_import_label - Importar etiqueta + btn_cancel + Cancel·lar - tooltip_lbl_import_label + tooltip_btn_cancel + Cancel·lar + + + sys_role + + + + tooltip_sys_role + Rol que podrà utilitzar aquest estil + + + + crm_trace + + lbl_inst + Instruccions: + + + tooltip_lbl_inst None + + + csv - tab_preview - Previsualitzar + lbl_ignore_header + Ignorar capçaleres: - tooltip_tab_preview + tooltip_lbl_ignore_header None @@ -4486,19 +4513,35 @@ None - lbl_ignore_header - Ignorar capçaleres: + btn_file_csv + ... - tooltip_lbl_ignore_header + tooltip_btn_file_csv None - dlg_csv2pg - Importar CSV + lbl_delimiter + Delimitador: - tooltip_dlg_csv2pg + tooltip_lbl_delimiter + None + + + lbl_import_type + Importar tipus: + + + tooltip_lbl_import_type + None + + + lbl_import_label + Importar etiqueta + + + tooltip_lbl_import_label None @@ -4509,6 +4552,46 @@ tooltip_btn_cancel Cancelar + + tab_preview + Previsualitzar + + + tooltip_tab_preview + None + + + lbl_file + Arxiu: + + + tooltip_lbl_file + None + + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + + + lbl_set_of_charac + Conjunt de caràcters + + + tooltip_lbl_set_of_charac + None + + + dlg_csv2pg + Importar CSV + + + tooltip_dlg_csv2pg + None + dialog_table @@ -4525,12 +4608,12 @@ None - btn_cancel - Cancelar + btn_accept + Acceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Acceptar btn_add_row @@ -4541,12 +4624,12 @@ None - btn_accept - Acceptar + btn_cancel + Cancelar - tooltip_btn_accept - Acceptar + tooltip_btn_cancel + Cancelar @@ -4572,19 +4655,19 @@ Cancelar - btn_close - Tancar + dlg_dialog_text + Diàleg - tooltip_btn_close + tooltip_dlg_dialog_text None - dlg_dialog_text - Diàleg + btn_close + Tancar - tooltip_dlg_dialog_text + tooltip_btn_close None @@ -4603,20 +4686,20 @@ None - btn_cancel - Cancelar + btn_accept + Acceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Acceptar - grb_other - Altres + btn_cancel + Cancelar - tooltip_grb_other - Altres + tooltip_btn_cancel + Cancelar grb_symbology @@ -4627,20 +4710,20 @@ Simbologia del cercle - grb_depth - Amidaments + grb_other + Altres - tooltip_grb_depth - Amidaments + tooltip_grb_other + Altres - btn_accept - Acceptar + grb_depth + Amidaments - tooltip_btn_accept - Acceptar + tooltip_grb_depth + Amidaments @@ -4650,12 +4733,20 @@ Document - tab_connec - Escomesa + btn_path_doc + ... - tooltip_tab_connec - Escomesa + tooltip_btn_path_doc + Ruta + + + tab_gully + Reixa + + + tooltip_tab_gully + None tab_node @@ -4665,6 +4756,22 @@ tooltip_tab_node None + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + + + path + Ruta + + + tooltip_path + Completar amb alguna ruta de carpeta accesible o ruta web. + tab_doc Document @@ -4674,20 +4781,20 @@ None - btn_accept - Acceptar + btn_cancel + Cancelar - tooltip_btn_accept - Acceptar + tooltip_btn_cancel + Cancelar - btn_delete + btn_snapping None - tooltip_btn_delete - Eliminar + tooltip_btn_snapping + Seleccionar objecte lbl_doc_type @@ -4698,52 +4805,52 @@ Tipus document - lbl_doc_id - Id doc: + tab_arc + Arc - tooltip_lbl_doc_id - Id document + tooltip_tab_arc + Arc - tab_gully - Reixa + btn_insert + None - tooltip_tab_gully - None + tooltip_btn_insert + Insertar - lbl_observ - Observacions: + lbl_link + Enllaç - tooltip_lbl_observ - None + tooltip_lbl_link + Link - dlg_doc - Document + lbl_doc_name + Nom doc: - tooltip_dlg_doc - None + tooltip_lbl_doc_name + Nom document - _dlg_doc - Document + lbl_filter_name + Nom doc: - tooltip__dlg_doc - None + tooltip_lbl_filter_name + Nom document - btn_insert - None + dlg_doc + Document - tooltip_btn_insert - Insertar + tooltip_dlg_doc + None btn_path_url @@ -4754,36 +4861,28 @@ Obri l'explorador per permetre la seecció de la ruta web. També és possible simplement enganzar la ruta en e quadrat d'enllaç de text - lbl_link - Enllaç - - - tooltip_lbl_link - Link + btn_delete + None - path - Ruta + tooltip_btn_delete + Eliminar - tooltip_path - Completar amb alguna ruta de carpeta accesible o ruta web. + lbl_observ + Observacions: - btn_snapping + tooltip_lbl_observ None - tooltip_btn_snapping - Seleccionar objecte - - - tab_arc - Arc + tab_connec + Escomesa - tooltip_tab_arc - Arc + tooltip_tab_connec + Escomesa tab_rel @@ -4794,20 +4893,12 @@ None - btn_path_doc - ... - - - tooltip_btn_path_doc - Ruta - - - btn_cancel - Cancelar + _dlg_doc + Document - tooltip_btn_cancel - Cancelar + tooltip__dlg_doc + None @@ -4817,48 +4908,40 @@ Gestor de documents - btn_cancel - Cancelar + btn_delete + Esborrar - tooltip_btn_cancel - Cancelar + tooltip_btn_delete + Eliminar - dlg_doc_manager - Gestor de documents + lbl_filter_name + Filtrar per: Nom doc - tooltip_dlg_doc_manager + tooltip_lbl_filter_name None - lbl_doc_id - Filtrar per: Id doc + btn_cancel + Cancelar - tooltip_lbl_doc_id - None + tooltip_btn_cancel + Cancelar - btn_delete - Esborrar + dlg_doc_manager + Gestor de documents - tooltip_btn_delete - Eliminar + tooltip_dlg_doc_manager + None dscenario_manager - - btn_create - Crear - - - tooltip_btn_create - None - btn_delete Esborrar @@ -4868,19 +4951,11 @@ None - btn_update - Actualitzar - - - tooltip_btn_update - None - - - btn_duplicate - Duplicar + btn_create + Crear - tooltip_btn_duplicate + tooltip_btn_create None @@ -4892,100 +4967,44 @@ Mostrar inactius - btn_toolbox - Toolbox - - - tooltip_btn_toolbox - None - - - lbl_dscenario_name - Filtrat per: Nom dscenari - - - tooltip_lbl_dscenario_name - None - - - - element - - title - Element - - - lbl_builtdate - Data construcció: - - - tooltip_lbl_builtdate - Data alta - - - lbl_workcat_id - Expedient alta: - - - tooltip_lbl_workcat_id - Expedient alta: - - - lbl_elementcat_id - Id element catàleg: - - - tooltip_lbl_elementcat_id - Catàleg - - - btn_add_geom - Afegir geometria - - - tooltip_btn_add_geom - Add geometry - - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - - - btn_accept - Acceptar + btn_duplicate + Duplicar - tooltip_btn_accept - Acceptar + tooltip_btn_duplicate + None - dlg_element - Element + btn_update + Actualitzar - tooltip_dlg_element + tooltip_btn_update None - lbl_element_id - Id element: + btn_toolbox + Toolbox - tooltip_lbl_element_id + tooltip_btn_toolbox None - lbl_verified - Verificat: + lbl_dscenario_name + Filtrat per: Nom dscenari - tooltip_lbl_verified + tooltip_lbl_dscenario_name None + + + element + + title + Element + tab_gully Reixa @@ -5003,37 +5022,61 @@ Tipus estat - lbl_num_element - Nombre d'element: + lbl_state + Estat: - tooltip_lbl_num_element + tooltip_lbl_state None - tab_element - Element + lbl_code + Codi: - tooltip_tab_element - None + tooltip_lbl_code + Codi - btn_delete + lbl_buildercat_id + Fabricant: + + + tooltip_lbl_buildercat_id None - tooltip_btn_delete - Eliminar + lbl_builtdate + Data construcció: - lbl_state - Estat: + tooltip_lbl_builtdate + Data alta - tooltip_lbl_state + lbl_element_type + Tipus element: + + + tooltip_lbl_element_type + Tipus element + + + btn_snapping None + + tooltip_btn_snapping + Seleccionar objecte + + + lbl_link + Enllaç + + + tooltip_lbl_link + Link + lbl_observ Observacions: @@ -5043,12 +5086,20 @@ None - lbl_code - Codi: + lbl_expl_id + Explotació: - tooltip_lbl_code - Codi + tooltip_lbl_expl_id + None + + + btn_insert + None + + + tooltip_btn_insert + Insertar tab_arc @@ -5058,6 +5109,30 @@ tooltip_tab_arc Arc + + lbl_location_type + Tipus ubicació: + + + tooltip_lbl_location_type + Ubicació + + + dlg_element + Element + + + tooltip_dlg_element + None + + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + lbl_ownercat_id Propietari: @@ -5067,20 +5142,20 @@ None - lbl_expl_id - Explotació: + lbl_rotation + Rotació: - tooltip_lbl_expl_id + tooltip_lbl_rotation None - lbl_comment - Comentari: + btn_cancel + Cancelar - tooltip_lbl_comment - None + tooltip_btn_cancel + Cancelar tab_relations @@ -5091,68 +5166,68 @@ Relations - lbl_link - Enllaç + tab_element + Element - tooltip_lbl_link - Link + tooltip_tab_element + None - lbl_location_type - Tipus ubicació: + lbl_workcat_id_end + Expedient baixa: - tooltip_lbl_location_type - Ubicació + tooltip_lbl_workcat_id_end + Workcat id end - lbl_element_type - Tipus element: + lbl_num_element + Nombre d'element: - tooltip_lbl_element_type - Tipus element + tooltip_lbl_num_element + None - lbl_buildercat_id - Fabricant: + tab_connec + Escomesa - tooltip_lbl_buildercat_id - None + tooltip_tab_connec + Escomesa - btn_snapping + btn_delete None - tooltip_btn_snapping - Seleccionar objecte + tooltip_btn_delete + Eliminar - btn_insert - None + lbl_verified + Verificat: - tooltip_btn_insert - Insertar + tooltip_lbl_verified + None - lbl_workcat_id_end - Expedient baixa: + lbl_workcat_id + Expedient alta: - tooltip_lbl_workcat_id_end - Workcat id end + tooltip_lbl_workcat_id + Expedient alta: - lbl_rotation - Rotació: + btn_add_geom + Afegir geometria - tooltip_lbl_rotation - None + tooltip_btn_add_geom + Add geometry tab_node @@ -5163,28 +5238,36 @@ None - tab_connec - Escomesa + lbl_comment + Comentari: - tooltip_tab_connec - Escomesa + tooltip_lbl_comment + None - - - element_manager - title - Gestor d'elements + lbl_elementcat_id + Id element catàleg: - dlg_element_manager - Gestor d'elements + tooltip_lbl_elementcat_id + Catàleg - tooltip_dlg_element_manager + lbl_element_id + Id element: + + + tooltip_lbl_element_id None + + + element_manager + + title + Gestor d'elements + btn_delete Esborrar @@ -5201,6 +5284,14 @@ tooltip_btn_cancel Cancelar + + dlg_element_manager + Gestor d'elements + + + tooltip_dlg_element_manager + None + lbl_element_id Filtrar per: Id element @@ -5213,21 +5304,13 @@ epa_compare - lbl_selector_date - Selector de data: + lbl_time_to_show + Hora (per mostrar): - tooltip_lbl_selector_date + tooltip_lbl_time_to_show None - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - btn_accept Acceptar @@ -5237,35 +5320,43 @@ Acceptar - lbl_compare_date - Comparar data: + lbl_selector_date + Selector de data: + + + tooltip_lbl_selector_date + None + + + lbl_time_to_compare + Hora (per comprar): - tooltip_lbl_compare_date + tooltip_lbl_time_to_compare None - lbl_compare_time - Comparar hora: + btn_cancel + Cancelar - tooltip_lbl_compare_time - None + tooltip_btn_cancel + Cancelar - lbl_time_to_compare - Hora (per comprar): + dlg_selector + Selector - tooltip_lbl_time_to_compare + tooltip_dlg_selector None - lbl_selector_time - Hora del selector: + lbl_compare_date + Comparar data: - tooltip_lbl_selector_time + tooltip_lbl_compare_date None @@ -5277,11 +5368,11 @@ None - dlg_selector - Selector + lbl_compare_time + Comparar hora: - tooltip_dlg_selector + tooltip_lbl_compare_time None @@ -5293,27 +5384,27 @@ None - tab_time - Hora: + tab_result + Resultat - tooltip_tab_time + tooltip_tab_result None - lbl_time_to_show - Hora (per mostrar): + tab_time + Hora: - tooltip_lbl_time_to_show + tooltip_tab_time None - tab_result - Resultat + lbl_selector_time + Hora del selector: - tooltip_tab_result + tooltip_lbl_selector_time None @@ -5340,12 +5431,12 @@ None - btn_preview - Vista prèvia + btn_close + Tancar - tooltip_btn_preview - None + tooltip_btn_close + Tancar grb_map_options @@ -5356,12 +5447,12 @@ None - btn_close - Tancar + btn_print + Imprimir - tooltip_btn_close - Tancar + tooltip_btn_print + None dlg_fastprint @@ -5372,11 +5463,11 @@ None - btn_print - Imprimir + btn_preview + Vista prèvia - tooltip_btn_print + tooltip_btn_preview None @@ -5395,76 +5486,76 @@ Eliminar - tab_info_log - Info log + tab_del_feature + Esborrar element - tooltip_tab_info_log + tooltip_tab_del_feature None - btn_relations - Mostrar relacions de l'element + lbl_feature_type + Tipus d'element: - tooltip_btn_relations + tooltip_lbl_feature_type None - dlg_feature_delete - Esborrar element + lbl_feature_id + Id element: - tooltip_dlg_feature_delete + tooltip_lbl_feature_id None - tab_del_feature - Esborrar element + tab_info_log + Info log - tooltip_tab_del_feature + tooltip_tab_info_log None - lbl_feature_type - Tipus d'element: + btn_relations + Mostrar relacions de l'element - tooltip_lbl_feature_type + tooltip_btn_relations None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar + btn_delete_another + Eliminar un altre element - btn_snapping + tooltip_btn_delete_another None - tooltip_btn_snapping - Seleccionar objecte + dlg_feature_delete + Esborrar element - btn_delete_another - Eliminar un altre element + tooltip_dlg_feature_delete + None - tooltip_btn_delete_another + btn_snapping None - lbl_feature_id - Id element: + tooltip_btn_snapping + Seleccionar objecte - tooltip_lbl_feature_id - None + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar @@ -5474,19 +5565,19 @@ Donar de baixa - tab_connec - Escomesa + lbl_workcat_id_end + Expedient baixa: - tooltip_tab_connec + tooltip_lbl_workcat_id_end None - tab_workcat - Expedient + tab_gully + Reixa - tooltip_tab_workcat + tooltip_tab_gully None @@ -5498,12 +5589,12 @@ None - tab_gully - Reixa + btn_cancel + Cancelar - tooltip_tab_gully - None + tooltip_btn_cancel + Cancelar lbl_enddate @@ -5514,53 +5605,45 @@ None - btn_delete - None + dlg_feature_end + Donar de baixa - tooltip_btn_delete - Eliminar + tooltip_dlg_feature_end + None - lbl_workcat_date - Data epdte + tab_workcat + Expedient - tooltip_lbl_workcat_date + tooltip_tab_workcat None - tab_node - Node + lbl_state_type + Tipus estat final: - tooltip_tab_node + tooltip_lbl_state_type None - tab_arc - Arc - - - tooltip_tab_arc + btn_insert None - lbl_workcat_id_end - Expedient baixa: + tooltip_btn_insert + Insertar - tooltip_lbl_workcat_id_end + btn_new_workcat None - btn_snapping + tooltip_btn_new_workcat None - - tooltip_btn_snapping - Seleccionar objecte - tab_elem Element @@ -5569,14 +5652,6 @@ tooltip_tab_elem None - - btn_insert - None - - - tooltip_btn_insert - Insertar - tab_relations Relacions @@ -5586,51 +5661,75 @@ Relations - lbl_state_type - Tipus estat final: + btn_snapping + None - tooltip_lbl_state_type + tooltip_btn_snapping + Seleccionar objecte + + + tab_connec + Escomesa + + + tooltip_tab_connec None - btn_cancel - Cancelar + btn_accept + Acceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Acceptar - btn_new_workcat + tab_arc + Arc + + + tooltip_tab_arc None - tooltip_btn_new_workcat + lbl_workcat_date + Data epdte + + + tooltip_lbl_workcat_date None - dlg_feature_end - Donar de baixa + tab_node + Node - tooltip_dlg_feature_end + tooltip_tab_node None - btn_accept - Acceptar + btn_delete + None - tooltip_btn_accept - Acceptar + tooltip_btn_delete + Eliminar feature_end_connec - title - Elements desconectats del tram + title + Elements desconectats del tram + + + lbl_info + Llista d'elements que quedarien desconectats quan els trams seleccionats siguin donats de baixa: + + + tooltip_lbl_info + None dlg_feature_end_connec @@ -5664,14 +5763,6 @@ tooltip_btn_accept Acceptar - - lbl_info - Llista d'elements que quedarien desconectats quan els trams seleccionats siguin donats de baixa: - - - tooltip_lbl_info - None - go2epa @@ -5680,68 +5771,68 @@ Anar a EPA - lbl_result_name - Nom resultat: + btn_hs_ds + Selector - tooltip_lbl_result_name + tooltip_btn_hs_ds None - chk_recurrent - utilitzar trucades iteratives + tab_loginfo + Info log - tooltip_chk_recurrent + tooltip_tab_loginfo None - lbl_counter - lbl_counter + chk_only_check + Utilitzar la geometria de red resultant - tooltip_lbl_counter + tooltip_chk_only_check None - grb_file_manager - Gestor d'arxius + btn_cancel + Cancelar - tooltip_grb_file_manager - None + tooltip_btn_cancel + Cancelar - btn_accept - Acceptar + lbl_inp_file + Arxiu INP - tooltip_btn_accept - Acceptar + tooltip_lbl_inp_file + None - grb_process_options - Opcions de procés + btn_file_inp + ... - tooltip_grb_process_options + tooltip_btn_file_inp None - btn_hs_ds - Selector + btn_file_rpt + ... - tooltip_btn_hs_ds + tooltip_btn_file_rpt None - btn_cancel - Cancelar + btn_accept + Acceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Acceptar btn_options @@ -5752,83 +5843,83 @@ None - chk_import_result - Importar resultat + lbl_result_name + Nom resultat: - tooltip_chk_import_result + tooltip_lbl_result_name None - chk_only_check - Utilitzar la geometria de red resultant + lbl_counter + lbl_counter - tooltip_chk_only_check + tooltip_lbl_counter None - chk_exec - Executar software EPA + lbl_rpt_file + Arxiu RPT: - tooltip_chk_exec + tooltip_lbl_rpt_file None - chk_export - Exportar software INP + chk_recurrent + utilitzar trucades iteratives - tooltip_chk_export + tooltip_chk_recurrent None - tab_loginfo - Info log + dlg_go2epa + Anar a EPA - tooltip_tab_loginfo + tooltip_dlg_go2epa None - lbl_rpt_file - Arxiu RPT: + chk_import_result + Importar resultat - tooltip_lbl_rpt_file + tooltip_chk_import_result None - lbl_inp_file - Arxiu INP + chk_exec + Executar software EPA - tooltip_lbl_inp_file + tooltip_chk_exec None - btn_file_rpt - ... + chk_export + Exportar software INP - tooltip_btn_file_rpt + tooltip_chk_export None - dlg_go2epa - Anar a EPA + grb_process_options + Opcions de procés - tooltip_dlg_go2epa + tooltip_grb_process_options None - btn_file_inp - ... + grb_file_manager + Gestor d'arxius - tooltip_btn_file_inp + tooltip_grb_file_manager None @@ -5846,14 +5937,6 @@ title Gestor de resultats Epa - - btn_set_corporate - Alternar corporatiu - - - tooltip_btn_set_corporate - None - btn_close Tancar @@ -5862,6 +5945,14 @@ tooltip_btn_close Tancar + + btn_set_corporate + Alternar corporatiu + + + tooltip_btn_set_corporate + None + lbl_result_id Filtrar per: Id resultat: @@ -5894,11 +5985,11 @@ Go2Epa - opccions - tab_other - Altres + dlg_go2epa_options + Go2Epa - opccions - tooltip_tab_other + tooltip_dlg_go2epa_options None @@ -5909,6 +6000,14 @@ tooltip_tab_inp None + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + btn_cancel Cancelar @@ -5918,21 +6017,13 @@ Cancelar - dlg_go2epa_options - Go2Epa - opccions + tab_other + Altres - tooltip_dlg_go2epa_options + tooltip_tab_other None - - btn_accept - Acceptar - - - tooltip_btn_accept - Acceptar - info_catalog @@ -5972,11 +6063,19 @@ Abonat - lbl_hydrometer_id - Id hidròmetre: + btn_accept + Acceptar - tooltip_lbl_hydrometer_id + tooltip_btn_accept + Acceptar + + + dlg_info_crmvalue + Abonat + + + tooltip_dlg_info_crmvalue None @@ -5988,21 +6087,13 @@ Tancar - dlg_info_crmvalue - Abonat + lbl_hydrometer_id + Id hidròmetre: - tooltip_dlg_info_crmvalue + tooltip_lbl_hydrometer_id None - - btn_accept - Acceptar - - - tooltip_btn_accept - Acceptar - info_crossect @@ -6011,107 +6102,107 @@ Secció - lbl_cost_b_right - lbl_cost_b_right + lbl_cost_area + lbl_cost_area - tooltip_lbl_cost_b_right + tooltip_lbl_cost_area None - lbl_cost_exc - lbl_cost_exc + lbl_section_image + lbl_section_image - tooltip_lbl_cost_exc + tooltip_lbl_section_image None - lbl_cost_bulk - lbl_cost_bulk + lbl_cost_fill + lbl_cost_fill - tooltip_lbl_cost_bulk + tooltip_lbl_cost_fill None - lbl_cost_y_param - lbl_cost_y_param + lbl_cost_bulk + lbl_cost_bulk - tooltip_lbl_cost_y_param + tooltip_lbl_cost_bulk None - lbl_section_image - lbl_section_image + lbl_cost_exc + lbl_cost_exc - tooltip_lbl_section_image + tooltip_lbl_cost_exc None - btn_close - Tancar + dlg_info_crossect + Secció - tooltip_btn_close - Close + tooltip_dlg_info_crossect + None - dlg_info_crossect - Secció + lbl_cost_trench + lbl_cost_trench - tooltip_dlg_info_crossect + tooltip_lbl_cost_trench None - lbl_cost_excav - lbl_cost_excav + lbl_cost_b_left + lbl_cost_b_left - tooltip_lbl_cost_excav + tooltip_lbl_cost_b_left None - lbl_cost_area - lbl_cost_area + lbl_cost_width + lbl_cost_width - tooltip_lbl_cost_area + tooltip_lbl_cost_width None - lbl_cost_fill - lbl_cost_fill + lbl_cost_excav + lbl_cost_excav - tooltip_lbl_cost_fill + tooltip_lbl_cost_excav None - lbl_cost_width - lbl_cost_width + btn_close + Tancar - tooltip_lbl_cost_width - None + tooltip_btn_close + Close - lbl_cost_b_left - lbl_cost_b_left + lbl_cost_b_right + lbl_cost_b_right - tooltip_lbl_cost_b_left + tooltip_lbl_cost_b_right None - lbl_cost_trench - lbl_cost_trench + lbl_cost_y_param + lbl_cost_y_param - tooltip_lbl_cost_trench + tooltip_lbl_cost_y_param None @@ -6121,6 +6212,14 @@ title Informació característica + + tab_relations + Relacions + + + tooltip_tab_relations + Relations + btn_open_element None @@ -6130,19 +6229,19 @@ None - lbl_to_doc - Fins: + btn_open_gallery + None - tooltip_lbl_to_doc + tooltip_btn_open_gallery None - lbl_from_doc - Desde: + btn_open_visit_doc + None - tooltip_lbl_from_doc + tooltip_btn_open_visit_doc None @@ -6154,43 +6253,43 @@ None - btn_insert - None + lbl_to_om + Fins: - tooltip_btn_insert - Insertar + tooltip_lbl_to_om + None - tab_om - OM + lbl_param_type_om + Tipus paràmetre: - tooltip_tab_om + tooltip_lbl_param_type_om None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar + lbl_parameter_om + Paràmetre: - btn_doc_delete + tooltip_lbl_parameter_om None - tooltip_btn_doc_delete - Esborrar document + lbl_from_om + Desde: - btn_new_element + tooltip_lbl_from_om None - tooltip_btn_new_element + lbl_type_doc + Tipus: + + + tooltip_lbl_type_doc None @@ -6202,92 +6301,84 @@ None - tab_documents - Documents + tab_om + OM - tooltip_tab_documents + tooltip_tab_om None - btn_delete + btn_doc_new None - tooltip_btn_delete - Eliminar - - - btn_accept - Acceptar + tooltip_btn_doc_new + Crear nou document - tooltip_btn_accept - Acceptar + lbl_cat_per_filter + Filtre període: - tab_connections - Conexions + tooltip_lbl_cat_per_filter + None - tooltip_tab_connections + btn_open_doc None - lbl_upstream_features - Element aigües amunt: + tooltip_btn_open_doc + Obrir document - tooltip_lbl_upstream_features - None + lbl_downstream_features + Element aigües avall: - lbl_doc_id - Id doc: + tooltip_lbl_downstream_features + None - tooltip_lbl_doc_id + btn_insert None - tab_plan - Plan + tooltip_btn_insert + Insertar - tooltip_tab_plan + btn_doc_delete None - lbl_downstream_features - Element aigües avall: - - - tooltip_lbl_downstream_features - None + tooltip_btn_doc_delete + Esborrar document - tab_data - Dades + tab_hydrometer + Abonats - tooltip_tab_data + tooltip_tab_hydrometer None - tab_relations - Relacions + tab_hydrometer_val + Lectures abonats - tooltip_tab_relations - Relations + tooltip_tab_hydrometer_val + None - lbl_cat_per_filter - Filtre període: + btn_accept + Acceptar - tooltip_lbl_cat_per_filter - None + tooltip_btn_accept + Acceptar btn_doc_insert @@ -6298,67 +6389,67 @@ Insertar document - btn_doc_new - None + tab_data + Dades - tooltip_btn_doc_new - Crear nou document + tooltip_tab_data + None - lbl_type_doc - Tipus: + tab_plan + Plan - tooltip_lbl_type_doc + tooltip_tab_plan None - lbl_from_om - Desde: + btn_cancel + Cancelar - tooltip_lbl_from_om - None + tooltip_btn_cancel + Cancelar - lbl_parameter_om - Paràmetre: + btn_open_visit + None - tooltip_lbl_parameter_om + tooltip_btn_open_visit None - lbl_param_type_om - Tipus paràmetre: + tab_documents + Documents - tooltip_lbl_param_type_om + tooltip_tab_documents None - lbl_to_om - Fins: + btn_open_visit_event + None - tooltip_lbl_to_om + tooltip_btn_open_visit_event None - btn_open_visit_doc - None + lbl_doc_id + Id doc: - tooltip_btn_open_visit_doc + tooltip_lbl_doc_id None - btn_open_gallery - None + dlg_info_feature + Informació característica - tooltip_btn_open_gallery + tooltip_dlg_info_feature None @@ -6370,43 +6461,51 @@ None - btn_open_doc - None + lbl_upstream_features + Element aigües amunt: - tooltip_btn_open_doc - Obrir document + tooltip_lbl_upstream_features + None - tab_hydrometer - Abonats + btn_apply + Aplicar - tooltip_tab_hydrometer - None + tooltip_btn_apply + Aplicar - tab_hydrometer_val - Lectures abonats + lbl_from_doc + Desde: - tooltip_tab_hydrometer_val + tooltip_lbl_from_doc None - btn_open_visit + btn_delete None - tooltip_btn_open_visit + tooltip_btn_delete + Eliminar + + + lbl_to_doc + Fins: + + + tooltip_lbl_to_doc None - btn_open_visit_event + btn_new_element None - tooltip_btn_open_visit_event + tooltip_btn_new_element None @@ -6418,11 +6517,11 @@ None - dlg_info_feature - Informació característica + tab_connections + Conexions - tooltip_dlg_info_feature + tooltip_tab_connections None @@ -6433,12 +6532,12 @@ Informació bàsica - dlg_info_generic - Informació bàsica + btn_close + Tancar - tooltip_dlg_info_generic - None + tooltip_btn_close + Tancar btn_accept @@ -6449,12 +6548,12 @@ Acceptar - btn_close - Tancar + dlg_info_generic + Informació bàsica - tooltip_btn_close - Tancar + tooltip_dlg_info_generic + None @@ -6464,19 +6563,19 @@ Nou expedt - lbl_link - Enllaç + dlg_info_workcat + Nou expedt - tooltip_lbl_link - Link + tooltip_dlg_info_workcat + None - lbl_workid_key_2 - Work id key 2: + lbl_workid_key_1 + Work id key 1: - tooltip_lbl_workid_key_2 + tooltip_lbl_workid_key_1 None @@ -6488,44 +6587,44 @@ Acceptar - lbl_descript - Descripció: + lbl_link + Enllaç - tooltip_lbl_descript - None + tooltip_lbl_link + Link - btn_cancel - Cancelar + lbl_workid_key_2 + Work id key 2: - tooltip_btn_cancel - Cancelar + tooltip_lbl_workid_key_2 + None - lbl_workid_key_1 - Work id key 1: + lbl_builtdate + Data construcció: - tooltip_lbl_workid_key_1 + tooltip_lbl_builtdate None - dlg_info_workcat - Nou expedt + lbl_descript + Descripció: - tooltip_dlg_info_workcat + tooltip_lbl_descript None - lbl_builtdate - Data construcció: + btn_cancel + Cancelar - tooltip_lbl_builtdate - None + tooltip_btn_cancel + Cancelar @@ -6554,147 +6653,147 @@ mapzone_manager - chk_active - Mostrar inactius - - - tooltip_chk_active - Mostrar inactius + btn_toggle_active + Alternar actiu - - - mincut - title - Polígon de tall + tooltip_btn_toggle_active + Alternar actiu - lbl_chlorine - Clor: + btn_update + Actualitzar - tooltip_lbl_chlorine - None + tooltip_btn_update + Actualitzar - grb_location - Localització + lbl_mapzone_name + Filtrar per: Nom de mapzone - tooltip_grb_location - None + tooltip_lbl_mapzone_name + Filtrar per: Nom de mapzone btn_cancel - Cancelar + Cancel·lar tooltip_btn_cancel - Cancelar + Cancel·lar - lbl_cause - Causa: + btn_delete + Eliminar - tooltip_lbl_cause - None + tooltip_btn_delete + Eliminar - lbl_dist_from_plot - Distància des de la parcel·la: + chk_show_all + Mostra totes les mapzones - tooltip_lbl_dist_from_plot - None + tooltip_chk_show_all + Mostra totes les mapzones - lbl_state - Estat: + btn_execute + - tooltip_lbl_state - None + tooltip_btn_execute + Executar el procés d'anàlisi de mapzone - lbl_start - Desde: + btn_create + Crear - tooltip_lbl_start - None + tooltip_btn_create + Crear - lbl_msg - Sense resultats + btn_config + Configurar - tooltip_lbl_msg - None + tooltip_btn_config + Configurar - lbl_end - Fins: + chk_active + Mostrar inactius - tooltip_lbl_end - None + tooltip_chk_active + Mostrar inactius + + + + mincut + + title + Polígon de tall - lbl_descript_pd - Descripció: + lbl_dist_from_plot + Distància des de la parcel·la: - tooltip_lbl_descript_pd + tooltip_lbl_dist_from_plot None - btn_accept - Acceptar + btn_end + Final - tooltip_btn_accept - Acceptar + tooltip_btn_end + None - lbl_turbidity - Terbolesa: + grb_location + Localització - tooltip_lbl_turbidity + tooltip_grb_location None - lbl_id - Id: + lbl_type + Tipus: - tooltip_lbl_id + tooltip_lbl_type None - lbl_descript_rd - Descripció: + btn_start + Inici - tooltip_lbl_descript_rd + tooltip_btn_start None - lbl_work_order - Work order: + lbl_id + Id: - tooltip_lbl_work_order + tooltip_lbl_id None - chk_use_planified - Utilitzar xarxa planificada + btn_accept + Acceptar - tooltip_chk_use_planified - None + tooltip_btn_accept + Acceptar lbl_exec_appropriate @@ -6720,6 +6819,38 @@ tooltip_lbl_exec_enddate None + + lbl_exec_user + Usuari executiu: + + + tooltip_lbl_exec_user + None + + + chk_use_planified + Utilitzar xarxa planificada + + + tooltip_chk_use_planified + None + + + lbl_descript_pd + Descripció: + + + tooltip_lbl_descript_pd + None + + + lbl_end + Fins: + + + tooltip_lbl_end + None + grb_plan_forecasted_dates Dates previstes @@ -6729,11 +6860,43 @@ None - grb_plan_details - Detalls + lbl_start + Desde: - tooltip_grb_plan_details + tooltip_lbl_start + None + + + lbl_state + Estat: + + + tooltip_lbl_state + None + + + lbl_msg + Sense resultats + + + tooltip_lbl_msg + None + + + lbl_work_order + Work order: + + + tooltip_lbl_work_order + None + + + lbl_chlorine + Clor: + + + tooltip_lbl_chlorine None @@ -6741,32 +6904,40 @@ Dates reals - tooltip_grb_exec_realdates + tooltip_grb_exec_realdates + None + + + lbl_cause + Causa: + + + tooltip_lbl_cause None - btn_start - Inici + grb_plan_details + Detalls - tooltip_btn_start + tooltip_grb_plan_details None - lbl_exec_user - Usuari executiu: + lbl_descript_rd + Descripció: - tooltip_lbl_exec_user + tooltip_lbl_descript_rd None - lbl_type - Tipus: + btn_cancel + Cancelar - tooltip_lbl_type - None + tooltip_btn_cancel + Cancelar lbl_received_date @@ -6801,11 +6972,11 @@ None - btn_end - Final + lbl_turbidity + Terbolesa: - tooltip_btn_end + tooltip_lbl_turbidity None @@ -6816,20 +6987,28 @@ Compositor polígon de tall - lbl_template - Model: + btn_ok + Obrir - tooltip_lbl_template + tooltip_btn_ok None - btn_cancel - Cancelar + dlg_mincut_composer + Compositor polígon de tall - tooltip_btn_cancel - Cancelar + tooltip_dlg_mincut_composer + None + + + lbl_template + Model: + + + tooltip_lbl_template + None lbl_title @@ -6848,20 +7027,12 @@ None - dlg_mincut_composer - Compositor polígon de tall - - - tooltip_dlg_mincut_composer - None - - - btn_ok - Obrir + btn_cancel + Cancelar - tooltip_btn_ok - None + tooltip_btn_cancel + Cancelar @@ -6878,22 +7049,6 @@ tooltip_dlg_mincut_connec None - - btn_accept - Acceptar - - - tooltip_btn_accept - Acceptar - - - btn_insert - None - - - tooltip_btn_insert - Insertar - btn_snapping @@ -6910,6 +7065,22 @@ tooltip_lbl_search None + + btn_insert + None + + + tooltip_btn_insert + Insertar + + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar + btn_delete @@ -6926,21 +7097,37 @@ Finalitzar polígon de tall - lbl_executed - Executat per: + btn_accept + Acceptar - tooltip_lbl_executed + tooltip_btn_accept + Acceptar + + + lbl_end_date + Fins: + + + tooltip_lbl_end_date None - lbl_number - Número: + grb_close_mincut + Cerrar mincut - tooltip_lbl_number + tooltip_grb_close_mincut None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + dlg_mincut_end Finalitzar polígon de tall @@ -6950,11 +7137,11 @@ None - lbl_end_date - Fins: + lbl_work_order + Work order: - tooltip_lbl_end_date + tooltip_lbl_work_order None @@ -6965,14 +7152,6 @@ tooltip_lbl_street None - - btn_set_real_location - Establir ubicació real - - - tooltip_btn_set_real_location - None - lbl_start_hour Hora d'inici @@ -6982,19 +7161,19 @@ None - btn_cancel - Cancelar + lbl_number + Número: - tooltip_btn_cancel - Cancelar + tooltip_lbl_number + None - grb_close_mincut - Cerrar mincut + lbl_municipality + Municipi: - tooltip_grb_close_mincut + tooltip_lbl_municipality None @@ -7006,43 +7185,35 @@ None - lbl_municipality - Municipi: + lbl_end_hour + Hora de finalització: - tooltip_lbl_municipality + tooltip_lbl_end_hour None - lbl_mincut - Id: + lbl_executed + Executat per: - tooltip_lbl_mincut + tooltip_lbl_executed None - btn_accept - Acceptar - - - tooltip_btn_accept - Acceptar - - - lbl_end_hour - Hora de finalització: + lbl_mincut + Id: - tooltip_lbl_end_hour + tooltip_lbl_mincut None - lbl_work_order - Work order: + btn_set_real_location + Establir ubicació real - tooltip_lbl_work_order + tooltip_btn_set_real_location None @@ -7053,43 +7224,35 @@ Hidròmetre polígon de tall - lbl_hcc - Codi client hidròmetre: - - - tooltip_lbl_hcc - None + btn_accept + Acceptar - lbl_ccc - Conectar codi client: + tooltip_btn_accept + Acceptar - tooltip_lbl_ccc - None + dlg_mincut_hydrometer + Hidròmetre polígon de tall - btn_insert + tooltip_dlg_mincut_hydrometer None - tooltip_btn_insert - Insertar - - - btn_accept - Acceptar + lbl_ccc + Conectar codi client: - tooltip_btn_accept - Acceptar + tooltip_lbl_ccc + None - dlg_mincut_hydrometer - Hidròmetre polígon de tall + lbl_hcc + Codi client hidròmetre: - tooltip_dlg_mincut_hydrometer + tooltip_lbl_hcc None @@ -7100,6 +7263,14 @@ tooltip_btn_delete Eliminar + + btn_insert + None + + + tooltip_btn_insert + Insertar + mincut_manager @@ -7108,35 +7279,35 @@ Gestió polígon de tall - btn_next_days - Pròxims dies + btn_selector_mincut + None - tooltip_btn_next_days + tooltip_btn_selector_mincut None - lbl_exploitation - Explotació: + btn_cancel + Tancar - tooltip_lbl_exploitation - None + tooltip_btn_cancel + - dlg_mincut_manager - Gestió polígon de tall + btn_delete + Esborrar - tooltip_dlg_mincut_manager - None + tooltip_btn_delete + Eliminar - lbl_mincut_type - Tipus: + lbl_filter + Filtrar per: - tooltip_lbl_mincut_type + tooltip_lbl_filter None @@ -7148,27 +7319,19 @@ None - lbl_streetaxis - Carrer: + lbl_date_from + Desde: - tooltip_lbl_streetaxis + tooltip_lbl_date_from None - btn_delete - Esborrar - - - tooltip_btn_delete - Eliminar - - - lbl_date_from - Desde: + lbl_exploitation + Explotació: - tooltip_lbl_date_from + tooltip_lbl_exploitation None @@ -7180,27 +7343,27 @@ None - lbl_filter - Filtrar per: + btn_next_days + Pròxims dies - tooltip_lbl_filter + tooltip_btn_next_days None - btn_cancel - Tancar + btn_notify + Enviar SMS - tooltip_btn_cancel - + tooltip_btn_notify + None - btn_selector_mincut - None + lbl_mincut_type + Tipus: - tooltip_btn_selector_mincut + tooltip_lbl_mincut_type None @@ -7220,47 +7383,47 @@ None - btn_notify - Enviar SMS + dlg_mincut_manager + Gestió polígon de tall - tooltip_btn_notify + tooltip_dlg_mincut_manager None - - - netscenario_manager - btn_update_netscenario - + lbl_streetaxis + Carrer: - tooltip_btn_update_netscenario - Current netscenario + tooltip_lbl_streetaxis + None + + + netscenario_manager - chk_active - Mostrar inactius + btn_create + Crear - tooltip_chk_active - Mostrar inactius + tooltip_btn_create + Crear - btn_duplicate - Duplicar + lbl_netscenario_name + - tooltip_btn_duplicate - Duplicar + tooltip_lbl_netscenario_name + Filter by: Netscenario name - btn_cancel - Tancar + btn_update + Actualitzar - tooltip_btn_cancel - Tancar + tooltip_btn_update + Actualitzar btn_delete @@ -7271,36 +7434,36 @@ Esborrar - btn_update - Actualitzar + btn_cancel + Tancar - tooltip_btn_update - Actualitzar + tooltip_btn_cancel + Tancar - lbl_netscenario_name + btn_toc - tooltip_lbl_netscenario_name - Filter by: Netscenario name + tooltip_btn_toc + Carregar capes Giswater - btn_create - Crear + btn_update_netscenario + - tooltip_btn_create - Crear + tooltip_btn_update_netscenario + Current netscenario - btn_execute - + btn_duplicate + Duplicar - tooltip_btn_execute - Execute mapzones analysis + tooltip_btn_duplicate + Duplicar btn_toggle_active @@ -7311,12 +7474,20 @@ Toggle active - btn_toc + btn_execute - tooltip_btn_toc - Carregar capes Giswater + tooltip_btn_execute + Execute mapzones analysis + + + chk_active + Mostrar inactius + + + tooltip_chk_active + Mostrar inactius @@ -7342,11 +7513,11 @@ Acceptar - dlg_nodetype_change - Canviar tipus node + lbl_node_type + Tipus node actual: - tooltip_dlg_nodetype_change + tooltip_lbl_node_type None @@ -7358,19 +7529,19 @@ None - lbl_node_type - Tipus node actual: + lbl_catalog_id + Id catàleg - tooltip_lbl_node_type + tooltip_lbl_catalog_id None - lbl_catalog_id - Id catàleg + dlg_nodetype_change + Canviar tipus node - tooltip_lbl_catalog_id + tooltip_dlg_nodetype_change None @@ -7388,332 +7559,332 @@ plan_psector - lbl_text2 - Text 2: + lbl_priority + Prioritat: - tooltip_lbl_text2 + tooltip_lbl_priority - lbl_type - Tipus: + btn_snapping + None - tooltip_lbl_type - + tooltip_btn_snapping + Seleccionar elements - lbl_workcat_id - Expedient: + btn_set_to_arc + None - tooltip_lbl_workcat_id - + tooltip_btn_set_to_arc + Establir arc_id (només ARC exit_type) - btn_remove - Esborrar + lbl_vat + VAT: - tooltip_btn_remove + tooltip_lbl_vat - lbl_vat - VAT: + lbl_general_expenses + Despeses generals - tooltip_lbl_vat + tooltip_lbl_general_expenses - lbl_total_nodes - Total nodes: + btn_rapports + Generar informe - tooltip_lbl_total_nodes + tooltip_btn_rapports - lbl_total_arcs - Total trams: + btn_select + Seleccionar - tooltip_lbl_total_arcs + tooltip_btn_select - lbl_text3 - Text 3: + btn_select + Seleccionar - tooltip_lbl_text3 + tooltip_btn_select - btn_set_to_arc + btn_select_arc None - tooltip_btn_set_to_arc - Establir arc_id (només ARC exit_type) + tooltip_btn_select_arc + Reemplaçar en servei per arcs planificats - lbl_scale - Escala: + lbl_other_expenses + Altres despeses - tooltip_lbl_scale + tooltip_lbl_other_expenses - lbl_status - Estat: + lbl_num_value + Número valor: - tooltip_lbl_status + tooltip_lbl_num_value - lbl_rotation - Rotació: + lbl_text6 + Text 6: - tooltip_lbl_rotation + tooltip_lbl_text6 - lbl_text1 - Text 1: + lbl_text5 + Text 5: - tooltip_lbl_text1 + tooltip_lbl_text5 - lbl_parent_id - Id relacionat: + lbl_text4 + Text 4: - tooltip_lbl_parent_id + tooltip_lbl_text4 - btn_insert - None + lbl_text3 + Text 3: - tooltip_btn_insert - Insertar + tooltip_lbl_text3 + - btn_cancel - Cancelar + btn_arc_fusion + None - tooltip_btn_cancel - + tooltip_btn_arc_fusion + Fusionar arcs planificats - - lbl_exploitation - Explotació: + + lbl_scale + Escala: - tooltip_lbl_exploitation + tooltip_lbl_scale - btn_accept - Aceptar + lbl_rotation + Rotació: - tooltip_btn_accept + tooltip_lbl_rotation - lbl_observation - Observacions: + btn_remove + Esborrar - tooltip_lbl_observation + tooltip_btn_remove - lbl_descript - Descripció: + btn_cancel + Cancelar - tooltip_lbl_descript + tooltip_btn_cancel - active - Actiu + btn_accept + Aceptar - tooltip_active + tooltip_btn_accept - lbl_name - Nom: + lbl_atlas_id + Rotació: - tooltip_lbl_name + tooltip_lbl_atlas_id - chk_enable_all - Habilitar tot (visualitzar estat obsolet en elements relacionats amb psector) + lbl_parent_id + Id relacionat: - tooltip_chk_enable_all + tooltip_lbl_parent_id - grb_map_details - Detalls de mapa + lbl_observation + Observacions: - tooltip_grb_map_details + tooltip_lbl_observation - btn_rapports - Generar informe + lbl_name + Nom: - tooltip_btn_rapports + tooltip_lbl_name - btn_select - Seleccionar + lbl_ext_code + Codi extern: - tooltip_btn_select + tooltip_lbl_ext_code - btn_select - Seleccionar + lbl_workcat_id + Expedient: - tooltip_btn_select + tooltip_lbl_workcat_id - lbl_atlas_id - Rotació: + lbl_type + Tipus: - tooltip_lbl_atlas_id + tooltip_lbl_type - btn_select_arc - None + lbl_text2 + Text 2: - tooltip_btn_select_arc - Reemplaçar en servei per arcs planificats + tooltip_lbl_text2 + - btn_delete - None + lbl_text1 + Text 1: - tooltip_btn_delete - Esborrar + tooltip_lbl_text1 + - lbl_ext_code - Codi extern: + lbl_status + Estat: - tooltip_lbl_ext_code + tooltip_lbl_status - lbl_other_expenses - Altres despeses + lbl_psector_id + Psector id: - tooltip_lbl_other_expenses + tooltip_lbl_psector_id - btn_arc_fusion + btn_insert None - tooltip_btn_arc_fusion - Fusionar arcs planificats + tooltip_btn_insert + Insertar - lbl_general_expenses - Despeses generals + grb_map_details + Detalls de mapa - tooltip_lbl_general_expenses + tooltip_grb_map_details - lbl_priority - Prioritat: + chk_enable_all + Habilitar tot (visualitzar estat obsolet en elements relacionats amb psector) - tooltip_lbl_priority + tooltip_chk_enable_all - btn_snapping - None + active + Actiu - tooltip_btn_snapping - Seleccionar elements + tooltip_active + - lbl_psector_id - Psector id: + lbl_descript + Descripció: - tooltip_lbl_psector_id + tooltip_lbl_descript - lbl_num_value - Número valor: + lbl_exploitation + Explotació: - tooltip_lbl_num_value + tooltip_lbl_exploitation - lbl_text6 - Text 6: + lbl_total_nodes + Total nodes: - tooltip_lbl_text6 + tooltip_lbl_total_nodes - lbl_text5 - Text 5: + lbl_total_arcs + Total trams: - tooltip_lbl_text5 + tooltip_lbl_total_arcs - lbl_text4 - Text 4: + btn_delete + None - tooltip_lbl_text4 - + tooltip_btn_delete + Esborrar @@ -7723,12 +7894,12 @@ Gestior resultats preus - btn_cancel - Cancelar + lbl_result_id + Filtrar per: - tooltip_btn_cancel - Cancelar + tooltip_lbl_result_id + None btn_delete @@ -7739,27 +7910,27 @@ Eliminar - dlg_price_manager - Gestior resultats preus + btn_update_result + Resultat actual - tooltip_dlg_price_manager + tooltip_btn_update_result None - btn_update_result - Resultat actual + btn_cancel + Cancelar - tooltip_btn_update_result - None + tooltip_btn_cancel + Cancelar - lbl_result_id - Filtrar per: + dlg_price_manager + Gestior resultats preus - tooltip_lbl_result_id + tooltip_dlg_price_manager None @@ -7770,59 +7941,27 @@ Càlcul de prioritat - dlg_priority - Càlcul de prioritat - - - tooltip_dlg_priority - None - - - tab_engine - Motor de càlcul - - - tooltip_tab_engine - None - - - tab_infolog - Info log - - - tooltip_tab_infolog - None - - - lbl_result_id - Nom del resultat: - - - tooltip_lbl_result_id - None - - - grb_global - Paràmetres de càlcul + lbl_expl_selection + Explotació: - tooltip_grb_global + tooltip_lbl_expl_selection None - tab_calc - Càlcul + tab_material + Material - tooltip_tab_calc + tooltip_tab_material None - tab_material - Material + tab_catalog + Catàleg - tooltip_tab_material + tooltip_tab_catalog None @@ -7842,51 +7981,51 @@ None - btn_snapping - None + tab_infolog + Info log - tooltip_btn_snapping - Seleccioni els elements en la vista del mapa + tooltip_tab_infolog + None - lbl_material - Material: + btn_snapping + None - tooltip_lbl_material - None + tooltip_btn_snapping + Seleccioni els elements en la vista del mapa - lbl_expl_selection - Explotació: + btn_calc + Calcular - tooltip_lbl_expl_selection + tooltip_btn_calc None - lbl_descript - Descripció: + lbl_result_id + Nom del resultat: - tooltip_lbl_descript + tooltip_lbl_result_id None - btn_calc - Calcular + lbl_presszone + Zona de pressió: - tooltip_btn_calc + tooltip_lbl_presszone None - lbl_year - Horizon year: + tab_engine + Motor de càlcul - tooltip_lbl_year + tooltip_tab_engine None @@ -7898,11 +8037,11 @@ None - lbl_presszone - Zona de pressió: + lbl_descript + Descripció: - tooltip_lbl_presszone + tooltip_lbl_descript None @@ -7922,50 +8061,66 @@ - tab_catalog - Catàleg + dlg_priority + Càlcul de prioritat - tooltip_tab_catalog + tooltip_dlg_priority None - - - priority_manager - title - Gestor de resultats + lbl_year + Horizon year: - lbl_info - Informació: + tooltip_lbl_year + None - tooltip_lbl_info + grb_global + Paràmetres de càlcul + + + tooltip_grb_global None - lbl_status - Estat: + tab_calc + Càlcul - tooltip_lbl_status + tooltip_tab_calc None - dlg_priority_manager + lbl_material + Material: + + + tooltip_lbl_material + None + + + + priority_manager + + title Gestor de resultats - tooltip_dlg_priority_manager + lbl_status + Estat: + + + tooltip_lbl_status None - lbl_filter - Filtrar per: Nom del resultat + btn_edit + Editar - tooltip_lbl_filter + tooltip_btn_edit None @@ -7977,27 +8132,27 @@ None - btn_delete - Eliminar + btn_duplicate + Duplicar - tooltip_btn_delete - + tooltip_btn_duplicate + None - btn_close - Close + lbl_expl + Explotació: - tooltip_btn_close + tooltip_lbl_expl None - lbl_expl - Explotació: + btn_close + Close - tooltip_lbl_expl + tooltip_btn_close None @@ -8009,19 +8164,35 @@ None - btn_duplicate - Duplicar + lbl_info + Informació: - tooltip_btn_duplicate + tooltip_lbl_info None - btn_edit - Editar + lbl_filter + Filtrar per: Nom del resultat - tooltip_btn_edit + tooltip_lbl_filter + None + + + btn_delete + Eliminar + + + tooltip_btn_delete + + + + dlg_priority_manager + Gestor de resultats + + + tooltip_dlg_priority_manager None @@ -8032,27 +8203,27 @@ Dibuixar perfil - btn_delete_additional_point - None + btn_add_end_point + Afegir punt final - tooltip_btn_delete_additional_point - None + tooltip_btn_add_end_point + - lbl_title - Títol + btn_add_additional_point + Afegir punt adicional - tooltip_lbl_title + tooltip_btn_add_additional_point None - lbl_end_point - Punt final: + lbl_profile_id + Id perfil: - tooltip_lbl_end_point + tooltip_lbl_profile_id None @@ -8064,75 +8235,75 @@ None - btn_add_end_point - Afegir punt final + btn_save_profile + Guardar perfil - tooltip_btn_add_end_point - + tooltip_btn_save_profile + None - btn_add_additional_point - Afegir punt adicional + lbl_template + Model: - tooltip_btn_add_additional_point + tooltip_lbl_template None - lbl_profile_id - Id perfil: + lbl_end_point + Punt final: - tooltip_lbl_profile_id + tooltip_lbl_end_point None - btn_load_profile - Carregar perfil + lbl_rotation + Rotació: - tooltip_btn_load_profile + tooltip_lbl_rotation None - lbl_additional_point - Punt adicional: + lbl_title + Títol - tooltip_lbl_additional_point + tooltip_lbl_title None - dlg_profile + btn_draw Dibuixar perfil - tooltip_dlg_profile + tooltip_btn_draw None - lbl_path - Ruta: + btn_clear_profile + Netejar perfil - tooltip_lbl_path + tooltip_btn_clear_profile None - btn_close - Tancar + btn_update_path + ... - tooltip_btn_close - Tancar + tooltip_btn_update_path + None - btn_add_start_point - Afegir punt inicial + lbl_sv + Escala vertical: - tooltip_btn_add_start_point + tooltip_lbl_sv None @@ -8144,19 +8315,19 @@ None - lbl_sv - Escala vertical: + btn_add_start_point + Afegir punt inicial - tooltip_lbl_sv + tooltip_btn_add_start_point None - btn_draw - Dibuixar perfil + btn_delete_additional_point + None - tooltip_btn_draw + tooltip_btn_delete_additional_point None @@ -8168,43 +8339,43 @@ None - lbl_rotation - Rotació: + btn_load_profile + Carregar perfil - tooltip_lbl_rotation + tooltip_btn_load_profile None - lbl_template - Model: + dlg_profile + Dibuixar perfil - tooltip_lbl_template + tooltip_dlg_profile None - btn_save_profile - Guardar perfil + btn_close + Tancar - tooltip_btn_save_profile - None + tooltip_btn_close + Tancar - btn_update_path - ... + lbl_additional_point + Punt adicional: - tooltip_btn_update_path + tooltip_lbl_additional_point None - btn_clear_profile - Netejar perfil + lbl_path + Ruta: - tooltip_btn_clear_profile + tooltip_lbl_path None @@ -8259,15 +8430,7 @@ tooltip_btn_accept - Acceptar - - - dlg_project_check - Revisar projecte - - - tooltip_dlg_project_check - None + Acceptar tab_databaselog @@ -8277,6 +8440,14 @@ tooltip_tab_databaselog None + + dlg_project_check + Revisar projecte + + + tooltip_dlg_project_check + None + psector_duplicate @@ -8285,27 +8456,19 @@ Duplicar sector - tab_info_log - Info log + tab_duplicate_psector + Duplicar sector - tooltip_tab_info_log + tooltip_tab_duplicate_psector None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - - - lbl_duplicate_psector - Duplicar sector: + tab_info_log + Info log - tooltip_lbl_duplicate_psector + tooltip_tab_info_log None @@ -8317,12 +8480,12 @@ None - btn_accept - Acceptar + lbl_duplicate_psector + Duplicar sector: - tooltip_btn_accept - Acceptar + tooltip_lbl_duplicate_psector + None dlg_psector_duplicate @@ -8333,12 +8496,20 @@ None - tab_duplicate_psector - Duplicar sector + btn_cancel + Cancelar - tooltip_tab_duplicate_psector - None + tooltip_btn_cancel + Cancelar + + + btn_accept + Acceptar + + + tooltip_btn_accept + Acceptar @@ -8347,14 +8518,6 @@ title Gestor de sector - - btn_update_psector - Sector actual - - - tooltip_btn_update_psector - None - btn_merge Fusionar @@ -8364,35 +8527,43 @@ Per fusionar diversos sectors en un, has de sel·leccionar-los amb Ctrl y apretar aquest botó - btn_toggle_active - Alterar actiu + lbl_psector_name + Filtrar per: - tooltip_btn_toggle_active + tooltip_lbl_psector_name None - btn_delete - Esborrar + btn_duplicate + Duplicar - tooltip_btn_delete - Eliminar + tooltip_btn_duplicate + None - lbl_psector_name - Filtrar per: + btn_update_psector + Sector actual - tooltip_lbl_psector_name + tooltip_btn_update_psector None - btn_duplicate - Duplicar + btn_delete + Esborrar - tooltip_btn_duplicate + tooltip_btn_delete + Eliminar + + + dlg_psector_manager + Gestor de sector + + + tooltip_dlg_psector_manager None @@ -8404,20 +8575,20 @@ Mostrar inactius - btn_cancel - Cancelar + btn_toggle_active + Alterar actiu - tooltip_btn_cancel - Cancelar + tooltip_btn_toggle_active + None - dlg_psector_manager - Gestor de sector + btn_cancel + Cancelar - tooltip_dlg_psector_manager - None + tooltip_btn_cancel + Cancelar @@ -8427,19 +8598,27 @@ Generador d'informes - lbl_template - Model: + lbl_detail_csv + Arxiu CSV detall: - tooltip_lbl_template + tooltip_lbl_detail_csv None - btn_ok - Crear + btn_path + ... - tooltip_btn_ok + tooltip_btn_path + None + + + lbl_composer_disabled + Compositor desactivat + + + tooltip_lbl_composer_disabled None @@ -8451,27 +8630,27 @@ None - btn_cancel - Cancelar + grb_rapport + Infrome - tooltip_btn_cancel - Cancelar + tooltip_grb_rapport + None - lbl_composer_disabled - Compositor desactivat + btn_cancel + Cancelar - tooltip_lbl_composer_disabled - None + tooltip_btn_cancel + Cancelar - btn_path - ... + lbl_prices_list + Arxiu CSV llista de preus: - tooltip_btn_path + tooltip_lbl_prices_list None @@ -8483,27 +8662,19 @@ None - grb_rapport - Infrome - - - tooltip_grb_rapport - None - - - lbl_prices_list - Arxiu CSV llista de preus: + btn_ok + Crear - tooltip_lbl_prices_list + tooltip_btn_ok None - lbl_detail_csv - Arxiu CSV detall: + lbl_template + Model: - tooltip_lbl_detail_csv + tooltip_lbl_template None @@ -8514,11 +8685,19 @@ Selector de resultats - lbl_descript_compare - Descripció: + tab_result + Resultat - tooltip_lbl_descript_compare + tooltip_tab_result + None + + + btn_cancel + Cancel + + + tooltip_btn_cancel None @@ -8530,11 +8709,11 @@ None - btn_cancel - Cancel + dlg_result_selector + Selector de resultats - tooltip_btn_cancel + tooltip_dlg_result_selector None @@ -8546,11 +8725,11 @@ None - tab_result - Resultat + lbl_descript_compare + Descripció: - tooltip_tab_result + tooltip_lbl_descript_compare None @@ -8569,14 +8748,6 @@ tooltip_lbl_result_compare None - - dlg_result_selector - Selector de resultats - - - tooltip_dlg_result_selector - None - search @@ -8584,6 +8755,14 @@ title Cerca + + dlg_search + Cerca + + + tooltip_dlg_search + None + lbl_msg Sense resultats @@ -8600,14 +8779,6 @@ tooltip_Check all None - - dlg_search - Cerca - - - tooltip_dlg_search - None - search_workcat @@ -8616,11 +8787,11 @@ Bsucar expdte - btn_path - ... + lbl_end + Flitrar per: - tooltip_btn_path + tooltip_lbl_end None @@ -8632,19 +8803,11 @@ None - lbl_destination_path - Ruta de destí - - - tooltip_lbl_destination_path - None - - - tab_doc - Documents + btn_path + ... - tooltip_tab_doc + tooltip_btn_path None @@ -8664,11 +8827,19 @@ None - btn_state1 - Activar + lbl_init + Filtrar per: - tooltip_btn_state1 + tooltip_lbl_init + None + + + tab_doc + Documents + + + tooltip_tab_doc None @@ -8680,43 +8851,43 @@ None - lbl_init - Filtrar per: + lbl_feat_ini + Element donats d'alta: - tooltip_lbl_init + tooltip_lbl_feat_ini None - btn_state0 - Activar + dlg_search_workcat + Bsucar expdte - tooltip_btn_state0 + tooltip_dlg_search_workcat None - tab_ended - Donat d'ata + btn_state1 + Activar - tooltip_tab_ended + tooltip_btn_state1 None - dlg_search_workcat - Bsucar expdte + btn_export_to_csv + Exportar a CSV - tooltip_dlg_search_workcat + tooltip_btn_export_to_csv None - btn_export_to_csv - Exportar a CSV + tab_ended + Donat d'ata - tooltip_btn_export_to_csv + tooltip_tab_ended None @@ -8728,19 +8899,19 @@ None - lbl_feat_ini - Element donats d'alta: + btn_state0 + Activar - tooltip_lbl_feat_ini + tooltip_btn_state0 None - lbl_end - Flitrar per: + lbl_destination_path + Ruta de destí - tooltip_lbl_end + tooltip_lbl_destination_path None @@ -8750,6 +8921,14 @@ title Selector + + dlg_selector + Selector + + + tooltip_dlg_selector + None + btn_close Tanca @@ -8766,14 +8945,6 @@ tooltip_btn_close Tancar - - dlg_selector - Selector - - - tooltip_dlg_selector - None - status_selector @@ -8781,6 +8952,22 @@ title Selector de estado + + btn_accept + Acceptar + + + tooltip_btn_accept + None + + + lbl_new_status + Nou estat: + + + tooltip_lbl_new_status + None + dlg_status_selector Selector de estado @@ -8789,6 +8976,14 @@ tooltip_dlg_status_selector None + + btn_cancel + Cancel + + + tooltip_btn_cancel + None + lbl_result_main Està canviant l'estat del següent resultat: @@ -8797,29 +8992,88 @@ tooltip_lbl_result_main None + + + style_manager btn_cancel - Cancel + Tanca tooltip_btn_cancel - None + Tanca - lbl_new_status - Nou estat: + btn_updateStyle + Actualitza l'estil - tooltip_lbl_new_status - None + tooltip_btn_updateStyle + Actualitza l'estil de la capa seleccionada amb l'estil de la capa corresponent en el projecte - btn_accept - Acceptar + btn_deleteGroup + - tooltip_btn_accept - None + tooltip_btn_deleteGroup + Elimina la categoria seleccionada + + + btn_addGroup + + + + tooltip_btn_addGroup + Afegeix una nova categoria + + + btn_deleteStyle + Elimina l'estil + + + tooltip_btn_deleteStyle + Elimina un estil de la categoria + + + stylegroup + + + + tooltip_stylegroup + Totes les teves categories d'estils + + + style_name + + + + tooltip_style_name + Introdueix el nom de la capa per filtrar + + + lbl_filter_name + Filtrar per: Nom de la capa + + + tooltip_lbl_filter_name + + + + btn_refreshAll + Actualitza-ho tot + + + tooltip_btn_refreshAll + Recarrega els estils carregats al projecte + + + btn_addStyle + Afegeix estil + + + tooltip_btn_addStyle + Afegeix una capa a la categoria seleccionada @@ -8836,14 +9090,6 @@ tooltip_btn_run None - - btn_close - Tancar - - - tooltip_btn_close - Tancar - btn_cancel Cancelar @@ -8853,19 +9099,19 @@ Cancelar - tab_loginfo - Info log + dlg_toolbox + Caixa d'eines - tooltip_tab_loginfo + tooltip_dlg_toolbox None - dlg_toolbox - Caixa d'eines + tab_loginfo + Info log - tooltip_dlg_toolbox + tooltip_tab_loginfo None @@ -8876,6 +9122,14 @@ tooltip_tab_config None + + btn_close + Tancar + + + tooltip_btn_close + Tancar + toolbox_docker @@ -8899,107 +9153,107 @@ Visita - btn_doc_new - None + tab_event + Partes Feina - tooltip_btn_doc_new - Crear nou document + tooltip_tab_event + None - tab_relations - Relacions + btn_open_doc + None - tooltip_tab_relations - Relations + tooltip_btn_open_doc + Obrir document - lbl_feature_type - Tipus d'element: + btn_add_geom + Afegir geometria - tooltip_lbl_feature_type + tooltip_btn_add_geom None - btn_doc_insert - None + lbl_info + Informació: - tooltip_btn_doc_insert - Insertar document + tooltip_lbl_info + None - btn_cancel - Cancelar + lbl_feature_type + Tipus d'element: - tooltip_btn_cancel - Cancelar + tooltip_lbl_feature_type + None - tab_document - Document + lbl_end_date + Fins: - tooltip_tab_document + tooltip_lbl_end_date None - lbl_code - Codi: - - - tooltip_lbl_code + btn_doc_new None - tab_event - Partes Feina + tooltip_btn_doc_new + Crear nou document - tooltip_tab_event + btn_doc_delete None - lbl_user_name - Nom d'usuari: + tooltip_btn_doc_delete + Esborrar document - tooltip_lbl_user_name + btn_event_delete + Esborrar event + + + tooltip_btn_event_delete None - lbl_start_date - Data Inicial: + btn_event_insert + Inserir event - tooltip_lbl_start_date + tooltip_btn_event_insert None - btn_accept - Acceptar + btn_event_update + Actualitzar event - tooltip_btn_accept - Acceptar + tooltip_btn_event_update + None - lbl_status - Estat: + btn_feature_delete + None - tooltip_lbl_status + tooltip_btn_feature_delete None - lbl_descript - Descripció: + btn_feature_insert + None - tooltip_lbl_descript + tooltip_btn_feature_insert None @@ -9011,116 +9265,116 @@ None - btn_feature_insert - None + lbl_descript + Descripció: - tooltip_btn_feature_insert + tooltip_lbl_descript None - lbl_id - Id: + lbl_status + Estat: - tooltip_lbl_id + tooltip_lbl_status None - dlg_visit - Visita + lbl_start_date + Data Inicial: - tooltip_dlg_visit + tooltip_lbl_start_date None - btn_open_doc - None + tab_relations + Relacions - tooltip_btn_open_doc - Obrir document + tooltip_tab_relations + Relations - tab_visit - Visita + lbl_code + Codi: - tooltip_tab_visit + tooltip_lbl_code None - btn_feature_delete - None + tab_document + Document - tooltip_btn_feature_delete + tooltip_tab_document None - btn_event_update - Actualitzar event + lbl_user_name + Nom d'usuari: - tooltip_btn_event_update + tooltip_lbl_user_name None - btn_event_insert - Inserir event + lbl_visitcat_id + Visita cat id - tooltip_btn_event_insert + tooltip_lbl_visitcat_id None - btn_event_delete - Esborrar event + btn_cancel + Cancelar - tooltip_btn_event_delete - None + tooltip_btn_cancel + Cancelar - lbl_info - Informació: + btn_doc_insert + None - tooltip_lbl_info - None + tooltip_btn_doc_insert + Insertar document - btn_doc_delete - None + lbl_id + Id: - tooltip_btn_doc_delete - Esborrar document + tooltip_lbl_id + None - lbl_visitcat_id - Visita cat id + dlg_visit + Visita - tooltip_lbl_visitcat_id + tooltip_dlg_visit None - lbl_end_date - Fins: + tab_visit + Visita - tooltip_lbl_end_date + tooltip_tab_visit None - btn_add_geom - Afegir geometria + btn_accept + Acceptar - tooltip_btn_add_geom - None + tooltip_btn_accept + Acceptar @@ -9129,6 +9383,14 @@ title Cargar documents + + dlg_visit_document + Cargar documents + + + tooltip_dlg_visit_document + None + lbl_visit_id Visita ID @@ -9145,14 +9407,6 @@ tooltip_btn_open None - - dlg_visit_document - Cargar documents - - - tooltip_dlg_visit_document - None - visit_event @@ -9161,27 +9415,27 @@ Event estàndar d'arc - lbl_parameter_id - Id paràmetre: + btn_delete_file + Esborrar arxiu - tooltip_lbl_parameter_id + tooltip_btn_delete_file None - lbl_files - Arxius: + dlg_visit_event + Event estàndar d'arc - tooltip_lbl_files + tooltip_dlg_visit_event None - lbl_position_id - Id posició: + lbl_value + Valor: - tooltip_lbl_position_id + tooltip_lbl_value None @@ -9193,43 +9447,43 @@ None - btn_delete_file - Esborrar arxiu + lbl_parameter_id + Id paràmetre: - tooltip_btn_delete_file + tooltip_lbl_parameter_id None - lbl_text - Text: + lbl_position_value + Valor posció - tooltip_lbl_text + tooltip_lbl_position_value None - lbl_position_value - Valor posció + lbl_position_id + Id posició: - tooltip_lbl_position_value + tooltip_lbl_position_id None - dlg_visit_event - Event estàndar d'arc + lbl_files + Arxius: - tooltip_dlg_visit_event + tooltip_lbl_files None - lbl_value - Valor: + lbl_text + Text: - tooltip_lbl_value + tooltip_lbl_text None @@ -9240,27 +9494,19 @@ Event - lbl_geom3 - Geom 3: - - - tooltip_lbl_geom3 - None - - - lbl_value2 - Valor 2: + btn_close + Tancar - tooltip_lbl_value2 - None + tooltip_btn_close + Tancar - lbl_value - Valor: + lbl_is_last + Últim valor: - tooltip_lbl_value + tooltip_lbl_is_last None @@ -9272,27 +9518,19 @@ None - lbl_is_last - Últim valor: - - - tooltip_lbl_is_last - None - - - lbl_index_val - Factor de pes. + lbl_value + Valor: - tooltip_lbl_index_val + tooltip_lbl_value None - lbl_xcoord - Coordenada X: + lbl_value2 + Valor 2: - tooltip_lbl_xcoord + tooltip_lbl_value2 None @@ -9303,14 +9541,6 @@ tooltip_dlg_visit_event_full None - - tab_info - Informació - - - tooltip_tab_info - None - lbl_value1 Valor 1: @@ -9320,12 +9550,12 @@ None - lbl_ycoord - Cooordenad Y: + lbl_visit_id + Visita ID - tooltip_lbl_ycoord - None + tooltip_lbl_visit_id + Visit ID lbl_parameter_id @@ -9367,14 +9597,6 @@ tooltip_lbl_files None - - lbl_visit_id - Visita ID - - - tooltip_lbl_visit_id - Visit ID - lbl_event_code Codi event: @@ -9415,6 +9637,30 @@ tooltip_lbl_id None + + lbl_geom3 + Geom 3: + + + tooltip_lbl_geom3 + None + + + lbl_ycoord + Cooordenad Y: + + + tooltip_lbl_ycoord + None + + + lbl_xcoord + Coordenada X: + + + tooltip_lbl_xcoord + None + lbl_text Text: @@ -9424,12 +9670,20 @@ None - btn_close - Tancar + tab_info + Informació - tooltip_btn_close - Tancar + tooltip_tab_info + None + + + lbl_index_val + Factor de pes. + + + tooltip_lbl_index_val + None @@ -9439,51 +9693,51 @@ Event rehabilització d'arc - dlg_visit_event_rehab - Event rehabilització d'arc + btn_delete_file + Esborrar arxiu - tooltip_dlg_visit_event_rehab + tooltip_btn_delete_file None - btn_delete_file - Esborrar arxiu + lbl_value2 + Valor 2: - tooltip_btn_delete_file + tooltip_lbl_value2 None - lbl_parameter_id - Id paràmetre: + lbl_text + Text: - tooltip_lbl_parameter_id + tooltip_lbl_text None - lbl_files - Arxius: + lbl_position_id + Id posició. - tooltip_lbl_files + tooltip_lbl_position_id None - lbl_geom1 - Geom 1: + lbl_parameter_id + Id paràmetre: - tooltip_lbl_geom1 + tooltip_lbl_parameter_id None - btn_add_file - Afegir arxiu + lbl_geom2 + Geom 2: - tooltip_btn_add_file + tooltip_lbl_geom2 None @@ -9495,11 +9749,11 @@ None - lbl_value1 - Valor 1: + btn_add_file + Afegir arxiu - tooltip_lbl_value1 + tooltip_btn_add_file None @@ -9511,35 +9765,35 @@ None - lbl_geom2 - Geom 2: + lbl_geom1 + Geom 1: - tooltip_lbl_geom2 + tooltip_lbl_geom1 None - lbl_position_id - Id posició. + dlg_visit_event_rehab + Event rehabilització d'arc - tooltip_lbl_position_id + tooltip_dlg_visit_event_rehab None - lbl_value2 - Valor 2: + lbl_files + Arxius: - tooltip_lbl_value2 + tooltip_lbl_files None - lbl_text - Text: + lbl_value1 + Valor 1: - tooltip_lbl_text + tooltip_lbl_value1 None @@ -9558,20 +9812,20 @@ None - btn_next + btn_previous None - tooltip_btn_next + tooltip_btn_previous None - lbl_visit_id - Visita ID + btn_next + None - tooltip_lbl_visit_id - Visit ID + tooltip_btn_next + None btn_close @@ -9590,12 +9844,12 @@ None - btn_previous - None + lbl_visit_id + Visita ID - tooltip_btn_previous - None + tooltip_lbl_visit_id + Visit ID @@ -9605,19 +9859,11 @@ Zum galería - lbl_event_id - Id event: - - - tooltip_lbl_event_id - None - - - lbl_img_zoom - lbl_img_zoom + dlg_visit_gallery_zoom + Zum galería - tooltip_lbl_img_zoom + tooltip_dlg_visit_gallery_zoom None @@ -9629,27 +9875,35 @@ Visit ID - dlg_visit_gallery_zoom - Zum galería + lbl_event_id + Id event: - tooltip_dlg_visit_gallery_zoom + tooltip_lbl_event_id None - btn_slideNext + btn_slidePrevious None - tooltip_btn_slideNext + tooltip_btn_slidePrevious None - btn_slidePrevious + lbl_img_zoom + lbl_img_zoom + + + tooltip_lbl_img_zoom None - tooltip_btn_slidePrevious + btn_slideNext + None + + + tooltip_btn_slideNext None @@ -9660,12 +9914,12 @@ Afegir foto - lbl_link - Enllaç + btn_cancel + Cancelar - tooltip_lbl_link - Link + tooltip_btn_cancel + Cancelar btn_accept @@ -9676,79 +9930,79 @@ Acceptar - dlg_visit_picture - Afegir foto + path_doc + ... - tooltip_dlg_visit_picture + tooltip_path_doc None - path_doc - ... + lbl_link + Enllaç - tooltip_path_doc - None + tooltip_lbl_link + Link - btn_cancel - Cancelar + dlg_visit_picture + Afegir foto - tooltip_btn_cancel - Cancelar + tooltip_dlg_visit_picture + None workspace_create - txt_workspace_name - txt_workspace_name + lbl_new_workspace + Nom: - tooltip_txt_workspace_name - Nom del nou espai de treball *Obligatori + tooltip_lbl_new_workspace + Nom del nou espai de treball - lbl_new_workspace_descript - Descripció: + btn_accept + Acceptar - tooltip_lbl_new_workspace_descript - Descripció del nou espai de treball + tooltip_btn_accept + None - btn_cancel - Cancelar + btn_update + Actualitza - tooltip_btn_cancel + tooltip_btn_update None - txt_workspace_descript - txt_workspace_descript + lbl_new_workspace_descript + Descripció: - tooltip_txt_workspace_descript - Utilitza aquest camp per descriure les característiques de l'espai de treball + tooltip_lbl_new_workspace_descript + Descripció del nou espai de treball - btn_update - Actualitza + txt_workspace_descript + txt_workspace_descript - tooltip_btn_update - None + tooltip_txt_workspace_descript + Utilitza aquest camp per descriure les característiques de l'espai de treball - btn_accept - Acceptar + txt_workspace_name + txt_workspace_name - tooltip_btn_accept - None + tooltip_txt_workspace_name + Nom del nou espai de treball *Obligatori btn_toggle_privacy @@ -9759,16 +10013,24 @@ None - lbl_new_workspace - Nom: + btn_cancel + Cancelar - tooltip_lbl_new_workspace - Nom del nou espai de treball + tooltip_btn_cancel + None workspace_manager + + btn_cancel + Tanca + + + tooltip_btn_cancel + None + btn_reset Restablir @@ -9777,6 +10039,14 @@ tooltip_btn_reset Restableix els valors de l'espai de treball actual + + lbl_workspace_name + Filtrar per: Nom + + + tooltip_lbl_workspace_name + None + btn_delete Eliminar @@ -9786,20 +10056,20 @@ Elimina l'espai de treball seleccionat - lbl_workspace_name - Filtrar per: Nom + btn_create + Crear - tooltip_lbl_workspace_name - None + tooltip_btn_create + Crea - btn_cancel - Tanca + txt_name + txt_name - tooltip_btn_cancel - None + tooltip_txt_name + Nom de l'espai de treball lbl_vdefault_workspace @@ -9817,22 +10087,6 @@ tooltip_btn_current Utilitza l'espai de treball seleccionat - - txt_name - txt_name - - - tooltip_txt_name - Nom de l'espai de treball - - - btn_create - Crear - - - tooltip_btn_create - Crea - diff --git a/i18n/giswater_en_US.qm b/i18n/giswater_en_US.qm index 4aef4d9c0..3c75b2f9c 100644 Binary files a/i18n/giswater_en_US.qm and b/i18n/giswater_en_US.qm differ diff --git a/i18n/giswater_en_US.ts b/i18n/giswater_en_US.ts index f6097b78a..a767c89dd 100644 --- a/i18n/giswater_en_US.ts +++ b/i18n/giswater_en_US.ts @@ -80,10 +80,6 @@ GwElementManagerButton Element manager - - GwEpaWorldButton - Epa World - ResultManager Result manager @@ -132,6 +128,10 @@ 76_text Lot filter + + GwLayerStyleChangeButton + Giswater styles + 18_text Commercial connection @@ -2298,11 +2298,11 @@ admin_addfields - lbl_query_text - Query text: + lbl_data_type + Data type: - tooltip_lbl_query_text + tooltip_lbl_data_type None @@ -2314,59 +2314,59 @@ None - lbl_form_type - Form type: + lbl_query_filter + Query text filter: - tooltip_lbl_form_type + tooltip_lbl_query_filter None - lbl_data_type - Data type: + lbl_num_dec + Num decimals: - tooltip_lbl_data_type + tooltip_lbl_num_dec None - lbl_not_update - Not update: + lbl_reload_field + Reload field: - tooltip_lbl_not_update + tooltip_lbl_reload_field None - lbl_num_dec - Num decimals: + btn_open + Open - tooltip_lbl_num_dec + tooltip_btn_open None - lbl_reload_field - Reload field: + lbl_editability + Editability: - tooltip_lbl_reload_field + tooltip_lbl_editability None - lbl_query_filter - Query text filter: + tab_update + Update - tooltip_lbl_query_filter + tooltip_tab_update None - tab_create - Create + lbl_form_type + Form type: - tooltip_tab_create + tooltip_lbl_form_type None @@ -2378,44 +2378,44 @@ None - dlg_main_addfields - Dialog + lbl_column_id + Column name: - tooltip_dlg_main_addfields + tooltip_lbl_column_id None - lbl_typeahead - Typeahead: + tab_delete + Delete - tooltip_lbl_typeahead + tooltip_tab_delete None - lbl_tooltip - Tooltip: + tab_create + Create - tooltip_lbl_tooltip + tooltip_tab_create None - tab_delete - Delete + lbl_widget_type + Widget type: - tooltip_tab_delete + tooltip_lbl_widget_type None - lbl_widgetcontrols - Widget controls: + lbl_query_text + Query text: - tooltip_lbl_widgetcontrols - Example configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_lbl_query_text + None btn_cancel @@ -2426,51 +2426,59 @@ None - lbl_field_name - Field name: + lbl_widget_function + Widget function: - tooltip_lbl_field_name + tooltip_lbl_widget_function None - lbl_widget_type - Widget type: + lbl_auto_update + Auto update: - tooltip_lbl_widget_type + tooltip_lbl_auto_update None - tab_update - Update + lbl_widgetcontrols + Widget controls: - tooltip_tab_update + tooltip_lbl_widgetcontrols + Example configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + + + lbl_field_name + Field name: + + + tooltip_lbl_field_name None - lbl_stylesheet - Stylesheet: + lbl_active + Active: - tooltip_lbl_stylesheet + tooltip_lbl_active None - lbl_placeholder - Placeholder: + lbl_typeahead + Typeahead: - tooltip_lbl_placeholder + tooltip_lbl_typeahead None - lbl_editability - Editability: + lbl_tooltip + Tooltip: - tooltip_lbl_editability + tooltip_lbl_tooltip None @@ -2482,27 +2490,19 @@ Accept - lbl_linkedobject - Linkedobject - - - tooltip_lbl_linkedobject - None - - - btn_open - Open + lbl_stylesheet + Stylesheet: - tooltip_btn_open + tooltip_lbl_stylesheet None - lbl_widget_function - Widget function: + lbl_placeholder + Placeholder: - tooltip_lbl_widget_function + tooltip_lbl_placeholder None @@ -2522,83 +2522,83 @@ None - lbl_field_length - Field length: + lbl_null_value + Null value: - tooltip_lbl_field_length + tooltip_lbl_null_value None - lbl_action_function - Action function: + lbl_editable + Editable: - tooltip_lbl_action_function + tooltip_lbl_editable None - lbl_active - Active: + lbl_linkedobject + Linkedobject - tooltip_lbl_active + tooltip_lbl_linkedobject None - lbl_column_id - Column name: + lbl_action_function + Action function: - tooltip_lbl_column_id + tooltip_lbl_action_function None - lbl_auto_update - Auto update: + dlg_main_addfields + Dialog - tooltip_lbl_auto_update + tooltip_dlg_main_addfields None - lbl_null_value - Null value: + grb_mandatory + Mandatory addfields configuration - tooltip_lbl_null_value + tooltip_grb_mandatory None - lbl_editable - Editable: + lbl_enabled + Enabled: - tooltip_lbl_editable + tooltip_lbl_enabled None - grb_mandatory - Mandatory addfields configuration + lbl_field_length + Field length: - tooltip_grb_mandatory + tooltip_lbl_field_length None - lbl_enabled - Enabled: + lbl_mandatory + Mandatory: - tooltip_lbl_enabled + tooltip_lbl_mandatory None - lbl_mandatory - Mandatory: + lbl_not_update + Not update: - tooltip_lbl_mandatory + tooltip_lbl_not_update None @@ -2613,19 +2613,27 @@ Accept - lbl_connec - Connection: + lbl_user_name + User name: - tooltip_lbl_connec + tooltip_lbl_user_name None - lbl_user_name - User name: + dlg_main_credentials + Dialog - tooltip_lbl_user_name + tooltip_dlg_main_credentials + None + + + lbl_connec + Connection: + + + tooltip_lbl_connec None @@ -2644,14 +2652,6 @@ tooltip_lbl_password None - - dlg_main_credentials - Dialog - - - tooltip_dlg_main_credentials - None - admin_dbproject @@ -2664,108 +2664,108 @@ Name of a new schema. Name has to be written in lower cases, using only letters used in the english alphabet and without spaces or dashes - lbl_locale - Locale: + lbl_filter + Filter SRID - tooltip_lbl_locale - Schema language + tooltip_lbl_filter + Spatial reference identifier. Only values shown on a table below are allowed. - btn_accept - Accept + lbl_project_type + Project Type: - tooltip_btn_accept - Accept + tooltip_lbl_project_type + None - dlg_main_dbproject - Create project + lbl_descript + Description: - tooltip_dlg_main_dbproject + tooltip_lbl_descript None - btn_push_file - ... + rdb_inp + Import INP data - tooltip_btn_push_file + tooltip_rdb_inp None - btn_close - Close + lbl_source + Data source: - tooltip_btn_close - Close + tooltip_lbl_source + None - lbl_filter - Filter SRID + rdb_empty + Empty data - tooltip_lbl_filter - Spatial reference identifier. Only values shown on a table below are allowed. + tooltip_rdb_empty + None - lbl_project_type - Project Type: + rdb_sample_inv + Inventory Example - tooltip_lbl_project_type + tooltip_rdb_sample_inv None - lbl_descript - Description: + rdb_sample_full + Full Example - tooltip_lbl_descript + tooltip_rdb_sample_full None - rdb_inp - Import INP data + btn_close + Close - tooltip_rdb_inp - None + tooltip_btn_close + Close - lbl_source - Data source: + lbl_locale + Locale: - tooltip_lbl_source - None + tooltip_lbl_locale + Schema language - rdb_empty - Empty data + btn_push_file + ... - tooltip_rdb_empty + tooltip_btn_push_file None - rdb_sample_inv - Inventory Example + dlg_main_dbproject + Create project - tooltip_rdb_sample_inv + tooltip_dlg_main_dbproject None - rdb_sample_full - Full Example + btn_accept + Accept - tooltip_rdb_sample_full - None + tooltip_btn_accept + Accept grb_projectschema @@ -2779,21 +2779,29 @@ admin_gisproject - btn_accept - Accept + lbl_gis_file + QGIS file name: - tooltip_btn_accept - Accept + tooltip_lbl_gis_file + None - lbl_gis_file - QGIS file name: + btn_gis_folder + ... - tooltip_lbl_gis_file + tooltip_btn_gis_folder None + + btn_accept + Accept + + + tooltip_btn_accept + Accept + lbl_gis_folder Folder: @@ -2818,14 +2826,6 @@ tooltip_lbl_role None - - btn_gis_folder - ... - - - tooltip_btn_gis_folder - None - dlg_main_gisproject Create QGIS project @@ -2845,22 +2845,6 @@ admin_importinp - - btn_run - Run - - - tooltip_btn_run - None - - - btn_close - Close - - - tooltip_btn_close - None - dlg_main_importinp Config parameters @@ -2878,32 +2862,32 @@ None - tab_config - Config + btn_close + Close - tooltip_tab_config + tooltip_btn_close None - - - admin_projectinfo - lbl_info - Information about new updates + tab_config + Config - tooltip_lbl_info + tooltip_tab_config None - dlg_main_projectinfo - Update SQL + btn_run + Run - tooltip_dlg_main_projectinfo + tooltip_btn_run None + + + admin_projectinfo btn_close Close @@ -2920,17 +2904,25 @@ tooltip_btn_update None - - - admin_qtdialog - btn_cancel - Cancel + dlg_main_projectinfo + Update SQL - tooltip_btn_cancel - Cancel + tooltip_dlg_main_projectinfo + None + + + lbl_info + Information about new updates + + + tooltip_lbl_info + None + + + admin_qtdialog lbl_path UI path: @@ -2940,12 +2932,20 @@ None - lbl_formname - Form name: + btn_cancel + Cancel - tooltip_lbl_formname - None + tooltip_btn_cancel + Cancel + + + btn_accept + Accept + + + tooltip_btn_accept + Accept dlg_main_qtdialog @@ -2963,6 +2963,17 @@ tooltip_btn_path None + + lbl_formname + Form name: + + + tooltip_lbl_formname + None + + + + admin_renameproj btn_accept Accept @@ -2971,9 +2982,14 @@ tooltip_btn_accept Accept - - - admin_renameproj + + dlg_readsq_rename + Rename project + + + tooltip_dlg_readsq_rename + None + lbl_rename_copy Please, set a new project name: @@ -2990,12 +3006,15 @@ tooltip_btn_cancel Cancel + + + admin_sysfields - dlg_readsq_rename - Rename project + lbl_placeholder + Placeholder: - tooltip_dlg_readsq_rename + tooltip_lbl_placeholder None @@ -3006,15 +3025,12 @@ tooltip_btn_accept Accept - - - admin_sysfields - lbl_column_id - Column id: + grb_additional_conf + Additional configuration - tooltip_lbl_column_id + tooltip_grb_additional_conf None @@ -3026,168 +3042,168 @@ None - btn_cancel - Cancel + lbl_stylesheet + Stylesheet: - tooltip_btn_cancel + tooltip_lbl_stylesheet None - lbl_widgetcontrols - Widget controls: + dlg_main_sysfields + Dialog - tooltip_lbl_widgetcontrols - Example configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_dlg_main_sysfields + None - btn_open - Open + grb_basic_conf + Basic configuration - tooltip_btn_open + tooltip_grb_basic_conf None - lbl_mandatory - Mandatory: + tab_create + Create - tooltip_lbl_mandatory + tooltip_tab_create None - lbl_layout_order - Layout order: + btn_open + Open - tooltip_lbl_layout_order + tooltip_btn_open None - grb_additional_conf - Additional configuration + lbl_column_id + Column id: - tooltip_grb_additional_conf + tooltip_lbl_column_id None - lbl_layout_name - Layout name: + lbl_editability + Editability: - tooltip_lbl_layout_name + tooltip_lbl_editability None - lbl_label - Label: + lbl_editable + Editable: - tooltip_lbl_label + tooltip_lbl_editable None - lbl_hidden - Hidden: + lbl_enabled + Enabled: - tooltip_lbl_hidden + tooltip_lbl_enabled None - lbl_form_name - Form name: + lbl_widgetcontrols + Widget controls: - tooltip_lbl_form_name - None + tooltip_lbl_widgetcontrols + Example configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} - btn_accept - Accept + lbl_form_name + Form name: - tooltip_btn_accept - Accept + tooltip_lbl_form_name + None - lbl_enabled - Enabled: + btn_cancel + Cancel - tooltip_lbl_enabled + tooltip_btn_cancel None - lbl_editable - Editable: + lbl_hidden + Hidden: - tooltip_lbl_editable + tooltip_lbl_hidden None - grb_basic_conf - Basic configuration + lbl_label + Label: - tooltip_grb_basic_conf + tooltip_lbl_label None - lbl_tooltip - Tooltip: + lbl_layout_name + Layout name: - tooltip_lbl_tooltip + tooltip_lbl_layout_name None - tab_create - Create + lbl_layout_order + Layout order: - tooltip_tab_create + tooltip_lbl_layout_order None - lbl_placeholder - Placeholder: + lbl_mandatory + Mandatory: - tooltip_lbl_placeholder + tooltip_lbl_mandatory None - dlg_main_sysfields - Dialog + lbl_tooltip + Tooltip: - tooltip_dlg_main_sysfields + tooltip_lbl_tooltip None + + + admin_translation - lbl_editability - Editability: + chk_py_msg + Translate ui and py messages - tooltip_lbl_editability + tooltip_chk_py_msg None - lbl_stylesheet - Stylesheet: + grb_translate_files + Translate files - tooltip_lbl_stylesheet + tooltip_grb_translate_files None - - - admin_translation grb_info_connection Connection information @@ -3205,19 +3221,19 @@ None - grb_translate_files - Translate files + lbl_scode + Source code: - tooltip_grb_translate_files + tooltip_lbl_scode None - lbl_host - Host: + btn_connection + Test connection - tooltip_lbl_host + tooltip_btn_connection None @@ -3229,19 +3245,11 @@ None - lbl_port - Port: - - - tooltip_lbl_port - None - - - lbl_scode - Source code: + lbl_user + User: - tooltip_lbl_scode + tooltip_lbl_user None @@ -3253,35 +3261,27 @@ None - lbl_user - User: - - - tooltip_lbl_user - None - - - chk_py_msg - Translate ui and py messages + lbl_host + Host: - tooltip_chk_py_msg + tooltip_lbl_host None - btn_connection - Test connection + lbl_database + Data base: - tooltip_btn_connection + tooltip_lbl_database None - lbl_database - Data base: + lbl_port + Port: - tooltip_lbl_database + tooltip_lbl_port None @@ -3296,83 +3296,35 @@ None - tab_api_manager - Api manager - - - tooltip_tab_api_manager - None - - - btn_info - Update Project Schema - - - tooltip_btn_info - Update version of a selected database schema - - - tab_advanced - Advanced - - - tooltip_tab_advanced - None - - - lbl_use_constrains - Use constrains: - - - tooltip_lbl_use_constrains - None - - - btn_translation - Translation files - - - tooltip_btn_translation - None - - - lbl_ui_path - UI path: + lbl_system_feature + Feature name: - tooltip_lbl_ui_path + tooltip_lbl_system_feature None - btn_copy - Copy - - - tooltip_btn_copy - Copy selected database schema - - - btn_create_view - Create + lbl_add_fields_feature + Feature name: - tooltip_btn_create_view + tooltip_lbl_add_fields_feature None - btn_schema_file_to_db - File to DB + btn_import_ui + Import - tooltip_btn_schema_file_to_db + tooltip_btn_import_ui None - btn_create_field - Create + tab_fields_manager + Fields manager - tooltip_btn_create_field + tooltip_tab_fields_manager None @@ -3391,14 +3343,6 @@ tooltip_grb_manage_addfields Create, configure or remove an additional field related to a selected feature type or for all feature types defined in a project - - btn_import_ui - Import - - - tooltip_btn_import_ui - None - grb_schema_update Update @@ -3416,28 +3360,28 @@ None - btn_constrains - Constrains + grb_conection + Connection - tooltip_btn_constrains + tooltip_grb_conection None - grb_conection - Connection + grb_visit + Visit - tooltip_grb_conection - None + tooltip_grb_visit + Create, configure or remove visit definition related to a selected feature type or for all feature types defined in a project - tab_fields_manager - Fields manager + grb_load_cf + Load custom file - tooltip_tab_fields_manager - None + tooltip_grb_load_cf + Select a folder with .sql files that you want to execute on a selected schema grb_files_generator @@ -3448,342 +3392,382 @@ None - grb_load_cf - Load custom file + btn_update_field + Update - tooltip_grb_load_cf - Select a folder with .sql files that you want to execute on a selected schema + tooltip_btn_update_field + None - btn_update_field - Update + btn_custom_select_file + ... - tooltip_btn_update_field + tooltip_btn_custom_select_file None - btn_export_ui - Export + btn_custom_load_file + Load file - tooltip_btn_export_ui + tooltip_btn_custom_load_file None - btn_custom_select_file - ... + grb_project_scin + Project schema information - tooltip_btn_custom_select_file + tooltip_grb_project_scin None - btn_schema_rename - Rename + grb_manage_ui + Manage UI - tooltip_btn_schema_rename - Rename selected database schema + tooltip_grb_manage_ui + None - tab_general - General + btn_gis_create + Create QGIS project file - tooltip_tab_general + tooltip_btn_gis_create None - btn_visit_create - Create + lbl_connection + Connection name: - tooltip_btn_visit_create + tooltip_lbl_connection + Name of a database connection defined in QGIS + + + btn_create_qgis_template + QGIS templates + + + tooltip_btn_create_qgis_template None - lbl_add_fields_feature - Feature name: + lbl_reload_func_sch + Reload functions: - tooltip_lbl_add_fields_feature + tooltip_lbl_reload_func_sch None - lbl_child_feature - Feature name: + btn_path + ... - tooltip_lbl_child_feature + tooltip_btn_path None - btn_visit_delete + btn_delete Delete - tooltip_btn_visit_delete - None + tooltip_btn_delete + Delete selected database schema - tab_schema_manager - Schema manager + btn_update_schema + Execute - tooltip_tab_schema_manager + tooltip_btn_update_schema None - btn_visit_update - Update + btn_create_field + Create - tooltip_btn_visit_update + tooltip_btn_create_field None - lbl_system_feature - Feature name: + btn_create_view + Create - tooltip_lbl_system_feature + tooltip_btn_create_view None - btn_gis_create - Create QGIS project file + btn_schema_file_to_db + File to DB - tooltip_btn_gis_create + tooltip_btn_schema_file_to_db None - lbl_ui_form_name - Form name: + btn_update_sys_field + Update - tooltip_lbl_ui_form_name + tooltip_btn_update_sys_field None - btn_close - Close + btn_delete_field + Delete - tooltip_btn_close - Close + tooltip_btn_delete_field + None - lbl_connection - Connection name: + btn_schema_create + Create DB project schema - tooltip_lbl_connection - Name of a database connection defined in QGIS + tooltip_btn_schema_create + None - grb_visit - Visit + grb_manage_childviews + Manage child views - tooltip_grb_visit - Create, configure or remove visit definition related to a selected feature type or for all feature types defined in a project + tooltip_grb_manage_childviews + Recreate child views for a selected feature type or for all feature types defined in a project - btn_custom_load_file - Load file + btn_export_ui + Export - tooltip_btn_custom_load_file + tooltip_btn_export_ui None - lbl_name - Name: + lbl_child_feature + Feature name: - tooltip_lbl_name - Name of the database schema + tooltip_lbl_child_feature + None - btn_create_qgis_template - QGIS templates + tab_schema_manager + Schema manager - tooltip_btn_create_qgis_template + tooltip_tab_schema_manager None - lbl_reload_func_sch - Reload functions: + tab_api_manager + Api manager - tooltip_lbl_reload_func_sch + tooltip_tab_api_manager None - btn_delete_field - Delete + tab_advanced + Advanced - tooltip_btn_delete_field + tooltip_tab_advanced None - lbl_project_type - Project type: + btn_visit_update + Update - tooltip_lbl_project_type - Type of giswater project + tooltip_btn_visit_update + None - dlg_main - Giswater + btn_visit_delete + Delete - tooltip_dlg_main + tooltip_btn_visit_delete None - grb_manage_ui - Manage UI + btn_visit_create + Create - tooltip_grb_manage_ui + tooltip_btn_visit_create None - grb_manage_childviews - Manage child views + btn_schema_rename + Rename - tooltip_grb_manage_childviews - Recreate child views for a selected feature type or for all feature types defined in a project + tooltip_btn_schema_rename + Rename selected database schema - btn_update_schema - Execute + lbl_use_constrains + Use constrains: - tooltip_btn_update_schema + tooltip_lbl_use_constrains None - btn_path - ... + lbl_update_all_sch + Update all: - tooltip_btn_path + tooltip_lbl_update_all_sch None - grb_project_scin - Project schema information + tab_general + General - tooltip_grb_project_scin + tooltip_tab_general None - lbl_update_all_sch - Update all: + lbl_ui_path + UI path: - tooltip_lbl_update_all_sch + tooltip_lbl_ui_path None - btn_schema_create - Create DB project schema + lbl_name + Name: - tooltip_btn_schema_create + tooltip_lbl_name + Name of the database schema + + + btn_translation + Translation files + + + tooltip_btn_translation None - btn_update_sys_field - Update + lbl_project_type + Project type: - tooltip_btn_update_sys_field + tooltip_lbl_project_type + Type of giswater project + + + btn_info + Update Project Schema + + + tooltip_btn_info + Update version of a selected database schema + + + btn_close + Close + + + tooltip_btn_close + Close + + + dlg_main + Giswater + + + tooltip_dlg_main None - btn_delete - Delete + btn_copy + Copy - tooltip_btn_delete - Delete selected database schema + tooltip_btn_copy + Copy selected database schema - - - admin_visitclass - lbl_class_id - Class id: + btn_constrains + Constrains - tooltip_lbl_class_id + tooltip_btn_constrains None - btn_ok - Accept + lbl_ui_form_name + Form name: - tooltip_btn_ok + tooltip_lbl_ui_form_name None + + + admin_visitclass - lbl_visit_type - Visit type: + lbl_feat_type + Feature type: - tooltip_lbl_visit_type + tooltip_lbl_feat_type None - btn_class_cancel - Cancel + dlg_main_visitclass + Manage visit class - tooltip_btn_class_cancel + tooltip_dlg_main_visitclass None - btn_class_ok - Accept + lbl_viewname + View name: - tooltip_btn_class_ok + tooltip_lbl_viewname None - lbl_feat_type - Feature type: + lbl_active + Active: - tooltip_lbl_feat_type + tooltip_lbl_active None - btn_param_create - Create + lbl_class_id + Class id: - tooltip_btn_param_create + tooltip_lbl_class_id None - dlg_main_visitclass - Manage visit class + lbl_descript + Descript: - tooltip_dlg_main_visitclass + tooltip_lbl_descript None @@ -3802,6 +3786,14 @@ tooltip_lbl_param_opt None + + lbl_class_name + Class name: + + + tooltip_lbl_class_name + None + lbl_multi_feat Multi feature: @@ -3811,11 +3803,11 @@ None - lbl_viewname - View name: + lbl_visit_type + Visit type: - tooltip_lbl_viewname + tooltip_lbl_visit_type None @@ -3827,72 +3819,56 @@ None - btn_param_update - Update - - - tooltip_btn_param_update - None - - - lbl_descript - Descript: - - - tooltip_lbl_descript - None - - - btn_param_delete - Delete + btn_class_cancel + Cancel - tooltip_btn_param_delete + tooltip_btn_class_cancel None - lbl_class_name - Class name: + btn_ok + Accept - tooltip_lbl_class_name + tooltip_btn_ok None - lbl_active - Active: + btn_param_create + Create - tooltip_lbl_active + tooltip_btn_param_create None - - - admin_visitparam - btn_cancel - Cancel + btn_class_ok + Accept - tooltip_btn_cancel + tooltip_btn_class_ok None - lbl_parameter_type - Parameter type: + btn_param_delete + Delete - tooltip_lbl_parameter_type + tooltip_btn_param_delete None - lbl_data_type - Data type: + btn_param_update + Update - tooltip_lbl_data_type + tooltip_btn_param_update None + + + admin_visitparam lbl_form_type Form type: @@ -3902,11 +3878,11 @@ None - lbl_default_value - Default value: + lbl_code + Code: - tooltip_lbl_default_value + tooltip_lbl_code None @@ -3918,27 +3894,27 @@ None - lbl_descript - Descript: + lbl_enabled + Enabled: - tooltip_lbl_descript + tooltip_lbl_enabled None - lbl_code - Code: + lbl_short_descript + Short descript: - tooltip_lbl_code + tooltip_lbl_short_descript None - grb_params - Parameters + btn_cancel + Cancel - tooltip_grb_params + tooltip_btn_cancel None @@ -3950,43 +3926,43 @@ None - lbl_short_descript - Short descript: + lbl_descript + Descript: - tooltip_lbl_short_descript + tooltip_lbl_descript None - lbl_enabled - Enabled: + lbl_default_value + Default value: - tooltip_lbl_enabled + tooltip_lbl_default_value None - lbl_widgettype - Widget type: + lbl_mandatory + Mandatory: - tooltip_lbl_widgettype + tooltip_lbl_mandatory None - btn_ok - Accept + lbl_data_type + Data type: - tooltip_btn_ok + tooltip_lbl_data_type None - lbl_mandatory - Mandatory: + grb_params + Parameters - tooltip_lbl_mandatory + tooltip_grb_params None @@ -3997,6 +3973,22 @@ tooltip_lbl_query_text None + + lbl_parameter_type + Parameter type: + + + tooltip_lbl_parameter_type + None + + + lbl_widgettype + Widget type: + + + tooltip_lbl_widgettype + None + dlg_main_visitparam Manage visit parameter @@ -4005,6 +3997,14 @@ tooltip_dlg_main_visitparam None + + btn_ok + Accept + + + tooltip_btn_ok + None + arc_fusion @@ -4012,14 +4012,6 @@ title Arc fusion - - btn_cancel - Cancel - - - tooltip_btn_cancel - None - lbl_enddate End date: @@ -4037,11 +4029,19 @@ None - lbl_workcat_id_end - Workcat id end: + tab_loginfo + Info log - tooltip_lbl_workcat_id_end + tooltip_tab_loginfo + None + + + btn_cancel + Cancel + + + tooltip_btn_cancel None @@ -4053,11 +4053,11 @@ Accept - tab_loginfo - Info log + lbl_workcat_id_end + Workcat id end: - tooltip_tab_loginfo + tooltip_lbl_workcat_id_end None @@ -4076,76 +4076,44 @@ Leak Assignation - tab_infolog + lbl_leaks Leaks - tooltip_tab_infolog - None - - - lbl_cluster_length - Cluster length (m): - - - tooltip_lbl_cluster_length - Maximum sum of pipe lengths within a cluster, in meters. - - - lbl_pipes - Pipes - - - tooltip_lbl_pipes + tooltip_lbl_leaks None - lbl_diameter_range - Diameter range: - - - tooltip_lbl_diameter_range - Diameter range based on factors of the initial pipe. - - - chk_all_leaks - Use all leaks - - - tooltip_chk_all_leaks - Calculates leaks per kilometer per year using all available data, regardless of the 'years to calculate' parameter. - - - tab_infolog - Info Log + lbl_max_distance + Maximum distance (m): - tooltip_tab_infolog - None + tooltip_lbl_max_distance + Maximum distance, in meters, between the initial pipe and other pipes included in the cluster. - dlg_assignation - Leak Assignation + lbl_diameter_range + Diameter range: - tooltip_dlg_assignation - None + tooltip_lbl_diameter_range + Diameter range based on factors of the initial pipe. - lbl_material - Filter by material: + lbl_diameter + Filter by diameter: - tooltip_lbl_material - Uses only pipes of the same material as the initial one. + tooltip_lbl_diameter + Uses only pipes that match the diameter range of the initial one. - lbl_max_distance - Maximum distance (m): + lbl_cluster_length + Cluster length (m): - tooltip_lbl_max_distance - Maximum distance, in meters, between the initial pipe and other pipes included in the cluster. + tooltip_lbl_cluster_length + Maximum sum of pipe lengths within a cluster, in meters. lbl_builtdate @@ -4155,6 +4123,14 @@ tooltip_lbl_builtdate Uses only pipes that match the builtdate range of the initial one. + + lbl_buffer + Buffer distance (m): + + + tooltip_lbl_buffer + Distance from a leak at which pipes are selected to be assigned that leak. + lbl_years Years to calculate: @@ -4164,12 +4140,12 @@ Number of years of leak data to consider, based on recency. - lbl_buffer - Buffer distance (m): + chk_all_leaks + Use all leaks - tooltip_lbl_buffer - Distance from a leak at which pipes are selected to be assigned that leak. + tooltip_chk_all_leaks + Calculates leaks per kilometer per year using all available data, regardless of the 'years to calculate' parameter. lbl_builtdate_range @@ -4179,6 +4155,30 @@ tooltip_lbl_builtdate_range Built date range, in years before and after the initial pipe. + + lbl_pipes + Pipes + + + tooltip_lbl_pipes + None + + + tab_infolog + Leaks + + + tooltip_tab_infolog + None + + + dlg_assignation + Leak Assignation + + + tooltip_dlg_assignation + None + tab_config Config @@ -4188,20 +4188,20 @@ None - lbl_leaks - Leaks + lbl_material + Filter by material: - tooltip_lbl_leaks - None + tooltip_lbl_material + Uses only pipes of the same material as the initial one. - lbl_diameter - Filter by diameter: + tab_infolog + Info Log - tooltip_lbl_diameter - Uses only pipes that match the diameter range of the initial one. + tooltip_tab_infolog + None @@ -4211,12 +4211,12 @@ CAD draw circle - chk_deleete_prev - Delete previous circles + btn_accept + Accept - tooltip_chk_deleete_prev - None + tooltip_btn_accept + Accept btn_cancel @@ -4227,27 +4227,27 @@ None - lbl_ins_radius - Insert radius: + dlg_auxcircle + CAD draw circle - tooltip_lbl_ins_radius + tooltip_dlg_auxcircle None - btn_accept - Accept + chk_deleete_prev + Delete previous circles - tooltip_btn_accept - Accept + tooltip_chk_deleete_prev + None - dlg_auxcircle - CAD draw circle + lbl_ins_radius + Insert radius: - tooltip_dlg_auxcircle + tooltip_lbl_ins_radius None @@ -4258,43 +4258,43 @@ CAD Add point - dlg_auxpoint - CAD Add point + lbl_disty + Dist Y: - tooltip_dlg_auxpoint + tooltip_lbl_disty None - rb_right - End point + btn_accept + Accept - tooltip_rb_right - None + tooltip_btn_accept + Accept - chk_delete_prev - Delete previous points + rb_right + End point - tooltip_chk_delete_prev + tooltip_rb_right None - lbl_disty - Dist Y: + btn_cancel + Cancel - tooltip_lbl_disty + tooltip_btn_cancel None - btn_cancel - Cancel + chk_delete_prev + Delete previous points - tooltip_btn_cancel + tooltip_chk_delete_prev None @@ -4314,12 +4314,12 @@ None - btn_accept - Accept + dlg_auxpoint + CAD Add point - tooltip_btn_accept - Accept + tooltip_dlg_auxpoint + None @@ -4329,20 +4329,20 @@ Config - btn_cancel - Cancel + tab_featurecat + Feature cat - tooltip_btn_cancel + tooltip_tab_featurecat None - btn_accept - Accept + tab_addfields + Add fields - tooltip_btn_accept - Accept + tooltip_tab_addfields + None tab_admin @@ -4352,6 +4352,14 @@ tooltip_tab_admin None + + btn_cancel + Cancel + + + tooltip_btn_cancel + None + dlg_config Config @@ -4360,6 +4368,14 @@ tooltip_dlg_config None + + tab_mantype + Man type + + + tooltip_tab_mantype + None + tab_basic Basic @@ -4369,28 +4385,95 @@ None - tab_addfields - Add fields + btn_accept + Accept - tooltip_tab_addfields - None + tooltip_btn_accept + Accept + + + create_style_group - tab_featurecat - Feature cat + idval + - tooltip_tab_featurecat - None + tooltip_idval + Category name - tab_mantype - Man type + lbl_cat_id + Category ID: - tooltip_tab_mantype - None + tooltip_lbl_cat_id + + + + feature_id + + + + tooltip_feature_id + Category ID + + + descript + + + + tooltip_descript + Description + + + lbl_cat_name + Category name: + + + tooltip_lbl_cat_name + + + + btn_add + Accept + + + tooltip_btn_add + Accept + + + lbl_descript + Description: + + + tooltip_lbl_descript + + + + lbl_role + Role: + + + tooltip_lbl_role + + + + btn_cancel + Cancel + + + tooltip_btn_cancel + Cancel + + + sys_role + + + + tooltip_sys_role + Role that will be able to use this style @@ -4406,44 +4489,44 @@ csv - - btn_file_csv - ... + + lbl_ignore_header + Ignore headers: - tooltip_btn_file_csv + tooltip_lbl_ignore_header None - lbl_file - File: + tab_info + Info log - tooltip_lbl_file + tooltip_tab_info None - lbl_delimiter - Delimiter: + lbl_info + Info: - tooltip_lbl_delimiter + tooltip_lbl_info None - btn_accept - Accept + btn_file_csv + ... - tooltip_btn_accept - Accept + tooltip_btn_file_csv + None - lbl_set_of_charac - Set of characters: + lbl_delimiter + Delimiter: - tooltip_lbl_set_of_charac + tooltip_lbl_delimiter None @@ -4462,6 +4545,14 @@ tooltip_lbl_import_label None + + btn_cancel + Cancel + + + tooltip_btn_cancel + Cancel + tab_preview Preview @@ -4471,27 +4562,27 @@ None - tab_info - Info log + lbl_file + File: - tooltip_tab_info + tooltip_lbl_file None - lbl_info - Info: + btn_accept + Accept - tooltip_lbl_info - None + tooltip_btn_accept + Accept - lbl_ignore_header - Ignore headers: + lbl_set_of_charac + Set of characters: - tooltip_lbl_ignore_header + tooltip_lbl_set_of_charac None @@ -4502,14 +4593,6 @@ tooltip_dlg_csv2pg None - - btn_cancel - Cancel - - - tooltip_btn_cancel - Cancel - dialog_table @@ -4526,12 +4609,12 @@ None - btn_cancel - Cancel + btn_accept + Accept - tooltip_btn_cancel - None + tooltip_btn_accept + Accept btn_add_row @@ -4542,12 +4625,12 @@ None - btn_accept - Accept + btn_cancel + Cancel - tooltip_btn_accept - Accept + tooltip_btn_cancel + None @@ -4573,19 +4656,19 @@ None - btn_close - Close + dlg_dialog_text + Dialog - tooltip_btn_close + tooltip_dlg_dialog_text None - dlg_dialog_text - Dialog + btn_close + Close - tooltip_dlg_dialog_text + tooltip_btn_close None @@ -4604,19 +4687,19 @@ None - btn_cancel - Cancel + btn_accept + Accept - tooltip_btn_cancel - None + tooltip_btn_accept + Accept - grb_other - Other + btn_cancel + Cancel - tooltip_grb_other + tooltip_btn_cancel None @@ -4628,20 +4711,20 @@ None - grb_depth - Measurements + grb_other + Other - tooltip_grb_depth + tooltip_grb_other None - btn_accept - Accept + grb_depth + Measurements - tooltip_btn_accept - Accept + tooltip_grb_depth + None @@ -4651,11 +4734,19 @@ Document - tab_connec - Connec + btn_path_doc + ... - tooltip_tab_connec + tooltip_btn_path_doc + None + + + tab_gully + Gully + + + tooltip_tab_gully None @@ -4666,6 +4757,22 @@ tooltip_tab_node None + + btn_accept + Accept + + + tooltip_btn_accept + Accept + + + path + path + + + tooltip_path + Fill it with some accesible folder path or web path + tab_doc Document @@ -4675,20 +4782,20 @@ None - btn_accept - Accept + btn_cancel + Cancel - tooltip_btn_accept - Accept + tooltip_btn_cancel + None - btn_delete + btn_snapping None - tooltip_btn_delete - Delete + tooltip_btn_snapping + Snapping lbl_doc_type @@ -4699,52 +4806,52 @@ None - lbl_doc_id - Doc id: + tab_arc + Arc - tooltip_lbl_doc_id + tooltip_tab_arc None - tab_gully - Gully + btn_insert + None - tooltip_tab_gully - None + tooltip_btn_insert + Insert - lbl_observ - Observations: + lbl_link + Link: - tooltip_lbl_observ - None + tooltip_lbl_link + Link - dlg_doc - Document + lbl_doc_name + Doc name: - tooltip_dlg_doc + tooltip_lbl_doc_name None - _dlg_doc - Document + lbl_filter_name + Doc name: - tooltip__dlg_doc + tooltip_lbl_filter_name None - btn_insert - None + dlg_doc + Document - tooltip_btn_insert - Insert + tooltip_dlg_doc + None btn_path_url @@ -4755,35 +4862,27 @@ Open explorer to allow selection of web path. It's also posible to just paste the path to the Link text box - lbl_link - Link: - - - tooltip_lbl_link - Link + btn_delete + None - path - path + tooltip_btn_delete + Delete - tooltip_path - Fill it with some accesible folder path or web path + lbl_observ + Observations: - btn_snapping + tooltip_lbl_observ None - tooltip_btn_snapping - Snapping - - - tab_arc - Arc + tab_connec + Connec - tooltip_tab_arc + tooltip_tab_connec None @@ -4795,19 +4894,11 @@ None - btn_path_doc - ... - - - tooltip_btn_path_doc - None - - - btn_cancel - Cancel + _dlg_doc + Document - tooltip_btn_cancel + tooltip__dlg_doc None @@ -4817,6 +4908,22 @@ title Document management + + btn_delete + Delete + + + tooltip_btn_delete + None + + + lbl_filter_name + Filter by: Doc name + + + tooltip_lbl_filter_name + None + btn_cancel Close @@ -4833,14 +4940,9 @@ tooltip_dlg_doc_manager None - - lbl_doc_id - Filter by: Doc id - - - tooltip_lbl_doc_id - None - + + + dscenario_manager btn_delete Delete @@ -4849,9 +4951,6 @@ tooltip_btn_delete None - - - dscenario_manager btn_create Create @@ -4861,20 +4960,12 @@ None - btn_delete - Delete - - - tooltip_btn_delete - None - - - btn_update - Update + chk_active + Show inactive - tooltip_btn_update - None + tooltip_chk_active + Show inactive btn_duplicate @@ -4885,12 +4976,12 @@ None - chk_active - Show inactive + btn_update + Update - tooltip_chk_active - Show inactive + tooltip_btn_update + None btn_toolbox @@ -4916,148 +5007,132 @@ Element - lbl_builtdate - Builtdate: + tab_gully + Gully - tooltip_lbl_builtdate + tooltip_tab_gully None - lbl_workcat_id - Workcat id: - - - tooltip_lbl_workcat_id - Workcat id - - - lbl_elementcat_id - Elementcat id: + lbl_state_type + State type: - tooltip_lbl_elementcat_id + tooltip_lbl_state_type None - btn_add_geom - Add geom - - - tooltip_btn_add_geom - Add geometry - - - btn_cancel - Cancel + lbl_state + State: - tooltip_btn_cancel + tooltip_lbl_state None - btn_accept - Accept + lbl_code + Code: - tooltip_btn_accept - Accept + tooltip_lbl_code + None - dlg_element - Element + lbl_buildercat_id + Buildercat id: - tooltip_dlg_element + tooltip_lbl_buildercat_id None - lbl_element_id - Element id: + lbl_builtdate + Builtdate: - tooltip_lbl_element_id + tooltip_lbl_builtdate None - lbl_verified - Verified: + lbl_element_type + Element type: - tooltip_lbl_verified + tooltip_lbl_element_type None - tab_gully - Gully + btn_snapping + None - tooltip_tab_gully - None + tooltip_btn_snapping + Snapping - lbl_state_type - State type: + lbl_link + Link: - tooltip_lbl_state_type - None + tooltip_lbl_link + Link - lbl_num_element - Element number: + lbl_observ + Observations: - tooltip_lbl_num_element + tooltip_lbl_observ None - tab_element - Element + lbl_expl_id + Exploitation: - tooltip_tab_element + tooltip_lbl_expl_id None - btn_delete + btn_insert None - tooltip_btn_delete - Delete + tooltip_btn_insert + Insert - lbl_state - State: + tab_arc + Arc - tooltip_lbl_state - None + tooltip_tab_arc + Arc - lbl_observ - Observations: + lbl_location_type + Location type: - tooltip_lbl_observ + tooltip_lbl_location_type None - lbl_code - Code: + dlg_element + Element - tooltip_lbl_code + tooltip_dlg_element None - tab_arc - Arc + btn_accept + Accept - tooltip_tab_arc - Arc + tooltip_btn_accept + Accept lbl_ownercat_id @@ -5068,19 +5143,19 @@ None - lbl_expl_id - Exploitation: + lbl_rotation + Rotation: - tooltip_lbl_expl_id + tooltip_lbl_rotation None - lbl_comment - Comment: + btn_cancel + Cancel - tooltip_lbl_comment + tooltip_btn_cancel None @@ -5092,68 +5167,68 @@ Relations - lbl_link - Link: + tab_element + Element - tooltip_lbl_link - Link + tooltip_tab_element + None - lbl_location_type - Location type: + lbl_workcat_id_end + Workcat id end: - tooltip_lbl_location_type - None + tooltip_lbl_workcat_id_end + Workcat id end - lbl_element_type - Element type: + lbl_num_element + Element number: - tooltip_lbl_element_type + tooltip_lbl_num_element None - lbl_buildercat_id - Buildercat id: + tab_connec + Connec - tooltip_lbl_buildercat_id + tooltip_tab_connec None - btn_snapping + btn_delete None - tooltip_btn_snapping - Snapping + tooltip_btn_delete + Delete - btn_insert - None + lbl_verified + Verified: - tooltip_btn_insert - Insert + tooltip_lbl_verified + None - lbl_workcat_id_end - Workcat id end: + lbl_workcat_id + Workcat id: - tooltip_lbl_workcat_id_end - Workcat id end + tooltip_lbl_workcat_id + Workcat id - lbl_rotation - Rotation: + btn_add_geom + Add geom - tooltip_lbl_rotation - None + tooltip_btn_add_geom + Add geometry tab_node @@ -5164,27 +5239,35 @@ None - tab_connec - Connec + lbl_comment + Comment: - tooltip_tab_connec + tooltip_lbl_comment None - - - element_manager - title - Element management + lbl_elementcat_id + Elementcat id: - dlg_element_manager - Element management + tooltip_lbl_elementcat_id + None + + + lbl_element_id + Element id: + + + tooltip_lbl_element_id + None + + + element_manager - tooltip_dlg_element_manager - None + title + Element management btn_delete @@ -5202,6 +5285,14 @@ tooltip_btn_cancel None + + dlg_element_manager + Element management + + + tooltip_dlg_element_manager + None + lbl_element_id Filter by: Element id @@ -5214,21 +5305,13 @@ epa_compare - lbl_selector_date - Selector date: + lbl_time_to_show + Time (to show): - tooltip_lbl_selector_date + tooltip_lbl_time_to_show None - - btn_cancel - Cancel - - - tooltip_btn_cancel - Cancel - btn_accept Accept @@ -5238,35 +5321,43 @@ Accept - lbl_compare_date - Compare date: + lbl_selector_date + Selector date: - tooltip_lbl_compare_date + tooltip_lbl_selector_date None - lbl_compare_time - Compare time: + lbl_time_to_compare + Time (to compare): - tooltip_lbl_compare_time + tooltip_lbl_time_to_compare None - lbl_time_to_compare - Time (to compare): + btn_cancel + Cancel - tooltip_lbl_time_to_compare + tooltip_btn_cancel + Cancel + + + dlg_selector + Selector + + + tooltip_dlg_selector None - lbl_selector_time - Selector time: + lbl_compare_date + Compare date: - tooltip_lbl_selector_time + tooltip_lbl_compare_date None @@ -5278,11 +5369,11 @@ None - dlg_selector - Selector + lbl_compare_time + Compare time: - tooltip_dlg_selector + tooltip_lbl_compare_time None @@ -5294,27 +5385,27 @@ None - tab_time - Time + tab_result + Result - tooltip_tab_time + tooltip_tab_result None - lbl_time_to_show - Time (to show): + tab_time + Time - tooltip_lbl_time_to_show + tooltip_tab_time None - tab_result - Result + lbl_selector_time + Selector time: - tooltip_tab_result + tooltip_lbl_selector_time None @@ -5341,11 +5432,11 @@ None - btn_preview - Preview + btn_close + Close - tooltip_btn_preview + tooltip_btn_close None @@ -5357,11 +5448,11 @@ None - btn_close - Close + btn_print + Print - tooltip_btn_close + tooltip_btn_print None @@ -5373,11 +5464,11 @@ None - btn_print - Print + btn_preview + Preview - tooltip_btn_print + tooltip_btn_preview None @@ -5396,75 +5487,75 @@ Delete - tab_info_log - Info log + tab_del_feature + Delete feature - tooltip_tab_info_log + tooltip_tab_del_feature None - btn_relations - Show feature relations + lbl_feature_type + Feature type: - tooltip_btn_relations + tooltip_lbl_feature_type None - dlg_feature_delete - Delete feature + lbl_feature_id + Feature id: - tooltip_dlg_feature_delete + tooltip_lbl_feature_id None - tab_del_feature - Delete feature + tab_info_log + Info log - tooltip_tab_del_feature + tooltip_tab_info_log None - lbl_feature_type - Feature type: + btn_relations + Show feature relations - tooltip_lbl_feature_type + tooltip_btn_relations None - btn_cancel - Cancel + btn_delete_another + Delete another feature - tooltip_btn_cancel + tooltip_btn_delete_another None - btn_snapping - None + dlg_feature_delete + Delete feature - tooltip_btn_snapping - Snapping + tooltip_dlg_feature_delete + None - btn_delete_another - Delete another feature + btn_snapping + None - tooltip_btn_delete_another - None + tooltip_btn_snapping + Snapping - lbl_feature_id - Feature id: + btn_cancel + Cancel - tooltip_lbl_feature_id + tooltip_btn_cancel None @@ -5475,19 +5566,19 @@ End feature - tab_connec - Connec + lbl_workcat_id_end + Workcat id end: - tooltip_tab_connec + tooltip_lbl_workcat_id_end None - tab_workcat - Workcat + tab_gully + Gully - tooltip_tab_workcat + tooltip_tab_gully None @@ -5499,12 +5590,12 @@ None - tab_gully - Gully + btn_cancel + Cancel - tooltip_tab_gully - None + tooltip_btn_cancel + Cancel lbl_enddate @@ -5515,53 +5606,45 @@ None - btn_delete - None + dlg_feature_end + End feature - tooltip_btn_delete - Delete + tooltip_dlg_feature_end + None - lbl_workcat_date - Workcat date: + tab_workcat + Workcat - tooltip_lbl_workcat_date + tooltip_tab_workcat None - tab_node - Node + lbl_state_type + State type end: - tooltip_tab_node + tooltip_lbl_state_type None - tab_arc - Arc - - - tooltip_tab_arc + btn_insert None - lbl_workcat_id_end - Workcat id end: + tooltip_btn_insert + Insert - tooltip_lbl_workcat_id_end + btn_new_workcat None - btn_snapping + tooltip_btn_new_workcat None - - tooltip_btn_snapping - Snapping - tab_elem Elem @@ -5570,14 +5653,6 @@ tooltip_tab_elem None - - btn_insert - None - - - tooltip_btn_insert - Insert - tab_relations Relations @@ -5587,44 +5662,60 @@ Relations - lbl_state_type - State type end: + btn_snapping + None - tooltip_lbl_state_type + tooltip_btn_snapping + Snapping + + + tab_connec + Connec + + + tooltip_tab_connec None - btn_cancel - Cancel + btn_accept + Accept - tooltip_btn_cancel - Cancel + tooltip_btn_accept + Accept - btn_new_workcat + tab_arc + Arc + + + tooltip_tab_arc None - tooltip_btn_new_workcat + lbl_workcat_date + Workcat date: + + + tooltip_lbl_workcat_date None - dlg_feature_end - End feature + tab_node + Node - tooltip_dlg_feature_end + tooltip_tab_node None - btn_accept - Accept + btn_delete + None - tooltip_btn_accept - Accept + tooltip_btn_delete + Delete @@ -5633,6 +5724,14 @@ title Workcat end list + + lbl_info + These connecs will be desconnected after dowgrading selected arcs: + + + tooltip_lbl_info + None + dlg_feature_end_connec Workcat end list @@ -5665,14 +5764,6 @@ tooltip_btn_accept Accept - - lbl_info - These connecs will be desconnected after dowgrading selected arcs: - - - tooltip_lbl_info - None - go2epa @@ -5681,68 +5772,68 @@ Go2Epa - lbl_result_name - Result name: + btn_hs_ds + Selector - tooltip_lbl_result_name + tooltip_btn_hs_ds None - chk_recurrent - Use iterative calls + tab_loginfo + Info log - tooltip_chk_recurrent + tooltip_tab_loginfo None - lbl_counter - lbl_counter + chk_only_check + Use result network geometry - tooltip_lbl_counter + tooltip_chk_only_check None - grb_file_manager - File manager + btn_cancel + Cancel - tooltip_grb_file_manager + tooltip_btn_cancel None - btn_accept - Accept + lbl_inp_file + INP file: - tooltip_btn_accept - Accept + tooltip_lbl_inp_file + None - grb_process_options - Preprocessing options + btn_file_inp + ... - tooltip_grb_process_options + tooltip_btn_file_inp None - btn_hs_ds - Selector + btn_file_rpt + ... - tooltip_btn_hs_ds + tooltip_btn_file_rpt None - btn_cancel - Cancel + btn_accept + Accept - tooltip_btn_cancel - None + tooltip_btn_accept + Accept btn_options @@ -5753,83 +5844,83 @@ None - chk_import_result - Import result + lbl_result_name + Result name: - tooltip_chk_import_result + tooltip_lbl_result_name None - chk_only_check - Use result network geometry + lbl_counter + lbl_counter - tooltip_chk_only_check + tooltip_lbl_counter None - chk_exec - Execute EPA software + lbl_rpt_file + RPT file: - tooltip_chk_exec + tooltip_lbl_rpt_file None - chk_export - Export INP + chk_recurrent + Use iterative calls - tooltip_chk_export + tooltip_chk_recurrent None - tab_loginfo - Info log + dlg_go2epa + Go2Epa - tooltip_tab_loginfo + tooltip_dlg_go2epa None - lbl_rpt_file - RPT file: + chk_import_result + Import result - tooltip_lbl_rpt_file + tooltip_chk_import_result None - lbl_inp_file - INP file: + chk_exec + Execute EPA software - tooltip_lbl_inp_file + tooltip_chk_exec None - btn_file_rpt - ... + chk_export + Export INP - tooltip_btn_file_rpt + tooltip_chk_export None - dlg_go2epa - Go2Epa + grb_process_options + Preprocessing options - tooltip_dlg_go2epa + tooltip_grb_process_options None - btn_file_inp - ... + grb_file_manager + File manager - tooltip_btn_file_inp + tooltip_grb_file_manager None @@ -5848,19 +5939,19 @@ Epa result management - btn_set_corporate - Toggle corporate + btn_close + Close - tooltip_btn_set_corporate + tooltip_btn_close None - btn_close - Close + btn_set_corporate + Toggle corporate - tooltip_btn_close + tooltip_btn_set_corporate None @@ -5895,11 +5986,11 @@ Go2Epa - options - tab_other - Other + dlg_go2epa_options + Go2Epa - options - tooltip_tab_other + tooltip_dlg_go2epa_options None @@ -5911,28 +6002,28 @@ None - btn_cancel - Cancel + btn_accept + Accept - tooltip_btn_cancel - None + tooltip_btn_accept + Accept - dlg_go2epa_options - Go2Epa - options + btn_cancel + Cancel - tooltip_dlg_go2epa_options + tooltip_btn_cancel None - btn_accept - Accept + tab_other + Other - tooltip_btn_accept - Accept + tooltip_tab_other + None @@ -5973,36 +6064,36 @@ Hydrometer - lbl_hydrometer_id - Hydrometer id: + btn_accept + Accept - tooltip_lbl_hydrometer_id - None + tooltip_btn_accept + Accept - btn_close - Close + dlg_info_crmvalue + Hydrometer - tooltip_btn_close + tooltip_dlg_info_crmvalue None - dlg_info_crmvalue - Hydrometer + btn_close + Close - tooltip_dlg_info_crmvalue + tooltip_btn_close None - btn_accept - Accept + lbl_hydrometer_id + Hydrometer id: - tooltip_btn_accept - Accept + tooltip_lbl_hydrometer_id + None @@ -6012,107 +6103,107 @@ Section - lbl_cost_b_right - lbl_cost_b_right + lbl_cost_area + lbl_cost_area - tooltip_lbl_cost_b_right + tooltip_lbl_cost_area None - lbl_cost_exc - lbl_cost_exc + lbl_section_image + lbl_section_image - tooltip_lbl_cost_exc + tooltip_lbl_section_image None - lbl_cost_bulk - lbl_cost_bulk + lbl_cost_fill + lbl_cost_fill - tooltip_lbl_cost_bulk + tooltip_lbl_cost_fill None - lbl_cost_y_param - lbl_cost_y_param + lbl_cost_bulk + lbl_cost_bulk - tooltip_lbl_cost_y_param + tooltip_lbl_cost_bulk None - lbl_section_image - lbl_section_image + lbl_cost_exc + lbl_cost_exc - tooltip_lbl_section_image + tooltip_lbl_cost_exc None - btn_close - Close + dlg_info_crossect + Section - tooltip_btn_close - Close + tooltip_dlg_info_crossect + None - - dlg_info_crossect - Section + + lbl_cost_trench + lbl_cost_trench - tooltip_dlg_info_crossect + tooltip_lbl_cost_trench None - lbl_cost_excav - lbl_cost_excav + lbl_cost_b_left + lbl_cost_b_left - tooltip_lbl_cost_excav + tooltip_lbl_cost_b_left None - lbl_cost_area - lbl_cost_area + lbl_cost_width + lbl_cost_width - tooltip_lbl_cost_area + tooltip_lbl_cost_width None - lbl_cost_fill - lbl_cost_fill + lbl_cost_excav + lbl_cost_excav - tooltip_lbl_cost_fill + tooltip_lbl_cost_excav None - lbl_cost_width - lbl_cost_width + btn_close + Close - tooltip_lbl_cost_width - None + tooltip_btn_close + Close - lbl_cost_b_left - lbl_cost_b_left + lbl_cost_b_right + lbl_cost_b_right - tooltip_lbl_cost_b_left + tooltip_lbl_cost_b_right None - lbl_cost_trench - lbl_cost_trench + lbl_cost_y_param + lbl_cost_y_param - tooltip_lbl_cost_trench + tooltip_lbl_cost_y_param None @@ -6122,6 +6213,14 @@ title Feature info + + tab_relations + Relations + + + tooltip_tab_relations + Relations + btn_open_element None @@ -6131,19 +6230,19 @@ None - lbl_to_doc - To: + btn_open_gallery + None - tooltip_lbl_to_doc + tooltip_btn_open_gallery None - lbl_from_doc - From: + btn_open_visit_doc + None - tooltip_lbl_from_doc + tooltip_btn_open_visit_doc None @@ -6155,43 +6254,43 @@ None - btn_insert - None + lbl_to_om + To: - tooltip_btn_insert - Insert + tooltip_lbl_to_om + None - tab_om - OM + lbl_param_type_om + Parameter type: - tooltip_tab_om + tooltip_lbl_param_type_om None - btn_cancel - Cancel - - - tooltip_btn_cancel - Cancel + lbl_parameter_om + Parameter: - btn_doc_delete + tooltip_lbl_parameter_om None - tooltip_btn_doc_delete - Delete document + lbl_from_om + From: - btn_new_element + tooltip_lbl_from_om None - tooltip_btn_new_element + lbl_type_doc + Type: + + + tooltip_lbl_type_doc None @@ -6203,92 +6302,84 @@ None - tab_documents - Documents + tab_om + OM - tooltip_tab_documents + tooltip_tab_om None - btn_delete + btn_doc_new None - tooltip_btn_delete - Delete - - - btn_accept - Accept + tooltip_btn_doc_new + Create new document - tooltip_btn_accept - Accept + lbl_cat_per_filter + Cat period filter: - tab_connections - Connections + tooltip_lbl_cat_per_filter + None - tooltip_tab_connections + btn_open_doc None - lbl_upstream_features - Upstream features: + tooltip_btn_open_doc + Open document - tooltip_lbl_upstream_features - None + lbl_downstream_features + Downstream features: - lbl_doc_id - Doc id: + tooltip_lbl_downstream_features + None - tooltip_lbl_doc_id + btn_insert None - tab_plan - Plan + tooltip_btn_insert + Insert - tooltip_tab_plan + btn_doc_delete None - lbl_downstream_features - Downstream features: - - - tooltip_lbl_downstream_features - None + tooltip_btn_doc_delete + Delete document - tab_data - Data + tab_hydrometer + Hydrometer - tooltip_tab_data + tooltip_tab_hydrometer None - tab_relations - Relations + tab_hydrometer_val + Hydrometer values - tooltip_tab_relations - Relations + tooltip_tab_hydrometer_val + None - lbl_cat_per_filter - Cat period filter: + btn_accept + Accept - tooltip_lbl_cat_per_filter - None + tooltip_btn_accept + Accept btn_doc_insert @@ -6299,67 +6390,67 @@ Insert document - btn_doc_new - None + tab_data + Data - tooltip_btn_doc_new - Create new document + tooltip_tab_data + None - lbl_type_doc - Type: + tab_plan + Plan - tooltip_lbl_type_doc + tooltip_tab_plan None - lbl_from_om - From: + btn_cancel + Cancel - tooltip_lbl_from_om - None + tooltip_btn_cancel + Cancel - lbl_parameter_om - Parameter: + btn_open_visit + None - tooltip_lbl_parameter_om + tooltip_btn_open_visit None - lbl_param_type_om - Parameter type: + tab_documents + Documents - tooltip_lbl_param_type_om + tooltip_tab_documents None - lbl_to_om - To: + btn_open_visit_event + None - tooltip_lbl_to_om + tooltip_btn_open_visit_event None - btn_open_visit_doc - None + lbl_doc_id + Doc id: - tooltip_btn_open_visit_doc + tooltip_lbl_doc_id None - btn_open_gallery - None + dlg_info_feature + Feature info - tooltip_btn_open_gallery + tooltip_dlg_info_feature None @@ -6371,43 +6462,51 @@ None - btn_open_doc - None + lbl_upstream_features + Upstream features: - tooltip_btn_open_doc - Open document + tooltip_lbl_upstream_features + None - tab_hydrometer - Hydrometer + btn_apply + Apply - tooltip_tab_hydrometer - None + tooltip_btn_apply + Apply - tab_hydrometer_val - Hydrometer values + lbl_from_doc + From: - tooltip_tab_hydrometer_val + tooltip_lbl_from_doc None - btn_open_visit + btn_delete None - tooltip_btn_open_visit + tooltip_btn_delete + Delete + + + lbl_to_doc + To: + + + tooltip_lbl_to_doc None - btn_open_visit_event + btn_new_element None - tooltip_btn_open_visit_event + tooltip_btn_new_element None @@ -6419,11 +6518,11 @@ None - dlg_info_feature - Feature info + tab_connections + Connections - tooltip_dlg_info_feature + tooltip_tab_connections None @@ -6434,11 +6533,11 @@ Basic info - dlg_info_generic - Basic info + btn_close + Close - tooltip_dlg_info_generic + tooltip_btn_close None @@ -6450,11 +6549,11 @@ Accept - btn_close - Close + dlg_info_generic + Basic info - tooltip_btn_close + tooltip_dlg_info_generic None @@ -6465,19 +6564,19 @@ New workcat - lbl_link - Link: + dlg_info_workcat + New workcat - tooltip_lbl_link - Link + tooltip_dlg_info_workcat + None - lbl_workid_key_2 - Work id key 2: + lbl_workid_key_1 + Work id key 1: - tooltip_lbl_workid_key_2 + tooltip_lbl_workid_key_1 None @@ -6489,43 +6588,43 @@ Accept - lbl_descript - Description: + lbl_link + Link: - tooltip_lbl_descript - None + tooltip_lbl_link + Link - btn_cancel - Cancel + lbl_workid_key_2 + Work id key 2: - tooltip_btn_cancel + tooltip_lbl_workid_key_2 None - lbl_workid_key_1 - Work id key 1: + lbl_builtdate + Built date: - tooltip_lbl_workid_key_1 + tooltip_lbl_builtdate None - dlg_info_workcat - New workcat + lbl_descript + Description: - tooltip_dlg_info_workcat + tooltip_lbl_descript None - lbl_builtdate - Built date: + btn_cancel + Cancel - tooltip_lbl_builtdate + tooltip_btn_cancel None @@ -6555,35 +6654,28 @@ mapzone_manager - chk_active - Show inactive - - - tooltip_chk_active - Show inactive + btn_toggle_active + Toggle active - - - mincut - title - Mincut + tooltip_btn_toggle_active + Toggle active - lbl_chlorine - Chlorine: + btn_update + Update - tooltip_lbl_chlorine - None + tooltip_btn_update + Update - grb_location - Location + lbl_mapzone_name + Filter by: Mapzone name - tooltip_grb_location - None + tooltip_lbl_mapzone_name + Filter by: Mapzone name btn_cancel @@ -6594,108 +6686,115 @@ Cancel - lbl_cause - Cause: + btn_delete + Delete - tooltip_lbl_cause - None + tooltip_btn_delete + Delete - lbl_dist_from_plot - Distance from plot: + chk_show_all + Show all mapzones - tooltip_lbl_dist_from_plot - None + tooltip_chk_show_all + Show all mapzones - lbl_state - State: + btn_execute + - tooltip_lbl_state - None + tooltip_btn_execute + Execute mapzone analysis process - lbl_start - From: + btn_create + Create - tooltip_lbl_start - None + tooltip_btn_create + Create - lbl_msg - No results found + btn_config + Config - tooltip_lbl_msg - None + tooltip_btn_config + Configure - lbl_end - To: + chk_active + Show inactive - tooltip_lbl_end - None + tooltip_chk_active + Show inactive + + + mincut - lbl_descript_pd - Description: + title + Mincut - tooltip_lbl_descript_pd + lbl_dist_from_plot + Distance from plot: + + + tooltip_lbl_dist_from_plot None - btn_accept - Accept + btn_end + End - tooltip_btn_accept - Accept + tooltip_btn_end + None - lbl_turbidity - Turbidity: + grb_location + Location - tooltip_lbl_turbidity + tooltip_grb_location None - lbl_id - Id: + lbl_type + Type: - tooltip_lbl_id + tooltip_lbl_type None - lbl_descript_rd - Description: + btn_start + Start - tooltip_lbl_descript_rd + tooltip_btn_start None - lbl_work_order - Work order: + lbl_id + Id: - tooltip_lbl_work_order + tooltip_lbl_id None - chk_use_planified - Use planified network + btn_accept + Accept - tooltip_chk_use_planified - None + tooltip_btn_accept + Accept lbl_exec_appropriate @@ -6721,6 +6820,38 @@ tooltip_lbl_exec_enddate None + + lbl_exec_user + Exec user: + + + tooltip_lbl_exec_user + None + + + chk_use_planified + Use planified network + + + tooltip_chk_use_planified + None + + + lbl_descript_pd + Description: + + + tooltip_lbl_descript_pd + None + + + lbl_end + To: + + + tooltip_lbl_end + None + grb_plan_forecasted_dates Forecasted dates @@ -6730,11 +6861,43 @@ None - grb_plan_details - Details + lbl_start + From: + + + tooltip_lbl_start + None + + + lbl_state + State: + + + tooltip_lbl_state + None + + + lbl_msg + No results found + + + tooltip_lbl_msg + None + + + lbl_work_order + Work order: + + + tooltip_lbl_work_order + None + + + lbl_chlorine + Chlorine: - tooltip_grb_plan_details + tooltip_lbl_chlorine None @@ -6746,29 +6909,37 @@ None - btn_start - Start + lbl_cause + Cause: - tooltip_btn_start + tooltip_lbl_cause None - lbl_exec_user - Exec user: + grb_plan_details + Details - tooltip_lbl_exec_user + tooltip_grb_plan_details None - lbl_type - Type: + lbl_descript_rd + Description: - tooltip_lbl_type + tooltip_lbl_descript_rd None + + btn_cancel + Cancel + + + tooltip_btn_cancel + Cancel + lbl_received_date Received date: @@ -6802,11 +6973,11 @@ None - btn_end - End + lbl_turbidity + Turbidity: - tooltip_btn_end + tooltip_lbl_turbidity None @@ -6817,20 +6988,28 @@ Mincut composer - lbl_template - Template: + btn_ok + Open - tooltip_lbl_template + tooltip_btn_ok None - btn_cancel - Cancel + dlg_mincut_composer + Mincut composer - tooltip_btn_cancel - Cancel + tooltip_dlg_mincut_composer + None + + + lbl_template + Template: + + + tooltip_lbl_template + None lbl_title @@ -6849,20 +7028,12 @@ None - dlg_mincut_composer - Mincut composer - - - tooltip_dlg_mincut_composer - None - - - btn_ok - Open + btn_cancel + Cancel - tooltip_btn_ok - None + tooltip_btn_cancel + Cancel @@ -6880,36 +7051,36 @@ None - btn_accept - Accept + btn_snapping + None - tooltip_btn_accept - Accept + tooltip_btn_snapping + Snapping - btn_insert - None + lbl_search + Search by customer code: - tooltip_btn_insert - Insert + tooltip_lbl_search + None - btn_snapping + btn_insert None - tooltip_btn_snapping - Snapping + tooltip_btn_insert + Insert - lbl_search - Search by customer code: + btn_accept + Accept - tooltip_lbl_search - None + tooltip_btn_accept + Accept btn_delete @@ -6927,19 +7098,35 @@ Mincut end - lbl_executed - Executed by: + btn_accept + Accept - tooltip_lbl_executed + tooltip_btn_accept + Accept + + + lbl_end_date + To: + + + tooltip_lbl_end_date None - lbl_number - Number: + grb_close_mincut + Close mincut - tooltip_lbl_number + tooltip_grb_close_mincut + None + + + btn_cancel + Cancel + + + tooltip_btn_cancel None @@ -6951,11 +7138,11 @@ None - lbl_end_date - To: + lbl_work_order + Work order: - tooltip_lbl_end_date + tooltip_lbl_work_order None @@ -6966,14 +7153,6 @@ tooltip_lbl_street None - - btn_set_real_location - Set real location - - - tooltip_btn_set_real_location - None - lbl_start_hour Start hour: @@ -6983,19 +7162,19 @@ None - btn_cancel - Cancel + lbl_number + Number: - tooltip_btn_cancel + tooltip_lbl_number None - grb_close_mincut - Close mincut + lbl_municipality + Municipality: - tooltip_grb_close_mincut + tooltip_lbl_municipality None @@ -7007,43 +7186,35 @@ None - lbl_municipality - Municipality: + lbl_end_hour + End hour: - tooltip_lbl_municipality + tooltip_lbl_end_hour None - lbl_mincut - Mincut: + lbl_executed + Executed by: - tooltip_lbl_mincut + tooltip_lbl_executed None - btn_accept - Accept - - - tooltip_btn_accept - Accept - - - lbl_end_hour - End hour: + lbl_mincut + Mincut: - tooltip_lbl_end_hour + tooltip_lbl_mincut None - lbl_work_order - Work order: + btn_set_real_location + Set real location - tooltip_lbl_work_order + tooltip_btn_set_real_location None @@ -7054,43 +7225,35 @@ Mincut hydrometer - lbl_hcc - Hydrometer customer code: - - - tooltip_lbl_hcc - None + btn_accept + Accept - lbl_ccc - Connec customer code: + tooltip_btn_accept + Accept - tooltip_lbl_ccc - None + dlg_mincut_hydrometer + Mincut hydrometer - btn_insert + tooltip_dlg_mincut_hydrometer None - tooltip_btn_insert - Insert - - - btn_accept - Accept + lbl_ccc + Connec customer code: - tooltip_btn_accept - Accept + tooltip_lbl_ccc + None - dlg_mincut_hydrometer - Mincut hydrometer + lbl_hcc + Hydrometer customer code: - tooltip_dlg_mincut_hydrometer + tooltip_lbl_hcc None @@ -7101,6 +7264,14 @@ tooltip_btn_delete Delete + + btn_insert + None + + + tooltip_btn_insert + Insert + mincut_manager @@ -7109,59 +7280,43 @@ Mincut management - btn_next_days - Next days - - - tooltip_btn_next_days - None - - - lbl_exploitation - Exploitation: - - - tooltip_lbl_exploitation + btn_selector_mincut None - dlg_mincut_manager - Mincut management - - - tooltip_dlg_mincut_manager + tooltip_btn_selector_mincut None - lbl_mincut_type - Type: + btn_cancel + Close - tooltip_lbl_mincut_type + tooltip_btn_cancel None - lbl_date_to - To: + btn_delete + Delete - tooltip_lbl_date_to + tooltip_btn_delete None - lbl_streetaxis - Streetaxis: + lbl_filter + Filter by: - tooltip_lbl_streetaxis + tooltip_lbl_filter None - btn_delete - Delete + lbl_date_to + To: - tooltip_btn_delete + tooltip_lbl_date_to None @@ -7172,6 +7327,14 @@ tooltip_lbl_date_from None + + lbl_exploitation + Exploitation: + + + tooltip_lbl_exploitation + None + lbl_state State: @@ -7181,27 +7344,27 @@ None - lbl_filter - Filter by: + btn_next_days + Next days - tooltip_lbl_filter + tooltip_btn_next_days None - btn_cancel - Close + btn_notify + Send sms - tooltip_btn_cancel + tooltip_btn_notify None - btn_selector_mincut - None + lbl_mincut_type + Type: - tooltip_btn_selector_mincut + tooltip_lbl_mincut_type None @@ -7221,47 +7384,47 @@ None - btn_notify - Send sms + dlg_mincut_manager + Mincut management - tooltip_btn_notify + tooltip_dlg_mincut_manager None - - - netscenario_manager - btn_update_netscenario - Current netscenario + lbl_streetaxis + Streetaxis: - tooltip_btn_update_netscenario - Current netscenario + tooltip_lbl_streetaxis + None + + + netscenario_manager - chk_active - Show inactive + btn_create + Create - tooltip_chk_active - Show inactive + tooltip_btn_create + Create - btn_duplicate - Duplicate + lbl_netscenario_name + Filter by: Netscenario name - tooltip_btn_duplicate - Duplicate + tooltip_lbl_netscenario_name + Filter by: Netscenario name - btn_cancel - Close + btn_update + Update - tooltip_btn_cancel - Close + tooltip_btn_update + Update btn_delete @@ -7272,36 +7435,36 @@ Delete - btn_update - Update + btn_cancel + Close - tooltip_btn_update - Update + tooltip_btn_cancel + Close - lbl_netscenario_name - Filter by: Netscenario name + btn_toc + - tooltip_lbl_netscenario_name - Filter by: Netscenario name + tooltip_btn_toc + Load Giswater layer - btn_create - Create + btn_update_netscenario + Current netscenario - tooltip_btn_create - Create + tooltip_btn_update_netscenario + Current netscenario - btn_execute - + btn_duplicate + Duplicate - tooltip_btn_execute - Execute mapzones analysis + tooltip_btn_duplicate + Duplicate btn_toggle_active @@ -7312,12 +7475,20 @@ Toggle active - btn_toc + btn_execute - tooltip_btn_toc - Load Giswater layer + tooltip_btn_execute + Execute mapzones analysis + + + chk_active + Show inactive + + + tooltip_chk_active + Show inactive @@ -7343,11 +7514,11 @@ Accept - dlg_nodetype_change - Change node type + lbl_node_type + Current node type: - tooltip_dlg_nodetype_change + tooltip_lbl_node_type None @@ -7359,19 +7530,19 @@ None - lbl_node_type - Current node type: + lbl_catalog_id + Catalog id: - tooltip_lbl_node_type + tooltip_lbl_catalog_id None - lbl_catalog_id - Catalog id: + dlg_nodetype_change + Change node type - tooltip_lbl_catalog_id + tooltip_dlg_nodetype_change None @@ -7389,68 +7560,20 @@ plan_psector - lbl_text2 - Text 2: - - - tooltip_lbl_text2 - None - - - lbl_type - Type: - - - tooltip_lbl_type - None - - - lbl_workcat_id - Workcat id: - - - tooltip_lbl_workcat_id - None - - - btn_remove - Remove - - - tooltip_btn_remove - - - - lbl_vat - VAT: - - - tooltip_lbl_vat - None - - - lbl_total_nodes - Total nodes: + lbl_priority + Priority: - tooltip_lbl_total_nodes + tooltip_lbl_priority None - lbl_total_arcs - Total arcs: - - - tooltip_lbl_total_arcs + btn_snapping None - lbl_text3 - Text 3: - - - tooltip_lbl_text3 - None + tooltip_btn_snapping + Select features btn_set_to_arc @@ -7461,147 +7584,147 @@ Set arc_id (only ARC exit_type) - lbl_scale - Scale: + lbl_vat + VAT: - tooltip_lbl_scale + tooltip_lbl_vat None - lbl_status - Status: + lbl_general_expenses + General expenses - tooltip_lbl_status + tooltip_lbl_general_expenses None - lbl_rotation - Rotation: + btn_rapports + Generate rapports - tooltip_lbl_rotation - None + tooltip_btn_rapports + - lbl_text1 - Text 1: + btn_select + Select - tooltip_lbl_text1 - None + tooltip_btn_select + - lbl_parent_id - Parent id: + btn_select + Select - tooltip_lbl_parent_id - None + tooltip_btn_select + - btn_insert + btn_select_arc None - - tooltip_btn_insert - Insert + + tooltip_btn_select_arc + Replace on service for planified arc - btn_cancel - Cancel + lbl_other_expenses + Other expenses - tooltip_btn_cancel - + tooltip_lbl_other_expenses + None - lbl_exploitation - Exploitation: + lbl_num_value + Num value: - tooltip_lbl_exploitation - + tooltip_lbl_num_value + None - btn_accept - Accept + lbl_text6 + Text 6: - tooltip_btn_accept - + tooltip_lbl_text6 + None - lbl_observation - Observation: + lbl_text5 + Text 5: - tooltip_lbl_observation + tooltip_lbl_text5 None - lbl_descript - Descript: + lbl_text4 + Text 4: - tooltip_lbl_descript - + tooltip_lbl_text4 + None - active - Active + lbl_text3 + Text 3: - tooltip_active - + tooltip_lbl_text3 + None - lbl_name - Name: + btn_arc_fusion + None - tooltip_lbl_name - None + tooltip_btn_arc_fusion + Arc fusion with planified arcs - chk_enable_all - Enable all (visualize obsolete state on features related to psector) + lbl_scale + Scale: - tooltip_chk_enable_all - + tooltip_lbl_scale + None - grb_map_details - Map details + lbl_rotation + Rotation: - tooltip_grb_map_details - + tooltip_lbl_rotation + None - btn_rapports - Generate rapports + btn_remove + Remove - tooltip_btn_rapports + tooltip_btn_remove - btn_select - Select + btn_cancel + Cancel - tooltip_btn_select + tooltip_btn_cancel - btn_select - Select + btn_accept + Accept - tooltip_btn_select + tooltip_btn_accept @@ -7613,20 +7736,28 @@ - btn_select_arc + lbl_parent_id + Parent id: + + + tooltip_lbl_parent_id None - tooltip_btn_select_arc - Replace on service for planified arc + lbl_observation + Observation: - btn_delete + tooltip_lbl_observation None - tooltip_btn_delete - Delete + lbl_name + Name: + + + tooltip_lbl_name + None lbl_ext_code @@ -7637,44 +7768,44 @@ None - lbl_other_expenses - Other expenses + lbl_workcat_id + Workcat id: - tooltip_lbl_other_expenses + tooltip_lbl_workcat_id None - btn_arc_fusion - None + lbl_type + Type: - tooltip_btn_arc_fusion - Arc fusion with planified arcs + tooltip_lbl_type + None - lbl_general_expenses - General expenses + lbl_text2 + Text 2: - tooltip_lbl_general_expenses + tooltip_lbl_text2 None - lbl_priority - Priority: + lbl_text1 + Text 1: - tooltip_lbl_priority + tooltip_lbl_text1 None - btn_snapping - None + lbl_status + Status: - tooltip_btn_snapping - Select features + tooltip_lbl_status + None lbl_psector_id @@ -7685,137 +7816,137 @@ None - lbl_num_value - Num value: - - - tooltip_lbl_num_value + btn_insert None - lbl_text6 - Text 6: + tooltip_btn_insert + Insert - tooltip_lbl_text6 - None + grb_map_details + Map details - lbl_text5 - Text 5: + tooltip_grb_map_details + - tooltip_lbl_text5 - None + chk_enable_all + Enable all (visualize obsolete state on features related to psector) - lbl_text4 - Text 4: + tooltip_chk_enable_all + - tooltip_lbl_text4 - None + active + Active - - - price_manager - title - Price result management + tooltip_active + - btn_cancel - Close + lbl_descript + Descript: - tooltip_btn_cancel - None + tooltip_lbl_descript + - btn_delete - Delete + lbl_exploitation + Exploitation: - tooltip_btn_delete - None + tooltip_lbl_exploitation + - dlg_price_manager - Price result management + lbl_total_nodes + Total nodes: - tooltip_dlg_price_manager + tooltip_lbl_total_nodes None - btn_update_result - Current result + lbl_total_arcs + Total arcs: - tooltip_btn_update_result + tooltip_lbl_total_arcs None - lbl_result_id - Filter by: + btn_delete + None - tooltip_lbl_result_id - None + tooltip_btn_delete + Delete - priority + price_manager title - Priority Calculation + Price result management - dlg_priority - Priority Calculation + lbl_result_id + Filter by: - tooltip_dlg_priority + tooltip_lbl_result_id None - tab_engine - Engine + btn_delete + Delete - tooltip_tab_engine + tooltip_btn_delete None - tab_infolog - Info Log + btn_update_result + Current result - tooltip_tab_infolog + tooltip_btn_update_result None - lbl_result_id - Result name: + btn_cancel + Close - tooltip_lbl_result_id + tooltip_btn_cancel None - grb_global - Calculation parameters + dlg_price_manager + Price result management - tooltip_grb_global + tooltip_dlg_price_manager None + + + priority + + title + Priority Calculation + - tab_calc - Calculation + lbl_expl_selection + Exploitation: - tooltip_tab_calc + tooltip_lbl_expl_selection None @@ -7826,6 +7957,14 @@ tooltip_tab_material None + + tab_catalog + Catalog + + + tooltip_tab_catalog + None + lbl_budget Yearly budget: @@ -7843,51 +7982,51 @@ None - btn_snapping - None + tab_infolog + Info Log - tooltip_btn_snapping - Select features on canvas + tooltip_tab_infolog + None - lbl_material - Material: + btn_snapping + None - tooltip_lbl_material - None + tooltip_btn_snapping + Select features on canvas - lbl_expl_selection - Exploitation: + btn_calc + Calculate - tooltip_lbl_expl_selection + tooltip_btn_calc None - lbl_descript - Description: + lbl_result_id + Result name: - tooltip_lbl_descript + tooltip_lbl_result_id None - btn_calc - Calculate + lbl_presszone + Presszone: - tooltip_btn_calc + tooltip_lbl_presszone None - lbl_year - Horizon year: + tab_engine + Engine - tooltip_lbl_year + tooltip_tab_engine None @@ -7899,11 +8038,11 @@ None - lbl_presszone - Presszone: + lbl_descript + Description: - tooltip_lbl_presszone + tooltip_lbl_descript None @@ -7923,50 +8062,66 @@ None - tab_catalog - Catalog + dlg_priority + Priority Calculation - tooltip_tab_catalog + tooltip_dlg_priority None - - - priority_manager - title - Results Manager + lbl_year + Horizon year: - lbl_info - Info: + tooltip_lbl_year + None - tooltip_lbl_info + grb_global + Calculation parameters + + + tooltip_grb_global None - lbl_status - Status: + tab_calc + Calculation - tooltip_lbl_status + tooltip_tab_calc None - dlg_priority_manager + lbl_material + Material: + + + tooltip_lbl_material + None + + + + priority_manager + + title Results Manager - tooltip_dlg_priority_manager + lbl_status + Status: + + + tooltip_lbl_status None - lbl_filter - Filter by: Result name + btn_edit + Edit - tooltip_lbl_filter + tooltip_btn_edit None @@ -7978,27 +8133,27 @@ None - btn_delete - Delete + btn_duplicate + Duplicate - tooltip_btn_delete + tooltip_btn_duplicate None - btn_close - Close + lbl_expl + Exploitation: - tooltip_btn_close + tooltip_lbl_expl None - lbl_expl - Exploitation: + btn_close + Close - tooltip_lbl_expl + tooltip_btn_close None @@ -8010,19 +8165,35 @@ None - btn_duplicate - Duplicate + lbl_info + Info: - tooltip_btn_duplicate + tooltip_lbl_info None - btn_edit - Edit + lbl_filter + Filter by: Result name - tooltip_btn_edit + tooltip_lbl_filter + None + + + btn_delete + Delete + + + tooltip_btn_delete + None + + + dlg_priority_manager + Results Manager + + + tooltip_dlg_priority_manager None @@ -8033,27 +8204,27 @@ Draw profile - btn_delete_additional_point - None + btn_add_end_point + Add end point - tooltip_btn_delete_additional_point + tooltip_btn_add_end_point None - lbl_title - Title: + btn_add_additional_point + Add additional point - tooltip_lbl_title + tooltip_btn_add_additional_point None - lbl_end_point - End point: + lbl_profile_id + Profile id: - tooltip_lbl_end_point + tooltip_lbl_profile_id None @@ -8065,75 +8236,75 @@ None - btn_add_end_point - Add end point + btn_save_profile + Save profile - tooltip_btn_add_end_point + tooltip_btn_save_profile None - btn_add_additional_point - Add additional point + lbl_template + Template: - tooltip_btn_add_additional_point + tooltip_lbl_template None - lbl_profile_id - Profile id: + lbl_end_point + End point: - tooltip_lbl_profile_id + tooltip_lbl_end_point None - btn_load_profile - Load profile + lbl_rotation + Rotation: - tooltip_btn_load_profile + tooltip_lbl_rotation None - lbl_additional_point - Additional point: + lbl_title + Title: - tooltip_lbl_additional_point + tooltip_lbl_title None - dlg_profile + btn_draw Draw profile - tooltip_dlg_profile + tooltip_btn_draw None - lbl_path - Path: + btn_clear_profile + Clear profile - tooltip_lbl_path + tooltip_btn_clear_profile None - btn_close - Close + btn_update_path + ... - tooltip_btn_close + tooltip_btn_update_path None - btn_add_start_point - Add start point + lbl_sv + Vertical scale: - tooltip_btn_add_start_point + tooltip_lbl_sv None @@ -8145,19 +8316,19 @@ None - lbl_sv - Vertical scale: + btn_add_start_point + Add start point - tooltip_lbl_sv + tooltip_btn_add_start_point None - btn_draw - Draw profile + btn_delete_additional_point + None - tooltip_btn_draw + tooltip_btn_delete_additional_point None @@ -8169,43 +8340,43 @@ None - lbl_rotation - Rotation: + btn_load_profile + Load profile - tooltip_lbl_rotation + tooltip_btn_load_profile None - lbl_template - Template: + dlg_profile + Draw profile - tooltip_lbl_template + tooltip_dlg_profile None - btn_save_profile - Save profile + btn_close + Close - tooltip_btn_save_profile + tooltip_btn_close None - btn_update_path - ... + lbl_additional_point + Additional point: - tooltip_btn_update_path + tooltip_lbl_additional_point None - btn_clear_profile - Clear profile + lbl_path + Path: - tooltip_btn_clear_profile + tooltip_lbl_path None @@ -8263,19 +8434,19 @@ Accept - dlg_project_check - Check project + tab_databaselog + Database log - tooltip_dlg_project_check + tooltip_tab_databaselog None - tab_databaselog - Database log + dlg_project_check + Check project - tooltip_tab_databaselog + tooltip_dlg_project_check None @@ -8286,27 +8457,19 @@ Duplicate psector - tab_info_log - Info log - - - tooltip_tab_info_log - None - - - btn_cancel - Cancel + tab_duplicate_psector + Duplicate psector - tooltip_btn_cancel + tooltip_tab_duplicate_psector None - lbl_duplicate_psector - Duplicate psector: + tab_info_log + Info log - tooltip_lbl_duplicate_psector + tooltip_tab_info_log None @@ -8318,12 +8481,12 @@ None - btn_accept - Accept + lbl_duplicate_psector + Duplicate psector: - tooltip_btn_accept - Accept + tooltip_lbl_duplicate_psector + None dlg_psector_duplicate @@ -8334,13 +8497,21 @@ None - tab_duplicate_psector - Duplicate psector + btn_cancel + Cancel - tooltip_tab_duplicate_psector + tooltip_btn_cancel None + + btn_accept + Accept + + + tooltip_btn_accept + Accept + psector_manager @@ -8348,14 +8519,6 @@ title Psector management - - btn_update_psector - Current psector - - - tooltip_btn_update_psector - None - btn_merge Merge @@ -8365,35 +8528,43 @@ To merge various psectors into only one, you have to previously select them using Ctrl and then click this button - btn_toggle_active - Toggle active + lbl_psector_name + Filter by: - tooltip_btn_toggle_active + tooltip_lbl_psector_name None - btn_delete - Delete + btn_duplicate + Duplicate - tooltip_btn_delete + tooltip_btn_duplicate None - lbl_psector_name - Filter by: + btn_update_psector + Current psector - tooltip_lbl_psector_name + tooltip_btn_update_psector None - btn_duplicate - Duplicate + btn_delete + Delete - tooltip_btn_duplicate + tooltip_btn_delete + None + + + dlg_psector_manager + Psector management + + + tooltip_dlg_psector_manager None @@ -8405,19 +8576,19 @@ Show inactive - btn_cancel - Close + btn_toggle_active + Toggle active - tooltip_btn_cancel + tooltip_btn_toggle_active None - dlg_psector_manager - Psector management + btn_cancel + Close - tooltip_dlg_psector_manager + tooltip_btn_cancel None @@ -8428,19 +8599,27 @@ Psector rapport - lbl_template - Template: + lbl_detail_csv + Detail csv file: - tooltip_lbl_template + tooltip_lbl_detail_csv None - btn_ok - Create + btn_path + ... - tooltip_btn_ok + tooltip_btn_path + None + + + lbl_composer_disabled + Composer disabled + + + tooltip_lbl_composer_disabled None @@ -8452,27 +8631,27 @@ None - btn_cancel - Cancel + grb_rapport + Rapport - tooltip_btn_cancel - Cancel + tooltip_grb_rapport + None - lbl_composer_disabled - Composer disabled + btn_cancel + Cancel - tooltip_lbl_composer_disabled - None + tooltip_btn_cancel + Cancel - btn_path - ... + lbl_prices_list + Prices list csv file: - tooltip_btn_path + tooltip_lbl_prices_list None @@ -8484,27 +8663,19 @@ None - grb_rapport - Rapport - - - tooltip_grb_rapport - None - - - lbl_prices_list - Prices list csv file: + btn_ok + Create - tooltip_lbl_prices_list + tooltip_btn_ok None - lbl_detail_csv - Detail csv file: + lbl_template + Template: - tooltip_lbl_detail_csv + tooltip_lbl_template None @@ -8515,11 +8686,19 @@ Result Selector - lbl_descript_compare - Description: + tab_result + Result - tooltip_lbl_descript_compare + tooltip_tab_result + None + + + btn_cancel + Cancel + + + tooltip_btn_cancel None @@ -8531,11 +8710,11 @@ None - btn_cancel - Cancel + dlg_result_selector + Result Selector - tooltip_btn_cancel + tooltip_dlg_result_selector None @@ -8547,11 +8726,11 @@ None - tab_result - Result + lbl_descript_compare + Description: - tooltip_tab_result + tooltip_lbl_descript_compare None @@ -8570,14 +8749,6 @@ tooltip_lbl_result_compare None - - dlg_result_selector - Result Selector - - - tooltip_dlg_result_selector - None - search @@ -8585,6 +8756,14 @@ title SearchPlus + + dlg_search + SearchPlus + + + tooltip_dlg_search + None + lbl_msg No results found @@ -8601,14 +8780,6 @@ tooltip_Check all None - - dlg_search - SearchPlus - - - tooltip_dlg_search - None - search_workcat @@ -8617,11 +8788,11 @@ Workcat search - btn_path - ... + lbl_end + Filter by: - tooltip_btn_path + tooltip_lbl_end None @@ -8633,19 +8804,11 @@ None - lbl_destination_path - Destination path: - - - tooltip_lbl_destination_path - None - - - tab_doc - Documents + btn_path + ... - tooltip_tab_doc + tooltip_btn_path None @@ -8665,51 +8828,51 @@ None - btn_state1 - Activate + lbl_init + Filter by: - tooltip_btn_state1 + tooltip_lbl_init None - lbl_total2 - Total numbers: + tab_doc + Documents - tooltip_lbl_total2 + tooltip_tab_doc None - lbl_init - Filter by: + lbl_total2 + Total numbers: - tooltip_lbl_init + tooltip_lbl_total2 None - btn_state0 - Activate + lbl_feat_ini + Features installed with the selected workcat - tooltip_btn_state0 + tooltip_lbl_feat_ini None - tab_ended - Removed + dlg_search_workcat + Workcat search - tooltip_tab_ended + tooltip_dlg_search_workcat None - dlg_search_workcat - Workcat search + btn_state1 + Activate - tooltip_dlg_search_workcat + tooltip_btn_state1 None @@ -8720,6 +8883,14 @@ tooltip_btn_export_to_csv None + + tab_ended + Removed + + + tooltip_tab_ended + None + lbl_total1 Total numbers: @@ -8729,19 +8900,19 @@ None - lbl_feat_ini - Features installed with the selected workcat + btn_state0 + Activate - tooltip_lbl_feat_ini + tooltip_btn_state0 None - lbl_end - Filter by: + lbl_destination_path + Destination path: - tooltip_lbl_end + tooltip_lbl_destination_path None @@ -8752,12 +8923,12 @@ Selector - btn_close - Close + dlg_selector + Selector - tooltip_btn_close - Close + tooltip_dlg_selector + None btn_close @@ -8765,14 +8936,14 @@ tooltip_btn_close - None + Close - dlg_selector - Selector + btn_close + Close - tooltip_dlg_selector + tooltip_btn_close None @@ -8782,6 +8953,22 @@ title Status Selector + + btn_accept + Accept + + + tooltip_btn_accept + None + + + lbl_new_status + New status: + + + tooltip_lbl_new_status + None + dlg_status_selector Status Selector @@ -8790,6 +8977,14 @@ tooltip_dlg_status_selector None + + btn_cancel + Cancel + + + tooltip_btn_cancel + None + lbl_result_main You are changing the status of the following result: @@ -8798,29 +8993,88 @@ tooltip_lbl_result_main None + + + style_manager btn_cancel - Cancel + Close tooltip_btn_cancel - None + Close - lbl_new_status - New status: + btn_updateStyle + Update style - tooltip_lbl_new_status - None + tooltip_btn_updateStyle + Updates the selected layer style with the style in the corresponding project layer - btn_accept - Accept + btn_deleteGroup + - tooltip_btn_accept - None + tooltip_btn_deleteGroup + Delete selected category + + + btn_addGroup + + + + tooltip_btn_addGroup + Add new category + + + btn_deleteStyle + Delete style + + + tooltip_btn_deleteStyle + Removes a style from the category + + + stylegroup + + + + tooltip_stylegroup + All your style categories + + + style_name + + + + tooltip_style_name + Introduce the layer name to filter + + + lbl_filter_name + Filter by: Layer name + + + tooltip_lbl_filter_name + + + + btn_refreshAll + Refresh all + + + tooltip_btn_refreshAll + Reloads the styles loaded into the project + + + btn_addStyle + Add style + + + tooltip_btn_addStyle + Adds a layer to the selected category @@ -8838,19 +9092,19 @@ None - btn_close - Close + btn_cancel + Cancel - tooltip_btn_close + tooltip_btn_cancel None - btn_cancel - Cancel + dlg_toolbox + Toolbox - tooltip_btn_cancel + tooltip_dlg_toolbox None @@ -8862,19 +9116,19 @@ None - dlg_toolbox - Toolbox + tab_config + Config - tooltip_dlg_toolbox + tooltip_tab_config None - tab_config - Config + btn_close + Close - tooltip_tab_config + tooltip_btn_close None @@ -8900,107 +9154,107 @@ Visit - btn_doc_new - None + tab_event + Event - tooltip_btn_doc_new - Create new document + tooltip_tab_event + None - tab_relations - Relations + btn_open_doc + None - tooltip_tab_relations - Relations + tooltip_btn_open_doc + Open document - lbl_feature_type - Feature type: + btn_add_geom + Add geom - tooltip_lbl_feature_type + tooltip_btn_add_geom None - btn_doc_insert - None + lbl_info + Info: - tooltip_btn_doc_insert - Insert document + tooltip_lbl_info + None - btn_cancel - Cancel + lbl_feature_type + Feature type: - tooltip_btn_cancel + tooltip_lbl_feature_type None - tab_document - Document + lbl_end_date + To: - tooltip_tab_document + tooltip_lbl_end_date None - lbl_code - Code: - - - tooltip_lbl_code + btn_doc_new None - tab_event - Event + tooltip_btn_doc_new + Create new document - tooltip_tab_event + btn_doc_delete None - lbl_user_name - User name: + tooltip_btn_doc_delete + Delete document - tooltip_lbl_user_name + btn_event_delete + Delete event + + + tooltip_btn_event_delete None - lbl_start_date - From: + btn_event_insert + Insert event - tooltip_lbl_start_date + tooltip_btn_event_insert None - btn_accept - Accept + btn_event_update + Update event - tooltip_btn_accept - Accept + tooltip_btn_event_update + None - lbl_status - Status: + btn_feature_delete + None - tooltip_lbl_status + tooltip_btn_feature_delete None - lbl_descript - Description: + btn_feature_insert + None - tooltip_lbl_descript + tooltip_btn_feature_insert None @@ -9012,116 +9266,116 @@ None - btn_feature_insert - None + lbl_descript + Description: - tooltip_btn_feature_insert + tooltip_lbl_descript None - lbl_id - Id: + lbl_status + Status: - tooltip_lbl_id + tooltip_lbl_status None - dlg_visit - Visit + lbl_start_date + From: - tooltip_dlg_visit + tooltip_lbl_start_date None - btn_open_doc - None + tab_relations + Relations - tooltip_btn_open_doc - Open document + tooltip_tab_relations + Relations - tab_visit - Visit + lbl_code + Code: - tooltip_tab_visit + tooltip_lbl_code None - btn_feature_delete - None + tab_document + Document - tooltip_btn_feature_delete + tooltip_tab_document None - btn_event_update - Update event + lbl_user_name + User name: - tooltip_btn_event_update + tooltip_lbl_user_name None - btn_event_insert - Insert event + lbl_visitcat_id + Visit cat id: - tooltip_btn_event_insert + tooltip_lbl_visitcat_id None - btn_event_delete - Delete event + btn_cancel + Cancel - tooltip_btn_event_delete + tooltip_btn_cancel None - lbl_info - Info: + btn_doc_insert + None - tooltip_lbl_info - None + tooltip_btn_doc_insert + Insert document - btn_doc_delete - None + lbl_id + Id: - tooltip_btn_doc_delete - Delete document + tooltip_lbl_id + None - lbl_visitcat_id - Visit cat id: + dlg_visit + Visit - tooltip_lbl_visitcat_id + tooltip_dlg_visit None - lbl_end_date - To: + tab_visit + Visit - tooltip_lbl_end_date + tooltip_tab_visit None - btn_add_geom - Add geom + btn_accept + Accept - tooltip_btn_add_geom - None + tooltip_btn_accept + Accept @@ -9130,6 +9384,14 @@ title Load documents + + dlg_visit_document + Load documents + + + tooltip_dlg_visit_document + None + lbl_visit_id Visit id: @@ -9146,14 +9408,6 @@ tooltip_btn_open None - - dlg_visit_document - Load documents - - - tooltip_dlg_visit_document - None - visit_event @@ -9162,27 +9416,27 @@ Standard arc event - lbl_parameter_id - Parameter id: + btn_delete_file + Delete file - tooltip_lbl_parameter_id + tooltip_btn_delete_file None - lbl_files - Files: + dlg_visit_event + Standard arc event - tooltip_lbl_files + tooltip_dlg_visit_event None - lbl_position_id - Position id: + lbl_value + Value: - tooltip_lbl_position_id + tooltip_lbl_value None @@ -9194,43 +9448,43 @@ None - btn_delete_file - Delete file + lbl_parameter_id + Parameter id: - tooltip_btn_delete_file + tooltip_lbl_parameter_id None - lbl_text - Text: + lbl_position_value + Position value: - tooltip_lbl_text + tooltip_lbl_position_value None - lbl_position_value - Position value: + lbl_position_id + Position id: - tooltip_lbl_position_value + tooltip_lbl_position_id None - dlg_visit_event - Standard arc event + lbl_files + Files: - tooltip_dlg_visit_event + tooltip_lbl_files None - lbl_value - Value: + lbl_text + Text: - tooltip_lbl_value + tooltip_lbl_text None @@ -9241,27 +9495,19 @@ Event - lbl_geom3 - Geom 3: - - - tooltip_lbl_geom3 - None - - - lbl_value2 - Value 2: + btn_close + Close - tooltip_lbl_value2 + tooltip_btn_close None - lbl_value - Value: + lbl_is_last + Is last: - tooltip_lbl_value + tooltip_lbl_is_last None @@ -9273,27 +9519,19 @@ None - lbl_is_last - Is last: - - - tooltip_lbl_is_last - None - - - lbl_index_val - Index val: + lbl_value + Value: - tooltip_lbl_index_val + tooltip_lbl_value None - lbl_xcoord - X coord: + lbl_value2 + Value 2: - tooltip_lbl_xcoord + tooltip_lbl_value2 None @@ -9304,14 +9542,6 @@ tooltip_dlg_visit_event_full None - - tab_info - Info - - - tooltip_tab_info - None - lbl_value1 Value 1: @@ -9321,12 +9551,12 @@ None - lbl_ycoord - Y coord: + lbl_visit_id + Visit id: - tooltip_lbl_ycoord - None + tooltip_lbl_visit_id + Visit ID lbl_parameter_id @@ -9368,14 +9598,6 @@ tooltip_lbl_files None - - lbl_visit_id - Visit id: - - - tooltip_lbl_visit_id - Visit ID - lbl_event_code Event code: @@ -9416,6 +9638,30 @@ tooltip_lbl_id None + + lbl_geom3 + Geom 3: + + + tooltip_lbl_geom3 + None + + + lbl_ycoord + Y coord: + + + tooltip_lbl_ycoord + None + + + lbl_xcoord + X coord: + + + tooltip_lbl_xcoord + None + lbl_text Text: @@ -9425,11 +9671,19 @@ None - btn_close - Close + tab_info + Info + + + tooltip_tab_info + None + + + lbl_index_val + Index val: - tooltip_btn_close + tooltip_lbl_index_val None @@ -9440,51 +9694,51 @@ Rehabilitation arc event - dlg_visit_event_rehab - Rehabilitation arc event + btn_delete_file + Delete file - tooltip_dlg_visit_event_rehab + tooltip_btn_delete_file None - btn_delete_file - Delete file + lbl_value2 + Value 2: - tooltip_btn_delete_file + tooltip_lbl_value2 None - lbl_parameter_id - Parameter id: + lbl_text + Text: - tooltip_lbl_parameter_id + tooltip_lbl_text None - lbl_files - Files: + lbl_position_id + Position id: - tooltip_lbl_files + tooltip_lbl_position_id None - lbl_geom1 - Geom 1: + lbl_parameter_id + Parameter id: - tooltip_lbl_geom1 + tooltip_lbl_parameter_id None - btn_add_file - Add file + lbl_geom2 + Geom 2: - tooltip_btn_add_file + tooltip_lbl_geom2 None @@ -9496,11 +9750,11 @@ None - lbl_value1 - Value 1: + btn_add_file + Add file - tooltip_lbl_value1 + tooltip_btn_add_file None @@ -9512,35 +9766,35 @@ None - lbl_geom2 - Geom 2: + lbl_geom1 + Geom 1: - tooltip_lbl_geom2 + tooltip_lbl_geom1 None - lbl_position_id - Position id: + dlg_visit_event_rehab + Rehabilitation arc event - tooltip_lbl_position_id + tooltip_dlg_visit_event_rehab None - lbl_value2 - Value 2: + lbl_files + Files: - tooltip_lbl_value2 + tooltip_lbl_files None - lbl_text - Text: + lbl_value1 + Value 1: - tooltip_lbl_text + tooltip_lbl_value1 None @@ -9559,20 +9813,20 @@ None - btn_next + btn_previous None - tooltip_btn_next + tooltip_btn_previous None - lbl_visit_id - Visit id: + btn_next + None - tooltip_lbl_visit_id - Visit ID + tooltip_btn_next + None btn_close @@ -9591,12 +9845,12 @@ None - btn_previous - None + lbl_visit_id + Visit id: - tooltip_btn_previous - None + tooltip_lbl_visit_id + Visit ID @@ -9606,19 +9860,11 @@ Gallery zoom - lbl_event_id - Event id: - - - tooltip_lbl_event_id - None - - - lbl_img_zoom - lbl_img_zoom + dlg_visit_gallery_zoom + Gallery zoom - tooltip_lbl_img_zoom + tooltip_dlg_visit_gallery_zoom None @@ -9630,27 +9876,35 @@ Visit ID - dlg_visit_gallery_zoom - Gallery zoom + lbl_event_id + Event id: - tooltip_dlg_visit_gallery_zoom + tooltip_lbl_event_id None - btn_slideNext + btn_slidePrevious None - tooltip_btn_slideNext + tooltip_btn_slidePrevious None - btn_slidePrevious + lbl_img_zoom + lbl_img_zoom + + + tooltip_lbl_img_zoom None - tooltip_btn_slidePrevious + btn_slideNext + None + + + tooltip_btn_slideNext None @@ -9661,12 +9915,12 @@ Add picture - lbl_link - Link: + btn_cancel + Cancel - tooltip_lbl_link - Link + tooltip_btn_cancel + None btn_accept @@ -9677,79 +9931,79 @@ Accept - dlg_visit_picture - Add picture + path_doc + ... - tooltip_dlg_visit_picture + tooltip_path_doc None - path_doc - ... + lbl_link + Link: - tooltip_path_doc - None + tooltip_lbl_link + Link - btn_cancel - Cancel + dlg_visit_picture + Add picture - tooltip_btn_cancel + tooltip_dlg_visit_picture None workspace_create - txt_workspace_name - txt_workspace_name + lbl_new_workspace + Workspace name: - tooltip_txt_workspace_name - Workspace name *Required + tooltip_lbl_new_workspace + Workspace name - lbl_new_workspace_descript - Description: + btn_accept + Accept - tooltip_lbl_new_workspace_descript - Workspace description + tooltip_btn_accept + None - btn_cancel - Cancel + btn_update + Update - tooltip_btn_cancel + tooltip_btn_update None - txt_workspace_descript - txt_workspace_descript + lbl_new_workspace_descript + Description: - tooltip_txt_workspace_descript - Use this to describe what the workspace is used for + tooltip_lbl_new_workspace_descript + Workspace description - btn_update - Update + txt_workspace_descript + txt_workspace_descript - tooltip_btn_update - None + tooltip_txt_workspace_descript + Use this to describe what the workspace is used for - btn_accept - Accept + txt_workspace_name + txt_workspace_name - tooltip_btn_accept - None + tooltip_txt_workspace_name + Workspace name *Required btn_toggle_privacy @@ -9760,16 +10014,24 @@ None - lbl_new_workspace - Workspace name: + btn_cancel + Cancel - tooltip_lbl_new_workspace - Workspace name + tooltip_btn_cancel + None workspace_manager + + btn_cancel + Close + + + tooltip_btn_cancel + None + btn_reset Reset workspace @@ -9778,6 +10040,14 @@ tooltip_btn_reset Reset the values of the current workspace + + lbl_workspace_name + Filter by: Workspace name + + + tooltip_lbl_workspace_name + None + btn_delete Delete @@ -9787,20 +10057,20 @@ Delete the selected workspace - lbl_workspace_name - Filter by: Workspace name + btn_create + Create - tooltip_lbl_workspace_name - None + tooltip_btn_create + Create - btn_cancel - Close + txt_name + txt_name - tooltip_btn_cancel - None + tooltip_txt_name + Workspace name lbl_vdefault_workspace @@ -9818,22 +10088,6 @@ tooltip_btn_current Set the current workspace - - txt_name - txt_name - - - tooltip_txt_name - Workspace name - - - btn_create - Create - - - tooltip_btn_create - Create - diff --git a/i18n/giswater_es_ES.qm b/i18n/giswater_es_ES.qm index 57858127f..f115a0cfc 100644 Binary files a/i18n/giswater_es_ES.qm and b/i18n/giswater_es_ES.qm differ diff --git a/i18n/giswater_es_ES.ts b/i18n/giswater_es_ES.ts index 091a84f5b..e1c0a14fb 100644 --- a/i18n/giswater_es_ES.ts +++ b/i18n/giswater_es_ES.ts @@ -80,10 +80,6 @@ GwElementManagerButton Gestor de elementos - - GwEpaWorldButton - Mundo epa - ResultManager Gestor de resultados @@ -132,6 +128,10 @@ 76_text Filtro de lotes + + GwLayerStyleChangeButton + Estilos Giswater + 18_text Conexión con comercial @@ -2298,11 +2298,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información admin_addfields - lbl_query_text - Texto de consulta: + lbl_data_type + Tipo dato: - tooltip_lbl_query_text + tooltip_lbl_data_type None @@ -2314,59 +2314,59 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_form_type - Tipo formulario: + lbl_query_filter + Filtro texto consulta: - tooltip_lbl_form_type + tooltip_lbl_query_filter None - lbl_data_type - Tipo dato: + lbl_num_dec + Número decimales: - tooltip_lbl_data_type + tooltip_lbl_num_dec None - lbl_not_update - No actualizado: + lbl_reload_field + Recargar campo: - tooltip_lbl_not_update + tooltip_lbl_reload_field None - lbl_num_dec - Número decimales: + btn_open + Abrir - tooltip_lbl_num_dec + tooltip_btn_open None - lbl_reload_field - Recargar campo: + lbl_editability + Editabilidad: - tooltip_lbl_reload_field + tooltip_lbl_editability None - lbl_query_filter - Filtro texto consulta: + tab_update + Actualizar - tooltip_lbl_query_filter + tooltip_tab_update None - tab_create - Crear + lbl_form_type + Tipo formulario: - tooltip_tab_create + tooltip_lbl_form_type None @@ -2378,44 +2378,44 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - dlg_main_addfields - Diálogo + lbl_column_id + Nombre columna: - tooltip_dlg_main_addfields + tooltip_lbl_column_id None - lbl_typeahead - Mecanografiar: + tab_delete + Borrar - tooltip_lbl_typeahead + tooltip_tab_delete None - lbl_tooltip - Tooltip: + tab_create + Crear - tooltip_lbl_tooltip + tooltip_tab_create None - tab_delete - Borrar + lbl_widget_type + Tipo de widget: - tooltip_tab_delete + tooltip_lbl_widget_type None - lbl_widgetcontrols - Controles del widget: + lbl_query_text + Texto de consulta: - tooltip_lbl_widgetcontrols - Ejemplo de la configuración {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_lbl_query_text + None btn_cancel @@ -2426,51 +2426,59 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - lbl_field_name - Nombre del campo: + lbl_widget_function + Función del widget: - tooltip_lbl_field_name + tooltip_lbl_widget_function None - lbl_widget_type - Tipo de widget: + lbl_auto_update + Auto actualizable: - tooltip_lbl_widget_type + tooltip_lbl_auto_update None - tab_update - Actualizar + lbl_widgetcontrols + Controles del widget: - tooltip_tab_update + tooltip_lbl_widgetcontrols + Ejemplo de la configuración {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + + + lbl_field_name + Nombre del campo: + + + tooltip_lbl_field_name None - lbl_stylesheet - Hoja de estilo: + lbl_active + Activo: - tooltip_lbl_stylesheet + tooltip_lbl_active None - lbl_placeholder - Marcador de posición + lbl_typeahead + Mecanografiar: - tooltip_lbl_placeholder + tooltip_lbl_typeahead None - lbl_editability - Editabilidad: + lbl_tooltip + Tooltip: - tooltip_lbl_editability + tooltip_lbl_tooltip None @@ -2482,27 +2490,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - lbl_linkedobject - Objeto vinculado: - - - tooltip_lbl_linkedobject - None - - - btn_open - Abrir + lbl_stylesheet + Hoja de estilo: - tooltip_btn_open + tooltip_lbl_stylesheet None - lbl_widget_function - Función del widget: + lbl_placeholder + Marcador de posición - tooltip_lbl_widget_function + tooltip_lbl_placeholder None @@ -2522,83 +2522,83 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_field_length - Longitud campo: + lbl_null_value + Valor nulo: - tooltip_lbl_field_length + tooltip_lbl_null_value None - lbl_action_function - Función de acción: + lbl_editable + Editable: - tooltip_lbl_action_function + tooltip_lbl_editable None - lbl_active - Activo: + lbl_linkedobject + Objeto vinculado: - tooltip_lbl_active + tooltip_lbl_linkedobject None - lbl_column_id - Nombre columna: + lbl_action_function + Función de acción: - tooltip_lbl_column_id + tooltip_lbl_action_function None - lbl_auto_update - Auto actualizable: + dlg_main_addfields + Diálogo - tooltip_lbl_auto_update + tooltip_dlg_main_addfields None - lbl_null_value - Valor nulo: + grb_mandatory + Configuración obligatoria de campos añadidos - tooltip_lbl_null_value + tooltip_grb_mandatory None - lbl_editable - Editable: + lbl_enabled + Habilitado: - tooltip_lbl_editable + tooltip_lbl_enabled None - grb_mandatory - Configuración obligatoria de campos añadidos + lbl_field_length + Longitud campo: - tooltip_grb_mandatory + tooltip_lbl_field_length None - lbl_enabled - Habilitado: + lbl_mandatory + Obligatorio: - tooltip_lbl_enabled + tooltip_lbl_mandatory None - lbl_mandatory - Obligatorio: + lbl_not_update + No actualizado: - tooltip_lbl_mandatory + tooltip_lbl_not_update None @@ -2613,19 +2613,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - lbl_connec - Conexión: + lbl_user_name + Nombre de usuario: - tooltip_lbl_connec + tooltip_lbl_user_name None - lbl_user_name - Nombre de usuario: + dlg_main_credentials + Diálogo - tooltip_lbl_user_name + tooltip_dlg_main_credentials + None + + + lbl_connec + Conexión: + + + tooltip_lbl_connec None @@ -2644,14 +2652,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_password None - - dlg_main_credentials - Diálogo - - - tooltip_dlg_main_credentials - None - admin_dbproject @@ -2664,108 +2664,108 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Nombre de un esquema nuevo. El nombre debe escribirse en minúsculas, utilizando solo letras del alfabeto inglés y sin espacios ni guiones - lbl_locale - Idioma: + lbl_filter + Filtrar SRID: - tooltip_lbl_locale - Idioma del esquema + tooltip_lbl_filter + Identificador de la referencia espacial. Solo se permiten los valores que se muestran en la tabla - btn_accept - Aceptar + lbl_project_type + Tipo de proyecto: - tooltip_btn_accept - Aceptar + tooltip_lbl_project_type + None - dlg_main_dbproject - Crear esquema de proyecto + lbl_descript + Descripción: - tooltip_dlg_main_dbproject + tooltip_lbl_descript None - btn_push_file - ... + rdb_inp + Importar datos INP - tooltip_btn_push_file + tooltip_rdb_inp None - btn_close - Cerrar + lbl_source + Fuente de datos: - tooltip_btn_close - Cerrar + tooltip_lbl_source + None - lbl_filter - Filtrar SRID: + rdb_empty + Sin datos - tooltip_lbl_filter - Identificador de la referencia espacial. Solo se permiten los valores que se muestran en la tabla + tooltip_rdb_empty + None - lbl_project_type - Tipo de proyecto: + rdb_sample_inv + Ejemplo inventario - tooltip_lbl_project_type + tooltip_rdb_sample_inv None - lbl_descript - Descripción: + rdb_sample_full + Ejemplo completo - tooltip_lbl_descript + tooltip_rdb_sample_full None - rdb_inp - Importar datos INP + btn_close + Cerrar - tooltip_rdb_inp - None + tooltip_btn_close + Cerrar - lbl_source - Fuente de datos: + lbl_locale + Idioma: - tooltip_lbl_source - None + tooltip_lbl_locale + Idioma del esquema - rdb_empty - Sin datos + btn_push_file + ... - tooltip_rdb_empty + tooltip_btn_push_file None - rdb_sample_inv - Ejemplo inventario + dlg_main_dbproject + Crear esquema de proyecto - tooltip_rdb_sample_inv + tooltip_dlg_main_dbproject None - rdb_sample_full - Ejemplo completo + btn_accept + Aceptar - tooltip_rdb_sample_full - None + tooltip_btn_accept + Aceptar grb_projectschema @@ -2779,21 +2779,29 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información admin_gisproject - btn_accept - Aceptar + lbl_gis_file + Nombre archivo QGIS: - tooltip_btn_accept - Aceptar + tooltip_lbl_gis_file + None - lbl_gis_file - Nombre archivo QGIS: + btn_gis_folder + ... - tooltip_lbl_gis_file + tooltip_btn_gis_folder None + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + lbl_gis_folder Carpeta: @@ -2818,14 +2826,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_role None - - btn_gis_folder - ... - - - tooltip_btn_gis_folder - None - dlg_main_gisproject Crear proyecto QGIS @@ -2845,22 +2845,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información admin_importinp - - btn_run - Ejecutar - - - tooltip_btn_run - None - - - btn_close - Cerrar - - - tooltip_btn_close - Cerrar - dlg_main_importinp Parámetros de configuración @@ -2878,32 +2862,32 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_config - Configuración + btn_close + Cerrar - tooltip_tab_config - None + tooltip_btn_close + Cerrar - - - admin_projectinfo - lbl_info - Información sobre nuevas actualizaciones + tab_config + Configuración - tooltip_lbl_info + tooltip_tab_config None - dlg_main_projectinfo - Actualizar SQL + btn_run + Ejecutar - tooltip_dlg_main_projectinfo + tooltip_btn_run None + + + admin_projectinfo btn_close Cerrar @@ -2920,17 +2904,25 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_update None - - - admin_qtdialog - btn_cancel - Cancelar + dlg_main_projectinfo + Actualizar SQL - tooltip_btn_cancel - Cancelar + tooltip_dlg_main_projectinfo + None + + + lbl_info + Información sobre nuevas actualizaciones + + + tooltip_lbl_info + None + + + admin_qtdialog lbl_path Ruta UI @@ -2940,12 +2932,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_formname - Nombre formulario: + btn_cancel + Cancelar - tooltip_lbl_formname - None + tooltip_btn_cancel + Cancelar + + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar dlg_main_qtdialog @@ -2963,6 +2963,17 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_path None + + lbl_formname + Nombre formulario: + + + tooltip_lbl_formname + None + + + + admin_renameproj btn_accept Aceptar @@ -2971,9 +2982,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_accept Aceptar - - - admin_renameproj + + dlg_readsq_rename + Renombrar proyecto + + + tooltip_dlg_readsq_rename + None + lbl_rename_copy Por favor, configure un nuevo nombre de proyecto: @@ -2990,12 +3006,15 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_cancel Cancelar + + + admin_sysfields - dlg_readsq_rename - Renombrar proyecto + lbl_placeholder + Marcador de posición: - tooltip_dlg_readsq_rename + tooltip_lbl_placeholder None @@ -3006,15 +3025,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_accept Aceptar - - - admin_sysfields - lbl_column_id - Id columna: + grb_additional_conf + Configuracíon adicional - tooltip_lbl_column_id + tooltip_grb_additional_conf None @@ -3026,168 +3042,168 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + lbl_stylesheet + Hoja de estilo: - tooltip_btn_cancel - Cancelar + tooltip_lbl_stylesheet + None - lbl_widgetcontrols - Controles del widget: + dlg_main_sysfields + Diálogo - tooltip_lbl_widgetcontrols - Ejemplo de configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} + tooltip_dlg_main_sysfields + None - btn_open - Abrir + grb_basic_conf + Configuracíon básica - tooltip_btn_open + tooltip_grb_basic_conf None - lbl_mandatory - Obligatorio: + tab_create + Crear - tooltip_lbl_mandatory + tooltip_tab_create None - lbl_layout_order - Orden de diseño: + btn_open + Abrir - tooltip_lbl_layout_order + tooltip_btn_open None - grb_additional_conf - Configuracíon adicional + lbl_column_id + Id columna: - tooltip_grb_additional_conf + tooltip_lbl_column_id None - lbl_layout_name - Nombre de diseño: + lbl_editability + Editabilidad: - tooltip_lbl_layout_name + tooltip_lbl_editability None - lbl_label - Etiqueta: + lbl_editable + Editable: - tooltip_lbl_label + tooltip_lbl_editable None - lbl_hidden - Oculto: + lbl_enabled + Habilitado: - tooltip_lbl_hidden + tooltip_lbl_enabled None - lbl_form_name - Nombre formulario: + lbl_widgetcontrols + Controles del widget: - tooltip_lbl_form_name - None + tooltip_lbl_widgetcontrols + Ejemplo de configuration keys {"widgetdim": 150,"setMultiline":true,"vdefault": "01-01-2014", "filterSign": ">} - btn_accept - Aceptar + lbl_form_name + Nombre formulario: - tooltip_btn_accept - Aceptar + tooltip_lbl_form_name + None - lbl_enabled - Habilitado: + btn_cancel + Cancelar - tooltip_lbl_enabled - None + tooltip_btn_cancel + Cancelar - lbl_editable - Editable: + lbl_hidden + Oculto: - tooltip_lbl_editable + tooltip_lbl_hidden None - grb_basic_conf - Configuracíon básica + lbl_label + Etiqueta: - tooltip_grb_basic_conf + tooltip_lbl_label None - lbl_tooltip - Tooltip: + lbl_layout_name + Nombre de diseño: - tooltip_lbl_tooltip + tooltip_lbl_layout_name None - tab_create - Crear + lbl_layout_order + Orden de diseño: - tooltip_tab_create + tooltip_lbl_layout_order None - lbl_placeholder - Marcador de posición: + lbl_mandatory + Obligatorio: - tooltip_lbl_placeholder + tooltip_lbl_mandatory None - dlg_main_sysfields - Diálogo + lbl_tooltip + Tooltip: - tooltip_dlg_main_sysfields + tooltip_lbl_tooltip None + + + admin_translation - lbl_editability - Editabilidad: + chk_py_msg + Traducir formularios y mensajes python - tooltip_lbl_editability + tooltip_chk_py_msg None - lbl_stylesheet - Hoja de estilo: + grb_translate_files + Traducir archivos - tooltip_lbl_stylesheet + tooltip_grb_translate_files None - - - admin_translation grb_info_connection Información de la conexión @@ -3205,19 +3221,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - grb_translate_files - Traducir archivos + lbl_scode + Código fuente: - tooltip_grb_translate_files + tooltip_lbl_scode None - lbl_host - Anfitrión: + btn_connection + Probar conexión - tooltip_lbl_host + tooltip_btn_connection None @@ -3229,19 +3245,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_port - Puerto: - - - tooltip_lbl_port - None - - - lbl_scode - Código fuente: + lbl_user + Usuario: - tooltip_lbl_scode + tooltip_lbl_user None @@ -3253,35 +3261,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_user - Usuario: - - - tooltip_lbl_user - None - - - chk_py_msg - Traducir formularios y mensajes python + lbl_host + Anfitrión: - tooltip_chk_py_msg + tooltip_lbl_host None - btn_connection - Probar conexión + lbl_database + Base de datos: - tooltip_btn_connection + tooltip_lbl_database None - lbl_database - Base de datos: + lbl_port + Puerto: - tooltip_lbl_database + tooltip_lbl_port None @@ -3296,83 +3296,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_api_manager - Administrador de Api - - - tooltip_tab_api_manager - None - - - btn_info - Actualizar Esquema - - - tooltip_btn_info - Actualizar version del esquema seleccionado - - - tab_advanced - Avanzado - - - tooltip_tab_advanced - None - - - lbl_use_constrains - Usar restricciones: - - - tooltip_lbl_use_constrains - None - - - btn_translation - Archivos de traduccion - - - tooltip_btn_translation - None - - - lbl_ui_path - Ruta UI: + lbl_system_feature + Nombre del elemento: - tooltip_lbl_ui_path + tooltip_lbl_system_feature None - btn_copy - Copiar - - - tooltip_btn_copy - Copiar el esquema de base de datos seleccionado - - - btn_create_view - Crear + lbl_add_fields_feature + Nombre del elemento: - tooltip_btn_create_view + tooltip_lbl_add_fields_feature None - btn_schema_file_to_db - Archivo a BBDD + btn_import_ui + Importar - tooltip_btn_schema_file_to_db + tooltip_btn_import_ui None - btn_create_field - Crear + tab_fields_manager + Administrador de campos - tooltip_btn_create_field + tooltip_tab_fields_manager None @@ -3391,14 +3343,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_grb_manage_addfields Crear, configurar o eliminar un campo adicional relacionado con un tipo de entidad seleccionada o para todos los tipos de elementos definidos en un proyecto. - - btn_import_ui - Importar - - - tooltip_btn_import_ui - None - grb_schema_update Actualizar @@ -3416,28 +3360,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_constrains - Restricciones + grb_conection + Conexión - tooltip_btn_constrains + tooltip_grb_conection None - grb_conection - Conexión + grb_visit + Visita - tooltip_grb_conection - None + tooltip_grb_visit + Crear, configurar o eliminar la definición de visita relacionada con un tipo de entidad seleccionada o para todos los tipos de elemetnos definidos en un proyecto. - tab_fields_manager - Administrador de campos + grb_load_cf + Cargar archivo personalizado - tooltip_tab_fields_manager - None + tooltip_grb_load_cf + Seleccione una carpeta con archivos .sql que desee ejecutar en un esquema seleccionado grb_files_generator @@ -3447,14 +3391,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_grb_files_generator None - - grb_load_cf - Cargar archivo personalizado - - - tooltip_grb_load_cf - Seleccione una carpeta con archivos .sql que desee ejecutar en un esquema seleccionado - btn_update_field Actualizar @@ -3464,227 +3400,227 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_export_ui - Exportar + btn_custom_select_file + ... - tooltip_btn_export_ui + tooltip_btn_custom_select_file None - btn_custom_select_file - ... + btn_custom_load_file + Cargar archivo - tooltip_btn_custom_select_file + tooltip_btn_custom_load_file None - btn_schema_rename - Renombrar + grb_project_scin + Información del esquema del proyecto - tooltip_btn_schema_rename - Renombrar el esquema de base de datos seleccionado + tooltip_grb_project_scin + None - tab_general - General + grb_manage_ui + Administrar UI - tooltip_tab_general + tooltip_grb_manage_ui None - btn_visit_create - Crear + btn_gis_create + Crear archivo proyecto QGIS - tooltip_btn_visit_create + tooltip_btn_gis_create None - lbl_add_fields_feature - Nombre del elemento: + lbl_connection + Nombre conexión: - tooltip_lbl_add_fields_feature - None + tooltip_lbl_connection + Nombre de la conexión de base de datos definida en QGIS - lbl_child_feature - Nombre del elemento: + btn_create_qgis_template + Plantillas QGIS - tooltip_lbl_child_feature + tooltip_btn_create_qgis_template None - btn_visit_delete - Borrar + lbl_reload_func_sch + Recargar funciones: - tooltip_btn_visit_delete + tooltip_lbl_reload_func_sch None - tab_schema_manager - Administrador de esquema + btn_path + ... - tooltip_tab_schema_manager + tooltip_btn_path None - btn_visit_update - Actualizar + btn_delete + Borrar - tooltip_btn_visit_update - None + tooltip_btn_delete + Eliminar el esquema de base de datos seleccionado - lbl_system_feature - Nombre del elemento: + btn_update_schema + Ejecutar - tooltip_lbl_system_feature + tooltip_btn_update_schema None - btn_gis_create - Crear archivo proyecto QGIS + btn_create_field + Crear - tooltip_btn_gis_create + tooltip_btn_create_field None - lbl_ui_form_name - Nombre del formulario: + btn_create_view + Crear - tooltip_lbl_ui_form_name + tooltip_btn_create_view None - btn_close - Cerrar + btn_schema_file_to_db + Archivo a BBDD - tooltip_btn_close - Cerrar + tooltip_btn_schema_file_to_db + None - lbl_connection - Nombre conexión: + btn_update_sys_field + Actualizar - tooltip_lbl_connection - Nombre de la conexión de base de datos definida en QGIS + tooltip_btn_update_sys_field + None - grb_visit - Visita + btn_delete_field + Borrar - tooltip_grb_visit - Crear, configurar o eliminar la definición de visita relacionada con un tipo de entidad seleccionada o para todos los tipos de elemetnos definidos en un proyecto. + tooltip_btn_delete_field + None - btn_custom_load_file - Cargar archivo + btn_schema_create + Crear esquema proyecto BBDD - tooltip_btn_custom_load_file + tooltip_btn_schema_create None - lbl_name - Nombre: + grb_manage_childviews + Administrar vistas secundarias - tooltip_lbl_name - Nombre del esquema de la base de datos + tooltip_grb_manage_childviews + Recrear vistas secundarias para un tipo de elemento seleccionado o para todos los tipos de elementos definidos en un proyecto - btn_create_qgis_template - Plantillas QGIS + btn_export_ui + Exportar - tooltip_btn_create_qgis_template + tooltip_btn_export_ui None - lbl_reload_func_sch - Recargar funciones: + lbl_child_feature + Nombre del elemento: - tooltip_lbl_reload_func_sch + tooltip_lbl_child_feature None - btn_delete_field - Borrar + tab_schema_manager + Administrador de esquema - tooltip_btn_delete_field + tooltip_tab_schema_manager None - lbl_project_type - Tipo proyecto: + tab_api_manager + Administrador de Api - tooltip_lbl_project_type - Tipo de proyecto giswater + tooltip_tab_api_manager + None - dlg_main - Giswater + tab_advanced + Avanzado - tooltip_dlg_main + tooltip_tab_advanced None - grb_manage_ui - Administrar UI + btn_visit_update + Actualizar - tooltip_grb_manage_ui + tooltip_btn_visit_update None - grb_manage_childviews - Administrar vistas secundarias + btn_visit_delete + Borrar - tooltip_grb_manage_childviews - Recrear vistas secundarias para un tipo de elemento seleccionado o para todos los tipos de elementos definidos en un proyecto + tooltip_btn_visit_delete + None - btn_update_schema - Ejecutar + btn_visit_create + Crear - tooltip_btn_update_schema + tooltip_btn_visit_create None - btn_path - ... + btn_schema_rename + Renombrar - tooltip_btn_path - None + tooltip_btn_schema_rename + Renombrar el esquema de base de datos seleccionado - grb_project_scin - Información del esquema del proyecto + lbl_use_constrains + Usar restricciones: - tooltip_grb_project_scin + tooltip_lbl_use_constrains None @@ -3696,118 +3632,110 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_schema_create - Crear esquema proyecto BBDD + tab_general + General - tooltip_btn_schema_create + tooltip_tab_general None - btn_update_sys_field - Actualizar + lbl_ui_path + Ruta UI: - tooltip_btn_update_sys_field + tooltip_lbl_ui_path None - btn_delete - Borrar + lbl_name + Nombre: - tooltip_btn_delete - Eliminar el esquema de base de datos seleccionado + tooltip_lbl_name + Nombre del esquema de la base de datos - - - admin_visitclass - lbl_class_id - Id clase: + btn_translation + Archivos de traduccion - tooltip_lbl_class_id + tooltip_btn_translation None - btn_ok - Aceptar + lbl_project_type + Tipo proyecto: - tooltip_btn_ok - None + tooltip_lbl_project_type + Tipo de proyecto giswater - lbl_visit_type - Tipo visita: + btn_info + Actualizar Esquema - tooltip_lbl_visit_type - None + tooltip_btn_info + Actualizar version del esquema seleccionado - btn_class_cancel - Cancelar + btn_close + Cerrar - tooltip_btn_class_cancel - None + tooltip_btn_close + Cerrar - btn_class_ok - Aceptar + dlg_main + Giswater - tooltip_btn_class_ok + tooltip_dlg_main None - lbl_feat_type - Tipo de elemento: - - - tooltip_lbl_feat_type - None - - - btn_param_create - Crear + btn_copy + Copiar - tooltip_btn_param_create - None + tooltip_btn_copy + Copiar el esquema de base de datos seleccionado - dlg_main_visitclass - Gestionar clase de visita + btn_constrains + Restricciones - tooltip_dlg_main_visitclass + tooltip_btn_constrains None - lbl_multi_event - Evento múltiple: + lbl_ui_form_name + Nombre del formulario: - tooltip_lbl_multi_event + tooltip_lbl_ui_form_name None + + + admin_visitclass - lbl_param_opt - Opciones parámetro: + lbl_feat_type + Tipo de elemento: - tooltip_lbl_param_opt + tooltip_lbl_feat_type None - lbl_multi_feat - Elemento múltiple: + dlg_main_visitclass + Gestionar clase de visita - tooltip_lbl_multi_feat + tooltip_dlg_main_visitclass None @@ -3819,19 +3747,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + lbl_active + Activo: - tooltip_btn_cancel - Cancelar + tooltip_lbl_active + None - btn_param_update - Actualizar + lbl_class_id + Id clase: - tooltip_btn_param_update + tooltip_lbl_class_id None @@ -3843,11 +3771,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_param_delete - Borrar + lbl_multi_event + Evento múltiple: - tooltip_btn_param_delete + tooltip_lbl_multi_event + None + + + lbl_param_opt + Opciones parámetro: + + + tooltip_lbl_param_opt None @@ -3859,16 +3795,21 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_active - Activo: + lbl_multi_feat + Elemento múltiple: - tooltip_lbl_active + tooltip_lbl_multi_feat + None + + + lbl_visit_type + Tipo visita: + + + tooltip_lbl_visit_type None - - - admin_visitparam btn_cancel Cancelar @@ -3878,51 +3819,62 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - lbl_parameter_type - Tipo parámetro: + btn_class_cancel + Cancelar - tooltip_lbl_parameter_type + tooltip_btn_class_cancel None - lbl_data_type - Tipo dato: + btn_ok + Aceptar - tooltip_lbl_data_type + tooltip_btn_ok None - lbl_form_type - Tipo formulario: + btn_param_create + Crear - tooltip_lbl_form_type + tooltip_btn_param_create None - lbl_default_value - Valor por defecto: + btn_class_ok + Aceptar - tooltip_lbl_default_value + tooltip_btn_class_ok None - lbl_parameter_name - Nombre parámetro: + btn_param_delete + Borrar - tooltip_lbl_parameter_name + tooltip_btn_param_delete None - lbl_descript - Descripción: + btn_param_update + Actualizar - tooltip_lbl_descript + tooltip_btn_param_update + None + + + + admin_visitparam + + lbl_form_type + Tipo formulario: + + + tooltip_lbl_form_type None @@ -3934,19 +3886,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - grb_params - Parametros + lbl_parameter_name + Nombre parámetro: - tooltip_grb_params + tooltip_lbl_parameter_name None - lbl_editable - Editable: + lbl_enabled + Habilitado: - tooltip_lbl_editable + tooltip_lbl_enabled None @@ -3958,27 +3910,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_enabled - Habilitado: + btn_cancel + Cancelar - tooltip_lbl_enabled + tooltip_btn_cancel + Cancelar + + + lbl_editable + Editable: + + + tooltip_lbl_editable None - lbl_widgettype - Tipo de widget: + lbl_descript + Descripción: - tooltip_lbl_widgettype + tooltip_lbl_descript None - btn_ok - Aceptar + lbl_default_value + Valor por defecto: - tooltip_btn_ok + tooltip_lbl_default_value None @@ -3989,6 +3949,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_mandatory None + + lbl_data_type + Tipo dato: + + + tooltip_lbl_data_type + None + + + grb_params + Parametros + + + tooltip_grb_params + None + lbl_query_text Texto de consulta: @@ -3997,6 +3973,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_query_text None + + lbl_parameter_type + Tipo parámetro: + + + tooltip_lbl_parameter_type + None + + + lbl_widgettype + Tipo de widget: + + + tooltip_lbl_widgettype + None + dlg_main_visitparam Gestionar parámetro de visita @@ -4005,6 +3997,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_main_visitparam None + + btn_ok + Aceptar + + + tooltip_btn_ok + None + arc_fusion @@ -4012,14 +4012,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Fusionar arco - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - lbl_enddate Fecha de finalización: @@ -4037,13 +4029,21 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_workcat_id_end - Expdte baja: + tab_loginfo + Info log - tooltip_lbl_workcat_id_end + tooltip_tab_loginfo None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + btn_accept Aceptar @@ -4053,11 +4053,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - tab_loginfo - Info log + lbl_workcat_id_end + Expdte baja: - tooltip_tab_loginfo + tooltip_lbl_workcat_id_end None @@ -4076,108 +4076,108 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Asignación de fugas - tab_infolog + lbl_leaks Fugas - tooltip_tab_infolog + tooltip_lbl_leaks None - lbl_cluster_length - Longitud del cluster (m): + lbl_max_distance + Distancia máxima (m): - tooltip_lbl_cluster_length - Suma máxima de longitudes de tubería dentro de un cluster, en metros. + tooltip_lbl_max_distance + Distancia máxima, en metros, entre la tubería inicial y otras tuberías incluidas en el cluster. - lbl_pipes - Tuberías + lbl_diameter_range + Rango de diámetro: - tooltip_lbl_pipes - None + tooltip_lbl_diameter_range + Rango de diámetros basado en factores de la tubería inicial. - lbl_diameter_range - Rango de diámetro: + lbl_diameter + Filtrar por diámetro: - tooltip_lbl_diameter_range - Rango de diámetros basado en factores de la tubería inicial. + tooltip_lbl_diameter + Utiliza sólo tuberías que coincidan con el rango de diámetros del inicial. - chk_all_leaks - Utilizar todas las fugas + lbl_cluster_length + Longitud del cluster (m): - tooltip_chk_all_leaks - Calcula las fugas por kilómetro y año utilizando todos los datos disponibles, independientemente del parámetro 'años a calcular'. + tooltip_lbl_cluster_length + Suma máxima de longitudes de tubería dentro de un cluster, en metros. - tab_infolog - Info Log + lbl_builtdate + Filtrar por fecha de instalación: - tooltip_tab_infolog - None + tooltip_lbl_builtdate + Utiliza sólo las tuberías que coinciden con el intervalo de fechas de instalación de la inicial. - dlg_assignation - Asignación de fugas + lbl_buffer + Distancia de buffer (m): - tooltip_dlg_assignation - None + tooltip_lbl_buffer + Distancia desde una fuga a la que se seleccionan las tuberías a las que se asigna esa fuga. - lbl_material - Filtrar por material: + lbl_years + Años a calcular: - tooltip_lbl_material - Utiliza sólo tuberías del mismo material que el inicial. + tooltip_lbl_years + Número de años de datos de fugas a tener en cuenta, en función de la antigüedad. - lbl_max_distance - Distancia máxima (m): + chk_all_leaks + Utilizar todas las fugas - tooltip_lbl_max_distance - Distancia máxima, en metros, entre la tubería inicial y otras tuberías incluidas en el cluster. + tooltip_chk_all_leaks + Calcula las fugas por kilómetro y año utilizando todos los datos disponibles, independientemente del parámetro 'años a calcular'. - lbl_builtdate - Filtrar por fecha de instalación: + lbl_builtdate_range + Rango de fechas de construcción (años): - tooltip_lbl_builtdate - Utiliza sólo las tuberías que coinciden con el intervalo de fechas de instalación de la inicial. + tooltip_lbl_builtdate_range + Intervalo de fechas de construcción, en años anteriores y posteriores a la tubería inicial. - lbl_years - Años a calcular: + lbl_pipes + Tuberías - tooltip_lbl_years - Número de años de datos de fugas a tener en cuenta, en función de la antigüedad. + tooltip_lbl_pipes + None - lbl_buffer - Distancia de buffer (m): + tab_infolog + Fugas - tooltip_lbl_buffer - Distancia desde una fuga a la que se seleccionan las tuberías a las que se asigna esa fuga. + tooltip_tab_infolog + None - lbl_builtdate_range - Rango de fechas de construcción (años): + dlg_assignation + Asignación de fugas - tooltip_lbl_builtdate_range - Intervalo de fechas de construcción, en años anteriores y posteriores a la tubería inicial. + tooltip_dlg_assignation + None tab_config @@ -4188,20 +4188,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_leaks - Fugas + lbl_material + Filtrar por material: - tooltip_lbl_leaks - None + tooltip_lbl_material + Utiliza sólo tuberías del mismo material que el inicial. - lbl_diameter - Filtrar por diámetro: + tab_infolog + Info Log - tooltip_lbl_diameter - Utiliza sólo tuberías que coincidan con el rango de diámetros del inicial. + tooltip_tab_infolog + None @@ -4211,12 +4211,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Dibujar circulo CAD - chk_deleete_prev - Eliminar círculos anteriores + btn_accept + Aceptar - tooltip_chk_deleete_prev - None + tooltip_btn_accept + Aceptar btn_cancel @@ -4227,27 +4227,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - lbl_ins_radius - Insertar radio: + dlg_auxcircle + Dibujar circulo CAD - tooltip_lbl_ins_radius + tooltip_dlg_auxcircle None - btn_accept - Aceptar + chk_deleete_prev + Eliminar círculos anteriores - tooltip_btn_accept - Aceptar + tooltip_chk_deleete_prev + None - dlg_auxcircle - Dibujar circulo CAD + lbl_ins_radius + Insertar radio: - tooltip_dlg_auxcircle + tooltip_lbl_ins_radius None @@ -4258,35 +4258,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Añadir punto CAD - dlg_auxpoint - Añadir punto CAD - - - tooltip_dlg_auxpoint - None - - - rb_right - Punto final + lbl_disty + Distancia Y: - tooltip_rb_right + tooltip_lbl_disty None - chk_delete_prev - Eliminar puntos anteriores + btn_accept + Aceptar - tooltip_chk_delete_prev - None + tooltip_btn_accept + Aceptar - lbl_disty - Distancia Y: + rb_right + Punto final - tooltip_lbl_disty + tooltip_rb_right None @@ -4297,6 +4289,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_cancel Cancelar + + chk_delete_prev + Eliminar puntos anteriores + + + tooltip_chk_delete_prev + None + rb_left Punto inicial @@ -4314,12 +4314,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + dlg_auxpoint + Añadir punto CAD - tooltip_btn_accept - Aceptar + tooltip_dlg_auxpoint + None @@ -4329,20 +4329,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Configuración - btn_cancel - Cancelar + tab_featurecat + Elemento de catálogo - tooltip_btn_cancel - Cancelar + tooltip_tab_featurecat + None - btn_accept - Aceptar + tab_addfields + Campos adicionales - tooltip_btn_accept - Aceptar + tooltip_tab_addfields + None tab_admin @@ -4352,6 +4352,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_admin None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + dlg_config Configuración @@ -4361,113 +4369,132 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_basic - Básico + tab_mantype + Man type - tooltip_tab_basic + tooltip_tab_mantype None - tab_addfields - Campos adicionales + tab_basic + Básico - tooltip_tab_addfields + tooltip_tab_basic None - tab_featurecat - Elemento de catálogo + btn_accept + Aceptar - tooltip_tab_featurecat - None + tooltip_btn_accept + Aceptar + + + create_style_group - tab_mantype - Man type + idval + - tooltip_tab_mantype - None + tooltip_idval + Nombre de la categoría - - - crm_trace - lbl_inst - Instrucciones: + lbl_cat_id + ID de categoría: - tooltip_lbl_inst - None + tooltip_lbl_cat_id + - - - csv - btn_file_csv - ... + feature_id + - tooltip_btn_file_csv - None + tooltip_feature_id + ID de categoría - lbl_file - Archivo: + descript + - tooltip_lbl_file - None + tooltip_descript + Descripción - lbl_delimiter - Delimitador: + lbl_cat_name + Nombre de la categoría: - tooltip_lbl_delimiter - None + tooltip_lbl_cat_name + - btn_accept + btn_add Aceptar - tooltip_btn_accept + tooltip_btn_add Aceptar - lbl_set_of_charac - Conjunto de caracteres + lbl_descript + Descripción: - tooltip_lbl_set_of_charac - None + tooltip_lbl_descript + - lbl_import_type - Importar tipo: + lbl_role + Rol: - tooltip_lbl_import_type - None + tooltip_lbl_role + - lbl_import_label - Importar etiqueta: + btn_cancel + Cancelar - tooltip_lbl_import_label + tooltip_btn_cancel + Cancelar + + + sys_role + + + + tooltip_sys_role + Rol que podrá utilizar este estilo + + + + crm_trace + + lbl_inst + Instrucciones: + + + tooltip_lbl_inst None + + + csv - tab_preview - Previsualizar + lbl_ignore_header + Ignorar cabeceras: - tooltip_tab_preview + tooltip_lbl_ignore_header None @@ -4487,19 +4514,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_ignore_header - Ignorar cabeceras: + btn_file_csv + ... - tooltip_lbl_ignore_header + tooltip_btn_file_csv None - dlg_csv2pg - Importar CSV + lbl_delimiter + Delimitador: - tooltip_dlg_csv2pg + tooltip_lbl_delimiter + None + + + lbl_import_type + Importar tipo: + + + tooltip_lbl_import_type + None + + + lbl_import_label + Importar etiqueta: + + + tooltip_lbl_import_label None @@ -4510,6 +4553,46 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_cancel Cancelar + + tab_preview + Previsualizar + + + tooltip_tab_preview + None + + + lbl_file + Archivo: + + + tooltip_lbl_file + None + + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + + + lbl_set_of_charac + Conjunto de caracteres + + + tooltip_lbl_set_of_charac + None + + + dlg_csv2pg + Importar CSV + + + tooltip_dlg_csv2pg + None + dialog_table @@ -4526,12 +4609,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + btn_accept + Aceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Aceptar btn_add_row @@ -4542,12 +4625,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + btn_cancel + Cancelar - tooltip_btn_accept - Aceptar + tooltip_btn_cancel + Cancelar @@ -4573,19 +4656,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - btn_close - Cerrar + dlg_dialog_text + Diálogo - tooltip_btn_close + tooltip_dlg_dialog_text None - dlg_dialog_text - Diálogo + btn_close + Cerrar - tooltip_dlg_dialog_text + tooltip_btn_close None @@ -4603,6 +4686,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_dimensioning None + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + btn_cancel Cancelar @@ -4612,19 +4703,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - grb_other - Otros + grb_symbology + Simbología del círculo - tooltip_grb_other + tooltip_grb_symbology None - grb_symbology - Simbología del círculo + grb_other + Otros - tooltip_grb_symbology + tooltip_grb_other None @@ -4635,14 +4726,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_grb_depth None - - btn_accept - Aceptar - - - tooltip_btn_accept - Aceptar - doc @@ -4651,12 +4734,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Documento - tab_connec - Acometida + btn_path_doc + ... - tooltip_tab_connec - Acometida + tooltip_btn_path_doc + Ruta + + + tab_gully + Sumidero + + + tooltip_tab_gully + Sumidero tab_node @@ -4666,6 +4757,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_node Nodo + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + + + path + Ruta + + + tooltip_path + Completar con alguna ruta de carpeta accesible o ruta web + tab_doc Documento @@ -4675,20 +4782,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + btn_cancel + Cancelar - tooltip_btn_accept - Aceptar + tooltip_btn_cancel + Cancelar - btn_delete + btn_snapping None - tooltip_btn_delete - Eliminar + tooltip_btn_snapping + Seleccionar objeto lbl_doc_type @@ -4699,52 +4806,52 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Tipo documento - lbl_doc_id - Id doc: + tab_arc + Arco - tooltip_lbl_doc_id - Id documento + tooltip_tab_arc + Arco - tab_gully - Sumidero + btn_insert + None - tooltip_tab_gully - Sumidero + tooltip_btn_insert + Insertar - lbl_observ - Observaciones: + lbl_link + Enlace: - tooltip_lbl_observ - None + tooltip_lbl_link + Enlace - dlg_doc - Documento + lbl_doc_name + Nombre doc: - tooltip_dlg_doc - None + tooltip_lbl_doc_name + Nombre documento - _dlg_doc - Documento + lbl_filter_name + Nombre doc: - tooltip__dlg_doc - None + tooltip_lbl_filter_name + Nombre documento - btn_insert - None + dlg_doc + Documento - tooltip_btn_insert - Insertar + tooltip_dlg_doc + None btn_path_url @@ -4755,36 +4862,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Abra el explorador para permitir la selección de la ruta web. También es posible simplemente pegar la ruta en el cuadro de enlace de texto - lbl_link - Enlace: - - - tooltip_lbl_link - Enlace + btn_delete + None - path - Ruta + tooltip_btn_delete + Eliminar - tooltip_path - Completar con alguna ruta de carpeta accesible o ruta web + lbl_observ + Observaciones: - btn_snapping + tooltip_lbl_observ None - tooltip_btn_snapping - Seleccionar objeto - - - tab_arc - Arco + tab_connec + Acometida - tooltip_tab_arc - Arco + tooltip_tab_connec + Acometida tab_rel @@ -4795,20 +4894,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_path_doc - ... - - - tooltip_btn_path_doc - Ruta - - - btn_cancel - Cancelar + _dlg_doc + Documento - tooltip_btn_cancel - Cancelar + tooltip__dlg_doc + None @@ -4817,6 +4908,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Gestor de documentos + + btn_delete + Borrar + + + tooltip_btn_delete + Eliminar + + + lbl_filter_name + Filtrar por: Nombre doc + + + tooltip_lbl_filter_name + None + btn_cancel Cerrar @@ -4833,25 +4940,17 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_doc_manager None - - lbl_doc_id - Filtrar por: Id doc - - - tooltip_lbl_doc_id - None - + + + dscenario_manager btn_delete Borrar tooltip_btn_delete - Eliminar + None - - - dscenario_manager btn_create Crear @@ -4861,20 +4960,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_delete - Borrar - - - tooltip_btn_delete - None - - - btn_update - Actualizar + chk_active + Mostrar inactivos - tooltip_btn_update - None + tooltip_chk_active + Mostrar inactivos btn_duplicate @@ -4885,12 +4976,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - chk_active - Mostrar inactivos + btn_update + Actualizar - tooltip_chk_active - Mostrar inactivos + tooltip_btn_update + None btn_toolbox @@ -4912,80 +5003,8 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información element - title - Elemento - - - lbl_builtdate - Fecha construcción: - - - tooltip_lbl_builtdate - Fecha alta - - - lbl_workcat_id - Expediente alta: - - - tooltip_lbl_workcat_id - Expediente alta - - - lbl_elementcat_id - Id elemento catálogo: - - - tooltip_lbl_elementcat_id - Catálogo - - - btn_add_geom - Añadir geometría - - - tooltip_btn_add_geom - Añadir geometría - - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - - - btn_accept - Aceptar - - - tooltip_btn_accept - Aceptar - - - dlg_element - Elemento - - - tooltip_dlg_element - None - - - lbl_element_id - Id elemento: - - - tooltip_lbl_element_id - None - - - lbl_verified - Verificado: - - - tooltip_lbl_verified - None + title + Elemento tab_gully @@ -5004,37 +5023,61 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_num_element - Número de elemento: + lbl_state + Estado: - tooltip_lbl_num_element + tooltip_lbl_state None - tab_element - Elemento + lbl_code + Código: - tooltip_tab_element - None + tooltip_lbl_code + Código - btn_delete - None + lbl_buildercat_id + Constructor: - tooltip_btn_delete - Eliminar + tooltip_lbl_buildercat_id + Constructor - lbl_state - Estado: + lbl_builtdate + Fecha construcción: - tooltip_lbl_state + tooltip_lbl_builtdate + Fecha alta + + + lbl_element_type + Tipo elemento: + + + tooltip_lbl_element_type + Tipo elemento + + + btn_snapping None + + tooltip_btn_snapping + Seleccionar objeto + + + lbl_link + Enlace: + + + tooltip_lbl_link + Enlace + lbl_observ Observaciones: @@ -5044,12 +5087,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_code - Código: + lbl_expl_id + Explotación: - tooltip_lbl_code - Código + tooltip_lbl_expl_id + None + + + btn_insert + None + + + tooltip_btn_insert + Insertar tab_arc @@ -5059,6 +5110,30 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_arc Arco + + lbl_location_type + Tipo ubicación: + + + tooltip_lbl_location_type + Ubicación + + + dlg_element + Elemento + + + tooltip_dlg_element + None + + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + lbl_ownercat_id Propietario: @@ -5068,20 +5143,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_expl_id - Explotación: + lbl_rotation + Rotación: - tooltip_lbl_expl_id + tooltip_lbl_rotation None - lbl_comment - Comentario: + btn_cancel + Cancelar - tooltip_lbl_comment - None + tooltip_btn_cancel + Cancelar tab_relations @@ -5092,68 +5167,68 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Relaciones - lbl_link - Enlace: + tab_element + Elemento - tooltip_lbl_link - Enlace + tooltip_tab_element + None - lbl_location_type - Tipo ubicación: + lbl_workcat_id_end + Expediente baja: - tooltip_lbl_location_type - Ubicación + tooltip_lbl_workcat_id_end + Expediente baja - lbl_element_type - Tipo elemento: + lbl_num_element + Número de elemento: - tooltip_lbl_element_type - Tipo elemento + tooltip_lbl_num_element + None - lbl_buildercat_id - Constructor: + tab_connec + Acometida - tooltip_lbl_buildercat_id - Constructor + tooltip_tab_connec + Acometida - btn_snapping + btn_delete None - tooltip_btn_snapping - Seleccionar objeto + tooltip_btn_delete + Eliminar - btn_insert - None + lbl_verified + Verificado: - tooltip_btn_insert - Insertar + tooltip_lbl_verified + None - lbl_workcat_id_end - Expediente baja: + lbl_workcat_id + Expediente alta: - tooltip_lbl_workcat_id_end - Expediente baja + tooltip_lbl_workcat_id + Expediente alta - lbl_rotation - Rotación: + btn_add_geom + Añadir geometría - tooltip_lbl_rotation - None + tooltip_btn_add_geom + Añadir geometría tab_node @@ -5164,28 +5239,36 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Nodo - tab_connec - Acometida + lbl_comment + Comentario: - tooltip_tab_connec - Acometida + tooltip_lbl_comment + None - - - element_manager - title - Gestor de elementos + lbl_elementcat_id + Id elemento catálogo: - dlg_element_manager - Gestor de elementos + tooltip_lbl_elementcat_id + Catálogo - tooltip_dlg_element_manager + lbl_element_id + Id elemento: + + + tooltip_lbl_element_id None + + + element_manager + + title + Gestor de elementos + btn_delete Borrar @@ -5202,6 +5285,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_cancel Cancelar + + dlg_element_manager + Gestor de elementos + + + tooltip_dlg_element_manager + None + lbl_element_id Filtrar por: Id elemento @@ -5214,21 +5305,13 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información epa_compare - lbl_selector_date - Selector de fecha: + lbl_time_to_show + Hora (para mostrar): - tooltip_lbl_selector_date + tooltip_lbl_time_to_show None - - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - btn_accept Aceptar @@ -5238,35 +5321,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - lbl_compare_date - Comparar fecha: + lbl_selector_date + Selector de fecha: - tooltip_lbl_compare_date + tooltip_lbl_selector_date None - lbl_compare_time - Comparar hora: + lbl_time_to_compare + Hora (para comparar): - tooltip_lbl_compare_time + tooltip_lbl_time_to_compare None - lbl_time_to_compare - Hora (para comparar): + btn_cancel + Cancelar - tooltip_lbl_time_to_compare + tooltip_btn_cancel + Cancelar + + + dlg_selector + Selector + + + tooltip_dlg_selector None - lbl_selector_time - Hora del selector: + lbl_compare_date + Comparar fecha: - tooltip_lbl_selector_time + tooltip_lbl_compare_date None @@ -5278,11 +5369,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - dlg_selector - Selector + lbl_compare_time + Comparar hora: - tooltip_dlg_selector + tooltip_lbl_compare_time None @@ -5294,27 +5385,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_time - Hora: + tab_result + Resultado - tooltip_tab_time + tooltip_tab_result None - lbl_time_to_show - Hora (para mostrar): + tab_time + Hora: - tooltip_lbl_time_to_show + tooltip_tab_time None - tab_result - Resultado + lbl_selector_time + Hora del selector: - tooltip_tab_result + tooltip_lbl_selector_time None @@ -5341,12 +5432,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_preview - Vista previa + btn_close + Cerrar - tooltip_btn_preview - None + tooltip_btn_close + Cerrar grb_map_options @@ -5357,12 +5448,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_close - Cerrar + btn_print + Imprimir - tooltip_btn_close - Cerrar + tooltip_btn_print + None dlg_fastprint @@ -5373,11 +5464,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_print - Imprimir + btn_preview + Vista previa - tooltip_btn_print + tooltip_btn_preview None @@ -5396,76 +5487,76 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Eliminar - tab_info_log - Info log + tab_del_feature + Borrar elemento - tooltip_tab_info_log + tooltip_tab_del_feature None - btn_relations - Mostrar relaciones del elemento + lbl_feature_type + Tipo de elemento: - tooltip_btn_relations + tooltip_lbl_feature_type None - dlg_feature_delete - Borrar elemento + lbl_feature_id + Id elemento - tooltip_dlg_feature_delete + tooltip_lbl_feature_id None - tab_del_feature - Borrar elemento + tab_info_log + Info log - tooltip_tab_del_feature + tooltip_tab_info_log None - lbl_feature_type - Tipo de elemento: + btn_relations + Mostrar relaciones del elemento - tooltip_lbl_feature_type + tooltip_btn_relations None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar + btn_delete_another + Eliminar otro elemento - btn_snapping + tooltip_btn_delete_another None - tooltip_btn_snapping - Seleccionar objeto + dlg_feature_delete + Borrar elemento - btn_delete_another - Eliminar otro elemento + tooltip_dlg_feature_delete + None - tooltip_btn_delete_another + btn_snapping None - lbl_feature_id - Id elemento + tooltip_btn_snapping + Seleccionar objeto - tooltip_lbl_feature_id - None + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar @@ -5475,19 +5566,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Dar de baja - tab_connec - Acometida + lbl_workcat_id_end + Expdte baja: - tooltip_tab_connec + tooltip_lbl_workcat_id_end None - tab_workcat - Expediente + tab_gully + Sumidero - tooltip_tab_workcat + tooltip_tab_gully None @@ -5499,12 +5590,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_gully - Sumidero + btn_cancel + Cancelar - tooltip_tab_gully - None + tooltip_btn_cancel + Cancelar lbl_enddate @@ -5515,53 +5606,45 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_delete - None + dlg_feature_end + Dar de baja - tooltip_btn_delete - Eliminar + tooltip_dlg_feature_end + None - lbl_workcat_date - Fecha expdte: + tab_workcat + Expediente - tooltip_lbl_workcat_date + tooltip_tab_workcat None - tab_node - Nodo + lbl_state_type + Tipo estado final: - tooltip_tab_node + tooltip_lbl_state_type None - tab_arc - Arco - - - tooltip_tab_arc + btn_insert None - lbl_workcat_id_end - Expdte baja: + tooltip_btn_insert + Insertar - tooltip_lbl_workcat_id_end + btn_new_workcat None - btn_snapping + tooltip_btn_new_workcat None - - tooltip_btn_snapping - Seleccionar objeto - tab_elem Elemento @@ -5570,14 +5653,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_elem None - - btn_insert - None - - - tooltip_btn_insert - Insertar - tab_relations Relaciones @@ -5587,44 +5662,60 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Relaciones - lbl_state_type - Tipo estado final: + btn_snapping + None - tooltip_lbl_state_type + tooltip_btn_snapping + Seleccionar objeto + + + tab_connec + Acometida + + + tooltip_tab_connec None - btn_cancel - Cancelar + btn_accept + Aceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Aceptar - btn_new_workcat + tab_arc + Arco + + + tooltip_tab_arc None - tooltip_btn_new_workcat + lbl_workcat_date + Fecha expdte: + + + tooltip_lbl_workcat_date None - dlg_feature_end - Dar de baja + tab_node + Nodo - tooltip_dlg_feature_end + tooltip_tab_node None - btn_accept - Aceptar + btn_delete + None - tooltip_btn_accept - Aceptar + tooltip_btn_delete + Eliminar @@ -5633,6 +5724,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Elementos desconectados de tramo + + lbl_info + Lista de elementos que quedarán desconectados cuando los tramos seleccionados sean dados de baja: + + + tooltip_lbl_info + None + dlg_feature_end_connec Elementos desconectados de tramo @@ -5665,14 +5764,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_accept Aceptar - - lbl_info - Lista de elementos que quedarán desconectados cuando los tramos seleccionados sean dados de baja: - - - tooltip_lbl_info - None - go2epa @@ -5681,68 +5772,68 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Ir a Epa - lbl_result_name - Nombre resultado: + btn_hs_ds + Selector - tooltip_lbl_result_name + tooltip_btn_hs_ds None - chk_recurrent - Usar llamadas iterativas + tab_loginfo + Info log - tooltip_chk_recurrent + tooltip_tab_loginfo None - lbl_counter - lbl_counter + chk_only_check + Usar la geometría de red resultante - tooltip_lbl_counter + tooltip_chk_only_check None - grb_file_manager - Administrador de archivos + btn_cancel + Cancelar - tooltip_grb_file_manager - None + tooltip_btn_cancel + Cancelar - btn_accept - Aceptar + lbl_inp_file + Archivo INP: - tooltip_btn_accept - Aceptar + tooltip_lbl_inp_file + None - grb_process_options - Opciones de proceso + btn_file_inp + ... - tooltip_grb_process_options + tooltip_btn_file_inp None - btn_hs_ds - Selector + btn_file_rpt + ... - tooltip_btn_hs_ds + tooltip_btn_file_rpt None - btn_cancel - Cancelar + btn_accept + Aceptar - tooltip_btn_cancel - Cancelar + tooltip_btn_accept + Aceptar btn_options @@ -5753,83 +5844,83 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - chk_import_result - Importar resultado + lbl_result_name + Nombre resultado: - tooltip_chk_import_result + tooltip_lbl_result_name None - chk_only_check - Usar la geometría de red resultante + lbl_counter + lbl_counter - tooltip_chk_only_check + tooltip_lbl_counter None - chk_exec - Ejecutar software EPA + lbl_rpt_file + Archivo RPT: - tooltip_chk_exec + tooltip_lbl_rpt_file None - chk_export - Exportar INP + chk_recurrent + Usar llamadas iterativas - tooltip_chk_export + tooltip_chk_recurrent None - tab_loginfo - Info log + dlg_go2epa + Ir a Epa - tooltip_tab_loginfo + tooltip_dlg_go2epa None - lbl_rpt_file - Archivo RPT: + chk_import_result + Importar resultado - tooltip_lbl_rpt_file + tooltip_chk_import_result None - lbl_inp_file - Archivo INP: + chk_exec + Ejecutar software EPA - tooltip_lbl_inp_file + tooltip_chk_exec None - btn_file_rpt - ... + chk_export + Exportar INP - tooltip_btn_file_rpt + tooltip_chk_export None - dlg_go2epa - Ir a Epa + grb_process_options + Opciones de proceso - tooltip_dlg_go2epa + tooltip_grb_process_options None - btn_file_inp - ... + grb_file_manager + Administrador de archivos - tooltip_btn_file_inp + tooltip_grb_file_manager None @@ -5847,14 +5938,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Gestor de resultados Epa - - btn_set_corporate - Alternar corporativo - - - tooltip_btn_set_corporate - None - btn_close Cerrar @@ -5863,6 +5946,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_close Cerrar + + btn_set_corporate + Alternar corporativo + + + tooltip_btn_set_corporate + None + lbl_result_id Filtrar por: Id resultado @@ -5895,11 +5986,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Go2Epa - opciones - tab_other - Otros + dlg_go2epa_options + Go2Epa - opciones - tooltip_tab_other + tooltip_dlg_go2epa_options None @@ -5910,6 +6001,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_inp None + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + btn_cancel Cancelar @@ -5919,21 +6018,13 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - dlg_go2epa_options - Go2Epa - opciones + tab_other + Otros - tooltip_dlg_go2epa_options + tooltip_tab_other None - - btn_accept - Aceptar - - - tooltip_btn_accept - Aceptar - info_catalog @@ -5973,11 +6064,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Hidrómetro - lbl_hydrometer_id - Id hidrómetro: + btn_accept + Aceptar - tooltip_lbl_hydrometer_id + tooltip_btn_accept + Aceptar + + + dlg_info_crmvalue + Hidrómetro + + + tooltip_dlg_info_crmvalue None @@ -5989,21 +6088,13 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cerrar - dlg_info_crmvalue - Hidrómetro + lbl_hydrometer_id + Id hidrómetro: - tooltip_dlg_info_crmvalue + tooltip_lbl_hydrometer_id None - - btn_accept - Aceptar - - - tooltip_btn_accept - Aceptar - info_crossect @@ -6012,53 +6103,45 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Sección - lbl_cost_b_right - lbl_cost_b_right + lbl_cost_area + lbl_cost_area - tooltip_lbl_cost_b_right + tooltip_lbl_cost_area None - lbl_cost_exc - lbl_cost_exc + lbl_section_image + lbl_section_image - tooltip_lbl_cost_exc + tooltip_lbl_section_image None - lbl_cost_bulk - lbl_cost_bulk + lbl_cost_fill + lbl_cost_fill - tooltip_lbl_cost_bulk + tooltip_lbl_cost_fill None - lbl_cost_y_param - lbl_cost_y_param + lbl_cost_bulk + lbl_cost_bulk - tooltip_lbl_cost_y_param + tooltip_lbl_cost_bulk None - lbl_section_image - lbl_section_image + lbl_cost_exc + lbl_cost_exc - tooltip_lbl_section_image + tooltip_lbl_cost_exc None - - btn_close - Cerrar - - - tooltip_btn_close - Cerrar - dlg_info_crossect Sección @@ -6068,51 +6151,59 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_cost_excav - lbl_cost_excav + lbl_cost_trench + lbl_cost_trench - tooltip_lbl_cost_excav + tooltip_lbl_cost_trench None - lbl_cost_area - lbl_cost_area + lbl_cost_b_left + lbl_cost_b_left - tooltip_lbl_cost_area + tooltip_lbl_cost_b_left None - lbl_cost_fill - lbl_cost_fill + lbl_cost_width + lbl_cost_width - tooltip_lbl_cost_fill + tooltip_lbl_cost_width None - lbl_cost_width - lbl_cost_width + lbl_cost_excav + lbl_cost_excav - tooltip_lbl_cost_width + tooltip_lbl_cost_excav None - lbl_cost_b_left - lbl_cost_b_left + btn_close + Cerrar - tooltip_lbl_cost_b_left + tooltip_btn_close + Cerrar + + + lbl_cost_b_right + lbl_cost_b_right + + + tooltip_lbl_cost_b_right None - lbl_cost_trench - lbl_cost_trench + lbl_cost_y_param + lbl_cost_y_param - tooltip_lbl_cost_trench + tooltip_lbl_cost_y_param None @@ -6122,6 +6213,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Información característica + + tab_relations + Relaciones + + + tooltip_tab_relations + Relaciones + btn_open_element None @@ -6131,19 +6230,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_to_doc - Hasta: + btn_open_gallery + None - tooltip_lbl_to_doc + tooltip_btn_open_gallery None - lbl_from_doc - Desde: + btn_open_visit_doc + None - tooltip_lbl_from_doc + tooltip_btn_open_visit_doc None @@ -6155,43 +6254,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_insert - None + lbl_to_om + Hasta: - tooltip_btn_insert - Insertar + tooltip_lbl_to_om + None - tab_om - OM + lbl_param_type_om + Tipo parámetro: - tooltip_tab_om + tooltip_lbl_param_type_om None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar + lbl_parameter_om + Parámetro: - btn_doc_delete + tooltip_lbl_parameter_om None - tooltip_btn_doc_delete - Borrar documento + lbl_from_om + Desde: - btn_new_element + tooltip_lbl_from_om None - tooltip_btn_new_element + lbl_type_doc + Tipo: + + + tooltip_lbl_type_doc None @@ -6203,92 +6302,84 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_documents - Documentos + tab_om + OM - tooltip_tab_documents + tooltip_tab_om None - btn_delete + btn_doc_new None - tooltip_btn_delete - Eliminar - - - btn_accept - Aceptar + tooltip_btn_doc_new + Crear nuevo documento - tooltip_btn_accept - Aceptar + lbl_cat_per_filter + Cat de filtro de periodo: - tab_connections - Conexiones + tooltip_lbl_cat_per_filter + None - tooltip_tab_connections + btn_open_doc None - lbl_upstream_features - Elemento aguas arriba: + tooltip_btn_open_doc + Abrir documento - tooltip_lbl_upstream_features - None + lbl_downstream_features + Elemento aguas abajo: - lbl_doc_id - Id doc: + tooltip_lbl_downstream_features + None - tooltip_lbl_doc_id + btn_insert None - tab_plan - Plan + tooltip_btn_insert + Insertar - tooltip_tab_plan + btn_doc_delete None - lbl_downstream_features - Elemento aguas abajo: - - - tooltip_lbl_downstream_features - None + tooltip_btn_doc_delete + Borrar documento - tab_data - Datos + tab_hydrometer + Hidrómetro - tooltip_tab_data + tooltip_tab_hydrometer None - tab_relations - Relaciones + tab_hydrometer_val + Valores hidrómetro - tooltip_tab_relations - Relaciones + tooltip_tab_hydrometer_val + None - lbl_cat_per_filter - Cat de filtro de periodo: + btn_accept + Aceptar - tooltip_lbl_cat_per_filter - None + tooltip_btn_accept + Aceptar btn_doc_insert @@ -6299,67 +6390,67 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Insertar documento - btn_doc_new - None + tab_data + Datos - tooltip_btn_doc_new - Crear nuevo documento + tooltip_tab_data + None - lbl_type_doc - Tipo: + tab_plan + Plan - tooltip_lbl_type_doc + tooltip_tab_plan None - lbl_from_om - Desde: + btn_cancel + Cancelar - tooltip_lbl_from_om - None + tooltip_btn_cancel + Cancelar - lbl_parameter_om - Parámetro: + btn_open_visit + None - tooltip_lbl_parameter_om + tooltip_btn_open_visit None - lbl_param_type_om - Tipo parámetro: + tab_documents + Documentos - tooltip_lbl_param_type_om + tooltip_tab_documents None - lbl_to_om - Hasta: + btn_open_visit_event + None - tooltip_lbl_to_om + tooltip_btn_open_visit_event None - btn_open_visit_doc - None + lbl_doc_id + Id doc: - tooltip_btn_open_visit_doc + tooltip_lbl_doc_id None - btn_open_gallery - None + dlg_info_feature + Información característica - tooltip_btn_open_gallery + tooltip_dlg_info_feature None @@ -6371,43 +6462,51 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_open_doc - None + lbl_upstream_features + Elemento aguas arriba: - tooltip_btn_open_doc - Abrir documento + tooltip_lbl_upstream_features + None - tab_hydrometer - Hidrómetro + btn_apply + Aplicar - tooltip_tab_hydrometer - None + tooltip_btn_apply + Aplicar - tab_hydrometer_val - Valores hidrómetro + lbl_from_doc + Desde: - tooltip_tab_hydrometer_val + tooltip_lbl_from_doc None - btn_open_visit + btn_delete None - tooltip_btn_open_visit + tooltip_btn_delete + Eliminar + + + lbl_to_doc + Hasta: + + + tooltip_lbl_to_doc None - btn_open_visit_event + btn_new_element None - tooltip_btn_open_visit_event + tooltip_btn_new_element None @@ -6419,11 +6518,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - dlg_info_feature - Información característica + tab_connections + Conexiones - tooltip_dlg_info_feature + tooltip_tab_connections None @@ -6433,6 +6532,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Información básica + + btn_close + Cerrar + + + tooltip_btn_close + Cerrar + + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar + dlg_info_generic Información básica @@ -6441,6 +6556,29 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_info_generic None + + + info_workcat + + title + Nuevo expdte + + + dlg_info_workcat + Nuevo expdte + + + tooltip_dlg_info_workcat + None + + + lbl_workid_key_1 + Clave 1 id trabajo: + + + tooltip_lbl_workid_key_1 + None + btn_accept Aceptar @@ -6449,21 +6587,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_accept Aceptar - - btn_close - Cerrar - - - tooltip_btn_close - Cerrar - - - - info_workcat - - title - Nuevo expdte - lbl_link Enlace: @@ -6481,12 +6604,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + lbl_builtdate + Fecha construcción: - tooltip_btn_accept - Aceptar + tooltip_lbl_builtdate + None lbl_descript @@ -6504,30 +6627,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_cancel Cancelar - - lbl_workid_key_1 - Clave 1 id trabajo: - - - tooltip_lbl_workid_key_1 - None - - - dlg_info_workcat - Nuevo expdte - - - tooltip_dlg_info_workcat - None - - - lbl_builtdate - Fecha construcción: - - - tooltip_lbl_builtdate - None - main_dbproject @@ -6555,35 +6654,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información mapzone_manager - chk_active - Mostrar inactivos - - - tooltip_chk_active - Mostrar inactivos + btn_toggle_active + Alternar activo - - - mincut - title - Polígono de corte + tooltip_btn_toggle_active + Alternar activo - lbl_chlorine - Cloro: + btn_update + Actualizar - tooltip_lbl_chlorine - None + tooltip_btn_update + Actualizar - grb_location - Localización + lbl_mapzone_name + Filtrar por: Nombre de mapzone - tooltip_grb_location - None + tooltip_lbl_mapzone_name + Filtrar por: Nombre de mapzone btn_cancel @@ -6594,108 +6686,115 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - lbl_cause - Causa: + btn_delete + Eliminar - tooltip_lbl_cause - None + tooltip_btn_delete + Eliminar - lbl_dist_from_plot - Distancia fachada: + chk_show_all + Mostrar todas las mapzones - tooltip_lbl_dist_from_plot - None + tooltip_chk_show_all + Mostrar todas las mapzones - lbl_state - Estado: + btn_execute + - tooltip_lbl_state - None + tooltip_btn_execute + Ejecutar el proceso de análisis de mapzone - lbl_start - Desde: + btn_create + Crear - tooltip_lbl_start - None + tooltip_btn_create + Crear - lbl_msg - Sin resultados + btn_config + Configurar - tooltip_lbl_msg - None + tooltip_btn_config + Configurar - lbl_end - Hasta: + chk_active + Mostrar inactivos - tooltip_lbl_end - None + tooltip_chk_active + Mostrar inactivos + + + mincut - lbl_descript_pd - Descripción: + title + Polígono de corte - tooltip_lbl_descript_pd + lbl_dist_from_plot + Distancia fachada: + + + tooltip_lbl_dist_from_plot None - btn_accept - Aceptar + btn_end + Fin - tooltip_btn_accept - Aceptar + tooltip_btn_end + None - lbl_turbidity - Turbiedad: + grb_location + Localización - tooltip_lbl_turbidity + tooltip_grb_location None - lbl_id - Id: + lbl_type + Tipo: - tooltip_lbl_id + tooltip_lbl_type None - lbl_descript_rd - Descripción: + btn_start + Inicio - tooltip_lbl_descript_rd + tooltip_btn_start None - lbl_work_order - Orden de trabajo: + lbl_id + Id: - tooltip_lbl_work_order + tooltip_lbl_id None - chk_use_planified - Usar red planificada + btn_accept + Aceptar - tooltip_chk_use_planified - None + tooltip_btn_accept + Aceptar lbl_exec_appropriate @@ -6721,6 +6820,38 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_exec_enddate None + + lbl_exec_user + Usuario ejecutivo: + + + tooltip_lbl_exec_user + None + + + chk_use_planified + Usar red planificada + + + tooltip_chk_use_planified + None + + + lbl_descript_pd + Descripción: + + + tooltip_lbl_descript_pd + None + + + lbl_end + Hasta: + + + tooltip_lbl_end + None + grb_plan_forecasted_dates Fechas previstas @@ -6730,11 +6861,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - grb_plan_details - Detalles + lbl_start + Desde: - tooltip_grb_plan_details + tooltip_lbl_start + None + + + lbl_state + Estado: + + + tooltip_lbl_state + None + + + lbl_msg + Sin resultados + + + tooltip_lbl_msg + None + + + lbl_work_order + Orden de trabajo: + + + tooltip_lbl_work_order + None + + + lbl_chlorine + Cloro: + + + tooltip_lbl_chlorine None @@ -6746,28 +6909,36 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_start - Inicio + lbl_cause + Causa: - tooltip_btn_start + tooltip_lbl_cause None - lbl_exec_user - Usuario ejecutivo: + grb_plan_details + Detalles - tooltip_lbl_exec_user + tooltip_grb_plan_details None - lbl_type - Tipo: + lbl_descript_rd + Descripción: + + + tooltip_lbl_descript_rd + None + + + btn_cancel + Cancelar - tooltip_lbl_type - None + tooltip_btn_cancel + Cancelar lbl_received_date @@ -6802,11 +6973,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_end - Fin + lbl_turbidity + Turbiedad: - tooltip_btn_end + tooltip_lbl_turbidity None @@ -6817,20 +6988,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Compositor polígono de corte - lbl_template - Modelo: + btn_ok + Abrir - tooltip_lbl_template + tooltip_btn_ok None - btn_cancel - Cancelar + dlg_mincut_composer + Compositor polígono de corte - tooltip_btn_cancel - Cancelar + tooltip_dlg_mincut_composer + None + + + lbl_template + Modelo: + + + tooltip_lbl_template + None lbl_title @@ -6849,20 +7028,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - dlg_mincut_composer - Compositor polígono de corte - - - tooltip_dlg_mincut_composer - None - - - btn_ok - Abrir + btn_cancel + Cancelar - tooltip_btn_ok - None + tooltip_btn_cancel + Cancelar @@ -6880,36 +7051,36 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + btn_snapping + None - tooltip_btn_accept - Aceptar + tooltip_btn_snapping + Seleccionar objeto - btn_insert - None + lbl_search + Buscar por 'customer code': - tooltip_btn_insert - Insertar + tooltip_lbl_search + None - btn_snapping + btn_insert None - tooltip_btn_snapping - Seleccionar objeto + tooltip_btn_insert + Insertar - lbl_search - Buscar por 'customer code': + btn_accept + Aceptar - tooltip_lbl_search - None + tooltip_btn_accept + Aceptar btn_delete @@ -6927,21 +7098,37 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Finalizar polígono de corte - lbl_executed - Ejecutado por: + btn_accept + Aceptar - tooltip_lbl_executed + tooltip_btn_accept + Aceptar + + + lbl_end_date + Hasta: + + + tooltip_lbl_end_date None - lbl_number - Número: + grb_close_mincut + Cerrar mincut - tooltip_lbl_number + tooltip_grb_close_mincut None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + Cancelar + dlg_mincut_end Finalizar polígono de corte @@ -6951,11 +7138,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_end_date - Hasta: + lbl_work_order + Orden de trabajo: - tooltip_lbl_end_date + tooltip_lbl_work_order None @@ -6966,14 +7153,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_street None - - btn_set_real_location - Establecer ubicación real - - - tooltip_btn_set_real_location - None - lbl_start_hour Hora de inicio: @@ -6983,19 +7162,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + lbl_number + Número: - tooltip_btn_cancel - Cancelar + tooltip_lbl_number + None - grb_close_mincut - Cerrar mincut + lbl_municipality + Municipio: - tooltip_grb_close_mincut + tooltip_lbl_municipality None @@ -7007,43 +7186,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_municipality - Municipio: + lbl_end_hour + Hora de finalización: - tooltip_lbl_municipality + tooltip_lbl_end_hour None - lbl_mincut - Id: + lbl_executed + Ejecutado por: - tooltip_lbl_mincut + tooltip_lbl_executed None - btn_accept - Aceptar - - - tooltip_btn_accept - Aceptar - - - lbl_end_hour - Hora de finalización: + lbl_mincut + Id: - tooltip_lbl_end_hour + tooltip_lbl_mincut None - lbl_work_order - Orden de trabajo: + btn_set_real_location + Establecer ubicación real - tooltip_lbl_work_order + tooltip_btn_set_real_location None @@ -7054,43 +7225,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Hidrómetro polígono de corte - lbl_hcc - Código cliente hidrómetro: - - - tooltip_lbl_hcc - None + btn_accept + Aceptar - lbl_ccc - Conectar código cliente: + tooltip_btn_accept + Aceptar - tooltip_lbl_ccc - None + dlg_mincut_hydrometer + Hidrómetro polígono de corte - btn_insert + tooltip_dlg_mincut_hydrometer None - tooltip_btn_insert - Insertar - - - btn_accept - Aceptar + lbl_ccc + Conectar código cliente: - tooltip_btn_accept - Aceptar + tooltip_lbl_ccc + None - dlg_mincut_hydrometer - Hidrómetro polígono de corte + lbl_hcc + Código cliente hidrómetro: - tooltip_dlg_mincut_hydrometer + tooltip_lbl_hcc None @@ -7101,6 +7264,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_delete Eliminar + + btn_insert + None + + + tooltip_btn_insert + Insertar + mincut_manager @@ -7109,35 +7280,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Gestión polígono de corte - btn_next_days - Próximos días + btn_selector_mincut + None - tooltip_btn_next_days + tooltip_btn_selector_mincut None - lbl_exploitation - Explotación: + btn_cancel + Cerrar - tooltip_lbl_exploitation - None + tooltip_btn_cancel + - dlg_mincut_manager - Gestión polígono de corte + btn_delete + Borrar - tooltip_dlg_mincut_manager - None + tooltip_btn_delete + Eliminar - lbl_mincut_type - Tipo: + lbl_filter + Filtrar por: - tooltip_lbl_mincut_type + tooltip_lbl_filter None @@ -7149,27 +7320,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_streetaxis - Calle: - - - tooltip_lbl_streetaxis - None - - - btn_delete - Borrar + lbl_date_from + Desde: - tooltip_btn_delete - Eliminar + tooltip_lbl_date_from + None - lbl_date_from - Desde: + lbl_exploitation + Explotación: - tooltip_lbl_date_from + tooltip_lbl_exploitation None @@ -7181,27 +7344,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_filter - Filtrar por: + btn_next_days + Próximos días - tooltip_lbl_filter + tooltip_btn_next_days None - btn_cancel - Cerrar + btn_notify + Enviar sms - tooltip_btn_cancel - + tooltip_btn_notify + None - btn_selector_mincut - None + lbl_mincut_type + Tipo: - tooltip_btn_selector_mincut + tooltip_lbl_mincut_type None @@ -7221,47 +7384,47 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_notify - Enviar sms + dlg_mincut_manager + Gestión polígono de corte - tooltip_btn_notify + tooltip_dlg_mincut_manager None - - - netscenario_manager - btn_update_netscenario - Current netscenario + lbl_streetaxis + Calle: - tooltip_btn_update_netscenario - Current netscenario + tooltip_lbl_streetaxis + None + + + netscenario_manager - chk_active - Mostrar inactivos + btn_create + Crear - tooltip_chk_active - Mostrar inactivos + tooltip_btn_create + Crear - btn_duplicate - Duplicar + lbl_netscenario_name + Filter by: Netscenario name - tooltip_btn_duplicate - Duplicar + tooltip_lbl_netscenario_name + Filter by: Netscenario name - btn_cancel - Cerrar + btn_update + Actualizar - tooltip_btn_cancel - Cerrar + tooltip_btn_update + Actualizar btn_delete @@ -7272,36 +7435,36 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Borrar - btn_update - Actualizar + btn_cancel + Cerrar - tooltip_btn_update - Actualizar + tooltip_btn_cancel + Cerrar - lbl_netscenario_name - Filter by: Netscenario name + btn_toc + - tooltip_lbl_netscenario_name - Filter by: Netscenario name + tooltip_btn_toc + Cargar capa Giswater - btn_create - Crear + btn_update_netscenario + Current netscenario - tooltip_btn_create - Crear + tooltip_btn_update_netscenario + Current netscenario - btn_execute - + btn_duplicate + Duplicar - tooltip_btn_execute - Execute mapzones analysis + tooltip_btn_duplicate + Duplicar btn_toggle_active @@ -7312,12 +7475,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Toggle active - btn_toc + btn_execute - tooltip_btn_toc - Cargar capa Giswater + tooltip_btn_execute + Execute mapzones analysis + + + chk_active + Mostrar inactivos + + + tooltip_chk_active + Mostrar inactivos @@ -7343,11 +7514,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - dlg_nodetype_change - Cambiar tipo nodo + lbl_node_type + Tipo nodo actual: - tooltip_dlg_nodetype_change + tooltip_lbl_node_type None @@ -7359,19 +7530,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_node_type - Tipo nodo actual: + lbl_catalog_id + Id catálogo: - tooltip_lbl_node_type + tooltip_lbl_catalog_id None - lbl_catalog_id - Id catálogo: + dlg_nodetype_change + Cambiar tipo nodo - tooltip_lbl_catalog_id + tooltip_dlg_nodetype_change None @@ -7389,36 +7560,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información plan_psector - lbl_text2 - Text 2: + lbl_priority + Prioridad: - tooltip_lbl_text2 + tooltip_lbl_priority None - lbl_type - Tipo: - - - tooltip_lbl_type + btn_snapping None - lbl_workcat_id - Expediente: + tooltip_btn_snapping + Seleccionar elements - tooltip_lbl_workcat_id + btn_set_to_arc None - btn_remove - Borrar - - - tooltip_btn_remove - + tooltip_btn_set_to_arc + Establecer arc_id (solo ARC exit_type) lbl_vat @@ -7429,99 +7592,131 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_total_nodes - Total nodos: + lbl_general_expenses + Gastos generales - tooltip_lbl_total_nodes + tooltip_lbl_general_expenses None - lbl_total_arcs - Total tramos: + btn_rapports + Generar informe - tooltip_lbl_total_arcs - None + tooltip_btn_rapports + - lbl_text3 - Text 3: + btn_select + Seleccionar - tooltip_lbl_text3 - None + tooltip_btn_select + - btn_set_to_arc + btn_select + Seleccionar + + + tooltip_btn_select + + + + btn_select_arc None - tooltip_btn_set_to_arc - Establecer arc_id (solo ARC exit_type) + tooltip_btn_select_arc + Reemplazar en servicio para arcos planificados - lbl_scale - Escala: + lbl_other_expenses + Otros gastos - tooltip_lbl_scale + tooltip_lbl_other_expenses None - lbl_status - Estado: + lbl_num_value + Número valor: - tooltip_lbl_status + tooltip_lbl_num_value None - lbl_rotation - Rotación: + lbl_text6 + Text 6: - tooltip_lbl_rotation + tooltip_lbl_text6 None - lbl_text1 - Text 1: + lbl_text5 + Text 5: - tooltip_lbl_text1 + tooltip_lbl_text5 None - lbl_parent_id - Id relacionado: + lbl_text4 + Text 4: - tooltip_lbl_parent_id + tooltip_lbl_text4 None - btn_insert + lbl_text3 + Text 3: + + + tooltip_lbl_text3 None - tooltip_btn_insert - Insertar + btn_arc_fusion + None + + + tooltip_btn_arc_fusion + Fusionar arcos planificados + + + lbl_scale + Escala: + + + tooltip_lbl_scale + None + + + lbl_rotation + Rotación: + + + tooltip_lbl_rotation + None - btn_cancel - Cancelar + btn_remove + Borrar - tooltip_btn_cancel + tooltip_btn_remove - lbl_exploitation - Explotación: + btn_cancel + Cancelar - tooltip_lbl_exploitation + tooltip_btn_cancel @@ -7533,28 +7728,28 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información - lbl_observation - Observaciones: + lbl_atlas_id + Atlas id: - tooltip_lbl_observation - None + tooltip_lbl_atlas_id + - lbl_descript - Descripción: + lbl_parent_id + Id relacionado: - tooltip_lbl_descript - + tooltip_lbl_parent_id + None - active - Activo + lbl_observation + Observaciones: - tooltip_active - + tooltip_lbl_observation + None lbl_name @@ -7565,156 +7760,132 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - chk_enable_all - Habilitar todo (visualizar estado obsoleto en elementos relacionados a psector) - - - tooltip_chk_enable_all - - - - grb_map_details - Detalles de mapa - - - tooltip_grb_map_details - - - - btn_rapports - Generar informe - - - tooltip_btn_rapports - + lbl_ext_code + Código externo: - btn_select - Seleccionar + tooltip_lbl_ext_code + None - tooltip_btn_select - + lbl_workcat_id + Expediente: - btn_select - Seleccionar + tooltip_lbl_workcat_id + None - tooltip_btn_select - + lbl_type + Tipo: - lbl_atlas_id - Atlas id: + tooltip_lbl_type + None - tooltip_lbl_atlas_id - + lbl_text2 + Text 2: - btn_select_arc + tooltip_lbl_text2 None - tooltip_btn_select_arc - Reemplazar en servicio para arcos planificados + lbl_text1 + Text 1: - btn_delete + tooltip_lbl_text1 None - tooltip_btn_delete - Eliminar - - - lbl_ext_code - Código externo: + lbl_status + Estado: - tooltip_lbl_ext_code + tooltip_lbl_status None - lbl_other_expenses - Otros gastos + lbl_psector_id + Psector id: - tooltip_lbl_other_expenses + tooltip_lbl_psector_id None - btn_arc_fusion + btn_insert None - tooltip_btn_arc_fusion - Fusionar arcos planificados + tooltip_btn_insert + Insertar - lbl_general_expenses - Gastos generales + grb_map_details + Detalles de mapa - tooltip_lbl_general_expenses - None + tooltip_grb_map_details + - lbl_priority - Prioridad: + chk_enable_all + Habilitar todo (visualizar estado obsoleto en elementos relacionados a psector) - tooltip_lbl_priority - None + tooltip_chk_enable_all + - btn_snapping - None + active + Activo - tooltip_btn_snapping - Seleccionar elements + tooltip_active + - lbl_psector_id - Psector id: + lbl_descript + Descripción: - tooltip_lbl_psector_id - None + tooltip_lbl_descript + - lbl_num_value - Número valor: + lbl_exploitation + Explotación: - tooltip_lbl_num_value - None + tooltip_lbl_exploitation + - lbl_text6 - Text 6: + lbl_total_nodes + Total nodos: - tooltip_lbl_text6 + tooltip_lbl_total_nodes None - lbl_text5 - Text 5: + lbl_total_arcs + Total tramos: - tooltip_lbl_text5 + tooltip_lbl_total_arcs None - lbl_text4 - Text 4: + btn_delete + None - tooltip_lbl_text4 - None + tooltip_btn_delete + Eliminar @@ -7724,12 +7895,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Gestión resultados precios - btn_cancel - Cerrar + lbl_result_id + Filtrar por: - tooltip_btn_cancel - Cancelar + tooltip_lbl_result_id + None btn_delete @@ -7740,27 +7911,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Eliminar - dlg_price_manager - Gestión resultados precios + btn_update_result + Resultado actual - tooltip_dlg_price_manager + tooltip_btn_update_result None - btn_update_result - Resultado actual + btn_cancel + Cerrar - tooltip_btn_update_result - None + tooltip_btn_cancel + Cancelar - lbl_result_id - Filtrar por: + dlg_price_manager + Gestión resultados precios - tooltip_lbl_result_id + tooltip_dlg_price_manager None @@ -7771,99 +7942,99 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cálculo de prioridad - dlg_priority - Cálculo de prioridad + lbl_expl_selection + Explotación: - tooltip_dlg_priority + tooltip_lbl_expl_selection None - tab_engine - Motor de cálculo + tab_material + Material - tooltip_tab_engine + tooltip_tab_material None - tab_infolog - Info Log + tab_catalog + Catálogo - tooltip_tab_infolog + tooltip_tab_catalog None - lbl_result_id - Nombre del resultado: + lbl_budget + Presupuesto anual: - tooltip_lbl_result_id + tooltip_lbl_budget None - grb_global - Parámetros de cálculo + btn_cancel + Cancelar - tooltip_grb_global + tooltip_btn_cancel None - tab_calc - Cálculo + tab_infolog + Info Log - tooltip_tab_calc + tooltip_tab_infolog None - tab_material - Material + btn_snapping + None - tooltip_tab_material - None + tooltip_btn_snapping + Seleccione los elementos en la vista de mapa - lbl_budget - Presupuesto anual: + btn_calc + Calcular - tooltip_lbl_budget + tooltip_btn_calc None - - btn_cancel - Cancelar + + lbl_result_id + Nombre del resultado: - tooltip_btn_cancel + tooltip_lbl_result_id None - btn_snapping - None + lbl_presszone + Zona de presión: - tooltip_btn_snapping - Seleccione los elementos en la vista de mapa + tooltip_lbl_presszone + None - lbl_material - Material: + tab_engine + Motor de cálculo - tooltip_lbl_material + tooltip_tab_engine None - lbl_expl_selection - Explotación: + grb_selection + Selección de elementos - tooltip_lbl_expl_selection + tooltip_grb_selection None @@ -7875,59 +8046,59 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_calc - Calcular + lbl_dnom + Diámetro: - tooltip_btn_calc + tooltip_lbl_dnom None - lbl_year - Año horizonte: + lbl_status + Estado: - tooltip_lbl_year + tooltip_lbl_status None - grb_selection - Selección de elementos + dlg_priority + Cálculo de prioridad - tooltip_grb_selection + tooltip_dlg_priority None - lbl_presszone - Zona de presión: + lbl_year + Año horizonte: - tooltip_lbl_presszone + tooltip_lbl_year None - lbl_dnom - Diámetro: + grb_global + Parámetros de cálculo - tooltip_lbl_dnom + tooltip_grb_global None - lbl_status - Estado: + tab_calc + Cálculo - tooltip_lbl_status + tooltip_tab_calc None - tab_catalog - Catálogo + lbl_material + Material: - tooltip_tab_catalog + tooltip_lbl_material None @@ -7937,14 +8108,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Gestor de resultados - - lbl_info - Infomación: - - - tooltip_lbl_info - None - lbl_status Estado: @@ -7954,35 +8117,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - dlg_priority_manager - Gestor de resultados + btn_edit + Editar - tooltip_dlg_priority_manager + tooltip_btn_edit None - lbl_filter - Filtrar por: Nombre del resultado + btn_status + Cambiar estado - tooltip_lbl_filter + tooltip_btn_status None - btn_status - Cambiar estado + btn_duplicate + Duplicar - tooltip_btn_status + tooltip_btn_duplicate None - btn_delete - Eliminar + lbl_expl + Explotación: - tooltip_btn_delete + tooltip_lbl_expl None @@ -7994,35 +8157,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_expl - Explotación: + lbl_type + Tipo: - tooltip_lbl_expl + tooltip_lbl_type None - lbl_type - Tipo: + lbl_info + Infomación: - tooltip_lbl_type + tooltip_lbl_info None - btn_duplicate - Duplicar + lbl_filter + Filtrar por: Nombre del resultado - tooltip_btn_duplicate + tooltip_lbl_filter None - btn_edit - Editar + btn_delete + Eliminar - tooltip_btn_edit + tooltip_btn_delete + None + + + dlg_priority_manager + Gestor de resultados + + + tooltip_dlg_priority_manager None @@ -8033,27 +8204,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Dibujar perfil - btn_delete_additional_point - None + btn_add_end_point + Agregar punto final - tooltip_btn_delete_additional_point + tooltip_btn_add_end_point None - lbl_title - Título: + btn_add_additional_point + Agregar punto adicional - tooltip_lbl_title + tooltip_btn_add_additional_point None - lbl_end_point - Punto final: + lbl_profile_id + Id perfil: - tooltip_lbl_end_point + tooltip_lbl_profile_id None @@ -8065,75 +8236,75 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_add_end_point - Agregar punto final + btn_save_profile + Guardar perfil - tooltip_btn_add_end_point + tooltip_btn_save_profile None - btn_add_additional_point - Agregar punto adicional + lbl_template + Modelo: - tooltip_btn_add_additional_point + tooltip_lbl_template None - lbl_profile_id - Id perfil: + lbl_end_point + Punto final: - tooltip_lbl_profile_id + tooltip_lbl_end_point None - btn_load_profile - Cargar perfil + lbl_rotation + Rotación: - tooltip_btn_load_profile + tooltip_lbl_rotation None - lbl_additional_point - Punto adicional: + lbl_title + Título: - tooltip_lbl_additional_point + tooltip_lbl_title None - dlg_profile + btn_draw Dibujar perfil - tooltip_dlg_profile + tooltip_btn_draw None - lbl_path - Ruta: + btn_clear_profile + Limpiar perfil - tooltip_lbl_path + tooltip_btn_clear_profile None - btn_close - Cerrar + btn_update_path + ... - tooltip_btn_close - Cerrar + tooltip_btn_update_path + None - btn_add_start_point - Agregar punto inicial + lbl_sv + Escala vertical: - tooltip_btn_add_start_point + tooltip_lbl_sv None @@ -8145,19 +8316,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_sv - Escala vertical: + btn_add_start_point + Agregar punto inicial - tooltip_lbl_sv + tooltip_btn_add_start_point None - btn_draw - Dibujar perfil + btn_delete_additional_point + None - tooltip_btn_draw + tooltip_btn_delete_additional_point None @@ -8169,43 +8340,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_rotation - Rotación: + btn_load_profile + Cargar perfil - tooltip_lbl_rotation + tooltip_btn_load_profile None - lbl_template - Modelo: + dlg_profile + Dibujar perfil - tooltip_lbl_template + tooltip_dlg_profile None - btn_save_profile - Guardar perfil + btn_close + Cerrar - tooltip_btn_save_profile - None + tooltip_btn_close + Cerrar - btn_update_path - ... + lbl_additional_point + Punto adicional: - tooltip_btn_update_path + tooltip_lbl_additional_point None - btn_clear_profile - Limpiar perfil + lbl_path + Ruta: - tooltip_btn_clear_profile + tooltip_lbl_path None @@ -8260,15 +8431,7 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_accept - Aceptar - - - dlg_project_check - Verificar proyecto - - - tooltip_dlg_project_check - None + Aceptar tab_databaselog @@ -8278,6 +8441,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_databaselog None + + dlg_project_check + Verificar proyecto + + + tooltip_dlg_project_check + None + psector_duplicate @@ -8286,27 +8457,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Duplicar sector - tab_info_log - Info log + tab_duplicate_psector + Duplicar sector - tooltip_tab_info_log + tooltip_tab_duplicate_psector None - btn_cancel - Cancelar - - - tooltip_btn_cancel - Cancelar - - - lbl_duplicate_psector - Duplicar sector: + tab_info_log + Info log - tooltip_lbl_duplicate_psector + tooltip_tab_info_log None @@ -8318,12 +8481,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_accept - Aceptar + lbl_duplicate_psector + Duplicar sector: - tooltip_btn_accept - Aceptar + tooltip_lbl_duplicate_psector + None dlg_psector_duplicate @@ -8334,12 +8497,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_duplicate_psector - Duplicar sector + btn_cancel + Cancelar - tooltip_tab_duplicate_psector - None + tooltip_btn_cancel + Cancelar + + + btn_accept + Aceptar + + + tooltip_btn_accept + Aceptar @@ -8348,14 +8519,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Gestor de sector - - btn_update_psector - Sector actual - - - tooltip_btn_update_psector - None - btn_merge Fusionar @@ -8365,35 +8528,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Para fusionar varios sectores en uno, tienes que seleccionarlos usando Ctrl y pulsar este botón - btn_toggle_active - Alterar activo + lbl_psector_name + Filtrar por: - tooltip_btn_toggle_active + tooltip_lbl_psector_name None - btn_delete - Borrar + btn_duplicate + Duplicar - tooltip_btn_delete - Eliminar + tooltip_btn_duplicate + None - lbl_psector_name - Filtrar por: + btn_update_psector + Sector actual - tooltip_lbl_psector_name + tooltip_btn_update_psector None - btn_duplicate - Duplicar + btn_delete + Borrar - tooltip_btn_duplicate + tooltip_btn_delete + Eliminar + + + dlg_psector_manager + Gestor de sector + + + tooltip_dlg_psector_manager None @@ -8405,20 +8576,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Mostrar inactivos - btn_cancel - Cerrar + btn_toggle_active + Alterar activo - tooltip_btn_cancel - Cancelar + tooltip_btn_toggle_active + None - dlg_psector_manager - Gestor de sector + btn_cancel + Cerrar - tooltip_dlg_psector_manager - None + tooltip_btn_cancel + Cancelar @@ -8428,19 +8599,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Generador de informes - lbl_template - Modelo: + lbl_detail_csv + Archivo CSV detalle: - tooltip_lbl_template + tooltip_lbl_detail_csv None - btn_ok - Crear + btn_path + ... - tooltip_btn_ok + tooltip_btn_path + None + + + lbl_composer_disabled + Compositor deshabilitado + + + tooltip_lbl_composer_disabled None @@ -8452,27 +8631,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + grb_rapport + Reporte - tooltip_btn_cancel - Cancelar + tooltip_grb_rapport + None - lbl_composer_disabled - Compositor deshabilitado + btn_cancel + Cancelar - tooltip_lbl_composer_disabled - None + tooltip_btn_cancel + Cancelar - btn_path - ... + lbl_prices_list + Archivo CSV lista precios: - tooltip_btn_path + tooltip_lbl_prices_list None @@ -8484,27 +8663,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - grb_rapport - Reporte - - - tooltip_grb_rapport - None - - - lbl_prices_list - Archivo CSV lista precios: + btn_ok + Crear - tooltip_lbl_prices_list + tooltip_btn_ok None - lbl_detail_csv - Archivo CSV detalle: + lbl_template + Modelo: - tooltip_lbl_detail_csv + tooltip_lbl_template None @@ -8515,11 +8686,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Selector de resultados - lbl_descript_compare - Descripción: + tab_result + Resultado - tooltip_lbl_descript_compare + tooltip_tab_result + None + + + btn_cancel + Cancelar + + + tooltip_btn_cancel None @@ -8531,11 +8710,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_cancel - Cancelar + dlg_result_selector + Selector de resultados - tooltip_btn_cancel + tooltip_dlg_result_selector None @@ -8547,11 +8726,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - tab_result - Resultado + lbl_descript_compare + Descripción: - tooltip_tab_result + tooltip_lbl_descript_compare None @@ -8570,14 +8749,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_result_compare None - - dlg_result_selector - Selector de resultados - - - tooltip_dlg_result_selector - None - search @@ -8585,6 +8756,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Búsqueda + + dlg_search + Búsqueda + + + tooltip_dlg_search + None + lbl_msg Sin resultados @@ -8601,14 +8780,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_Check all None - - dlg_search - Búsqueda - - - tooltip_dlg_search - None - search_workcat @@ -8617,11 +8788,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Buscar expdte - btn_path - ... + lbl_end + Filtrar por: - tooltip_btn_path + tooltip_lbl_end None @@ -8633,19 +8804,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cerrar - lbl_destination_path - Ruta de destino: - - - tooltip_lbl_destination_path - None - - - tab_doc - Documentos + btn_path + ... - tooltip_tab_doc + tooltip_btn_path None @@ -8665,11 +8828,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_state1 - Activar + lbl_init + Filtrar por: - tooltip_btn_state1 + tooltip_lbl_init + None + + + tab_doc + Documentos + + + tooltip_tab_doc None @@ -8681,43 +8852,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_init - Filtrar por: + lbl_feat_ini + Elementos dados de alta - tooltip_lbl_init + tooltip_lbl_feat_ini None - btn_state0 - Activar + dlg_search_workcat + Buscar expdte - tooltip_btn_state0 + tooltip_dlg_search_workcat None - tab_ended - Dado de baja + btn_state1 + Activar - tooltip_tab_ended + tooltip_btn_state1 None - dlg_search_workcat - Buscar expdte + btn_export_to_csv + Exportar a CSV - tooltip_dlg_search_workcat + tooltip_btn_export_to_csv None - btn_export_to_csv - Exportar a CSV + tab_ended + Dado de baja - tooltip_btn_export_to_csv + tooltip_tab_ended None @@ -8729,19 +8900,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_feat_ini - Elementos dados de alta + btn_state0 + Activar - tooltip_lbl_feat_ini + tooltip_btn_state0 None - lbl_end - Filtrar por: + lbl_destination_path + Ruta de destino: - tooltip_lbl_end + tooltip_lbl_destination_path None @@ -8752,12 +8923,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Selector - btn_close - Cerrar + dlg_selector + Selector - tooltip_btn_close - Cerrar + tooltip_dlg_selector + None btn_close @@ -8768,12 +8939,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cerrar - dlg_selector - Selector + btn_close + Cerrar - tooltip_dlg_selector - None + tooltip_btn_close + Cerrar @@ -8782,6 +8953,22 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Selector de estado + + btn_accept + Aceptar + + + tooltip_btn_accept + None + + + lbl_new_status + Nuevo estado: + + + tooltip_lbl_new_status + None + dlg_status_selector Selector de estado @@ -8790,6 +8977,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_status_selector None + + btn_cancel + Cancelar + + + tooltip_btn_cancel + None + lbl_result_main Está cambiando el estado del siguiente resultado: @@ -8798,29 +8993,88 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_result_main None + + + style_manager btn_cancel - Cancelar + Cerrar tooltip_btn_cancel - None + Cerrar - lbl_new_status - Nuevo estado: + btn_updateStyle + Actualizar estilo - tooltip_lbl_new_status - None + tooltip_btn_updateStyle + Actualiza el estilo de la capa seleccionada con el estilo de la capa correspondiente en el proyecto - btn_accept - Aceptar + btn_deleteGroup + - tooltip_btn_accept - None + tooltip_btn_deleteGroup + Eliminar categoría seleccionada + + + btn_addGroup + + + + tooltip_btn_addGroup + Añadir nueva categoría + + + btn_deleteStyle + Eliminar estilo + + + tooltip_btn_deleteStyle + Elimina un estilo de la categoría + + + stylegroup + + + + tooltip_stylegroup + Todas tus categorías de estilos + + + style_name + + + + tooltip_style_name + Introduce el nombre de la capa para filtrar + + + lbl_filter_name + Filtrar por: Nombre de la capa + + + tooltip_lbl_filter_name + + + + btn_refreshAll + Actualizar todo + + + tooltip_btn_refreshAll + Recarga los estilos cargados en el proyecto + + + btn_addStyle + Añadir estilo + + + tooltip_btn_addStyle + Añadir una capa a la categoría seleccionada @@ -8837,14 +9091,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_run None - - btn_close - Cerrar - - - tooltip_btn_close - Cerrar - btn_cancel Cancelar @@ -8854,19 +9100,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Cancelar - tab_loginfo - Info log + dlg_toolbox + Caja de herramientas - tooltip_tab_loginfo + tooltip_dlg_toolbox None - dlg_toolbox - Caja de herramientas + tab_loginfo + Info log - tooltip_dlg_toolbox + tooltip_tab_loginfo None @@ -8877,6 +9123,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_tab_config None + + btn_close + Cerrar + + + tooltip_btn_close + Cerrar + toolbox_docker @@ -8900,107 +9154,107 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Visita - btn_doc_new - None + tab_event + Evento - tooltip_btn_doc_new - Crear nuevo documento + tooltip_tab_event + None - tab_relations - Relaciones + btn_open_doc + None - tooltip_tab_relations - Relaciones + tooltip_btn_open_doc + Abrir documento - lbl_feature_type - Tipo de elemento: + btn_add_geom + Añadir geometría - tooltip_lbl_feature_type + tooltip_btn_add_geom None - btn_doc_insert - None + lbl_info + Información: - tooltip_btn_doc_insert - Insertar documento + tooltip_lbl_info + None - btn_cancel - Cancelar + lbl_feature_type + Tipo de elemento: - tooltip_btn_cancel - Cancelar + tooltip_lbl_feature_type + None - tab_document - Documento + lbl_end_date + Hasta: - tooltip_tab_document + tooltip_lbl_end_date None - lbl_code - Código: - - - tooltip_lbl_code + btn_doc_new None - tab_event - Evento + tooltip_btn_doc_new + Crear nuevo documento - tooltip_tab_event + btn_doc_delete None - lbl_user_name - Nombre de usuario: + tooltip_btn_doc_delete + Borrar documento - tooltip_lbl_user_name + btn_event_delete + Borrar evento + + + tooltip_btn_event_delete None - lbl_start_date - Desde: + btn_event_insert + Insertar evento - tooltip_lbl_start_date + tooltip_btn_event_insert None - btn_accept - Aceptar + btn_event_update + Actualizar evento - tooltip_btn_accept - Aceptar + tooltip_btn_event_update + None - lbl_status - Estado: + btn_feature_delete + None - tooltip_lbl_status + tooltip_btn_feature_delete None - lbl_descript - Descripción: + btn_feature_insert + None - tooltip_lbl_descript + tooltip_btn_feature_insert None @@ -9012,116 +9266,116 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_feature_insert - None + lbl_descript + Descripción: - tooltip_btn_feature_insert + tooltip_lbl_descript None - lbl_id - Id: + lbl_status + Estado: - tooltip_lbl_id + tooltip_lbl_status None - dlg_visit - Visita + lbl_start_date + Desde: - tooltip_dlg_visit + tooltip_lbl_start_date None - btn_open_doc - None + tab_relations + Relaciones - tooltip_btn_open_doc - Abrir documento + tooltip_tab_relations + Relaciones - tab_visit - Visita + lbl_code + Código: - tooltip_tab_visit + tooltip_lbl_code None - btn_feature_delete - None + tab_document + Documento - tooltip_btn_feature_delete + tooltip_tab_document None - btn_event_update - Actualizar evento + lbl_user_name + Nombre de usuario: - tooltip_btn_event_update + tooltip_lbl_user_name None - btn_event_insert - Insertar evento + lbl_visitcat_id + Visit cat id: - tooltip_btn_event_insert + tooltip_lbl_visitcat_id None - btn_event_delete - Borrar evento + btn_cancel + Cancelar - tooltip_btn_event_delete - None + tooltip_btn_cancel + Cancelar - lbl_info - Información: + btn_doc_insert + None - tooltip_lbl_info - None + tooltip_btn_doc_insert + Insertar documento - btn_doc_delete - None + lbl_id + Id: - tooltip_btn_doc_delete - Borrar documento + tooltip_lbl_id + None - lbl_visitcat_id - Visit cat id: + dlg_visit + Visita - tooltip_lbl_visitcat_id + tooltip_dlg_visit None - lbl_end_date - Hasta: + tab_visit + Visita - tooltip_lbl_end_date + tooltip_tab_visit None - btn_add_geom - Añadir geometría + btn_accept + Aceptar - tooltip_btn_add_geom - None + tooltip_btn_accept + Aceptar @@ -9130,6 +9384,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información title Cargar documentos + + dlg_visit_document + Cargar documentos + + + tooltip_dlg_visit_document + None + lbl_visit_id Id visita: @@ -9146,14 +9408,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_open None - - dlg_visit_document - Cargar documentos - - - tooltip_dlg_visit_document - None - visit_event @@ -9162,27 +9416,27 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Evento estándar de arco - lbl_parameter_id - Id parámetro: + btn_delete_file + Borrar archivo - tooltip_lbl_parameter_id + tooltip_btn_delete_file None - lbl_files - Archivos: + dlg_visit_event + Evento estándar de arco - tooltip_lbl_files + tooltip_dlg_visit_event None - lbl_position_id - Id posición: + lbl_value + Valor: - tooltip_lbl_position_id + tooltip_lbl_value None @@ -9194,43 +9448,43 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_delete_file - Borrar archivo + lbl_parameter_id + Id parámetro: - tooltip_btn_delete_file + tooltip_lbl_parameter_id None - lbl_text - Texto: + lbl_position_value + Valor posición: - tooltip_lbl_text + tooltip_lbl_position_value None - lbl_position_value - Valor posición: + lbl_position_id + Id posición: - tooltip_lbl_position_value + tooltip_lbl_position_id None - dlg_visit_event - Evento estándar de arco + lbl_files + Archivos: - tooltip_dlg_visit_event + tooltip_lbl_files None - lbl_value - Valor: + lbl_text + Texto: - tooltip_lbl_value + tooltip_lbl_text None @@ -9241,27 +9495,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Evento - lbl_geom3 - Geom 3: - - - tooltip_lbl_geom3 - None - - - lbl_value2 - Valor 2: + btn_close + Cerrar - tooltip_lbl_value2 - None + tooltip_btn_close + Cerrar - lbl_value - Valor: + lbl_is_last + Último valor: - tooltip_lbl_value + tooltip_lbl_is_last None @@ -9273,27 +9519,19 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_is_last - Último valor: - - - tooltip_lbl_is_last - None - - - lbl_index_val - Factor de peso: + lbl_value + Valor: - tooltip_lbl_index_val + tooltip_lbl_value None - lbl_xcoord - Coordenada X: + lbl_value2 + Valor 2: - tooltip_lbl_xcoord + tooltip_lbl_value2 None @@ -9304,14 +9542,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_dlg_visit_event_full None - - tab_info - Información - - - tooltip_tab_info - None - lbl_value1 Valor 1: @@ -9321,12 +9551,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_ycoord - Coordenada Y: + lbl_visit_id + Id visita: - tooltip_lbl_ycoord - None + tooltip_lbl_visit_id + Visita ID lbl_parameter_id @@ -9368,14 +9598,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_files None - - lbl_visit_id - Id visita: - - - tooltip_lbl_visit_id - Visita ID - lbl_event_code Código evento: @@ -9416,6 +9638,30 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_lbl_id None + + lbl_geom3 + Geom 3: + + + tooltip_lbl_geom3 + None + + + lbl_ycoord + Coordenada Y: + + + tooltip_lbl_ycoord + None + + + lbl_xcoord + Coordenada X: + + + tooltip_lbl_xcoord + None + lbl_text Texto: @@ -9425,12 +9671,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_close - Cerrar + tab_info + Información - tooltip_btn_close - Cerrar + tooltip_tab_info + None + + + lbl_index_val + Factor de peso: + + + tooltip_lbl_index_val + None @@ -9440,51 +9694,51 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Evento rehabilitación de arco - dlg_visit_event_rehab - Evento rehabilitación de arco + btn_delete_file + Borrar archivo - tooltip_dlg_visit_event_rehab + tooltip_btn_delete_file None - btn_delete_file - Borrar archivo + lbl_value2 + Valor 2: - tooltip_btn_delete_file + tooltip_lbl_value2 None - lbl_parameter_id - Id parámetro: + lbl_text + Texto: - tooltip_lbl_parameter_id + tooltip_lbl_text None - lbl_files - Archivos: + lbl_position_id + Id posición: - tooltip_lbl_files + tooltip_lbl_position_id None - lbl_geom1 - Geom 1: + lbl_parameter_id + Id parámetro: - tooltip_lbl_geom1 + tooltip_lbl_parameter_id None - btn_add_file - Añadir archivo + lbl_geom2 + Geom 2: - tooltip_btn_add_file + tooltip_lbl_geom2 None @@ -9496,11 +9750,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_value1 - Valor 1: + btn_add_file + Añadir archivo - tooltip_lbl_value1 + tooltip_btn_add_file None @@ -9512,35 +9766,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_geom2 - Geom 2: + lbl_geom1 + Geom 1: - tooltip_lbl_geom2 + tooltip_lbl_geom1 None - lbl_position_id - Id posición: + dlg_visit_event_rehab + Evento rehabilitación de arco - tooltip_lbl_position_id + tooltip_dlg_visit_event_rehab None - lbl_value2 - Valor 2: + lbl_files + Archivos: - tooltip_lbl_value2 + tooltip_lbl_files None - lbl_text - Texto: + lbl_value1 + Valor 1: - tooltip_lbl_text + tooltip_lbl_value1 None @@ -9559,20 +9813,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_next + btn_previous None - tooltip_btn_next + tooltip_btn_previous None - lbl_visit_id - Id visita: + btn_next + None - tooltip_lbl_visit_id - Visita ID + tooltip_btn_next + None btn_close @@ -9591,12 +9845,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - btn_previous - None + lbl_visit_id + Id visita: - tooltip_btn_previous - None + tooltip_lbl_visit_id + Visita ID @@ -9606,19 +9860,11 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Zum de la galería - lbl_event_id - Id evento: - - - tooltip_lbl_event_id - None - - - lbl_img_zoom - lbl_img_zoom + dlg_visit_gallery_zoom + Zum de la galería - tooltip_lbl_img_zoom + tooltip_dlg_visit_gallery_zoom None @@ -9630,27 +9876,35 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Visita ID - dlg_visit_gallery_zoom - Zum de la galería + lbl_event_id + Id evento: - tooltip_dlg_visit_gallery_zoom + tooltip_lbl_event_id None - btn_slideNext + btn_slidePrevious None - tooltip_btn_slideNext + tooltip_btn_slidePrevious None - btn_slidePrevious + lbl_img_zoom + lbl_img_zoom + + + tooltip_lbl_img_zoom None - tooltip_btn_slidePrevious + btn_slideNext + None + + + tooltip_btn_slideNext None @@ -9661,12 +9915,12 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Añadir foto - lbl_link - Enlace: + btn_cancel + Cancelar - tooltip_lbl_link - Enlace + tooltip_btn_cancel + Cancelar btn_accept @@ -9677,79 +9931,79 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Aceptar - dlg_visit_picture - Añadir foto + path_doc + ... - tooltip_dlg_visit_picture + tooltip_path_doc None - path_doc - ... + lbl_link + Enlace: - tooltip_path_doc - None + tooltip_lbl_link + Enlace - btn_cancel - Cancelar + dlg_visit_picture + Añadir foto - tooltip_btn_cancel - Cancelar + tooltip_dlg_visit_picture + None workspace_create - txt_workspace_name - txt_workspace_name + lbl_new_workspace + Nombre: - tooltip_txt_workspace_name - Nombre del nuevo espacio de trabajo *Obligatorio + tooltip_lbl_new_workspace + Nombre del nuevo espacio de trabajo - lbl_new_workspace_descript - Descripción: + btn_accept + Aceptar - tooltip_lbl_new_workspace_descript - Descripción del nuevo espacio de trabajo + tooltip_btn_accept + None - btn_cancel - Cancelar + btn_update + Actualizar - tooltip_btn_cancel + tooltip_btn_update None - txt_workspace_descript - txt_workspace_descript + lbl_new_workspace_descript + Descripción: - tooltip_txt_workspace_descript - Utiliza este campo para describir el espacio de trabajo + tooltip_lbl_new_workspace_descript + Descripción del nuevo espacio de trabajo - btn_update - Actualizar + txt_workspace_descript + txt_workspace_descript - tooltip_btn_update - None + tooltip_txt_workspace_descript + Utiliza este campo para describir el espacio de trabajo - btn_accept - Aceptar + txt_workspace_name + txt_workspace_name - tooltip_btn_accept - None + tooltip_txt_workspace_name + Nombre del nuevo espacio de trabajo *Obligatorio btn_toggle_privacy @@ -9760,16 +10014,24 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información None - lbl_new_workspace - Nombre: + btn_cancel + Cancelar - tooltip_lbl_new_workspace - Nombre del nuevo espacio de trabajo + tooltip_btn_cancel + None workspace_manager + + btn_cancel + Cerrar + + + tooltip_btn_cancel + None + btn_reset Restablecer @@ -9778,6 +10040,14 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_reset Restablece los valores del espacio de trabajo actual + + lbl_workspace_name + Filtrar por: Nombre + + + tooltip_lbl_workspace_name + None + btn_delete Eliminar @@ -9787,20 +10057,20 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información Elimina el espacio de trabajo seleccionado - lbl_workspace_name - Filtrar por: Nombre + btn_create + Crear - tooltip_lbl_workspace_name - None + tooltip_btn_create + Crear - btn_cancel - Cerrar + txt_name + txt_name - tooltip_btn_cancel - None + tooltip_txt_name + Nombre del espacio de trabajo lbl_vdefault_workspace @@ -9818,22 +10088,6 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información tooltip_btn_current Utiliza el espacio de trabajo seleccionado - - txt_name - txt_name - - - tooltip_txt_name - Nombre del espacio de trabajo - - - btn_create - Crear - - - tooltip_btn_create - Crear - diff --git a/icons/dialogs/24x24/181.png b/icons/dialogs/24x24/181.png index 9c1f028ef..d1ac6f6e1 100644 Binary files a/icons/dialogs/24x24/181.png and b/icons/dialogs/24x24/181.png differ diff --git a/icons/toolbars/toc/308.png b/icons/toolbars/toc/308.png index 1a2913074..40433f38f 100644 Binary files a/icons/toolbars/toc/308.png and b/icons/toolbars/toc/308.png differ diff --git a/libs b/libs index 2c88c40bc..69c065838 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit 2c88c40bc4fbf6d5dec8377ac23e76877721a88c +Subproject commit 69c06583873a9b2f07451f7da692afb3b1fd1b3a diff --git a/main.py b/main.py index 0dababb00..1473d22e0 100644 --- a/main.py +++ b/main.py @@ -322,20 +322,21 @@ def _set_info_button(self): """ # Create instance class and add button into QGIS toolbar - main_toolbutton = QToolButton() - self.action_info = self.iface.addToolBarWidget(main_toolbutton) - - # Set icon button if exists - icon_path = self.icon_folder + '36.png' - if os.path.exists(icon_path): - icon = QIcon(icon_path) - self.action = QAction(icon, "Show info", self.iface.mainWindow()) - else: - self.action = QAction("Show info", self.iface.mainWindow()) + if not hasattr(self, 'action_info') or self.action_info is None: + main_toolbutton = QToolButton() + self.action_info = self.iface.addToolBarWidget(main_toolbutton) + + # Set icon button if exists + icon_path = self.icon_folder + '36.png' + if os.path.exists(icon_path): + icon = QIcon(icon_path) + self.action = QAction(icon, "Show info", self.iface.mainWindow()) + else: + self.action = QAction("Show info", self.iface.mainWindow()) - main_toolbutton.setDefaultAction(self.action) - admin_button = GwAdminButton() - self.action.triggered.connect(partial(admin_button.init_sql, True)) + main_toolbutton.setDefaultAction(self.action) + admin_button = GwAdminButton() + self.action.triggered.connect(partial(admin_button.init_sql, True)) def _unset_info_button(self): @@ -359,7 +360,7 @@ def _unset_toc_buttons(self): toolbar = self.iface.mainWindow().findChild(QDockWidget, 'Layers').findChildren(QToolBar)[-1] for action in toolbar.actions(): - if action.objectName() not in ('GwAddChildLayerButton', 'GwEpaWorldButton'): + if action.objectName() not in ('GwAddChildLayerButton', 'GwLayerStyleChangeButton'): continue toolbar.removeAction(action) # Remove from toolbar action.deleteLater() # Schedule for deletion @@ -384,7 +385,11 @@ def _project_read(self, show_warning=True, hide_gw_button=True): # Create class to manage code that performs project configuration self.load_project = GwLoadProject() - self.load_project.project_read(show_warning, self) + + # If it is not a Giswater project, display admin button + is_gw_project = self.load_project.project_read(show_warning, self) + if is_gw_project is False: + self._set_info_button() def save_project(self): diff --git a/metadata.txt b/metadata.txt index 194ce204a..07c663c17 100644 --- a/metadata.txt +++ b/metadata.txt @@ -4,14 +4,21 @@ qgisMinimumVersion=3.22 qgisMaximumVersion=3.38 description=Plugin to manage water networks (water supply, sewerage and urban drainage) using QGIS and PostGIS-PostgreSQL about=Disclaimer: This plugin is released using the open source GNU-GPL3 license. Although a reasonable effort has been made to assure that the results obtained are correct, some of the capabilities provided by Giswater are experimental, therefore the development team and the Giswater Association are not responsible and assume no liability whatsoever for any results or any use made of the results obtained from the program, nor for any damages or litigation that result from the use of these programs for any purpose. -version=3.6.011 -author=David Erill, Barbara Rzepka, Sergi Muñoz, Josep Lluís Sala, Edgar Fusté, Albert Bofill, Sergi Maspons, Elies Bertran, Abel García Juanes, Maria Guzmán, Jordi Blanch, Xavier Torret +version=3.6.012 +author=David Erill, Barbara Rzepka, Sergi Muñoz, Josep Lluís Sala, Edgar Fusté, Albert Bofill, Sergi Maspons, Elies Bertran, Abel García Juanes, Maria Guzmán, Jordi Blanch, Xavier Torret, Daniel Marín, Ferran Martínez -Changelog=Version 3.6.011 - - Add support for tab visit in Giswater Info - - Remove psector_type combobox from psector dialog - - Add combo for feature_type on dimensions dialog [ARC, NODE, CONNEC {GULLY}] - - Several bugs fixed +Changelog=Version 3.6.012 + - Change "Set archive" button to "Toggle archive" (go2epa manager) + - Show the dates when an EPA result has been corporate + - New button "Show INP data" in go2epa manager + - Add the option to set geometry to a document (it can automatically get coordinates from the document's metadata) + - Add "name" field for documents + - Add workcat, psector & visit tabs in document dialog + - Create workcat manager + - Allow tab ordering in GwInfo (via config_form_tabs) + - New style manager & style change button + - Improve mincut dialog by ordering the toolbar actions + - Remove prices manager tags= giswater, water networks, sewerage, urban drainage, EPANET, SWMM diff --git a/resources/templates/qgisproject/en_US/ud_epa.qgs b/resources/templates/qgisproject/en_US/ud_epa.qgs index c1af03aaa..90daaf286 100644 --- a/resources/templates/qgisproject/en_US/ud_epa.qgs +++ b/resources/templates/qgisproject/en_US/ud_epa.qgs @@ -406,12 +406,12 @@