summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-delete-orders-ID.c
diff options
context:
space:
mode:
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.c63
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,