Move all to subDir sustApp
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
# import the library and its Marker clusterization service
|
||||
import folium
|
||||
from database import SessionLocal
|
||||
from folium.plugins import MarkerCluster
|
||||
import models
|
||||
import logging
|
||||
from geopy.geocoders import Bing
|
||||
from sqlalchemy import *
|
||||
import logging
|
||||
import webbrowser
|
||||
import re
|
||||
|
||||
|
||||
def payment_slip_delivered(member: models.Members, year: int):
|
||||
return db.query(models.Deliveries.delivery_date)\
|
||||
.filter(models.Deliveries.member_id == member.id, extract('year', models.Deliveries.delivery_date) == year)\
|
||||
.count()
|
||||
|
||||
def payment_made(member: models.Members, year: int):
|
||||
return db.query(models.Payments.payment_year)\
|
||||
.filter(models.Payments.member_id == member.id, extract('year', models.Payments.payment_year) == year)\
|
||||
.count()
|
||||
|
||||
def update_missing_locs():
|
||||
members = db.query(models.Members).filter(models.Members.member_geo_latitude == None).all()
|
||||
|
||||
for member in members:
|
||||
address = f'{member.member_street} {member.member_streetnumber}, {member.member_zip} {member.member_city}, Austria'
|
||||
location = geolocator.geocode(address)
|
||||
|
||||
if location != None:
|
||||
#member.member_coordinates = [location.latitude, location.longitude]
|
||||
member.member_geo_latitude = location.latitude
|
||||
member.member_geo_longitude = location.longitude
|
||||
|
||||
logger.info(f'Member: {member.id} updated with geo-coordinates')
|
||||
else:
|
||||
logger.info(f'Member: {member.id} address couldn\'t be found')
|
||||
|
||||
db.commit()
|
||||
|
||||
def checkEmail(email):
|
||||
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
||||
|
||||
if email is None: return False
|
||||
|
||||
# pass the regular expression
|
||||
# and the string into the fullmatch() method
|
||||
if(re.fullmatch(regex, email)):
|
||||
return True
|
||||
|
||||
else:
|
||||
return False
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
#geolocator = Nominatim(user_agent="sust", timeout=10)
|
||||
geolocator = Bing(api_key='ApbTfEJ024nQCu6DC7TPIlqAcRMfZT8lPjAyMnVRcmo9rqxde5x-IS4fW-nGu0FI')
|
||||
|
||||
db = SessionLocal()
|
||||
#models.Base.metadata.create_all(bind=engine)
|
||||
|
||||
update_missing_locs()
|
||||
|
||||
#members = db.query(models.Members).filter(models.Members.id.in_([2,4,5,6])).all()
|
||||
|
||||
#TODO try
|
||||
""" members = Members.query.all()
|
||||
for member in members:
|
||||
for delivery in members.deliveries:
|
||||
print(f'{delivery.delivery_date}') """
|
||||
|
||||
members = db.query(models.Members.member_geo_latitude,
|
||||
models.Members.member_geo_longitude,
|
||||
models.Members.member_firstname,
|
||||
models.Members.member_surname,
|
||||
models.Members.id,
|
||||
models.Members.member_email)\
|
||||
.filter(models.Members.member_geo_latitude != None, models.Members.member_count != 0)\
|
||||
.all()
|
||||
|
||||
# .join(models.Members.member_deliveries)\
|
||||
# Create a map object and center it to the avarage coordinates to m
|
||||
coords = [48.284793, 13.880550]
|
||||
map = folium.Map(location=coords, zoom_start = 13)
|
||||
|
||||
# if the points are too close to each other, cluster them, create a cluster overlay with MarkerCluster, add to m
|
||||
marker_cluster = MarkerCluster().add_to(map)
|
||||
|
||||
# draw the markers and assign popup and hover texts
|
||||
# add the markers the the cluster layers so that they are automatically clustered
|
||||
#folium.Marker([lat, lon], popup=str(name)+': '+color+'-'+str(clname), icon=folium.Icon(color='black',icon_color='#FFFF00')).add_to(feature_group)
|
||||
for member in members:
|
||||
if member.member_geo_latitude != None and member.member_geo_latitude != None:
|
||||
delivered = payment_slip_delivered(member, 2024)
|
||||
paid = payment_made(member, 2024)
|
||||
|
||||
iconColor = "blue"
|
||||
hasMail = checkEmail(member.member_email)
|
||||
if not paid:
|
||||
iconColor = "red"
|
||||
elif delivered:
|
||||
iconColor = "green"
|
||||
elif hasMail:
|
||||
iconColor = "orange"
|
||||
|
||||
# if hasMail and delivered:
|
||||
# iconColor = "darkgreen"
|
||||
|
||||
#delivered = member.member_deliveries
|
||||
location = (member.member_geo_latitude, member.member_geo_longitude)
|
||||
folium.Marker(location=location,
|
||||
popup=f'{member.member_firstname} {member.member_surname}',
|
||||
tooltip=f'\nZugestellt & bezahlt' if (delivered and paid) else 'Nicht bezahlt' if not paid else 'Nicht zugestellt',
|
||||
icon=folium.Icon(color=iconColor))\
|
||||
.add_to(marker_cluster)
|
||||
|
||||
#Display the map
|
||||
map.save("map.html")
|
||||
webbrowser.open("map.html")
|
||||
|
||||
#func.count(models.Members.member_deliveries).label("count"))\
|
||||
Reference in New Issue
Block a user