import { Form } from '../../e2elib/lib/src/pageobjects/form.component';
|
import { ListRow } from '../../e2elib/lib/src/pageobjects/list/listrow.component';
|
import { DialogAccount } from '../dialogs/dialog.account';
|
import { ListSOP } from '../../libappsop/listsop';
|
|
export class FormAccount extends Form {
|
public listAccount = new ListAccount();
|
|
public constructor() {
|
super('FormAccountStructure');
|
}
|
}
|
|
export class ListAccount extends ListSOP<DialogAccount, ListAccountColumn> {
|
public static readonly title = 'Accounts';
|
public constructor() {
|
super('ListAccountStructure', new DialogAccount());
|
|
// Set primary key column name(s), to display in error message when assert fails
|
this.rowPrimaryColumnNames = { Name: '' };
|
}
|
|
/**
|
* Check if the account name exist in the rows
|
*
|
* @param accName Name column value
|
* @param rows Array of ListRow to find from
|
*/
|
public async isAccountExistInRows(accName: string, rows: ListRow[]): Promise<boolean> {
|
for (const row of rows) {
|
const rowName = await this.getCellValueFromRow(ListAccountStructureColumn.Name, row);
|
if (rowName === accName) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
/**
|
* Find account by cost driver
|
*
|
* @param costDriver Cost driver column value
|
* @returns Return an array of ListRow
|
*/
|
public async findAccountByCostDriver(costDriver: string): Promise<ListRow[]> {
|
const results: ListRow[] = [];
|
const rows = await this.getAllRows();
|
for (const row of rows) {
|
if ((await (await row.getCell(ListAccountStructureColumn.DefaultCostDriver)).getValue()) === costDriver) {
|
results.push(row);
|
}
|
}
|
return results;
|
}
|
|
/**
|
* Create account by passing neccessary field values
|
*
|
* @param parentAccount Parent account field value
|
* @param name Name field value
|
* @param reportType Report type field value
|
* @param budget Budget field value
|
* @param costDriver Cost driver field value
|
* @param cost Cost field value
|
* @param timeUnit Time unit field value
|
* @param lengthOfTime Length of time field value
|
* @returns Boolean to indicate if it is successful
|
*/
|
public async createAccount(
|
parentAccount?: string,
|
name?: string,
|
reportType?: string,
|
budget?: string,
|
costDriver?: string,
|
cost?: string,
|
timeUnit?: string,
|
lengthOfTime?: string,
|
): Promise<boolean> {
|
const [dlg] = await this.selectContextMenu(listAccountContextMenuItem.Create);
|
|
await dlg.updateDialogValues({
|
ParentAccountName: parentAccount,
|
Name: name,
|
ReportType: reportType,
|
Budget: budget,
|
CostDriver: costDriver,
|
Cost: cost,
|
TimeUnit: timeUnit,
|
LengthOfTime: lengthOfTime,
|
});
|
return dlg.clickOK();
|
}
|
|
/**
|
* Check if the cost driver of the account matches with any of the cost drivers
|
*
|
* @param accName Name column value
|
* @param costDrivers Cost driver column value
|
*/
|
public async isAccountCostDriverMatch(accName: string, costDrivers: string[]): Promise<boolean> {
|
const row = await this.getRowByValue([{ columnID: ListAccountStructureColumn.Name, value: accName }]);
|
const rowCostDriver = await (await row.getCell(ListAccountStructureColumn.DefaultCostDriver)).getValue();
|
return costDrivers.indexOf(rowCostDriver) > -1;
|
}
|
|
/**
|
* Open account dialog via "Edit" context menu
|
*
|
* @returns account dialog
|
*/
|
public async openAcountDialogViaEditContextMenu(listRow: ListRow): Promise<DialogAccount> {
|
const [dlg] = await this.selectContextMenu(listAccountContextMenuItem.Edit, listRow);
|
return dlg;
|
}
|
}
|
|
export enum ListAccountStructureColumn {
|
AccountType = 'Account type',
|
ReportType = 'Report type',
|
Name = 'Name',
|
DefaultCostDriver = 'Default cost driver',
|
DefaultCost = 'Default cost',
|
TimeUnit = 'Time unit',
|
Budget = 'Budget',
|
}
|
|
const listAccountContextMenuItem = {
|
Create: { ContextMenu: 'listContextMenuAccount', Name: 'MenuCreate', Label: 'Create' },
|
Edit: { ContextMenu: 'listContextMenuAccount', Name: 'MenuEdit', Label: 'Edit' },
|
};
|
|
export { listAccountContextMenuItem as ListAccountContextMenuItem };
|
|
// Transition to new S&OP page objects, so suffix with "2". Once done refactoring, will remove "2" as above column enum will be removed
|
export interface ListAccountColumn {
|
Name?: string;
|
'Account type'?: string;
|
'Report type'?: string;
|
'Default cost driver'?: string;
|
'Default cost'?: string;
|
'Time unit'?: string;
|
Budget?: string;
|
}
|
|
export enum ListAccountTypeImage {
|
Preferences = 'PREFERENCES',
|
}
|