From 2240016de19b831bda975fef792d233985587d84 Mon Sep 17 00:00:00 2001 From: Mario Baranzini Date: Fri, 17 Dec 2021 11:45:47 +0100 Subject: [PATCH] Add delete data dialog --- comptages/comptages.py | 48 ++++++++++- comptages/core/delete_dialog.py | 10 +++ comptages/core/layers.py | 9 ++ comptages/ui/delete.ui | 147 ++++++++++++++++++++++++++++++++ 4 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 comptages/core/delete_dialog.py create mode 100644 comptages/ui/delete.ui diff --git a/comptages/comptages.py b/comptages/comptages.py index bb26042e..f3fe65ae 100644 --- a/comptages/comptages.py +++ b/comptages/comptages.py @@ -1,9 +1,10 @@ import os -from datetime import datetime +import pytz +from datetime import datetime, timedelta from functools import partial from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtWidgets import QAction, QFileDialog +from qgis.PyQt.QtWidgets import QAction, QFileDialog, QMessageBox from qgis.PyQt.QtCore import QObject, Qt, QDateTime from qgis.core import ( QgsMessageLog, Qgis, QgsApplication, QgsExpressionContextUtils, @@ -14,6 +15,7 @@ from comptages.core.layers import Layers from comptages.core.filter_dialog import FilterDialog from comptages.core.yearly_report_dialog import YearlyReportDialog +from comptages.core.delete_dialog import DeleteDialog from comptages.core.utils import push_info from comptages.datamodel import models from comptages.core import importer, importer_task, report, report_task @@ -23,6 +25,7 @@ from comptages.report.yearly_report_bike import YearlyReportBike from comptages.ics.ics_importer import IcsImporter from comptages.ui.resources import * +from comptages.core import definitions class Comptages(QObject): @@ -539,6 +542,47 @@ def do_generate_chart_action(self, count_id): '{} - Generate chart action ended'.format(datetime.now()), 'Comptages', Qgis.Info) + + def do_delete_data_action(self, count_id): + dlg = DeleteDialog(self.iface) + tz = pytz.timezone("Europe/Zurich") + + if dlg.exec_(): + start = tz.localize(dlg.start_date.dateTime().toPyDateTime()) + end = tz.localize(dlg.end_date.dateTime().toPyDateTime()) + definitive = dlg.definitive.isChecked() + quarantine = dlg.quarantine.isChecked() + count = models.Count.objects.get(id=count_id) + + msg = QMessageBox() + msg.setIcon(QMessageBox.Warning) + msg.setText("Effacement des données") + # msg.setInformativeText(f"Effacement des données") + msg.setDetailedText( + "Les données suivantes seront supprimées:\n" + f"comptage: {count_id}\n" + f"de: {start.strftime('%d.%m.%Y')}\n" + f"à: {end.strftime('%d.%m.%Y')} inclus\n" + f"provisoires: {quarantine}\n" + f"définitives: {definitive}" + ) + msg.setWindowTitle("Effacement des données") + msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) + retval = msg.exec_() + if retval == QMessageBox.Ok: + qs = models.CountDetail.objects.filter( + id_count=count, + timestamp__range=(start, end + timedelta(days=1)), + ) + + if not definitive: + qs = qs.filter(status=definitions.IMPORT_STATUS_QUARANTINE) + + if not quarantine: + qs = qs.filter(status=definitions.IMPORT_STATUS_DEFINITIVE) + + qs.delete() + def enable_actions_if_needed(self): """Enable actions if the plugin is connected to the db otherwise disable them""" diff --git a/comptages/core/delete_dialog.py b/comptages/core/delete_dialog.py new file mode 100644 index 00000000..1569bb06 --- /dev/null +++ b/comptages/core/delete_dialog.py @@ -0,0 +1,10 @@ +from qgis.PyQt.QtWidgets import QDialog +from comptages.core.utils import get_ui_class + +FORM_CLASS = get_ui_class('delete.ui') + + +class DeleteDialog(QDialog, FORM_CLASS): + def __init__(self, iface, parent=None): + QDialog.__init__(self, parent) + self.setupUi(self) diff --git a/comptages/core/layers.py b/comptages/core/layers.py index c6ab38af..bd7b6d5f 100644 --- a/comptages/core/layers.py +++ b/comptages/core/layers.py @@ -298,6 +298,15 @@ def add_layer_actions(self): action.setActionScopes(['Feature']) action_manager.addAction(action) + action = QgsAction( + QgsAction.GenericPython, + 'Effacer des données', + ("from qgis.utils import plugins\n" + "plugins['comptages'].do_delete_data_action([% attribute( $currentfeature, 'id' ) %])") + ) + action.setActionScopes(['Feature']) + action_manager.addAction(action) + def create_count(self): layer = self.layers['section'] diff --git a/comptages/ui/delete.ui b/comptages/ui/delete.ui new file mode 100644 index 00000000..72d7eda1 --- /dev/null +++ b/comptages/ui/delete.ui @@ -0,0 +1,147 @@ + + + Delete + + + + 0 + 0 + 865 + 181 + + + + Delete + + + + + + + + Date début + + + + + + + + + + dd.MM.yyyy + + + + + + + Date fin + + + + + + + dd.MM.yyyy + + + + + + + Données provisoires + + + + + + + + + + true + + + + + + + Données définitives + + + + + + + + + + true + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + QgsDateTimeEdit + QDateTimeEdit +
qgsdatetimeedit.h
+
+
+ + + + buttons + accepted() + Delete + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttons + rejected() + Delete + reject() + + + 316 + 260 + + + 286 + 274 + + + + +