From be885306c5d9c5c8cdbd6c93ac8a9d9e8e77ace1 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Tue, 31 May 2022 13:33:44 +0200 Subject: [PATCH] #158 is_pik added * adds model and form mixin for PIK * integrates mixins for compensation, ema and ecoaccount * adds migration files * extends API * extends API test data * adds is_xy fields to compensation, ema and ecoaccount reports * adds is_pik information to detail views * adds/updates translations --- .../create/compensation_create_post_body.json | 1 + .../create/ecoaccount_create_post_body.json | 1 + api/tests/v1/create/ema_create_post_body.json | 1 + api/tests/v1/get/test_api_get.py | 1 + .../update/compensation_update_put_body.json | 1 + .../v1/update/ecoaccount_update_put_body.json | 1 + api/tests/v1/update/ema_update_put_body.json | 1 + api/tests/v1/update/test_api_update.py | 1 + api/utils/serializer/v1/compensation.py | 3 + api/utils/serializer/v1/ecoaccount.py | 3 + api/utils/serializer/v1/ema.py | 3 + compensation/admin.py | 1 + compensation/forms/forms.py | 32 +++++- .../migrations/0007_auto_20220531_1245.py | 23 ++++ compensation/models/compensation.py | 17 ++- compensation/models/eco_account.py | 5 +- .../detail/compensation/view.html | 10 ++ .../compensation/detail/eco_account/view.html | 10 ++ .../report/compensation/report.html | 30 ++++++ .../report/eco_account/report.html | 10 ++ ema/forms.py | 11 +- ema/migrations/0004_ema_is_pik.py | 18 ++++ ema/models/ema.py | 5 +- ema/templates/ema/detail/view.html | 10 ++ ema/templates/ema/report/report.html | 10 ++ locale/de/LC_MESSAGES/django.mo | Bin 43014 -> 43248 bytes locale/de/LC_MESSAGES/django.po | 101 +++++++++++------- 27 files changed, 259 insertions(+), 51 deletions(-) create mode 100644 compensation/migrations/0007_auto_20220531_1245.py create mode 100644 ema/migrations/0004_ema_is_pik.py diff --git a/api/tests/v1/create/compensation_create_post_body.json b/api/tests/v1/create/compensation_create_post_body.json index b0d21e83..865621a1 100644 --- a/api/tests/v1/create/compensation_create_post_body.json +++ b/api/tests/v1/create/compensation_create_post_body.json @@ -6,6 +6,7 @@ "title": "Test_compensation", "is_cef": false, "is_coherence_keeping": false, + "is_pik": false, "intervention": "MUST_BE_SET_IN_TEST", "before_states": [ ], diff --git a/api/tests/v1/create/ecoaccount_create_post_body.json b/api/tests/v1/create/ecoaccount_create_post_body.json index 8300277d..7550d8cd 100644 --- a/api/tests/v1/create/ecoaccount_create_post_body.json +++ b/api/tests/v1/create/ecoaccount_create_post_body.json @@ -5,6 +5,7 @@ "properties": { "title": "Test_ecoaccount", "deductable_surface": 10000.0, + "is_pik": false, "responsible": { "conservation_office": null, "conservation_file_number": null, diff --git a/api/tests/v1/create/ema_create_post_body.json b/api/tests/v1/create/ema_create_post_body.json index 4949b7ab..8b826661 100644 --- a/api/tests/v1/create/ema_create_post_body.json +++ b/api/tests/v1/create/ema_create_post_body.json @@ -4,6 +4,7 @@ ], "properties": { "title": "Test_ema", + "is_pik": false, "responsible": { "conservation_office": null, "conservation_file_number": null, diff --git a/api/tests/v1/get/test_api_get.py b/api/tests/v1/get/test_api_get.py index 953b0f69..0db58cbc 100644 --- a/api/tests/v1/get/test_api_get.py +++ b/api/tests/v1/get/test_api_get.py @@ -122,6 +122,7 @@ class APIV1GetTestCase(BaseAPIV1TestCase): props = geojson["properties"] props["is_cef"] props["is_coherence_keeping"] + props["is_pik"] props["intervention"] props["intervention"]["id"] props["intervention"]["identifier"] diff --git a/api/tests/v1/update/compensation_update_put_body.json b/api/tests/v1/update/compensation_update_put_body.json index 57ad5ed4..4ae91ac7 100644 --- a/api/tests/v1/update/compensation_update_put_body.json +++ b/api/tests/v1/update/compensation_update_put_body.json @@ -46,6 +46,7 @@ "title": "TEST_compensation_CHANGED", "is_cef": true, "is_coherence_keeping": true, + "is_pik": true, "intervention": "CHANGE_BEFORE_RUN!!!", "before_states": [], "after_states": [], diff --git a/api/tests/v1/update/ecoaccount_update_put_body.json b/api/tests/v1/update/ecoaccount_update_put_body.json index ff636ff0..2b8235cb 100644 --- a/api/tests/v1/update/ecoaccount_update_put_body.json +++ b/api/tests/v1/update/ecoaccount_update_put_body.json @@ -45,6 +45,7 @@ "properties": { "title": "TEST_account_CHANGED", "deductable_surface": "100000.0", + "is_pik": true, "responsible": { "conservation_office": null, "conservation_file_number": "123-TEST", diff --git a/api/tests/v1/update/ema_update_put_body.json b/api/tests/v1/update/ema_update_put_body.json index cc835850..6c7adf68 100644 --- a/api/tests/v1/update/ema_update_put_body.json +++ b/api/tests/v1/update/ema_update_put_body.json @@ -52,6 +52,7 @@ "detail": "TEST_HANDLER_CHANGED" } }, + "is_pik": true, "before_states": [], "after_states": [], "actions": [], diff --git a/api/tests/v1/update/test_api_update.py b/api/tests/v1/update/test_api_update.py index bfc670bc..ff867e69 100644 --- a/api/tests/v1/update/test_api_update.py +++ b/api/tests/v1/update/test_api_update.py @@ -97,6 +97,7 @@ class APIV1UpdateTestCase(BaseAPIV1TestCase): self.assertNotEqual(modified_on, self.compensation.modified) self.assertEqual(put_props["is_cef"], self.compensation.is_cef) self.assertEqual(put_props["is_coherence_keeping"], self.compensation.is_coherence_keeping) + self.assertEqual(put_props["is_pik"], self.compensation.is_pik) self.assertEqual(len(put_props["actions"]), self.compensation.actions.count()) self.assertEqual(len(put_props["before_states"]), self.compensation.before_states.count()) self.assertEqual(len(put_props["after_states"]), self.compensation.after_states.count()) diff --git a/api/utils/serializer/v1/compensation.py b/api/utils/serializer/v1/compensation.py index 24e499ef..89dbe0e6 100644 --- a/api/utils/serializer/v1/compensation.py +++ b/api/utils/serializer/v1/compensation.py @@ -34,6 +34,7 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa def _extend_properties_data(self, entry): self.properties_data["is_cef"] = entry.is_cef self.properties_data["is_coherence_keeping"] = entry.is_coherence_keeping + self.properties_data["is_pik"] = entry.is_pik self.properties_data["intervention"] = self.intervention_to_json(entry.intervention) self.properties_data["before_states"] = self._compensation_state_to_json(entry.before_states.all()) self.properties_data["after_states"] = self._compensation_state_to_json(entry.after_states.all()) @@ -113,6 +114,7 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa obj.title = properties["title"] obj.is_cef = properties["is_cef"] obj.is_coherence_keeping = properties["is_coherence_keeping"] + obj.is_pik = properties.get("is_pik", False) obj = self.set_intervention(obj, properties["intervention"], user) obj.geometry.save() @@ -149,6 +151,7 @@ class CompensationAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensa obj.title = properties["title"] obj.is_cef = properties["is_cef"] obj.is_coherence_keeping = properties["is_coherence_keeping"] + obj.is_pik = properties.get("is_pik", False) obj.modified = update_action obj.geometry.geom = self._create_geometry_from_json(json_model) obj.geometry.modified = update_action diff --git a/api/utils/serializer/v1/ecoaccount.py b/api/utils/serializer/v1/ecoaccount.py index 7fe4373d..106789f4 100644 --- a/api/utils/serializer/v1/ecoaccount.py +++ b/api/utils/serializer/v1/ecoaccount.py @@ -25,6 +25,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1, model = EcoAccount def _extend_properties_data(self, entry): + self.properties_data["is_pik"] = entry.is_pik self.properties_data["deductable_surface"] = entry.deductable_surface self.properties_data["deductable_surface_available"] = entry.deductable_surface - entry.get_deductions_surface() self.properties_data["responsible"] = self._responsible_to_json(entry.responsible) @@ -122,6 +123,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1, properties = json_model["properties"] obj.identifier = obj.generate_new_identifier() obj.title = properties["title"] + obj.is_pik = properties.get("is_pik", False) try: obj.deductable_surface = float(properties["deductable_surface"]) @@ -169,6 +171,7 @@ class EcoAccountAPISerializerV1(AbstractModelAPISerializerV1, # Fill in data to objects properties = json_model["properties"] obj.title = properties["title"] + obj.is_pik = properties.get("is_pik", False) obj.deductable_surface = float(properties["deductable_surface"]) obj.modified = update_action obj.geometry.geom = self._create_geometry_from_json(json_model) diff --git a/api/utils/serializer/v1/ema.py b/api/utils/serializer/v1/ema.py index dfda7249..787a64b2 100644 --- a/api/utils/serializer/v1/ema.py +++ b/api/utils/serializer/v1/ema.py @@ -21,6 +21,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe model = Ema def _extend_properties_data(self, entry): + self.properties_data["is_pik"] = entry.is_pik self.properties_data["responsible"] = self._responsible_to_json(entry.responsible) self.properties_data["before_states"] = self._compensation_state_to_json(entry.before_states.all()) self.properties_data["after_states"] = self._compensation_state_to_json(entry.after_states.all()) @@ -104,6 +105,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe properties = json_model["properties"] obj.identifier = obj.generate_new_identifier() obj.title = properties["title"] + obj.is_pik = properties.get("is_pik", False) obj = self._set_responsibility(obj, properties["responsible"]) obj.geometry.save() @@ -141,6 +143,7 @@ class EmaAPISerializerV1(AbstractModelAPISerializerV1, AbstractCompensationAPISe # Fill in data to objects properties = json_model["properties"] obj.title = properties["title"] + obj.is_pik = properties.get("is_pik", False) obj.modified = update_action obj.geometry.geom = self._create_geometry_from_json(json_model) obj.geometry.modified = update_action diff --git a/compensation/admin.py b/compensation/admin.py index a5cd1a88..2821a146 100644 --- a/compensation/admin.py +++ b/compensation/admin.py @@ -55,6 +55,7 @@ class CompensationAdmin(AbstractCompensationAdmin): return super().get_fields(request, obj) + [ "is_cef", "is_coherence_keeping", + "is_pik", "intervention", ] diff --git a/compensation/forms/forms.py b/compensation/forms/forms.py index 4e9e329e..8f28c5ff 100644 --- a/compensation/forms/forms.py +++ b/compensation/forms/forms.py @@ -160,7 +160,23 @@ class CoherenceCompensationFormMixin(forms.Form): ) -class NewCompensationForm(AbstractCompensationForm, CEFCompensationFormMixin, CoherenceCompensationFormMixin): +class PikCompensationFormMixin(forms.Form): + """ A form mixin, providing PIK compensation field + + """ + is_pik = forms.BooleanField( + label_suffix="", + label=_("Is PIK"), + help_text=_("Optionally: Whether this compensation is a compensation integrated in production?"), + required=False, + widget=forms.CheckboxInput() + ) + + +class NewCompensationForm(AbstractCompensationForm, + CEFCompensationFormMixin, + CoherenceCompensationFormMixin, + PikCompensationFormMixin): """ Form for creating new compensations. Can be initialized with an intervention id for preselecting the related intervention. @@ -191,6 +207,7 @@ class NewCompensationForm(AbstractCompensationForm, CEFCompensationFormMixin, Co "identifier", "title", "intervention", + "is_pik", "is_cef", "is_coherence_keeping", "comment", @@ -234,6 +251,7 @@ class NewCompensationForm(AbstractCompensationForm, CEFCompensationFormMixin, Co intervention = self.cleaned_data.get("intervention", None) is_cef = self.cleaned_data.get("is_cef", None) is_coherence_keeping = self.cleaned_data.get("is_coherence_keeping", None) + is_pik = self.cleaned_data.get("is_pik", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -249,6 +267,7 @@ class NewCompensationForm(AbstractCompensationForm, CEFCompensationFormMixin, Co created=action, is_cef=is_cef, is_coherence_keeping=is_coherence_keeping, + is_pik=is_pik, geometry=geometry, comment=comment, ) @@ -281,6 +300,7 @@ class EditCompensationForm(NewCompensationForm): "intervention": self.instance.intervention, "is_cef": self.instance.is_cef, "is_coherence_keeping": self.instance.is_coherence_keeping, + "is_pik": self.instance.is_pik, "comment": self.instance.comment, } disabled_fields = [] @@ -297,6 +317,7 @@ class EditCompensationForm(NewCompensationForm): intervention = self.cleaned_data.get("intervention", None) is_cef = self.cleaned_data.get("is_cef", None) is_coherence_keeping = self.cleaned_data.get("is_coherence_keeping", None) + is_pik = self.cleaned_data.get("is_pik", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -313,6 +334,7 @@ class EditCompensationForm(NewCompensationForm): self.instance.is_cef = is_cef self.instance.is_coherence_keeping = is_coherence_keeping self.instance.comment = comment + self.instance.is_pik = is_pik self.instance.modified = action self.instance.save() @@ -322,7 +344,7 @@ class EditCompensationForm(NewCompensationForm): return self.instance -class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMixin): +class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMixin, PikCompensationFormMixin): """ Form for creating eco accounts Inherits from basic AbstractCompensationForm and further form fields from CompensationResponsibleFormMixin @@ -363,6 +385,7 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix "registration_date", "surface", "conservation_file_number", + "is_pik", "handler_type", "handler_detail", "comment", @@ -392,6 +415,7 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix surface = self.cleaned_data.get("surface", None) conservation_office = self.cleaned_data.get("conservation_office", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None) + is_pik = self.cleaned_data.get("is_pik", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -423,6 +447,7 @@ class NewEcoAccountForm(AbstractCompensationForm, CompensationResponsibleFormMix created=action, geometry=geometry, comment=comment, + is_pik=is_pik, legal=legal ) acc.share_with_user(user) @@ -458,6 +483,7 @@ class EditEcoAccountForm(NewEcoAccountForm): "registration_date": reg_date, "conservation_office": self.instance.responsible.conservation_office, "conservation_file_number": self.instance.responsible.conservation_file_number, + "is_pik": self.instance.is_pik, "comment": self.instance.comment, } disabled_fields = [] @@ -478,6 +504,7 @@ class EditEcoAccountForm(NewEcoAccountForm): conservation_office = self.cleaned_data.get("conservation_office", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None) comment = self.cleaned_data.get("comment", None) + is_pik = self.cleaned_data.get("is_pik", None) # Create log entry action = UserActionLogEntry.get_edited_action(user) @@ -503,6 +530,7 @@ class EditEcoAccountForm(NewEcoAccountForm): self.instance.deductable_surface = surface self.instance.geometry = geometry self.instance.comment = comment + self.instance.is_pik = is_pik self.instance.modified = action self.instance.save() diff --git a/compensation/migrations/0007_auto_20220531_1245.py b/compensation/migrations/0007_auto_20220531_1245.py new file mode 100644 index 00000000..688ffb18 --- /dev/null +++ b/compensation/migrations/0007_auto_20220531_1245.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.3 on 2022-05-31 10:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compensation', '0006_ecoaccount_teams'), + ] + + operations = [ + migrations.AddField( + model_name='compensation', + name='is_pik', + field=models.BooleanField(blank=True, default=False, help_text="Flag if compensation is a 'Produktonsintegrierte Kompensation'", null=True), + ), + migrations.AddField( + model_name='ecoaccount', + name='is_pik', + field=models.BooleanField(blank=True, default=False, help_text="Flag if compensation is a 'Produktonsintegrierte Kompensation'", null=True), + ), + ] diff --git a/compensation/models/compensation.py b/compensation/models/compensation.py index 3727e0c2..2e42ff7a 100644 --- a/compensation/models/compensation.py +++ b/compensation/models/compensation.py @@ -257,7 +257,22 @@ class CoherenceMixin(models.Model): abstract = True -class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin): +class PikMixin(models.Model): + """ Provides PIK flag as Mixin + + """ + is_pik = models.BooleanField( + blank=True, + null=True, + default=False, + help_text="Flag if compensation is a 'Produktonsintegrierte Kompensation'" + ) + + class Meta: + abstract = True + + +class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin, PikMixin): """ Regular compensation, linked to an intervention """ diff --git a/compensation/models/eco_account.py b/compensation/models/eco_account.py index 6d95b399..3d48b691 100644 --- a/compensation/models/eco_account.py +++ b/compensation/models/eco_account.py @@ -17,14 +17,13 @@ from django.db.models import Sum, QuerySet from django.utils.translation import gettext_lazy as _ from compensation.managers import EcoAccountManager, EcoAccountDeductionManager -from compensation.models.compensation import AbstractCompensation +from compensation.models.compensation import AbstractCompensation, PikMixin from compensation.utils.quality import EcoAccountQualityChecker from konova.models import ShareableObjectMixin, RecordableObjectMixin, AbstractDocument, BaseResource, \ generate_document_file_upload_path -from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE -class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin): +class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin, PikMixin): """ An eco account is a kind of 'prepaid' compensation. It can be compared to an account that already has been filled with some kind of currency. From this account one is able to deduct currency for current projects. diff --git a/compensation/templates/compensation/detail/compensation/view.html b/compensation/templates/compensation/detail/compensation/view.html index 4a1177a5..5a125ccd 100644 --- a/compensation/templates/compensation/detail/compensation/view.html +++ b/compensation/templates/compensation/detail/compensation/view.html @@ -39,6 +39,16 @@ + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Is CEF compensation' %} diff --git a/compensation/templates/compensation/detail/eco_account/view.html b/compensation/templates/compensation/detail/eco_account/view.html index f4e8da4e..432315a8 100644 --- a/compensation/templates/compensation/detail/eco_account/view.html +++ b/compensation/templates/compensation/detail/eco_account/view.html @@ -70,6 +70,16 @@ {% trans 'Action handler' %} {{obj.responsible.handler|default_if_none:""}} + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Last modified' %} diff --git a/compensation/templates/compensation/report/compensation/report.html b/compensation/templates/compensation/report/compensation/report.html index af9ab44b..2be278aa 100644 --- a/compensation/templates/compensation/report/compensation/report.html +++ b/compensation/templates/compensation/report/compensation/report.html @@ -20,6 +20,36 @@ + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + + + {% trans 'Is CEF' %} + + {% if obj.is_cef %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + + + {% trans 'Is coherence keeping' %} + + {% if obj.is_coherence_keeping %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Last modified' %} diff --git a/compensation/templates/compensation/report/eco_account/report.html b/compensation/templates/compensation/report/eco_account/report.html index 3eaa2a64..e2147f69 100644 --- a/compensation/templates/compensation/report/eco_account/report.html +++ b/compensation/templates/compensation/report/eco_account/report.html @@ -20,6 +20,16 @@ {% trans 'Conservation office file number' %} {{obj.responsible.conservation_file_number|default_if_none:""}} + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Deductions for' %} diff --git a/ema/forms.py b/ema/forms.py index 91b8de19..a7e82c4f 100644 --- a/ema/forms.py +++ b/ema/forms.py @@ -12,14 +12,15 @@ from django.db import transaction from django.urls import reverse, reverse_lazy from django.utils.translation import gettext_lazy as _ -from compensation.forms.forms import AbstractCompensationForm, CompensationResponsibleFormMixin +from compensation.forms.forms import AbstractCompensationForm, CompensationResponsibleFormMixin, \ + PikCompensationFormMixin from ema.models import Ema, EmaDocument from intervention.models import Responsibility, Handler from konova.forms import SimpleGeomForm, NewDocumentModalForm from user.models import UserActionLogEntry -class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin): +class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin, PikCompensationFormMixin): """ Form for creating new EMA objects. Inherits basic form fields from AbstractCompensationForm and additional from CompensationResponsibleFormMixin. @@ -31,6 +32,7 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin): "title", "conservation_office", "conservation_file_number", + "is_pik", "handler_type", "handler_detail", "comment", @@ -58,6 +60,7 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin): handler_detail = self.cleaned_data.get("handler_detail", None) conservation_office = self.cleaned_data.get("conservation_office", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None) + is_pik = self.cleaned_data.get("is_pik", None) comment = self.cleaned_data.get("comment", None) # Create log entry @@ -83,6 +86,7 @@ class NewEmaForm(AbstractCompensationForm, CompensationResponsibleFormMixin): created=action, geometry=geometry, comment=comment, + is_pik=is_pik, ) # Add the creating user to the list of shared users @@ -116,6 +120,7 @@ class EditEmaForm(NewEmaForm): "conservation_office": self.instance.responsible.conservation_office, "conservation_file_number": self.instance.responsible.conservation_file_number, "comment": self.instance.comment, + "is_pik": self.instance.is_pik, } disabled_fields = [] self.load_initial_data( @@ -133,6 +138,7 @@ class EditEmaForm(NewEmaForm): conservation_office = self.cleaned_data.get("conservation_office", None) conservation_file_number = self.cleaned_data.get("conservation_file_number", None) comment = self.cleaned_data.get("comment", None) + is_pik = self.cleaned_data.get("is_pik", None) # Create log entry action = UserActionLogEntry.get_edited_action(user) @@ -152,6 +158,7 @@ class EditEmaForm(NewEmaForm): self.instance.title = title self.instance.geometry = geometry self.instance.comment = comment + self.instance.is_pik = is_pik self.instance.modified = action self.instance.save() diff --git a/ema/migrations/0004_ema_is_pik.py b/ema/migrations/0004_ema_is_pik.py new file mode 100644 index 00000000..534155a7 --- /dev/null +++ b/ema/migrations/0004_ema_is_pik.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.3 on 2022-05-31 10:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ema', '0003_ema_teams'), + ] + + operations = [ + migrations.AddField( + model_name='ema', + name='is_pik', + field=models.BooleanField(blank=True, default=False, help_text="Flag if compensation is a 'Produktonsintegrierte Kompensation'", null=True), + ), + ] diff --git a/ema/models/ema.py b/ema/models/ema.py index 983bdbd7..abec7c43 100644 --- a/ema/models/ema.py +++ b/ema/models/ema.py @@ -13,15 +13,14 @@ from django.db.models import QuerySet from django.http import HttpRequest from django.urls import reverse -from compensation.models import AbstractCompensation +from compensation.models import AbstractCompensation, PikMixin from ema.managers import EmaManager from ema.utils.quality import EmaQualityChecker from konova.models import AbstractDocument, generate_document_file_upload_path, RecordableObjectMixin, ShareableObjectMixin -from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION, DOCUMENT_REMOVED_TEMPLATE -class Ema(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin): +class Ema(AbstractCompensation, ShareableObjectMixin, RecordableObjectMixin, PikMixin): """ EMA = Ersatzzahlungsmaßnahme (compensation actions from payments) diff --git a/ema/templates/ema/detail/view.html b/ema/templates/ema/detail/view.html index 7d604731..16f31378 100644 --- a/ema/templates/ema/detail/view.html +++ b/ema/templates/ema/detail/view.html @@ -56,6 +56,16 @@ {% trans 'Action handler' %} {{obj.responsible.handler|default_if_none:""}} + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Last modified' %} diff --git a/ema/templates/ema/report/report.html b/ema/templates/ema/report/report.html index 35521374..fd166596 100644 --- a/ema/templates/ema/report/report.html +++ b/ema/templates/ema/report/report.html @@ -20,6 +20,16 @@ {% trans 'Conservation office file number' %} {{obj.responsible.conservation_file_number|default_if_none:""}} + + {% trans 'Is PIK' %} + + {% if obj.is_pik %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + {% trans 'Last modified' %} diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 7cf9a79c50f1eaaa779bd7b4ac4a2bc9a8d2b6d0..885f0b9dcd4b08bdf1c8f5ab613c98115850330d 100644 GIT binary patch delta 12027 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 diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 27578e3f..93238630 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-05-30 11:51+0200\n" +"POT-Creation-Date: 2022-05-31 13:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -61,7 +61,7 @@ msgid "Select the responsible office" msgstr "Verantwortliche Stelle" #: analysis/forms.py:58 compensation/forms/forms.py:88 -#: compensation/forms/forms.py:118 compensation/forms/forms.py:183 +#: compensation/forms/forms.py:118 compensation/forms/forms.py:199 #: intervention/forms/forms.py:64 intervention/forms/forms.py:81 #: intervention/forms/forms.py:97 intervention/forms/forms.py:113 #: intervention/forms/forms.py:154 intervention/forms/modalForms.py:49 @@ -139,7 +139,7 @@ msgstr "Zuständigkeitsbereich" #: analysis/templates/analysis/reports/includes/intervention/compensated_by.html:8 #: analysis/templates/analysis/reports/includes/intervention/laws.html:17 #: compensation/tables.py:38 -#: compensation/templates/compensation/detail/compensation/view.html:64 +#: compensation/templates/compensation/detail/compensation/view.html:74 #: intervention/tables.py:38 #: intervention/templates/intervention/detail/view.html:68 #: user/models/user_action.py:21 @@ -155,7 +155,7 @@ msgstr "Geprüft" #: analysis/templates/analysis/reports/includes/intervention/laws.html:20 #: analysis/templates/analysis/reports/includes/old_data/amount.html:18 #: compensation/tables.py:44 compensation/tables.py:219 -#: compensation/templates/compensation/detail/compensation/view.html:83 +#: compensation/templates/compensation/detail/compensation/view.html:93 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31 #: compensation/templates/compensation/detail/eco_account/view.html:45 #: ema/tables.py:44 ema/templates/ema/detail/view.html:35 @@ -350,7 +350,7 @@ msgstr "Bezeichnung" msgid "An explanatory name" msgstr "Aussagekräftiger Titel" -#: compensation/forms/forms.py:50 ema/forms.py:50 ema/forms.py:108 +#: compensation/forms/forms.py:50 ema/forms.py:52 ema/forms.py:112 msgid "Compensation XY; Location ABC" msgstr "Kompensation XY; Flur ABC" @@ -431,51 +431,64 @@ msgid "" "Optionally: Whether this compensation is a coherence keeping compensation?" msgstr "Optional: Handelt es sich um eine Kohärenzsicherungsmaßnahme?" -#: compensation/forms/forms.py:174 +#: compensation/forms/forms.py:169 +#: compensation/templates/compensation/detail/compensation/view.html:44 +#: compensation/templates/compensation/detail/eco_account/view.html:75 +#: ema/templates/ema/detail/view.html:61 +msgid "Is PIK" +msgstr "Ist PIK Maßnahme" + +#: compensation/forms/forms.py:170 +msgid "" +"Optionally: Whether this compensation is a compensation integrated in " +"production?" +msgstr "Optional: Handelt es sich um eine produktionsintegrierte Kompensation?" + +#: compensation/forms/forms.py:190 #: compensation/templates/compensation/detail/compensation/view.html:36 #: compensation/templates/compensation/report/compensation/report.html:16 msgid "compensates intervention" msgstr "kompensiert Eingriff" -#: compensation/forms/forms.py:176 +#: compensation/forms/forms.py:192 msgid "Select the intervention for which this compensation compensates" msgstr "Wählen Sie den Eingriff, für den diese Kompensation bestimmt ist" -#: compensation/forms/forms.py:202 compensation/views/compensation.py:110 +#: compensation/forms/forms.py:219 compensation/views/compensation.py:110 msgid "New compensation" msgstr "Neue Kompensation" -#: compensation/forms/forms.py:273 +#: compensation/forms/forms.py:292 msgid "Edit compensation" msgstr "Bearbeite Kompensation" -#: compensation/forms/forms.py:334 compensation/utils/quality.py:84 +#: compensation/forms/forms.py:356 compensation/utils/quality.py:84 msgid "Available Surface" msgstr "Verfügbare Fläche" -#: compensation/forms/forms.py:337 +#: compensation/forms/forms.py:359 msgid "The amount that can be used for deductions" msgstr "Die für Abbuchungen zur Verfügung stehende Menge" -#: compensation/forms/forms.py:346 +#: compensation/forms/forms.py:368 #: compensation/templates/compensation/detail/eco_account/view.html:67 #: compensation/utils/quality.py:72 msgid "Agreement date" msgstr "Vereinbarungsdatum" -#: compensation/forms/forms.py:348 +#: compensation/forms/forms.py:370 msgid "When did the parties agree on this?" msgstr "Wann wurde dieses Ökokonto offiziell vereinbart?" -#: compensation/forms/forms.py:373 compensation/views/eco_account.py:108 +#: compensation/forms/forms.py:396 compensation/views/eco_account.py:108 msgid "New Eco-Account" msgstr "Neues Ökokonto" -#: compensation/forms/forms.py:382 +#: compensation/forms/forms.py:405 msgid "Eco-Account XY; Location ABC" msgstr "Ökokonto XY; Flur ABC" -#: compensation/forms/forms.py:442 +#: compensation/forms/forms.py:467 msgid "Edit Eco-Account" msgstr "Ökokonto bearbeiten" @@ -696,7 +709,7 @@ msgid "Open {}" msgstr "Öffne {}" #: compensation/tables.py:163 -#: compensation/templates/compensation/detail/compensation/view.html:86 +#: compensation/templates/compensation/detail/compensation/view.html:96 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:58 #: compensation/templates/compensation/detail/eco_account/view.html:48 #: ema/tables.py:130 ema/templates/ema/detail/view.html:38 @@ -955,33 +968,39 @@ msgstr "Neuen Ausgangszustand hinzufügen" msgid "Missing surfaces according to states after: " msgstr "Fehlende Flächenmengen laut Zielzustand: " -#: compensation/templates/compensation/detail/compensation/view.html:44 -msgid "Is CEF compensation" -msgstr "Ist CEF Maßnahme" - #: compensation/templates/compensation/detail/compensation/view.html:47 #: compensation/templates/compensation/detail/compensation/view.html:57 +#: compensation/templates/compensation/detail/compensation/view.html:67 +#: compensation/templates/compensation/detail/eco_account/view.html:78 +#: ema/templates/ema/detail/view.html:64 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:710 msgid "Yes" msgstr "Ja" #: compensation/templates/compensation/detail/compensation/view.html:49 #: compensation/templates/compensation/detail/compensation/view.html:59 +#: compensation/templates/compensation/detail/compensation/view.html:69 +#: compensation/templates/compensation/detail/eco_account/view.html:80 +#: ema/templates/ema/detail/view.html:66 #: venv/lib/python3.7/site-packages/django/forms/widgets.py:711 msgid "No" msgstr "Nein" #: compensation/templates/compensation/detail/compensation/view.html:54 +msgid "Is CEF compensation" +msgstr "Ist CEF Maßnahme" + +#: compensation/templates/compensation/detail/compensation/view.html:64 msgid "Is Coherence keeping compensation" msgstr "Ist Kohärenzsicherungsmaßnahme" -#: compensation/templates/compensation/detail/compensation/view.html:76 +#: compensation/templates/compensation/detail/compensation/view.html:86 #: intervention/templates/intervention/detail/view.html:80 msgid "Checked on " msgstr "Geprüft am " -#: compensation/templates/compensation/detail/compensation/view.html:76 -#: compensation/templates/compensation/detail/compensation/view.html:90 +#: compensation/templates/compensation/detail/compensation/view.html:86 +#: compensation/templates/compensation/detail/compensation/view.html:100 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56 #: compensation/templates/compensation/detail/eco_account/view.html:52 #: ema/templates/ema/detail/view.html:42 @@ -990,27 +1009,27 @@ msgstr "Geprüft am " msgid "by" msgstr "von" -#: compensation/templates/compensation/detail/compensation/view.html:90 +#: compensation/templates/compensation/detail/compensation/view.html:100 #: compensation/templates/compensation/detail/eco_account/view.html:52 #: ema/templates/ema/detail/view.html:42 #: intervention/templates/intervention/detail/view.html:94 msgid "Recorded on " msgstr "Verzeichnet am" -#: compensation/templates/compensation/detail/compensation/view.html:97 -#: compensation/templates/compensation/detail/eco_account/view.html:75 +#: compensation/templates/compensation/detail/compensation/view.html:107 +#: compensation/templates/compensation/detail/eco_account/view.html:85 #: compensation/templates/compensation/report/compensation/report.html:24 #: compensation/templates/compensation/report/eco_account/report.html:37 -#: ema/templates/ema/detail/view.html:61 +#: ema/templates/ema/detail/view.html:71 #: ema/templates/ema/report/report.html:24 #: intervention/templates/intervention/detail/view.html:113 #: intervention/templates/intervention/report/report.html:87 msgid "Last modified" msgstr "Zuletzt bearbeitet" -#: compensation/templates/compensation/detail/compensation/view.html:111 -#: compensation/templates/compensation/detail/eco_account/view.html:89 -#: ema/templates/ema/detail/view.html:75 +#: compensation/templates/compensation/detail/compensation/view.html:121 +#: compensation/templates/compensation/detail/eco_account/view.html:99 +#: ema/templates/ema/detail/view.html:85 #: intervention/templates/intervention/detail/view.html:127 msgid "Shared with" msgstr "Freigegeben für" @@ -1202,11 +1221,11 @@ msgstr "Freigabelink ungültig" msgid "Share settings updated" msgstr "Freigabe Einstellungen aktualisiert" -#: ema/forms.py:41 ema/views.py:98 +#: ema/forms.py:43 ema/views.py:98 msgid "New EMA" msgstr "Neue EMA hinzufügen" -#: ema/forms.py:102 +#: ema/forms.py:106 msgid "Edit EMA" msgstr "Bearbeite EMA" @@ -2548,11 +2567,11 @@ msgstr "Neuen Token generieren" msgid "A new token needs to be validated by an administrator!" msgstr "Neue Tokens müssen durch Administratoren freigeschaltet werden!" -#: user/forms.py:168 user/forms.py:172 user/forms.py:351 user/forms.py:356 +#: user/forms.py:168 user/forms.py:172 user/forms.py:354 user/forms.py:359 msgid "Team name" msgstr "Team Name" -#: user/forms.py:179 user/forms.py:364 user/templates/user/team/index.html:30 +#: user/forms.py:179 user/forms.py:367 user/templates/user/team/index.html:30 msgid "Description" msgstr "Beschreibung" @@ -2604,7 +2623,7 @@ msgstr "Es muss mindestens einen Administrator für das Team geben." msgid "Edit team" msgstr "Team bearbeiten" -#: user/forms.py:336 +#: user/forms.py:335 msgid "" "ATTENTION!\n" "\n" @@ -2613,16 +2632,18 @@ msgid "" "\n" "Are you sure to remove this team?" msgstr "" -"ACHTUNG!\n\n" -"Wenn dieses Team gelöscht wird, verlieren alle Teammitglieder den Zugriff auf die Daten, die nur über dieses Team freigegeben sind!\n" +"ACHTUNG!\n" +"\n" +"Wenn dieses Team gelöscht wird, verlieren alle Teammitglieder den Zugriff " +"auf die Daten, die nur über dieses Team freigegeben sind!\n" "\n" "Sind Sie sicher, dass Sie dieses Team löschen möchten?" -#: user/forms.py:342 user/templates/user/team/index.html:56 +#: user/forms.py:345 user/templates/user/team/index.html:56 msgid "Leave team" msgstr "Team verlassen" -#: user/forms.py:375 +#: user/forms.py:378 msgid "Team" msgstr "Team"