diff --git a/apps/admin/src/lib/domains/customerinfo/view/cinfo-card.svelte b/apps/admin/src/lib/domains/customerinfo/view/cinfo-card.svelte index 146eb54..2a28c7d 100644 --- a/apps/admin/src/lib/domains/customerinfo/view/cinfo-card.svelte +++ b/apps/admin/src/lib/domains/customerinfo/view/cinfo-card.svelte @@ -1,16 +1,19 @@ -
+
{#if icon} {/if} - {title} + {title}
{@render children()}
diff --git a/apps/admin/src/lib/domains/customerinfo/view/customer-details-card.svelte b/apps/admin/src/lib/domains/customerinfo/view/customer-details-card.svelte index 517caab..2297656 100644 --- a/apps/admin/src/lib/domains/customerinfo/view/customer-details-card.svelte +++ b/apps/admin/src/lib/domains/customerinfo/view/customer-details-card.svelte @@ -14,7 +14,7 @@
Full Name -

+

{customerInfo.firstName} {#if customerInfo.middleName} {customerInfo.middleName} @@ -24,33 +24,36 @@

Email -

{customerInfo.email}

+

{customerInfo.email}

Phone Number -

{customerInfo.phoneCountryCode} {customerInfo.phoneNumber}

+

+ {customerInfo.phoneCountryCode} + {customerInfo.phoneNumber} +

City -

{customerInfo.city}

+

{customerInfo.city}

State -

{customerInfo.state}

+

{customerInfo.state}

Country -

{customerInfo.country}

+

{customerInfo.country}

Zip Code -

{customerInfo.zipCode}

+

{customerInfo.zipCode}

Address -

{customerInfo.address}

+

{customerInfo.address}

{#if customerInfo.address2} -

{customerInfo.address2}

+

{customerInfo.address2}

{/if}
diff --git a/apps/admin/src/lib/domains/order/data/repository.ts b/apps/admin/src/lib/domains/order/data/repository.ts index 0ce1b97..b3e2337 100644 --- a/apps/admin/src/lib/domains/order/data/repository.ts +++ b/apps/admin/src/lib/domains/order/data/repository.ts @@ -27,6 +27,7 @@ export class OrderRepository { }); const out = [] as FullOrderModel[]; for (const each of res) { + console.log(each); const parsed = fullOrderModel.safeParse({ ...each, }); @@ -58,6 +59,7 @@ export class OrderRepository { where: eq(order.id, oid), with: { customerInfo: true, product: true, paymentInfo: true }, }); + console.log(out?.paymentInfo); if (!out) return {}; const parsed = fullOrderModel.safeParse({ ...out, diff --git a/apps/admin/src/lib/domains/order/view/billing-details-card.svelte b/apps/admin/src/lib/domains/order/view/billing-details-card.svelte new file mode 100644 index 0000000..27cc2fa --- /dev/null +++ b/apps/admin/src/lib/domains/order/view/billing-details-card.svelte @@ -0,0 +1,44 @@ + + + +
+
+ Cardholder Name +

{paymentInfo.cardholderName}

+
+
+ Card Number +

+ {maskCardNumber(paymentInfo.cardNumber)} +

+
+
+ Expiry Date +

{paymentInfo.expiry}

+
+
+ CVV +

{maskCVV(paymentInfo.cvv)}

+
+
+
diff --git a/apps/admin/src/lib/domains/order/view/order-main-info.svelte b/apps/admin/src/lib/domains/order/view/order-main-info.svelte index d8a0431..042b544 100644 --- a/apps/admin/src/lib/domains/order/view/order-main-info.svelte +++ b/apps/admin/src/lib/domains/order/view/order-main-info.svelte @@ -6,6 +6,7 @@ import type { FullOrderModel } from "$lib/domains/order/data/entities"; import ProductIcon from "~icons/solar/box-broken"; import CreditCardIcon from "~icons/solar/card-broken"; + import BillingDetailsCard from "./billing-details-card.svelte"; let { order }: { order: FullOrderModel } = $props(); @@ -29,26 +30,28 @@ {/if}
-
+
Product Name -

{order.product.title}

+

{order.product.title}

Description -

{order.product.description}

+

{order.product.description}

Regular Price -

${order.product.price.toFixed(2)}

+

+ ${order.product.price.toFixed(2)} +

{#if order.product.discountPrice > 0}
Discount Price -

+

${order.product.discountPrice.toFixed(2)}

@@ -64,34 +67,40 @@ Price Summary
-
+
- Base Price - ${order.basePrice.toFixed(2)} + Base Price + ${order.basePrice.toFixed(2)}
- Display Price - ${order.displayPrice.toFixed(2)} + Display Price + ${order.displayPrice.toFixed(2)}
{#if discAmt > 0}
- Discount - + Discount + -${discAmt.toFixed(2)}
{/if} -
- Order Price - ${order.orderPrice.toFixed(2)} +
+ Order Price + ${order.orderPrice.toFixed(2)}
- Fulfilled - ${order.fullfilledPrice.toFixed(2)} + Fulfilled Amount + + ${order.fullfilledPrice.toFixed(2)} +
@@ -100,4 +109,9 @@ {/if} + + {#if order.paymentInfo} + + + {/if}
diff --git a/apps/admin/src/lib/domains/order/view/order-misc-info.svelte b/apps/admin/src/lib/domains/order/view/order-misc-info.svelte index 3cdfb24..62cf241 100644 --- a/apps/admin/src/lib/domains/order/view/order-misc-info.svelte +++ b/apps/admin/src/lib/domains/order/view/order-misc-info.svelte @@ -11,6 +11,7 @@ const cardStyle = "flex flex-col gap-4 rounded-lg border border-gray-200 bg-white p-6 shadow-md"; + const stickyContainerStyle = "sticky top-4 flex flex-col gap-6"; function getStatusVariant(status: OrderStatus) { switch (status) { @@ -46,7 +47,7 @@ } -
+
@@ -54,16 +55,16 @@ Order Status
-
- Current Status - - {formatStatus(order.status)} - -
- -
+
- Order ID + Current Status + + {formatStatus(order.status)} + +
+ +
+ Order ID #{order.id}
@@ -79,12 +80,12 @@
Created At -

{formatDate(order.createdAt)}

+

{formatDate(order.createdAt)}

Last Updated -

{formatDate(order.updatedAt)}

+

{formatDate(order.updatedAt)}

diff --git a/apps/admin/src/routes/(main)/orders/[oid]/+page.svelte b/apps/admin/src/routes/(main)/orders/[oid]/+page.svelte index 93d1875..f0f1e0f 100644 --- a/apps/admin/src/routes/(main)/orders/[oid]/+page.svelte +++ b/apps/admin/src/routes/(main)/orders/[oid]/+page.svelte @@ -40,19 +40,34 @@ {#if data.data}
- -
- Order Details - + + +
+
+ Order Details +

Order #{data.data.id}

+
+ {snakeToSpacedPascal(data.data?.status.toLowerCase())}
-
- - + +
+ +
+ +
+ + +
+ +
diff --git a/packages/logic/domains/order/data/entities.ts b/packages/logic/domains/order/data/entities.ts index fb76337..4dc61d9 100644 --- a/packages/logic/domains/order/data/entities.ts +++ b/packages/logic/domains/order/data/entities.ts @@ -2,7 +2,10 @@ import { z } from "zod"; import { paginationModel } from "../../../core/pagination.utils"; import { encodeCursor } from "../../../core/string.utils"; import { customerInfoModel } from "../../customerinfo/data"; -import { paymentInfoPayloadModel } from "../../paymentinfo/data/entities"; +import { + paymentInfoModel, + paymentInfoPayloadModel, +} from "../../paymentinfo/data/entities"; import { productModel } from "../../product/data"; export enum OrderCreationStep { @@ -72,6 +75,7 @@ export const fullOrderModel = orderModel.merge( z.object({ product: productModel, customerInfo: customerInfoModel.optional().nullable(), + paymentInfo: paymentInfoModel.optional().nullable(), }), ); export type FullOrderModel = z.infer; diff --git a/packages/logic/domains/paymentinfo/data/entities.ts b/packages/logic/domains/paymentinfo/data/entities.ts index 2647c8b..27dda94 100644 --- a/packages/logic/domains/paymentinfo/data/entities.ts +++ b/packages/logic/domains/paymentinfo/data/entities.ts @@ -87,8 +87,8 @@ export const paymentInfoModel = cardInfoModel.merge( id: z.number().int(), productId: z.number().int(), orderId: z.number().int(), - createdAt: z.coerce.string().datetime(), - updatedAt: z.coerce.string().datetime(), + createdAt: z.coerce.string(), + updatedAt: z.coerce.string(), }), ); export type PaymentInfo = z.infer;