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)