From 53b51c9197901b04d02d69f77c06a631e33f429e Mon Sep 17 00:00:00 2001 From: Andres Alvarez Date: Thu, 29 May 2025 10:42:21 -0400 Subject: [PATCH] Update sdk version to 0.4.21 --- package-lock.json | 8 +- package.json | 2 +- .../(shop)/user/order/[id]/detail/page.tsx | 51 ++--------- src/components/Order/ProductOrderSummary.tsx | 10 +-- src/components/User/Order/UserOrderDetail.tsx | 85 +++++++------------ 5 files changed, 45 insertions(+), 111 deletions(-) diff --git a/package-lock.json b/package-lock.json index 804e55c..1452240 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@heroicons/react": "^2.2.0", "@microsoft/fetch-event-source": "^2.0.1", "@next/third-parties": "^15.3.0", - "@pharmatech/sdk": "^0.4.20", + "@pharmatech/sdk": "^0.4.21", "@radix-ui/react-slider": "^1.2.4", "@react-google-maps/api": "^2.20.6", "@types/google.maps": "^3.58.1", @@ -1928,9 +1928,9 @@ } }, "node_modules/@pharmatech/sdk": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/@pharmatech/sdk/-/sdk-0.4.20.tgz", - "integrity": "sha512-unhWNGoPDVmZ4z877xjH5DHA6E8MYuFe6smo6JDmxFX/AbdXa3O8hTZzSAG1mc5PUmfVTa6mKeSxJpEe05fnSw==", + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/@pharmatech/sdk/-/sdk-0.4.21.tgz", + "integrity": "sha512-fxyXlgKN3qLxuGVg6bmRS5DhqfLOLsCYazffax5x0iYFFBIQHQBVRLltm5h84jvOEM0oA7ipD08VVXWMyBj/vQ==", "license": "MIT", "dependencies": { "axios": "^1.8.1" diff --git a/package.json b/package.json index fed1d04..3f2487d 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@heroicons/react": "^2.2.0", "@microsoft/fetch-event-source": "^2.0.1", "@next/third-parties": "^15.3.0", - "@pharmatech/sdk": "^0.4.20", + "@pharmatech/sdk": "^0.4.21", "@radix-ui/react-slider": "^1.2.4", "@react-google-maps/api": "^2.20.6", "@types/google.maps": "^3.58.1", diff --git a/src/app/(shop)/user/order/[id]/detail/page.tsx b/src/app/(shop)/user/order/[id]/detail/page.tsx index 4de4164..dc66b06 100644 --- a/src/app/(shop)/user/order/[id]/detail/page.tsx +++ b/src/app/(shop)/user/order/[id]/detail/page.tsx @@ -4,29 +4,15 @@ import { useParams } from 'next/navigation'; import { useEffect, useState } from 'react'; import UserOrderDetail from '@/components/User/Order/UserOrderDetail'; import { api } from '@/lib/sdkConfig'; -import { OrderResponse, OrderDetailResponse } from '@pharmatech/sdk'; +import { OrderDetailedResponse } from '@pharmatech/sdk'; import { useAuth } from '@/context/AuthContext'; import Loading from '@/app/loading'; -interface OrderDetailData { - orderNumber: string; - products: OrderDetailResponse[]; - subtotal: number; - discount: number; - tax: number; - total: number; -} - -// Extends de OrderRespons para incluir detalles -type ExtendedOrderResponse = OrderResponse & { - details: OrderDetailResponse[]; -}; - export default function OrderDetailPage() { const params = useParams(); const { token } = useAuth(); const id = Array.isArray(params?.id) ? params.id[0] : (params?.id ?? ''); - const [orderData, setOrderData] = useState(null); + const [orderData, setOrderData] = useState(); const [loading, setLoading] = useState(true); useEffect(() => { @@ -34,37 +20,10 @@ export default function OrderDetailPage() { if (!id || !token) return; try { - const order: ExtendedOrderResponse = await api.order.getById(id, token); - - const products: OrderDetailResponse[] = order.details; - - const subtotal = products.reduce((sum, item) => sum + item.subtotal, 0); - - const discount = products.reduce((acc, item) => { - const promo = item.productPresentation.promo; - if (promo) { - const originalPrice = - item.productPresentation.price * item.quantity; - const itemDiscount = originalPrice - item.subtotal; - return acc + itemDiscount; - } - return acc; - }, 0); - - const tax = 0; - const total = order.totalPrice; - - setOrderData({ - orderNumber: order.id, - products, - subtotal, - discount, - tax, - total, - }); + const order = await api.order.getById(id, token); + setOrderData(order); } catch (error) { console.error('Error al obtener detalles del pedido:', error); - setOrderData(null); } finally { setLoading(false); } @@ -78,7 +37,7 @@ export default function OrderDetailPage() { {loading ? ( ) : orderData ? ( - + ) : (
Pedido no encontrado. diff --git a/src/components/Order/ProductOrderSummary.tsx b/src/components/Order/ProductOrderSummary.tsx index b250c77..6a115ae 100644 --- a/src/components/Order/ProductOrderSummary.tsx +++ b/src/components/Order/ProductOrderSummary.tsx @@ -13,11 +13,11 @@ const ProductOrderSummary: React.FC = ({ order }) => { // Compute items, subtotal and discounts const { items, subtotal, itemDiscount, total } = useMemo(() => { const items = order.details.map((detail) => { - const price = detail.productPresentation.price; + const price = detail.price; const qty = detail.quantity; - const promo = detail.productPresentation.promo?.discount || 0; + const promo = detail.discount || 0; const discountedUnit = promo > 0 ? price * (1 - promo / 100) : price; - const lineSubtotal = discountedUnit * qty; + const lineSubtotal = detail.subtotal; const lineDiscount = promo > 0 ? (price - discountedUnit) * qty : 0; return { detail, @@ -31,8 +31,8 @@ const ProductOrderSummary: React.FC = ({ order }) => { }); const subtotal = items.reduce((sum, i) => sum + i.price * i.qty, 0); - const itemDiscount = items.reduce((sum, i) => sum + i.lineDiscount, 0); - const total = subtotal - itemDiscount; + const total = order.totalPrice; + const itemDiscount = subtotal - total; return { items, subtotal, itemDiscount, total }; }, [order.details]); diff --git a/src/components/User/Order/UserOrderDetail.tsx b/src/components/User/Order/UserOrderDetail.tsx index f19521f..99abbb8 100644 --- a/src/components/User/Order/UserOrderDetail.tsx +++ b/src/components/User/Order/UserOrderDetail.tsx @@ -5,56 +5,31 @@ import Link from 'next/link'; import { StarIcon } from '@heroicons/react/24/outline'; import CheckButton from '@/components/CheckButton'; import { - OrderDetailResponse, OrderDetailProductPresentationResponse, + OrderDetailedResponse, } from '@pharmatech/sdk'; import Button from '@/components/Button'; import { formatPrice } from '@/lib/utils/helpers/priceFormatter'; -interface OrderDetailProps { - orderNumber: string; - products: OrderDetailResponse[]; - subtotal: number; - total: number; -} - export default function UserOrderDetail({ - orderNumber, - products, - subtotal, - total, -}: OrderDetailProps) { - const now = new Date(); - - const totalDiscount = products.reduce((acc, item) => { - const presentation: OrderDetailProductPresentationResponse = - item.productPresentation; - const promo = presentation.promo; - const basePrice = presentation.price; - const quantity = item.quantity; - - const isPromoActive = - promo && - new Date(promo.startAt) <= now && - now < new Date(promo.expiredAt); - - if (isPromoActive) { - const discountedPrice = basePrice * (1 - promo.discount / 100); - const discountAmount = (basePrice - discountedPrice) * quantity; - return acc + discountAmount; - } - - return acc; - }, 0); + order, +}: { + order: OrderDetailedResponse; +}) { + const subtotal = order.details.reduce( + (acc, item) => acc + item.price * item.quantity, + 0, + ); + const totalDiscount = subtotal - order.totalPrice; return (
{/* Header */}

- Pedido #{orderNumber.slice(0, 8)} + Pedido #{order.id.slice(0, 8)}

- +
@@ -204,7 +177,7 @@ export default function UserOrderDetail({
Subtotal{' '} - ({products.length} productos) + ({order.details.length} productos)
${formatPrice(subtotal)}
@@ -219,7 +192,9 @@ export default function UserOrderDetail({
TOTAL
-
${formatPrice(total)}
+
+ ${formatPrice(order.totalPrice)} +