Fix: Correctly fill refueling data for multiple refuelings per day

Problem: Both refueling forms for the same date were being filled with
refuel_1 data because the logic checked current_km value which was "0"
for both forms initially.

Solution: Track refueling form number per date using refuel_counter dict.
First refueling form gets data from "Tankováno při 1 [km]", second gets
data from "Tankováno při 2 [km]".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Docker Config Backup
2025-10-10 20:12:24 +02:00
parent f0bbc305c9
commit 8cbc9771ae

View File

@@ -51,6 +51,7 @@ class JourneybookFiller:
updates = [] updates = []
deletes = [] deletes = []
refuel_counter = {} # Track which refueling number for each date
for i, row in enumerate(table_rows): for i, row in enumerate(table_rows):
form = row.find('form') form = row.find('form')
@@ -80,7 +81,14 @@ class JourneybookFiller:
if len(matching_rows) > 0: if len(matching_rows) > 0:
# Row exists in our data - update it # Row exists in our data - update it
row_data = matching_rows.iloc[0] row_data = matching_rows.iloc[0]
update = self._prepare_update(form_data, row_data, update_mode=True, is_refueling=is_refueling_form)
# Track refueling form number for this date
refuel_num = None
if is_refueling_form:
refuel_counter[clean_date] = refuel_counter.get(clean_date, 0) + 1
refuel_num = refuel_counter[clean_date]
update = self._prepare_update(form_data, row_data, update_mode=True, is_refueling=is_refueling_form, refuel_num=refuel_num)
updates.append(update) updates.append(update)
form_type = "refueling" if is_refueling_form else "journey" form_type = "refueling" if is_refueling_form else "journey"
logger.info(f"Matched {form_type} row {i} with date {clean_date}") logger.info(f"Matched {form_type} row {i} with date {clean_date}")
@@ -185,7 +193,7 @@ class JourneybookFiller:
return form_data return form_data
def _prepare_update(self, form_data: Dict, row_data: pd.Series, update_mode: bool = True, is_refueling: bool = False) -> Dict[str, Any]: def _prepare_update(self, form_data: Dict, row_data: pd.Series, update_mode: bool = True, is_refueling: bool = False, refuel_num: int = None) -> Dict[str, Any]:
"""Prepare form data with updated values from DataFrame or for deletion """Prepare form data with updated values from DataFrame or for deletion
Args: Args:
@@ -193,6 +201,7 @@ class JourneybookFiller:
row_data: DataFrame row with journey data (None for delete) row_data: DataFrame row with journey data (None for delete)
update_mode: True to update row, False to delete row update_mode: True to update row, False to delete row
is_refueling: True if this is a refueling form, False if journey form is_refueling: True if this is a refueling form, False if journey form
refuel_num: Which refueling form this is for the date (1 or 2)
""" """
update = { update = {
"action": form_data["action"], "action": form_data["action"],
@@ -219,27 +228,17 @@ class JourneybookFiller:
# Update mode - handle refueling forms vs journey forms differently # Update mode - handle refueling forms vs journey forms differently
if is_refueling: if is_refueling:
# Refueling form - fill the km value from Tankováno při column # Refueling form - fill the km value from Tankováno při column
# We need to determine if this is refueling 1 or 2 for this date # Use refuel_num to determine which refueling data to use
# The form should have an f_km field that needs to be filled if refuel_num == 1 and "Tankováno při 1 [km]" in row_data and pd.notna(row_data["Tankováno při 1 [km]"]):
# Check if this date has refueling data in the DataFrame
if "Tankováno při 1 [km]" in row_data and pd.notna(row_data["Tankováno při 1 [km]"]):
if "f_km" in update["data"]: if "f_km" in update["data"]:
# Check if this is the first or second refueling form
current_km = update["data"].get("f_km", "0")
refuel_1_km = int(row_data["Tankováno při 1 [km]"]) refuel_1_km = int(row_data["Tankováno při 1 [km]"])
update["data"]["f_km"] = str(refuel_1_km)
# If f_km is 0 or empty, fill with refuel 1 logger.info(f"Filling refuel 1 km: f_km={refuel_1_km}")
if current_km == "0" or current_km == "": elif refuel_num == 2 and "Tankováno při 2 [km]" in row_data and pd.notna(row_data["Tankováno při 2 [km]"]):
update["data"]["f_km"] = str(refuel_1_km) if "f_km" in update["data"]:
logger.info(f"Filling refuel km: f_km={refuel_1_km}") refuel_2_km = int(row_data["Tankováno při 2 [km]"])
# Otherwise check if there's a second refueling update["data"]["f_km"] = str(refuel_2_km)
elif "Tankováno při 2 [km]" in row_data and pd.notna(row_data["Tankováno při 2 [km]"]): logger.info(f"Filling refuel 2 km: f_km={refuel_2_km}")
refuel_2_km = int(row_data["Tankováno při 2 [km]"])
if int(current_km) != refuel_1_km:
# This might be the second refueling form
update["data"]["f_km"] = str(refuel_2_km)
logger.info(f"Filling refuel 2 km: f_km={refuel_2_km}")
else: else:
# Journey form - fill with data from DataFrame # Journey form - fill with data from DataFrame
# Set BOTH f_cil_km (end km) and f_ujeto (distance traveled) # Set BOTH f_cil_km (end km) and f_ujeto (distance traveled)