import { Injectable } from '@angular/core'; import { HttpRestService } from '@core/services/http-rest.service'; import { FundingSourceTypes } from '@core/typings/budget.typing'; import { PaymentForProcess, ProcessingTypes } from '@core/typings/payment.typing'; import { ArchiveProgramPayload, CreateEditProgramApi, DisabledProgramEmail, GrantProgramCycleBudgetFundingSource, MasterResponse, PaymentStats, PaymentStatusStatApi, Program, ProgramDetail, ProgramDetailApi, ProgramDetailFromApi, ProgramExport, ProgramForDashboard, ProgramImport, ProgramStats, ProgramStatusStatApi, ProgramTopLevelStats } from '@core/typings/program.typing'; import { InvitationApplicantHelpers } from '@features/invitations/invitation.typing'; import { PaginatedResponse, PaginationOptions, SimpleStringMap } from '@yourcause/common'; @Injectable({ providedIn: 'root' }) export class ProgramResources { constructor ( private httpRestService: HttpRestService ) { } getProgramCycleBudgetsAndFundingSources (grantProgramId: number): Promise { return this.httpRestService.get('/api/manager/programs/GetGrantProgramCyclesBudgetFundingSources/' + grantProgramId); } getProgramFromApi (grantProgramId: string): Promise { return this.httpRestService.get( 'api/manager/programs/' + grantProgramId ); } getAllProgramsDraftAndPublished (): Promise { const endpoint = 'api/manager/programs/getall'; return this.httpRestService.get(endpoint); } getProgramForApplicant ( grantProgramGuid: string|number ): Promise { const endpoint = 'api/portal/programs/' + grantProgramGuid + '/apply?includeForm=true'; return this.httpRestService.get(endpoint); } canApplicantApplyToProgram ( applicantId: number, grantProgramGuid: string ): Promise { const endpoint = 'api/portal/programs/CanApplicantApplyToGrantProgram'; return this.httpRestService.post(endpoint, { applicantId, grantProgramGuid }); } saveProgram ( adapted: CreateEditProgramApi ): Promise { return this.httpRestService.post('api/manager/programs', adapted); } getProgramStats (grantProgramId: number, programCycleIds: number[]): Promise { const endpoint = `api/manager/applications/GetApplicationsAggregationStats`; const payload = { programCycleIds, grantProgramId }; return this.httpRestService.post(endpoint, payload); } getPaymentStats (grantProgramId: number, programCycleIds: number[]): Promise { const payload = { programCycleIds, grantProgramId }; const endpoint = `api/manager/applications/GetPaymentStatsForApprovedApplications`; return this.httpRestService.post(endpoint, payload); } getProgramsFromApi (endpoint: string) { return this.httpRestService.get(endpoint); } getActiveProgramsFromApi (endpoint: string) { return this.httpRestService.get(endpoint); } getProgramEmailSettings (id: number): Promise<{ disabledEmails: DisabledProgramEmail[]; senderDisplayName: string; }> { const endpoint = `api/manager/programs/GetProgramEmailSettings?grantProgramId=${id}`; return this.httpRestService.get(endpoint); } getMasterFormResponse (programId: number): Promise { const endpoint = `api/manager/programs/${programId}/MasterFormResponse`; return this.httpRestService.get(endpoint); } getProgramsForManager (active = false): Promise { const endpoint = `api/manager/applications/programs?active=${active}`; return this.httpRestService.get(endpoint); } getForms () { return this.httpRestService.get('api/manager/programs/forms'); } getBudgets () { return this.httpRestService.get('api/manager/programs/budgets'); } getWorkflows () { return this.httpRestService.get('api/manager/programs/workflows'); } exportPrograms (programIds: number[]) { return this.httpRestService.post('/api/manager/programs/GetFullProgramExportData', { programIds, generateDownloadUrl: true }); } importPrograms (programImport: ProgramImport) { return this.httpRestService.post( '/api/manager/programs/ImportFullProjectData', programImport ); } activateProgram (programId: number) { return this.httpRestService.post( 'api/manager/programs/' + programId + '/activate', {} ); } archiveProgram (payload: ArchiveProgramPayload) { return this.httpRestService.post('api/manager/programs/ArchiveProgramAndApplications', payload); } getProgramInsightStats ( programCycleIds: number[], grantProgramId?: number, isArchived?: boolean ): Promise { const endpoint = 'api/manager/insights/program/stats'; return this.httpRestService.post(endpoint, { programCycleIds, grantProgramId, isArchived }); } getProgramStatusStats ( grantProgramId: number, programCycleIds: number[] ): Promise { const endpoint = 'api/manager/insights/program/statuses'; return this.httpRestService.post(endpoint, { programCycleIds, grantProgramId }); } getProgramsForDashboard ( nonMaskedGrantPrograms = false ): Promise { const endpoint = `api/manager/insights/programs?nonMaskedGrantPrograms=${nonMaskedGrantPrograms}`; return this.httpRestService.get(endpoint); } getPaymentsForProgram ( paginationOptions: PaginationOptions, grantProgramId: number, programCycleIds: number[] ): Promise> { const endpoint = 'api/manager/insights/program/payments/detail'; return this.httpRestService.post(endpoint, { paginationOptions, grantProgramId, programCycleIds }); } getPaymentStatusStatsByCycle ( programCycleIds: number[] ): Promise { const endpoint = 'api/manager/insights/program/payments/statuses'; return this.httpRestService.post(endpoint, { programCycleIds }); } getProgramWithForm (id: number): Promise { const endpoint = `api/manager/programs/${id}/apply?includeForm=true`; return this.httpRestService.get(endpoint); } getArchivePaymentStatsForPrograms (programIds: number[]) { const endpoint = `api/manager/applications/GetPaymentStatsForPrograms`; return this.httpRestService.post(endpoint, {programIds}); } getProgramsPaginated (options: PaginationOptions) { const endpoint = `api/manager/programs/GetProgramsPaginated`; return this.httpRestService.post(endpoint, {paginationOptions: options }); } deleteProgram (programId: number) { const endpoint = `api/manager/programs/deleteProgram/${programId}`; return this.httpRestService.post(endpoint, {}); } getCycleBudgetsMap (): Promise> { const endpoint = 'api/manager/applications/GetProgramCycleBudgetIdsForCycles'; return this.httpRestService.get(endpoint); } checkExistingDataForImport (programImport: ProgramImport) { const endpoint = 'api/manager/programs/CheckExistingDataForImport'; return this.httpRestService.post(endpoint, programImport); } getPaymentProcessingPrograms (procType: ProcessingTypes, fSType: FundingSourceTypes): Promise { const endpoint = `api/manager/paymentbatch/programs?processingType=${procType}&fundingSourceType=${fSType}`; return this.httpRestService.get(endpoint); } }