From 3e5e23ba91ce201059119699344c611d0769fb97 Mon Sep 17 00:00:00 2001 From: Malini Date: Fri, 14 Nov 2025 14:45:56 +0530 Subject: [PATCH] bug fixed --- .../src/components/admin/SubmissionTable.jsx | 41 +++------ .../components/overview/ProductDetails.jsx | 1 - .../EstablishmentInfo/EstablishmentInfo.jsx | 1 - .../survey/ProductData/ProductData.jsx | 1 - .../survey/ReviewSubmit/ReviewSubmit.jsx | 2 +- .../src/pages/Admin/Validations.jsx | 2 +- .../Admin/configuration/CompanyProfile.jsx | 49 +++++----- .../configuration/EditCompanyProfile.jsx | 90 +++++++++---------- .../pages/Admin/configuration/UnitMaster.jsx | 2 - .../pages/LandingPage/component/Banner.jsx | 24 +++-- .../src/pages/Survey/Survey.jsx | 28 ++++-- .../src/services/admin/submission.js | 2 - .../src/services/configuration/unitService.js | 6 -- 13 files changed, 125 insertions(+), 124 deletions(-) diff --git a/ipi-survey-platform/src/components/admin/SubmissionTable.jsx b/ipi-survey-platform/src/components/admin/SubmissionTable.jsx index 8ce769e..3605606 100644 --- a/ipi-survey-platform/src/components/admin/SubmissionTable.jsx +++ b/ipi-survey-platform/src/components/admin/SubmissionTable.jsx @@ -291,16 +291,19 @@ const SubmissionTable = ({ selectedQuarter, selectedYear }) => { minHeight: filtered.length === 0 || loading ? 'auto' : '200px', }} > -

- {titleText} -

-
- {/*
-

- {titleText} -

-
*/} - +
+

+ {titleText} +

