Add equipment fail feature
This commit is contained in:
@@ -11,9 +11,14 @@ import { EquipmentModal } from '../../../../components/domain/equipment/Equipmen
|
||||
import { DeleteEquipmentModal } from '../../../../components/domain/equipment/DeleteEquipmentModal';
|
||||
import { MaintenanceHistoryModal } from '../../../../components/domain/equipment/MaintenanceHistoryModal';
|
||||
import { ScheduleMaintenanceModal, type MaintenanceScheduleData } from '../../../../components/domain/equipment/ScheduleMaintenanceModal';
|
||||
import { ReportFailureModal } from '../../../../components/domain/equipment/ReportFailureModal';
|
||||
import { MarkAsRepairedModal } from '../../../../components/domain/equipment/MarkAsRepairedModal';
|
||||
import { useEquipment, useCreateEquipment, useUpdateEquipment, useDeleteEquipment, useHardDeleteEquipment } from '../../../../api/hooks/equipment';
|
||||
import { equipmentService } from '../../../../api/services/equipment';
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
const MaquinariaPage: React.FC = () => {
|
||||
const queryClient = useQueryClient();
|
||||
const { t } = useTranslation(['equipment', 'common']);
|
||||
const [searchTerm, setSearchTerm] = useState('');
|
||||
const [statusFilter, setStatusFilter] = useState('');
|
||||
@@ -26,6 +31,8 @@ const MaquinariaPage: React.FC = () => {
|
||||
const [showDeleteModal, setShowDeleteModal] = useState(false);
|
||||
const [showHistoryModal, setShowHistoryModal] = useState(false);
|
||||
const [showScheduleModal, setShowScheduleModal] = useState(false);
|
||||
const [showReportFailureModal, setShowReportFailureModal] = useState(false);
|
||||
const [showMarkRepairedModal, setShowMarkRepairedModal] = useState(false);
|
||||
const [equipmentForAction, setEquipmentForAction] = useState<Equipment | null>(null);
|
||||
|
||||
const currentTenant = useCurrentTenant();
|
||||
@@ -82,11 +89,75 @@ const MaquinariaPage: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
const handleReportFailure = (equipment: Equipment) => {
|
||||
setEquipmentForAction(equipment);
|
||||
setShowReportFailureModal(true);
|
||||
};
|
||||
|
||||
const handleMarkAsRepaired = (equipment: Equipment) => {
|
||||
setEquipmentForAction(equipment);
|
||||
setShowMarkRepairedModal(true);
|
||||
};
|
||||
|
||||
const handleScheduleMaintenance = (equipment: Equipment) => {
|
||||
setEquipmentForAction(equipment);
|
||||
setShowScheduleModal(true);
|
||||
};
|
||||
|
||||
const handleReportFailureSubmit = async (equipmentId: string, failureData: {
|
||||
failureType: string;
|
||||
severity: string;
|
||||
description: string;
|
||||
photos?: File[];
|
||||
estimatedImpact: boolean;
|
||||
}) => {
|
||||
try {
|
||||
// Use the new API endpoint
|
||||
await equipmentService.reportEquipmentFailure(
|
||||
tenantId,
|
||||
equipmentId,
|
||||
failureData
|
||||
);
|
||||
|
||||
// Refresh equipment data
|
||||
await queryClient.invalidateQueries({ queryKey: ['equipment', tenantId] });
|
||||
|
||||
setShowReportFailureModal(false);
|
||||
setEquipmentForAction(null);
|
||||
} catch (error) {
|
||||
console.error('Error reporting failure:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
const handleMarkAsRepairedSubmit = async (equipmentId: string, repairData: {
|
||||
repairDate: string;
|
||||
technicianName: string;
|
||||
repairDescription: string;
|
||||
partsReplaced: string[];
|
||||
cost: number;
|
||||
photos?: File[];
|
||||
testResults: boolean;
|
||||
}) => {
|
||||
try {
|
||||
// Use the new API endpoint
|
||||
await equipmentService.markEquipmentAsRepaired(
|
||||
tenantId,
|
||||
equipmentId,
|
||||
repairData
|
||||
);
|
||||
|
||||
// Refresh equipment data
|
||||
await queryClient.invalidateQueries({ queryKey: ['equipment', tenantId] });
|
||||
|
||||
setShowMarkRepairedModal(false);
|
||||
setEquipmentForAction(null);
|
||||
} catch (error) {
|
||||
console.error('Error marking as repaired:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
const handleScheduleMaintenanceSubmit = async (equipmentId: string, maintenanceData: MaintenanceScheduleData) => {
|
||||
try {
|
||||
// Update next maintenance date based on scheduled date
|
||||
@@ -104,6 +175,8 @@ const MaquinariaPage: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
const handleViewMaintenanceHistory = (equipment: Equipment) => {
|
||||
setEquipmentForAction(equipment);
|
||||
setShowHistoryModal(true);
|
||||
@@ -380,6 +453,28 @@ const MaquinariaPage: React.FC = () => {
|
||||
priority: 'primary',
|
||||
onClick: () => handleShowMaintenanceDetails(equipment)
|
||||
},
|
||||
// Context-aware actions based on equipment status
|
||||
...(equipment.status === 'operational' || equipment.status === 'warning' ? [
|
||||
{
|
||||
label: t('actions.report_failure'),
|
||||
icon: AlertTriangle,
|
||||
variant: 'outline' as const,
|
||||
priority: 'secondary' as const,
|
||||
highlighted: true,
|
||||
destructive: true,
|
||||
onClick: () => handleReportFailure(equipment)
|
||||
}
|
||||
] : []),
|
||||
...(equipment.status === 'down' ? [
|
||||
{
|
||||
label: t('actions.mark_repaired'),
|
||||
icon: CheckCircle,
|
||||
variant: 'primary' as const,
|
||||
priority: 'secondary' as const,
|
||||
highlighted: true,
|
||||
onClick: () => handleMarkAsRepaired(equipment)
|
||||
}
|
||||
] : []),
|
||||
{
|
||||
label: t('actions.view_history'),
|
||||
icon: History,
|
||||
@@ -459,6 +554,34 @@ const MaquinariaPage: React.FC = () => {
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Report Failure Modal */}
|
||||
{showReportFailureModal && equipmentForAction && (
|
||||
<ReportFailureModal
|
||||
isOpen={showReportFailureModal}
|
||||
onClose={() => {
|
||||
setShowReportFailureModal(false);
|
||||
setEquipmentForAction(null);
|
||||
}}
|
||||
equipment={equipmentForAction}
|
||||
onReportFailure={(failureData) => handleReportFailureSubmit(equipmentForAction.id, failureData)}
|
||||
isLoading={updateEquipmentMutation.isPending}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Mark as Repaired Modal */}
|
||||
{showMarkRepairedModal && equipmentForAction && (
|
||||
<MarkAsRepairedModal
|
||||
isOpen={showMarkRepairedModal}
|
||||
onClose={() => {
|
||||
setShowMarkRepairedModal(false);
|
||||
setEquipmentForAction(null);
|
||||
}}
|
||||
equipment={equipmentForAction}
|
||||
onMarkAsRepaired={(repairData) => handleMarkAsRepairedSubmit(equipmentForAction.id, repairData)}
|
||||
isLoading={updateEquipmentMutation.isPending}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Schedule Maintenance Modal */}
|
||||
{showScheduleModal && equipmentForAction && (
|
||||
<ScheduleMaintenanceModal
|
||||
|
||||
Reference in New Issue
Block a user