diff options
author | Sebastian <sebasjm@gmail.com> | 2022-05-11 15:48:28 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-05-11 15:51:14 -0300 |
commit | 118e025776672008afd179c62f3448706052c1d8 (patch) | |
tree | e7376ffd76a58e8d3cb146732003e9a7b76b6e61 /src/backend | |
parent | 3670a0624142ceddc9cab82146f0695456d2e25b (diff) | |
download | merchant-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.c | 44 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_private-get-orders-ID.c | 2 |
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", |