import { Injectable } from '@angular/core'; import { HttpRestService } from '@core/services/http-rest.service'; import { AdHocReportingAPI, AdHocReportingAPI as API } from '@core/typings/api/ad-hoc-reporting.typing'; import { ManageAudienceMember } from '@features/audience/audience.typing'; import { FormAudience } from '@features/configure-forms/form.typing'; import { PaginatedResponse, TableDataDownloadFormat } from '@yourcause/common'; @Injectable({ providedIn: 'root' }) export class ReportingResources { constructor ( private http: HttpRestService ) { } getFormComponents (formId: number) { return this.http.get( `api/datahub/forms/${formId}/schemas` ); } getFormsForReports ( programId: number, audience?: FormAudience ) { let endpoint = 'api/manager/reports/GetForms?programId=' + programId; if (audience) { endpoint += `&audienceType=${audience}`; } return this.http.get(endpoint); } updateReport (report: API.UpdateReportPayload) { return this.http.post( 'api/manager/reports/UpdateUserSavedReport', report ); } createReport (report: API.CreateReportPayload) { return this.http.post( 'api/manager/reports/InsertUserSavedReport', report ); } getReports () { return this.http.get( 'api/manager/reports/GetAllUserSavedReportsForCompany' ); } getReportById (id: number) { return this.http.get( 'api/manager/reports/GetUserSavedReportById/' + id ); } getSharedUsersForReport (id: number): Promise { const endpoint = `api/manager/reports/GetSavedReportUsers/${id}`; return this.http.get(endpoint); } getScheduleForReport (id: number): Promise { const endpoint = `api/manager/reports/GetScheduledReport/${id}`; return this.http.get(endpoint); } saveSharedUsersForReport (payload: API.SaveSharedReportUsersPayload) { const endpoint = 'api/manager/reports/SaveReportUsers'; return this.http.post(endpoint, payload); } removeReportById (id: number) { return this.http.delete( 'api/manager/reports/DeleteUserSavedReport/' + id ); } getReadOnlyReport ( paginationOptions: AdHocReportingAPI.AdvancedPaginationOptionsModel, endpoint: string, reportIdForViewOnly: number, exportFileTypeId: TableDataDownloadFormat ): string|any { return this.http.post>( 'api/manager/reports/GetReadOnly' + endpoint + 'Report', { paginationOptions, reportId: reportIdForViewOnly, exportFileTypeId } ); }; getReportRows ( paginationOptions: AdHocReportingAPI.AdvancedPaginationOptionsModel, endpoint: string, formIds: number[], formDataFields: string[], baseFormId: number, userSavedReportColumnList: API.UserSavedReportColumn[] = [], reportIdForViewOnly: number, referenceFieldIds: number[] = [], referenceFieldTableId: number, fileExportTypeId: TableDataDownloadFormat ) { if (reportIdForViewOnly) { return this.getReadOnlyReport( paginationOptions, endpoint, reportIdForViewOnly, fileExportTypeId ); } else { return this.http.post>( 'api/manager/reports/' + endpoint, { paginationOptions, formIds, formDataFields, userSavedReportColumnList, baseFormId, referenceFieldIds, referenceFieldTableId } ); } } sendReport (payload: API.SendReportPayload) { const endpoint = 'api/manager/reports/SendReport'; return this.http.post(endpoint, payload); } addScheduledReport (payload: API.ScheduleReportPayload) { const endpoint = 'api/manager/reports/AddScheduledReport'; return this.http.post(endpoint, payload); } deleteScheduledReport (reportId: number) { const endpoint = `api/manager/reports/deleteScheduledReport/${reportId}`; return this.http.delete(endpoint); } updateScheduledReport (payload: API.ScheduleReportPayload) { const endpoint = 'api/manager/reports/UpdateScheduledReport'; return this.http.post(endpoint, payload); } getDataFeeds (sftpId: number) { const endpoint = 'api/manager/reports/DataFeedLogs'; return this.http.post(endpoint, { sftpId }); } }