+ +
+
{loading ? (
Loading submissions... @@ -310,18 +313,12 @@ const SubmissionTable = ({ selectedQuarter, selectedYear }) => { No Submission Found
) : ( -
+
{ if (columnIndex === 10) { @@ -398,16 +395,6 @@ const SubmissionTable = ({ selectedQuarter, selectedYear }) => { )} -
- -
- {/* Approve Confirmation Modal */} {showApproveModal && selectedSubmission && (
diff --git a/ipi-survey-platform/src/components/overview/ProductDetails.jsx b/ipi-survey-platform/src/components/overview/ProductDetails.jsx index f6cc50d..7024dbb 100644 --- a/ipi-survey-platform/src/components/overview/ProductDetails.jsx +++ b/ipi-survey-platform/src/components/overview/ProductDetails.jsx @@ -40,7 +40,6 @@ const ProductDetails = ({ if (submissionStatus) { const status = String(submissionStatus).toLowerCase(); - console.log("Status",status) const toastConfig = { approved: { type: 'approved', diff --git a/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx b/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx index 81993f1..1fe541b 100644 --- a/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx +++ b/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx @@ -104,7 +104,6 @@ const EstablishmentInfo = ({ // Initialize from location state if available, otherwise use defaults if (location.state?.survey) { const { quarter, year, endDate } = location.state.survey; - console.log('Initializing survey data from location.state:', { quarter, year, endDate }); // Save to localStorage const surveyPeriod = { quarter, year, endDate }; diff --git a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx index adc1637..355d60b 100644 --- a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx +++ b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx @@ -354,7 +354,6 @@ const ProductData = ({ if (savedSurveyPeriod) { const { quarter: savedQuarter, year: savedYear } = JSON.parse(savedSurveyPeriod); - console.log('Using survey period from localStorage:', { savedQuarter, savedYear }); periodYear = savedYear || year; periodQuarter = savedQuarter || quarter; } diff --git a/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx b/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx index cf3a145..b86d32e 100644 --- a/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx +++ b/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx @@ -236,7 +236,7 @@ const buildProductRows = (products = [], options = {}) => { _raw: { ...product } }; - console.log(`Processed product ${index + 1}:`, row); // Debug log + // console.log(`Processed product ${index + 1}:`, row); // Debug log return row; } catch (error) { console.error(`Error processing product at index ${index}:`, error, product); diff --git a/ipi-survey-platform/src/pages/Admin/Validations.jsx b/ipi-survey-platform/src/pages/Admin/Validations.jsx index 9f44ea6..20d8ddf 100644 --- a/ipi-survey-platform/src/pages/Admin/Validations.jsx +++ b/ipi-survey-platform/src/pages/Admin/Validations.jsx @@ -393,7 +393,7 @@ React.useEffect(() => { if (matches) { console.log('Matching item:', item); } else { - console.log('Filtered out item:', item, { matchSearch, matchYear, matchQuarter, matchEmirate, matchStatus }); + ('Filtered out item:', item, { matchSearch, matchYear, matchQuarter, matchEmirate, matchStatus }); } return matches; diff --git a/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx b/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx index e328fea..541325d 100644 --- a/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx +++ b/ipi-survey-platform/src/pages/Admin/configuration/CompanyProfile.jsx @@ -208,6 +208,8 @@ const CompanyProfile = () => { const [isLoadingProducts, setIsLoadingProducts] = React.useState(false); const [isRefreshing, setIsRefreshing] = React.useState(false); const [isUpdating, setIsUpdating] = React.useState(false); + const [formSubmitted, setFormSubmitted] = React.useState(false); + const handleCloseModal = () => { setModalMode(null); @@ -342,10 +344,8 @@ const CompanyProfile = () => { const currentUserId = React.useMemo(() => { try { const profile = sessionStorage.getItem('user_profile'); - console.log("profile678",profile) if (!profile) return null; const parsed = JSON.parse(profile); - console.log('Current user:', parsed); return parsed; } catch (error) { console.error('Error parsing user profile:', error); @@ -1182,31 +1182,38 @@ const loadProducts = async () => { } }; - const handleNextStep = React.useCallback(() => { - if (activeStep === 3 && selectedProducts.length === 0) { - // Show error if on products step and no products are selected + const handleNextStep = React.useCallback(() => { + // Set form as submitted when user tries to proceed + setFormSubmitted(true); + + // Handle product selection validation for step 3 + if (activeStep === 3) { + if (!selectedProducts || selectedProducts.length === 0) { setProductError('Please select at least one product'); showToast('error', 'Please select at least one product'); return; } - - if (!validateStepFields(activeStep)) { + } + + // Rest of your validation logic + if (activeStep === 0 && form.userProfilePassword && form.userProfilePassword !== form.userProfileConfirmPassword) { + setConfirmError('Passwords do not match'); + return; + } + + if (activeStep === 0 && form.userProfilePassword) { + const complexityMessage = validatePasswordComplexity(form.userProfilePassword || ''); + if (complexityMessage) { + setPasswordError(complexityMessage); return; } - if (activeStep === 0 && form.userProfilePassword && form.userProfilePassword !== form.userProfileConfirmPassword) { - setConfirmError('Passwords do not match'); - return; - } - if (activeStep === 0 && form.userProfilePassword) { - const complexityMessage = validatePasswordComplexity(form.userProfilePassword || ''); - if (complexityMessage) { - setPasswordError(complexityMessage); - return; - } - } - setConfirmError(''); - setActiveStep((prev) => Math.min(prev + 1, formSteps.length - 1)); - }, [activeStep, form.userProfilePassword, form.userProfileConfirmPassword, formSteps.length, validateStepFields]); + } + + // If all validations pass, reset form submitted state and proceed + setFormSubmitted(false); + setConfirmError(''); + setActiveStep((prev) => Math.min(prev + 1, formSteps.length - 1)); +}, [activeStep, form.userProfilePassword, form.userProfileConfirmPassword, formSteps.length, validateStepFields, selectedProducts, showToast]); const handleToggleStatus = async (establishmentId, currentStatus) => { try { diff --git a/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx b/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx index 7758e58..8ef3b82 100644 --- a/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx +++ b/ipi-survey-platform/src/pages/Admin/configuration/EditCompanyProfile.jsx @@ -17,9 +17,7 @@ const createEmptyProfile = () => ({ contactName: '', contactAddress: '', contactCityTown: '', - contactCityTownId: '', contactEmirate: '', - contactEmirateId: '', contactMakaniNumber: '', contactPersonName: '', contactMobileNumber: '', @@ -46,9 +44,7 @@ const mapApiEstablishmentToProfile = (apiData) => { contactName: data.factory_name || '', contactAddress: data.establishment_address || '', contactCityTown: data.establishment_city?.name || '', - contactCityTownId: data.establishment_city?.id || '', contactEmirate: data.establishment_emirate?.name || '', - contactEmirateId: data.establishment_emirate?.id || '', contactMakaniNumber: data.establishment_makani_number || '', contactPersonName: data.establishment_contact_person_name || '', contactMobileNumber: data.establishment_mobile_number || '', @@ -128,8 +124,8 @@ const EditCompanyProfile = () => { 2: [ { field: 'contactName', label: 'Name' }, { field: 'contactAddress', label: 'Address' }, - { field: 'contactEmirateId', label: 'Emirate' }, - { field: 'contactCityTownId', label: 'City/Town' }, + { field: 'contactEmirate', label: 'Emirate' }, + { field: 'contactCityTown', label: 'City/Town' }, { field: 'contactEmail', label: 'Email' }, ], 3: [ @@ -177,12 +173,10 @@ const EditCompanyProfile = () => { }, [form, requiredFieldsByStep, selectedProducts]); const handleFormChange = useCallback((field, value) => { - if (field === 'contactCityTownId') { - const foundCity = contactCityOptions.find(option => option.value === value); + if (field === 'contactCityTown') { setForm(prev => ({ ...prev, - contactCityTown: foundCity?.label || '', - contactCityTownId: value + contactCityTown: value })); return; } @@ -197,7 +191,7 @@ const EditCompanyProfile = () => { if (field === 'userProfileConfirmPassword') { setConfirmError(""); } - }, [contactCityOptions]); + }, []); const handleNext = useCallback(() => { if (validateStepFields(activeStep)) { @@ -212,17 +206,24 @@ const EditCompanyProfile = () => { }, [activeStep]); // Load cities based on selected emirate using your service function - const loadCities = useCallback(async (emirateId) => { - if (!emirateId) { + const loadCities = useCallback(async (emirateName) => { + if (!emirateName) { setContactCityOptions([]); return []; } try { setIsLoadingCities(true); - const cities = await fetchCityTowns({ emirateId }); + // Find emirate ID by name first + const selectedEmirate = emirateOptions.find(opt => opt.label === emirateName); + if (!selectedEmirate) { + setContactCityOptions([]); + return []; + } + + const cities = await fetchCityTowns({ emirateId: selectedEmirate.value }); - console.log('Loaded cities for emirate', emirateId, ':', cities); + console.log('Loaded cities for emirate', emirateName, ':', cities); setContactCityOptions(cities); return cities; @@ -233,7 +234,7 @@ const EditCompanyProfile = () => { } finally { setIsLoadingCities(false); } - }, []); + }, [emirateOptions]); // Load products using your service function const loadProducts = useCallback(async () => { @@ -387,12 +388,10 @@ const EditCompanyProfile = () => { initialSnapshotRef.current = formData; // Then load cities and products in parallel - const [cities, allProducts] = await Promise.all([ - formData.contactEmirateId ? loadCities(formData.contactEmirateId) : Promise.resolve([]), + const [allProducts] = await Promise.all([ loadProducts() ]); - console.log('Loaded cities:', cities); console.log('All products loaded:', allProducts); // Set selected products from API response @@ -431,14 +430,14 @@ const EditCompanyProfile = () => { }; }, [establishmentId]); // Remove loadCities and loadProducts from dependencies - // Load contact cities when emirate ID changes + // Load contact cities when emirate changes useEffect(() => { let isMounted = true; const loadCitiesForEmirate = async () => { - if (form.contactEmirateId) { + if (form.contactEmirate) { try { - const cities = await fetchCityTowns({ emirateId: form.contactEmirateId }); + const cities = await loadCities(form.contactEmirate); if (isMounted) { setContactCityOptions(cities); } @@ -451,7 +450,7 @@ const EditCompanyProfile = () => { } else if (isMounted) { setContactCityOptions([]); // Clear city selection when emirate is cleared - handleFormChange('contactCityTownId', ''); + handleFormChange('contactCityTown', ''); } }; @@ -460,7 +459,7 @@ const EditCompanyProfile = () => { return () => { isMounted = false; }; - }, [form.contactEmirateId]); + }, [form.contactEmirate, loadCities]); // Calculate totals when employment numbers change useEffect(() => { @@ -482,6 +481,10 @@ const EditCompanyProfile = () => { try { setLoading(true); + + // Find emirate and city IDs by name for the API call + const selectedEmirate = emirateOptions.find(opt => opt.label === form.contactEmirate); + const selectedCity = contactCityOptions.find(opt => opt.label === form.contactCityTown); const establishmentData = { establishment_code: form.uniqueLicenseNumber || "", @@ -492,8 +495,8 @@ const EditCompanyProfile = () => { isic_code: form.industryCodeCurrent || "", description: form.industryDescription || "", establishment_address: form.contactAddress || "", - establishment_city_town_id: form.contactCityTownId ? Number(form.contactCityTownId) : null, - establishment_emirate_id: form.contactEmirateId ? Number(form.contactEmirateId) : null, + establishment_city_town_id: selectedCity ? Number(selectedCity.value) : null, + establishment_emirate_id: selectedEmirate ? Number(selectedEmirate.value) : null, establishment_postal_code: form.contactPostalCode || "", establishment_po_box: form.contactPoBox || "", establishment_makani_number: form.contactMakaniNumber || "", @@ -670,43 +673,39 @@ const EditCompanyProfile = () => { /> { const selectedValue = e.target.value; - const selectedEmirate = emirateOptions.find(opt => opt.value === selectedValue); - - handleFormChange("contactEmirate", selectedEmirate?.label || ''); - handleFormChange("contactEmirateId", selectedValue); + handleFormChange("contactEmirate", selectedValue); handleFormChange("contactCityTown", ''); - handleFormChange("contactCityTownId", ''); }} options={emirateOptions.map(opt => ({ - value: opt.value, + value: opt.label, label: opt.label }))} placeholder="Select Emirate" width="100%" required - error={fieldErrors.contactEmirateId} + error={fieldErrors.contactEmirate} /> { const selectedValue = e.target.value; - handleFormChange("contactCityTownId", selectedValue); + handleFormChange("contactCityTown", selectedValue); }} options={contactCityOptions.map(opt => ({ - value: opt.value, + value: opt.label, label: opt.label }))} - placeholder={form.contactEmirateId ? (isLoadingCities ? "Loading cities..." : "Select City/Town") : "Select emirate first"} + placeholder={form.contactEmirate ? (isLoadingCities ? "Loading cities..." : "Select City/Town") : "Select emirate first"} width="100%" required - disabled={!form.contactEmirateId || isLoadingCities} - error={fieldErrors.contactCityTownId} + disabled={!form.contactEmirate || isLoadingCities} + error={fieldErrors.contactCityTown} /> { }; return ( -
- - -
+
+ +
{loading && } diff --git a/ipi-survey-platform/src/pages/Admin/configuration/UnitMaster.jsx b/ipi-survey-platform/src/pages/Admin/configuration/UnitMaster.jsx index a481684..f8b890f 100644 --- a/ipi-survey-platform/src/pages/Admin/configuration/UnitMaster.jsx +++ b/ipi-survey-platform/src/pages/Admin/configuration/UnitMaster.jsx @@ -272,8 +272,6 @@ const UnitMaster = () => { unitData.created_by_name = currentUser.name; } - console.log('Saving unit data:', unitData); - try { setSaveLoading(true); diff --git a/ipi-survey-platform/src/pages/LandingPage/component/Banner.jsx b/ipi-survey-platform/src/pages/LandingPage/component/Banner.jsx index a7f959e..ec63d87 100644 --- a/ipi-survey-platform/src/pages/LandingPage/component/Banner.jsx +++ b/ipi-survey-platform/src/pages/LandingPage/component/Banner.jsx @@ -25,12 +25,24 @@ const Banner = () => { {/* Buttons */}
- - + + Sign in to submit + +
); diff --git a/ipi-survey-platform/src/pages/Survey/Survey.jsx b/ipi-survey-platform/src/pages/Survey/Survey.jsx index 9be28ad..f4e6a6b 100644 --- a/ipi-survey-platform/src/pages/Survey/Survey.jsx +++ b/ipi-survey-platform/src/pages/Survey/Survey.jsx @@ -564,7 +564,7 @@ const Survey = () => { // First try to get quarter and year from currentSurveyPeriod in localStorage let quarter = ''; let year = ''; - + const surveyRemarks = localStorage.getItem('surveyRemarks') || ''; // Check for currentSurveyPeriod in localStorage const currentSurveyPeriod = localStorage.getItem('currentSurveyPeriod'); if (currentSurveyPeriod) { @@ -607,12 +607,19 @@ const Survey = () => { non_emirati_female: parseNumber(info.nonEmiratiFemale), total_emirati: parseNumber(info.totalEmirati), total_employees: parseNumber(info.totalEmployees), - remarks: remarks, // Add remarks to the payload + // remarks: surveyRemarks, + // surveyRemarks: surveyRemarks, // Add survey remarks from local storage products: productsData.map((product) => { + const variationId = parseNumber(product.variationReason, null); const zeroTargetId = parseNumber(product.zeroTargetReason, null); const productId = parseNumber(product.id); + // Get remarks from the product object + // Check in this order: product.remarks, product.originalData.remarks, product.originalData['product.remarks'] + const productRemarks = surveyRemarks; + + // Map monthly data to period-specific fields return { ...(isResubmitFlow && productId ? { id: productId } : {}), // Only include ID during resubmit @@ -621,12 +628,15 @@ const Survey = () => { annual_installed_capacity: stringify(product.capacity), // Previous Quarter (Q4) - October, November, December - previous_quantity_period_one: stringify(product.octQuantity || '0'), - previous_quantity_period_two: stringify(product.novQuantity || '0'), - previous_quantity_period_three: stringify(product.decQuantity || '0'), - previous_cost_period_one: stringify(product.octCost || '0'), - previous_cost_period_two: stringify(product.novCost || '0'), - previous_cost_period_three: stringify(product.decCost || '0'), + octQuantity: stringify(product.q4_oct_quantity || ''), + novQuantity: stringify(product.q4_nov_quantity || ''), + decQuantity: stringify(product.q4_dec_quantity || ''), + octCost: stringify(product.q4_oct_cost || ''), + novCost: stringify(product.q4_nov_cost || ''), + decCost: stringify(product.q4_dec_cost || ''), + + // Add remarks to the product payload + remarks: surveyRemarks, // Current Quarter (Q1) - January, February, March current_quantity_period_one: stringify(product.janQuantity || '0'), @@ -681,7 +691,7 @@ const Survey = () => { other_variation_reason: stringify(product.otherVariationReason || ''), zero_target_reason_master_id: Number.isFinite(zeroTargetId) ? zeroTargetId : null, other_zero_target_reason: stringify(product.otherZeroTargetReason || ''), - remarks: stringify(product.remarks || '') + remarks: stringify(surveyRemarks) }; }), }; diff --git a/ipi-survey-platform/src/services/admin/submission.js b/ipi-survey-platform/src/services/admin/submission.js index 166f8dc..15a8e54 100644 --- a/ipi-survey-platform/src/services/admin/submission.js +++ b/ipi-survey-platform/src/services/admin/submission.js @@ -20,8 +20,6 @@ export const getSubmissions = async (params = {}) => { ...restParams } = params; - console.log('getSubmissions called with params:', { quarter, year, page, limit, ...restParams }); - // Build query string const queryParams = new URLSearchParams(); diff --git a/ipi-survey-platform/src/services/configuration/unitService.js b/ipi-survey-platform/src/services/configuration/unitService.js index 65105f3..793e5c6 100644 --- a/ipi-survey-platform/src/services/configuration/unitService.js +++ b/ipi-survey-platform/src/services/configuration/unitService.js @@ -15,11 +15,8 @@ export const getUnits = async () => { export const createUnit = async (unitData) => { try { - // Log the data being sent for debugging - console.log('Creating unit with data:', unitData); const response = await postRequest(UNIT_MASTER_ENDPOINT, unitData); - console.log('Unit created successfully:', response.data); return response.data; } catch (error) { console.error('Error creating unit:', error); @@ -34,10 +31,7 @@ export const createUnit = async (unitData) => { export const updateUnit = async (id, unitData) => { try { - console.log('Updating unit with data:', unitData); - const response = await putRequest(`${UNIT_MASTER_ENDPOINT}/${id}`, unitData); - console.log('Unit updated successfully:', response.data); return response.data; } catch (error) { console.error('Error updating unit:', error);