import { Injectable } from '@angular/core'; import { HttpRestService } from '@core/services/http-rest.service'; import { ApplicantFromSearch } from '@core/typings/applicant.typing'; import { BaseEmailOptionsModel, EmailOptionsModelForSave } from '@features/system-emails/email.typing'; import { APIResultData, PaginationOptions } from '@yourcause/common'; import { ApplicantFromDistributionList, AvailableApplicant, CreateInvitationListPayload, DistributionListApplicant, DistributionListRecord, InvitationDetail, InvitationRecord, ScheduleInvitee, ScheduleRecord, SendApplicantInvitePayload, SendInviteListModalResponse } from './invitation.typing'; @Injectable({ providedIn: 'root' }) export class InvitationResources { constructor ( private httpRestService: HttpRestService ) { } getInvitations ( paginationOptions: PaginationOptions ): Promise> { const endpoint = 'api/manager/programs/invitations/paginated'; return this.httpRestService.post(endpoint, { paginationOptions }); } getSchedules ( paginationOptions: PaginationOptions ): Promise> { const endpoint = 'api/manager/distributionlists/schedule/paginated'; return this.httpRestService.post(endpoint, { paginationOptions }); } resendInvitation ( invitationId: number, emailOptionsModel: BaseEmailOptionsModel ) { const endpoint = 'api/manager/programs/invitations/resend'; return this.httpRestService.post(endpoint, { invitationId, emailOptionsModel }); } sendInvitationReminder ( invitationId: number, clientEmailTemplateId: number, emailOptionsModel: EmailOptionsModelForSave ) { const endpoint = 'api/manager/programs/invitations/reminder'; return this.httpRestService.post(endpoint, { invitationId, clientEmailTemplateId, emailOptionsModel }); } sendInvitationToExistingApplicant (payload: SendApplicantInvitePayload) { const endpoint = 'api/manager/programs/invitations/send/internal'; return this.httpRestService.post(endpoint, payload); } sendInvitationToNewApplicant (payload: SendApplicantInvitePayload) { const endpoint = 'api/manager/programs/invitations/send/external'; return this.httpRestService.post(endpoint, payload); } sendInvitationToDistributionList ( payload: CreateInvitationListPayload ) { const endpoint = 'api/manager/programs/invitations/distributionlist'; return this.httpRestService.post(endpoint, payload); } updateSchedule ( payload: SendInviteListModalResponse, scheduleId: number ) { const endpoint = `api/manager/distributionlists/schedule/${scheduleId}/edit`; return this.httpRestService.post(endpoint, { grantProgramId: payload.programId, grantProgramCycleId: payload.cycleId, clientEmailTemplateId: payload.clientEmailTemplateId, scheduledDate: payload.scheduledDate }); } createOrUpdateDistributionList ( name: string, description: string, distributionListId?: number ): Promise { const endpoint = 'api/manager/distributionlists/createAndEdit'; return this.httpRestService.post(endpoint, { name, description, distributionListId }); } async getAllDistributionLists (): Promise { const paginationOptions: PaginationOptions = { rowsPerPage: 1000, pageNumber: 1, sortColumns: [], filterColumns: [], orFilterColumns: [], retrieveTotalRecordCount: true, returnAll: true }; const response = await this.getDistributionLists(paginationOptions); return response.records; } getDistributionLists ( paginationOptions: PaginationOptions ): Promise> { const endpoint = 'api/manager/distributionlists/paginated'; return this.httpRestService.post(endpoint, { paginationOptions }); } getDistributionListApplicants ( id: number, paginationOptions: PaginationOptions ): Promise> { const endpoint = `api/manager/distributionlists/${id}/applicants/paginated`; return this.httpRestService.post(endpoint, { paginationOptions }); } getAvailableApplicants ( id: number, paginationOptions: PaginationOptions, grantProgramId: number ): Promise> { const endpoint = `api/manager/distributionlists/${id}/avaliableapplicants/paginated`; return this.httpRestService.post(endpoint, { paginationOptions, grantProgramId }); } removeApplicantsFromList ( distributionListId: number, distributionListApplicantIds: number[] ) { const endpoint = 'api/manager/distributionlists/externalapplicant/remove'; return this.httpRestService.post(endpoint, { distributionListId, distributionListApplicantIds }); } addExistingApplicantsToList ( distributionListId: number, applicantIds: number[] ) { const endpoint = 'api/manager/distributionlists/internalapplicants/add'; return this.httpRestService.post(endpoint, { distributionListId, applicantIds }); } addNewApplicantToList ( distributionListId: number, applicant: ApplicantFromSearch ) { const endpoint = 'api/manager/distributionlists/externalapplicant/add'; return this.httpRestService.post(endpoint, { distributionListId, firstName: applicant.firstName, lastName: applicant.lastName, email: applicant.email, isEmployeeOfClient: applicant.isEmployeeOfClient }); } deleteSchedule ( distributionListId: number ) { const endpoint = `api/manager/distributionlists/schedule/delete/${distributionListId}`; return this.httpRestService.delete(endpoint); } getScheduleInvitees ( paginationOptions: PaginationOptions, scheduleId: number, distributionListId: number ) { const endpoint = `api/manager/distributionlists/schedule/${scheduleId}/applicants/paginated?distributionListId=${distributionListId}`; return this.httpRestService.post(endpoint, { paginationOptions }); } deleteDistributionList (distributionListId: number) { const endpoint = `api/manager/distributionlists/${distributionListId}`; return this.httpRestService.delete(endpoint); } getInvitationInfo (invitationId: number): Promise { const endpoint = `api/portal/applications/invitation/${invitationId}/info`; return this.httpRestService.get(endpoint); } exportDistributionList ( distributionListId: number ): Promise { const endpoint = `/api/manager/distributionlists/Export/${distributionListId}`; return this.httpRestService.post(endpoint, {}); } importDistributionList ( distributionListId: number, file: Blob ) { const endpoint = `/api/manager/distributionlists/UploadCsvList/${distributionListId}`; return this.httpRestService.postFile(endpoint, file); } }