diff options
-rw-r--r-- | bla.py | 13 | ||||
-rw-r--r-- | trade_queue.py | 12 |
2 files changed, 18 insertions, 7 deletions
@@ -76,13 +76,14 @@ def process_trade(refid: str, trades: List[LedgerAction]): if eur_amount < 0: # Purchase of cryptocurrency stake_amount = -eur_amount - eur_fee # Account for EUR fees crypto_amount -= crypto_fee # Adjust for crypto fees - fifo_queues[crypto_asset].add(crypto_amount, stake_amount, date_sold) + fifo_queues[crypto_asset].add_trade(Trade(crypto_amount, stake_amount, date_sold, refid=refid)) elif eur_amount > 0: # Sale of cryptocurrency - proceeds = eur_amount - eur_fee # Account for EUR fees - sale_entries = fifo_queues[crypto_asset].remove_coins(-crypto_amount) - report.extend( - generate_report(sale_entries, proceeds, crypto_asset, date_sold) - ) + proceeds = eur_amount - eur_fee + fifo_queues[crypto_asset].add_trade(Trade(crypto_amount, -proceeds, date_sold, refid=refid)) + # sale_entries = fifo_queues[crypto_asset].remove_coins(-crypto_amount) + # report.extend( + # generate_report(sale_entries, proceeds, crypto_asset, date_sold) + # ) else: raise ValueError(f"Unexpected trade grouping for refid {refid}") else: diff --git a/trade_queue.py b/trade_queue.py index 73640bf..ae21f95 100644 --- a/trade_queue.py +++ b/trade_queue.py @@ -41,6 +41,14 @@ class FIFOQueue: self._cache_valid = False logger.info(f"Added trade: {trade}.") + def add_trade(self, trade: Trade) -> None: + """ + Add a trade to the queue. + """ + self.__queue.append(trade) + self._cache_valid = False + logger.info(f"Added trade: {trade}.") + def remove_coins(self, amount: float | Decimal) -> List[Trade]: """ Remove a specified amount of coins from the queue, returning the @@ -121,7 +129,9 @@ class FIFOQueue: raise ValueError("No trade matches the given predicate.") elif len(matching_trades) > 1: logger.error("Multiple matching trades found for removal.") - raise ValueError("Multiple trades match the given predicate. Please refine your criteria.") + raise ValueError( + "Multiple trades match the given predicate. Please refine your criteria." + ) # Locate the exact match in the original queue trade_to_remove = matching_trades[0] |