summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-11-11 16:06:01 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-11-11 16:06:01 +0700
commit584e3fd7f4d33992046557ba18ee8eeac993e650 (patch)
tree31a7b3583fd41058d75f46efb66fb40087347e3a
parent3428180259f72c47e88712af6d2ce44d8a82988b (diff)
parentfdd6902a19ee050d97937252ef70bafa8fbe44d9 (diff)
Merge branch 'CR/barang-readyStock' into CR/new_product_detail
-rw-r--r--src-migrate/modules/cart/components/Item.tsx17
-rw-r--r--src-migrate/modules/product-detail/components/Information.tsx16
-rw-r--r--src-migrate/modules/product-detail/components/PriceAction.tsx39
-rw-r--r--src-migrate/types/cart.ts1
-rw-r--r--src/lib/checkout/components/Checkout.jsx1
-rw-r--r--src/lib/product/components/Product/ProductDesktopVariant.jsx8
-rw-r--r--src/lib/transaction/components/Transaction.jsx6
-rw-r--r--src/lib/variant/components/VariantCard.jsx22
8 files changed, 83 insertions, 27 deletions
diff --git a/src-migrate/modules/cart/components/Item.tsx b/src-migrate/modules/cart/components/Item.tsx
index 6ffbb524..ab2e7ce1 100644
--- a/src-migrate/modules/cart/components/Item.tsx
+++ b/src-migrate/modules/cart/components/Item.tsx
@@ -36,26 +36,29 @@ const CartItem = ({ item, editable = true, selfPicking}: Props) => {
)}
<div className='w-2' />
<div>
- Selamat! Pembelian anda lebih hemat {' '}
+ Selamat! Pembelian anda lebih hemat{' '}
<span className={style.savingAmt}>
- Rp{formatCurrency((item.package_price || 0) * item.quantity - item.subtotal)}
+ Rp
+ {formatCurrency(
+ (item.package_price || 0) * item.quantity - item.subtotal
+ )}
</span>
</div>
</div>
)}
<div className={style.mainProdWrapper}>
- {editable && (
- <CartItemSelect item={item} />
- )}
+ {editable && <CartItemSelect item={item} />}
<div className='w-4' />
<CartItem.Image item={item} />
<div className={style.details}>
- {(item.is_in_bu) && (item.on_hand_qty >= item.quantity) && (
+ {item?.available_quantity > 0 && (
<div className='text-[10px] text-red-500 italic'>
- *Barang ini bisa di pickup maksimal pukul 16.00
+ {item.quantity <= item?.available_quantity
+ ? '*Barang ini bisa di pickup maksimal pukul 16.00'
+ : `*${item?.available_quantity} Barang ini bisa di pickup maksimal pukul 16.00`}
</div>
)}
<CartItem.Name item={item} />
diff --git a/src-migrate/modules/product-detail/components/Information.tsx b/src-migrate/modules/product-detail/components/Information.tsx
index 3c2eb537..ec606423 100644
--- a/src-migrate/modules/product-detail/components/Information.tsx
+++ b/src-migrate/modules/product-detail/components/Information.tsx
@@ -56,13 +56,15 @@ const Information = ({ product }: Props) => {
};
useEffect(() => {
- getsla();
- setInputValue(
- selectedVariant?.code +
- (selectedVariant?.attributes[0]
- ? ' - ' + selectedVariant?.attributes[0]
- : '')
- );
+ if (selectedVariant) {
+ getsla();
+ setInputValue(
+ selectedVariant?.code +
+ (selectedVariant?.attributes[0]
+ ? ' - ' + selectedVariant?.attributes[0]
+ : '')
+ );
+ }
}, [selectedVariant]);
const handleOnChange = (vals: any) => {
diff --git a/src-migrate/modules/product-detail/components/PriceAction.tsx b/src-migrate/modules/product-detail/components/PriceAction.tsx
index b549d39f..413c643a 100644
--- a/src-migrate/modules/product-detail/components/PriceAction.tsx
+++ b/src-migrate/modules/product-detail/components/PriceAction.tsx
@@ -2,7 +2,7 @@ import style from '../styles/price-action.module.css';
import Image from 'next/image';
import Link from 'next/link';
-import { useEffect } from 'react';
+import { useEffect, useState } from 'react';
import formatCurrency from '~/libs/formatCurrency';
import { IProductDetail } from '~/types/product';
import { useProductDetail } from '../stores/useProductDetail';
@@ -10,6 +10,8 @@ import AddToCart from './AddToCart';
import AddToQuotation from './AddToQuotation';
import { getAuth } from '~/libs/auth';
import useDevice from '@/core/hooks/useDevice';
+import odooApi from '~/libs/odooApi';
+import { Button, Skeleton } from '@chakra-ui/react';
type Props = {
product: IProductDetail;
@@ -28,6 +30,7 @@ const PriceAction = ({ product }: Props) => {
selectedVariant,
sla,
} = useProductDetail();
+ const [qtyPickUp, setQtyPickUp] = useState(0);
const { isDesktop, isMobile } = useDevice();
useEffect(() => {
setActive(selectedVariant);
@@ -42,6 +45,22 @@ const PriceAction = ({ product }: Props) => {
}
}, [product, setActive, selectedVariant]);
+ useEffect(() => {
+ const fetchData = async () => {
+ const qty_available = await odooApi(
+ 'GET',
+ `/api/v1/product_variant/${selectedVariant.id}/qty_available`
+ );
+
+ setQtyPickUp(qty_available?.qty);
+ };
+ fetchData();
+ }, [selectedVariant]);
+
+ useEffect(() => {
+ setQuantityInput('1');
+ }, [selectedVariant]);
+
let voucherPastiHemat = 0;
if (
@@ -130,10 +149,17 @@ const PriceAction = ({ product }: Props) => {
</div>
<div>
- <span className={sla?.qty < 10 ? 'text-red-600 font-medium' : ''}>
- {' '}
+ <Skeleton
+ isLoaded={sla}
+ h='21px'
+ // w={16}
+ className={sla?.qty < 10 ? 'text-red-600 font-medium' : ''}
+ >
Stock : {sla?.qty}{' '}
- </span>
+ </Skeleton>
+ {/* <span className={sla?.qty < 10 ? 'text-red-600 font-medium' : ''}>
+ {' '}
+ </span> */}
</div>
<div>
{product?.is_in_bu && (
@@ -149,6 +175,11 @@ const PriceAction = ({ product }: Props) => {
)}
</div>
</div>
+ {qtyPickUp > 0 && (
+ <div className='text-[12px] mt-1 text-red-500 italic'>
+ * {qtyPickUp} barang bisa di pickup
+ </div>
+ )}
<div className='h-4' />
<div className={`${style['action-wrapper']}`}>
diff --git a/src-migrate/types/cart.ts b/src-migrate/types/cart.ts
index a3115103..05fdcadb 100644
--- a/src-migrate/types/cart.ts
+++ b/src-migrate/types/cart.ts
@@ -34,6 +34,7 @@ export type CartItem = {
stock: number;
is_in_bu: boolean;
on_hand_qty: number;
+ available_quantity: number;
weight: number;
attributes: string[];
parent: {
diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx
index 0e180d9c..e83e719c 100644
--- a/src/lib/checkout/components/Checkout.jsx
+++ b/src/lib/checkout/components/Checkout.jsx
@@ -442,6 +442,7 @@ const Checkout = () => {
const productOrder = products.map((product) => ({
product_id: product.id,
quantity: product.quantity,
+ available_quantity: product?.availableQuantity,
}));
let data = {
// partner_shipping_id: auth.partnerId,
diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx
index e7a1fa4e..cca8ec5e 100644
--- a/src/lib/product/components/Product/ProductDesktopVariant.jsx
+++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx
@@ -434,14 +434,16 @@ const ProductDesktopVariant = ({
</button>
</div>
<div>
- <span
+ <Skeleton
+ isLoaded={sla}
+ h='21px'
+ // w={16}
className={
product?.sla?.qty < 10 ? 'text-red-600 font-medium' : ''
}
>
- {' '}
Stock : {product?.sla?.qty}{' '}
- </span>
+ </Skeleton>
</div>
<div>
{product?.sla?.qty > 0 && (
diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx
index 4d401037..d001c7f4 100644
--- a/src/lib/transaction/components/Transaction.jsx
+++ b/src/lib/transaction/components/Transaction.jsx
@@ -778,6 +778,10 @@ const Transaction = ({ id }) => {
? `| ${product?.attributes.join(', ')}`
: ''}
</div>
+ <div className='text-[10px] text-red-500 italic mt-2'>
+ {product.availableQuantity} barang ini bisa di
+ pickup maksimal pukul 16.00
+ </div>
</div>
</td>
{/* <td>
@@ -879,7 +883,7 @@ const Transaction = ({ id }) => {
</div>
</div>
</div>
- )}
+ )}
{transaction?.data?.productsRejectLine.length > 0 && (
<div className='text-h-sm font-semibold mt-10 mb-4'>
diff --git a/src/lib/variant/components/VariantCard.jsx b/src/lib/variant/components/VariantCard.jsx
index 68cdf54f..08b7a97e 100644
--- a/src/lib/variant/components/VariantCard.jsx
+++ b/src/lib/variant/components/VariantCard.jsx
@@ -103,30 +103,42 @@ const VariantCard = ({ product, openOnClick = true, buyMore = false }) => {
</div>
</div>
</div>
-
</div>
<div className='w-8/12 flex flex-col'>
- <p className='product-card__title wrap-line-ellipsis-2'>{product.parent.name}</p>
+ <p className='product-card__title wrap-line-ellipsis-2'>
+ {product.parent.name}
+ </p>
<p className='text-caption-2 text-gray_r-11 mt-1'>
{product.code || '-'}
- {product.attributes.length > 0 ? ` ・ ${product.attributes.join(', ')}` : ''}
+ {product.attributes.length > 0
+ ? ` ・ ${product.attributes.join(', ')}`
+ : ''}
</p>
<p className='text-caption-2 text-gray_r-11 mt-1'>
Berat Item : {product?.weight} Kg x {product?.quantity} Barang
</p>
+ <p className='text-[10px] text-red-500 italic mt-2'>
+ {product.availableQuantity} barang ini bisa di pickup maksimal pukul
+ 16.00
+ </p>
<div className='flex flex-wrap gap-x-1 items-center mt-auto'>
{product.hasFlashsale && (
<>
<p className='text-caption-2 text-gray_r-11 line-through'>
{currencyFormat(product.price.price)}
</p>
- <span className='badge-red'>{product.price.discountPercentage}%</span>
+ <span className='badge-red'>
+ {product.price.discountPercentage}%
+ </span>
</>
)}
</div>
<p className='text-caption-2 text-gray_r-11 mt-1'>
{product.price.priceDiscount > 0
- ? currencyFormat(product.price.priceDiscount) + ' × ' + product.quantity + ' Barang'
+ ? currencyFormat(product.price.priceDiscount) +
+ ' × ' +
+ product.quantity +
+ ' Barang'
: ''}
</p>
<p className='text-caption-2 text-gray_r-12 font-bold mt-2'>