|
|
|
@ -164,6 +164,8 @@ def show_result():
|
|
|
|
today = datetime.today().strftime('%Y-%m-%d')
|
|
|
|
today = datetime.today().strftime('%Y-%m-%d')
|
|
|
|
|
|
|
|
|
|
|
|
x_str = request.form.get("selected_date")
|
|
|
|
x_str = request.form.get("selected_date")
|
|
|
|
|
|
|
|
keuze_dagen_omrekenen = request.form.get(
|
|
|
|
|
|
|
|
'keuze_dagen_omrekenen', 'D') # Default is "D" (Dagen)
|
|
|
|
|
|
|
|
|
|
|
|
if x_str:
|
|
|
|
if x_str:
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
@ -173,7 +175,7 @@ def show_result():
|
|
|
|
return redirect(url_for("upload_file"))
|
|
|
|
return redirect(url_for("upload_file"))
|
|
|
|
|
|
|
|
|
|
|
|
# **Met datum -> gebruik extrapolatie**
|
|
|
|
# **Met datum -> gebruik extrapolatie**
|
|
|
|
result = get_extrapolation(x)
|
|
|
|
result = get_extrapolation(x, keuze_dagen_omrekenen)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
# **Zonder datum -> toon ruwe databasegegevens**
|
|
|
|
# **Zonder datum -> toon ruwe databasegegevens**
|
|
|
|
with sqlite3.connect(DATABASE) as conn:
|
|
|
|
with sqlite3.connect(DATABASE) as conn:
|
|
|
|
@ -185,13 +187,14 @@ def show_result():
|
|
|
|
result = [dict(zip(columns, row))
|
|
|
|
result = [dict(zip(columns, row))
|
|
|
|
for row in rows] # Zet om naar dicts voor weergave
|
|
|
|
for row in rows] # Zet om naar dicts voor weergave
|
|
|
|
|
|
|
|
|
|
|
|
return render_template("resultaat.html", result=result, selected_date=x_str, today=today)
|
|
|
|
return render_template("resultaat.html", result=result, selected_date=x_str, today=today,
|
|
|
|
|
|
|
|
keuze_dagen_omrekenen=keuze_dagen_omrekenen)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_extrapolation(x):
|
|
|
|
def get_extrapolation(x, keuze_dagen_omrekenen):
|
|
|
|
if x is None:
|
|
|
|
if x is None:
|
|
|
|
return []
|
|
|
|
return []
|
|
|
|
|
|
|
|
print(f"keuze {keuze_dagen_omrekenen}")
|
|
|
|
today = datetime.today()
|
|
|
|
today = datetime.today()
|
|
|
|
with sqlite3.connect(DATABASE) as conn:
|
|
|
|
with sqlite3.connect(DATABASE) as conn:
|
|
|
|
cursor = conn.cursor()
|
|
|
|
cursor = conn.cursor()
|
|
|
|
@ -205,27 +208,36 @@ def get_extrapolation(x):
|
|
|
|
|
|
|
|
|
|
|
|
for row in raw_data:
|
|
|
|
for row in raw_data:
|
|
|
|
vervaldatum = row.get("Vervaldatum")
|
|
|
|
vervaldatum = row.get("Vervaldatum")
|
|
|
|
|
|
|
|
|
|
|
|
uom = row.get("UOM")
|
|
|
|
uom = row.get("UOM")
|
|
|
|
frequentie = row.get("Frequentie", 0)
|
|
|
|
frequentie = row.get("Frequentie", 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(f"processing {vervaldatum} met {frequentie} uom{uom}")
|
|
|
|
if vervaldatum:
|
|
|
|
if vervaldatum:
|
|
|
|
extrapolated_dates = extrapolate_vervaldatum(
|
|
|
|
extrapolated_dates = extrapolate_vervaldatum(
|
|
|
|
vervaldatum, uom, frequentie, x)
|
|
|
|
vervaldatum, uom, frequentie, x, keuze_dagen_omrekenen)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not extrapolated_dates:
|
|
|
|
|
|
|
|
print(
|
|
|
|
|
|
|
|
f"Geen extrapolatie-data voor vervaldatum: {vervaldatum}")
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
print(f"Aantal extrapolaties: {len(extrapolated_dates)}")
|
|
|
|
|
|
|
|
|
|
|
|
for i, date in enumerate(extrapolated_dates):
|
|
|
|
for i, date in enumerate(extrapolated_dates):
|
|
|
|
if date:
|
|
|
|
|
|
|
|
new_row = row.copy()
|
|
|
|
new_row = row.copy()
|
|
|
|
begindatum = pd.to_datetime(date)
|
|
|
|
begindatum = pd.to_datetime(date)
|
|
|
|
new_row["Overtijd"] = "Ja" if begindatum.date(
|
|
|
|
new_row["Overtijd"] = "Ja" if begindatum.date(
|
|
|
|
) <= today.date() else "Nee"
|
|
|
|
) <= today.date() else "Nee"
|
|
|
|
|
|
|
|
|
|
|
|
new_row["Begindatum"] = date
|
|
|
|
new_row["Begindatum"] = date
|
|
|
|
|
|
|
|
print(f"Added row: {date}")
|
|
|
|
result.append(new_row)
|
|
|
|
result.append(new_row)
|
|
|
|
|
|
|
|
|
|
|
|
return remove_duplicates(result) # Dubbele records verwijderen
|
|
|
|
return remove_duplicates(result) # Dubbele records verwijderen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def remove_duplicates(data, unique_keys=None):
|
|
|
|
def remove_duplicates(data, unique_keys=None):
|
|
|
|
|
|
|
|
print("removing duplicates")
|
|
|
|
if not data:
|
|
|
|
if not data:
|
|
|
|
return data
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
@ -250,7 +262,8 @@ def remove_duplicates(data, unique_keys=None):
|
|
|
|
return unique_data
|
|
|
|
return unique_data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x):
|
|
|
|
def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x, keuze_dagen_omrekenen="D"):
|
|
|
|
|
|
|
|
print(f"keuze {keuze_dagen_omrekenen}")
|
|
|
|
vervaldatum = pd.to_datetime(str(vervaldatum), errors="coerce")
|
|
|
|
vervaldatum = pd.to_datetime(str(vervaldatum), errors="coerce")
|
|
|
|
if pd.isna(vervaldatum):
|
|
|
|
if pd.isna(vervaldatum):
|
|
|
|
return []
|
|
|
|
return []
|
|
|
|
@ -258,10 +271,19 @@ def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x):
|
|
|
|
result = []
|
|
|
|
result = []
|
|
|
|
while vervaldatum <= x:
|
|
|
|
while vervaldatum <= x:
|
|
|
|
result.append(vervaldatum.strftime("%Y-%m-%d"))
|
|
|
|
result.append(vervaldatum.strftime("%Y-%m-%d"))
|
|
|
|
|
|
|
|
|
|
|
|
if uom == "D":
|
|
|
|
if uom == "D":
|
|
|
|
# vervaldatum += pd.DateOffset(days=frequentie)
|
|
|
|
if keuze_dagen_omrekenen == "D":
|
|
|
|
# vervaldatum += pd.DateOffset(weeks=frequentie // 7)
|
|
|
|
vervaldatum += pd.DateOffset(days=frequentie)
|
|
|
|
vervaldatum += pd.DateOffset(months=frequentie // 30)
|
|
|
|
elif keuze_dagen_omrekenen == "W":
|
|
|
|
|
|
|
|
vervaldatum += pd.DateOffset(weeks=frequentie//7)
|
|
|
|
|
|
|
|
elif keuze_dagen_omrekenen == "M":
|
|
|
|
|
|
|
|
vervaldatum += pd.DateOffset(months=frequentie//30)
|
|
|
|
|
|
|
|
# Als er nog restfrequentie is (zoals 28 dagen), voeg dan extra maand toe.
|
|
|
|
|
|
|
|
if frequentie % 30 > 0:
|
|
|
|
|
|
|
|
vervaldatum += pd.DateOffset(months=1)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
break # Onbekende keuze, stop de loop
|
|
|
|
elif uom == "W":
|
|
|
|
elif uom == "W":
|
|
|
|
vervaldatum += pd.DateOffset(weeks=frequentie)
|
|
|
|
vervaldatum += pd.DateOffset(weeks=frequentie)
|
|
|
|
elif uom == "M":
|
|
|
|
elif uom == "M":
|
|
|
|
|