summaryrefslogtreecommitdiff
path: root/src/lib/quotation/components/Quotationheader.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/quotation/components/Quotationheader.jsx')
-rw-r--r--src/lib/quotation/components/Quotationheader.jsx265
1 files changed, 0 insertions, 265 deletions
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
deleted file mode 100644
index 4529c977..00000000
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ /dev/null
@@ -1,265 +0,0 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
-import { createSlug } from '@/core/utils/slug';
-import useAuth from '@/core/hooks/useAuth';
-import { useRouter } from 'next/router';
-import odooApi from '@/core/api/odooApi';
-import { useProductCartContext } from '@/contexts/ProductCartContext';
-import Image from '@/core/components/elements/Image/Image';
-import whatsappUrl from '@/core/utils/whatsappUrl';
-import { AnimatePresence, motion } from 'framer-motion';
-import style from '../../../../src-migrate/modules/cart/styles/item-promo.module.css';
-import useTransactions from '../../transaction/hooks/useTransactions';
-import currencyFormat from '@/core/utils/currencyFormat';
-const { DocumentCheckIcon, PhotoIcon } = require('@heroicons/react/24/outline');
-const { default: Link } = require('next/link');
-
-const Quotationheader = (quotationCount) => {
- const auth = useAuth();
- const query = {
- context: 'quotation',
- site: auth?.webRole === null && auth?.site ? auth.site : null,
- };
-
- const router = useRouter();
- const [subTotal, setSubTotal] = useState(null);
- const [buttonLoading, SetButtonTerapkan] = useState(false);
- const itemLoading = [1, 2, 3];
- const [countQuotation, setCountQuotation] = useState(null);
- const { productCart, setProductCart, refreshCart, setRefreshCart, isLoading, setIsloading, productQuotation, setProductQuotation } =
- useProductCartContext();
-
- const [isHovered, setIsHovered] = useState(false);
- const [isTop, setIsTop] = useState(true);
-
- const qotation = useMemo(() => {
- return productQuotation || [];
- }, [productQuotation]);
-
- const handleMouseEnter = () => {
- setIsHovered(true);
- getCart();
- };
-
- const handleMouseLeave = () => {
- setIsHovered(false);
- };
-
- const getCart = () => {
- if (!productQuotation && auth) {
- refreshCartf();
- }
- };
- let { transactions } = useTransactions({ query });
-
- const refreshCartf = useCallback(async () => {
- setIsloading(true);
- let pendingTransactions = transactions?.data?.saleOrders.filter(transaction => transaction.status === 'draft');
- setProductQuotation(pendingTransactions);
- setCountQuotation(pendingTransactions?.length ? pendingTransactions?.length : pendingTransactions?.length);
- setIsloading(false);
- }, [setProductQuotation, setIsloading]);
-
- useEffect(() => {
- if (!qotation) return
-
- let calculateTotalDiscountAmount = 0
- for (const product of qotation) {
- // if (qotation.quantity == '') continue
- calculateTotalDiscountAmount += product.amountUntaxed
- }
- let subTotal = calculateTotalDiscountAmount
- setSubTotal(subTotal)
- }, [qotation])
-
- useEffect(() => {
- if (refreshCart) {
- refreshCartf();
- }
- setRefreshCart(false);
- }, [ refreshCartf, setRefreshCart]);
-
- useEffect(() => {
- setCountQuotation(quotationCount.quotationCount);
- setProductQuotation(quotationCount.data);
- }, [quotationCount]);
-
- useEffect(() => {
- const handleScroll = () => {
- setIsTop(window.scrollY === 0);
- };
- window.addEventListener('scroll', handleScroll);
- return () => {
- window.removeEventListener('scroll', handleScroll);
- };
- }, []);
-
- const handleCheckout = async () => {
- SetButtonTerapkan(true);
- let checkoutAll = await odooApi('POST', `/api/v1/user/${auth.id}/cart/select-all`);
- router.push('/my/quotations');
- };
-
- return (
- <div className='relative group'>
- <div>
- <Link
- href='/my/quotations'
- target='_blank'
- rel='noreferrer'
- className='flex items-center gap-x-2 !text-gray_r-12/80'
- onMouseEnter={handleMouseEnter}
- onMouseLeave={handleMouseLeave}
- >
- <div className={`relative ${countQuotation > 0 && 'mr-2'}`}>
- <DocumentCheckIcon className='w-7' />
- {countQuotation > 0 && (
- <span className='absolute -top-2 -right-2 badge-solid-red rounded-full w-5 h-5 flex items-center justify-center'>
- {countQuotation}
- </span>
- )}
- </div>
- <span>
- List
- <br />
- Quotation
- </span>
- </Link>
- </div>
- <AnimatePresence>
- {isHovered && (
- <>
- <motion.div
- initial={{ opacity: 0 }}
- animate={{ opacity: 1, top: isTop ? 230 : 155 }}
- exit={{ opacity: 0 }}
- transition={{ duration: 0.15, top: { duration: 0.3 } }}
- className={`fixed left-0 w-full h-full bg-black/50 z-10`}
- />
- <motion.div
- initial={{ opacity: 0 }}
- animate={{ opacity: 1, transition: { duration: 0.2 } }}
- exit={{ opacity: 0, transition: { duration: 0.3 } }}
- className='absolute z-10 left-0 w-96'
- onMouseEnter={handleMouseEnter}
- onMouseLeave={handleMouseLeave}
- >
- <motion.div
- initial={{ height: 0 }}
- animate={{ height: 'auto' }}
- exit={{ height: 0 }}
- className='w-full max-w-md p-2 bg-white border border-gray-200 rounded-lg shadow overflow-hidden'
- >
- <div className='p-2 flex justify-between items-center'>
- <h5 className='text-base font-semibold leading-none'>Daftar Quotation</h5>
- </div>
- <hr className='mt-3 mb-3 border border-gray-100' />
- <div className='flow-root max-h-[250px] overflow-y-auto'>
- {!auth && (
- <div className='justify-center p-4'>
- <p className='text-gray-500 text-center '>
- Silahkan{' '}
- <Link href='/login' className='text-red-600 underline leading-6'>
- Login
- </Link>{' '}
- Untuk Melihat Daftar Quotation Anda
- </p>
- </div>
- )}
- {isLoading &&
- itemLoading.map((item) => (
- <div key={item} role='status' className='max-w-sm animate-pulse'>
- <div className='flex items-center space-x-4 mb- 2'>
- <div className='flex-shrink-0'>
- <PhotoIcon className='h-16 w-16 text-gray-500' />
- </div>
- <div className='flex-1 min-w-0'>
- <div className='h-2.5 bg-gray-200 rounded-full dark:bg-gray-700 w-48 mb-4'></div>
- <div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 max-w-[360px] mb-2.5'></div>
- <div className='h-2 bg-gray-200 rounded-full dark:bg-gray-700 mb-2.5'></div>
- </div>
- </div>
- </div>
- ))}
- {auth && qotation.length === 0 && !isLoading && (
- <div className='justify-center p-4'>
- <p className='text-gray-500 text-center '>
- Tidak Ada Quotation
- </p>
- </div>
- )}
- {auth && qotation.length > 0 && !isLoading && (
- <>
- <ul role='list' className='divide-y divide-gray-200 dark:divide-gray-700'>
- {qotation &&
- qotation?.map((product, index) => (
- <>
- <li className='py-1 sm:py-2'>
- <div className='flex justify-between border p-2 flex-col gap-y-2 hover:border-red-500'>
- <Link
- href={`/my/quotations/${product?.id}`}
- className='hover:border-red-500'
- >
- <div className='flex justify-between mb-2'>
- <div className='flex flex-row items-center'>
- <p className='tanggal text-xs opacity-80 mr-[2px]'>Sales : </p>
- <p className='tanggal text-xs text-red-500 font-semibold'>{product.sales}</p>
- </div>
- <div className='flex flex-row items-center'>
- <p className='text-xs opacity-80 mr-[2px]'>Status :</p>
- <p className='badge-red h-fit text-xs whitespace-nowrap'>Pending Quotation</p>
- </div>
- </div>
- <div className='flex justify-between mb-2'>
- <div className='flex flex-col items-start'>
- <p className=' text-xs opacity-80 mr-[2px]'>No. Transaksi</p>
- <p className=' text-sm text-red-500 font-semibold'> {product.name}</p>
- </div>
- <div className='flex flex-col items-end'>
- <p className='text-xs opacity-80 mr-[2px]'>No. Purchase Order</p>
- <p className='font-semibold text-sm text-red-500'> {product.purchaseOrderName ? product.purchaseOrderName : '-'}</p>
- </div>
- </div>
- {/* <div className='my-0.5 h-0.5 bg-gray-200'></div> */}
- <hr className='mt-3 mb-3 border border-gray-100' />
- <div className='bagian bawah flex justify-between mt-2'>
- <p className='font-semibold text-sm'>Total</p>
- <p className='font-semibold text-sm'>{currencyFormat(product.amountUntaxed)}</p>
- </div>
- </Link>
- </div>
- </li>
- </>
- ))}
- </ul>
- <hr />
- </>
- )}
- </div>
- {auth && qotation.length > 0 && !isLoading && (
- <>
- <div className='mt-3 ml-1'>
- <span className='text-gray-400 text-caption-2'>Subtotal Sebelum PPN : </span>
- <span className='font-semibold text-red-600'>{currencyFormat(subTotal)}</span>
- </div>
- <div className='mt-5 mb-2'>
- <button
- type='button'
- className='btn-solid-red rounded-lg w-full'
- onClick={handleCheckout}
- disabled={buttonLoading}
- >
- {buttonLoading ? 'Loading...' : 'Lihat Semua'}
- </button>
- </div>
- </>
- )}
- </motion.div>
- </motion.div>
- </>
- )}
- </AnimatePresence>
- </div>
- );
-};
-
-export default Quotationheader;