Android_Retail/src/Pages/Kiosk/OrderView/OrderView1.jsx

324 lines
11 KiB
JavaScript

import React, { useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { MdCurrencyRupee } from 'react-icons/md';
import KioskHeader from '../Components/KioskHeader';
import KioskFooter from '../Components/KioskFooter';
import KioskFooter2 from '../Components/KioskFooter2';
import {
changeKioskPageName,
getKioskLightColour,
} from '../../../Features/Kiosk/kiosk';
import {
GlobalKioskOrderDetails,
changeKioskOrderDetails,
} from '../../../Features/BookingScreen/BookingData/KioskBookingData';
import KioskFooter3 from '../Components/KioskFooter3';
import PozoDineInIcon from '../KioskIcons/KioskDineIn';
import TakeAway from '../KioskIcons/KioskTakeAway';
import '../../../Styles/Kiosk/OrderView/OrderView1.scss';
import { PreferenceData } from '../../../Features/BookingScreen/BookingData/BookingData';
import { calculateOverAllQtyLimit } from '../../../utils/calculations';
import { message } from 'antd';
import { IoIosWarning } from 'react-icons/io';
const OrderView1 = (props) => {
const KioskThemeData = props?.hasOwnProperty('KioskThemeData')
? props['KioskThemeData']
: null;
const dispatch = useDispatch();
const [maxLimitExceeded, setMaxLimitExceeded] = useState(false);
const KioskOrderDetails = useSelector(GlobalKioskOrderDetails);
const getKioskLightColourdata = useSelector(getKioskLightColour);
const preferenceDatas = useSelector(PreferenceData);
const overAllLimitPreferenece =
preferenceDatas?.[0]?.['SettingDtlDetails']?.find(
(item) => (item.SettingIdName?.toLowerCase() === 'overalllimit') && item?.SettingValue === 'Y');
const itemWiseLimitPreferenece =
preferenceDatas?.[0]?.['SettingDtlDetails']?.find(
(item) => item.SettingIdName?.toLowerCase() === 'itemwiselimit' && item?.SettingValue === 'Y');
const maxQtyLimit = itemWiseLimitPreferenece?.SettingCount || overAllLimitPreferenece?.SettingCount || null;
const BackToCategory = async () => {
await dispatch(changeKioskPageName('categoryPage'));
};
const removeFromCart = async (item) => {
await dispatch(
changeKioskOrderDetails(
KioskOrderDetails?.filter(
(cartItem) =>
!(
cartItem?.ProdId === item?.ProdId &&
cartItem?.InwardDtlId === item?.InwardDtlId &&
cartItem?.OrderRate === item?.OrderRate &&
cartItem?.BookingTypeName === item?.BookingTypeName
)
)
)
);
};
const increase = async (item) => {
if ((overAllLimitPreferenece || itemWiseLimitPreferenece) && maxQtyLimit) {
if (overAllLimitPreferenece) {
const calculatedOverAllQty = calculateOverAllQtyLimit(KioskOrderDetails);
if ((calculatedOverAllQty + 1) > maxQtyLimit) {
setMaxLimitExceeded(true);
// Reset after 3 seconds
setTimeout(() => {
setMaxLimitExceeded(false);
}, 2000);
return;
}
}
}
await dispatch(
changeKioskOrderDetails(
KioskOrderDetails?.map(
(
cartItem // if the item is already in the cart, increase the quantity of the item
) =>
cartItem.ProdId === item.ProdId &&
cartItem.InwardDtlId === item.InwardDtlId &&
cartItem.OrderRate === item.OrderRate &&
cartItem?.BookingTypeName === item?.BookingTypeName
? {
...cartItem,
OrderQty: cartItem.OrderQty + 1,
TotalAmt: (cartItem.OrderQty + 1) * cartItem.OrderRate,
TaxAmt: (
((cartItem.OrderQty + 1) *
cartItem.OrderRate *
cartItem.TaxPercentage) /
(100 + cartItem.TaxPercentage)
).toFixed(2),
WithoutTaxRate:
(cartItem.OrderQty + 1) * cartItem.OrderRate -
(
((cartItem.OrderQty + 1) *
cartItem.OrderRate *
cartItem.TaxPercentage) /
(100 + cartItem.TaxPercentage)
).toFixed(2),
}
: cartItem // otherwise, return the cart item
)
)
);
};
const decrease = async (item) => {
const isItemInCart = KioskOrderDetails?.find(
(cartItem) =>
cartItem.ProdId === item.ProdId &&
cartItem.InwardDtlId === item.InwardDtlId &&
cartItem.OrderRate === item.OrderRate &&
cartItem?.BookingTypeName === item?.BookingTypeName
); // check if the item is already in the cart
console.log(isItemInCart, 'isItemInCart');
if (isItemInCart?.OrderQty > 1) {
await dispatch(
changeKioskOrderDetails(
KioskOrderDetails?.map(
(
cartItem // if the item is already in the cart, increase the quantity of the item
) =>
cartItem.ProdId === item.ProdId &&
cartItem.InwardDtlId === item.InwardDtlId &&
cartItem.OrderRate === item.OrderRate &&
cartItem?.BookingTypeName === item?.BookingTypeName
? {
...cartItem,
OrderQty: cartItem.OrderQty - 1,
TotalAmt: (cartItem.OrderQty - 1) * cartItem.OrderRate,
TaxAmt: (
((cartItem.OrderQty - 1) *
cartItem.OrderRate *
cartItem.TaxPercentage) /
(100 + cartItem.TaxPercentage)
).toFixed(2),
WithoutTaxRate:
(cartItem.OrderQty - 1) * cartItem.OrderRate -
(
((cartItem.OrderQty - 1) *
cartItem.OrderRate *
cartItem.TaxPercentage) /
(100 + cartItem.TaxPercentage)
).toFixed(2),
}
: cartItem // otherwise, return the cart item
)
)
);
} else {
await dispatch(
changeKioskOrderDetails(
KioskOrderDetails?.filter(
(cartItem) =>
!(
cartItem.ProdId === item.ProdId &&
cartItem.InwardDtlId === item.InwardDtlId &&
cartItem.OrderRate === item.OrderRate &&
cartItem?.BookingTypeName === item?.BookingTypeName
)
)
)
);
}
};
return (
<div className="KioskOrderList-master">
<div
className="KioskOrderList-main"
style={{ backgroundColor: getKioskLightColourdata }}
>
{/* header area */}
<KioskHeader
KioskThemeData={KioskThemeData}
SessionDtl={props?.SessionDtl}
/>
<div
className={
props?.Footer === '3'
? 'KioskOrderList-scrolling1'
: 'KioskOrderList-scrolling'
}
>
<div className="KioskOrderList-ordercard-main">
{KioskOrderDetails.map((item) => (
<div className="KioskOrderList-ordercards">
<div
style={{ position: 'relative' }}
className="KioskOrderView2-item-img-comtainer"
>
<div className="OrderViewCardIcon1">
{item?.BookingTypeName == 'Dine In' ? (
<PozoDineInIcon
style={{
height: '23px',
width: '23px',
color: '#40AF7A',
}}
/>
) : (
<TakeAway
style={{
height: '23px',
width: '23px',
color: '#8D765B',
}}
/>
)}
</div>
</div>
<div className="KioskOrderList-dishname-prize">
<p>
{item?.ProdName} &nbsp;{' '}
{item.BrandName !== null ? item.BrandName : ''}(
{!item?.ProdVariantName?.toLowerCase().includes(
'variant'
) && <span>{item?.ProdVariantName} </span>}
{item?.Size} {item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}
)
</p>
<span>
{' '}
<MdCurrencyRupee
size={18}
style={{ marginRight: '-4px', marginBottom: '-3px' }}
/>
{item?.TotalAmt}
</span>
</div>
<div className="KioskOrderList-add-remove">
<div className="add-remove">
<span onClick={() => decrease(item)}> - </span>
<p>{item?.OrderQty}</p>
<span
style={{
pointerEvents:
item?.StockAvailable === 'Y'
? item?.BalanceQty <= item?.OrderQty && 'none'
: '',
opacity:
item?.StockAvailable === 'Y'
? item?.BalanceQty <= item?.OrderQty && '30%'
: '',
}}
onClick={() => increase(item)}
>
{' '}
+{' '}
</span>
</div>
<div className="remove" onClick={() => removeFromCart(item)}>
remove
</div>
</div>
<div className={`Item3Warning ${maxLimitExceeded ? 'showing' : ''}`}>
<p>
<IoIosWarning size={30} color='#b99400' />Maximum Quantity ({maxQtyLimit}) Reached
</p>
</div>
</div>
))}
</div>
</div>
<div
className={
props?.Footer === '3'
? 'KioskOrderList-addmore-footer3'
: 'KioskOrderList-addmore'
}
onClick={() => BackToCategory()}
style={{ backgroundColor: getKioskLightColourdata }}
>
{' '}
<p>Add More + </p>
</div>
<div>
{props?.Footer === '1' && (
<KioskFooter SessionDtl={props?.SessionDtl} />
)}
{props?.Footer === '2' && (
<>
<div
style={{
position: 'fixed',
bottom: 0,
width: '100%',
background: 'white',
padding: '1rem 0rem',
}}
>
<KioskFooter2 SessionDtl={props?.SessionDtl} />
</div>
</>
)}
{props?.Footer === '3' && (
<>
<div
style={{
position: 'fixed',
bottom: 0,
width: '100%',
background: 'white',
padding: '1rem 0rem',
}}
>
<KioskFooter3 SessionDtl={props?.SessionDtl} />
</div>
</>
)}
</div>
</div>
</div>
);
};
export default OrderView1;