@fleetbase/fleetops-engine
Version:
Fleet & Transport Management Extension for Fleetbase
119 lines (110 loc) • 4.63 kB
JavaScript
import ResourceActionService from '@fleetbase/ember-core/services/resource-action';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
export default class MaintenanceScheduleActionsService extends ResourceActionService {
fetch;
notifications;
intl;
constructor() {
super(...arguments);
this.initialize('maintenance-schedule');
}
transition = {
view: (schedule) => this.transitionTo('maintenance.schedules.index.details', schedule),
edit: (schedule) => this.transitionTo('maintenance.schedules.index.edit', schedule),
create: () => this.transitionTo('maintenance.schedules.index.new'),
};
panel = {
create: (attributes = {}) => {
const schedule = this.createNewInstance(attributes);
return this.resourceContextPanel.open({
content: 'maintenance-schedule/form',
title: this.intl.t('common.create-a-new-resource', { resource: this.intl.t('resource.maintenance-schedule')?.toLowerCase() }),
useDefaultSaveTask: true,
saveOptions: {
callback: this.refresh,
},
schedule,
});
},
edit: (schedule) => {
return this.resourceContextPanel.open({
content: 'maintenance-schedule/form',
title: this.intl.t('common.edit-resource-name', { resourceName: schedule.name }),
useDefaultSaveTask: true,
schedule,
});
},
view: (schedule) => {
return this.resourceContextPanel.open({
schedule,
tabs: [
{
label: this.intl.t('common.overview'),
component: 'maintenance-schedule/details',
},
],
});
},
};
modal = {
create: (attributes = {}, options = {}, saveOptions = {}) => {
const schedule = this.createNewInstance(attributes);
return this.modalsManager.show('modals/resource', {
resource: schedule,
title: this.intl.t('common.create-a-new-resource', { resource: this.intl.t('resource.maintenance-schedule')?.toLowerCase() }),
acceptButtonText: this.intl.t('common.create-resource', { resource: this.intl.t('resource.maintenance-schedule') }),
component: 'maintenance-schedule/form',
confirm: (modal) => this.modalTask.perform(modal, 'saveTask', schedule, { refresh: true, ...saveOptions }),
...options,
});
},
edit: (schedule, options = {}, saveOptions = {}) => {
return this.modalsManager.show('modals/resource', {
resource: schedule,
title: this.intl.t('common.edit-resource-name', { resourceName: schedule.name }),
acceptButtonText: this.intl.t('common.save-changes'),
saveButtonIcon: 'save',
component: 'maintenance-schedule/form',
confirm: (modal) => this.modalTask.perform(modal, 'saveTask', schedule, { refresh: true, ...saveOptions }),
...options,
});
},
};
/**
* Pause a maintenance schedule.
*/
async pause(schedule) {
try {
await this.fetch.post(`maintenance-schedules/${schedule.id}/pause`);
schedule.set('status', 'paused');
this.notifications.success('Schedule paused successfully.');
} catch (error) {
this.notifications.serverError(error);
}
}
/**
* Resume a paused maintenance schedule.
*/
async resume(schedule) {
try {
await this.fetch.post(`maintenance-schedules/${schedule.id}/resume`);
schedule.set('status', 'active');
this.notifications.success('Schedule resumed successfully.');
} catch (error) {
this.notifications.serverError(error);
}
}
/**
* Manually trigger a work order from a schedule immediately.
*/
async triggerNow(schedule) {
try {
const response = await this.fetch.post(`maintenance-schedules/${schedule.id}/trigger`);
this.notifications.success(`Work order ${response?.work_order?.public_id ?? ''} created from schedule.`);
this.refresh();
} catch (error) {
this.notifications.serverError(error);
}
}
}