2026-01-27 18:27:29 +05:30
|
|
|
|
import { RiDeleteBin6Line } from 'react-icons/ri';
|
2026-03-03 10:00:43 +05:30
|
|
|
|
import React, { useState } from 'react';
|
2026-01-27 18:27:29 +05:30
|
|
|
|
import { useDispatch, useSelector } from 'react-redux';
|
|
|
|
|
|
import { MdCurrencyRupee } from 'react-icons/md';
|
|
|
|
|
|
import horizontal from '../../../Images/defaultItemImg.png';
|
|
|
|
|
|
import '../../../Styles/Kiosk/OrderView/OrderView3.scss';
|
|
|
|
|
|
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';
|
2026-02-24 14:33:29 +05:30
|
|
|
|
import { PreferenceData } from '../../../Features/BookingScreen/BookingData/BookingData';
|
|
|
|
|
|
import { calculateOverAllQtyLimit } from '../../../utils/calculations';
|
|
|
|
|
|
import { message } from 'antd';
|
2026-03-03 10:00:43 +05:30
|
|
|
|
import { IoIosWarning } from 'react-icons/io';
|
2026-01-27 18:27:29 +05:30
|
|
|
|
|
|
|
|
|
|
const KioskOrderView = (props) => {
|
|
|
|
|
|
console.log(props, 'propsprops');
|
|
|
|
|
|
const KioskThemeData = props?.hasOwnProperty('KioskThemeData')
|
|
|
|
|
|
? props['KioskThemeData']
|
|
|
|
|
|
: null;
|
|
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
|
const KioskOrderDetails = useSelector(GlobalKioskOrderDetails);
|
|
|
|
|
|
const getKioskLightColourdata = useSelector(getKioskLightColour);
|
2026-02-24 14:33:29 +05:30
|
|
|
|
const preferenceDatas = useSelector(PreferenceData);
|
2026-03-03 10:00:43 +05:30
|
|
|
|
const [maxLimitExceeded, setMaxLimitExceeded] = useState(false);
|
2026-02-24 14:33:29 +05:30
|
|
|
|
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;
|
2026-01-27 18:27:29 +05:30
|
|
|
|
|
|
|
|
|
|
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) => {
|
2026-02-24 14:33:29 +05:30
|
|
|
|
|
|
|
|
|
|
if ((overAllLimitPreferenece || itemWiseLimitPreferenece) && maxQtyLimit) {
|
|
|
|
|
|
if (overAllLimitPreferenece) {
|
|
|
|
|
|
const calculatedOverAllQty = calculateOverAllQtyLimit(KioskOrderDetails);
|
|
|
|
|
|
if ((calculatedOverAllQty + 1) > maxQtyLimit) {
|
2026-03-03 10:00:43 +05:30
|
|
|
|
setMaxLimitExceeded(true);
|
|
|
|
|
|
// Reset after 3 seconds
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
setMaxLimitExceeded(false);
|
|
|
|
|
|
}, 2000);
|
2026-02-24 14:33:29 +05:30
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-27 18:27:29 +05:30
|
|
|
|
await dispatch(
|
|
|
|
|
|
changeKioskOrderDetails(
|
|
|
|
|
|
KioskOrderDetails?.map(
|
|
|
|
|
|
(
|
|
|
|
|
|
cartItem // if the item is already in the cart, increase the quantity of the item
|
|
|
|
|
|
) =>
|
|
|
|
|
|
cartItem.ProdId === item.ProdId &&
|
2026-02-24 14:33:29 +05:30
|
|
|
|
cartItem.InwardDtlId === item.InwardDtlId &&
|
|
|
|
|
|
cartItem.OrderRate === item.OrderRate &&
|
|
|
|
|
|
cartItem?.BookingTypeName === item?.BookingTypeName
|
2026-01-27 18:27:29 +05:30
|
|
|
|
? {
|
2026-02-24 14:33:29 +05:30
|
|
|
|
...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 -
|
|
|
|
|
|
(
|
2026-01-27 18:27:29 +05:30
|
|
|
|
((cartItem.OrderQty + 1) *
|
|
|
|
|
|
cartItem.OrderRate *
|
|
|
|
|
|
cartItem.TaxPercentage) /
|
|
|
|
|
|
(100 + cartItem.TaxPercentage)
|
|
|
|
|
|
).toFixed(2),
|
2026-02-24 14:33:29 +05:30
|
|
|
|
}
|
2026-01-27 18:27:29 +05:30
|
|
|
|
: 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
|
|
|
|
|
|
|
|
|
|
|
|
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 &&
|
2026-02-24 14:33:29 +05:30
|
|
|
|
cartItem.InwardDtlId === item.InwardDtlId &&
|
|
|
|
|
|
cartItem.OrderRate === item.OrderRate &&
|
|
|
|
|
|
cartItem?.BookingTypeName === item?.BookingTypeName
|
2026-01-27 18:27:29 +05:30
|
|
|
|
? {
|
2026-02-24 14:33:29 +05:30
|
|
|
|
...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 -
|
|
|
|
|
|
(
|
2026-01-27 18:27:29 +05:30
|
|
|
|
((cartItem.OrderQty - 1) *
|
|
|
|
|
|
cartItem.OrderRate *
|
|
|
|
|
|
cartItem.TaxPercentage) /
|
|
|
|
|
|
(100 + cartItem.TaxPercentage)
|
|
|
|
|
|
).toFixed(2),
|
2026-02-24 14:33:29 +05:30
|
|
|
|
}
|
2026-01-27 18:27:29 +05:30
|
|
|
|
: 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
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
return (
|
|
|
|
|
|
<div className="KioskOrderList3-master">
|
|
|
|
|
|
<div
|
|
|
|
|
|
className="KioskOrderList3-main3"
|
|
|
|
|
|
style={{ backgroundColor: getKioskLightColourdata }}
|
|
|
|
|
|
>
|
|
|
|
|
|
{/* header area */}
|
|
|
|
|
|
|
|
|
|
|
|
<KioskHeader
|
|
|
|
|
|
KioskThemeData={KioskThemeData}
|
|
|
|
|
|
SessionDtl={props?.SessionDtl}
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
|
className={
|
|
|
|
|
|
props?.Footer === '3'
|
|
|
|
|
|
? 'KioskOrderList3-scrolling1'
|
|
|
|
|
|
: 'KioskOrderList3-scrolling'
|
|
|
|
|
|
}
|
|
|
|
|
|
>
|
|
|
|
|
|
<div className="KioskOrderList3-ordercard-main3">
|
|
|
|
|
|
{KioskOrderDetails?.map((item) => (
|
|
|
|
|
|
<div
|
|
|
|
|
|
className="KioskOrderList3-ordercards"
|
|
|
|
|
|
style={{ position: 'relative' }}
|
|
|
|
|
|
>
|
|
|
|
|
|
<div className="OrderViewCardIcon">
|
|
|
|
|
|
{item?.BookingTypeName == 'Dine In' ? (
|
|
|
|
|
|
<PozoDineInIcon
|
|
|
|
|
|
style={{
|
|
|
|
|
|
height: '25px',
|
|
|
|
|
|
width: '25px',
|
|
|
|
|
|
color: '#40AF7A',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
) : (
|
|
|
|
|
|
<TakeAway
|
|
|
|
|
|
style={{
|
|
|
|
|
|
height: '25px',
|
|
|
|
|
|
width: '25px',
|
|
|
|
|
|
color: '#8D765B',
|
|
|
|
|
|
}}
|
|
|
|
|
|
/>
|
|
|
|
|
|
)}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div className="dish-img3">
|
|
|
|
|
|
<img
|
|
|
|
|
|
src={item?.ProdLogo ? item?.ProdLogo : horizontal}
|
|
|
|
|
|
alt="item image"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
|
|
|
<div className="KioskOrderList3-dishname-prize">
|
|
|
|
|
|
<p style={{ color: 'black' }}>
|
|
|
|
|
|
{item?.ProdName} {' '}
|
|
|
|
|
|
{item.BrandName !== null ? item.BrandName : ''}
|
|
|
|
|
|
<div style={{ textWrap: 'nowrap', color: 'black' }}>
|
|
|
|
|
|
{' '}
|
|
|
|
|
|
(
|
|
|
|
|
|
{!item?.ProdVariantName?.toLowerCase().includes(
|
|
|
|
|
|
'variant'
|
|
|
|
|
|
) && (
|
2026-02-24 14:33:29 +05:30
|
|
|
|
<span style={{ color: 'black' }}>
|
|
|
|
|
|
{item?.ProdVariantName}{' '}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
)}{' '}
|
2026-01-27 18:27:29 +05:30
|
|
|
|
{item?.Size}{' '}
|
|
|
|
|
|
{item?.SinglePc == 'Y' ? 'PCS' : item?.UomName}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
)
|
|
|
|
|
|
</p>
|
|
|
|
|
|
<span>
|
|
|
|
|
|
{' '}
|
|
|
|
|
|
<MdCurrencyRupee
|
|
|
|
|
|
size={18}
|
|
|
|
|
|
style={{ marginRight: '-4px', marginBottom: '-3px' }}
|
|
|
|
|
|
/>
|
|
|
|
|
|
{item?.TotalAmt}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
<div className="KioskOrderList3-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
|
|
|
|
|
|
className="remove"
|
|
|
|
|
|
onClick={() => removeFromCart(item)}
|
|
|
|
|
|
>
|
|
|
|
|
|
<RiDeleteBin6Line />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div
|
|
|
|
|
|
className={
|
|
|
|
|
|
props?.Footer === '3'
|
|
|
|
|
|
? 'KioskOrderList3-addmore-footer3'
|
|
|
|
|
|
: 'KioskOrderList3-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>
|
2026-03-03 10:00:43 +05:30
|
|
|
|
<div className={`Item3Warning ${maxLimitExceeded ? 'showing' : ''}`}>
|
|
|
|
|
|
<p>
|
|
|
|
|
|
<IoIosWarning size={30} color='#b99400' />Maximum Quantity ({maxQtyLimit}) Reached
|
|
|
|
|
|
</p>
|
|
|
|
|
|
</div>
|
2026-01-27 18:27:29 +05:30
|
|
|
|
</div>
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default KioskOrderView;
|