Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions geotrek/api/v2/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1261,7 +1261,7 @@ class Meta:

class SensitiveAreaSerializer(DynamicFieldsMixin, TimeStampedSerializer):
url = HyperlinkedIdentityField(view_name="apiv2:sensitivearea-detail")
name = serializers.SerializerMethodField()
name = serializers.CharField(source="area_name")
elevation = serializers.SerializerMethodField()
description = serializers.SerializerMethodField()
period = serializers.SerializerMethodField()
Expand All @@ -1281,7 +1281,7 @@ class SensitiveAreaSerializer(DynamicFieldsMixin, TimeStampedSerializer):
provider = serializers.SlugRelatedField(read_only=True, slug_field="name")

def get_name(self, obj):
return get_translation_or_dict("name", self, obj.species)
return get_translation_or_dict("name", self, obj)

def get_description(self, obj):
return get_translation_or_dict("description", self, obj)
Expand Down
2 changes: 1 addition & 1 deletion geotrek/diving/templates/diving/dive_public_pdf_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ <h2>{% trans "Environmental sensitive areas" %}</h2>
{% for area in object.published_sensitive_areas %}
<div class="text-content">
{% if area.species.pictogram %}<img src="file://{{ area.species.pictogram.path }}">{% endif %}
<h3>{{ area.species.name }}</h3>
<h3>{{ area.name }}</h3>
<p>{% trans "Sensitivity period:" %} {{ area.pretty_period }}</p>
{% if area.contact %}<p>{% trans "Contact:" %} {{ area.contact|safe }}</p>{% endif %}
<p>{{ area.description|safe }}</p>
Expand Down
13 changes: 10 additions & 3 deletions geotrek/sensitivity/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,22 @@ class PolygonMapWidget(MapWidget):

class SensitiveAreaForm(CommonForm):
geomfields = ["geom"]
name = forms.CharField(max_length=250, label=_("Name"), required=False)
species = forms.ModelChoiceField(
queryset=Species.objects.filter(category=Species.SPECIES),
label=pgettext("Singular", "Species"),
)

class Meta:
fields = ["structure", "species", "published", "description", "contact", "geom"]
fields = [
"structure",
"species",
"name",
"published",
"description",
"contact",
"geom",
]
model = SensitiveArea
widgets = {"geom": BubbleMapWidget()}

