summaryrefslogtreecommitdiff
path: root/design-documents/016-backoffice-order-management.rst
diff options
context:
space:
mode:
Diffstat (limited to 'design-documents/016-backoffice-order-management.rst')
-rw-r--r--design-documents/016-backoffice-order-management.rst243
1 files changed, 243 insertions, 0 deletions
diff --git a/design-documents/016-backoffice-order-management.rst b/design-documents/016-backoffice-order-management.rst
new file mode 100644
index 0000000..1fba8f3
--- /dev/null
+++ b/design-documents/016-backoffice-order-management.rst
@@ -0,0 +1,243 @@
+Design Doc 016: Backoffice Order Management
+###########################################
+
+Summary
+=======
+
+This document describe the complete list features for orders management and how
+will be shown.
+
+Motivation
+==========
+
+User will use the backoffice to manage their orders and verify the status of the
+current and past orders.
+
+Requirements
+============
+
+Access all information provided from the Merchant Backend API in a
+understandable and accessible way
+
+User should use the backoffice to manage orders by:
+
+* searching for orders
+* showing details about the order and the activity history
+* refund order that are refundable
+* create orders
+
+Proposed Solution
+=================
+
+Listing orders
+--------------
+
+.. image:: ../backoffice-order-list.svg
+ :width: 800
+
+Will show the SearchBar component that allow multiple filter.
+Filter will allow paid, refunded, wired status and date.
+
+ * paid: yes/no
+ * refunded: yes/no
+ * wired: yes/no
+ * date: 'dd/MM/yyyy'
+
+4 tabs will be show for a easy access to common filter, click on any of this and
+search will reset all filter except date
+
+* paid (default)
+* refunded
+* not wired
+* all (empty filter box)
+
+Columns for the order listings will be:
+
+* date in 'dd/MM/yyyy HH:mm:ss' format
+* amount: value and currency
+* summary
+
+Actions per row:
+
+* refund: pop up with amount and reason (select box and text)
+* copy payment id
+* view details
+
+An export button will allow the user to download the result page in CSV format.
+
+An infinity scroll is propose instead of a pagination, reasons:
+
+* users usually does not jump from one page to another using random access
+* if the user want to search, is going to limit the result using filters
+* no need to go back after loading more result
+* it could be triggered by scrolling, with buttons (or both)
+
+Create orders
+-------------
+
+Form with 4 fields:
+
+* amount
+* summary
+* time until refund ( dropdown: 1week, 2weeks, custom )
+* description
+* payment method
+
+Creation order success
+**********************
+
+Example message:
+
+ Creation successful
+
+ We've create an order for for USD:10.00.
+
+ Send url to the customer: ``taler_pay_uri``
+
+action buttons that allow the following:
+
+* create another payment: go to the create payment page again
+* view details: show details of the payment (see page)
+
+Order details
+-------------
+
+Status text should be set with a background color for easier recognition when
+indicated:
+
+* paid: green
+* claimed: light-green
+* unpaid: grey
+* refunded: red
+
+Header
+******
+
+This is a resume of most important information
+
+* big status with color
+* date
+* total
+
+ - deposit_total (if not refunded)
+ - refund_amount (if status is refunded)
+ - deposit_total - refund amount (if refunded partially)
+
+* order_status_url
+* taler_pay_uri (if unpaid)
+* actions: refund (if not refunded), add note, copy order_status_url
+
+Timeline of events
+******************
+
+Event of status changed over time describe vertically.
+Sorted from newest to oldest.
+On line per status updated, with datetime and a short description.
+
+Info taken from:
+
+* refund_details
+* wire_reports
+* wire_details
+* contractTerm.extra for custom notes ({date: timestamp, description: string})
+
+Payment details
+***************
+
+* summary
+* amount (deposit_total)
+* fee
+* refund_amount (if status is refunded)
+* net (amount - fee - refund)
+* current status
+
+
+Contract Terms
+**************
+
+collapsed as default. show disabled if unpaid
+
+* summary
+* amount
+* fulfillment_url, if present
+* max fee
+* max fire fee
+* wire_fee_amortization
+* list of (exchange | auditor) name and url
+* products table: list of products, one row per product
+
+ * description
+ * quantity
+ * total price
+ * total tax
+ * sum at the bottom
+
+* horizontal timeline of important dates in the contract
+
+ * start at contract creation time
+ * show current date
+ * pay_deadline
+ * wire_transfer_deadline
+ * refund_deadline
+ * delivery_date (immediately if null)
+ * auto_refund
+
+
+
+Last response from exchange
+***************************
+
+collapsed as default, showing a green check if everything is ok or a yellow
+warning otherwise
+
+When open show 2 boxes with text translated from ``exchange_ec`` and ``exchange_hc``
+
+refund popup
+--------------
+
+If there is any refund:
+
+* show total refund from ``refund_amount``
+* a + sign to show more information
+* if expanded show a timeline vertically showing amount a reason
+ ``refund_details``
+
+Show a small notice telling that the refund is going to take ``refund_delay`` time.
+
+Warn if there is a pending refund when ``refund_pending`` is true
+
+Ask for:
+
+* amount
+* reason: concatenation of the next values
+
+ * drop down options: duplicated, fraudulent, requested by customer, other
+ * after selecting, free text for additional information
+
+Alternatives
+============
+
+
+order list was originally thought with pagination footer
+
+.. image:: ../backoffice-order-list.v2-pagination.svg
+ :width: 800
+
+ascending boolean flag cloud be eliminated using the load before and load after
+and a design without random access to pages was proposed
+
+
+Discussion / Q&A
+================
+
+* Shall we show merchant information from the ContractTerm in the order detail?
+
+* Order creation was first thought as out of scope but should be useful for
+ testing purpose or when frontend is not yet integrated with taler merchant
+ backend. Shall we skip it?
+
+* Do we have the date and time of when the order goes from these states?
+
+ * claimed => paid (maybe last wire_details.execution_time with confirmed = true )
+ * unpaid => claimed (maybe contractTerm.timestamp)
+