Browse Source

made parsing of travel nr more robust

master
Holger Frey 2 weeks ago
parent
commit
842b96722e
  1. 18
      work_helpers/travels.py

18
work_helpers/travels.py

@ -62,6 +62,7 @@ class PrePayments: @@ -62,6 +62,7 @@ class PrePayments:
form_data.update(
{
f"Datum{index}": entry.date,
f"Euro{index}": entry.amount_localized,
f"BelegNr aus SuberX{index}": entry.superx_id,
# no field "Euro{index}"
# the automatic form calculation would not work.
@ -148,7 +149,7 @@ def _get_unique(data: pd.DataFrame, column: str) -> str | int | float: @@ -148,7 +149,7 @@ def _get_unique(data: pd.DataFrame, column: str) -> str | int | float:
return uniques[0]
def _extract_travel_number(data: pd.DataFrame, column: str) -> str:
def _parse_travel_number(data: pd.DataFrame, column: str) -> str:
belege = data[column]
travel_nr = belege.apply(
lambda x: re.search(r"(5\d{9,10})", x.replace(" ", ""))
@ -156,6 +157,14 @@ def _extract_travel_number(data: pd.DataFrame, column: str) -> str: @@ -156,6 +157,14 @@ def _extract_travel_number(data: pd.DataFrame, column: str) -> str:
match_result = travel_nr[travel_nr.first_valid_index()]
return match_result[0]
def _extract_travel_number(data: pd.DataFrame) -> str:
for column in ("BelegNr", "VorgängerBelegNr"):
try:
return _parse_travel_number(data, column)
except KeyError:
pass
msg = "Could not fint travel number, probably Obligo missing"
raise KeyError(msg)
def _read_pre_payments(file_path: Pathlike = None) -> PrePayments:
if not file_path:
@ -169,7 +178,7 @@ def _read_pre_payments(file_path: Pathlike = None) -> PrePayments: @@ -169,7 +178,7 @@ def _read_pre_payments(file_path: Pathlike = None) -> PrePayments:
converters = {field: str for field in fields}
raw_data = pd.read_excel(file_path, skiprows=3, converters=converters)
travel_nr = _extract_travel_number(raw_data, "BelegNr")
travel_nr = _extract_travel_number(raw_data)
try:
cost_center = _get_unique(raw_data, "Kostenstelle")
fonds = _get_unique(raw_data, "Fonds")
@ -179,7 +188,7 @@ def _read_pre_payments(file_path: Pathlike = None) -> PrePayments: @@ -179,7 +188,7 @@ def _read_pre_payments(file_path: Pathlike = None) -> PrePayments:
except ValueError as e:
sys.exit(str(e))
mask = raw_data["Werttyp"] == "Zahlung"
mask = raw_data["Werttyp"].isin(("Zahlung", "Rechnung"))
raw_payments = raw_data[mask].copy()
summary = (
@ -287,9 +296,10 @@ def final_payment(search_last_name: str, iso_date: str, place: str): @@ -287,9 +296,10 @@ def final_payment(search_last_name: str, iso_date: str, place: str):
rk_path = folder / f"DATE {info.travel_short}, Reisekostenabrechnung.txt"
_create_text_stub(rk_path)
year = TODAY.split("-", maxsplit=1)[0]
uka_hint_path = (
folder
/ f"HUEL UK-A {info.last_first}, Dienstreise {info.place}, Schlusszahlung.txt"
/ f"{year}-HUEL UK-A {info.last_first}, Dienstreise {info.place}, Schlusszahlung.txt"
)
huel_date = "/".join(TODAY.split("-")[::-1])

Loading…
Cancel
Save