celery-integration
peter.fong 9 months ago
parent d724316c4b
commit 19c9584139

Binary file not shown.

@ -164,6 +164,8 @@ def show_result():
today = datetime.today().strftime('%Y-%m-%d')
x_str = request.form.get("selected_date")
keuze_dagen_omrekenen = request.form.get(
'keuze_dagen_omrekenen', 'D') # Default is "D" (Dagen)
if x_str:
try:
@ -173,7 +175,7 @@ def show_result():
return redirect(url_for("upload_file"))
# **Met datum -> gebruik extrapolatie**
result = get_extrapolation(x)
result = get_extrapolation(x, keuze_dagen_omrekenen)
else:
# **Zonder datum -> toon ruwe databasegegevens**
with sqlite3.connect(DATABASE) as conn:
@ -185,13 +187,14 @@ def show_result():
result = [dict(zip(columns, row))
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:
return []
print(f"keuze {keuze_dagen_omrekenen}")
today = datetime.today()
with sqlite3.connect(DATABASE) as conn:
cursor = conn.cursor()
@ -205,27 +208,36 @@ def get_extrapolation(x):
for row in raw_data:
vervaldatum = row.get("Vervaldatum")
uom = row.get("UOM")
frequentie = row.get("Frequentie", 0)
print(f"processing {vervaldatum} met {frequentie} uom{uom}")
if 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):
if date:
new_row = row.copy()
begindatum = pd.to_datetime(date)
new_row["Overtijd"] = "Ja" if begindatum.date(
) <= today.date() else "Nee"
new_row["Begindatum"] = date
print(f"Added row: {date}")
result.append(new_row)
return remove_duplicates(result) # Dubbele records verwijderen
def remove_duplicates(data, unique_keys=None):
print("removing duplicates")
if not data:
return data
@ -250,7 +262,8 @@ def remove_duplicates(data, unique_keys=None):
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")
if pd.isna(vervaldatum):
return []
@ -258,10 +271,19 @@ def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x):
result = []
while vervaldatum <= x:
result.append(vervaldatum.strftime("%Y-%m-%d"))
if uom == "D":
# vervaldatum += pd.DateOffset(days=frequentie)
# vervaldatum += pd.DateOffset(weeks=frequentie // 7)
if keuze_dagen_omrekenen == "D":
vervaldatum += pd.DateOffset(days=frequentie)
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":
vervaldatum += pd.DateOffset(weeks=frequentie)
elif uom == "M":

@ -22,7 +22,24 @@
<div class="form-group">
<label for="datepicker">Selecteer een extrapoleer cutoff ddatum:</label>
<input type="text" id="datepicker" name="selected_date" value="{{ selected_date or today }}" class="form-control w-auto d-inline">
<div class="form-group">
<label>Keuze voor frequentie omrekenen (indien UOM D):</label><br>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="keuze_dagen_omrekenen" id="keuze_dagen_omrekenen_D" value="D"
{% if keuze_dagen_omrekenen == "D" %} checked {% endif %}>
<label class="form-check-label" for="keuze_dagen_omrekenen_D">Dagen</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="keuze_dagen_omrekenen" id="keuze_dagen_omrekenen_W" value="W"
{% if keuze_dagen_omrekenen == "W" %} checked {% endif %}>
<label class="form-check-label" for="keuze_dagen_omrekenen_W">Weken</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="keuze_dagen_omrekenen" id="keuze_dagen_omrekenen_M" value="M"
{% if keuze_dagen_omrekenen == "M" %} checked {% endif %}>
<label class="form-check-label" for="keuze_dagen_omrekenen_M">Maanden</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Extrapoleer!</button>
</div>
</form>

Loading…
Cancel
Save