#49 Frontend rendering
* adds rendering for detail view * adds new includable html snippet for parcel rendering * refactors generic includables in konova/ app into konova/templates/includes/... * fixes bug where parcels have been reused from the database due to wrong model structure * adds get_underlying_parcels() for Geometry model * adds get_underlying_parcels() for GeoReferencedMixin models * fixes bug where missing geometry would lead to an error during geometry conflict check * removes unused wfs attribute from AbstractWFSFetcher * adds/updates translations
This commit is contained in:
@@ -20,6 +20,7 @@ class GeometryAdmin(admin.ModelAdmin):
|
||||
class ParcelAdmin(admin.ModelAdmin):
|
||||
list_display = [
|
||||
"id",
|
||||
"gmrkng",
|
||||
"flr",
|
||||
"flrstck_nnr",
|
||||
"flrstck_zhlr",
|
||||
@@ -30,7 +31,6 @@ class ParcelAdmin(admin.ModelAdmin):
|
||||
class DistrictAdmin(admin.ModelAdmin):
|
||||
list_display = [
|
||||
"id",
|
||||
"gmrkng",
|
||||
"gmnd",
|
||||
"krs",
|
||||
]
|
||||
|
||||
@@ -111,12 +111,12 @@ class Geometry(BaseResource):
|
||||
for result in fetched_parcels:
|
||||
fetched_parcel = result[typename]
|
||||
parcel_obj = Parcel.objects.get_or_create(
|
||||
gmrkng=fetched_parcel["ave:gemarkung"],
|
||||
flr=fetched_parcel["ave:flur"],
|
||||
flrstck_nnr=fetched_parcel['ave:flstnrnen'],
|
||||
flrstck_zhlr=fetched_parcel['ave:flstnrzae'],
|
||||
)[0]
|
||||
district = District.objects.get_or_create(
|
||||
gmrkng=fetched_parcel["ave:gemarkung"],
|
||||
gmnd=fetched_parcel["ave:gemeinde"],
|
||||
krs=fetched_parcel["ave:kreis"],
|
||||
)[0]
|
||||
@@ -127,6 +127,20 @@ class Geometry(BaseResource):
|
||||
|
||||
self.parcels.set(underlying_parcels)
|
||||
|
||||
def get_underlying_parcels(self):
|
||||
""" Getter for related parcels and their districts
|
||||
|
||||
Returns:
|
||||
parcels (QuerySet): The related parcels as queryset
|
||||
"""
|
||||
parcels = self.parcels.all().prefetch_related(
|
||||
"district"
|
||||
).order_by(
|
||||
"gmrkng",
|
||||
)
|
||||
|
||||
return parcels
|
||||
|
||||
|
||||
class GeometryConflict(UuidModel):
|
||||
"""
|
||||
|
||||
@@ -420,13 +420,29 @@ class GeoReferencedMixin(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def _set_geometry_conflict_message(self, request: HttpRequest):
|
||||
def get_underlying_parcels(self):
|
||||
""" Getter for related parcels
|
||||
|
||||
Returns:
|
||||
parcels (Iterable): An empty list or a Queryset
|
||||
"""
|
||||
if self.geometry is not None:
|
||||
return self.geometry.get_underlying_parcels()
|
||||
else:
|
||||
return []
|
||||
|
||||
def set_geometry_conflict_message(self, request: HttpRequest):
|
||||
if self.geometry is None:
|
||||
return request
|
||||
|
||||
instance_objs = []
|
||||
add_message = False
|
||||
conflicts = self.geometry.conflicts_geometries.all()
|
||||
|
||||
for conflict in conflicts:
|
||||
instance_objs += conflict.affected_geometry.get_data_objects()
|
||||
add_message = True
|
||||
|
||||
conflicts = self.geometry.conflicted_by_geometries.all()
|
||||
for conflict in conflicts:
|
||||
instance_objs += conflict.conflicting_geometry.get_data_objects()
|
||||
|
||||
@@ -24,6 +24,12 @@ class Parcel(UuidModel):
|
||||
"""
|
||||
geometries = models.ManyToManyField("konova.Geometry", related_name="parcels", blank=True)
|
||||
district = models.ForeignKey("konova.District", on_delete=models.SET_NULL, null=True, blank=True, related_name="parcels")
|
||||
gmrkng = models.CharField(
|
||||
max_length=1000,
|
||||
help_text="Gemarkung",
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
flrstck_nnr = models.CharField(
|
||||
max_length=1000,
|
||||
help_text="Flurstücksnenner",
|
||||
@@ -45,7 +51,7 @@ class Parcel(UuidModel):
|
||||
updated_on = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.flr} | {self.flrstck_nnr} | {self.flrstck_zhlr}"
|
||||
return f"{self.gmrkng} | {self.flr} | {self.flrstck_zhlr} | {self.flrstck_nnr}"
|
||||
|
||||
|
||||
class District(UuidModel):
|
||||
@@ -56,12 +62,6 @@ class District(UuidModel):
|
||||
District.
|
||||
|
||||
"""
|
||||
gmrkng = models.CharField(
|
||||
max_length=1000,
|
||||
help_text="Gemarkung",
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
gmnd = models.CharField(
|
||||
max_length=1000,
|
||||
help_text="Gemeinde",
|
||||
@@ -76,4 +76,4 @@ class District(UuidModel):
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gmrkng} | {self.gmnd} | {self.krs}"
|
||||
return f"{self.gmnd} | {self.krs}"
|
||||
|
||||
29
konova/templates/konova/includes/parcels.html
Normal file
29
konova/templates/konova/includes/parcels.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{% load i18n %}
|
||||
<div>
|
||||
<h3>{% trans 'Spatial reference' %}</h3>
|
||||
</div>
|
||||
<div class="table-container w-100 scroll-300">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{% trans 'Kreis' %}</th>
|
||||
<th scope="col">{% trans 'Gemarkung' %}</th>
|
||||
<th scope="col">{% trans 'Parcel' %}</th>
|
||||
<th scope="col">{% trans 'Parcel counter' %}</th>
|
||||
<th scope="col">{% trans 'Parcel number' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for parcel in parcels %}
|
||||
<tr>
|
||||
<td>{{parcel.district.krs|default_if_none:"-"}}</td>
|
||||
<td>{{parcel.gmrkng|default_if_none:"-"}}</td>
|
||||
<td>{{parcel.flr|default_if_none:"-"}}</td>
|
||||
<td>{{parcel.flrstck_zhlr|default_if_none:"-"}}</td>
|
||||
<td>{{parcel.flrstck_nnr|default_if_none:"-"}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -22,7 +22,6 @@ class AbstractWFSFetcher:
|
||||
# base_url represents not the capabilities url but the parameter-free base url
|
||||
base_url = None
|
||||
version = None
|
||||
wfs = None
|
||||
auth_user = None
|
||||
auth_pw = None
|
||||
auth_digest_obj = None
|
||||
|
||||
Reference in New Issue
Block a user