From 019068a387c29ec61b53031b68cf81000063186e Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 26 Jul 2023 14:05:53 +0700 Subject: add condition source --- src/core/utils/cart.js | 6 ++++-- .../product/components/Product/ProductDesktop.jsx | 23 +++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/core/utils/cart.js b/src/core/utils/cart.js index dcb104f9..598f4a74 100644 --- a/src/core/utils/cart.js +++ b/src/core/utils/cart.js @@ -35,8 +35,10 @@ const addCart = async (product_id, qty, selected, programLineId = null, source) 'product_id' : product_id, 'qty' : qty, 'selected' : selected, - 'program_line_id' : programLineId, - 'source' : source + 'program_line_id' : programLineId + } + if(source){ + data.source = source } const id = getAuth()?.id diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 9be65bfb..cf4d9b0d 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -72,25 +72,28 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { return isValid } - const updateCart = (variantId, quantity) => { + const updateCart = (variantId, quantity, source) => { + let dataUpdate if (product.variants.length > 1) { let variantIndex = product.variants.findIndex((varian) => varian.id == variantId) - updateItemCart({ + dataUpdate = { productId: variantId, quantity, programLineId: product.variants[variantIndex].programActive, selected: true, - source: 'buy' - }) + source : source === 'buy' ? 'buy' : null + } + } else { - updateItemCart({ + dataUpdate = { productId: variantId, quantity, programLineId: promotionActiveId, selected: true, - source: 'buy' - }) + source : source === 'buy' ? 'buy' : null + } } + updateItemCart(dataUpdate) } const handleAddToCart = (variantId) => { @@ -102,7 +105,8 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { if (!validQuantity(quantity)) return - updateCart(variantId, quantity) + let source = 'cart' + updateCart(variantId, quantity, source) setAddCartAlert(true) } @@ -110,7 +114,8 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { const quantity = variantQuantityRefs.current[variant].value if (!validQuantity(quantity)) return - updateCart(variant, quantity) + let source = 'buy' + updateCart(variant, quantity, source) router.push(`/shop/checkout?source=buy`) } -- cgit v1.2.3 From 898bff71f6e3f158b9cb73431306de00384b2e9d Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 26 Jul 2023 14:10:26 +0700 Subject: update cart mobile web --- src/lib/product/components/Product/ProductMobile.jsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/product/components/Product/ProductMobile.jsx b/src/lib/product/components/Product/ProductMobile.jsx index 91de173a..2edd1a5f 100644 --- a/src/lib/product/components/Product/ProductMobile.jsx +++ b/src/lib/product/components/Product/ProductMobile.jsx @@ -137,7 +137,15 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => { const handleClickBuy = () => { if (!validAction()) return - router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`) + + updateItemCart({ + productId: activeVariant.id, + quantity, + programLineId: promotionActiveId, + selected: true, + source : 'buy' + }) + router.push(`/shop/checkout?source=buy`) } const productSimilarQuery = [ -- cgit v1.2.3 From 02fbca0f66aac32e562364ddfda9c5bae4177e96 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 26 Jul 2023 14:31:59 +0700 Subject: fix error quotation --- src/lib/quotation/components/Quotation.jsx | 41 +++++++++++++++++++----------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/lib/quotation/components/Quotation.jsx b/src/lib/quotation/components/Quotation.jsx index 9ffc2fbb..c2a36001 100644 --- a/src/lib/quotation/components/Quotation.jsx +++ b/src/lib/quotation/components/Quotation.jsx @@ -9,17 +9,23 @@ import _ from 'lodash' import { deleteItemCart, getCart, getItemCart } from '@/core/utils/cart' import currencyFormat from '@/core/utils/currencyFormat' import { toast } from 'react-hot-toast' -import checkoutApi from '@/lib/checkout/api/checkoutApi' +// import checkoutApi from '@/lib/checkout/api/checkoutApi' import { useRouter } from 'next/router' import VariantGroupCard from '@/lib/variant/components/VariantGroupCard' import MobileView from '@/core/components/views/MobileView' import DesktopView from '@/core/components/views/DesktopView' import Image from '@/core/components/elements/Image/Image' +import { useQuery } from 'react-query' + +const { checkoutApi } = require('@/lib/checkout/api/checkoutApi') +const { getProductsCheckout } = require('@/lib/checkout/api/checkoutApi') const Quotation = () => { const router = useRouter() const auth = useAuth() + const { data: cartCheckout } = useQuery('cartCheckout', () => getProductsCheckout()) + const [products, setProducts] = useState(null) const [totalAmount, setTotalAmount] = useState(0) const [totalDiscountAmount, setTotalDiscountAmount] = useState(0) @@ -43,9 +49,13 @@ const Quotation = () => { }) } } - loadProducts() + // loadProducts() }, []) + useEffect(() => { + setProducts(cartCheckout?.products) + }, [cartCheckout]) + useEffect(() => { if (products) { let calculateTotalAmount = 0 @@ -118,26 +128,26 @@ const Quotation = () => {
Total Belanja
-
{currencyFormat(totalAmount)}
+
{currencyFormat(cartCheckout?.totalPurchase)}
-
Total Diskon
-
- {currencyFormat(totalDiscountAmount)}
+
Diskon Produk
+
- {currencyFormat(cartCheckout?.totalDiscount)}
Subtotal
-
{currencyFormat(totalAmount - totalDiscountAmount)}
+
{currencyFormat(cartCheckout?.subtotal)}
PPN 11%
-
{currencyFormat(taxTotal)}
+
{currencyFormat(cartCheckout?.tax)}

Grand Total
- {currencyFormat(totalAmount - totalDiscountAmount + taxTotal)} + {currencyFormat(cartCheckout?.grandTotal)}

*) Belum termasuk biaya pengiriman

@@ -237,23 +247,24 @@ const Quotation = () => {
-
Total Belanja
-
{currencyFormat(totalAmount)}
+
{currencyFormat(cartCheckout?.totalPurchase)}
-
Total Diskon
-
- {currencyFormat(totalDiscountAmount)}
+
Diskon Produk
+
+ - {currencyFormat(cartCheckout?.totalDiscount)} +
Subtotal
-
{currencyFormat(totalAmount - totalDiscountAmount)}
+
{currencyFormat(cartCheckout?.subtotal)}
PPN 11%
-
{currencyFormat(taxTotal)}
+
{currencyFormat(cartCheckout?.tax)}
@@ -262,7 +273,7 @@ const Quotation = () => {
Grand Total
- {currencyFormat(totalAmount - totalDiscountAmount + taxTotal)} + {currencyFormat(cartCheckout?.grandTotal)}

-- cgit v1.2.3 From d7e6a3cf7f7d2f3338c0b82dfe6109754dc9a921 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 26 Jul 2023 16:56:30 +0700 Subject: error user id --- src/lib/quotation/components/Quotation.jsx | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/lib/quotation/components/Quotation.jsx b/src/lib/quotation/components/Quotation.jsx index c2a36001..cee35457 100644 --- a/src/lib/quotation/components/Quotation.jsx +++ b/src/lib/quotation/components/Quotation.jsx @@ -82,6 +82,7 @@ const Quotation = () => { let data = { partner_shipping_id: auth.partnerId, partner_invoice_id: auth.partnerId, + user_id: auth.id, order_line: JSON.stringify(productOrder) } const isSuccess = await checkoutApi({ data }) -- cgit v1.2.3 From 46c208194cb80be3a4ce2d42ad817551b9b2a18d Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 27 Jul 2023 10:08:28 +0700 Subject: bugs fix variant page --- .../product/components/Product/ProductDesktop.jsx | 38 +++++-- .../components/Product/ProductDesktopVariant.jsx | 110 ++++++++++++++++++++- .../components/Product/ProductMobileVariant.jsx | 75 +++++++++++++- 3 files changed, 207 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index cf4d9b0d..dfff91d7 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -1,5 +1,4 @@ import Image from '@/core/components/elements/Image/Image' -import ImageNext from 'next/image' import Link from '@/core/components/elements/Link/Link' import DesktopView from '@/core/components/views/DesktopView' import currencyFormat from '@/core/utils/currencyFormat' @@ -15,10 +14,7 @@ import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import ProductCard from '../ProductCard' import productSimilarApi from '../../api/productSimilarApi' import whatsappUrl from '@/core/utils/whatsappUrl' -import { gtagAddToCart } from '@/core/utils/googleTag' import odooApi from '@/core/api/odooApi' -import { last } from 'lodash-contrib' -import { m } from 'framer-motion' import { Button, Spinner } from 'flowbite-react' import PromotionType from '@/lib/promotinProgram/components/PromotionType' import useAuth from '@/core/hooks/useAuth' @@ -81,16 +77,15 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { quantity, programLineId: product.variants[variantIndex].programActive, selected: true, - source : source === 'buy' ? 'buy' : null + source: source === 'buy' ? 'buy' : null } - } else { dataUpdate = { productId: variantId, quantity, programLineId: promotionActiveId, selected: true, - source : source === 'buy' ? 'buy' : null + source: source === 'buy' ? 'buy' : null } } updateItemCart(dataUpdate) @@ -269,7 +264,34 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { )} -

+ {product.variants.length === 1 && ( +
+
Stock
+
+ {isLoadingSLA && ( +
+ +
+ )} + {product?.variants[0].sla?.qty > 0 && ( + {product?.variants[0].sla?.qty} + )} + {product?.variants[0].sla?.qty == 0 && ( + + Tanya Admin + + )} +
+
+ )} +
1 ? '' : 'bg-gray_r-4'} `}>
Berat Barang
{product?.weight > 0 && {product?.weight} KG} diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx index e0573357..940ba46f 100644 --- a/src/lib/product/components/Product/ProductDesktopVariant.jsx +++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx @@ -14,13 +14,19 @@ import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import ProductCard from '../ProductCard' import productSimilarApi from '../../api/productSimilarApi' import whatsappUrl from '@/core/utils/whatsappUrl' +import useAuth from '@/core/hooks/useAuth' +import odooApi from '@/core/api/odooApi' +import { Button, Spinner } from 'flowbite-react' const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant }) => { const router = useRouter() + const auth = useAuth() + const { slug } = router.query const [lowestPrice, setLowestPrice] = useState(null) const [addCartAlert, setAddCartAlert] = useState(false) + const [isLoadingSLA, setIsLoadingSLA] = useState(true) const getLowestPrice = useCallback(() => { const lowest = product.price @@ -53,20 +59,34 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant }) } const handleAddToCart = (variant) => { - const quantity = variantQuantityRefs.current[variant].value + if (!auth) { + router.push(`/login?next=/shop/product/${slug}`) + return + } + const quantity = variantQuantityRefs.current[product.id].value if (!validQuantity(quantity)) return updateItemCart({ - productId: variant, + productId: product.id, quantity, - selected: true + programLineId: null, + selected: true, + source: null }) setAddCartAlert(true) } const handleBuy = (variant) => { - const quantity = variantQuantityRefs.current[variant].value + const quantity = variantQuantityRefs.current[product.id].value if (!validQuantity(quantity)) return - router.push(`/shop/checkout?productId=${variant}&quantity=${quantity}`) + + updateItemCart({ + productId: variant, + quantity, + programLineId: null, + selected: true, + source: 'buy' + }) + router.push(`/shop/checkout?source=buy`) } const variantSectionRef = useRef(null) @@ -97,6 +117,16 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant }) if (!productSimilarInBrand) loadProductSimilarInBrand() }, [product, productSimilarInBrand]) + useEffect(() => { + const fetchData = async () => { + const dataSLA = await odooApi('GET', `/api/v1/product_variant/${product.id}/stock`) + product.sla = dataSLA + + setIsLoadingSLA(false) + } + fetchData() + }, [product]) + return (
@@ -139,6 +169,76 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant }) )}
+
+
Persiapan Barang
+
+ {product.sla ? ( + product.sla?.slaDate != '-' ? ( + + ) : ( + '-' + ) + ) : ( + + )} +
+
+
+
Stock
+
+ {isLoadingSLA && ( +
+ +
+ )} + {product?.sla?.qty > 0 && {product?.sla?.qty}} + {product?.sla?.qty == 0 && ( + + Tanya Admin + + )} +
+
Berat Barang
diff --git a/src/lib/product/components/Product/ProductMobileVariant.jsx b/src/lib/product/components/Product/ProductMobileVariant.jsx index 958b00cc..e0ba90c3 100644 --- a/src/lib/product/components/Product/ProductMobileVariant.jsx +++ b/src/lib/product/components/Product/ProductMobileVariant.jsx @@ -15,6 +15,8 @@ import { createSlug } from '@/core/utils/slug' import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import whatsappUrl from '@/core/utils/whatsappUrl' import { gtagAddToCart } from '@/core/utils/googleTag' +import odooApi from '@/core/api/odooApi' +import { Button, Spinner } from 'flowbite-react' const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() @@ -24,6 +26,8 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { const [informationTab, setInformationTab] = useState(informationTabOptions[0].value) const [addCartAlert, setAddCartAlert] = useState(false) + const [isLoadingSLA, setIsLoadingSLA] = useState(true) + const getLowestPrice = () => { const lowest = product.price return lowest @@ -68,16 +72,26 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { if (!validAction()) return gtagAddToCart(activeVariant, quantity) updateItemCart({ - productId: activeVariant.id, + productId: variant, quantity, - selected: true + programLineId: null, + selected: true, + source: null }) setAddCartAlert(true) } const handleClickBuy = () => { if (!validAction()) return - router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`) + + updateItemCart({ + productId: product.id, + quantity, + programLineId: null, + selected: true, + source : 'buy' + }) + router.push(`/shop/checkout?source=buy`) } const productSimilarQuery = [ @@ -86,6 +100,16 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { `fq=-manufacture_id_i:${product.manufacture?.id || 0}` ].join('&') + useEffect(() => { + const fetchData = async () => { + const dataSLA = await odooApi('GET', `/api/v1/product_variant/${product.id}/stock`) + product.sla = dataSLA + + setIsLoadingSLA(false) + } + fetchData() + }, [product]) + return ( { active={informationTab == 'specification'} className='rounded border border-gray_r-6 divide-y divide-gray_r-6' > + + + {isLoadingSLA ? ( + + ) : product?.sla?.slaDate != '-' ? ( + + ): ( + '-' + )} + + SKU-{product?.id} -- cgit v1.2.3