import { Form } from '../../e2elib/lib/src/pageobjects/form.component';
|
import { ListBase } from '../../libappbase/listbase';
|
import { ListRow } from '../../e2elib/lib/src/pageobjects/list/listrow.component';
|
import { DialogInventoryCost } from '../dialogs/dialog.inventorycost';
|
import { asyncEvery } from '../../libappbase/utils';
|
import { CheckboxBase } from '../../libappbase/checkboxbase';
|
import { QContextMenu } from '../../e2elib/lib/api/pageobjects/qcontextmenu.component';
|
|
/**
|
* Inventory Cost PISP form.
|
*/
|
export class FormInventoryCosts extends Form {
|
public lstAccountCosts = new ListAccountCosts();
|
public cbFilterByAccounts = new CheckboxBase('cbFilterByAccounts');
|
|
public constructor() {
|
super('FormInventoryCosts');
|
}
|
|
/**
|
* Toggle filter by account on or off
|
*
|
* @param isToggleOn Indicate to toggle on or off
|
*/
|
public async toggleFilterByAccount(isToggleOn: boolean): Promise<void> {
|
await this.cbFilterByAccounts.toggle(isToggleOn);
|
}
|
}
|
|
/**
|
* Inventory PISP list in Inventory Cost PISP form.
|
*/
|
export class ListAccountCosts extends ListBase {
|
public dlgInventoryCost = new DialogInventoryCost();
|
public cmMenu = new QContextMenu('lsContextMenuAccCosts');
|
|
public constructor() {
|
super('lsAccountCosts');
|
}
|
|
/**
|
* Get inventory cost in list by product name
|
*
|
* @param product Product name
|
* @returns ListRow that match the product name
|
*/
|
public async getInventoryCostByName(product: string): Promise<ListRow> {
|
return this.getRowByValue([{ columnID: ListColumnAccountCosts.Product, value: product }]);
|
}
|
|
/**
|
* Open create inventory cost dialog by context menu, field in value and confirm the dialog
|
*
|
* @param account Account field value
|
* @param costDriver Cost driver field value
|
* @param product Product field value
|
* @param stockingPoint Stocking point field value
|
* @param startDate Start date field value
|
* @param cost Cost field value
|
* @returns Boolean indicates whether the create action is successful or not
|
*/
|
public async createNewInventoryCost(account: string, costDriver: string, product: string, stockingPoint: string, startDate: Date, cost: number): Promise<boolean> {
|
await this.rightClick(undefined, this.cmMenu, 'MenuCreate');
|
await this.dlgInventoryCost.waitUntilPresent();
|
await this.dlgInventoryCost.updateDialog(account, costDriver, product, stockingPoint, startDate, cost);
|
return this.dlgInventoryCost.closeDialog();
|
}
|
|
/**
|
* Verify if all rows has correct value in the column
|
*
|
* @param rows ListRows to verify
|
* @param columnName Name of the column to verify
|
* @param value Expected value of the column
|
*/
|
public async matchColumnValueFromRows(rows: ListRow[], columnName: string, value: string): Promise<boolean> {
|
const cellValues = await this.getCellValueFromRow(columnName, rows);
|
const result = await asyncEvery(cellValues, async (cellValue: string) => Promise.resolve(cellValue === value));
|
return result;
|
}
|
|
/**
|
* Find inventory cost by value from the list
|
*
|
* @param product Product column value
|
* @param stockingPoint Stocking point column value
|
* @param account Account column value
|
* @param costDriver Cost driver column value
|
* @param cost Cost column value
|
*/
|
public async findInventoryCost(product: string, stockingPoint: string, account: string, costDriver: string, cost: number): Promise<ListRow | undefined> {
|
const result = await this.getRowByValue([
|
{ columnID: ListColumnAccountCosts.Product, value: product },
|
{ columnID: ListColumnAccountCosts.StockingPoint, value: stockingPoint },
|
{ columnID: ListColumnAccountCosts.Account, value: account },
|
{ columnID: ListColumnAccountCosts.CostDriver, value: costDriver },
|
{ columnID: ListColumnAccountCosts.Cost, value: cost.toString() },
|
]).catch(() => undefined);
|
|
return result;
|
}
|
}
|
|
export enum ListColumnAccountCosts {
|
Product = 'Product',
|
StockingPoint = 'Stocking point',
|
Account = 'Account',
|
CostDriver = 'Cost driver',
|
Cost = 'Cost',
|
}
|