import Alert from '@/core/components/elements/Alert/Alert' import Divider from '@/core/components/elements/Divider/Divider' import Link from '@/core/components/elements/Link/Link' import useAuth from '@/core/hooks/useAuth' import CartApi from '@/lib/cart/api/CartApi' import { ExclamationCircleIcon } from '@heroicons/react/24/outline' import { useEffect, useState } from 'react' 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 { 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' const Quotation = () => { const router = useRouter() const auth = useAuth() const [products, setProducts] = useState(null) const [totalAmount, setTotalAmount] = useState(0) const [totalDiscountAmount, setTotalDiscountAmount] = useState(0) useEffect(() => { const loadProducts = async () => { const cart = getCart() const variantIds = _.filter(cart, (o) => o.selected == true) .map((o) => o.productId) .join(',') const dataProducts = await CartApi({ variantIds }) const productsWithQuantity = dataProducts?.map((product) => { return { ...product, quantity: getItemCart({ productId: product.id }).quantity } }) if (productsWithQuantity) { Promise.all(productsWithQuantity).then((resolvedProducts) => { setProducts(resolvedProducts) }) } } loadProducts() }, []) useEffect(() => { if (products) { let calculateTotalAmount = 0 let calculateTotalDiscountAmount = 0 products.forEach((product) => { calculateTotalAmount += product.price.price * product.quantity calculateTotalDiscountAmount += (product.price.price - product.price.priceDiscount) * product.quantity }) setTotalAmount(calculateTotalAmount) setTotalDiscountAmount(calculateTotalDiscountAmount) } }, [products]) const [isLoading, setIsLoading] = useState(false) const checkout = async () => { if (!products || products.length == 0) return setIsLoading(true) const productOrder = products.map((product) => ({ product_id: product.id, quantity: product.quantity })) let data = { partner_shipping_id: auth.partnerId, partner_invoice_id: auth.partnerId, order_line: JSON.stringify(productOrder) } const isSuccess = await checkoutApi({ data }) setIsLoading(false) if (isSuccess?.id) { for (const product of products) deleteItemCart({ productId: product.id }) router.push(`/shop/quotation/finish?id=${isSuccess.id}`) return } toast.error('Gagal melakukan transaksi, terjadi kesalahan internal') } const taxTotal = (totalAmount - totalDiscountAmount) * 0.11 return ( <>
Jika mengalami kesulitan dalam melakukan pembelian di website Indoteknik. Hubungi kami disini
{products && }
Ringkasan Penawaran
{products?.length} Barang

Total Belanja
{currencyFormat(totalAmount)}
Total Diskon
- {currencyFormat(totalDiscountAmount)}
Subtotal
{currencyFormat(totalAmount - totalDiscountAmount)}
PPN 11%
{currencyFormat(taxTotal)}

Grand Total
{currencyFormat(totalAmount - totalDiscountAmount + taxTotal)}

*) Belum termasuk biaya pengiriman

Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '} Syarat & Ketentuan {' '} yang berlaku

Detail Barang
{products?.map((product) => ( ))}
Nama Produk Jumlah Harga Subtotal
{product?.name}
{product?.parent?.name}
{product?.code}{' '} {product?.attributes.length > 0 ? `| ${product?.attributes.join(', ')}` : ''}
{product?.price?.discountPercentage > 0 && (
{currencyFormat(product?.price?.price)}
{product?.price?.discountPercentage}%
)}
{currencyFormat(product?.price?.priceDiscount)}
{currencyFormat(product?.price?.priceDiscount * product?.quantity)}
Ringkasan Pesanan
{products?.length} Barang

Total Belanja
{currencyFormat(totalAmount)}
Total Diskon
- {currencyFormat(totalDiscountAmount)}
Subtotal
{currencyFormat(totalAmount - totalDiscountAmount)}
PPN 11%
{currencyFormat(taxTotal)}

Grand Total
{currencyFormat(totalAmount - totalDiscountAmount + taxTotal)}

*) Belum termasuk biaya pengiriman

Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '} Syarat & Ketentuan {' '} yang berlaku


) } export default Quotation