diff --git a/src/lib/components/ShipmentProgress.svelte b/src/lib/components/ShipmentProgress.svelte
new file mode 100644
index 0000000..31116ad
--- /dev/null
+++ b/src/lib/components/ShipmentProgress.svelte
@@ -0,0 +1,202 @@
+
+
+
+ Shipment history
+
+ {#if trackedShipment === null}
+
+
+
+ {:else if trackedShipment?.length > 0}
+
+ {#each trackedShipment as event}
+ -
+
+
+
{event.description}
+
+ {#if event?.status}
+
+ {event.status} -
+
+
+ {/if}
+
+
+ {#if event.city.length > 0}
+ {event?.city?.toLowerCase()}
+ {/if}
+
+ {#if event.countryCode.length > 0}
+ {event.city.length > 0 ? event?.countryCode : event?.country}
+ {/if}
+
+
+
+ {/each}
+
+ {:else}
+
+ {/if}
+
+
+
diff --git a/src/lib/components/Time.svelte b/src/lib/components/Time.svelte
new file mode 100644
index 0000000..acbd664
--- /dev/null
+++ b/src/lib/components/Time.svelte
@@ -0,0 +1,25 @@
+
+
+{#if dateLocaleString}
+ {dateLocaleString}
+{:else}
+ (no date found)
+{/if}
diff --git a/src/lib/interfaces/IShipping.ts b/src/lib/interfaces/IShipping.ts
new file mode 100644
index 0000000..e391ed5
--- /dev/null
+++ b/src/lib/interfaces/IShipping.ts
@@ -0,0 +1,42 @@
+export interface IShippingCourier {
+ id: string;
+ name: string;
+ website: string;
+ has_api: boolean;
+}
+
+export interface IShipment {
+ id: string;
+ courier_id: string;
+ tracking_code: string;
+ tracking_link: string;
+}
+
+export interface IShipmentEvent {
+ event_id: string;
+ shipment_id: string;
+ description: string;
+ status: string;
+ location: string;
+ event_time: Date;
+ updated: Date;
+ created: Date;
+}
+
+export interface IShipmentResponse {
+ shipment_id: string
+ order_id: string
+ courier: string
+ has_api: boolean
+ courier_id: number
+ tracking_code: string
+ tracking_link: string
+ user_notified: boolean
+}
+
+export interface ICourier {
+ courier_id: number
+ name: string
+ website: string
+ has_api: boolean
+}
\ No newline at end of file
diff --git a/src/routes/orders/+page.server.ts b/src/routes/orders/+page.server.ts
index 7ba128c..6bbbce0 100644
--- a/src/routes/orders/+page.server.ts
+++ b/src/routes/orders/+page.server.ts
@@ -1,7 +1,7 @@
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ fetch }) => {
- const res = await fetch('/api/orders');
+ const res = await fetch('/api/v1/orders');
const response = await res.json();
return {
diff --git a/src/routes/orders/+page.svelte b/src/routes/orders/+page.svelte
index 01cccb7..38a73ab 100644
--- a/src/routes/orders/+page.svelte
+++ b/src/routes/orders/+page.svelte
@@ -1,13 +1,15 @@
+
Orders
{#if attentionOrders?.length}
- โ ๏ธ orders needing attention
-
-
+
{/if}
- ๐ฌ pending orders
-
-
- ๐ฆ in transit
-
-
- ๐
โโ๏ธ cancelled/returns
-
-
- ๐ ๐ delivered orders
-
+
+
+
+
+
-
-
diff --git a/src/routes/orders/OrdersTable.svelte b/src/routes/orders/OrdersTable.svelte
index b0c8415..a29f8c7 100644
--- a/src/routes/orders/OrdersTable.svelte
+++ b/src/routes/orders/OrdersTable.svelte
@@ -1,8 +1,10 @@
+{title} {orders?.length || 0}
{#if orders?.length}
| Amount |
Status |
- Order ID |
Customer |
Date |
+ Order ID |
Receipt |
@@ -29,18 +32,12 @@
NOK {order.order_sum} |
-
+
|
- {order.order_id} |
{order.first_name} {order.last_name} |
- {order?.created
- ? new Intl.DateTimeFormat('nb-NO', { dateStyle: 'short', timeStyle: 'short' }).format(
- new Date(order.created)
- )
- : ''} |
+ |
+ {order.order_id} |
๐งพ
|
@@ -56,11 +53,10 @@
@import '../../styles/media-queries.scss';
h2 {
- // text-decoration: underline;
font-size: 1.2rem;
.section-count {
- background-color: rgba(0,0,0,0.15);
+ background-color: rgba(0, 0, 0, 0.15);
padding: 0.3rem 0.4rem;
margin-left: 0.5rem;
border-radius: 0.5rem;
@@ -105,8 +101,14 @@
}
}
+ th:last-of-type,
+ td:last-of-type {
+ text-align: center;
+ }
+
@include mobile {
- tr > *:first-child {
+ tr > *:nth-child(4),
+ tr > *:nth-child(5) {
display: none;
}
}
diff --git a/src/routes/orders/[id]/+error.svelte b/src/routes/orders/[id]/+error.svelte
new file mode 100644
index 0000000..f011c24
--- /dev/null
+++ b/src/routes/orders/[id]/+error.svelte
@@ -0,0 +1,41 @@
+
+
+Oisann! Klarte ikke hente order
+
+
+ Det du sรธkte etter fantes ikke her. Om du tror dette er en feil, ta kontakt support@planetposen.no for spรธrsmรฅl.
+
+
+
Internal error message:
+
+ {parsedApiResponse}
+
+
+
+
diff --git a/src/routes/orders/[id]/+page.server.ts b/src/routes/orders/[id]/+page.server.ts
index e96d356..9e5bc41 100644
--- a/src/routes/orders/[id]/+page.server.ts
+++ b/src/routes/orders/[id]/+page.server.ts
@@ -1,15 +1,21 @@
+import { error } from '@sveltejs/kit';
import type { IOrderDTO } from '$lib/interfaces/ApiResponse';
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({ fetch, params }) => {
const { id } = params;
- const res = await fetch(`/api/order/${id}`);
- const orderResponse: IOrderDTO = await res.json();
+ const res = await fetch(`/api/v1/order/${id}`);
+ const orderResponse = await res.json();
if (orderResponse?.success == false || orderResponse?.order === undefined) {
- throw Error(':(');
+ console.log('throwing error', orderResponse);
+
+ throw error(404, {
+ apiResponse: orderResponse,
+ message: 'Something went wrong! Unable to get order'
+ });
}
- return { order: orderResponse.order };
+ return { order: orderResponse?.order };
};
diff --git a/src/routes/orders/[id]/+page.svelte b/src/routes/orders/[id]/+page.svelte
index 1f9c32a..71f0f25 100644
--- a/src/routes/orders/[id]/+page.svelte
+++ b/src/routes/orders/[id]/+page.svelte
@@ -4,15 +4,15 @@
import PaymentDetails from './PaymentDetails.svelte';
import CustomerDetails from './CustomerDetails.svelte';
import TrackingDetails from './TrackingDetails.svelte';
+ import ShipmentProgress from '$lib/components/ShipmentProgress.svelte';
import type { IOrder } from '$lib/interfaces/IOrder';
import type { PageServerData } from './$types';
export let data: PageServerData;
let order = data.order as IOrder;
- console.log('order:', order);
function orderSubTotal() {
- if (!order || order.lineItems?.length === 0) return;
+ if (!order || order?.lineItems?.length === 0) return;
let sum = 0;
order.lineItems.forEach((lineItem) => (sum = sum + lineItem.quantity * lineItem.price));
@@ -21,20 +21,21 @@
}
-Order: {order.orderid}
+Order id: {order?.orderid}
-
{orderSubTotal()}.00 Nok
-
+
-
+
diff --git a/src/routes/orders/[id]/OrderSummary.svelte b/src/routes/orders/[id]/OrderSummary.svelte
index 6fae840..7ff0217 100644
--- a/src/routes/orders/[id]/OrderSummary.svelte
+++ b/src/routes/orders/[id]/OrderSummary.svelte
@@ -1,14 +1,25 @@
+ -
+ Status
+
+
+
-
Last update
- {order.updated}
+
+
+
+ -
+ Created
+
-
@@ -18,12 +29,12 @@
-
Receipt
- {order.orderid}
+ {order.orderid}
-
Payment method
- {paymentMethod}
+ {order?.payment?.type}
diff --git a/src/routes/orders/[id]/PaymentDetails.svelte b/src/routes/orders/[id]/PaymentDetails.svelte
index 30ee6a1..1d75127 100644
--- a/src/routes/orders/[id]/PaymentDetails.svelte
+++ b/src/routes/orders/[id]/PaymentDetails.svelte
@@ -1,36 +1,94 @@
Payment details
-
- Amount
- {order?.payment?.amount}.10 kr
+ Stripe link
+ {#if payment?.stripe_transaction_id}
+
+ {payment?.stripe_transaction_id}
+
+ {:else}
+ (No payment found)
+ {/if}
-
- Fee
- 2.25 kr
+ Amount requested
+ {initiatedAmount}.00 kr
+
+
+ -
+ Amount charged
+ {capturedAmount}.00 kr
+
+
+ {#if payment?.amount_refunded > 0}
+ -
+ Refunded
+ {payment?.amount_refunded / 100}.00 kr
+
+ {/if}
+
+ -
+ Fee (approx)
+ {fee === null ? '-' : round(fee) + ' kr'}
-
Net
- 7.85 kr
+ {net === null ? '-' : round(net) + ' kr'}
-
Status
-
+
+
+
+ -
+ Created
+
+
+
+ -
+ Updated
+
diff --git a/src/routes/orders/[id]/TrackingDetails.svelte b/src/routes/orders/[id]/TrackingDetails.svelte
index bcf3014..3288f42 100644
--- a/src/routes/orders/[id]/TrackingDetails.svelte
+++ b/src/routes/orders/[id]/TrackingDetails.svelte
@@ -1,35 +1,139 @@
-{#if shipping}
-
- Tracking
+
+ Tracking
+
+ {#if shipping}
-
-{/if}
+
+
+
+
+
+ {#if shipping?.tracking_code && shipping?.has_api}
+ {#key shipping.tracking_code}
+
+ {/key}
+ {/if}
+ {/if}
+
+ {#if !shipping}
+
+
+
+ {/if}
+
diff --git a/src/routes/orders/[id]/styles-order-page.scss b/src/routes/orders/[id]/styles-order-page.scss
index f450210..a3e62a4 100644
--- a/src/routes/orders/[id]/styles-order-page.scss
+++ b/src/routes/orders/[id]/styles-order-page.scss
@@ -16,8 +16,7 @@ section {
}
}
-.label,
-.empty {
+.label {
color: grey;
}
@@ -51,7 +50,6 @@ ul.property-list {
li span:last-of-type {
@include mobile {
- min-width: 60%;
white-space: normal;
overflow-wrap: break-word;
}