Merge pull request '439_Wartungskommando_Nachverschneidung' (#446) from 439_Wartungskommando_Nachverschneidung into master
Reviewed-on: #446
This commit is contained in:
		
						commit
						439a211e01
					
				@ -34,7 +34,9 @@ class Command(BaseKonovaCommand):
 | 
			
		||||
    def recalculate_parcels(self, options: dict):
 | 
			
		||||
        force_all = options.get("force_all", False)
 | 
			
		||||
 | 
			
		||||
        geometry_objects = Geometry.objects.all()
 | 
			
		||||
        geometry_objects = Geometry.objects.all().exclude(
 | 
			
		||||
            geom=None
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if not force_all:
 | 
			
		||||
            # Fetch all intersections
 | 
			
		||||
@ -46,16 +48,17 @@ class Command(BaseKonovaCommand):
 | 
			
		||||
                "geometry__id",
 | 
			
		||||
                flat=True
 | 
			
		||||
            )
 | 
			
		||||
            # Filter those geometries out (they have intersections and do not need to be processed)
 | 
			
		||||
            geometry_objects = geometry_objects.exclude(
 | 
			
		||||
            intersected_geom_objs = Geometry.objects.filter(
 | 
			
		||||
                id__in=geom_with_intersection_ids
 | 
			
		||||
            )
 | 
			
		||||
            # Filter those geometries out (they have intersections and do not need to be processed)
 | 
			
		||||
            geometry_objects = geometry_objects.difference(intersected_geom_objs)
 | 
			
		||||
 | 
			
		||||
        self._write_warning("=== Update parcels and districts ===")
 | 
			
		||||
        # Order geometries by size to process smaller once at first
 | 
			
		||||
        geometries = geometry_objects.exclude(
 | 
			
		||||
            geom=None
 | 
			
		||||
        ).annotate(area=Area("geom")).order_by(
 | 
			
		||||
        geometries = geometry_objects.annotate(
 | 
			
		||||
            area=Area("geom")
 | 
			
		||||
        ).order_by(
 | 
			
		||||
            'area'
 | 
			
		||||
        )
 | 
			
		||||
        self._write_warning(f"Process parcels for {geometries.count()} geometry entries now ...")
 | 
			
		||||
 | 
			
		||||
@ -159,7 +159,6 @@ class Parcel(UuidModel):
 | 
			
		||||
        return f"{self.parcel_group} | {self.flr} | {self.flrstck_zhlr} | {self.flrstck_nnr}"
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    @transaction.atomic
 | 
			
		||||
    def make_unique(cls, **kwargs):
 | 
			
		||||
        """ Checks for duplicates of a Parcel, choose a (now) unique one,
 | 
			
		||||
        repairs relations for ParcelIntersection and removes duplicates.
 | 
			
		||||
@ -188,6 +187,7 @@ class Parcel(UuidModel):
 | 
			
		||||
        intersection_objs = ParcelIntersection.objects.filter(
 | 
			
		||||
            parcel__in=parcel_objs
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Change each intersection, so they point on the 'true one' parcel from now on
 | 
			
		||||
        for intersection in intersection_objs:
 | 
			
		||||
            intersection.parcel = unique_parcel
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user