From ed0d0293f88adf3c5312cb556bc464e330b3672a Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 26 Apr 2024 09:44:31 +0700 Subject: hide button checkout if is step approval is true --- src-migrate/pages/shop/cart/index.tsx | 39 ++++++++++++++++++++--------------- src-migrate/types/auth.ts | 4 ++++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src-migrate/pages/shop/cart/index.tsx b/src-migrate/pages/shop/cart/index.tsx index 4b4de92b..9866be46 100644 --- a/src-migrate/pages/shop/cart/index.tsx +++ b/src-migrate/pages/shop/cart/index.tsx @@ -16,13 +16,17 @@ import Image from '~/components/ui/image'; const CartPage = () => { const auth = getAuth(); + const [isStepApproval, setIsStepApproval] = React.useState(false); const { loadCart, cart, summary } = useCartStore(); const useDivvice = useDevice(); useEffect(() => { - if (typeof auth === 'object' && !cart) loadCart(auth.id); + if (typeof auth === 'object' && !cart) { + loadCart(auth.id); + setIsStepApproval(auth?.feature?.soApproval); + } }, [auth, loadCart, cart]); const hasSelectedPromo = useMemo(() => { @@ -123,23 +127,24 @@ const CartPage = () => { Quotation - - - - + + + )} diff --git a/src-migrate/types/auth.ts b/src-migrate/types/auth.ts index 02e3623d..e93a475a 100644 --- a/src-migrate/types/auth.ts +++ b/src-migrate/types/auth.ts @@ -15,6 +15,10 @@ export type AuthProps = { company: boolean; pricelist: string | null; token: string; + feature : { + onlyReadyStock : boolean, + soApproval : boolean + } }; export type AuthApiProps = OdooApiRes; -- cgit v1.2.3 From 145f9edfd32b385771483b9b95a9fa0fa24c2dec Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 26 Apr 2024 13:57:55 +0700 Subject: css --- src-migrate/pages/shop/cart/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-migrate/pages/shop/cart/index.tsx b/src-migrate/pages/shop/cart/index.tsx index 9866be46..e101b5ad 100644 --- a/src-migrate/pages/shop/cart/index.tsx +++ b/src-migrate/pages/shop/cart/index.tsx @@ -110,7 +110,7 @@ const CartPage = () => { )} -
+
Date: Tue, 21 May 2024 14:10:36 +0700 Subject: filter site dan export --- package.json | 1 + src/lib/transaction/components/Transactions.jsx | 299 +++++++++++++++++------- 2 files changed, 220 insertions(+), 80 deletions(-) diff --git a/package.json b/package.json index 6b5f20d7..118a902b 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "swiper": "^8.4.4", "tw-merge": "^0.0.1-alpha.3", "usehooks-ts": "^2.9.1", + "xlsx": "^0.18.5", "xmlbuilder": "^15.1.1", "yup": "^0.32.11", "zod": "^3.22.4", diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index be63effd..9485449d 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -1,63 +1,139 @@ -import { useRouter } from 'next/router' -import { useState } from 'react' -import { toast } from 'react-hot-toast' -import { EllipsisVerticalIcon, MagnifyingGlassIcon } from '@heroicons/react/24/outline' +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; +import { toast } from 'react-hot-toast'; +import { + EllipsisVerticalIcon, + MagnifyingGlassIcon, +} from '@heroicons/react/24/outline'; +import useAuth from '@/core/hooks/useAuth'; -import { downloadPurchaseOrder, downloadQuotation } from '../utils/transactions' -import useTransactions from '../hooks/useTransactions' -import currencyFormat from '@/core/utils/currencyFormat' -import cancelTransactionApi from '../api/cancelTransactionApi' -import TransactionStatusBadge from './TransactionStatusBadge' -import Spinner from '@/core/components/elements/Spinner/Spinner' -import Link from '@/core/components/elements/Link/Link' -import BottomPopup from '@/core/components/elements/Popup/BottomPopup' -import Pagination from '@/core/components/elements/Pagination/Pagination' -import { toQuery } from 'lodash-contrib' -import _ from 'lodash' -import Alert from '@/core/components/elements/Alert/Alert' -import MobileView from '@/core/components/views/MobileView' -import DesktopView from '@/core/components/views/DesktopView' -import Menu from '@/lib/auth/components/Menu' +import { + downloadPurchaseOrder, + downloadQuotation, +} from '../utils/transactions'; +import useTransactions from '../hooks/useTransactions'; +import currencyFormat from '@/core/utils/currencyFormat'; +import cancelTransactionApi from '../api/cancelTransactionApi'; +import TransactionStatusBadge from './TransactionStatusBadge'; +import Spinner from '@/core/components/elements/Spinner/Spinner'; +import Link from '@/core/components/elements/Link/Link'; +import BottomPopup from '@/core/components/elements/Popup/BottomPopup'; +import Pagination from '@/core/components/elements/Pagination/Pagination'; +import { toQuery } from 'lodash-contrib'; +import _ from 'lodash'; +import Alert from '@/core/components/elements/Alert/Alert'; +import MobileView from '@/core/components/views/MobileView'; +import DesktopView from '@/core/components/views/DesktopView'; +import Menu from '@/lib/auth/components/Menu'; +import * as XLSX from 'xlsx'; const Transactions = ({ context = '' }) => { - const router = useRouter() - const { q = '', page = 1 } = router.query + const auth = useAuth(); + const router = useRouter(); + const { q = '', page = 1, site = null } = router.query; - const limit = 15 + const limit = 15; + + const [inputQuery, setInputQuery] = useState(q); + const [toOthers, setToOthers] = useState(null); + const [toCancel, setToCancel] = useState(null); + + const [siteFilter, setSiteFilter] = useState(site); const query = { name: q, offset: (page - 1) * limit, context, - limit - } - const { transactions } = useTransactions({ query }) + limit, + site: + siteFilter || (auth?.webRole === null && auth?.site ? auth.site : null), + }; - const [inputQuery, setInputQuery] = useState(q) - const [toOthers, setToOthers] = useState(null) - const [toCancel, setToCancel] = useState(null) + const { transactions } = useTransactions({ query }); const submitCancelTransaction = async () => { const isCancelled = await cancelTransactionApi({ - transaction: toCancel - }) + transaction: toCancel, + }); if (isCancelled) { - toast.success('Berhasil batalkan transaksi') - transactions.refetch() + toast.success('Berhasil batalkan transaksi'); + transactions.refetch(); } - setToCancel(null) - } + setToCancel(null); + }; - const pageCount = Math.ceil(transactions?.data?.saleOrderTotal / limit) - let pageQuery = _.omit(query, ['limit', 'offset', 'context']) - pageQuery = _.pickBy(pageQuery, _.identity) - pageQuery = toQuery(pageQuery) + const pageCount = Math.ceil(transactions?.data?.saleOrderTotal / limit); + let pageQuery = _.omit(query, ['limit', 'offset', 'context']); + pageQuery = _.pickBy( + pageQuery, + (value, key) => value !== '' && !(key === 'page' && value === '1') + ); + pageQuery = toQuery(pageQuery); const handleSubmit = (e) => { - e.preventDefault() - router.push(`${router.pathname}?q=${inputQuery}`) - } + e.preventDefault(); + const queryParams = {}; + if (inputQuery) queryParams.q = inputQuery; + if (siteFilter) queryParams.site = siteFilter; + router.push({ + pathname: router.pathname, + query: queryParams, + }); + }; + + const handleSiteFilterChange = (e) => { + setSiteFilter(e.target.value); + const queryParams = {}; + if (inputQuery) queryParams.q = inputQuery; + if (e.target.value) queryParams.site = e.target.value; + router.push({ + pathname: router.pathname, + query: queryParams, + }); + }; + + const exportToExcel = (data, siteFilter) => { + const fieldsToExport = [ + 'No. Transaksi', + 'No. PO', + 'Tanggal', + 'Created By', + 'Salesperson', + 'Total', + 'Status', + ]; + const rowsToExport = []; + + data.forEach((saleOrder) => { + const row = { + 'No. Transaksi': saleOrder.name, + 'No. PO': saleOrder.purchaseOrderName || '-', + 'Tanggal': saleOrder.dateOrder || '-', + 'Created By': saleOrder.address.customer?.name || '-', + 'Salesperson': saleOrder.sales, + 'Total': currencyFormat(saleOrder.amountTotal), + 'Status': saleOrder.status, + }; + if(siteFilter){ + row['Site'] = siteFilter; + } + rowsToExport.push(row); + }); + const worksheet = XLSX.utils.json_to_sheet(rowsToExport, { + header: fieldsToExport, + }); + + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); + XLSX.writeFile(workbook, 'transactions.xlsx'); + }; + + const handleExportExcel = () => { + const dataToExport = transactions.data.saleOrders; + + exportToExcel(dataToExport, siteFilter); + }; return ( <> @@ -81,17 +157,23 @@ const Transactions = ({ context = '' }) => {
)} - {!transactions.isLoading && transactions.data?.saleOrders?.length === 0 && ( - - Tidak ada transaksi - - )} + {!transactions.isLoading && + transactions.data?.saleOrders?.length === 0 && ( + + Tidak ada transaksi + + )} {transactions.data?.saleOrders?.map((saleOrder, index) => ( -
+
- No. Transaksi + + No. Transaksi +

{saleOrder.name}

@@ -105,13 +187,17 @@ const Transactions = ({ context = '' }) => {
- No. Purchase Order + + No. Purchase Order +

{saleOrder.purchaseOrderName || '-'}

- Total Invoice + + Total Invoice +

{saleOrder.invoiceCount} Invoice

@@ -120,10 +206,14 @@ const Transactions = ({ context = '' }) => {
Sales -

{saleOrder.sales}

+

+ {saleOrder.sales} +

- Total Harga + + Total Harga +

{currencyFormat(saleOrder.amountTotal)}

@@ -140,14 +230,18 @@ const Transactions = ({ context = '' }) => { className='mt-2 mb-2' /> - setToOthers(null)}> + setToOthers(null)} + >
- setToCancel(null)} title='Batalkan Transaksi'> + setToCancel(null)} + title='Batalkan Transaksi' + >
Apakah anda yakin membatalkan transaksi{' '} {toCancel?.name}? @@ -188,7 +286,11 @@ const Transactions = ({ context = '' }) => { > Ya, Batalkan -
@@ -202,24 +304,54 @@ const Transactions = ({ context = '' }) => {
-
+

Daftar Transaksi{' '} - {transactions?.data?.saleOrders ? `(${transactions?.data?.saleOrders.length})` : ''} + {transactions?.data?.saleOrders + ? `(${transactions?.data?.saleOrders.length})` + : ''}

-
- + + + setInputQuery(e.target.value)} + /> + +
+
+ @@ -252,13 +384,20 @@ const Transactions = ({ context = '' }) => { {transactions.data?.saleOrders?.map((saleOrder) => ( - + - + {/* */} @@ -605,18 +605,18 @@ const Transaction = ({ id }) => { - + */} -- cgit v1.2.3 From ebf4faee910b591254b27b99be68e2e0cb6d31ae Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 22 May 2024 10:34:58 +0700 Subject: list site & button download --- src/lib/transaction/components/Transactions.jsx | 60 ++++++++++++++----------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index 9485449d..1a57a976 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -26,6 +26,7 @@ import MobileView from '@/core/components/views/MobileView'; import DesktopView from '@/core/components/views/DesktopView'; import Menu from '@/lib/auth/components/Menu'; import * as XLSX from 'xlsx'; +import getSite from '../api/listSiteApi'; const Transactions = ({ context = '' }) => { const auth = useAuth(); @@ -37,6 +38,7 @@ const Transactions = ({ context = '' }) => { const [inputQuery, setInputQuery] = useState(q); const [toOthers, setToOthers] = useState(null); const [toCancel, setToCancel] = useState(null); + const [listSites, setListSites] = useState([]); const [siteFilter, setSiteFilter] = useState(site); @@ -51,6 +53,11 @@ const Transactions = ({ context = '' }) => { const { transactions } = useTransactions({ query }); + const fetchSite = async () => { + const site = await getSite(); + setListSites(site.sites); + }; + const submitCancelTransaction = async () => { const isCancelled = await cancelTransactionApi({ transaction: toCancel, @@ -108,13 +115,13 @@ const Transactions = ({ context = '' }) => { const row = { 'No. Transaksi': saleOrder.name, 'No. PO': saleOrder.purchaseOrderName || '-', - 'Tanggal': saleOrder.dateOrder || '-', + Tanggal: saleOrder.dateOrder || '-', 'Created By': saleOrder.address.customer?.name || '-', - 'Salesperson': saleOrder.sales, - 'Total': currencyFormat(saleOrder.amountTotal), - 'Status': saleOrder.status, + Salesperson: saleOrder.sales, + Total: currencyFormat(saleOrder.amountTotal), + Status: saleOrder.status, }; - if(siteFilter){ + if (siteFilter) { row['Site'] = siteFilter; } rowsToExport.push(row); @@ -134,6 +141,10 @@ const Transactions = ({ context = '' }) => { exportToExcel(dataToExport, siteFilter); }; + + useEffect(() => { + fetchSite(); + }, []); return ( <> @@ -304,7 +315,7 @@ const Transactions = ({ context = '' }) => {
-
+

Daftar Transaksi{' '} {transactions?.data?.saleOrders @@ -312,16 +323,21 @@ const Transactions = ({ context = '' }) => { : ''}

- + {listSites.length > 0 && ( + + )} +
{
- {saleOrder.name} + + {saleOrder.name} + {saleOrder.purchaseOrderName || '-'} {saleOrder.dateOrder || '-'} {saleOrder.address.customer?.name || '-'} {saleOrder.sales}{currencyFormat(saleOrder.amountTotal)} + {currencyFormat(saleOrder.amountTotal)} +
@@ -272,14 +411,14 @@ const Transactions = ({ context = '' }) => {
- ) -} + ); +}; -export default Transactions +export default Transactions; -- cgit v1.2.3 From 21d3c9cdc25477f5d07ff395a65f89430b7c9924 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 21 May 2024 14:54:08 +0700 Subject: delete discount field --- src/lib/transaction/components/Transaction.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx index 8f4b2038..9b11f5bb 100644 --- a/src/lib/transaction/components/Transaction.jsx +++ b/src/lib/transaction/components/Transaction.jsx @@ -562,7 +562,7 @@ const Transaction = ({ id }) => {
Nama ProdukDiskonDiskonJumlah Harga Subtotal + {/* {product.price.discountPercentage > 0 ? `${product.price.discountPercentage}%` : ''} - {product.quantity} - {product.price.discountPercentage > 0 && ( + {/* {product.price.discountPercentage > 0 && (
{currencyFormat(product.price.price)}
- )} + )} */}
{currencyFormat(product.price.priceDiscount)}
{currencyFormat(product.price.subtotal)}
-- cgit v1.2.3 From 6d57f1f7449ace08f56a80f5f03b43f5da05a995 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 22 May 2024 10:39:19 +0700 Subject: modul list site --- src/lib/transaction/api/listSiteApi.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/lib/transaction/api/listSiteApi.js diff --git a/src/lib/transaction/api/listSiteApi.js b/src/lib/transaction/api/listSiteApi.js new file mode 100644 index 00000000..8b7740c5 --- /dev/null +++ b/src/lib/transaction/api/listSiteApi.js @@ -0,0 +1,10 @@ +import odooApi from '@/core/api/odooApi' +import { getAuth } from '@/core/utils/auth' + +const getSite = async () => { + const auth = getAuth() + const dataSite = await odooApi('GET', `/api/v1/partner/${auth?.partnerId}/list/site`) + return dataSite +} + +export default getSite \ No newline at end of file -- cgit v1.2.3 From d1f70e37fdea0d677cedccec9effdbeeb91656aa Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 22 May 2024 15:18:49 +0700 Subject: feedback testing renca --- src/lib/transaction/components/Transactions.jsx | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index 1a57a976..5a6dfb01 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -27,6 +27,7 @@ import DesktopView from '@/core/components/views/DesktopView'; import Menu from '@/lib/auth/components/Menu'; import * as XLSX from 'xlsx'; import getSite from '../api/listSiteApi'; +import transactionsApi from '../api/transactionsApi'; const Transactions = ({ context = '' }) => { const auth = useAuth(); @@ -136,10 +137,22 @@ const Transactions = ({ context = '' }) => { XLSX.writeFile(workbook, 'transactions.xlsx'); }; - const handleExportExcel = () => { - const dataToExport = transactions.data.saleOrders; + const getAllData = async () => { + const query = { + name: q, + context, + site: + siteFilter || (auth?.webRole === null && auth?.site ? auth.site : null), + }; + const queryString = toQuery(query) + const data = await transactionsApi({ query : queryString }); + return data; + }; + + const handleExportExcel = async () => { + const dataToExport = await getAllData(); - exportToExcel(dataToExport, siteFilter); + exportToExcel(dataToExport?.saleOrders, siteFilter); }; useEffect(() => { @@ -323,7 +336,7 @@ const Transactions = ({ context = '' }) => { : ''}
- {listSites.length > 0 && ( + {listSites?.length > 0 ? ( - )} + ):(
) } Date: Tue, 2 Jul 2024 10:40:06 +0700 Subject: IS SO APPROVAL --- .../product-detail/components/PriceAction.tsx | 75 +++++++++++++++------- .../product-detail/components/ProductDetail.tsx | 12 +++- .../product-detail/stores/useProductDetail.ts | 6 ++ src-migrate/pages/shop/cart/cart.module.css | 4 ++ src-migrate/pages/shop/cart/index.tsx | 2 +- src/lib/quotation/components/Quotation.jsx | 62 ++++++++++++------ src/pages/index.jsx | 14 ++-- 7 files changed, 124 insertions(+), 51 deletions(-) diff --git a/src-migrate/modules/product-detail/components/PriceAction.tsx b/src-migrate/modules/product-detail/components/PriceAction.tsx index f25847a5..d91ea49c 100644 --- a/src-migrate/modules/product-detail/components/PriceAction.tsx +++ b/src-migrate/modules/product-detail/components/PriceAction.tsx @@ -1,15 +1,16 @@ -import style from '../styles/price-action.module.css' +import style from '../styles/price-action.module.css'; -import React, { useEffect } from 'react' -import formatCurrency from '~/libs/formatCurrency' -import { IProductDetail } from '~/types/product' -import { useProductDetail } from '../stores/useProductDetail' -import AddToCart from './AddToCart' -import Link from 'next/link' +import React, { useEffect } from 'react'; +import formatCurrency from '~/libs/formatCurrency'; +import { IProductDetail } from '~/types/product'; +import { useProductDetail } from '../stores/useProductDetail'; +import AddToCart from './AddToCart'; +import Link from 'next/link'; +import { getAuth } from '~/libs/auth'; type Props = { - product: IProductDetail -} + product: IProductDetail; +}; const PriceAction = ({ product }: Props) => { const { @@ -18,15 +19,22 @@ const PriceAction = ({ product }: Props) => { activeVariantId, quantityInput, setQuantityInput, - askAdminUrl - } = useProductDetail() + askAdminUrl, + isApproval, + setIsApproval, + } = useProductDetail(); useEffect(() => { - setActive(product.variants[0]) + setActive(product.variants[0]); }, [product, setActive]); + + return ( -
+
{!!activePrice && activePrice.price > 0 && ( <>
@@ -46,8 +54,8 @@ const PriceAction = ({ product }: Props) => {
- Termasuk PPN: {' '} - Rp {formatCurrency(Math.round(activePrice.price_discount * 1.11))} + Termasuk PPN: Rp{' '} + {formatCurrency(Math.round(activePrice.price_discount * 1.11))}
)} @@ -55,7 +63,11 @@ const PriceAction = ({ product }: Props) => { {!!activePrice && activePrice.price === 0 && ( Hubungi kami untuk dapatkan harga terbaik,{' '} - + klik disini @@ -64,13 +76,30 @@ const PriceAction = ({ product }: Props) => {
- - setQuantityInput(e.target.value)} className={style['quantity-input']} /> - - + + setQuantityInput(e.target.value)} + className={style['quantity-input']} + /> + + {!isApproval && ( + + )}
- ) -} + ); +}; -export default PriceAction \ No newline at end of file +export default PriceAction; diff --git a/src-migrate/modules/product-detail/components/ProductDetail.tsx b/src-migrate/modules/product-detail/components/ProductDetail.tsx index 3b1bdbea..6cd72353 100644 --- a/src-migrate/modules/product-detail/components/ProductDetail.tsx +++ b/src-migrate/modules/product-detail/components/ProductDetail.tsx @@ -22,6 +22,7 @@ import PriceAction from './PriceAction' import SimilarBottom from './SimilarBottom' import SimilarSide from './SimilarSide' import VariantList from './VariantList' +import { getAuth } from '~/libs/auth' type Props = { product: IProductDetail @@ -32,7 +33,8 @@ const SELF_HOST = process.env.NEXT_PUBLIC_SELF_HOST const ProductDetail = ({ product }: Props) => { const { isDesktop, isMobile } = useDevice() const router = useRouter() - const { setAskAdminUrl, askAdminUrl, activeVariantId } = useProductDetail() + const auth = getAuth() + const { setAskAdminUrl, askAdminUrl, activeVariantId, setIsApproval, isApproval } = useProductDetail() useEffect(() => { const createdAskUrl = whatsappUrl({ @@ -48,6 +50,12 @@ const ProductDetail = ({ product }: Props) => { setAskAdminUrl(createdAskUrl) }, [router.asPath, product.manufacture.name, product.name, setAskAdminUrl]) + useEffect(() => { + if (typeof auth === 'object') { + setIsApproval(auth?.feature?.soApproval); + } + }, []); + return ( <>
@@ -115,7 +123,7 @@ const ProductDetail = ({ product }: Props) => { )}
- {!!activeVariantId && } + {!!activeVariantId && !isApproval && }

diff --git a/src-migrate/modules/product-detail/stores/useProductDetail.ts b/src-migrate/modules/product-detail/stores/useProductDetail.ts index 794f0346..2da8835d 100644 --- a/src-migrate/modules/product-detail/stores/useProductDetail.ts +++ b/src-migrate/modules/product-detail/stores/useProductDetail.ts @@ -6,12 +6,14 @@ type State = { activePrice: IProductVariantDetail['price'] | null; quantityInput: string; askAdminUrl: string; + isApproval : boolean; }; type Action = { setActive: (variant: IProductVariantDetail) => void; setQuantityInput: (value: string) => void; setAskAdminUrl: (url: string) => void; + setIsApproval : (value : boolean) => void; }; export const useProductDetail = create((set, get) => ({ @@ -19,6 +21,7 @@ export const useProductDetail = create((set, get) => ({ activePrice: null, quantityInput: '1', askAdminUrl: '', + isApproval : false, setActive: (variant) => { set({ activeVariantId: variant.id, activePrice: variant.price }); }, @@ -28,4 +31,7 @@ export const useProductDetail = create((set, get) => ({ setAskAdminUrl: (url: string) => { set({ askAdminUrl: url }); }, + setIsApproval : (value : boolean) => { + set({ isApproval : value }) + } })); diff --git a/src-migrate/pages/shop/cart/cart.module.css b/src-migrate/pages/shop/cart/cart.module.css index 98a6ac86..806104be 100644 --- a/src-migrate/pages/shop/cart/cart.module.css +++ b/src-migrate/pages/shop/cart/cart.module.css @@ -29,3 +29,7 @@ .summary-buttons { @apply grid grid-cols-2 gap-x-3 mt-6; } + +.summary-buttons-step-approval { + @apply grid grid-cols-1 gap-y-3 mt-6; +} diff --git a/src-migrate/pages/shop/cart/index.tsx b/src-migrate/pages/shop/cart/index.tsx index e101b5ad..d89707d2 100644 --- a/src-migrate/pages/shop/cart/index.tsx +++ b/src-migrate/pages/shop/cart/index.tsx @@ -110,7 +110,7 @@ const CartPage = () => { )} -
+
{ const [etd, setEtd] = useState(null); const [etdFix, setEtdFix] = useState(null); + const [isApproval, setIsApproval] = useState(false); + const expedisiValidation = useRef(null); const [selectedAddress, setSelectedAddress] = useState({ @@ -86,6 +88,7 @@ const Quotation = () => { }; getAddresses(); + setIsApproval(auth?.feature?.soApproval); }, [auth]); useEffect(() => { @@ -185,6 +188,13 @@ const Quotation = () => { if (etd) setEtdFix(calculateEstimatedArrival(etd)); }, [etd]); + useEffect(() => { + if (isApproval) { + setselectedCarrierId(1); + setselectedExpedisiService('indoteknik'); + } + }, [isApproval]); + // end set up address and carrier useEffect(() => { @@ -235,7 +245,7 @@ const Quotation = () => { const checkout = async () => { // validation checkout - if (selectedExpedisi === 0) { + if (selectedExpedisi === 0 && !isApproval) { setCheckoutValidation(true); if (expedisiValidation.current) { const position = expedisiValidation.current.getBoundingClientRect(); @@ -246,7 +256,7 @@ const Quotation = () => { } return; } - if (selectedCarrier != 1 && biayaKirim == 0) { + if (selectedCarrier != 1 && biayaKirim == 0 && !isApproval) { toast.error('Maaf, layanan tidak tersedia. Mohon pilih expedisi lain.'); return; } @@ -267,7 +277,9 @@ const Quotation = () => { estimated_arrival_days: splitDuration(etd), delivery_service_type: selectedExpedisiService, }; + console.log('data checkout', data); const isSuccess = await checkoutApi({ data }); + console.log('isSuccess', isSuccess); setIsLoading(false); if (isSuccess?.id) { for (const product of products) deleteItemCart({ productId: product.id }); @@ -343,16 +355,21 @@ const Quotation = () => { )} - - + {!isApproval && ( + <> + + + + )} + { )} - + {!isApproval && ( + + )} + import('@/core/components/layouts/BasicLayout') @@ -56,6 +58,8 @@ export default function Home() { const bannerRef = useRef(null); const wrapperRef = useRef(null); + const auth = getAuth(); + const handleOnLoad = () => { wrapperRef.current.style.height = bannerRef.current?.querySelector(':first-child')?.clientHeight + 'px'; @@ -102,7 +106,7 @@ export default function Home() {
- + {!auth?.feature?.soApproval && } @@ -124,9 +128,11 @@ export default function Home() {
- - - + {!auth?.feature?.soApproval && ( + + + + )} -- cgit v1.2.3 From f287fc062c4ceb5039b5ca946da2e6854c27b007 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Tue, 2 Jul 2024 14:55:14 +0700 Subject: add site on transactions list and transaction detial --- src/lib/transaction/components/Transaction.jsx | 25 +++++++++++++++---------- src/lib/transaction/components/Transactions.jsx | 10 ++++++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/lib/transaction/components/Transaction.jsx b/src/lib/transaction/components/Transaction.jsx index 9b11f5bb..30f1d902 100644 --- a/src/lib/transaction/components/Transaction.jsx +++ b/src/lib/transaction/components/Transaction.jsx @@ -37,7 +37,7 @@ import rejectApi from '../api/rejectApi'; const Transaction = ({ id }) => { const auth = useAuth(); const { transaction } = useTransaction({ id }); - + const statusApprovalWeb = transaction.data?.approvalStep const { queryAirwayBill } = useAirwayBill({ orderId: id }); @@ -78,7 +78,7 @@ const Transaction = ({ id }) => { const closeCancelTransaction = () => setCancelTransaction(false); const [rejectTransaction, setRejectTransaction] = useState(false); - + const openRejectTransaction = () => setRejectTransaction(true); const closeRejectTransaction = () => setRejectTransaction(false); const submitCancelTransaction = async () => { @@ -109,9 +109,9 @@ const Transaction = ({ id }) => { } const handleReject = async () => { - await rejectApi({ id }); - closeRejectTransaction() - transaction.refetch(); + await rejectApi({ id }); + closeRejectTransaction() + transaction.refetch(); } const memoizeVariantGroupCard = useMemo( @@ -365,7 +365,7 @@ const Transaction = ({ id }) => { className='btn-yellow w-full' onClick={checkout} disabled={ - transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false + transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false } > Approve @@ -374,7 +374,7 @@ const Transaction = ({ id }) => { className='btn-solid-red px-7 w-full' onClick={checkout} disabled={ - transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false + transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false } > Reject @@ -454,7 +454,7 @@ const Transaction = ({ id }) => { className='btn-solid-red px-7' onClick={openRejectTransaction} disabled={ - transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false || statusApprovalWeb < 1 ? true : false + transaction.data?.status === 'cancel' ? true : false || auth?.webRole === statusApprovalWeb ? true : false || statusApprovalWeb < 1 ? true : false } > Reject @@ -467,7 +467,7 @@ const Transaction = ({ id }) => { Lanjutkan Transaksi )} - {transaction.data?.status != 'draft' && !auth?.feature.soApproval && ( + {transaction.data?.status != 'draft' && !auth?.feature.soApproval && (
+ ) : ( + <> +
Site
+
: {transaction?.data?.sitePartner}
+ )}

diff --git a/src/lib/transaction/components/Transactions.jsx b/src/lib/transaction/components/Transactions.jsx index 5a6dfb01..92bdd276 100644 --- a/src/lib/transaction/components/Transactions.jsx +++ b/src/lib/transaction/components/Transactions.jsx @@ -145,7 +145,7 @@ const Transactions = ({ context = '' }) => { siteFilter || (auth?.webRole === null && auth?.site ? auth.site : null), }; const queryString = toQuery(query) - const data = await transactionsApi({ query : queryString }); + const data = await transactionsApi({ query: queryString }); return data; }; @@ -349,7 +349,7 @@ const Transactions = ({ context = '' }) => { ))} - ):(
) } + ) : (
)} {
+ {auth?.feature?.soApproval && ( + + )} @@ -417,6 +420,9 @@ const Transactions = ({ context = '' }) => { + {auth?.feature?.soApproval && ( + + )}
No. PO Tanggal Created BySiteSalesperson Total Status{saleOrder.purchaseOrderName || '-'} {saleOrder.dateOrder || '-'} {saleOrder.address.customer?.name || '-'}{saleOrder.sitePartner || '-'}{saleOrder.sales} {currencyFormat(saleOrder.amountTotal)} -- cgit v1.2.3