summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-05-11 15:48:28 -0300
committerSebastian <sebasjm@gmail.com>2022-05-11 15:51:14 -0300
commit118e025776672008afd179c62f3448706052c1d8 (patch)
treee7376ffd76a58e8d3cb146732003e9a7b76b6e61 /src/backend
parent3670a0624142ceddc9cab82146f0695456d2e25b (diff)
downloadmerchant-118e025776672008afd179c62f3448706052c1d8.tar.gz
merchant-118e025776672008afd179c62f3448706052c1d8.tar.bz2
merchant-118e025776672008afd179c62f3448706052c1d8.zip
feat: calculate and return how much refund has been taken already
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/taler-merchant-httpd_get-orders-ID.c44
-rw-r--r--src/backend/taler-merchant-httpd_private-get-orders-ID.c2
2 files changed, 33 insertions, 13 deletions
diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c b/src/backend/taler-merchant-httpd_get-orders-ID.c
index 1cc0098d..76dfefd5 100644
--- a/src/backend/taler-merchant-httpd_get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_get-orders-ID.c
@@ -125,6 +125,12 @@ struct GetOrderData
struct TALER_Amount refund_amount;
/**
+ * Total refunds already collected.
+ * if @e refunded is set to true.
+ */
+ struct TALER_Amount refund_taken;
+
+ /**
* Return code: #TALER_EC_NONE if successful.
*/
enum TALER_ErrorCode ec;
@@ -154,8 +160,9 @@ struct GetOrderData
/**
* Set to true if a refund is still available for the
* wallet for this payment.
+ * @deprecated: true if refund_taken < refund_amount
*/
- bool refund_available;
+ bool refund_pending;
/**
* Set to true if the client requested HTML, otherwise we generate JSON.
@@ -756,16 +763,18 @@ process_refunds_cb (void *cls,
TALER_amount2s (refund_amount),
TALER_B2S (coin_pub),
reason);
- god->refund_available |= pending;
- if (god->refunded)
- {
+ god->refund_pending |= pending;
+ if (!pending)
+ {
GNUNET_assert (0 <=
- TALER_amount_add (&god->refund_amount,
- &god->refund_amount,
- refund_amount));
- return;
+ TALER_amount_add (&god->refund_taken,
+ &god->refund_taken,
+ refund_amount));
}
- god->refund_amount = *refund_amount;
+ GNUNET_assert (0 <=
+ TALER_amount_add (&god->refund_amount,
+ &god->refund_amount,
+ refund_amount));
god->refunded = true;
}
@@ -1361,6 +1370,9 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TMH_currency,
&god->refund_amount));
+ GNUNET_assert (GNUNET_OK ==
+ TALER_amount_set_zero (TMH_currency,
+ &god->refund_taken));
qs = TMH_db->lookup_refunds_detailed (TMH_db->cls,
hc->instance->settings.id,
&god->h_contract_terms,
@@ -1380,7 +1392,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
(1 != TALER_amount_cmp (&god->refund_amount,
&god->sc.refund_expected)) )) ||
( (god->sc.awaiting_refund_obtained) &&
- (god->refund_available) ) )
+ (god->refund_pending) ) )
{
/* Client is waiting for a refund larger than what we have, suspend
until timeout */
@@ -1407,7 +1419,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
{
enum GNUNET_GenericReturnValue res;
- if (god->refund_available)
+ if (god->refund_pending)
{
char *qr;
char *uri;
@@ -1441,6 +1453,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
get_order_summary (god)),
TALER_JSON_pack_amount ("refund_amount",
&god->refund_amount),
+ TALER_JSON_pack_amount ("refund_taken",
+ &god->refund_taken),
GNUNET_JSON_pack_string ("taler_refund_uri",
uri),
GNUNET_JSON_pack_string ("taler_refund_qrcode_svg",
@@ -1466,7 +1480,9 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
GNUNET_JSON_pack_string ("order_summary",
get_order_summary (god)),
TALER_JSON_pack_amount ("refund_amount",
- &god->refund_amount));
+ &god->refund_amount),
+ TALER_JSON_pack_amount ("refund_taken",
+ &god->refund_taken));
res = TMH_return_from_template (god->sc.con,
MHD_HTTP_OK,
"show_order_details",
@@ -1491,7 +1507,9 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
GNUNET_JSON_pack_bool ("refunded",
god->refunded),
GNUNET_JSON_pack_bool ("refund_pending",
- god->refund_available),
+ god->refund_pending),
+ TALER_JSON_pack_amount ("refund_taken",
+ &god->refund_taken),
TALER_JSON_pack_amount ("refund_amount",
&god->refund_amount));
}
diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index eeb16e6f..828d1d65 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -776,6 +776,8 @@ process_refunds_cb (void *cls,
GNUNET_JSON_PACK (
TALER_JSON_pack_amount ("amount",
refund_amount),
+ GNUNET_JSON_pack_bool ("pending",
+ pending),
GNUNET_JSON_pack_timestamp ("timestamp",
timestamp),
GNUNET_JSON_pack_string ("reason",