diff --git a/camisatoshi_wordpress_reports/controllers.py b/camisatoshi_wordpress_reports/controllers.py index 54ffe14..e248acd 100644 --- a/camisatoshi_wordpress_reports/controllers.py +++ b/camisatoshi_wordpress_reports/controllers.py @@ -52,9 +52,7 @@ def generate_um_report(start_date: datetime.datetime, end_date: datetime.datetim "status": "processing,completed", }, ).json() - orders_in_date_range = [Order.from_api_response(order_raw_data) for order_raw_data in orders_in_date_range] - logger.info(f"Received {len(orders_in_date_range)} orders.") skus_to_keep = ["TEE-05-BBO-BLACK"] @@ -67,15 +65,17 @@ def generate_um_report(start_date: datetime.datetime, end_date: datetime.datetim 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.") - logger.info("Success, all orders have sats_received filled in.") + + logger.info("Removing settled orders.") + unsettled_orders = filter_settled_orders(relevant_orders) + logger.info(f"Kept {len(unsettled_orders)} unsettled orders.") # Fetch orders: # - Between specific dates # - That contain the hardcoded products @@ -114,3 +114,13 @@ def find_orders_without_sats_received(orders: List[Order]) -> List[Order]: continue return orders_without_sats_received + + +def filter_settled_orders(orders: List[Order]) -> List[Order]: + unsettled_orders = [] + + for order in orders: + if not order.is_settled_with_um(): + unsettled_orders.append(order) + + return unsettled_orders diff --git a/camisatoshi_wordpress_reports/order.py b/camisatoshi_wordpress_reports/order.py index 246200f..e7783ef 100644 --- a/camisatoshi_wordpress_reports/order.py +++ b/camisatoshi_wordpress_reports/order.py @@ -9,6 +9,10 @@ class Order: def __getitem__(self, item): return self.raw_data[item] + @property + def meta_data_entries(self): + return {meta_data_entry["key"]: meta_data_entry["value"] for meta_data_entry in self.raw_data["meta_data"]} + def contains_sku(self, sku: str) -> bool: for item in self["line_items"]: if item["sku"] == sku: @@ -16,11 +20,15 @@ class Order: return False def contains_meta_data_entry(self, meta_data_entry_key: str) -> bool: - meta_data_entries = {meta_data_entry["key"]: meta_data_entry["value"] for meta_data_entry in self["meta_data"]} - if meta_data_entry_key in meta_data_entries.keys(): + if meta_data_entry_key in self.meta_data_entries.keys(): return True return False + def is_settled_with_um(self): + is_settled = self.meta_data_entries.get("is_settled_with_um", None) + + return bool(is_settled) + @classmethod def from_api_response(cls, raw_data) -> "Order": return Order(raw_data)