|
|
|
|
@ -1,12 +1,15 @@
|
|
|
|
|
import os
|
|
|
|
|
import io
|
|
|
|
|
import debugpy
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
import pandas as pd
|
|
|
|
|
from flask import Flask, request, render_template, redirect, url_for, flash
|
|
|
|
|
from werkzeug.utils import secure_filename
|
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
from flask import Flask, request, render_template, redirect, url_for, flash, Response
|
|
|
|
|
from werkzeug.utils import secure_filename
|
|
|
|
|
|
|
|
|
|
from database import get_db_connection
|
|
|
|
|
from flask import Response
|
|
|
|
|
import io
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env_path = "./.env"
|
|
|
|
|
load_dotenv(env_path)
|
|
|
|
|
@ -82,6 +85,62 @@ def download_excel():
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def extrapolate_vervaldatum(vervaldatum, uom, frequentie, extrapolate_years):
|
|
|
|
|
today = pd.Timestamp.today().normalize()
|
|
|
|
|
vervaldatum = pd.to_datetime(vervaldatum, errors="coerce")
|
|
|
|
|
|
|
|
|
|
result = []
|
|
|
|
|
for i in range(extrapolate_years + 1):
|
|
|
|
|
if uom == "D": # Dagelijks
|
|
|
|
|
months_to_add = round(frequentie * i / 30.44)
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(months=months_to_add)
|
|
|
|
|
# new_date = vervaldatum + pd.DateOffset(days=frequentie * i)
|
|
|
|
|
elif uom == "M": # Maandelijks
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(months=int(frequentie * i))
|
|
|
|
|
elif uom == "Y": # Jaarlijks
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(years=int(frequentie * i))
|
|
|
|
|
else:
|
|
|
|
|
continue # Onbekende UOM, overslaan
|
|
|
|
|
|
|
|
|
|
if new_date <= today + pd.DateOffset(years=extrapolate_years):
|
|
|
|
|
result.append(new_date.strftime("%Y-%m-%d"))
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def extrapolate_vervaldatum_assheet(vervaldatum, uom, frequentie, extrapolate_years):
|
|
|
|
|
today = pd.Timestamp.today().normalize()
|
|
|
|
|
vervaldatum = pd.to_datetime(vervaldatum, errors="coerce")
|
|
|
|
|
|
|
|
|
|
result = []
|
|
|
|
|
for i in range(extrapolate_years + 1):
|
|
|
|
|
if uom == "D": # Dagelijks
|
|
|
|
|
years_to_add = (frequentie * i) / 365 # Omrekenen naar jaren
|
|
|
|
|
# Afronden naar het dichtstbijzijnde jaar
|
|
|
|
|
rounded_years = round(years_to_add)
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(years=rounded_years)
|
|
|
|
|
|
|
|
|
|
elif uom == "M": # Maandelijks
|
|
|
|
|
years_to_add = (frequentie * i) / 12 # Omrekenen naar jaren
|
|
|
|
|
# Afronden naar het dichtstbijzijnde jaar
|
|
|
|
|
rounded_years = round(years_to_add)
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(years=rounded_years)
|
|
|
|
|
|
|
|
|
|
elif uom == "Y": # Jaarlijks
|
|
|
|
|
# Afronden naar het dichtstbijzijnde jaar
|
|
|
|
|
rounded_years = round(frequentie * i)
|
|
|
|
|
new_date = vervaldatum + pd.DateOffset(years=rounded_years)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
continue # Onbekende UOM, overslaan
|
|
|
|
|
|
|
|
|
|
# Controle of de nieuwe datum binnen het bereik valt
|
|
|
|
|
if new_date <= today + pd.DateOffset(years=extrapolate_years):
|
|
|
|
|
result.append(new_date.strftime("%Y-%m-%d"))
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getextrapolation(extrapolateYears):
|
|
|
|
|
conn, cursor = get_db_connection()
|
|
|
|
|
|
|
|
|
|
@ -119,24 +178,25 @@ def getextrapolation(extrapolateYears):
|
|
|
|
|
|
|
|
|
|
result = []
|
|
|
|
|
for row in raw_data:
|
|
|
|
|
vervaldatum = row.get("Vervaldatum")
|
|
|
|
|
|
|
|
|
|
vervaldatum = pd.to_datetime(vervaldatum, errors="coerce")
|
|
|
|
|
|
|
|
|
|
if pd.notna(vervaldatum) and vervaldatum < today:
|
|
|
|
|
vervaldatum = today # Zet op vandaag
|
|
|
|
|
vervaldatum = row.get("Vervaldatum")
|
|
|
|
|
uom = row.get("UOM")
|
|
|
|
|
frequentie = row.get("Frequentie", 0)
|
|
|
|
|
|
|
|
|
|
for i in range(extrapolateYears + 1):
|
|
|
|
|
new_row = row.copy()
|
|
|
|
|
if vervaldatum:
|
|
|
|
|
extrapolated_dates = extrapolate_vervaldatum(
|
|
|
|
|
vervaldatum, uom, frequentie, extrapolateYears)
|
|
|
|
|
|
|
|
|
|
if pd.notna(vervaldatum):
|
|
|
|
|
new_row["Vervaldatum"] = (
|
|
|
|
|
vervaldatum + pd.DateOffset(years=i)
|
|
|
|
|
).strftime("%Y-%m-%d")
|
|
|
|
|
else:
|
|
|
|
|
new_row["Vervaldatum"] = None
|
|
|
|
|
for date in extrapolated_dates:
|
|
|
|
|
new_row = row.copy()
|
|
|
|
|
new_row["Vervaldatum"] = date
|
|
|
|
|
|
|
|
|
|
result.append(new_row)
|
|
|
|
|
new_row["Overtijd"] = ""
|
|
|
|
|
if pd.to_datetime(date) < today:
|
|
|
|
|
new_row["Overtijd"] = "ja"
|
|
|
|
|
else:
|
|
|
|
|
new_row["Overtijd"] = "Nee"
|
|
|
|
|
result.append(new_row)
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
@ -204,5 +264,9 @@ def process_excel(filepath):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
if os.getenv("FLASK_DEBUG") == "1":
|
|
|
|
|
print("⏳ Wachten op debugger...")
|
|
|
|
|
debugpy.listen(("0.0.0.0", 5678)) # Luistert op poort 5678
|
|
|
|
|
debugpy.wait_for_client() # Wacht op een debugger
|
|
|
|
|
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
|
|
|
|
app.run(debug=True)
|
|
|
|
|
|