Merge pull request 'qty-shortcut-key' (#108) from qty-shortcut-key into main

Reviewed-on: Pozomind/pozo-retail-app#108
This commit is contained in:
karthikalakshmi 2026-02-09 14:33:43 +05:30
commit fa70173fc1
12 changed files with 405 additions and 235 deletions

View File

@ -274,21 +274,44 @@ const BSBillingTable1 = () => {
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
// const handleKeyDown = (event) => {
// if (!event.ctrlKey) return;
// const key = event.key.toLowerCase();
// if (key === 'q') {
// event.preventDefault();
// handleShortcut('qty');
// }
// if (key === 'e') {
// event.preventDefault();
// handleShortcut('price');
// }
// };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
if (!event.ctrlKey) return; const key = event.key.toLowerCase();
// 👉 ALT + P Open Edit Total Amount
const key = event.key.toLowerCase(); if (event.altKey && key === 'p') {
event.preventDefault();
if (key === 'q') { if (tableData?.length > 0) {
event.preventDefault(); OpenEditTotalAmount();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {

View File

@ -228,22 +228,29 @@ const BSBillingTable3 = () => {
handleEditQuantity(item); handleEditQuantity(item);
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
const handleKeyDown = (event) => {
const handleKeyDown = (event) => { const key = event.key.toLowerCase();
if (!event.ctrlKey) return; // 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
const key = event.key.toLowerCase(); event.preventDefault();
if (tableData?.length > 0) {
if (key === 'q') { OpenEditTotalAmount();
event.preventDefault();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {

View File

@ -281,22 +281,29 @@ const BSBillingTable4 = () => {
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
if (!preferenceshortcutkey) return; const key = event.key.toLowerCase();
if (!event.ctrlKey) return; // 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
const key = event.key.toLowerCase(); event.preventDefault();
if (tableData?.length > 0) {
if (key === 'q') { OpenEditTotalAmount();
event.preventDefault();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);

View File

@ -1927,22 +1927,29 @@ const BsBill = () => {
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
if (!preferenceshortcutkey) return; const key = event.key.toLowerCase();
if (!event.ctrlKey) return; // 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
const key = event.key.toLowerCase(); event.preventDefault();
if (TableData?.length > 0) {
if (key === 'q') { OpenEditTotalAmount();
event.preventDefault();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {

View File

@ -255,24 +255,29 @@ const BSBillingTable6 = () => {
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
const key = event.key.toLowerCase();
if (!preferenceshortcutkey) return // 👉 ALT + P Open Edit Total Amount
if (!event.ctrlKey) return; if (event.altKey && key === 'p') {
event.preventDefault();
const key = event.key.toLowerCase(); if (tableData?.length > 0) {
OpenEditTotalAmount();
if (key === 'q') {
event.preventDefault();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {

View File

@ -225,35 +225,6 @@ const BSBillingTable7 = () => {
setPreviousdataLength(PreviousOrderLength); setPreviousdataLength(PreviousOrderLength);
}, [PreviousOrderLength]); }, [PreviousOrderLength]);
// useEffect(() => {
// const handleKeyDown = (event) => {
// // Ctrl + Q
// if (event.ctrlKey && event.key.toLowerCase() === 'q') {
// event.preventDefault();
// const getItem = (data = []) => {
// if (!data.length) return null;
// return BillOrderPre === 'Y' ? data[0] : data[data.length - 1];
// };
// let item = null;
// if (tableDataTakeAway?.length > 0) {
// item = getItem(tableDataTakeAway);
// } else if (tableDataDinein?.length > 0) {
// item = getItem(tableDataDinein);
// }
// if (item) {
// handleEditQuantity(item);
// }
// }
// };
// window.addEventListener('keydown', handleKeyDown);
// return () => {
// window.removeEventListener('keydown', handleKeyDown);
// };
// }, [tableDataTakeAway, tableDataDinein, BillOrderPre]);
useEffect(() => { useEffect(() => {
if (!preferenceshortcutkey) return; if (!preferenceshortcutkey) return;
const getSelectedItem = () => { const getSelectedItem = () => {
@ -279,21 +250,25 @@ const BSBillingTable7 = () => {
}; };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
if (!preferenceshortcutkey) return; const key = event.key.toLowerCase();
if (!event.ctrlKey) return; // 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
const key = event.key.toLowerCase(); event.preventDefault();
if (tableData?.length > 0) {
if (key === 'q') { OpenEditTotalAmount();
event.preventDefault();
handleShortcut('qty');
} }
return;
if (key === 'e') { }
event.preventDefault(); if (!event.ctrlKey) return;
handleShortcut('price'); if (key === 'q') {
} event.preventDefault();
}; handleShortcut('qty');
}
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {

View File

@ -38,6 +38,10 @@ const BSEditTotalAmt = (props) => {
console.log(OverAllSales, 'OverAllEstimateOverAllEstimate'); console.log(OverAllSales, 'OverAllEstimateOverAllEstimate');
const formRef = useRef(null); const formRef = useRef(null);
const formEstRef = useRef(null); const formEstRef = useRef(null);
const salesDiscInputRef = useRef(null);
const salesMoreOptInputRef = useRef(null);
const estDiscInputRef = useRef(null);
const estMoreOptInputRef = useRef(null);
const dispatch = useDispatch(); const dispatch = useDispatch();
const [messageType, setMessageType] = useState(null); const [messageType, setMessageType] = useState(null);
const [messageData, setMessageData] = useState(null); const [messageData, setMessageData] = useState(null);
@ -87,6 +91,29 @@ const BSEditTotalAmt = (props) => {
return () => clearInterval(timer); return () => clearInterval(timer);
}, [timeLeft]); }, [timeLeft]);
useEffect(() => {
const focusInput = (ref) => {
setTimeout(() => {
const inputElement = ref.current?.querySelector('input');
inputElement?.focus();
}, 100);
};
if (SalesData?.length > 0) {
if (MoreOpt) {
focusInput(salesMoreOptInputRef);
} else if (EditTotalAmt) {
focusInput(salesDiscInputRef);
}
} else if (EstimateData?.length > 0 && EditTotalAmt) {
if (ESTMoreOpt) {
focusInput(estMoreOptInputRef);
} else {
focusInput(estDiscInputRef);
}
}
}, [EditTotalAmt, MoreOpt, ESTMoreOpt, SalesData, EstimateData]);
const handleOtpChange = (index, value) => { const handleOtpChange = (index, value) => {
// Allow empty value for clearing // Allow empty value for clearing
if (value === '' || value.match(/^[0-9]$/)) { if (value === '' || value.match(/^[0-9]$/)) {
@ -201,6 +228,10 @@ const BSEditTotalAmt = (props) => {
setMessageData('Please Give less than value for sell price'); setMessageData('Please Give less than value for sell price');
setESTSellingPrice(0); setESTSellingPrice(0);
formEstRef?.current?.resetFields(); formEstRef?.current?.resetFields();
setTimeout(() => {
const inputElement = estDiscInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} else { } else {
setESTSellingPrice(inputValue); setESTSellingPrice(inputValue);
// Check if entered amount is 0 or equals total amount // Check if entered amount is 0 or equals total amount
@ -214,6 +245,13 @@ const BSEditTotalAmt = (props) => {
handleOk(); handleOk();
} }
}; };
const handleEstKeyDown = (e) => {
if (e.key === 'Enter') {
e.preventDefault();
SetTotalDiscount();
}
};
const SalesChangefun = (e) => { const SalesChangefun = (e) => {
const inputValue = e.target.value.trim(); const inputValue = e.target.value.trim();
console.log(e, e.target.value, 'SalesChangefun'); console.log(e, e.target.value, 'SalesChangefun');
@ -223,6 +261,10 @@ const BSEditTotalAmt = (props) => {
setMessageData('Please Give less than value for sell price'); setMessageData('Please Give less than value for sell price');
setSellingPrice(0); setSellingPrice(0);
formRef?.current?.resetFields(); formRef?.current?.resetFields();
setTimeout(() => {
const inputElement = salesDiscInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} else { } else {
setSellingPrice(inputValue); setSellingPrice(inputValue);
// SalesTotalAmount() // SalesTotalAmount()
@ -232,6 +274,13 @@ const BSEditTotalAmt = (props) => {
// setSalesDiscAmount(0) // setSalesDiscAmount(0)
} }
}; };
const handleSalesKeyDown = (e) => {
if (e.key === 'Enter') {
e.preventDefault();
SetTotalDiscount();
}
};
const orderscolumns = [ const orderscolumns = [
{ {
title: 'Sl.No', title: 'Sl.No',
@ -347,6 +396,10 @@ const BSEditTotalAmt = (props) => {
setSalesDiscAmount(0); setSalesDiscAmount(0);
// setFinalTotalAmt() // setFinalTotalAmt()
formRef.current?.resetFields(); formRef.current?.resetFields();
setTimeout(() => {
const inputElement = salesMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
}; };
const onEstPercentageSelectionChange = (data) => { const onEstPercentageSelectionChange = (data) => {
setESTPercentageSelection(data); setESTPercentageSelection(data);
@ -354,6 +407,10 @@ const BSEditTotalAmt = (props) => {
setEstDiscAmount(0); setEstDiscAmount(0);
// setFinalTotalAmt() // setFinalTotalAmt()
formEstRef.current?.resetFields(); formEstRef.current?.resetFields();
setTimeout(() => {
const inputElement = estMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
}; };
const PriceChangefun = (data) => { const PriceChangefun = (data) => {
@ -375,6 +432,10 @@ const BSEditTotalAmt = (props) => {
setSalesDiscAmount(0); setSalesDiscAmount(0);
// setNewPrice1(0) // setNewPrice1(0)
formRef.current?.resetFields(); formRef.current?.resetFields();
setTimeout(() => {
const inputElement = salesMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} }
} else { } else {
// Percentage mode // Percentage mode
@ -391,6 +452,10 @@ const BSEditTotalAmt = (props) => {
setMessageData('Please Give less than or equal to 100'); setMessageData('Please Give less than or equal to 100');
setSalesDiscAmount(0); setSalesDiscAmount(0);
formRef.current?.resetFields(); formRef.current?.resetFields();
setTimeout(() => {
const inputElement = salesMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} }
} }
} else { } else {
@ -400,6 +465,13 @@ const BSEditTotalAmt = (props) => {
} }
}; };
const handlePriceKeyDown = (e) => {
if (e.key === 'Enter') {
e.preventDefault();
SetTotalDiscount();
}
};
const PriceChangefunEst = (data) => { const PriceChangefunEst = (data) => {
console.log(data?.target.value, PercentageSelection, 'datadata'); console.log(data?.target.value, PercentageSelection, 'datadata');
if (data?.target.value) { if (data?.target.value) {
@ -418,6 +490,10 @@ const BSEditTotalAmt = (props) => {
setMessageData('Please Give less than value for sell price'); setMessageData('Please Give less than value for sell price');
setEstDiscAmount(0); setEstDiscAmount(0);
formEstRef.current?.resetFields(); formEstRef.current?.resetFields();
setTimeout(() => {
const inputElement = estMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} }
} else { } else {
// Percentage mode // Percentage mode
@ -434,6 +510,10 @@ const BSEditTotalAmt = (props) => {
setMessageData('Please Give less than or equal to 100'); setMessageData('Please Give less than or equal to 100');
setEstDiscAmount(0); setEstDiscAmount(0);
formEstRef.current?.resetFields(); formEstRef.current?.resetFields();
setTimeout(() => {
const inputElement = estMoreOptInputRef.current?.querySelector('input');
inputElement?.focus();
}, 100);
} }
} }
} else { } else {
@ -444,6 +524,13 @@ const BSEditTotalAmt = (props) => {
} }
}; };
const handlePriceEstKeyDown = (e) => {
if (e.key === 'Enter') {
e.preventDefault();
SetTotalDiscount();
}
};
const moreOptions = () => { const moreOptions = () => {
setMoreOpt((prev) => !prev); setMoreOpt((prev) => !prev);
setSalesDiscAmount(0); setSalesDiscAmount(0);
@ -535,15 +622,18 @@ const BSEditTotalAmt = (props) => {
}, },
]} ]}
> >
<InputField <div ref={salesDiscInputRef}>
field="SalesDisc" <InputField
name="SalesDisc" field="SalesDisc"
fieldState={true} name="SalesDisc"
fieldApi={true} fieldState={true}
autocomplete="off" fieldApi={true}
onChange={(e) => SalesChangefun(e)} autocomplete="off"
maxLength={8} onChange={(e) => SalesChangefun(e)}
/> onKeyDown={(e) => handleSalesKeyDown(e)}
maxLength={8}
/>
</div>
</Form.Item> </Form.Item>
</Form>{' '} </Form>{' '}
</td> </td>
@ -593,18 +683,21 @@ const BSEditTotalAmt = (props) => {
}, },
]} ]}
> >
<InputField <div ref={salesMoreOptInputRef}>
field="SellPrice" <InputField
name="SellPrice" field="SellPrice"
// value={NewPrice1} name="SellPrice"
label="Reduction" // value={NewPrice1}
fieldState={true} label="Reduction"
fieldApi={true} fieldState={true}
// id="error2" fieldApi={true}
autocomplete="off" // id="error2"
onChange={(e) => PriceChangefun(e)} autocomplete="off"
// isOnChange={formType == "edit" || formRef.current?.getFieldsValue()?.CustName ? true : false} onChange={(e) => PriceChangefun(e)}
/> onKeyDown={(e) => handlePriceKeyDown(e)}
// isOnChange={formType == "edit" || formRef.current?.getFieldsValue()?.CustName ? true : false}
/>
</div>
</Form.Item> </Form.Item>
{/* <input type="text" {/* <input type="text"
onChange={(e)=>PriceChangefun(e)} onChange={(e)=>PriceChangefun(e)}
@ -684,16 +777,19 @@ const BSEditTotalAmt = (props) => {
}, },
]} ]}
> >
<InputField <div ref={estDiscInputRef}>
field="ESTSalesDisc" <InputField
name="ESTSalesDisc" field="ESTSalesDisc"
fieldState={true} name="ESTSalesDisc"
fieldApi={true} fieldState={true}
// id="error2" fieldApi={true}
autocomplete="off" // id="error2"
onChange={(e) => EstChangefun(e)} autocomplete="off"
maxLength={8} onChange={(e) => EstChangefun(e)}
/> onKeyDown={(e) => handleEstKeyDown(e)}
maxLength={8}
/>
</div>
</Form.Item> </Form.Item>
</Form> </Form>
</td> </td>
@ -742,18 +838,21 @@ const BSEditTotalAmt = (props) => {
}, },
]} ]}
> >
<InputField <div ref={estMoreOptInputRef}>
field="SellPrice" <InputField
name="ESTSellingPrice" field="SellPrice"
// value={NewPrice1} name="ESTSellingPrice"
label="Reduction" // value={NewPrice1}
fieldState={true} label="Reduction"
fieldApi={true} fieldState={true}
// id="error2" fieldApi={true}
autocomplete="off" // id="error2"
onChange={(e) => PriceChangefunEst(e)} autocomplete="off"
// isOnChange={formType == "edit" || formRef.current?.getFieldsValue()?.CustName ? true : false} onChange={(e) => PriceChangefunEst(e)}
/> onKeyDown={(e) => handlePriceEstKeyDown(e)}
// isOnChange={formType == "edit" || formRef.current?.getFieldsValue()?.CustName ? true : false}
/>
</div>
</Form.Item> </Form.Item>
{/* <input type="text" {/* <input type="text"
onChange={(e)=>PriceChangefun(e)} onChange={(e)=>PriceChangefun(e)}

View File

@ -148,13 +148,13 @@ const ComboSalesBillTable = () => {
OrderType === 'Hold' OrderType === 'Hold'
? tableData?.filter((a, b) => a.BookingTypeName === 'TakeAway') ? tableData?.filter((a, b) => a.BookingTypeName === 'TakeAway')
: tableData?.filter( : tableData?.filter(
(a, b) => a.BookingTypeName === 'TakeAway' && !a?.SalesId (a, b) => a.BookingTypeName === 'TakeAway' && !a?.SalesId
); );
const OldtableDataTakeAway = const OldtableDataTakeAway =
OrderType != 'Hold' OrderType != 'Hold'
? tableData?.filter( ? tableData?.filter(
(a, b) => a.BookingTypeName === 'TakeAway' && a?.SalesId (a, b) => a.BookingTypeName === 'TakeAway' && a?.SalesId
) )
: []; : [];
const [EditQuantity, setEditQuantity] = useState(false); const [EditQuantity, setEditQuantity] = useState(false);
@ -249,27 +249,54 @@ const ComboSalesBillTable = () => {
// ); // );
// setBillOrderPre(BillOrder?.SettingValue); // setBillOrderPre(BillOrder?.SettingValue);
// }, [preferenceDatas]); // }, [preferenceDatas]);
useEffect(() => { useEffect(() => {
const getSelectedItem = () => {
const getItem = (data = []) => {
if (!data.length) return null;
return BillOrderPre === 'Y' ? data[0] : data[data.length - 1];
};
if (tableDataTakeAway?.length > 0) {
return getItem(tableDataTakeAway);
} else if (tableDataDinein?.length > 0) {
return getItem(tableDataDinein);
}
return null;
};
const handleShortcut = (method) => {
const item = getSelectedItem();
if (!item) return;
handleEditQuantity(item);
setshortKeyMethod(method);
};
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
if (event.ctrlKey && event.key.toLowerCase() === 'q') { const key = event.key.toLowerCase();
// 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
event.preventDefault(); event.preventDefault();
const getItem = (data = []) => { if (tableData?.length > 0) {
if (!data.length) return null; OpenEditTotalAmount();
return BillOrderPre === 'Y' ? data[0] : data[data.length - 1];
};
let item = null;
if (tableDataTakeAway?.length > 0) {
item = getItem(tableDataTakeAway);
} else if (tableDataDinein?.length > 0) {
item = getItem(tableDataDinein);
}
if (item) {
handleEditQuantity(item);
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'q') {
event.preventDefault();
handleShortcut('qty');
}
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
} }
}; };
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);
return () => { return () => {
window.removeEventListener('keydown', handleKeyDown); window.removeEventListener('keydown', handleKeyDown);
}; };
@ -1122,9 +1149,9 @@ const ComboSalesBillTable = () => {
)?.map((item, idx) => )?.map((item, idx) =>
idx === 0 idx === 0
? { ? {
...item, ...item,
FreeQty, FreeQty,
} }
: item : item
), ),
}; };
@ -2246,20 +2273,20 @@ const ComboSalesBillTable = () => {
tableDataDinein?.length >= PreviousdataLength tableDataDinein?.length >= PreviousdataLength
? 'wheat' ? 'wheat'
: BookingType !== 'Dine In' && : BookingType !== 'Dine In' &&
triggerAnimation && triggerAnimation &&
OldtableDataTakeAway?.length + index === 0 && OldtableDataTakeAway?.length + index === 0 &&
tableDataDinein?.length >= PreviousdataLength && tableDataDinein?.length >= PreviousdataLength &&
!HoldOrderDtl && !HoldOrderDtl &&
!UnpaidData !UnpaidData
? 'wheat' ? 'wheat'
: 'inherit' : 'inherit'
: 'none', : 'none',
background: row?.SalesId background: row?.SalesId
? 'rgb(243, 248, 213)' ? 'rgb(243, 248, 213)'
: GlobEstBooking === 'ParEst' && : GlobEstBooking === 'ParEst' &&
GlobProdwisedata?.includes( GlobProdwisedata?.includes(
row?.InwardDtlId + ' ' + row?.BookingTypeName row?.InwardDtlId + ' ' + row?.BookingTypeName
) )
? '#b2d1f7' ? '#b2d1f7'
: (OldtableDataTakeAway?.length + index) % 2 === 0 : (OldtableDataTakeAway?.length + index) % 2 === 0
? 'white' ? 'white'
@ -2294,37 +2321,37 @@ const ComboSalesBillTable = () => {
{/* Product Name / Item */} {/* Product Name / Item */}
{(item.OptionName === 'Item' || {(item.OptionName === 'Item' ||
item.OptionName === 'Product Name') && ( item.OptionName === 'Product Name') && (
<td <td
key={`prod-${index}`} key={`prod-${index}`}
className="productNameTd" className="productNameTd"
onClick={() => onClick={() =>
row.FullProductIdentifierDtls?.length > 0 || row.FullProductIdentifierDtls?.length > 0 ||
row.ProductIdentifierDtls?.length > 0 row.ProductIdentifierDtls?.length > 0
? handleImeiDetails(row) ? handleImeiDetails(row)
: editField && handleEditQuantity(row) : editField && handleEditQuantity(row)
} }
> >
{row?.Type !== 'OS' ? row.ProdName : row.ServiceName} {row?.Type !== 'OS' ? row.ProdName : row.ServiceName}
{row?.BrandName ? ` ${row.BrandName}` : ''} {row?.BrandName ? ` ${row.BrandName}` : ''}
{row?.Type !== 'C' && ( {row?.Type !== 'C' && (
<p className="Tbl3-Variant"> <p className="Tbl3-Variant">
{/* {row?.ProdVariantName} {row?.Size} {row?.UomName} */} {/* {row?.ProdVariantName} {row?.Size} {row?.UomName} */}
( (
{!row?.ProdVariantName?.toLowerCase()?.includes( {!row?.ProdVariantName?.toLowerCase()?.includes(
'variant' 'variant'
) && <span>{row?.ProdVariantName} </span>} ) && <span>{row?.ProdVariantName} </span>}
{row?.Size} {row?.Size}
{row?.SinglePc == 'Y' ? 'PCS' : row?.UomName}) {row?.SinglePc == 'Y' ? 'PCS' : row?.UomName})
</p>
)}
{row?.Type === 'C' &&
row.ProdDetail?.map((prod, idx) => (
<p key={idx}>
{prod.ProdName} - {prod.Size} {prod.UomName}
</p> </p>
))} )}
</td> {row?.Type === 'C' &&
)} row.ProdDetail?.map((prod, idx) => (
<p key={idx}>
{prod.ProdName} - {prod.Size} {prod.UomName}
</p>
))}
</td>
)}
{/* Barcode */} {/* Barcode */}
{item.OptionName === 'Barcode' && ( {item.OptionName === 'Barcode' && (
@ -2351,7 +2378,7 @@ const ComboSalesBillTable = () => {
onClick={() => onClick={() =>
editField && handleEditQuantityCombo(row) editField && handleEditQuantityCombo(row)
} }
// onClick={() => handleEditQTYcombo()} // onClick={() => handleEditQTYcombo()}
> >
{(!EditQtyCombo || row?.localId !== Index) && ( {(!EditQtyCombo || row?.localId !== Index) && (
<>{row.OrderQty}</> <>{row.OrderQty}</>
@ -2367,7 +2394,7 @@ const ComboSalesBillTable = () => {
Index={Index} Index={Index}
setIndex={setIndex} setIndex={setIndex}
setEditQtyCombo={setEditQtyCombo} setEditQtyCombo={setEditQtyCombo}
// id={`qty-${index}`} // id={`qty-${index}`}
/> />
)} )}
</td> </td>
@ -2414,9 +2441,9 @@ const ComboSalesBillTable = () => {
> >
{row?.Offer > 0 {row?.Offer > 0
? `${( ? `${(
(row.Offer / (row?.OrderQty * row?.OrderRate)) * (row.Offer / (row?.OrderQty * row?.OrderRate)) *
100 100
).toFixed(2)}%` ).toFixed(2)}%`
: '-'} : '-'}
</td> </td>
)} )}

View File

@ -262,22 +262,29 @@ const StandardTable = () => {
handleEditQuantity(item); handleEditQuantity(item);
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
const handleKeyDown = (event) => {
const handleKeyDown = (event) => { const key = event.key.toLowerCase();
if (!event.ctrlKey) return; // 👉 ALT + P Open Edit Total Amount
if (event.altKey && key === 'p') {
const key = event.key.toLowerCase(); event.preventDefault();
if (OrderCardDetail?.length > 0) {
if (key === 'q') { OpenEditTotalAmount();
event.preventDefault();
handleShortcut('qty');
} }
return;
}
// 👉 CTRL shortcuts
if (!event.ctrlKey) return;
if (key === 'e') { if (key === 'q') {
event.preventDefault(); event.preventDefault();
handleShortcut('price'); handleShortcut('qty');
} }
};
if (key === 'e') {
event.preventDefault();
handleShortcut('price');
}
};
window.addEventListener('keydown', handleKeyDown); window.addEventListener('keydown', handleKeyDown);

View File

@ -15,6 +15,7 @@ const ShortcutKeyHelper = ({ }) => {
{ key: 'F4', description: 'Quick Pay' }, { key: 'F4', description: 'Quick Pay' },
{ key: 'Alt + W', description: 'Hold and Recall' }, { key: 'Alt + W', description: 'Hold and Recall' },
{ key: 'Ctrl + Q', description: 'Qty Change' }, { key: 'Ctrl + Q', description: 'Qty Change' },
{ key: 'Alt + P', description: 'Change Total Amount' },
{ key: 'Ctrl + E', description: 'Price Change' }, { key: 'Ctrl + E', description: 'Price Change' },
{ key: 'Ctrl + I', description: 'Customer Rate History' }, { key: 'Ctrl + I', description: 'Customer Rate History' },
]; ];

View File

@ -543,10 +543,10 @@ export default function BSCombo1() {
</div> </div>
)} )}
</div> </div>
{preferenceshortcutkey && ( {/* {preferenceshortcutkey && (
<div className="keyboardShortcut"> <div className="keyboardShortcut">
<ShortcutKeyHelper /> <ShortcutKeyHelper />
</div>)} </div>)} */}
</div> </div>
</div> </div>
{/* </div> */} {/* </div> */}

View File

@ -85,6 +85,13 @@ const SalesCountComponent = React.memo(
type?.PreferredSubCatName?.toLowerCase() === 'take away' && type?.PreferredSubCatName?.toLowerCase() === 'take away' &&
type?.PreferredStatus === 'Y' type?.PreferredStatus === 'Y'
); );
const preferenceshortcutkey = preferencedata?.[0]?.[
'SettingDtlDetails'
]?.some(
(item) =>
item.SettingIdName.toLowerCase() === 'shortcutkeys' &&
item.SettingValue === 'Y'
);
const [messageType, setMessageType] = useState(null); const [messageType, setMessageType] = useState(null);
@ -1085,6 +1092,11 @@ const SalesCountComponent = React.memo(
)} )}
</Tooltip> </Tooltip>
</div> </div>
{/* {preferenceshortcutkey && <ShortcutKeyHelper />} */}
{preferenceshortcutkey && (
<div className="keyboardShortcut">
<ShortcutKeyHelper />
</div>)}
<AllSalesPageSettings /> <AllSalesPageSettings />
<ProductPriceChange /> <ProductPriceChange />
<ReceivedStocksModal <ReceivedStocksModal