From 807931ee9bcb063157ceb8368e5ee0941450c6ca Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Tue, 6 Aug 2024 14:32:41 +0700
Subject: add quotation pop up
---
src/lib/quotation/components/Quotationheader.jsx | 189 +++++++++++++++++++++++
1 file changed, 189 insertions(+)
create mode 100644 src/lib/quotation/components/Quotationheader.jsx
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
new file mode 100644
index 00000000..141b731e
--- /dev/null
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -0,0 +1,189 @@
+import { useCallback, useEffect, useMemo, useState } from 'react';
+import { getQuotationApi } from '../api/QuotationApi';
+import currencyFormat from '@/core/utils/currencyFormat';
+import { createSlug } from '@/core/utils/slug';
+import useAuth from '@/core/hooks/useAuth';
+import { useRouter } from 'next/router';
+import odooApi from '@/core/api/odooApi';
+import { useProductQuotationContext } from '@/contexts/ProductQuotationContext';
+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';
+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 { productQuotation, setProductQuotation, refreshQuotation, setRefreshQuotation, isLoading, setIsloading } =
+ useProductQuotationContext();
+
+ 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();
+ }
+ };
+ const refreshCartf = useCallback(async () => {
+ setIsloading(true);
+ let { transactions } = await useTransactions({ query });
+ let pendingTransactions = transactions?.data?.saleOrders.filter(transaction => transaction.status === 'draft');
+ setProductQuotation(pendingTransactions);
+ setCountQuotation(pendingTransactions.length);
+ setIsloading(false);
+ }, [setProductQuotation, setIsloading]);
+
+ useEffect(() => {
+ if (refreshQuotation) {
+ refreshCartf();
+ }
+ setRefreshQuotation(false);
+ }, [refreshQuotation, refreshCartf, setRefreshQuotation]);
+
+ useEffect(() => {
+ setCountQuotation(quotationCount.cartCount);
+ }, [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('/shop/quotation');
+ };
+
+ return (
+
+
+
+
0 && 'mr-2'}`}>
+
+ {countQuotation > 0 && (
+
+ {countQuotation}
+
+ )}
+
+
+ Daftar
+
+ Quotation
+
+
+
+
+ {isHovered && (
+ <>
+
+
+
+
+
Daftar Quotation
+
+ Lihat Semua
+
+
+
+
+ {!auth && (
+
+
+ Silahkan{' '}
+
+ Login
+ {' '}
+ Untuk Melihat Daftar Keranjang Belanja Anda
+
+
+ )}
+ {isLoading &&
+ itemLoading.map((item) => (
+
+ ))}
+ {auth && qotation.length === 0 && !isLoading && (
+
+
+ Tidak Ada Quotation
+
+
+ )}
+
+
+
+ >
+ )}
+
+
+ );
+};
+
+export default Quotationheader;
--
cgit v1.2.3
From a63b03fffdf46ecddecf356d1d00d6582add75cf Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Tue, 6 Aug 2024 17:05:01 +0700
Subject: update cart pop up
---
src/lib/quotation/components/Quotationheader.jsx | 67 +++++++++++++++++++-----
1 file changed, 55 insertions(+), 12 deletions(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 141b731e..9f0f17a6 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -1,16 +1,15 @@
import { useCallback, useEffect, useMemo, useState } from 'react';
-import { getQuotationApi } from '../api/QuotationApi';
-import currencyFormat from '@/core/utils/currencyFormat';
import { createSlug } from '@/core/utils/slug';
import useAuth from '@/core/hooks/useAuth';
import { useRouter } from 'next/router';
import odooApi from '@/core/api/odooApi';
-import { useProductQuotationContext } from '@/contexts/ProductQuotationContext';
+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');
@@ -20,14 +19,14 @@ const Quotationheader = (quotationCount) => {
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 { productQuotation, setProductQuotation, refreshQuotation, setRefreshQuotation, isLoading, setIsloading } =
- useProductQuotationContext();
+ const { productCart, setProductCart, refreshCart, setRefreshCart, isLoading, setIsloading, productQuotation, setProductQuotation, refreshQuotation, setRefreshQuotation } =
+ useProductCartContext();
const [isHovered, setIsHovered] = useState(false);
const [isTop, setIsTop] = useState(true);
@@ -49,12 +48,12 @@ const Quotationheader = (quotationCount) => {
refreshCartf();
}
};
+ let { transactions } = useTransactions({ query });
const refreshCartf = useCallback(async () => {
setIsloading(true);
- let { transactions } = await useTransactions({ query });
let pendingTransactions = transactions?.data?.saleOrders.filter(transaction => transaction.status === 'draft');
setProductQuotation(pendingTransactions);
- setCountQuotation(pendingTransactions.length);
+ setCountQuotation(pendingTransactions?.length ? pendingTransactions?.length : pendingTransactions?.length);
setIsloading(false);
}, [setProductQuotation, setIsloading]);
@@ -66,7 +65,7 @@ const Quotationheader = (quotationCount) => {
}, [refreshQuotation, refreshCartf, setRefreshQuotation]);
useEffect(() => {
- setCountQuotation(quotationCount.cartCount);
+ setCountQuotation(quotationCount.quotationCount);
}, [quotationCount]);
useEffect(() => {
@@ -85,6 +84,8 @@ const Quotationheader = (quotationCount) => {
router.push('/shop/quotation');
};
+ console.log("quotation",qotation)
+
return (
@@ -105,7 +106,7 @@ const Quotationheader = (quotationCount) => {
)}
- Daftar
+ List
Quotation
@@ -137,7 +138,7 @@ const Quotationheader = (quotationCount) => {
>
Daftar Quotation
-
+
Lihat Semua
@@ -150,7 +151,7 @@ const Quotationheader = (quotationCount) => {
Login
{' '}
- Untuk Melihat Daftar Keranjang Belanja Anda
+ Untuk Melihat Daftar Quotation Anda
)}
@@ -176,6 +177,48 @@ const Quotationheader = (quotationCount) => {
)}
+ {auth && qotation.length > 0 && !isLoading && (
+ <>
+
+ {qotation &&
+ qotation?.map((product, index) => (
+ <>
+
+
+
+
{product.dateOrder}
+
Pending Quotation
+
+
+
+
+ No. Transaksi
+
+
+ {product.name}
+
+
+
+
+ No. Purchase Order
+
+
+ {product.purchaseOrderFile}
+
+
+
+
+
Total
+
{currencyFormat(product.amountTotal)}
+
+
+
+ >
+ ))}
+
+
+ >
+ )}
--
cgit v1.2.3
From a1ed8969b451acc7867622fc302b0fd2b3c970a2 Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Wed, 7 Aug 2024 12:10:50 +0700
Subject: update quotation pop up
---
src/lib/quotation/components/Quotationheader.jsx | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 9f0f17a6..c9686b5a 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -184,26 +184,26 @@ const Quotationheader = (quotationCount) => {
qotation?.map((product, index) => (
<>
-
+
-
{product.dateOrder}
-
Pending Quotation
+
{product.dateOrder}
+
Pending Quotation
-
+
No. Transaksi
-
+
{product.name}
-
+
-
+
No. Purchase Order
- {product.purchaseOrderFile}
+ {product.purchaseOrderFile ? product.purchaseOrderFile : '-'}
--
cgit v1.2.3
From 86c880442fc0abbc4c356da4fa8a20bc5759aff3 Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Wed, 7 Aug 2024 14:00:07 +0700
Subject: quotation update popup
---
src/lib/quotation/components/Quotationheader.jsx | 54 +++++++++++++-----------
1 file changed, 29 insertions(+), 25 deletions(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index c9686b5a..79011682 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -184,33 +184,37 @@ const Quotationheader = (quotationCount) => {
qotation?.map((product, index) => (
<>
-
-
-
{product.dateOrder}
-
Pending Quotation
-
-
-
-
- No. Transaksi
-
-
- {product.name}
-
+
+
+
+
+
Sales :
+
{product.sales}
+
+
+
Status :
+
Pending Quotation
+
-
-
- No. Purchase Order
-
-
- {product.purchaseOrderFile ? product.purchaseOrderFile : '-'}
-
+
+
+
No. Transaksi
+
{product.name}
+
+
+
No. Purchase Order
+
{product.purchaseOrderName ? product.purchaseOrderName : '-'}
+
-
-
-
Total
-
{currencyFormat(product.amountTotal)}
-
+
+
+
Total
+
{currencyFormat(product.amountTotal)}
+
+
>
--
cgit v1.2.3
From bad8abd263bd43c59dad8e61e2f5f35bfe5b7746 Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Thu, 8 Aug 2024 11:37:58 +0700
Subject: update quotation pop up
---
src/lib/quotation/components/Quotation.jsx | 7 +++--
src/lib/quotation/components/Quotationheader.jsx | 38 +++++++++++++++++++++---
2 files changed, 39 insertions(+), 6 deletions(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotation.jsx b/src/lib/quotation/components/Quotation.jsx
index df234dc2..3fac6f29 100644
--- a/src/lib/quotation/components/Quotation.jsx
+++ b/src/lib/quotation/components/Quotation.jsx
@@ -9,6 +9,7 @@ import _ from 'lodash';
import { deleteItemCart, getCart, getItemCart } from '@/core/utils/cart';
import currencyFormat from '@/core/utils/currencyFormat';
import { toast } from 'react-hot-toast';
+import { useProductCartContext } from '@/contexts/ProductCartContext';
// import checkoutApi from '@/lib/checkout/api/checkoutApi'
import { useRouter } from 'next/router';
import VariantGroupCard from '@/lib/variant/components/VariantGroupCard';
@@ -38,11 +39,12 @@ const { getProductsCheckout } = require('@/lib/checkout/api/checkoutApi');
const Quotation = () => {
const router = useRouter();
const auth = useAuth();
-
+
const { data: cartCheckout } = useQuery('cartCheckout', () =>
getProductsCheckout()
- );
+);
+const { setRefreshQuotation } = useProductCartContext();
const SELF_PICKUP_ID = 32;
const [products, setProducts] = useState(null);
@@ -293,6 +295,7 @@ const Quotation = () => {
if (isSuccess?.id) {
for (const product of products) deleteItemCart({ productId: product.id });
router.push(`/shop/quotation/finish?id=${isSuccess.id}`);
+ setRefreshQuotation(true);
return;
}
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 79011682..14743fd6 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -30,6 +30,7 @@ const Quotationheader = (quotationCount) => {
const [isHovered, setIsHovered] = useState(false);
const [isTop, setIsTop] = useState(true);
+
const qotation = useMemo(() => {
return productQuotation || [];
}, [productQuotation]);
@@ -49,6 +50,7 @@ const Quotationheader = (quotationCount) => {
}
};
let { transactions } = useTransactions({ query });
+
const refreshCartf = useCallback(async () => {
setIsloading(true);
let pendingTransactions = transactions?.data?.saleOrders.filter(transaction => transaction.status === 'draft');
@@ -57,6 +59,18 @@ const Quotationheader = (quotationCount) => {
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 (refreshQuotation) {
refreshCartf();
@@ -84,8 +98,6 @@ const Quotationheader = (quotationCount) => {
router.push('/shop/quotation');
};
- console.log("quotation",qotation)
-
return (
@@ -211,8 +223,8 @@ const Quotationheader = (quotationCount) => {
-
Total
-
{currencyFormat(product.amountTotal)}
+
Total
+
{currencyFormat(product.amountUntaxed)}
@@ -224,6 +236,24 @@ const Quotationheader = (quotationCount) => {
>
)}
+ {auth && qotation.length > 0 && !isLoading && (
+ <>
+
+ Subtotal Sebelum PPN :
+ {currencyFormat(subTotal)}
+
+
+
+ {buttonLoading ? 'Loading...' : 'Buat Quotation'}
+
+
+ >
+ )}
>
--
cgit v1.2.3
From 079f8029445fdd243e267a4af7c7a4d5780afa24 Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Thu, 8 Aug 2024 14:11:32 +0700
Subject: update pop up quotation & cart
---
src/lib/quotation/components/Quotation.jsx | 4 ++--
src/lib/quotation/components/Quotationheader.jsx | 20 +++++++++-----------
2 files changed, 11 insertions(+), 13 deletions(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotation.jsx b/src/lib/quotation/components/Quotation.jsx
index 3fac6f29..0ad042de 100644
--- a/src/lib/quotation/components/Quotation.jsx
+++ b/src/lib/quotation/components/Quotation.jsx
@@ -44,7 +44,7 @@ const Quotation = () => {
getProductsCheckout()
);
-const { setRefreshQuotation } = useProductCartContext();
+const { setRefreshCart } = useProductCartContext();
const SELF_PICKUP_ID = 32;
const [products, setProducts] = useState(null);
@@ -295,7 +295,7 @@ const { setRefreshQuotation } = useProductCartContext();
if (isSuccess?.id) {
for (const product of products) deleteItemCart({ productId: product.id });
router.push(`/shop/quotation/finish?id=${isSuccess.id}`);
- setRefreshQuotation(true);
+ setRefreshCart(true);
return;
}
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 14743fd6..10e3e147 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -25,7 +25,7 @@ const Quotationheader = (quotationCount) => {
const [buttonLoading, SetButtonTerapkan] = useState(false);
const itemLoading = [1, 2, 3];
const [countQuotation, setCountQuotation] = useState(null);
- const { productCart, setProductCart, refreshCart, setRefreshCart, isLoading, setIsloading, productQuotation, setProductQuotation, refreshQuotation, setRefreshQuotation } =
+ const { productCart, setProductCart, refreshCart, setRefreshCart, isLoading, setIsloading, productQuotation, setProductQuotation } =
useProductCartContext();
const [isHovered, setIsHovered] = useState(false);
@@ -72,11 +72,11 @@ const Quotationheader = (quotationCount) => {
}, [qotation])
useEffect(() => {
- if (refreshQuotation) {
+ if (refreshCart) {
refreshCartf();
}
- setRefreshQuotation(false);
- }, [refreshQuotation, refreshCartf, setRefreshQuotation]);
+ setRefreshCart(false);
+ }, [ refreshCartf, setRefreshCart]);
useEffect(() => {
setCountQuotation(quotationCount.quotationCount);
@@ -150,9 +150,6 @@ const Quotationheader = (quotationCount) => {
>
Daftar Quotation
-
- Lihat Semua
-
@@ -221,7 +218,8 @@ const Quotationheader = (quotationCount) => {
{product.purchaseOrderName ? product.purchaseOrderName : '-'}
-
+ {/*
*/}
+
Total
{currencyFormat(product.amountUntaxed)}
@@ -238,18 +236,18 @@ const Quotationheader = (quotationCount) => {
{auth && qotation.length > 0 && !isLoading && (
<>
-
+
Subtotal Sebelum PPN :
{currencyFormat(subTotal)}
- {buttonLoading ? 'Loading...' : 'Buat Quotation'}
+ {buttonLoading ? 'Loading...' : 'Lihat Semua'}
>
--
cgit v1.2.3
From 64489b794a80b381d86ea226f0fe36457d5836be Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Thu, 8 Aug 2024 15:06:37 +0700
Subject: update quotation pop up bug
---
src/lib/quotation/components/Quotationheader.jsx | 1 +
1 file changed, 1 insertion(+)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 10e3e147..0bb4dfe0 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -80,6 +80,7 @@ const Quotationheader = (quotationCount) => {
useEffect(() => {
setCountQuotation(quotationCount.quotationCount);
+ setProductQuotation(quotationCount.data);
}, [quotationCount]);
useEffect(() => {
--
cgit v1.2.3
From 3de1a412bba31b19b8b443dd91df8aff8d6eda07 Mon Sep 17 00:00:00 2001
From: it-fixcomart
Date: Thu, 8 Aug 2024 16:22:00 +0700
Subject: update link button
---
src/lib/quotation/components/Quotationheader.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src/lib/quotation/components')
diff --git a/src/lib/quotation/components/Quotationheader.jsx b/src/lib/quotation/components/Quotationheader.jsx
index 0bb4dfe0..4529c977 100644
--- a/src/lib/quotation/components/Quotationheader.jsx
+++ b/src/lib/quotation/components/Quotationheader.jsx
@@ -96,7 +96,7 @@ const Quotationheader = (quotationCount) => {
const handleCheckout = async () => {
SetButtonTerapkan(true);
let checkoutAll = await odooApi('POST', `/api/v1/user/${auth.id}/cart/select-all`);
- router.push('/shop/quotation');
+ router.push('/my/quotations');
};
return (
--
cgit v1.2.3