/** 
 | 
 * @file        ADSO-9931 
 | 
 * @description Aggregate trip feedbacks when multiple in same planning period 
 | 
 * @author      Pethaperumal Natarajan (Pethaperumal.NATARAJAN.intern@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
  
 | 
import { AppMP, Demo, Scenario, Timeout } from '../../libmp/appmp'; 
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { DialogTripFeedback, DialogTripFeedbackFields } from '../../libmp/dialogs/dialog.tripfeedback'; 
 | 
import { StepList } from '../../libappsop/listsop'; 
 | 
import { ListTripFeedback, ListTripFeedbackContextMenuItem } from '../../libmp/forms/form.tripfeedback'; 
 | 
import { dataFoodProducts, dataFoodProductsProvider } from '../../libmp/data/data.product'; 
 | 
import { DataFoodBaseLaneLeg } from '../../libmp/data/data.lane'; 
 | 
import { startOfPlanningYear } from '../../libmp/data/data.period'; 
 | 
import { StepDialog } from '../../libappsop/dialogsop'; 
 | 
import { DialogOptimizer } from '../../libmp/dialogs/dialog.optimizer'; 
 | 
import { StepActionBarScenarioSelection } from '../../libmp/actionbarpages/abp.scenarioselection'; 
 | 
import { StepMatrix } from '../../libappsop/matrixeditorsop'; 
 | 
import { MatrixEditorProductPlanning } from '../../libmp/forms/form.productplanning'; 
 | 
import { StepNavigationPanel } from '../../libmp/forms/navigationpanel/form.navigationpanel'; 
 | 
import { DataFoodPISP } from '../../libmp/data/data.pisp'; 
 | 
import { MatrixEditorSupplyPlanning } from '../../libmp/forms/form.supplyplanning'; 
 | 
import { CellLocator } from '../../libappbase/matrixeditorbase'; 
 | 
import { dataFoodUnits, dataFoodUnitsProvider } from '../../libmp/data/data.unit'; 
 | 
  
 | 
describe('ADSO-9931 - Aggregate trip feedbacks when multiple in same planning period', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  const listTripFeedback = appMP.viewFeedback.formTripFeedback.listTripFeedback; 
 | 
  let dlgTripFeedback: DialogTripFeedback; 
 | 
  const abpScenarioSelection = appMP.abpScenarioSelection; 
 | 
  let dlgOptimizer: DialogOptimizer; 
 | 
  const meProductPlanning = appMP.viewSupplyPlanning.frmProductPlanning.meProductPlanning; 
 | 
  const meSupplyPlanning = appMP.viewSupplyPlanning.formSupplyPlanning.meSupplyPlanning; 
 | 
  const formNavigation = appMP.formNavigation; 
 | 
  const listEntity = formNavigation.listEntity; 
 | 
  const listProduct = formNavigation.listProduct; 
 | 
  
 | 
  const inputTripFeedback1: DialogTripFeedbackFields = { 
 | 
    LaneLeg: DataFoodBaseLaneLeg.DEWarehouseToDCAustria, 
 | 
    ArrivalDateTime: `1-Apr-${startOfPlanningYear}`, 
 | 
    Product: dataFoodProducts.GreekBlueberry12pk.Name, 
 | 
    Quantity: '500', 
 | 
  }; 
 | 
  
 | 
  const inputTripFeedback2: DialogTripFeedbackFields = { ...inputTripFeedback1, Quantity: '300' }; 
 | 
  const matrixColumnName = `1-Mar-${startOfPlanningYear}`; 
 | 
  const selectProductPlanningCell: CellLocator = {rowName: DataFoodPISP.GreekBlueberry12PkDCAustria, columnName: matrixColumnName}; 
 | 
  const expectedTotalNewSupply = String(Number(inputTripFeedback1.Quantity) + Number(inputTripFeedback2.Quantity)); 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.resetActiveView(appMP.viewSupplyPlanning); 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Food, Scenario.Base)}`, async () => { 
 | 
    await appMP.createDemoDataset(Demo.Food, Scenario.Base, false); 
 | 
  }); 
 | 
  
 | 
  it(`Step 2 - Open view ${appMP.viewFeedback.viewPath}.`, async () => { 
 | 
    await appMP.viewFeedback.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 3 - ${StepList.rightClickSelectMenu(ListTripFeedback.title, ListTripFeedbackContextMenuItem.Create.Label)}`, async () => { 
 | 
    [dlgTripFeedback] = await listTripFeedback.selectContextMenu(ListTripFeedbackContextMenuItem.Create); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - ${StepDialog.updateDialogValues(DialogTripFeedback.title, inputTripFeedback1)} ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgTripFeedback.updateDialogValues(inputTripFeedback1); 
 | 
    await dlgTripFeedback.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 5 - ${StepList.rightClickSelectMenu(ListTripFeedback.title, ListTripFeedbackContextMenuItem.Create.Label)}`, async () => { 
 | 
    [dlgTripFeedback] = await listTripFeedback.selectContextMenu(ListTripFeedbackContextMenuItem.Create); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - ${StepDialog.updateDialogValues(DialogTripFeedback.title, inputTripFeedback2)} ${StepDialog.clickOK()}`, async () => { 
 | 
    await dlgTripFeedback.updateDialogValues(inputTripFeedback2); 
 | 
    await dlgTripFeedback.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - Open view ${appMP.viewSupplyPlanning.viewPath}.`, async () => { 
 | 
    await appMP.viewSupplyPlanning.switchTo(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 8 - ${StepActionBarScenarioSelection.clickOptimizerButton()} ${StepDialog.clickOK()}`, async () => { 
 | 
    dlgOptimizer = await abpScenarioSelection.clickOptimizerButton(); 
 | 
    await dlgOptimizer.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 9 - ${StepActionBarScenarioSelection.verifyIsOptimizerCompleted()}`, async () => { 
 | 
    await abpScenarioSelection.verifyIsOptimizerCompleted(Timeout.Medium); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - ${StepNavigationPanel.showEntitiesList()} ${StepNavigationPanel.checkStockingPoints([dataFoodUnits.DCAustria.Name])}`, async () => { 
 | 
    await formNavigation.toggleEntityList(true); 
 | 
  
 | 
    const row = await listEntity.getRow([dataFoodUnitsProvider, dataFoodUnits.DCAustria]); 
 | 
    await listEntity.toggleRowCheckbox(row, true); 
 | 
  }); 
 | 
  
 | 
  it(`Step 11 - ${StepNavigationPanel.showProductsList()} ${StepNavigationPanel.checkProducts([dataFoodProducts.GreekBlueberry12pk.Name])}`, async () => { 
 | 
    await formNavigation.toggleProductList(true); 
 | 
    const [greek12pk, parents] = listProduct.getHierarchy(dataFoodProductsProvider, dataFoodProducts.GreekBlueberry12pk); 
 | 
    const row = await listProduct.getRow(greek12pk, parents); 
 | 
    await listProduct.toggleRowCheckbox(row, true); 
 | 
  }); 
 | 
  
 | 
  it(`Step 12 - ${StepMatrix.selectCells(MatrixEditorProductPlanning.title, [selectProductPlanningCell])}`, async () => { 
 | 
    await meProductPlanning.selectCell(selectProductPlanningCell.rowName, 0, selectProductPlanningCell.columnName); 
 | 
  }); 
 | 
  
 | 
  it(`Step 13 - ${StepMatrix.verifyCellValue(MatrixEditorSupplyPlanning.title, 0, matrixColumnName, expectedTotalNewSupply)}`, async () => { 
 | 
    // Verify first row without the need to define the exact trip name (in row header) 
 | 
    await meSupplyPlanning.verifyCellValue(0, 0, matrixColumnName, expectedTotalNewSupply); 
 | 
  }); 
 | 
}); 
 |