diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-delete-orders-ID.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_private-delete-orders-ID.c | 63 |
1 files changed, 43 insertions, 20 deletions
diff --git a/src/backend/taler-merchant-httpd_private-delete-orders-ID.c b/src/backend/taler-merchant-httpd_private-delete-orders-ID.c index 9eaa8b0e..cd8aa10c 100644 --- a/src/backend/taler-merchant-httpd_private-delete-orders-ID.c +++ b/src/backend/taler-merchant-httpd_private-delete-orders-ID.c @@ -38,11 +38,23 @@ TMH_private_delete_orders_ID (const struct TMH_RequestHandler *rh, { struct TMH_MerchantInstance *mi = hc->instance; enum GNUNET_DB_QueryStatus qs; + const char *force_s; + bool force; + + (void) rh; + force_s = MHD_lookup_connection_value (connection, + MHD_GET_ARGUMENT_KIND, + "force"); + if (NULL == force_s) + force_s = "no"; + force = (0 == strcasecmp (force_s, + "yes")); GNUNET_assert (NULL != mi); qs = TMH_db->delete_order (TMH_db->cls, mi->settings.id, - hc->infix); + hc->infix, + force); if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) qs = TMH_db->delete_contract_terms (TMH_db->cls, mi->settings.id, @@ -64,6 +76,10 @@ TMH_private_delete_orders_ID (const struct TMH_RequestHandler *rh, case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: { struct TALER_MerchantPostDataHashP unused; + uint64_t order_serial; + bool paid = false; + bool wired = false; + bool matches = false; qs = TMH_db->lookup_order (TMH_db->cls, mi->settings.id, @@ -71,27 +87,34 @@ TMH_private_delete_orders_ID (const struct TMH_RequestHandler *rh, NULL, &unused, NULL); - } - if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) - { - uint64_t order_serial; - - qs = TMH_db->lookup_contract_terms (TMH_db->cls, - mi->settings.id, - hc->infix, - NULL, - &order_serial, - NULL); - } - if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) + if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) + { + qs = TMH_db->lookup_contract_terms3 (TMH_db->cls, + mi->settings.id, + hc->infix, + NULL, + NULL, + &order_serial, + &paid, + &wired, + &matches, + NULL); + } + if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN, + hc->infix); + if (paid) + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_CONFLICT, + TALER_EC_MERCHANT_PRIVATE_DELETE_ORDERS_ALREADY_PAID, + hc->infix); return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN, + MHD_HTTP_CONFLICT, + TALER_EC_MERCHANT_PRIVATE_DELETE_ORDERS_AWAITING_PAYMENT, hc->infix); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_MERCHANT_PRIVATE_DELETE_ORDERS_AWAITING_PAYMENT, - hc->infix); + } case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: return TALER_MHD_reply_static (connection, MHD_HTTP_NO_CONTENT, |