import { DialogBase } from '../../libappbase/dialogbase'; 
 | 
import { EditField } from '../../e2elib/lib/src/pageobjects/editfield.component'; 
 | 
import { compareDateFromDateTimeSelector } from '../../libappbase/timeutils'; 
 | 
import { DateTimeSelectorSOP } from '../../libappsop/datetimeselectorsop'; 
 | 
import { DropDownListSOP } from '../../libappsop/dropdownlistsop'; 
 | 
import { DropDownStringListSOP } from '../../libappsop/dropdownstringlistsop'; 
 | 
  
 | 
export class DialogOperationCost extends DialogBase { 
 | 
  public ddlAccount = new DropDownListSOP('DropDownListAccount'); 
 | 
  public ddlCostDriver = new DropDownStringListSOP('DropDownStringListCostDriver'); 
 | 
  public ddlOperation = new DropDownListSOP('DropDownListOperation'); 
 | 
  public dtsStart = new DateTimeSelectorSOP('DateSelectorCostStart'); 
 | 
  public efCost = new EditField('EditFieldCost'); 
 | 
  
 | 
  public constructor() { 
 | 
    super('DialogCreateEditOperationCost', 'btnOk', 'btnCancel'); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Update field value in the dialog 
 | 
   * 
 | 
   * @param account Account field value 
 | 
   * @param costDriver Cost driver field value 
 | 
   * @param operation Operation field value 
 | 
   * @param startDate Start field value 
 | 
   * @param cost Cost field value 
 | 
   */ 
 | 
  public async updateDialog(account?: string, costDriver?: string, operation?: string, startDate?: Date, cost?: number): Promise<void> { 
 | 
    if (account !== undefined) { 
 | 
      await this.ddlAccount.selectItemSOP(account); 
 | 
    } 
 | 
    if (costDriver !== undefined) { 
 | 
      await this.ddlCostDriver.selectItem(costDriver); 
 | 
    } 
 | 
    if (operation !== undefined) { 
 | 
      await this.ddlOperation.selectItemSOP(operation); 
 | 
    } 
 | 
    if (startDate !== undefined) { 
 | 
      await this.dtsStart.setDate(startDate); 
 | 
    } 
 | 
    if (cost !== undefined) { 
 | 
      await this.efCost.sendInput(cost.toString()); 
 | 
    } 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Verify the field values in the dialog is expected, pass in undefined if the verification of certain field is not needed 
 | 
   * 
 | 
   * @param account Account field value 
 | 
   * @param costDriver Cost driver field value 
 | 
   * @param operation Operation field value 
 | 
   * @param startDate Start date field value 
 | 
   * @param cost Cost field value 
 | 
   */ 
 | 
  public async verifyDialogValue(account?: string, costDriver?: string, operation?: string, startDate?: Date, cost?: number): Promise<string[]> { 
 | 
    const feedbacks: string[] = []; 
 | 
    let actual = ''; 
 | 
    const pushFeedback = (dialogField: string, expectedValue: string, actualValue: string): void => { 
 | 
      if (expectedValue !== actual) { 
 | 
        feedbacks.push(`${dialogField} should be ${expectedValue}, but actual value is "${actualValue}"`); 
 | 
      } 
 | 
    }; 
 | 
    if (account) { 
 | 
      actual = await this.ddlAccount.getSelectedString(); 
 | 
      pushFeedback('Account', account, actual); 
 | 
    } 
 | 
    if (costDriver) { 
 | 
      actual = await this.ddlCostDriver.getSelectedString(); 
 | 
      pushFeedback('Cost driver', costDriver, actual); 
 | 
    } 
 | 
    if (operation) { 
 | 
      actual = await this.ddlOperation.getSelectedString(); 
 | 
      pushFeedback('Operation', operation, actual); 
 | 
    } 
 | 
    if (startDate) { 
 | 
      const [isMatch, feedback] = await compareDateFromDateTimeSelector(startDate, this.dtsStart, true); 
 | 
      if (!isMatch) { 
 | 
        feedbacks.push(feedback); 
 | 
      } 
 | 
    } 
 | 
    if (cost !== undefined && cost.toString() !== (await this.efCost.getText())) { 
 | 
      actual = await this.efCost.getText(); 
 | 
      pushFeedback('Cost', cost.toString(), actual); 
 | 
    } 
 | 
    return feedbacks; 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Get precondition feedback text on the OK button 
 | 
   * 
 | 
   * @returns feedback text in string 
 | 
   */ 
 | 
  public async getDialogFeedback(): Promise<string> { 
 | 
    return this.btnOk.getTooltip(); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * OK button is enabled, click on it to close dialog. 
 | 
   * 
 | 
   * @returns True = button is enabled; False = button is disabled. 
 | 
   */ 
 | 
  public async closeDialog(): Promise<boolean> { 
 | 
    const canClickOK = await this.clickOK(); 
 | 
    return canClickOK; 
 | 
  } 
 | 
} 
 |