import { APIDataImport } from '@core/typings/api/data-import.typing'; import { CSVBooleanFactory, IsDate, IsEmail, IsNumber, IsOneOf, IsString, Required, Transform, ValidateError } from '@yourcause/common'; import { FundingSourceTypes } from './budget.typing'; export class ApplicationsInKindImportModel { static 'FileType' = APIDataImport.DataImportFileType.ApplicationInKindItems; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ItemId: number; @Required() @IsNumber() ItemCount: number; } export class AwardsInKindImportModel { static FileType = APIDataImport.DataImportFileType.AwardInKindItems; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') AwardImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ItemId: number; @IsNumber() ItemCount: number; @IsNumber() ItemValue: number; } export class PaymentsInKindImportModel { static FileType = APIDataImport.DataImportFileType.PaymentInKindItems; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') PaymentImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ItemId: number; @IsNumber() ItemCount: number; } /** * TODO: Hide columns that can be selected via dropdown (programId, formId, formRevisionId) */ export class ApplicantsImportModel { static FileType = APIDataImport.DataImportFileType.Applicants; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') VendorId: string; @IsString() FirstName: string; @IsString() LastName: string; @IsEmail() Email: string; @IsString() Address: string; @IsString() Address2: string; @IsString() Country: string; @IsString() State: string; @IsString() City: string; @IsString() PostalCode: string; @IsString() @Transform((val: string) => val ? '' + val : '') PhoneNumber: string; } export class ApplicationsImportModel { static FileType = APIDataImport.DataImportFileType.Applications; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') GrantProgramId: number; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') GrantProgramCycleId: number; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicantImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') OrganizationImportId: string; @Required() @CSVBooleanFactory(false)() IsDraft: boolean; @IsDate() SubmittedDate: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') CurrentWorkFlowId: number; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') CurrentWorkFlowLevelId: number; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationStatusId: number; @Required() @IsDate() StatusUpdatedDate: string; @Required() @CSVBooleanFactory(false)() IsArchived: boolean; @IsNumber() ArchiveReasonCode: number; @Required() @IsNumber() AmountRequested: number; @IsNumber() InKindAmountRequested: number; @IsString() @Transform((val: string) => val ? '' + val : '') NomineeFirstName: string; @IsString() @Transform((val: string) => val ? '' + val : '') NomineeLastName: string; @IsString() @Transform((val: string) => val ? '' + val : '') NomineeEmail: string; @IsString() @Transform((val: string) => val ? '' + val : '') NomineePhoneNumber: string; @IsString() @Transform((val: string) => val ? '' + val : '') NomineeOrganizationImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') NomineePosition: string; @IsString() @Transform((val: string) => val ? '' + val : '') PaymentDesignation: string; } export class ApplicationFormsImportModel { static FileType = APIDataImport.DataImportFileType.ApplicationForms; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; FormId: number; FormRevisionId: number; @CSVBooleanFactory(false)() IsDraft: boolean; @IsDate() SubmittedDate: string; @Required() @IsOneOf([1, 2, 3, 4, 5], { message: { i18nKey: 'common:textPleaseEnterValidApplicationFormStatus', defaultValue: 'Please enter a valid form status. Not Sent = 1. Sent = 2. Draft Saved = 3. Submitted = 4. Revision Requested = 5.' } }) @IsNumber() ApplicationFormStatusId: number; @IsDate() StatusUpdatedDate: string; @IsString() StatusNotes: string; @IsNumber() WorkFlowLevelId: number; @Required() @IsString() @Transform((val: string) => '' + val) ApplicationImportId: string; FormData: string; } export class AwardsImportModel { static FileType = APIDataImport.DataImportFileType.Awards; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationImportId: string; @Required() @IsNumber() @Transform((val: string) => Number(val)) Amount: number; @IsString() Description: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @IsDate() AwardDate: string; @Required() @IsOneOf([1, 2], { message: { i18nKey: 'common:textPleaseEnterValidAwardType', defaultValue: 'Please enter a valid award type. Dollars = 1. Units = 2.' } }) @Transform((val: string) => +val) AwardType: number; } export class OrganizationsImportModel { static FileType = APIDataImport.DataImportFileType.Organizations; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') VendorId: string; @Required() @IsString() Name: string; @Required() @IsString() Address: string; @IsString() Address2: string; @Required() @IsString() Country: string; @IsString() State: string; @IsString() City: string; @IsString() PostalCode: string; @IsString() @Transform((val: string) => val ? '' + val : '') PhoneNumber: string; @IsString() @Transform((val: string) => val ? '' + val : '') OrgIdentification: string; @IsString() @Transform((val: string) => val ? '' + val : '') NonprofitGuid: string; } export class PaymentsImportModel { static FileType = APIDataImport.DataImportFileType.Payments; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform(val => '' + val) ApplicationImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') AwardImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') BudgetId: number; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') FundingSourceId: number; @IsDate() ScheduledDate: string; @Required() @Transform((val: string) => Number(val)) TotalAmount: number; @IsOneOf([1, 2, 3, 4, 5, 6, 7], { message: { i18nKey: 'common:textPleaseEnterValidPaymentStatus', defaultValue: 'Please enter a valid payment status. Pending = 1. Scheduled = 2. Processing = 3. Outstanding = 4. Cleared = 5. Voided = 6. Fulfilled = 7.' } }) @IsNumber() Status: number; @IsDate() StatusDate: string; @IsString() @Transform((val: string) => val ? '' + val : '') Notes: string; @IsOneOf([1, 2], { message: { i18nKey: 'common:textPleaseEnterValidFundingSourceType', defaultValue: 'Please enter a valid funding source type. Dollars = 1. Units = 2.' } }) @IsNumber() @Transform((val: string) => { return val ? Number(val) : val; }) FundingSourceType: FundingSourceTypes; @IsOneOf([1, 2, 3, 4], { message: { i18nKey: 'common:textPleaseEnterValidPaymentType', defaultValue: 'Please enter a valid payment type. Check = 1. ACH = 2. Wire transfer = 3. Other = 4.' } }) @IsNumber() @Transform((val: string) => { return val ? Number(val) : val; }) PaymentType: number; @IsString() @Transform((val: string) => val ? '' + val : '') PaymentNumber: string; @IsString() @Transform((val: string) => val ? '' + val : '') PaymentDesignation: string; } export class FormFieldResponse { static FileType = APIDataImport.DataImportFileType.ApplicationReferenceFields; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationImportId: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ReferenceFieldId: number; @IsString() @Transform((val: string) => val ? '' + val : '') Value: string; @IsString() @Transform((val: string) => val ? '' + val : '') DateValue: string; @IsString() @Transform((val: string) => val ? '' + val : '') CurrencyValue: string; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationFormsImportId: string; } export class EmployeeApplicantInfoModel { static FileType = APIDataImport.DataImportFileType.EmployeeApplicantInfo; @Required() @IsString() @Transform((val: string) => val ? '' + val : '') ImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') Region: string; @IsString() @Transform((val: string) => val ? '' + val : '') EmployeeTypeCode: string; @IsString() @Transform((val: string) => val ? '' + val : '') ReportGroupName: string; @IsString() @Transform((val: string) => val ? '' + val : '') Division: string; @IsString() @Transform((val: string) => val ? '' + val : '') DepartmentName: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar1: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar2: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar3: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar4: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar5: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar6: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar7: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar8: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar9: string; @IsString() @Transform((val: string) => val ? '' + val : '') CustomChar10: string; @IsString() @Transform((val: string) => val ? '' + val : '') ExternalEmployeeId2: string; @IsString() @Transform((val: string) => val ? '' + val : '') FullTimeCodeId: string; @IsString() @Transform((val: string) => val ? '' + val : '') HireDate: string; @IsString() @Transform((val: string) => val ? '' + val : '') JobCodeId: string; @IsString() @Transform((val: string) => val ? '' + val : '') SiteCodeId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ExternalEmployeeId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ExternalSsoId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ApplicationImportId: string; @IsString() @Transform((val: string) => val ? '' + val : '') ApplicantImportId: string; } export interface IndividualValidationResult { errors: ValidateError[]; row: T; } export interface ValidationResult { validationResults: IndividualValidationResult[]; unusedColumns: string[]; } export type HistoricalDataImportModel = (typeof ApplicationsInKindImportModel)| (typeof PaymentsInKindImportModel)| (typeof AwardsInKindImportModel)| (typeof ApplicantsImportModel)| (typeof ApplicationsImportModel)| (typeof ApplicationFormsImportModel)| (typeof AwardsImportModel)| (typeof OrganizationsImportModel)| (typeof PaymentsImportModel)| (typeof FormFieldResponse)| (typeof EmployeeApplicantInfoModel); export type HistoricalDataImportModelInstance = ApplicationsInKindImportModel| PaymentsInKindImportModel| AwardsInKindImportModel| ApplicantsImportModel| ApplicationsImportModel| ApplicationFormsImportModel| AwardsImportModel| OrganizationsImportModel| PaymentsImportModel| FormFieldResponse| EmployeeApplicantInfoModel; export const HistoricalDataImportModels = [ ApplicationsInKindImportModel, PaymentsInKindImportModel, AwardsInKindImportModel, ApplicantsImportModel, ApplicationFormsImportModel, ApplicationsImportModel, PaymentsImportModel, AwardsImportModel, OrganizationsImportModel, FormFieldResponse, EmployeeApplicantInfoModel ];