|
|
|
|
@ -1,12 +1,14 @@
|
|
|
|
|
from io import BytesIO
|
|
|
|
|
|
|
|
|
|
import pandas as pd
|
|
|
|
|
from django.contrib.gis.measure import Distance
|
|
|
|
|
from django.db.models import F
|
|
|
|
|
|
|
|
|
|
from postamates.settings import POINT_RADIUS
|
|
|
|
|
from service import models
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PointService:
|
|
|
|
|
|
|
|
|
|
def update_fact(self, postamat_id: str, fact: int):
|
|
|
|
|
qs = self.get_point_by_postamat_id(postamat_id)
|
|
|
|
|
qs.update(**{'fact': fact})
|
|
|
|
|
@ -15,6 +17,22 @@ class PointService:
|
|
|
|
|
qs = self.get_point_by_id(point_id)
|
|
|
|
|
qs.update(**{'postamat_id': postamat_id})
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def update_points_in_radius(qs: models.PlacementPoint, new_status: str):
|
|
|
|
|
for point in qs:
|
|
|
|
|
if new_status == 'Installation':
|
|
|
|
|
if point.status == 'Pending':
|
|
|
|
|
pnts = models.PlacementPoint.objects.filter(
|
|
|
|
|
geometry__distance_lt=(point.geometry, Distance(m=POINT_RADIUS)),
|
|
|
|
|
)
|
|
|
|
|
pnts.update(target_post_cnt=F('target_post_cnt') + 1)
|
|
|
|
|
elif new_status == 'Cancelled' or new_status == 'Pending':
|
|
|
|
|
if point.status == 'Installation':
|
|
|
|
|
pnts = models.PlacementPoint.objects.filter(
|
|
|
|
|
geometry__distance_lt=(point.geometry, Distance(m=POINT_RADIUS)),
|
|
|
|
|
)
|
|
|
|
|
pnts.update(target_post_cnt=F('target_post_cnt') - 1 if F('target_post_cnt') != 0 else 0)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def update_status(qs: models.PlacementPoint, new_status: str) -> models.PlacementPoint:
|
|
|
|
|
qs.update(**{'status': new_status})
|
|
|
|
|
|