import { Injectable } from '@angular/core'; import { HttpRestService } from '@core/services/http-rest.service'; import { AutomationAPI } from '@core/typings/api/automation.typing'; import { WorkflowLevelAdvancementAPI } from '@core/typings/api/workflow-level-advancement.typing'; import { WorkflowLevelAutomationAPI } from '@core/typings/api/workflow-level-automation.typing'; import { APIResult, APIResultData, PaginationOptions } from '@yourcause/common'; export type DetailUnion = WorkflowLevelAutomationAPI.WorkflowLevelAutomationRuleSetDetailModel | WorkflowLevelAdvancementAPI.WorkflowLevelRoutingAutomationRuleSetDetailModel; @Injectable({ providedIn: 'root' }) export class WorkflowLevelAutomationResources { constructor ( private httpRestService: HttpRestService ) { } protected apiBase = '/api/manager/WorkflowLevelAutomation'; protected searchHistoryRuleSetParam = 'workflowLevelAutomationRuleSetId'; saveLevel ( level: WorkflowLevelAutomationAPI.SaveWorkflowLevelAutomationRuleSet|WorkflowLevelAdvancementAPI.SaveWorkflowLevelRoutingAutomationRuleSet ) { return this.httpRestService.post(this.apiBase, level); } getFormsByWorkflowId (workflowId: number) { return this.httpRestService.get(`${this.apiBase}/Forms?workflowId=${workflowId}`); } async searchHistory ( paginationOptions: PaginationOptions, id?: number ) { const data = await this.httpRestService.post>( this.apiBase + '/Applications', { [this.searchHistoryRuleSetParam]: id, paginationOptions } ); return ({ success: true, data }); } async searchLevels ( paginationOptions: PaginationOptions ) { const endpoint = this.apiBase + '/Paginated'; const data = await this.httpRestService.post>(endpoint, { paginationOptions }); return ({ success: true, data }); } getRuleSet (ruleSetId: number) { return this.httpRestService.get(this.apiBase + '/' + ruleSetId); } changeRuleSetStatus (ruleSetId: number, status: AutomationAPI.AutomationRuleSetStatus) { return this.httpRestService.post(this.apiBase + `/${ruleSetId}/Status`, { status }); } deleteRuleSet (ruleSetId: number) { return this.httpRestService.delete(this.apiBase + `/${ruleSetId}`); } sequence ( workflowId: number, formId: number, ruleSets: { workflowLevelAutomationRuleSetId?: number; workflowLevelRoutingAutomationRuleSetId?: number; sequence: number; }[], workflowLevelId?: number ) { return this.httpRestService.post(this.apiBase + '/Sequence', { workflowId, formId, ruleSets, workflowLevelId }); } getRulesFromWorkflowFormId ( workflowId: number, formId: number ) { return this.searchLevels({ returnAll: true, rowsPerPage: 0, retrieveTotalRecordCount: false, orFilterColumns: [], pageNumber: 0, sortColumns: [{ columnName: 'sequence', sortAscending: true }], filterColumns: [{ columnName: 'formId', filters: [{ filterType: 'eq', filterValue: formId }] }, { columnName: 'workflowId', filters: [{ filterType: 'eq', filterValue: workflowId }] }] }); } rerouteApplication ( workflowLevelId: number, applicationId: number, comments: string ) { return this.httpRestService.post('/api/manager/WorkflowLevelAutomation/RouteApplication', { workflowLevelId, applicationId, comments }); } getSingleResponseRefFields ( workflowId: number, defaultFormId: number ): Promise { const endpoint = `api/manager/WorkflowLevelAutomation/SingleResponseReferenceFields/${workflowId}/${defaultFormId}`; return this.httpRestService.get(endpoint); } }