Seera/src/services/assetMaintenanceService.ts

221 lines
6.0 KiB
TypeScript

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<AssetMaintenanceListResponse> {
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<AssetMaintenanceListResponse>(endpoint);
}
/**
* Get detailed information about a specific maintenance log
*/
async getMaintenanceLogDetails(logName: string): Promise<AssetMaintenanceLog> {
const endpoint = `${API_CONFIG.ENDPOINTS.GET_ASSET_MAINTENANCE_LOG_DETAILS}?log_name=${encodeURIComponent(logName)}`;
return apiService.apiCall<AssetMaintenanceLog>(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<CreateMaintenanceData>
): 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<AssetMaintenanceListResponse> {
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<AssetMaintenanceListResponse>(endpoint);
}
/**
* Get overdue maintenance logs
*/
async getOverdueMaintenanceLogs(
filters?: MaintenanceFilters,
limit: number = 20,
offset: number = 0
): Promise<AssetMaintenanceListResponse> {
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<AssetMaintenanceListResponse>(endpoint);
}
}
// Create and export singleton instance
const assetMaintenanceService = new AssetMaintenanceService();
export default assetMaintenanceService;