From 0c74635521471e3d67c434a7df9cd9c61bbcaa72 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 6 Oct 2023 14:09:55 +0700 Subject: fixing discount presentage --- src/lib/product/components/Product/ProductDesktop.jsx | 2 +- src/lib/product/components/Product/ProductMobile.jsx | 2 +- src/lib/product/components/ProductCard.jsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 4c8c3ae9..55878a93 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -216,7 +216,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
- {product.lowestPrice.discountPercentage}% + {Math.floor(product.lowestPrice.discountPercentage)}%
{
- {product.lowestPrice.discountPercentage}% + {Math.floor(product.lowestPrice.discountPercentage)}%
{
{currencyFormat(product.lowestPrice.price)}
-
{product?.lowestPrice.discountPercentage}%
+
{Math.floor( product?.lowestPrice.discountPercentage)}%
)} @@ -196,7 +196,7 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { <> {product?.lowestPrice.discountPercentage > 0 && (
-
{product?.lowestPrice?.discountPercentage}%
+
{Math.floor(product?.lowestPrice?.discountPercentage)}%
{currencyFormat(product?.lowestPrice?.price)}
-- cgit v1.2.3 From 2ac1c3a84032ba819046e1634ca7c46ac0521e3b Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 6 Oct 2023 15:19:54 +0700 Subject: add condisi if harga tier user lebih rendah dari flash sale --- .../elements/Product/cartProductsList.jsx | 2 +- .../product/components/Product/ProductDesktop.jsx | 4 +- .../product/components/Product/ProductMobile.jsx | 4 +- src/lib/product/components/ProductCard.jsx | 29 +++--- src/utils/solrMapping.js | 113 +++++++++++---------- 5 files changed, 78 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/core/components/elements/Product/cartProductsList.jsx b/src/core/components/elements/Product/cartProductsList.jsx index 5887b425..32df992b 100644 --- a/src/core/components/elements/Product/cartProductsList.jsx +++ b/src/core/components/elements/Product/cartProductsList.jsx @@ -160,7 +160,7 @@ const CardProdcuctsList = ({ - {product?.hasFlashsale ? ( + {product?.hasFlashsale && product?.price?.discountPercentage > 0 ? ( <>
diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 55878a93..cc3cf666 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -203,7 +203,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
- {product?.flashSale?.remainingTime > 0 && ( + {product?.flashSale?.remainingTime > 0 && lowestPrice?.price.discountPercentage > 0 && (
{
)} */} - {lowestPrice?.isFlashsale ? ( + {lowestPrice?.isFlashsale && lowestPrice?.price.discountPercentage > 0 ? ( <>
diff --git a/src/lib/product/components/Product/ProductMobile.jsx b/src/lib/product/components/Product/ProductMobile.jsx index 63b391d5..ffa75f72 100644 --- a/src/lib/product/components/Product/ProductMobile.jsx +++ b/src/lib/product/components/Product/ProductMobile.jsx @@ -161,7 +161,7 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => { return (
- {product?.flashSale?.remainingTime > 0 && ( + {product?.flashSale?.remainingTime > 0 && activeVariant?.price.discountPercentage > 0 && (
{
Harga mulai dari:
)} - {activeVariant.isFlashsale ? ( + {activeVariant.isFlashsale && activeVariant?.price?.discountPercentage > 0 ? ( <>
{activeVariant?.price?.discountPercentage}%
diff --git a/src/lib/product/components/ProductCard.jsx b/src/lib/product/components/ProductCard.jsx index 5f213fe9..91c1f40e 100644 --- a/src/lib/product/components/ProductCard.jsx +++ b/src/lib/product/components/ProductCard.jsx @@ -89,17 +89,16 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { > {product?.name} - {product?.flashSale?.id > 0 ? ( + {product?.flashSale?.id > 0 && product?.lowestPrice.discountPercentage > 0 ? ( <> - {product?.lowestPrice.discountPercentage > 0 && ( -
-
- {currencyFormat(product.lowestPrice.price)} -
-
{Math.floor( product?.lowestPrice.discountPercentage)}%
+
+
+ {currencyFormat(product.lowestPrice.price)}
- )} - +
+ {Math.floor(product?.lowestPrice.discountPercentage)}% +
+
{product?.lowestPrice.priceDiscount > 0 ? ( currencyFormat(product?.lowestPrice.priceDiscount) @@ -114,7 +113,8 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { <> {currencyFormat(product?.lowestPrice.price)}
- Inc. PPN: {currencyFormat(product.lowestPrice.price * process.env.NEXT_PUBLIC_PPN )} + Inc. PPN:{' '} + {currencyFormat(product.lowestPrice.price * process.env.NEXT_PUBLIC_PPN)}
) : ( @@ -192,11 +192,13 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { > {product?.name} - {product?.flashSale?.id > 0 ? ( + {product?.flashSale?.id > 0 && product?.lowestPrice?.discountPercentage > 0 ? ( <> {product?.lowestPrice.discountPercentage > 0 && (
-
{Math.floor(product?.lowestPrice?.discountPercentage)}%
+
+ {Math.floor(product?.lowestPrice?.discountPercentage)}% +
{currencyFormat(product?.lowestPrice?.price)}
@@ -217,7 +219,8 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { <> {currencyFormat(product?.lowestPrice.price)}
- Inc. PPN: {currencyFormat(product.lowestPrice.price * process.env.NEXT_PUBLIC_PPN)} + Inc. PPN:{' '} + {currencyFormat(product.lowestPrice.price * process.env.NEXT_PUBLIC_PPN)}
) : ( diff --git a/src/utils/solrMapping.js b/src/utils/solrMapping.js index c8bd54ea..61816cf8 100644 --- a/src/utils/solrMapping.js +++ b/src/utils/solrMapping.js @@ -1,17 +1,17 @@ export const productMappingSolr = (products, pricelist) => { return products.map((product) => { let price = product.price_tier1_v2_f || 0 - let priceDiscount = product.price_discount_f || 0 - let discountPercentage = product.discount_f || 0 + let priceDiscount = 0 + let discountPercentage = 0 - if (pricelist) { - price = product?.[`price_${pricelist}_f`] || 0 + if (pricelist && product?.[`price_${pricelist}_f`] < price) { + price = product?.[`price_${pricelist}_f`] || 0 } - if (product?.flashsale_id_i > 0) { - price = product?.flashsale_base_price_f || 0 - priceDiscount = product?.flashsale_price_f || 0 - discountPercentage = product?.flashsale_discount_f || 0 + if (product?.flashsale_id_i > 0 ) { + price = product?.flashsale_base_price_f || 0 + priceDiscount = product?.flashsale_price_f || 0 + discountPercentage = product?.flashsale_discount_f || 0 } let productMapped = { @@ -55,59 +55,60 @@ export const productMappingSolr = (products, pricelist) => { } export const variantsMappingSolr = (parent, products, pricelist) => { - return products.map((product) => { - let price = product.price_tier1_v2_f || 0 - let priceDiscount = product.price_discount_f || 0 - let discountPercentage = product.discount_f || 0 - - if (pricelist) { + return products.map((product) => { + let price = product.price_tier1_v2_f || 0 + let priceDiscount = 0 + let discountPercentage = 0 + + if (pricelist) { + if (product?.[`price_${pricelist}_f`] < price) { price = product?.[`price_${pricelist}_f`] || 0 } - - if (product?.flashsale_id_i > 0) { + } + + if (product?.flashsale_id_i > 0 && product?.flashsale_price_f < price) { price = product?.flashsale_base_price_f || 0 priceDiscount = product?.flashsale_price_f || 0 discountPercentage = product?.flashsale_discount_f || 0 + } + + let productMapped = { + attributes: product.attributes || [], + id: product.product_id_i || '', + image: product.image_s || '', + code: product.default_code_s || '', + isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, + isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, + name: product.display_name_s || '', + price: { price, priceDiscount, discountPercentage }, + variantTotal: product.variant_total_i || 0, + stockTotal: product.stock_total_f || 0, + weight: product.weight_f || 0, + manufacture: {}, + parent: {} + } + + if (product.manufacture_id_i && product.manufacture_name_s) { + productMapped.manufacture = { + id: product.manufacture_id_i || '', + name: product.manufacture_name_s || '' } - - let productMapped = { - attributes: product.attributes || [], - id: product.product_id_i || '', - image: product.image_s || '', - code: product.default_code_s || '', - isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, - isFlashsale: flashsaleTime(product?.flashsale_end_date_s)?.isFlashSale, - name: product.display_name_s || '', - price: { price, priceDiscount, discountPercentage }, - variantTotal: product.variant_total_i || 0, - stockTotal: product.stock_total_f || 0, - weight: product.weight_f || 0, - manufacture: {}, - parent: {} - } - - if (product.manufacture_id_i && product.manufacture_name_s) { - productMapped.manufacture = { - id: product.manufacture_id_i || '', - name: product.manufacture_name_s || '' - } - } - productMapped.parent = { - id: parent.product_id_i || '', - image: parent.image_s || '', - name: parent.name_s || '' - } - return productMapped - }) - } + } + productMapped.parent = { + id: parent.product_id_i || '', + image: parent.image_s || '', + name: parent.name_s || '' + } + return productMapped + }) +} const flashsaleTime = (endDate) => { - const flashsaleEndDate = new Date(endDate) - const currentTime = new Date() - - const timeDifferenceInMillis = flashsaleEndDate - currentTime - const timeDifferenceInSeconds = timeDifferenceInMillis / 1000 - - return { remainingTime: timeDifferenceInSeconds, isFlashSale: flashsaleEndDate > currentTime } - } - + const flashsaleEndDate = new Date(endDate) + const currentTime = new Date() + + const timeDifferenceInMillis = flashsaleEndDate - currentTime + const timeDifferenceInSeconds = timeDifferenceInMillis / 1000 + + return { remainingTime: timeDifferenceInSeconds, isFlashSale: flashsaleEndDate > currentTime } +} -- cgit v1.2.3 From f0fd9b94ad84b71a5a38d212f777eff609e62438 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 6 Oct 2023 15:28:51 +0700 Subject: bugfix list variant --- src/lib/product/components/Product/ProductDesktop.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index cc3cf666..47e98c1a 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -49,7 +49,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { isFlashsale: variant.isFlashsale })) const lowest = prices.reduce((lowest, price) => { - return price.priceDiscount < lowest.priceDiscount ? price : lowest + return price.price < lowest.price ? price : lowest }, prices[0]) return lowest }, [product]) @@ -580,7 +580,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { - {variant.isFlashsale ? ( + {variant.isFlashsale && variant?.price?.discountPercentage > 0 ? ( <>
@@ -610,7 +610,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
Inc. PPN:{' '} {currencyFormat( - variant?.price?.priceDiscount * process.env.NEXT_PUBLIC_PPN + variant?.price?.price * process.env.NEXT_PUBLIC_PPN )}
-- cgit v1.2.3 From 591dc095a0e5f655e419ec4d1ae11d8f54bed196 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Mon, 9 Oct 2023 10:51:46 +0700 Subject: update fitur variant page --- .../components/Product/ProductDesktopVariant.jsx | 18 +++++++++--------- .../components/Product/ProductMobileVariant.jsx | 18 +++++++++--------- src/pages/api/shop/variant-detail.js | 18 ++++++++++++++++++ src/pages/shop/product/variant/[slug].jsx | 10 +++++++++- 4 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 src/pages/api/shop/variant-detail.js (limited to 'src') diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx index 51739bc9..ef61bafd 100644 --- a/src/lib/product/components/Product/ProductDesktopVariant.jsx +++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx @@ -140,7 +140,7 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant })
{product.name} @@ -270,32 +270,32 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant })
*/}
- {product?.flashSale?.remainingTime > 0 ? ( + {product?.isFlashsale > 0 && product?.price?.discountPercentage > 0? ( <>
- {lowestPrice?.discountPercentage}% + {product?.price?.discountPercentage}%
- {currencyFormat(lowestPrice?.price)} + {currencyFormat(product?.price?.price)}
- {currencyFormat(lowestPrice?.priceDiscount)} + {currencyFormat(product?.price?.priceDiscount)}
Termasuk PPN:{' '} - {currencyFormat(lowestPrice?.priceDiscount * process.env.NEXT_PUBLIC_PPN)} + {currencyFormat(product?.price?.priceDiscount * process.env.NEXT_PUBLIC_PPN)}
) : (

- {lowestPrice?.price > 0 ? ( + {product?.price?.price > 0 ? ( <> - {currencyFormat(lowestPrice?.price)} + {currencyFormat(product?.price?.price)}
Termasuk PPN:{' '} - {currencyFormat(lowestPrice?.price * process.env.NEXT_PUBLIC_PPN)} + {currencyFormat(product?.price?.price * process.env.NEXT_PUBLIC_PPN)}
) : ( diff --git a/src/lib/product/components/Product/ProductMobileVariant.jsx b/src/lib/product/components/Product/ProductMobileVariant.jsx index 8cdb631f..9888e482 100644 --- a/src/lib/product/components/Product/ProductMobileVariant.jsx +++ b/src/lib/product/components/Product/ProductMobileVariant.jsx @@ -29,7 +29,7 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { const [isLoadingSLA, setIsLoadingSLA] = useState(true) const getLowestPrice = () => { - const lowest = product.price + const lowest = product.lowestPrice return lowest } @@ -40,7 +40,7 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { price: getLowestPrice(), stock: product.stockTotal, weight: product.weight, - isFlashSale: product.isFlashsale + isFlashSale: product.isFlashSale }) useEffect(() => { @@ -50,9 +50,9 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { code: product.code, name: product.name, price: product.price, - stock: product.stock, + stock: product.stockTotal, weight: product.weight, - isFlashSale: product.isFlashsale + isFlashSale: product.isFlashSale }) } }, [selectedVariant, product]) @@ -115,7 +115,7 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { return ( {product.name} @@ -141,7 +141,7 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => {

{activeVariant?.name}

- {activeVariant.isFlashsale ? ( + {activeVariant.isFlashSale && activeVariant?.price?.discountPercentage > 0 ? ( <>
{activeVariant?.price?.discountPercentage}%
@@ -159,12 +159,12 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { ) : (

- {activeVariant?.price?.priceDiscount > 0 ? ( + {activeVariant?.price?.price > 0 ? ( <> - {currencyFormat(activeVariant?.price?.priceDiscount)} + {currencyFormat(activeVariant?.price?.price)}
Termasuk PPN:{' '} - {currencyFormat(activeVariant?.price.priceDiscount * process.env.NEXT_PUBLIC_PPN)} + {currencyFormat(activeVariant?.price.price * process.env.NEXT_PUBLIC_PPN)}
) : ( diff --git a/src/pages/api/shop/variant-detail.js b/src/pages/api/shop/variant-detail.js new file mode 100644 index 00000000..fadbe000 --- /dev/null +++ b/src/pages/api/shop/variant-detail.js @@ -0,0 +1,18 @@ +import { productMappingSolr, variantsMappingSolr } from '@/utils/solrMapping' +import axios from 'axios' + +export default async function handler(req, res) { + try { + let productVariants = await axios( + process.env.SOLR_HOST + + `/solr/variants/select?q=id:${req.query.id}&q.op=OR&indent=true` + ) + let auth = req.query.auth === 'false' ? JSON.parse(req.query.auth) : req.query.auth + let result = variantsMappingSolr('',productVariants.data.response.docs, auth || false) + + res.status(200).json(result) + } catch (error) { + console.error('Error fetching data from Solr:', error) + res.status(500).json({ error: 'Internal Server Error' }) + } +} \ No newline at end of file diff --git a/src/pages/shop/product/variant/[slug].jsx b/src/pages/shop/product/variant/[slug].jsx index ba2a79d5..d0790249 100644 --- a/src/pages/shop/product/variant/[slug].jsx +++ b/src/pages/shop/product/variant/[slug].jsx @@ -6,6 +6,7 @@ import dynamic from 'next/dynamic' import { useRouter } from 'next/router' import cookie from 'cookie' import variantApi from '@/lib/product/api/variantApi' +import axios from 'axios' const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout')) const Product = dynamic(() => import('@/lib/product/components/Product/Product')) @@ -15,9 +16,16 @@ export async function getServerSideProps(context) { const cookies = context.req.headers.cookie const cookieObj = cookies ? cookie.parse(cookies) : {} const auth = cookieObj.auth ? JSON.parse(cookieObj.auth) : {} + const tier = auth.pricelist ? auth.pricelist : false const authToken = auth?.token || '' - let product = await variantApi({ id: getIdFromSlug(slug), headers: { Token: authToken } }) + + let response = await axios( + `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/variant-detail?id=` + getIdFromSlug(slug) +'&auth=' + tier + ) + let product = response.data + // let product = await variantApi({ id: getIdFromSlug(slug), headers: { Token: authToken } }) + if (product?.length == 1) { product = product[0] /* const regexHtmlTags = /(<([^>]+)>)/gi -- cgit v1.2.3