From 10df4cb741e349a133dd003f3199d29f4dfb8202 Mon Sep 17 00:00:00 2001 From: naveen prabhu Date: Wed, 10 Jun 2026 16:50:12 +0530 Subject: [PATCH] filter fixed --- .../ManufacturingIndex/ManufacturingIndex.jsx | 136 ++++++++++++++++-- .../manufacturingIndex/ManufacturingIndex.js | 16 +++ 2 files changed, 139 insertions(+), 13 deletions(-) diff --git a/ipi-survey-platform/src/pages/ManufacturingIndex/ManufacturingIndex.jsx b/ipi-survey-platform/src/pages/ManufacturingIndex/ManufacturingIndex.jsx index bac3f2b..e499e43 100644 --- a/ipi-survey-platform/src/pages/ManufacturingIndex/ManufacturingIndex.jsx +++ b/ipi-survey-platform/src/pages/ManufacturingIndex/ManufacturingIndex.jsx @@ -19,7 +19,7 @@ import { Breadcrumbs } from '@mui/material'; import { Link } from 'react-router-dom'; import Card from '@/components/common/Card'; import triggerIcon from '@/assets/trigger.png'; -import { getManufacturingIndex, getManufacturingMonthlyOverview, autoSubmitSurvey } from '@/services/manufacturingIndex/ManufacturingIndex'; +import { getManufacturingIndex, getManufacturingMonthlyOverview, autoSubmitSurvey, getManufacturingIndexFiltered } from '@/services/manufacturingIndex/ManufacturingIndex'; // Import popup components import ManufacturingTotal from './ManufacturingIndexPopup/ManufacturingTotal'; @@ -58,7 +58,7 @@ const ManufacturingIndex = () => { const [monthlyOverviewData, setMonthlyOverviewData] = useState(null); const [isPopupOpen, setIsPopupOpen] = useState(false); const [apiLoading, setApiLoading] = useState(false); - const [quarter, setQuarter] = useState('Q2'); + const [quarter, setQuarter] = useState(''); const [surveySubmitLoading, setSurveySubmitLoading] = useState(false); const [surveySubmitStatus, setSurveySubmitStatus] = useState(''); const [surveySubmitError, setSurveySubmitError] = useState(null); @@ -67,7 +67,7 @@ const ManufacturingIndex = () => { const [pagination, setPagination] = useState({ currentPage: 1, - pageSize: 20, + pageSize: 10, totalItems: 0 }); @@ -155,7 +155,15 @@ const ManufacturingIndex = () => { const monthName = dateObj.toLocaleString('en-US', { month: 'short' }); year = item.year || dateObj.getFullYear() || 2025; monthNumber = item.month || (dateObj.getMonth() + 1) || 1; - + // Normalize quarter value to form 'Q1'..'Q4' + let quarterVal = item.quarter || item.quarter_name || item.quarterName || '-'; + if (quarterVal !== '-' && quarterVal !== null && quarterVal !== undefined) { + quarterVal = String(quarterVal).trim(); + // If it's numeric like '2' or 2 -> convert to 'Q2' + if (/^\d+$/.test(quarterVal)) quarterVal = `Q${quarterVal}`; + quarterVal = quarterVal.toUpperCase(); + } + return { id: item.id || `${year}-${monthNumber}` || `item-${index}`, month: `${monthName} ${year}`, @@ -183,7 +191,7 @@ const ManufacturingIndex = () => { timeZone: 'Asia/Dubai', timeZoneName: 'short' }) : '-', - quarter: item.quarter || item.quarter_name || '-', + quarter: quarterVal || '-', totalWeight: item.total_weight || '-', status: item.status || 'Completed', rawData: item @@ -191,7 +199,7 @@ const ManufacturingIndex = () => { }); setAllMonths(formattedData); - applyFilters(year, searchMonth, formattedData); + applyFilters(year, searchMonth, formattedData, quarter); setPagination(prev => ({ ...prev, totalItems: formattedData.length @@ -293,14 +301,15 @@ const ManufacturingIndex = () => { setMonthlyOverviewData(null); }; - // Apply both year and search filters - const applyFilters = (selectedYear, searchTerm, monthsData = allMonths) => { + // Apply year, quarter and search filters + const applyFilters = (selectedYear, searchTerm, monthsData = allMonths, selectedQuarter = quarter) => { const filtered = monthsData.filter(month => { const matchesYear = selectedYear === 'All' || month.year.toString() === selectedYear; const matchesSearch = searchTerm === '' || month.month.toLowerCase().includes(searchTerm.toLowerCase()); - return matchesYear && matchesSearch; + const matchesQuarter = !selectedQuarter || selectedQuarter === 'All' || selectedQuarter === '-' ? true : (month.quarter || '').toUpperCase() === String(selectedQuarter).toUpperCase(); + return matchesYear && matchesSearch && matchesQuarter; }); - + setFilteredMonths(filtered); setPagination(prev => ({ ...prev, @@ -312,7 +321,6 @@ const ManufacturingIndex = () => { const handleYearChange = (e) => { const selectedYear = e.target.value; setYear(selectedYear); - applyFilters(selectedYear, searchMonth); }; const handleSearchMonth = (e) => { @@ -339,12 +347,114 @@ const ManufacturingIndex = () => { setSurveySubmitLoading(true); try { + // Trigger backend calculate/auto-submit const response = await autoSubmitSurvey(parseInt(year, 10), quarter); setSurveySubmitStatus( response?.data?.message || 'Survey auto-submit request sent successfully.' ); - setRefreshKey(prev => prev + 1); + + // After auto-submit, fetch the filtered manufacturing index for selected year/quarter + try { + const filteredResp = await getManufacturingIndexFiltered(parseInt(year, 10), quarter); + + // Extract array similar to initial fetch + let dataArray = []; + if (Array.isArray(filteredResp)) { + dataArray = filteredResp; + } else if (filteredResp && filteredResp.data && Array.isArray(filteredResp.data)) { + dataArray = filteredResp.data; + } else if (filteredResp && filteredResp.data && typeof filteredResp.data === 'object') { + if (Array.isArray(filteredResp.data.manufacturingIndex) || Array.isArray(filteredResp.data.data)) { + dataArray = filteredResp.data.manufacturingIndex || filteredResp.data.data || []; + } else { + dataArray = Object.values(filteredResp.data); + } + } else { + const findArray = (obj) => { + if (Array.isArray(obj)) return obj; + if (typeof obj === 'object' && obj !== null) { + for (const key in obj) { + if (Array.isArray(obj[key])) return obj[key]; + } + } + return []; + }; + dataArray = findArray(filteredResp); + } + + const formattedData = dataArray.map((item, index) => { + let dateObj = new Date(); + let yearVal = 2025; + let monthNumber = 1; + + if (item.reference_date) { + dateObj = new Date(item.reference_date); + } else if (item.date) { + dateObj = new Date(item.date); + } else if (item.referenceDate) { + dateObj = new Date(item.referenceDate); + } else if (item.year && item.month) { + yearVal = item.year; + monthNumber = item.month; + dateObj = new Date(yearVal, monthNumber - 1, 1); + } + + const monthName = dateObj.toLocaleString('en-US', { month: 'short' }); + yearVal = item.year || dateObj.getFullYear() || 2025; + monthNumber = item.month || (dateObj.getMonth() + 1) || 1; + // Normalize quarter value to form 'Q1'..'Q4' + let quarterVal = item.quarter || item.quarter_name || item.quarterName || '-'; + if (quarterVal !== '-' && quarterVal !== null && quarterVal !== undefined) { + quarterVal = String(quarterVal).trim(); + if (/^\d+$/.test(quarterVal)) quarterVal = `Q${quarterVal}`; + quarterVal = quarterVal.toUpperCase(); + } + + return { + id: item.id || `${yearVal}-${monthNumber}` || `item-${index}`, + month: `${monthName} ${yearVal}`, + monthName: monthName, + year: yearVal, + monthNumber: monthNumber, + index: item.manufacturing_index?.toString() || item.index?.toString() || item.manufacturingIndex?.toString() || '-', + mom: item.mom_change || item.mom || item.momChange ? + (parseFloat(item.mom_change || item.mom || item.momChange) > 0 ? + `+${item.mom_change || item.mom || item.momChange}` : + (item.mom_change || item.mom || item.momChange).toString()) : + '-', + yoy: item.yoy_change || item.yoy || item.yoyChange ? + (parseFloat(item.yoy_change || item.yoy || item.yoyChange) > 0 ? + `+${item.yoy_change || item.yoy || item.yoyChange}` : + (item.yoy_change || item.yoy || item.yoyChange).toString()) : + '-', + generated: item.generated_on || item.generatedOn || item.generated_at ? + new Date(item.generated_on || item.generatedOn || item.generated_at).toLocaleString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + hour: '2-digit', + minute: '2-digit', + timeZone: 'Asia/Dubai', + timeZoneName: 'short' + }) : '-', + quarter: quarterVal || '-', + totalWeight: item.total_weight || '-', + status: item.status || 'Completed', + rawData: item + }; + }); + + setAllMonths(formattedData); + applyFilters(year, searchMonth, formattedData, quarter); + setPagination(prev => ({ + ...prev, + totalItems: formattedData.length, + currentPage: 1 + })); + } catch (fetchErr) { + console.error('Error fetching filtered manufacturing index after trigger:', fetchErr); + } } catch (error) { setSurveySubmitError( error?.response?.data?.message || error.message || 'Survey auto-submit failed.' @@ -635,7 +745,7 @@ const ManufacturingIndex = () => { onClick={handleTriggerData} > Trigger - Trigger Data + Calculate