| import { Form } from '../../e2elib/lib/src/pageobjects/form.component'; | 
| import { ListBase } from '../../libappbase/listbase'; | 
|   | 
| export class FormPeriod extends Form { | 
|   public lstStartOfPlanning = new ListStartOfPlanning(); | 
|   public lstPeriod = new ListPeriod(); | 
|   private readonly _months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; | 
|   | 
|   public constructor() { | 
|     super('FormPeriods'); | 
|   } | 
|   | 
|   /** | 
|    * Get the start of planning date | 
|    * | 
|    * @returns Start date of planning date | 
|    */ | 
|   public async getStartOfPlanningDate(): Promise<Date> { | 
|     const row = await this.lstStartOfPlanning.getRowByIndex(0); | 
|     const cell = await row.getCell('Start of planning'); | 
|     const startOfPlanning = await cell.getValue(); | 
|     const dateValues = startOfPlanning.split('-'); | 
|     const startOfPlanningDate = new Date(); | 
|     startOfPlanningDate.setFullYear(Number(dateValues[2]), this._months.indexOf(dateValues[1].toUpperCase()), Number(dateValues[0])); | 
|     return startOfPlanningDate; | 
|   } | 
|   | 
|   /** | 
|    * Get the end of planning date, calculated by start of planning + future planning periods | 
|    * | 
|    * @returns End date of planning date | 
|    */ | 
|   public async getEndOfPlanningDate(): Promise<Date> { | 
|     const startOfPlanningDate = await this.getStartOfPlanningDate(); | 
|     const endOfPlanningDate = new Date(startOfPlanningDate); | 
|     const futurePeriod = await this.lstPeriod.getFuturePeriodByName('Planning periods'); | 
|     const month = endOfPlanningDate.getMonth() + futurePeriod; | 
|     endOfPlanningDate.setMonth(month); | 
|     return endOfPlanningDate; | 
|   } | 
|   | 
|   /** | 
|    * Get all the necessary values for the planning period. | 
|    * | 
|    * @returns PlanningPeriods | 
|    */ | 
|   public async getStartAndEndOfPlanning(): Promise<PlanningPeriods> { | 
|     const startOfPlanningDate = await this.getStartOfPlanningDate(); | 
|     const endOfPlanningDate = await this.getEndOfPlanningDate(); | 
|     const sopYear = startOfPlanningDate.getFullYear().toString(); | 
|     const eopYear = endOfPlanningDate.getFullYear().toString(); | 
|     const sopString = `${startOfPlanningDate.getDate().toString()}-${startOfPlanningDate.toLocaleString(undefined, { | 
|       month: 'short', | 
|     })}-${sopYear}`; | 
|     const eopString = `${endOfPlanningDate.getDate().toString()}-${endOfPlanningDate.toLocaleString(undefined, { | 
|       month: 'short', | 
|     })}-${eopYear}`; | 
|   | 
|     return { startOfPlanningDate, endOfPlanningDate, sopYear, eopYear, sopString, eopString }; | 
|   } | 
| } | 
|   | 
| export interface PlanningPeriods { | 
|   startOfPlanningDate: Date; | 
|   endOfPlanningDate: Date; | 
|   sopYear: string; | 
|   eopYear: string; | 
|   sopString: string; | 
|   eopString: string; | 
| } | 
|   | 
| export class ListStartOfPlanning extends ListBase { | 
|   public constructor() { | 
|     super('ListStartOfPlanning'); | 
|   } | 
| } | 
|   | 
| export class ListPeriod extends ListBase { | 
|   public constructor() { | 
|     super('ListPeriodSpec'); | 
|   } | 
|   | 
|   /** | 
|    * Get future periods number of period by name | 
|    * | 
|    * @param periodName Name of period | 
|    * @returns Future period number in months | 
|    */ | 
|   public async getFuturePeriodByName(periodName: string): Promise<number> { | 
|     const periodRow = await this.getRowByValue([{ columnID: 'Name', value: periodName }]); | 
|     return Number(await (await periodRow.getCell('# Future periods')).getValue()); | 
|   } | 
| } |