diff --git a/psa_car_controller/psacc/application/charging.py b/psa_car_controller/psacc/application/charging.py index 70f59a3..d75dadc 100644 --- a/psa_car_controller/psacc/application/charging.py +++ b/psa_car_controller/psacc/application/charging.py @@ -20,10 +20,10 @@ class Charging: @staticmethod def get_chargings() -> List[dict]: - conn = Database.get_db() - res = conn.execute("select * from battery ORDER BY start_at").fetchall() - conn.close() - return list(map(dict, res)) + charge_db = Database.get_all_charge() + charge_list = list(map(dict, charge_db)) + Charging._calculated_fields(charge_list) + return charge_list @staticmethod def get_battery_curve(conn, charge, car) -> List[BatteryChargeCurve]: @@ -97,3 +97,15 @@ class Charging: Charging.update_chargings(conn, last_charge, car) conn.commit() conn.close() + + @staticmethod + def _calculated_fields(charge_list: list): + for c in charge_list: + if c.get("stop_at") and c.get("start_at"): + c.update( + { + "duration_min": (c.get("stop_at") - c.get("start_at")).seconds + / 60, + "duration_str": str((c.get("stop_at") - c.get("start_at"))), + } + ) \ No newline at end of file diff --git a/psa_car_controller/psacc/repository/db.py b/psa_car_controller/psacc/repository/db.py index 65b94b1..78c9750 100644 --- a/psa_car_controller/psacc/repository/db.py +++ b/psa_car_controller/psacc/repository/db.py @@ -321,6 +321,13 @@ class Database: charges.append(Charge(**dict_key_to_lower_case(**row))) return charges + @staticmethod + def get_all_charge() -> List[Charge]: + conn = Database.get_db() + res = conn.execute("select * from battery ORDER BY start_at").fetchall() + conn.close() + return res + @staticmethod def update_charge(charge: Charge): # we don't need to update mileage, since it should be inserted at beginning of charge, diff --git a/psa_car_controller/web/figures.py b/psa_car_controller/web/figures.py index 9ec1513..1216a6b 100644 --- a/psa_car_controller/web/figures.py +++ b/psa_car_controller/web/figures.py @@ -139,6 +139,9 @@ def get_figures(car: Car): sort_by=[{'column_id': 'start_at_str', 'direction': 'desc'}], columns=[{'id': 'start_at_str', 'name': 'start at', 'type': 'datetime'}, {'id': 'stop_at_str', 'name': 'stop at', 'type': 'datetime'}, + {'id': 'duration_str', 'name': 'duration', 'type': 'text'}, + {'id': 'duration_min', 'name': 'duration (min)', 'type': 'numeric', + 'format': deepcopy(nb_format).symbol_suffix(" min").precision(0)}, {'id': 'start_level', 'name': 'start level', 'type': 'numeric'}, {'id': 'end_level', 'name': 'end level', 'type': 'numeric'}, {'id': 'co2', 'name': 'CO2', 'type': 'numeric',