Expand Down Expand Up @@ -82,7 +91,6 @@ def __init__(self, *args, **kwargs):
if instance:
species = instance.species
kwargs["initial"] = {
"name": species.name,
"elevation": species.radius,
"pictogram": species.pictogram,
"practices": species.practices.all(),
Expand All @@ -101,7 +109,6 @@ def save(self, **kwargs):
else:
species = self.instance.species
species.category = Species.REGULATORY
species.name = self.cleaned_data["name"]
species.radius = self.cleaned_data["elevation"]
species.pictogram = self.cleaned_data["pictogram"]
species.url = self.cleaned_data["url"]
Expand Down
6 changes: 6 additions & 0 deletions geotrek/sensitivity/locale/de/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ msgstr ""
msgid "Species"
msgstr ""

msgid "Area name"
msgstr ""

msgid "Species or regulatory area"
msgstr ""

Expand All @@ -133,6 +136,9 @@ msgstr ""
msgid "Sensitive areas"
msgstr ""

msgid "Published name"
msgstr ""

msgid "Radius"
msgstr ""

Expand Down
8 changes: 7 additions & 1 deletion geotrek/sensitivity/locale/en/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,12 @@ msgstr ""
msgid "Species"
msgstr ""

msgid "Species or regulatory area"
msgid "Area name"
msgstr ""

msgid "Species or regulatory area"
msgstr "Specie"

msgid "Published"
msgstr ""

Expand All @@ -133,6 +136,9 @@ msgstr ""
msgid "Sensitive areas"
msgstr ""

msgid "Published name"
msgstr ""

msgid "Radius"
msgstr ""

Expand Down
6 changes: 6 additions & 0 deletions geotrek/sensitivity/locale/es/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ msgstr ""
msgid "Species"
msgstr ""

msgid "Area name"
msgstr ""

msgid "Species or regulatory area"
msgstr ""

Expand All @@ -133,6 +136,9 @@ msgstr ""
msgid "Sensitive areas"
msgstr ""

msgid "Published name"
msgstr ""

msgid "Radius"
msgstr ""

Expand Down
10 changes: 9 additions & 1 deletion geotrek/sensitivity/locale/fr/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,11 @@ msgstr "ID externe"
msgid "Species"
msgstr "Espèces"

msgid "Area name"
msgstr "Nom de la zone"

msgid "Species or regulatory area"
msgstr "Espèce ou zone réglementaire"
msgstr "Espèce"

msgid "Published"
msgstr "Publiée"
Expand All @@ -133,6 +136,11 @@ msgstr "Zone de sensibilité"
msgid "Sensitive areas"
msgstr "Zones sensibles"

#, fuzzy
#| msgid "Published"
msgid "Published name"
msgstr "Publiée"

msgid "Radius"
msgstr "Rayon"

Expand Down
6 changes: 6 additions & 0 deletions geotrek/sensitivity/locale/it/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ msgstr ""
msgid "Species"
msgstr ""

msgid "Area name"
msgstr ""

msgid "Species or regulatory area"
msgstr ""

Expand All @@ -133,6 +136,9 @@ msgstr ""
msgid "Sensitive areas"
msgstr ""

msgid "Published name"
msgstr ""

msgid "Radius"
msgstr ""

Expand Down
6 changes: 6 additions & 0 deletions geotrek/sensitivity/locale/nl/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ msgstr ""
msgid "Species"
msgstr ""

msgid "Area name"
msgstr ""

msgid "Species or regulatory area"
msgstr ""

Expand All @@ -133,6 +136,9 @@ msgstr ""
msgid "Sensitive areas"
msgstr ""

msgid "Published name"
msgstr ""

msgid "Radius"
msgstr ""

Expand Down
98 changes: 98 additions & 0 deletions geotrek/sensitivity/migrations/0031_sensitivearea_name.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import logging
from typing import cast

from django.conf import settings
from django.core.management.color import no_style
from django.db import connection, migrations, models, utils
from django.db.models import Field, Model
from modeltranslation.translator import TranslationOptions, translator
from modeltranslation.utils import build_localized_fieldname

from geotrek.sensitivity.models import SensitiveArea

logger = logging.getLogger(__name__)


def get_sync_sql(
field_name: str, missing_langs: list[str], model: type[Model]
) -> list[str]:
"""
Returns SQL needed for sync schema for a new translatable field.
"""
qn = connection.ops.quote_name
style = no_style()
sql_output: list[str] = []
db_table = model._meta.db_table
for lang in missing_langs:
new_field = build_localized_fieldname(field_name, lang)
f = cast(Field, model._meta.get_field(new_field))
col_type = f.db_type(connection=connection)
field_sql = [style.SQL_FIELD(qn(f.column)), style.SQL_COLTYPE(col_type)] # type: ignore[arg-type]
# column creation
stmt = "ALTER TABLE {} ADD COLUMN IF NOT EXISTS {}".format(qn(db_table), " ".join(field_sql))
if not f.null:
stmt += " " + style.SQL_KEYWORD("NOT NULL")
sql_output.append(stmt + ";")
return sql_output


def create_translation_fields(apps, schema_editor):
translated_fields = [
"name",
"description",
]

class SensitiveAreaTO(TranslationOptions):
fields = translated_fields

SensitiveArea = apps.get_model("sensitivity", "SensitiveArea")
translator.register(SensitiveArea, SensitiveAreaTO)

langs = settings.MODELTRANSLATION_LANGUAGES

for field in translated_fields:
sql_statements = get_sync_sql(field, langs, SensitiveArea)
with connection.cursor() as cursor:
for sql in sql_statements:
cursor.execute(sql)

def generate_name(apps, schema_editor):
"""Populate SensitiveAreas name from Species"""

sensitive_area = SensitiveArea
languages = settings.MODELTRANSLATION_LANGUAGES
update_fields = [
"name",
]
update_fields += [f"name_{lang}" for lang in languages]
for row in sensitive_area.objects.existing().filter(species__category=2):
for field in update_fields:
try:
setattr(row, field, getattr(row.species, field))
row.save(update_fields=update_fields)
except utils.ProgrammingError as e:
logger.warning('[Update sensitive areas] An error occured during migration : %s', e)
for field in update_fields:
# print(f"species.manager {row.species._meta.managers}")
# print(f"row {row.species} | field {field}")
try:
setattr(row.species, field, "")
row.species.save(update_fields=update_fields)
except utils.ProgrammingError as e:
logger.warning('[Update sensitive species] An error occured during migration : %s', e)

class Migration(migrations.Migration):
dependencies = [
("sensitivity", "0030_alter_sensitivearea_eid"),
]

operations = [
migrations.AddField(
model_name="sensitivearea",
name="name",
field=models.CharField(default="", max_length=250, verbose_name="Name"),
),
# migrations.RunPython(update_translation_fields_func, reverse_code=migrations.RunPython.noop),
migrations.RunPython(create_translation_fields, reverse_code=migrations.RunPython.noop),
migrations.RunPython(generate_name, reverse_code=migrations.RunPython.noop),
]
32 changes: 22 additions & 10 deletions geotrek/sensitivity/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ class SensitiveArea(
AddPropertyMixin,
ExternalSourceMixin,
):
name = models.CharField(max_length=250, verbose_name=_("Name"), default="")
geom = models.GeometryField(srid=settings.SRID)
geom_buffered = models.GeometryField(srid=settings.SRID, editable=False)
species = models.ForeignKey(
Expand Down Expand Up @@ -152,7 +153,7 @@ class Meta:
permissions = (("import_sensitivearea", "Can import Sensitive area"),)

def __str__(self):
return self.species.name
return self.name

@property
def radius(self):
Expand Down Expand Up @@ -216,17 +217,28 @@ def published_langs(self):
return []

@property
def species_display(self):
s = f'<a data-pk="{self.pk}" href="{self.get_detail_url()}" title="{self.species.name}">{self.species.name}</a>'
if self.published:
s = (
'<span class="badge badge-success" title="{}">&#x2606;</span> '.format(
_("Published")
)
+ s
def area_name(self):
if self.species.category == 1:
return (
self.species.name if (self.name == "" or not self.name) else self.name
)
return self.name

@classproperty
def area_name_verbose_name(cls):
return _("Published name")

@property
def name_display(self):
s = f'<a data-pk="{self.pk}" href="{self.get_detail_url()}" title="{self.area_name}">{self.area_name}</a>'
if self.published:
s = f"""<span class="badge badge-success" title="{_("Published")}">&#x2606;</span> {s}"""
return s

@property
def species_display(self):
return self.species.name

@property
def extent(self):
return (
Expand All @@ -251,7 +263,7 @@ def kml(self):
geom = GEOSGeometry(Polygon(geometry), srid=settings.SRID)
geom = geom.transform(4326, clone=True) # KML uses WGS84
line = kml.newpolygon(
name=self.species.name,
name=self.name,
description=plain_text(self.description),
altitudemode=simplekml.AltitudeMode.relativetoground,
outerboundaryis=simplify_coords(geom.coords[0]),
Expand Down
3 changes: 2 additions & 1 deletion geotrek/sensitivity/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
class SensitiveAreaSerializer(DynamicFieldsMixin, rest_serializers.ModelSerializer):
category = rest_serializers.CharField(source="category_display")
structure = rest_serializers.SlugRelatedField("name", read_only=True)
species = rest_serializers.CharField(source="species_display")
species = rest_serializers.CharField(source="species.name")
name = rest_serializers.CharField(source="name_display")

class Meta:
model = sensitivity_models.SensitiveArea
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,16 @@
<th>{{ sensitivearea|verbose:"structure" }}</th>
<td>{{ sensitivearea.structure }}</td>
</tr>
{% if sensitivearea.species.category == 2 %}
{% if sensitivearea.species.category == 1 %}
<tr>
<th>{{ sensitivearea.species|verbose:"name" }}</th>
<td>{{ sensitivearea.species.name }}</td>
</tr>
{% else %}
<tr>
<th>{{ sensitivearea|verbose:"species" }}</th>
<td>{{ sensitivearea.species }}</td>
<th>{{ sensitivearea|verbose:"area_name" }}</th>
<td>{{ sensitivearea.area_name }}</td>
</tr>
{% endif %}
<tr>
<th>{{ sensitivearea|verbose:"name" }}</th>
<td>{{ sensitivearea.name }}</td>
</tr>
<tr>
<th>{% trans "Period" %}</th>
<td>{{ sensitivearea.species.pretty_period }}</td>
Expand Down
Loading
Loading