gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] 03/03: first draft implementation of new bank account b


From: gnunet
Subject: [taler-exchange] 03/03: first draft implementation of new bank account balance in history logic (untested)
Date: Tue, 11 Feb 2020 16:01:51 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

commit c25b805f62b3fde9ca2b6e1af94841efb9b43e7c
Author: Christian Grothoff <address@hidden>
AuthorDate: Tue Feb 11 16:01:45 2020 +0100

    first draft implementation of new bank account balance in history logic 
(untested)
---
 src/bank-lib/fakebank.c | 165 ++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 152 insertions(+), 13 deletions(-)

diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c
index 47a06c59..61b9a91c 100644
--- a/src/bank-lib/fakebank.c
+++ b/src/bank-lib/fakebank.c
@@ -973,6 +973,7 @@ handle_debit_history (struct TALER_FAKEBANK_Handle *h,
 {
   struct HistoryArgs ha;
   const struct Transaction *pos;
+  const struct Transaction *spos;
   json_t *history;
   struct TALER_Amount total_incoming;
   struct TALER_Amount start_outgoing;
@@ -1019,10 +1020,7 @@ handle_debit_history (struct TALER_FAKEBANK_Handle *h,
     /* list is empty */
     pos = NULL;
   }
-  if (0 > ha.delta)
-    end_pos = pos;
-  else
-    start_pos = pos;
+  spos = pos;
 
   history = json_array ();
   while ( (0 != ha.delta) &&
@@ -1076,18 +1074,80 @@ handle_debit_history (struct TALER_FAKEBANK_Handle *h,
       pos = pos->next;
   }
   if (0 > ha.delta)
+  {
     start_pos = pos;
+    end_pos = spos;
+  }
   else
-    end_pos = pos;
+  {
+    start_pos = spos;
+    if (NULL == pos)
+      end_pos = h->transactions_tail;
+    else
+      end_pos = pos;
+  }
+  /* now calculate balances at beginning end end of
+     transaction history */
   GNUNET_assert (GNUNET_OK ==
-                 TALER_amount_get_zero (fb->currency,
-                                        &));
-
+                 TALER_amount_get_zero (h->currency,
+                                        &total_incoming));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (h->currency,
+                                        &start_outgoing));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (h->currency,
+                                        &end_outgoing));
+  for (pos = h->transactions_head;
+       NULL != pos;
+       pos = pos->next)
+  {
+    if ( (0 == strcasecmp (pos->debit_account,
+                           account)) &&
+         (T_DEBIT == pos->type) )
+    {
+      if (pos == start_pos)
+        start_pos = NULL;
+      if (NULL != start_pos)
+      {
+        /* we are *before* the start position (exclusive), add to balances */
+        GNUNET_break (GNUNET_OK ==
+                      TALER_amount_add (&start_outgoing,
+                                        &start_outgoing,
+                                        &pos->amount));
+      }
+      if (NULL != end_pos)
+      {
+        /* we are *before* the end position (inclusive),
+           add to balances */
+        GNUNET_break (GNUNET_OK ==
+                      TALER_amount_add (&end_outgoing,
+                                        &end_outgoing,
+                                        &pos->amount));
+      }
+      if (pos == end_pos)
+        end_pos = NULL;
+    }
+    if ( (0 == strcasecmp (pos->credit_account,
+                           account)) &&
+         (T_CREDIT == pos->type) )
+    {
+      GNUNET_break (GNUNET_OK ==
+                    TALER_amount_add (&total_incoming,
+                                      &total_incoming,
+                                      &pos->amount));
+    }
+  }
   return TALER_MHD_reply_json_pack (connection,
                                     MHD_HTTP_OK,
-                                    "{s:o}",
+                                    "{s:o, s:o, s:o, s:o}",
                                     "outgoing_transactions",
-                                    history);
+                                    history,
+                                    "current_incoming",
+                                    TALER_JSON_from_amount (&total_incoming),
+                                    "total_incoming_start",
+                                    TALER_JSON_from_amount (&start_outgoing),
+                                    "total_incoming_end",
+                                    TALER_JSON_from_amount (&end_outgoing));
 }
 
 
@@ -1105,8 +1165,14 @@ handle_credit_history (struct TALER_FAKEBANK_Handle *h,
                        const char *account)
 {
   struct HistoryArgs ha;
-  struct Transaction *pos;
+  const struct Transaction *pos;
+  const struct Transaction *spos;
   json_t *history;
+  struct TALER_Amount end_incoming;
+  struct TALER_Amount start_incoming;
+  struct TALER_Amount total_outgoing;
+  const struct Transaction *start_pos;
+  const struct Transaction *end_pos;
 
   if (GNUNET_OK !=
       parse_history_common_args (connection,
@@ -1161,6 +1227,8 @@ handle_credit_history (struct TALER_FAKEBANK_Handle *h,
     /* list is empty */
     pos = NULL;
   }
+  spos = pos;
+
   history = json_array ();
   while ( (0 != ha.delta) &&
           (NULL != pos) )
@@ -1225,11 +1293,82 @@ handle_credit_history (struct TALER_FAKEBANK_Handle *h,
     if (0 < ha.delta)
       pos = pos->next;
   }
+  if (0 > ha.delta)
+  {
+    start_pos = pos;
+    end_pos = spos;
+  }
+  else
+  {
+    start_pos = spos;
+    if (NULL == pos)
+      end_pos = h->transactions_tail;
+    else
+      end_pos = pos;
+  }
+  /* now calculate balances at beginning end end of
+     transaction history */
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (h->currency,
+                                        &total_outgoing));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (h->currency,
+                                        &start_incoming));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (h->currency,
+                                        &end_incoming));
+  for (pos = h->transactions_head;
+       NULL != pos;
+       pos = pos->next)
+  {
+    if ( (0 == strcasecmp (pos->credit_account,
+                           account)) &&
+         (T_CREDIT == pos->type) )
+    {
+      if (pos == start_pos)
+        start_pos = NULL;
+      if (NULL != start_pos)
+      {
+        /* we are *before* the start position (exclusive), add to balances */
+        GNUNET_break (GNUNET_OK ==
+                      TALER_amount_add (&start_incoming,
+                                        &start_incoming,
+                                        &pos->amount));
+      }
+      if (NULL != end_pos)
+      {
+        /* we are *before* the end position (inclusive),
+           add to balances */
+        GNUNET_break (GNUNET_OK ==
+                      TALER_amount_add (&end_incoming,
+                                        &end_incoming,
+                                        &pos->amount));
+      }
+      if (pos == end_pos)
+        end_pos = NULL;
+    }
+    if ( (0 == strcasecmp (pos->debit_account,
+                           account)) &&
+         (T_DEBIT == pos->type) )
+    {
+      GNUNET_break (GNUNET_OK ==
+                    TALER_amount_add (&total_outgoing,
+                                      &total_outgoing,
+                                      &pos->amount));
+    }
+  }
+
   return TALER_MHD_reply_json_pack (connection,
                                     MHD_HTTP_OK,
-                                    "{s:o}",
+                                    "{s:o, s:o, s:o, s:o}",
                                     "incoming_transactions",
-                                    history);
+                                    history,
+                                    "current_outgoing",
+                                    TALER_JSON_from_amount (&total_outgoing),
+                                    "total_incoming_start",
+                                    TALER_JSON_from_amount (&start_incoming),
+                                    "total_incoming_end",
+                                    TALER_JSON_from_amount (&end_incoming));
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]