diff --git a/camisatoshi_wordpress_reports/constants.py b/camisatoshi_wordpress_reports/constants.py index 652c7f3..436c48c 100644 --- a/camisatoshi_wordpress_reports/constants.py +++ b/camisatoshi_wordpress_reports/constants.py @@ -26,3 +26,4 @@ CUSTOM_META_DATA_KEYS.sats_received = "sats_received" UM_FIRST_AGREEMENT_PERCENTAGE = 0.5 BBO_ROYALTY_FEE_PERCENTAGE = 0.2 +BBO_SKUS = ["TEE-05-BBO-BLACK", "SUD-01-BBO-BLACK"] diff --git a/camisatoshi_wordpress_reports/controllers.py b/camisatoshi_wordpress_reports/controllers.py index 97eb25d..c77d9f7 100644 --- a/camisatoshi_wordpress_reports/controllers.py +++ b/camisatoshi_wordpress_reports/controllers.py @@ -13,6 +13,7 @@ from camisatoshi_wordpress_reports.constants import ( UM_FIRST_AGREEMENT_PERCENTAGE, DEFAULT_DOTENV_FILEPATH, BBO_ROYALTY_FEE_PERCENTAGE, + BBO_SKUS, ) from camisatoshi_wordpress_reports.report_building import ( OrderObtentionChainBuilder, @@ -73,14 +74,10 @@ def generate_um_report( ) logger.info(f"Received {len(orders_in_date_range)} orders.") - relevant_sku = "TEE-05-BBO-BLACK" - logger.info(f"Filtering by SKU: {relevant_sku}") - relevant_orders = orders_in_date_range.filter_orders_by_sku( - sku=relevant_sku relevant_skus = [ "TEE-05-BBO-BLACK", "SUD-01-BBO-BLACK", - "TEE-09-SIMPLY-BITCOIN" + "TEE-09-SIMPLY-BITCOIN", ] logger.info(f"Filtering by SKUs: {relevant_skus}") relevant_orders = orders_in_date_range.filter_orders_by_skus( @@ -115,21 +112,32 @@ def generate_um_report( f"Relevant orders: {[order['id'] for order in unsettled_orders]}." ) report = [] - for order in unsettled_orders: - report.append( - { - "order_id": order[ORDER_KEYS.id], - "sku": relevant_skus, - "units_sold": order.units_of_skus(relevant_skus), - "eur_income": order.sales_of_sku(relevant_skus), - "sats_income": order.sats_received_for_sku(relevant_skus), - "sats_owed_to_um": ( - order.sats_received_for_sku(relevant_skus) - * (1 - BBO_ROYALTY_FEE_PERCENTAGE) - ) - * UM_FIRST_AGREEMENT_PERCENTAGE, - } - ) + for relevant_sku in relevant_skus: + logger.debug(f"Reporting SKU {relevant_sku}") + for order in unsettled_orders: + if not order.contains_sku(relevant_sku): + continue + logger.debug(f"Reporting for order {order[ORDER_KEYS.id]}") + report.append( + { + "order_id": order[ORDER_KEYS.id], + "sku": relevant_sku, + "units_sold": order.units_of_sku(relevant_sku), + "eur_income": order.sales_of_sku(relevant_sku), + "sats_income": order.sats_received_for_sku(relevant_sku), + "sats_owed_to_um": ( + order.sats_received_for_sku(relevant_sku) + * ( + 1 + - ( + BBO_ROYALTY_FEE_PERCENTAGE + * (relevant_sku in BBO_SKUS) + ) + ) + ) + * UM_FIRST_AGREEMENT_PERCENTAGE, + } + ) logger.info("Report generated.") logger.info(report) @@ -169,7 +177,7 @@ def generate_sku_report(start_date, end_date, sku): "order_id": order[ORDER_KEYS.id], "sku": sku, "units_sold": order.units_of_skus(sku), - "eur_income": order.sales_of_sku(sku), + "eur_income": order.sales_of_skus(sku), } ) logger.info("Report generated.") diff --git a/camisatoshi_wordpress_reports/order.py b/camisatoshi_wordpress_reports/order.py index 449e039..3e8988f 100644 --- a/camisatoshi_wordpress_reports/order.py +++ b/camisatoshi_wordpress_reports/order.py @@ -109,9 +109,12 @@ class Orders: filtered_orders = [] for order in self: + order_contains_at_least_one_of_the_skus = None # Guilty until proven innocent for sku in skus: if order.contains_sku(sku): - filtered_orders.append(order) + order_contains_at_least_one_of_the_skus = True + if order_contains_at_least_one_of_the_skus: + filtered_orders.append(order) return Orders(filtered_orders)