import apiService from './apiService'; import API_CONFIG from '../config/api'; // Asset Maintenance Interfaces export interface AssetMaintenanceLog { name: string; asset_maintenance?: string; naming_series?: string; asset_name?: string; custom_asset_type?: string; item_code?: string; item_name?: string; custom_asset_names?: string; custom_hospital_name?: string; task?: string; task_name?: string; maintenance_type?: string; periodicity?: string; has_certificate?: number; custom_early_completion?: number; maintenance_status?: string; custom_pm_overdue_reason?: string; custom_accepted_by_moh?: string; assign_to_name?: string; due_date?: string; custom_accepted_by_moh_?: string; custom_template?: string; workflow_state?: string; creation?: string; modified?: string; owner?: string; modified_by?: string; docstatus?: number; idx?: number; } export interface AssetMaintenanceListResponse { asset_maintenance_logs: AssetMaintenanceLog[]; total_count: number; limit: number; offset: number; has_more: boolean; } export interface MaintenanceFilters { maintenance_status?: string; asset_name?: string; custom_hospital_name?: string; maintenance_type?: string; [key: string]: any; } export interface CreateMaintenanceData { asset_name?: string; task?: string; task_name?: string; maintenance_type?: string; periodicity?: string; maintenance_status?: string; due_date?: string; assign_to_name?: string; description?: string; [key: string]: any; } class AssetMaintenanceService { /** * Get list of asset maintenance logs with optional filters and pagination */ async getMaintenanceLogs( filters?: MaintenanceFilters, fields?: string[], limit: number = 20, offset: number = 0, orderBy?: string ): Promise { const params = new URLSearchParams(); if (filters) { params.append('filters', JSON.stringify(filters)); } if (fields && fields.length > 0) { params.append('fields', JSON.stringify(fields)); } params.append('limit', limit.toString()); params.append('offset', offset.toString()); if (orderBy) { params.append('order_by', orderBy); } const endpoint = `${API_CONFIG.ENDPOINTS.GET_ASSET_MAINTENANCE_LOGS}?${params.toString()}`; return apiService.apiCall(endpoint); } /** * Get detailed information about a specific maintenance log */ async getMaintenanceLogDetails(logName: string): Promise { const endpoint = `${API_CONFIG.ENDPOINTS.GET_ASSET_MAINTENANCE_LOG_DETAILS}?log_name=${encodeURIComponent(logName)}`; return apiService.apiCall(endpoint); } /** * Create a new maintenance log */ async createMaintenanceLog(logData: CreateMaintenanceData): Promise<{ success: boolean; asset_maintenance_log: AssetMaintenanceLog; message: string }> { return apiService.apiCall(API_CONFIG.ENDPOINTS.CREATE_ASSET_MAINTENANCE_LOG, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ log_data: logData }) }); } /** * Update an existing maintenance log */ async updateMaintenanceLog( logName: string, logData: Partial ): Promise<{ success: boolean; asset_maintenance_log: AssetMaintenanceLog; message: string }> { return apiService.apiCall(API_CONFIG.ENDPOINTS.UPDATE_ASSET_MAINTENANCE_LOG, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ log_name: logName, log_data: logData }) }); } /** * Delete a maintenance log */ async deleteMaintenanceLog(logName: string): Promise<{ success: boolean; message: string }> { return apiService.apiCall(API_CONFIG.ENDPOINTS.DELETE_ASSET_MAINTENANCE_LOG, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ log_name: logName }) }); } /** * Update maintenance log status */ async updateMaintenanceStatus( logName: string, maintenanceStatus?: string, workflowState?: string ): Promise<{ success: boolean; asset_maintenance_log: AssetMaintenanceLog; message: string }> { return apiService.apiCall(API_CONFIG.ENDPOINTS.UPDATE_MAINTENANCE_STATUS, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ log_name: logName, maintenance_status: maintenanceStatus, workflow_state: workflowState }) }); } /** * Get maintenance logs for a specific asset */ async getMaintenanceLogsByAsset( assetName: string, filters?: MaintenanceFilters, limit: number = 20, offset: number = 0 ): Promise { const params = new URLSearchParams(); params.append('asset_name', assetName); if (filters) { params.append('filters', JSON.stringify(filters)); } params.append('limit', limit.toString()); params.append('offset', offset.toString()); const endpoint = `${API_CONFIG.ENDPOINTS.GET_MAINTENANCE_LOGS_BY_ASSET}?${params.toString()}`; return apiService.apiCall(endpoint); } /** * Get overdue maintenance logs */ async getOverdueMaintenanceLogs( filters?: MaintenanceFilters, limit: number = 20, offset: number = 0 ): Promise { const params = new URLSearchParams(); if (filters) { params.append('filters', JSON.stringify(filters)); } params.append('limit', limit.toString()); params.append('offset', offset.toString()); const endpoint = `${API_CONFIG.ENDPOINTS.GET_OVERDUE_MAINTENANCE_LOGS}?${params.toString()}`; return apiService.apiCall(endpoint); } } // Create and export singleton instance const assetMaintenanceService = new AssetMaintenanceService(); export default assetMaintenanceService;