import { Base } from './base'; import { Uploadable } from './uploadable'; import { Installment } from './installments'; import { CompanyMin } from './companyMin'; import { Department } from './workInformation'; export enum PeriodTypeEnum { notSet = 0, Lock = 1, permanentSaving = 2, retirementSaving = 3, shortSavingFund = 4, longSavingFund = 5, payroll = 6 } export class PeriodDate extends Base { startDate: Date; endDate: Date; indeterminate: boolean; weekNumber: number; biWeekNumber: number; active: boolean; scheduleDay: number; appliesToWageType: string; constructor(data: any | null = null) { super(); this.startDate = new Date(); this.endDate = new Date(); this.indeterminate = false; this.weekNumber = 0; this.biWeekNumber = 0; this.active = false; this.scheduleDay = 0; this.appliesToWageType = ''; this.load(data); if (data) { if (!data.endDate) { this.endDate = null; } } } get isTodayAScheduleDay(): boolean { const today = new Date(); return today.getDay() === this.scheduleDay; } get scheduleDateToDay(): any { const days = [{ dateDay: 1, dateString: 'Lunes' }, { dateDay: 2, dateString: 'Martes' }, { dateDay: 3, dateString: 'Miércoles' }, { dateDay: 4, dateString: 'Jueves' }, { dateDay: 5, dateString: 'Viernes' }, { dateDay: 6, dateString: 'Sábado' }, { dateDay: 7, dateString: 'Domingo' }]; const day = days.find(element => element.dateDay === this.scheduleDay); return day; } } export class InvestmentParameters extends Base { refunds: number; bankAdjustment: number; loansRefundAmount: number; theoreticalAvailableAmount: number; constructor(data: any | null = null) { super(); this.refunds = 0.0; this.bankAdjustment = 0.0; this.loansRefundAmount = 0.0; this.theoreticalAvailableAmount = 0.0; this.load(data); } } export class FundParameters extends Base { fileUploaded: Uploadable; constructor(data: any | null = null) { super(); this.fileUploaded = new Uploadable(); this.load(data); } } export class PayrollParameters extends Base { fileUploaded: Uploadable; wageType: string; savingType: PeriodTypeEnum; constructor(data: any | null = null) { super(); this.fileUploaded = new Uploadable(); this.wageType = ''; this.savingType = PeriodTypeEnum.notSet; this.load(data); } } export class SavingParameters extends Base { weeklyMin: number; biWeeklyMin: number; fileUploaded: Uploadable; constructor(data: any | null = null) { super(); this.weeklyMin = 0.0; this.biWeeklyMin = 0.0; this.fileUploaded = new Uploadable(); this.load(data); } } export class LoanParameters extends Base { extraLoanAllowed: boolean; extraLoanPercentage: number; extraLoanFALPAllowed: boolean; extraLoanFALPPercentage: number; weeklySavingInterestsRate: number; weeklyNonSavingInterestsRate: number; biWeeklySavingInterestsRate: number; biWeeklyNonSavingInterestsRate: number; maxEmployeeWageLoan: number; maxPayments: Installment; fileUploaded: Uploadable; constructor(data: any | null = null) { super(); this.extraLoanAllowed = false; this.extraLoanPercentage = 0; this.extraLoanFALPAllowed = false; this.extraLoanFALPPercentage = 0; this.maxEmployeeWageLoan = 0; this.weeklySavingInterestsRate = 0; this.biWeeklySavingInterestsRate = 0; this.weeklyNonSavingInterestsRate = 0; this.biWeeklyNonSavingInterestsRate = 0; this.maxPayments = new Installment(); this.fileUploaded = new Uploadable(); this.load(data); } } export class PeriodBase extends Base { periodID: string; periodTitle: string; savingParameters: SavingParameters; loanParameters: LoanParameters; investmentParameters: InvestmentParameters; fundParameters: FundParameters; payrollParameters: PayrollParameters; wageType: string; active: boolean; type: PeriodTypeEnum; constructor(data: any | null = null) { super(); this.periodID = ''; this.periodTitle = ''; this.savingParameters = new SavingParameters(); this.loanParameters = new LoanParameters(); this.investmentParameters = new InvestmentParameters(); this.fundParameters = new FundParameters(); this.payrollParameters = new PayrollParameters(); this.active = false; this.type = PeriodTypeEnum.notSet; this.load(data); } } export class Period extends PeriodBase { registrationDates: Array; withdrawDates: Array; loanDates: Array; lockDates: Array; investmentDates: Array; fundDates: Array; payrollDates: Array; includedCompanies: Array; excludedDepartment: Array; constructor(data: any | null = null) { super(); this.registrationDates = new Array(); this.withdrawDates = new Array(); this.loanDates = new Array(); this.lockDates = new Array(); this.investmentDates = new Array(); this.fundDates = new Array(); this.payrollDates = Array(); this.includedCompanies = Array(); this.excludedDepartment = Array(); this.load(data); if (data) { if (data.registrationDates) { this.registrationDates = data.registrationDates.map(rd => new PeriodDate(rd)); } if (data.withdrawDates) { this.withdrawDates = data.withdrawDates.map(rd => new PeriodDate(rd)); } if (data.loanDates) { this.loanDates = data.loanDates.map(rd => new PeriodDate(rd)); } if (data.investmentDates) { this.investmentDates = data.investmentDates.map(rd => new PeriodDate(rd)); } if (data.lockDates) { this.lockDates = data.lockDates.map(rd => new PeriodDate(rd)); } if (data.payrollDates) { this.payrollDates = data.payrollDates.map(rd => new PeriodDate(rd)); } if (data.includedCompanies) { this.includedCompanies = data.includedCompanies.map(ic => new CompanyMin(ic)); } if (data.excludedDepartment) { this.excludedDepartment = data.excludedDepartment.map(ed => new Department(ed)); } } } }