From 7a6a888e341ff33ba4bc137ec4a58cbf13b43b0e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 25 Feb 2026 18:34:35 +0530 Subject: [PATCH] fixed bugs --- src/Components/Forms/CropUpload.jsx | 4 ++- src/Components/Forms/Upload.jsx | 5 ++- .../ComboEditQtyAndRate.jsx | 2 -- .../ThermalPrinter/PrintStyle1.jsx | 22 ++++++++----- src/Pages/EmpMaster/EmpMasterForm.jsx | 2 -- .../PaymentDetails/PaymentDetailsForm.jsx | 2 +- .../PaymentDetails/PaymentDetailsList.jsx | 2 +- src/Pages/Preference/PreferenceList.jsx | 32 ++++++++++++++----- src/utils/useHasCamera.js | 19 +++++++++++ 9 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 src/utils/useHasCamera.js diff --git a/src/Components/Forms/CropUpload.jsx b/src/Components/Forms/CropUpload.jsx index 9d65183..8f7df16 100644 --- a/src/Components/Forms/CropUpload.jsx +++ b/src/Components/Forms/CropUpload.jsx @@ -11,6 +11,7 @@ import '../../Styles/Product/Product.scss'; import { Messages } from '../Notifications/Messages.jsx'; import { isMobile } from 'react-device-detect'; import Camera from '../MobileComponent/Camera.jsx'; +import useHasCamera from '../../utils/useHasCamera.js'; const allowedTypes = [ 'image/jpeg', 'image/png', @@ -27,6 +28,7 @@ const CropUpload = ({ handleClose = () => { } }) => { const dispatch = useDispatch(); + const hasCamera = useHasCamera(); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [fileList, setFileList] = useState([]); @@ -407,7 +409,7 @@ const CropUpload = ({ Preview - {isMobile && fileList?.length == 0 && <> + {isMobile && fileList?.length == 0 && hasCamera && <>
OR
{ diff --git a/src/Components/Forms/Upload.jsx b/src/Components/Forms/Upload.jsx index 6d2dea6..29b1abb 100644 --- a/src/Components/Forms/Upload.jsx +++ b/src/Components/Forms/Upload.jsx @@ -5,6 +5,8 @@ import { PlusOutlined } from '@ant-design/icons'; import { uploadImage } from '../../Features/upload/upload'; import Camera from '../MobileComponent/Camera'; import { isMobile } from 'react-device-detect'; +import useHasCamera from '../../utils/useHasCamera'; + const allowedTypes = [ 'image/jpeg', 'image/png', @@ -27,6 +29,7 @@ const App = ({ singleImage, updateImageUrl, ImageLink = '', listType }) => { const [previewImage, setPreviewImage] = useState(''); const [previewTitle, setPreviewTitle] = useState(''); const [fileList, setFileList] = useState([]); + const hasCamera = useHasCamera(); console.log(fileList, "fileList") useEffect(() => { @@ -141,7 +144,7 @@ const App = ({ singleImage, updateImageUrl, ImageLink = '', listType }) => { src={previewImage} /> - {isMobile && fileList?.length == 0 && <> + {isMobile && fileList?.length == 0 && hasCamera && <>
OR
{ diff --git a/src/Pages/BookingScreen/Components/BSBillingTables/ComboBillTableEdit/ComboEditQtyAndRate.jsx b/src/Pages/BookingScreen/Components/BSBillingTables/ComboBillTableEdit/ComboEditQtyAndRate.jsx index 6ce1ca8..523c199 100644 --- a/src/Pages/BookingScreen/Components/BSBillingTables/ComboBillTableEdit/ComboEditQtyAndRate.jsx +++ b/src/Pages/BookingScreen/Components/BSBillingTables/ComboBillTableEdit/ComboEditQtyAndRate.jsx @@ -268,8 +268,6 @@ const ComboEditQtyAndRate = (props) => { } const AddProductQuantity = async () => { - // debugger - let newPrice = editedPrice > 0 ? editedPrice : props.Productdata.OrderRate; await dispatch(changeHoldOrderDtl(false)); diff --git a/src/Pages/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.jsx b/src/Pages/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.jsx index 36b226a..929fed2 100644 --- a/src/Pages/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.jsx +++ b/src/Pages/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.jsx @@ -123,6 +123,12 @@ const PrintStyle1 = ({ setting?.SettingIdName?.toLowerCase() === 'estimateprintheader' )?.SettingValue === 'Y'; + const estimateTitle = + SettingData?.[0]?.SettingDtlDetails?.find( + (setting) => + setting?.SettingIdName?.toLowerCase() === 'estimatetitle' + )?.SettingValue === 'Y'; + const keysLength = Object.keys(table2Data ?? {}).length; const paymentTypeUPI = PaymentStatus?.find( (ps) => ps.PaymentTypeName === 'UPI' @@ -479,7 +485,7 @@ const PrintStyle1 = ({ Mobile : +91{' '} {GlobaldummyData ? '986XXXXXXX' : table2Data?.BrMobile} } - {table2Data?.OrderType === 'E' && ( + {table2Data?.OrderType === 'E' && estimateTitle && (
)} - {!estimatePrintHeader && table2Data?.OrderType === 'E' && ( + {!estimatePrintHeader && table2Data?.OrderType === 'E' && estimateTitle && (
{lastTransaction?.AdjustmentType === 'REFUND' ? '-' : '+'} {Math.abs((lastTransaction?.BeforeAdjustment ?? 0) - - (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)} + (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)}
@@ -2131,7 +2137,7 @@ const PrintStyle1 = ({ {lastTransaction?.AdjustmentType === 'REFUND' ? '-' : '+'} {Math.abs((lastTransaction?.BeforeAdjustment ?? 0) - - (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)} + (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)}
@@ -2960,7 +2966,7 @@ const PrintStyle1 = ({ {lastTransaction?.AdjustmentType === 'REFUND' ? '-' : '+'} {Math.abs((lastTransaction?.BeforeAdjustment ?? 0) - - (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)} + (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)}
@@ -3727,7 +3733,7 @@ const PrintStyle1 = ({ Mobile : +91{' '} {GlobaldummyData ? '986XXXXXXX' : table2Data?.BrMobile}
} - {table2Data?.OrderType === 'E' && ( + {table2Data?.OrderType === 'E' && estimateTitle && (
)} - {!estimatePrintHeader && table2Data?.OrderType === 'E' && ( + {!estimatePrintHeader && table2Data?.OrderType === 'E' && estimateTitle && (
{lastTransaction?.AdjustmentType === 'REFUND' ? '-' : '+'} {Math.abs((lastTransaction?.BeforeAdjustment ?? 0) - - (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)} + (lastTransaction?.AfterAdjustment ?? 0)).toFixed(2)}
diff --git a/src/Pages/EmpMaster/EmpMasterForm.jsx b/src/Pages/EmpMaster/EmpMasterForm.jsx index 2ef020c..7005c09 100644 --- a/src/Pages/EmpMaster/EmpMasterForm.jsx +++ b/src/Pages/EmpMaster/EmpMasterForm.jsx @@ -33,8 +33,6 @@ import { getCommonAppPreference } from '../../Features/BrachLogin/BranchLogin.js import { AiOutlineDownCircle, AiOutlineUpCircle } from 'react-icons/ai'; // import TextArea from 'antd/es/input/TextArea.js'; import CropUpload from '../../Components/Forms/CropUpload.jsx'; -import { isMobile } from 'react-device-detect'; -import Camera from '../../Components/MobileComponent/Camera.jsx'; const { Panel } = Collapse; const { TextArea } = Input; const subDirectory = import.meta.env.BASE_URL; diff --git a/src/Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx b/src/Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx index b12a4a7..4fafdba 100644 --- a/src/Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx +++ b/src/Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx @@ -96,7 +96,7 @@ const PaymentDetails = ({ formType }) => { }, { - name: 'PaymentDetails', + name: 'Payment Details', link: `${subDirectory}setting/payment-details`, }, { diff --git a/src/Pages/Payment/PaymentDetails/PaymentDetailsList.jsx b/src/Pages/Payment/PaymentDetails/PaymentDetailsList.jsx index 1135c62..ba1ed67 100644 --- a/src/Pages/Payment/PaymentDetails/PaymentDetailsList.jsx +++ b/src/Pages/Payment/PaymentDetails/PaymentDetailsList.jsx @@ -81,7 +81,7 @@ const PaymentDetailsList = () => { }, { - name: 'PaymentDetails', + name: 'Payment Details', link: `${subDirectory}setting/payment-details`, }, ]; diff --git a/src/Pages/Preference/PreferenceList.jsx b/src/Pages/Preference/PreferenceList.jsx index 7c039d0..4cbbe51 100644 --- a/src/Pages/Preference/PreferenceList.jsx +++ b/src/Pages/Preference/PreferenceList.jsx @@ -102,7 +102,10 @@ const PreferenceList = () => { (k) => allSettingsMap[k]?.value === 'Y' ), mobilea4: allSettingsMap['mobilea4']?.value === 'Y', - estimateprintheader: allSettingsMap['estimateprintheader']?.value === 'Y', + estimateSettings: [ + ...(allSettingsMap['estimateprintheader']?.value === 'Y' ? ['estimateprintheader'] : []), + ...(allSettingsMap['estimatetitle']?.value === 'Y' ? ['estimatetitle'] : []), + ], scanlayout: allSettingsMap['scanlayout']?.value === 'Y', verifyproduct: allSettingsMap['verifyproduct']?.value === 'Y', customisedbillnumber: allSettingsMap['customisedbillnumber']?.value === 'Y', @@ -304,7 +307,6 @@ const PreferenceList = () => { tokenonly: values.tokenonly, allproductindividualtoken: values.allproductindividualtoken, mobilea4: values.mobilea4, - estimateprintheader: values.estimateprintheader, scanlayout: values.scanlayout, verifyproduct: values.verifyproduct, customisedbillnumber: values.customisedbillnumber, @@ -321,6 +323,8 @@ const PreferenceList = () => { dinein: values.enabledModules, estimation: values.enabledModules, parking: values.enabledFeatures, + estimateprintheader: values.estimateSettings, + estimatetitle: values.estimateSettings, offer: values.enabledFeatures, whatsapp: values.pdfSendOptions, sms: values.pdfSendOptions, @@ -653,8 +657,8 @@ const PreferenceList = () => { - { 'mobilea4', 'Prefer printing in A4/A5 on mobile?' )} - {renderCheckbox( - 'estimateprintheader', - 'Do you want to include a header when printing Estimate bills?' - )} + {(allSettingsMap['estimateprintheader'] !== undefined || + allSettingsMap['estimatetitle'] !== undefined) && ( + + + {allSettingsMap['estimateprintheader'] !== undefined && ( + Show shop header (Name, Address, GST) + )} + {allSettingsMap['estimatetitle'] !== undefined && ( + Show “Estimate (R/W)” title + )} + + + )}
{ + async function detectCamera() { + try { + const devices = await navigator.mediaDevices.enumerateDevices(); + setHasCamera(devices.some(d => d.kind === "videoinput")); + } catch { + setHasCamera(false); + } + } + detectCamera(); + }, []); + + return hasCamera; +} \ No newline at end of file