/** 
 | 
 * @file        ADSO-50243 
 | 
 * @description Batch edit customer orders 
 | 
 * @author      Clarence (ccn7@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
import { AppMP, StepAppMP } from '../../libmp/appmp'; 
 | 
import { DataMetalBaseProductName } from '../../libmp/data/data.product'; 
 | 
import { DataMetalBaseSalesSegmentName } from '../../libmp/data/data.salessegment'; 
 | 
import { DataMetalStockingPointName } from '../../libmp/data/data.stockingpoint'; 
 | 
import { DialogBatchEditActionLink, StepDialog } from '../../libappsop/dialogsop'; 
 | 
import { StepList } from '../../libappsop/listsop'; 
 | 
import { ListCustomerOrdersColumn, ListCustomerOrdersContextMenuItem } from '../../libmp/forms/form.customerorders'; 
 | 
import { DialogCustomerOrder, DialogCustomerOrderFields } from '../../libmp/dialogs/dialog.customerorder'; 
 | 
import { StepActionBarPage } from '../../libappsop/actionbarpagesop'; 
 | 
import { startOfPlanningYear } from '../../libmp/data/data.period'; 
 | 
  
 | 
describe('ADSO-50243 - Batch edit customer orders', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const scenarioToSelect = 'ADSO-50251'; 
 | 
  const listCustomerOrders = appMP.viewCustomerOrders.formCustomerOrders.listCustomerOrders; 
 | 
  const janSOP = `1-Jan-${startOfPlanningYear}`; 
 | 
  const febSOP = `1-Feb-${startOfPlanningYear}`; 
 | 
  const janSOPPlus1 = `1-Jan-${startOfPlanningYear + 1}`; 
 | 
  let dlgCustomerOrder: DialogCustomerOrder; 
 | 
  // Edit the one with quantity 999 as the others are used for other tests 
 | 
  const editRows: ListCustomerOrdersColumn[] = [{'Sales segment': DataMetalBaseSalesSegmentName.AudiA8, Product: DataMetalBaseProductName.BCCBWide, 'Stocking point': DataMetalStockingPointName.Europe, 'Order date': janSOP, Quantity: '999'}, 
 | 
                                                {'Sales segment': DataMetalBaseSalesSegmentName.AudiA8, Product: DataMetalBaseProductName.BCCBWide, 'Stocking point': DataMetalStockingPointName.Europe, 'Order date': febSOP, Quantity: '999'}]; 
 | 
  const verifyDlgBatchEditEnabled: DialogCustomerOrderFields = {SalesSegment: 'false', Product: 'false', StockingPoint: 'false', OrderDate: 'false', Price: 'false', Quantity: 'false', 
 | 
                                                                CustomerName: 'false', CustomerID: 'false', OrderID: 'false', OrderLineID: 'false'}; 
 | 
  const updateDlgBatchValues: DialogCustomerOrderFields = {SalesSegment: DataMetalBaseSalesSegmentName.BMWi3, Product: DataMetalBaseProductName.BCCanBody, Quantity: '9999', OrderDate: janSOPPlus1}; 
 | 
  const updateDlgBatchValuesOrderRelated: DialogCustomerOrderFields = {OrderID: 'A1', OrderLineID: 'A2', CustomerID: 'A3', CustomerName: 'A4'}; 
 | 
  const verifyRow1: ListCustomerOrdersColumn = {'Sales segment': DataMetalBaseSalesSegmentName.BMWi3, Product: DataMetalBaseProductName.BCCanBody, 'Stocking point': DataMetalStockingPointName.Europe, 'Order date': janSOPPlus1, Quantity: '9,999'}; 
 | 
  const verifyRow2: ListCustomerOrdersColumn = {'Sales segment': DataMetalBaseSalesSegmentName.BMWi3, Product: DataMetalBaseProductName.BCCanBody, 'Stocking point': DataMetalStockingPointName.Europe, 'Order date': janSOPPlus1, Quantity: '9,999'}; 
 | 
  const verifyRow1OrderRelated: ListCustomerOrdersColumn = {...verifyRow1, 'Order ID': 'A1', 'Order line ID': 'A2', 'Customer ID': 'A3', 'Customer name': 'A4'}; 
 | 
  const verifyRow2OrderRelated: ListCustomerOrdersColumn = {...verifyRow2, 'Order ID': 'A1', 'Order line ID': 'A2', 'Customer ID': 'A3', 'Customer name': 'A4'}; 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.resetActiveView(appMP.viewCustomerOrders); 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${StepAppMP.selectScenario(scenarioToSelect)}`, async () => { 
 | 
    await appMP.selectScenario(scenarioToSelect); 
 | 
  }); 
 | 
  
 | 
  it(`Step 2 - Open view ${appMP.viewCustomerOrders.viewPath}.`, async () => { 
 | 
    await appMP.viewCustomerOrders.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - ${StepList.selectRowsAndClickMenu(listCustomerOrders.title, editRows, ListCustomerOrdersContextMenuItem.Edit.Label)}`, async () => { 
 | 
    const rows = await listCustomerOrders.selectListRows(editRows); 
 | 
  
 | 
    [dlgCustomerOrder] = await listCustomerOrders.selectContextMenu(ListCustomerOrdersContextMenuItem.Edit, rows); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - ${StepDialog.verifyBatchEditEnabled(DialogCustomerOrder.title, verifyDlgBatchEditEnabled)}`, async () => { 
 | 
    await dlgCustomerOrder.verifyBatchEditEnabled(verifyDlgBatchEditEnabled); 
 | 
  }); 
 | 
  
 | 
  it(`Step 5 - ${StepDialog.clickTab('Advanced')} ${StepDialog.verifyBatchEditEnabled(DialogCustomerOrder.title, {ExcludeFromFulfillmentKPI: 'false', IsEligibleNetting: 'false', IsFirmed: 'false'})}`, async () => { 
 | 
    await dlgCustomerOrder.pnlAdvanced.clickTab(); 
 | 
    await dlgCustomerOrder.verifyBatchEditEnabled({ExcludeFromFulfillmentKPI: 'false', IsEligibleNetting: 'false', IsFirmed: 'false'}); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - ${StepDialog.clickTab('General')} ${StepDialog.updateDialogValuesBatchEdit(DialogCustomerOrder.title, DialogBatchEditActionLink.EnableBatchEdit, updateDlgBatchValues)}`, async () => { 
 | 
    await dlgCustomerOrder.pnlGeneral.clickTab(); 
 | 
    await dlgCustomerOrder.updateDialogValuesBatchEdit(DialogBatchEditActionLink.EnableBatchEdit, updateDlgBatchValues); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgCustomerOrder.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 8 - ${StepList.verifyRowExists(listCustomerOrders.title, verifyRow1)} ${StepList.verifyRowExists(listCustomerOrders.title, verifyRow2)}`, async () => { 
 | 
    await listCustomerOrders.verifyRowExists(verifyRow1); 
 | 
    await listCustomerOrders.verifyRowExists(verifyRow2); 
 | 
  }); 
 | 
  
 | 
  it(`Step 9 - ${StepActionBarPage.clickButton('Edit')}`, async () => { 
 | 
    const rows = await listCustomerOrders.getRows([verifyRow1, verifyRow2]); 
 | 
    await listCustomerOrders.clickActionButton(appMP.abpSales.btnEdit, undefined, rows); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - ${StepDialog.updateDialogValuesBatchEdit(DialogCustomerOrder.title, DialogBatchEditActionLink.EnableBatchEdit, updateDlgBatchValuesOrderRelated)} ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgCustomerOrder.updateDialogValuesBatchEdit(DialogBatchEditActionLink.EnableBatchEdit, updateDlgBatchValuesOrderRelated); 
 | 
    await dlgCustomerOrder.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 11 - ${StepList.verifyRowExists(listCustomerOrders.title, verifyRow1OrderRelated)} ${StepList.verifyRowExists(listCustomerOrders.title, verifyRow2OrderRelated)}`, async () => { 
 | 
    await listCustomerOrders.verifyRowExists(verifyRow1OrderRelated); 
 | 
    await listCustomerOrders.verifyRowExists(verifyRow2OrderRelated); 
 | 
  }); 
 | 
}); 
 |