From bca2e7b143be3e7969066c4f543bd16e583e4e13 Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Thu, 3 Aug 2023 14:50:39 +0200 Subject: [PATCH] Enforce that sats_received is in orders --- camisatoshi_wordpress_reports/controllers.py | 29 +++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/camisatoshi_wordpress_reports/controllers.py b/camisatoshi_wordpress_reports/controllers.py index 92a7e4c..8c72d62 100644 --- a/camisatoshi_wordpress_reports/controllers.py +++ b/camisatoshi_wordpress_reports/controllers.py @@ -39,7 +39,6 @@ def check_health(): def generate_um_report(start_date: str, end_date: str): - start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d").isoformat() end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d").isoformat() @@ -63,9 +62,18 @@ def generate_um_report(start_date: str, end_date: str): relevant_orders = filter_orders_by_sku( orders_in_date_range, skus=skus_to_keep ) - logger.info(f"Kept {len(relevant_orders)} orders.") + logger.info("Checking if all orders have the sats_received entry filled in.") + orders_without_sats_received = find_orders_without_sats_received(relevant_orders) + + if orders_without_sats_received: + logger.warning( + f"There are {len(orders_without_sats_received)} orders without a properly filled sats_received entry.") + logger.warning(f"See details below.") + logger.warning(orders_without_sats_received) + raise ValueError("Not all orders have sats_received. Can't compute sats owed without that.") + # Fetch orders: # - Between specific dates # - That contain the hardcoded products @@ -84,8 +92,7 @@ def generate_um_report(start_date: str, end_date: str): # - Add metadata entry: is_settled_with_um: 1 -def filter_orders_by_sku(orders: List[Dict], skus: List[str]): - +def filter_orders_by_sku(orders: List[Dict], skus: List[str]) -> List[Dict]: filtered_orders = [] for order in orders: @@ -94,3 +101,17 @@ def filter_orders_by_sku(orders: List[Dict], skus: List[str]): filtered_orders.append(order) return filtered_orders + + +def find_orders_without_sats_received(orders: List[Dict]): + orders_without_sats_received = [] + + for order in orders: + meta_data_entries = {meta_data_entry["key"]: meta_data_entry["value"] for meta_data_entry in order["meta_data"]} + if "sats_received" not in meta_data_entries.keys(): + orders_without_sats_received.append(order) + continue + if int(meta_data_entries["sats_received"]) < 0: + orders_without_sats_received.append(order) + + return orders_without_sats_received