diff --git a/ipi-survey-platform/src/components/dashboard/SubmissionHistory.jsx b/ipi-survey-platform/src/components/dashboard/SubmissionHistory.jsx
index 4199104..f290daf 100644
--- a/ipi-survey-platform/src/components/dashboard/SubmissionHistory.jsx
+++ b/ipi-survey-platform/src/components/dashboard/SubmissionHistory.jsx
@@ -6,10 +6,7 @@ import HeaderBar from '@/components/layout/HeaderBar';
import DetailedOverview from '@/components/overview/DetailedOverview';
const searchIconSrc = '/assets/images/material-symbols_search-rounded.svg';
-const pencilIconSrc = '/assets/images/PencilSimple.svg';
-import { fetchSubmissionDetail } from '@/services/submissions/submissionService';
-const trashActiveSrc = '/assets/images/Trash - active.svg';
-const trashInactiveSrc = '/assets/images/Trash - Inactive.svg';
+
const formatDateTime = (value) => {
if (!value) return '—';
const date = new Date(value);
@@ -141,45 +138,13 @@ export const SubmissionHistory = ({ history = [], loading = false, error = '' })
const [searchTerm, setSearchTerm] = React.useState('');
const [selectedSubmission, setSelectedSubmission] = React.useState(null);
const [currentPage, setCurrentPage] = React.useState(1);
- const [hoveredDelete, setHoveredDelete] = React.useState(null);
-
const pageSize = 10;
const navigate = useNavigate();
-
-
const handleViewDetails = (submission) => {
navigate('/overview', { state: { selectedSubmission: submission } });
};
- const handleEdit = async (submission) => {
- if (submission.status.toLowerCase() === 'draft') {
- try {
- const submissionData = await fetchSubmissionDetail(submission.id);
- navigate('/survey', {
- state: {
- submission: submissionData,
- isEdit: true,
- fromDraft: true
- }
- });
- } catch (error) {
- console.error('Error fetching submission details:', error);
- // Optionally show an error message to the user
- }
- }
-};
-
-const handleDeleteDraft = async (e, submission) => {
- e.preventDefault();
- e.stopPropagation();
- try {
-
- } catch (error) {
- console.error('Error deleting submission:', error);
- }
- };
-
const normalizedHistory = React.useMemo(() => {
if (!Array.isArray(history)) return [];
return history.map((entry, index) => {
@@ -221,7 +186,6 @@ const handleDeleteDraft = async (e, submission) => {
const tableRows = filtered.map((item) => {
const productsLabel = `${item.products}`;
- const isDraft = item.status.toLowerCase() === 'draft';
return [
item.survey_name,
item.year,
@@ -229,47 +193,12 @@ const handleDeleteDraft = async (e, submission) => {
getStatusBadge(item.status),
{item.submission_on},
productsLabel,
-
- {isDraft ? (
- <>
-
-
- >
- ) : (
-
- )}
-
-
+ ,
];
});
diff --git a/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx b/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx
index 820c9c9..a87b52b 100644
--- a/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx
+++ b/ipi-survey-platform/src/components/survey/EstablishmentInfo/EstablishmentInfo.jsx
@@ -175,65 +175,6 @@ const EstablishmentInfo = ({
localStorage.setItem('surveyRemarks', remarksresubmit)
const [surveyData, setSurveyData] = React.useState(() => {
- // For draft submission, use the data from the submission
-
- if (location.state?.fromDraft && location.state?.submission) {
- const submission = location.state.submission;
- // Extract data from submission
- const submissionData = submission.data || {};
- const quarter = submissionData.quarter || '';
- const year = submissionData.year || '';
- const endDate = submission.quarter_window?.end_date || '';
-
- // Extract establishment info
- const establishmentData = submissionData.establishment || {};
-
- // Extract employee data from establishment object
- const employeeData = establishmentData.employee_info || establishmentData || {};
-
- // Update the parent component with the submission data
- onChange({
- ...data,
- ...submissionData,
- establishmentId: establishmentData.id,
- establishmentName: establishmentData.factory_name,
- permanentFactoryCode: establishmentData.permanent_factory_code,
-
- industryCode: establishmentData.industry_code,
- licenseNumber: establishmentData.license_number,
- isicCode: establishmentData.isic_code,
- emirate: establishmentData.establishment_emirate_id,
- establishment_contact_email: establishmentData.establishment_contact_email,
- employeeInfo: {
- ...defaultEmployeeInfo,
- emiratiMale: employeeData.emirati_male || '',
- nonEmiratiMale: employeeData.non_emirati_male || '',
- emiratiFemale: employeeData.emirati_female || '',
- nonEmiratiFemale: employeeData.non_emirati_female || '',
- totalEmployees: employeeData.total_employees || '',
- totalEmirati: employeeData.total_emirati || ''
- },
- quarter,
- year,
- end_date: endDate
- });
-
- const surveyPeriod = {
- quarter,
- year,
- endDate
- };
-
- localStorage.setItem('currentSurveyPeriod', JSON.stringify(surveyPeriod));
- localStorage.setItem('currentQuarter', quarter);
- localStorage.setItem('currentYear', year);
-
- // Store the full submission data for reference
- localStorage.setItem('currentSubmission', JSON.stringify(submissionData));
-
- return surveyPeriod;
- }
-
// For resubmission, use the quarter/year from the submission data
if (location.state?.fromResubmit && data?.quarter && data?.year) {
const surveyPeriod = {
@@ -242,7 +183,7 @@ const EstablishmentInfo = ({
endDate: data.end_date || ''
};
localStorage.setItem('currentSurveyPeriod', JSON.stringify(surveyPeriod));
- localStorage.setItem('currentQuarter', data.quarter);
+ localStorage.setItem('currentQuarter', data.quarter); // Store quarter separately
localStorage.setItem('currentYear', data.year);
return surveyPeriod;
}
diff --git a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
index c0f5315..cc4361b 100644
--- a/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
+++ b/ipi-survey-platform/src/components/survey/ProductData/ProductData.jsx
@@ -1,8 +1,6 @@
import React, { useState, useEffect } from 'react';
-import { toast, ToastContainer } from 'react-toastify';
-import 'react-toastify/dist/ReactToastify.css';
// import { useLocation } from 'react-router-dom';
-import { getQuarterPeriods, getPreviousForecastData, getEstablishmentProducts , submitSurvey,resubmitSurvey} from '@/services/submissions/submissionService';
+import { getQuarterPeriods, getPreviousForecastData, getEstablishmentProducts } from '@/services/submissions/submissionService';
import {
fetchVariationReasons,
fetchZeroTargetReasons,
@@ -304,17 +302,6 @@ const Select = ({
)}
-
);
};
@@ -391,10 +378,6 @@ const ProductData = ({
const [unitOptions, setUnitOptions] = React.useState([]);
const [isLoadingUnits, setIsLoadingUnits] = React.useState(false);
const [unitsError, setUnitsError] = React.useState(null);
- const [isSavingDraft, setIsSavingDraft] = React.useState(false);
-
-
- const location = useLocation(); // Add this line
// Debug: Log products data when it changes
useEffect(() => {
@@ -471,256 +454,6 @@ const ProductData = ({
fetchQuarterPeriods();
}, [quarter, year]);
-const handleSaveDraft = async () => {
- try {
- setIsSavingDraft(true);
-
- // Get current submission from localStorage
- const currentSubmissionStr = localStorage.getItem('currentSubmission');
- if (!currentSubmissionStr) {
- throw new Error('Current submission data not found');
- }
- const currentSubmission = JSON.parse(currentSubmissionStr);
- const currentQuarter = localStorage.getItem('currentQuarter');
- const currentYear = localStorage.getItem('currentYear')
- // Get establishment ID from current submission
- const submissionId = currentSubmission.id; // Changed this line to get ID from currentSubmission
-
- const establishmentId = currentSubmission.establishment_id;
- if (!establishmentId) {
- throw new Error('Establishment ID not found in submission');
- }
-
- // Get user profile from localStorage
- const userProfileStr = localStorage.getItem('user_profile');
- if (!userProfileStr) {
- throw new Error('User profile not found');
- }
- const userProfile = JSON.parse(userProfileStr);
- const createdById = userProfile?.id;
- if (!createdById) {
- throw new Error('User ID not found in profile');
- }
-
- // Get quarter and year from current submission
- const effectiveQuarter = currentQuarter;
- const effectiveYear = currentYear;
- if (!effectiveQuarter || !effectiveYear) {
- throw new Error('Quarter and year are required in submission');
- }
-
- // Get establishment data
- const establishment = currentSubmission.establishment;
- if (!establishment) {
- throw new Error('Establishment data not found in submission');
- }
-
- // Prepare products data in the required format
- const formattedProducts = products.map(product => {
- // Get the selected product option to access product_id
- const selectedProduct = productOptions.find(p => p.value === product.product);
- const existingProduct = currentSubmission.products?.find(p =>
- p.product_id === product.product_id ||
- p.product?.id === product.product_id
- );
- return {
- id: existingProduct?.id || 0,
- product_id: selectedProduct?.product_id || product.product_id || null,
- unit_id: product.unit?.toString() || '', // Ensure unit_id is a string
- annual_installed_capacity: product.capacity || '0',
- previous_quantity_period_one: product.octQuantity || '0',
- previous_quantity_period_two: product.novQuantity || '0',
- previous_quantity_period_three: product.decQuantity || '0',
- previous_cost_period_one: product.octCost || '0',
- previous_cost_period_two: product.novCost || '0',
- previous_cost_period_three: product.decCost || '0',
- current_quantity_period_one: product.janQuantity || '0',
- current_quantity_period_two: product.febQuantity || '0',
- current_quantity_period_three: product.marQuantity || '0',
- current_cost_period_one: product.janCost || '0',
- current_cost_period_two: product.febCost || '0',
- current_cost_period_three: product.marCost || '0',
- forecast_quantity_period_one: product.aprQuantity || '0',
- forecast_quantity_period_two: product.mayQuantity || '0',
- forecast_quantity_period_three: product.junQuantity || '0',
- forecast_cost_period_one: product.aprCost || '0',
- forecast_cost_period_two: product.mayCost || '0',
- forecast_cost_period_three: product.junCost || '0',
- // Previous quarter (Q4) - October
- previous_quantity: product.octQuantity || '0',
- previous_cost: product.octCost || '0',
- // Current quarter (Q1) - Using November as current (as per previous implementation)
- // If you want to use a different field for current, replace novQuantity/novCost with the appropriate field
- current_quantity: product.novQuantity || '0',
- current_cost: product.novCost || '0',
- // Next quarter forecast (Q2) - December
- forecast_quantity: product.decQuantity || '0',
- forecast_cost: product.decCost || '0',
- variation_reason_master_id: product.variationReason || '',
- other_variation_reason: product.otherVariationReason || '',
- zero_target_reason_master_id: product.zeroTargetReason || '',
- other_zero_target_reason: product.otherZeroTargetReason || '',
- remarks: product.remarks || remarks || '' // Use product.remarks if available, otherwise use the component's remarks state
- };
- });
-
- // Prepare the complete payload with values from currentSubmission
- const payload = {
- establishment_id: establishmentId,
- quarter: effectiveQuarter,
- year: effectiveYear,
- emirati_male: establishment.emirati_male || 0,
- emirati_female: establishment.emirati_female || 0,
- non_emirati_male: establishment.non_emirati_male || 0,
- non_emirati_female: establishment.non_emirati_female || 0,
- total_emirati: establishment.total_emirati || 0,
- total_employees: establishment.total_employees || 0,
- status: "Draft",
- created_by: createdById,
- products: formattedProducts
- };
-
- // Example: const response = await api.saveDraft(payload);
- let response;
- if (submissionId) {
- // Update existing submission
- response = await resubmitSurvey(submissionId, payload);
- toast.success('Draft updated successfully', {
- position: "top-right",
- autoClose: 3000,
- hideProgressBar: false,
- closeOnClick: true,
- pauseOnHover: true,
- draggable: true
- });
- } else {
- // Create new submission
- response = await submitSurvey(payload);
-
- // Update local storage with the new submission ID if this was a create operation
- if (response && response.id) {
- const updatedSubmission = { ...currentSubmission, id: response.id };
- localStorage.setItem('currentSubmission', JSON.stringify(updatedSubmission));
- }
-
- toast.success('Draft saved successfully', {
- position: "top-right",
- autoClose: 3000,
- hideProgressBar: false,
- closeOnClick: true,
- pauseOnHover: true,
- draggable: true
- });
- }
-
- } catch (error) {
- console.error('Error saving draft:', error);
- toast.error(error.message || 'Failed to save draft');
- } finally {
- setIsSavingDraft(false);
- }
-};
-
-
-// Add this useEffect hook after the existing hooks
-useEffect(() => {
- const loadDraftData = () => {
- try {
- const isEditMode = location.state?.isEdit || false;
-
- // Clear existing data if not in edit mode
- if (!isEditMode) {
- onProductsChange([{ id: Date.now() }]);
- return;
- }
-
- const currentSubmissionStr = localStorage.getItem('currentSubmission');
- if (!currentSubmissionStr) return;
-
- const currentSubmission = JSON.parse(currentSubmissionStr);
-
- if (currentSubmission.status === 'Draft' && currentSubmission.products && currentSubmission.products.length > 0) {
- const formattedProducts = currentSubmission.products.map(product => {
- // Get product name and HS code from the nested product object
- const productName = product.product?.product_name || '';
- const hsCode = product.product?.hs_code || '';
- const displayName = productName ? `${hsCode} - ${productName}` : '';
- return {
- id: product.id,
- product_id: product.product_id,
- product: product.product_id?.toString() || '', // This should be the ID as string
- productId: product.product_id?.toString() || '', // Also include as productId
- name: displayName, // This will be used in displayValue
- product_name: product.product?.product_name || '', // Raw name if needed
- hs_code: hsCode, // Include HS code separately
- productName: productName, // Include product name separately
- product_value: product.product_id?.toString() || '',
- unit: product.unit_id ? product.unit_id.toString() : '',
- unit_name: product.unit?.uom || '', // Add unit name for display
- capacity: product.annual_installed_capacity || '0',
-
- // Previous quarter (Q4) - October, November, December
- octQuantity: product.previous_quantity_period_one || '0',
- octCost: product.previous_cost_period_one || '0',
- novQuantity: product.previous_quantity_period_two || '0',
- novCost: product.previous_cost_period_two || '0',
- decQuantity: product.previous_quantity_period_three || '0',
- decCost: product.previous_cost_period_three || '0',
-
- // Current quarter (Q1) - January, February, March
- janQuantity: product.current_quantity_period_one || '0',
- janCost: product.current_cost_period_one || '0',
- febQuantity: product.current_quantity_period_two || '0',
- febCost: product.current_cost_period_two || '0',
- marQuantity: product.current_quantity_period_three || '0',
- marCost: product.current_cost_period_three || '0',
-
- // Forecast quarter (Q2) - April, May, June
- aprQuantity: product.forecast_quantity_period_one || '0',
- aprCost: product.forecast_cost_period_one || '0',
- mayQuantity: product.forecast_quantity_period_two || '0',
- mayCost: product.forecast_cost_period_two || '0',
- junQuantity: product.forecast_quantity_period_three || '0',
- junCost: product.forecast_cost_period_three || '0',
-
- // Variation reasons
- variationReason: product.variation_reason_master_id?.toString() || '',
- otherVariationReason: product.other_variation_reason || '',
- zeroTargetReason: product.zero_target_reason_master_id?.toString() || '',
- otherZeroTargetReason: product.other_zero_target_reason || '',
- remarks: product.remarks || ''
- };
- });
-
- onProductsChange(formattedProducts);
- setSelectedProductIds(formattedProducts.map(p => p.product_id));
-
- // Set remarks if available
- if (currentSubmission.products[0]?.remarks) {
- setRemarks(currentSubmission.products[0].remarks);
- if (typeof window !== 'undefined') {
- localStorage.setItem('surveyRemarks', currentSubmission.products[0].remarks);
- }
- }
-
- // Set quarter and year in localStorage if not already set
- if (currentSubmission.quarter && currentSubmission.year) {
- localStorage.setItem('currentQuarter', currentSubmission.quarter);
- localStorage.setItem('currentYear', currentSubmission.year.toString());
- }
- }
- } catch (error) {
- console.error('Error loading draft data:', error);
- }
- };
-
- if (isInitialLoad) {
- loadDraftData();
- setIsInitialLoad(false);
- }
-}, [isInitialLoad, onProductsChange, location.state]);
-
-
React.useEffect(() => {
const variationController = new AbortController();
const zeroController = new AbortController();
@@ -883,7 +616,7 @@ useEffect(() => {
endDate: ''
}));
-// const location = useLocation();
+const location = useLocation();
// Update surveyData when props or location changes
React.useEffect(() => {
@@ -1462,7 +1195,7 @@ useEffect(() => {
Due:
-
+
{surveyData.endDate ? (
new Date(surveyData.endDate).toLocaleDateString('en-US', {
year: 'numeric',
@@ -2172,37 +1905,24 @@ useEffect(() => {
-
-
-
-
-
+
+
{(hasError || isInitialLoad) && (
diff --git a/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx b/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx
index 1ffb246..ef8970a 100644
--- a/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx
+++ b/ipi-survey-platform/src/components/survey/ReviewSubmit/ReviewSubmit.jsx
@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import Table from '@/components/common/Table';
-import { getQuarterPeriods , resubmitSurvey } from '@/services/submissions/submissionService';
+import { getQuarterPeriods } from '@/services/submissions/submissionService';
import { getEmirates, fetchVariationReasons, fetchZeroTargetReasons } from '@/services/masters/masterService';
const caretUpSrc = '/assets/images/caret-up.svg';
const caretDownSrc = '/assets/images/CaretDown-black.svg';
@@ -360,9 +360,7 @@ const ReviewSubmit = ({
const [emirateName, setEmirateName] = useState('');
const [variationReasons, setVariationReasons] = useState([]);
const [zeroTargetReasons, setZeroTargetReasons] = useState([]);
- const [isSavingDraft, setIsSavingDraft] = React.useState(false);
- const [productOptions, setProductOptions] = React.useState([]);
-
+
useEffect(() => {
const fetchEmiratesData = async () => {
try {
@@ -445,193 +443,6 @@ const ReviewSubmit = ({
return '';
});
- const handleSaveDraft = async () => {
- try {
- setIsSavingDraft(true);
-
- // Get current submission from localStorage
- const currentSubmissionStr = localStorage.getItem('currentSubmission');
- if (!currentSubmissionStr) {
- throw new Error('Current submission data not found');
- }
- const currentSubmission = JSON.parse(currentSubmissionStr);
- const currentQuarter = localStorage.getItem('currentQuarter');
- const currentYear = localStorage.getItem('currentYear');
-
- // Get establishment ID from current submission
- const submissionId = currentSubmission.id;
- const establishmentId = currentSubmission.establishment_id;
-
- if (!establishmentId) {
- throw new Error('Establishment ID not found in submission');
- }
-
- // Get user profile from localStorage
- const userProfileStr = localStorage.getItem('user_profile');
- if (!userProfileStr) {
- throw new Error('User profile not found');
- }
-
- const userProfile = JSON.parse(userProfileStr);
- const createdById = userProfile?.id;
-
- if (!createdById) {
- throw new Error('User ID not found in profile');
- }
-
- // Get quarter and year from current submission
- const effectiveQuarter = currentQuarter;
- const effectiveYear = currentYear;
-
- if (!effectiveQuarter || !effectiveYear) {
- throw new Error('Quarter and year are required in submission');
- }
-
- // Get establishment data
- const establishment = currentSubmission.establishment;
- if (!establishment) {
- throw new Error('Establishment data not found in submission');
- }
-
- // Prepare products data
- const formattedProducts = products.map(product => ({
- id: product.id || 0,
- product_id: product.product_id || null,
- unit_id: product.unit || '',
- annual_installed_capacity: product.capacity || '0',
- previous_quantity_period_one: product.octQuantity || '0',
- previous_quantity_period_two: product.novQuantity || '0',
- previous_quantity_period_three: product.decQuantity || '0',
- previous_cost_period_one: product.octCost || '0',
- previous_cost_period_two: product.novCost || '0',
- previous_cost_period_three: product.decCost || '0',
- current_quantity_period_one: product.janQuantity || '0',
- current_quantity_period_two: product.febQuantity || '0',
- current_quantity_period_three: product.marQuantity || '0',
- current_cost_period_one: product.janCost || '0',
- current_cost_period_two: product.febCost || '0',
- current_cost_period_three: product.marCost || '0',
- forecast_quantity_period_one: product.aprQuantity || '0',
- forecast_quantity_period_two: product.mayQuantity || '0',
- forecast_quantity_period_three: product.junQuantity || '0',
- forecast_cost_period_one: product.aprCost || '0',
- forecast_cost_period_two: product.mayCost || '0',
- forecast_cost_period_three: product.junCost || '0',
- variation_reason_master_id: product.variationReason || null,
- other_variation_reason: product.otherVariationReason || '',
- zero_target_reason_master_id: product.zeroTargetReason || null,
- other_zero_target_reason: product.otherZeroTargetReason || '',
- remarks: product.remarks || ''
- }));
-
- // Prepare the complete payload
- const payload = {
- establishment_id: establishmentId,
- quarter: effectiveQuarter,
- year: effectiveYear,
- emirati_male: establishment.emirati_male || 0,
- emirati_female: establishment.emirati_female || 0,
- non_emirati_male: establishment.non_emirati_male || 0,
- non_emirati_female: establishment.non_emirati_female || 0,
- total_emirati: establishment.total_emirati || 0,
- total_employees: establishment.total_employees || 0,
- status: "Draft",
- created_by: createdById,
- products: formattedProducts
- };
- let response;
- try {
- if (submissionId) {
- // Update existing submission
- response = await resubmitSurvey(submissionId, payload);
- // Handle different response formats
- const responseData = response?.data || response;
-
- if (responseData) {
- // Update local storage with the updated submission
- const updatedSubmission = {
- ...currentSubmission,
- ...responseData,
- updated_at: new Date().toISOString()
- };
- localStorage.setItem('currentSubmission', JSON.stringify(updatedSubmission));
-
- toast.success('Draft updated successfully', {
- position: "top-right",
- autoClose: 3000,
- hideProgressBar: false,
- closeOnClick: true,
- pauseOnHover: true,
- draggable: true
- });
- return; // Success, exit the function
- }
- } else {
- // Create new submission
- response = await submitSurvey(payload);
- // Handle different response formats
- const responseData = response?.data || response;
-
- if (responseData && (responseData.id || responseData.submission_id)) {
- // Update local storage with the new submission ID
- const updatedSubmission = {
- ...currentSubmission,
- id: responseData.id || responseData.submission_id,
- status: 'Draft',
- created_at: new Date().toISOString()
- };
- localStorage.setItem('currentSubmission', JSON.stringify(updatedSubmission));
-
- toast.success('Draft saved successfully', {
- position: "top-right",
- autoClose: 3000,
- hideProgressBar: false,
- closeOnClick: true,
- pauseOnHover: true,
- draggable: true
- });
- return; // Success, exit the function
- }
- }
-
- // If we get here, the response wasn't in the expected format
- throw new Error('Unexpected response format from server');
-
- } catch (apiError) {
- console.error('API Error details:', {
- message: apiError.message,
- response: apiError.response,
- stack: apiError.stack
- });
-
- // If we have a response with error details, use that
- if (apiError.response?.data) {
- const errorMessage = apiError.response.data.message || apiError.response.data.error || 'Unknown server error';
- throw new Error(`Server error: ${errorMessage}`);
- }
-
- // Otherwise, rethrow the original error
- throw apiError;
- }
- } catch (error) {
- console.error('Error in handleSaveDraft:', {
- name: error.name,
- message: error.message,
- stack: error.stack
- });
-
- toast.error(error.message || 'Failed to save draft. Please try again.', {
- position: "top-right",
- autoClose: 5000,
- hideProgressBar: false,
- closeOnClick: true,
- pauseOnHover: true,
- draggable: true
- });
- } finally {
- setIsSavingDraft(false);
- }
-};
const handleSubmit = () => {
try {
const submissionData = formatSubmissionData(
@@ -1231,16 +1042,6 @@ const ReviewSubmit = ({
Back
-
-
-
);
diff --git a/ipi-survey-platform/src/pages/Overview/Overview.jsx b/ipi-survey-platform/src/pages/Overview/Overview.jsx
index bb96046..a9d9bb3 100644
--- a/ipi-survey-platform/src/pages/Overview/Overview.jsx
+++ b/ipi-survey-platform/src/pages/Overview/Overview.jsx
@@ -1,18 +1,13 @@
// src/pages/Overview/Overview.jsx
import React, { useState, useEffect, useMemo } from 'react';
import { useNavigate, useLocation } from 'react-router-dom';
-import { getSubmissions, getSubmissionHistoryByEstablishment, fetchSubmissionDetail } from '@/services/submissions/submissionService';
+import { getSubmissions, getSubmissionHistoryByEstablishment } from '@/services/submissions/submissionService';
import HeaderBar from '@/components/layout/HeaderBar';
import Table from '@/components/common/Table';
import DetailedOverview from '@/components/overview/DetailedOverview';
const searchIconSrc = '/assets/images/material-symbols_search-rounded.svg';
const caretDownSrc = '/assets/images/CaretDown.svg';
const downloadIconSrc = '/assets/images/DownloadSimple.svg';
-const pencilActiveSrc = '/assets/images/PencilSimple.svg';
-const pencilInactiveSrc = '/assets/images/pencilsimple-inactive.svg';
-// const deleteIconSrc = '/assets/images/delete.svg';
-const deleteIconSrc = '/assets/images/Trash - active.svg';
-const trashInactiveSrc = '/assets/images/Trash - Inactive.svg';
const statusStyles = {
approved: 'text-[#2F663C] bg-[#F3FAF4]',
@@ -51,18 +46,6 @@ const Overview = () => {
setSelectedSubmission(location.state.selectedSubmission);
}
}, [location.state]);
- const handleDeleteDraft = async (e, record) => {
- e.preventDefault();
- e.stopPropagation();
- try {
- // Add your delete logic here
- // Example: await deleteSubmission(record.id);
- // You might want to add a confirmation dialog before deleting
- } catch (error) {
- console.error('Error deleting submission:', error);
- // Optionally show an error message to the user
- }
-};
useEffect(() => {
const fetchSubmissions = async () => {
@@ -130,48 +113,9 @@ const Overview = () => {
) : '-',
record.status,
formatDate(record.created_at),
- record.status === 'Draft' ? (
-
-
-
-
- ) : 'View Details',
+ 'View Details',
]);
- }, [filteredRows, uae_currency]);
+ }, [filteredRows]);
const handlePageChange = (newPage) => {
setPagination(prev => ({
diff --git a/ipi-survey-platform/src/pages/Survey/Survey.jsx b/ipi-survey-platform/src/pages/Survey/Survey.jsx
index 04eac13..7fcb870 100644
--- a/ipi-survey-platform/src/pages/Survey/Survey.jsx
+++ b/ipi-survey-platform/src/pages/Survey/Survey.jsx
@@ -799,114 +799,36 @@ const Survey = () => {
}
};
- // const handleFinalSubmit = async () => {
- // if (isResubmit && submissionId) {
- // await handleResubmit();
- // return;
- // }
+ const handleFinalSubmit = async () => {
+ if (isResubmit && submissionId) {
+ await handleResubmit();
+ return;
+ }
- // setIsSubmitting(true);
- // setError('');
+ setIsSubmitting(true);
+ setError('');
- // try {
- // const payload = buildSubmissionPayload();
- // await submitSurvey(payload);
- // setShowSuccessPopup(true);
- // setHasSubmitted(true);
- // showToast('success', 'Survey submitted successfully!');
- // localStorage.removeItem('surveyRemarks');
- // // Clear the stored survey data after successful submission
- // localStorage.removeItem('currentSurvey');
- // // Remove currentSurveyPeriod from localStorage
- // localStorage.removeItem('currentSurveyPeriod');
- // } catch (error) {
- // const message = error?.response?.data?.message || error?.message || 'Failed to submit survey. Please try again.';
- // console.error('Submission Error:', error);
- // setError(message);
- // showToast('error', message);
- // } finally {
- // setIsSubmitting(false);
- // }
- // };
-
-const handleFinalSubmit = async () => {
- if (isResubmit && submissionId) {
- await handleResubmit();
- return;
- }
-
- setIsSubmitting(true);
- setError('');
-
- try {
- const payload = buildSubmissionPayload();
- const currentSubmissionStr = localStorage.getItem('currentSubmission');
- let submissionId = null;
- let currentSubmission = null;
-
- if (currentSubmissionStr) {
- currentSubmission = JSON.parse(currentSubmissionStr);
- submissionId = currentSubmission.id;
+ try {
+ const payload = buildSubmissionPayload();
+ await submitSurvey(payload);
+ setShowSuccessPopup(true);
+ setHasSubmitted(true);
+ showToast('success', 'Survey submitted successfully!');
+ localStorage.removeItem('surveyRemarks');
+ // Clear the stored survey data after successful submission
+ localStorage.removeItem('currentSurvey');
+ // Remove currentSurveyPeriod from localStorage
+ localStorage.removeItem('currentSurveyPeriod');
+ } catch (error) {
+ const message = error?.response?.data?.message || error?.message || 'Failed to submit survey. Please try again.';
+ console.error('Submission Error:', error);
+ setError(message);
+ showToast('error', message);
+ } finally {
+ setIsSubmitting(false);
}
+ };
- if (currentSubmission?.products?.length) {
- payload.products = payload.products.map((product, index) => {
- const existingProduct = currentSubmission.products[index];
- return {
- ...product,
- id: existingProduct?.id || 0, // Include existing product ID or 0 for new products
- product_id: product.product_id || existingProduct?.product_id // Ensure product_id is included
- };
- });
- }
-
- let response;
-
- if (submissionId) {
- // Update existing draft submission
- response = await resubmitSurvey(submissionId, {
- ...payload,
- status: 'Submitted'
- });
- } else {
- // Create new submission
- response = await submitSurvey({
- ...payload,
- status: 'Submitted'
- });
- }
-
- // Update local storage with the submitted submission and product IDs
- if (response && (response.data || response.id)) {
- const responseData = response.data || response;
- const updatedSubmission = {
- ...(currentSubmission || {}),
- id: responseData.id || responseData.submission_id,
- status: 'Submitted',
- submitted_at: new Date().toISOString()
- };
-
- // Update product IDs if they exist in the response
- if (responseData.products && Array.isArray(responseData.products)) {
- updatedSubmission.products = responseData.products.map((product, index) => ({
- ...(currentSubmission?.products?.[index] || {}), // Keep existing product data
- id: product.id, // Update with new product ID from response
- product_id: product.product_id // Ensure product_id is also updated
- }));
- }
-
- localStorage.setItem('currentSubmission', JSON.stringify(updatedSubmission));
- }
-
- setShowSuccessPopup(true);
- setHasSubmitted(true);
- } catch (error) {
- console.error('Error submitting survey:', error);
- setError(error.message || 'Failed to submit survey. Please try again.');
- } finally {
- setIsSubmitting(false);
- }
-};
const StepBadge = ({ state, number }) => {
if (state === 'active') {
return (