/** 
 | 
 * @file        ADSO-9727 
 | 
 * @description Create fulfillment target and verify precondition 
 | 
 * @author      Chan Clarence (ccn7@3ds.com) 
 | 
 * @copyright   Dassault Systèmes 
 | 
 */ 
 | 
import { qCustomMatcher } from '../../e2elib/lib/src/main/qmatchers.const'; 
 | 
import { AppMP, Demo, Scenario, Timeout } 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 { DialogFulfillmentTarget, okButtonDisabledTooltip } from '../../libmp/dialogs/dialog.fulfillmenttarget'; 
 | 
import { FormFulfillmentTarget, ListFulfillmentTargetContextMenuItem } from '../../libmp/forms/form.fulfillmenttarget'; 
 | 
  
 | 
describe('ADSO-9727 - Create fulfillment target and verify precondition', () => { 
 | 
  const appMP = AppMP.getInstance(); 
 | 
  let dialogFulfillmentTarget: DialogFulfillmentTarget; 
 | 
  const formFulfillmentTarget = new FormFulfillmentTarget(); 
 | 
  const ftName = 'All Organics - Beverage Can'; 
 | 
  const ftName2 = 'Create from action bar'; 
 | 
  const ftStart = '1-Feb-2021'; 
 | 
  const ftEnd = '1-Mar-2021'; 
 | 
  const ftDefaultTargetPercentage = '0'; 
 | 
  const ftUpdateTargetPercentage = '50.5'; 
 | 
  const ftUpdateTargetPercentageRounded = '50'; 
 | 
  
 | 
  beforeAll(async () => { 
 | 
    jasmine.addMatchers(qCustomMatcher); 
 | 
    await appMP.login(); 
 | 
  }); 
 | 
  
 | 
  afterAll(async () => { 
 | 
    await appMP.cleanupAndLogout(); 
 | 
  }); 
 | 
  
 | 
  afterEach(async () => { 
 | 
    await appMP.checkToastMessage(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 1 - ${AppMP.getDemoDataPath(Demo.Metals, Scenario.Base)}`, async () => { 
 | 
    await appMP.createDemoDataset(Demo.Metals, Scenario.Base, false); 
 | 
  }); 
 | 
  
 | 
  it('Step 2 - Click on action bar page "Sales".', async () => { 
 | 
    await appMP.abpSales.click(); 
 | 
  }); 
 | 
  
 | 
  it('Step 3 - In action bar, click button "Fulfillment Targets". The form should open docked on the right.', async () => { 
 | 
    await appMP.abpSales.btnFulfillmentTarget.clickAndWaitVisible([formFulfillmentTarget]); 
 | 
  }); 
 | 
  
 | 
  it(`Step 4 - In list "Fulfillment Targets", right click and select menu "Create". Verify Name is empty.<br> 
 | 
      Verify OK disabled with precondition = "${okButtonDisabledTooltip.partialMustHaveName()}".`, async () => { 
 | 
    [dialogFulfillmentTarget] = await formFulfillmentTarget.listFulfillmentTarget.selectContextMenu(ListFulfillmentTargetContextMenuItem.Create); 
 | 
    await dialogFulfillmentTarget.verifyDialogValues({Name: ''}); 
 | 
    await dialogFulfillmentTarget.verifyOKDisabled(okButtonDisabledTooltip.partialMustHaveName(), false); 
 | 
  }); 
 | 
  
 | 
  it('Step 5 - Verify that both Sales Segment and Product can set as empty.', async () => { 
 | 
    await dialogFulfillmentTarget.updateDialogValues({SalesSegment: '', Product: ''}); 
 | 
  }); 
 | 
  
 | 
  it(`Step 6 - Set Name = "${ftName}", Sales Segment = "${DataMetalBaseSalesSegmentName.AllOrganics}" and Product = "${DataMetalBaseProductName.BeverageCan}".<br> 
 | 
      Set Start = "${ftStart}" and End = "${ftEnd}". Leave Stocking Point empty.`, async () => { 
 | 
    await dialogFulfillmentTarget.updateDialogValues({Name: ftName, SalesSegment: DataMetalBaseSalesSegmentName.AllOrganics, 
 | 
                                                      Product: DataMetalBaseProductName.BeverageCan, StockingPoint: '', 
 | 
                                                      Start: ftStart, End: ftEnd}); 
 | 
  }); 
 | 
  
 | 
  it(`Step 7 - Verify default Target Percentage = ${ftDefaultTargetPercentage}. Verify OK disabled with precondition = "${okButtonDisabledTooltip.partialMustLargerZero(ftDefaultTargetPercentage)}".`, async () => { 
 | 
    await dialogFulfillmentTarget.verifyDialogValues({TargetPercentage: ftDefaultTargetPercentage}); 
 | 
    await dialogFulfillmentTarget.verifyOKDisabled(okButtonDisabledTooltip.partialMustLargerZero(ftDefaultTargetPercentage), false); 
 | 
  }); 
 | 
  
 | 
  it(`Step 8 - Set Target Percentage = "${ftUpdateTargetPercentage}" and verify OK enabled. Click OK.`, async () => { 
 | 
    await dialogFulfillmentTarget.updateDialogValues({TargetPercentage: ftUpdateTargetPercentage}); 
 | 
    await dialogFulfillmentTarget.clickOK(Timeout.ButtonState); 
 | 
  }); 
 | 
  
 | 
  it(`Step 9 - Verify fulfillment target created in list, with Target percentage = ${ftUpdateTargetPercentageRounded} (rounding, no decimal shown in list).`, async () => { 
 | 
    const row = await formFulfillmentTarget.listFulfillmentTarget.getRow({Name: ftName}); 
 | 
    await formFulfillmentTarget.listFulfillmentTarget.verifyRowValues(row, {Start: ftStart, End: ftEnd, 'Target (%)': ftUpdateTargetPercentageRounded}); 
 | 
  }); 
 | 
  
 | 
  it(`Step 10 - Right click and select menu "Create".<br> 
 | 
      In dialog, enter all the same values as before and verify OK disabled with precondition = "${okButtonDisabledTooltip.partialMustUnique()}". Click Cancel to dismiss dialog.`, async () => { 
 | 
    [dialogFulfillmentTarget] = await formFulfillmentTarget.listFulfillmentTarget.selectContextMenu(ListFulfillmentTargetContextMenuItem.Create); 
 | 
    // Name need not be unique thus can re-use 
 | 
    await dialogFulfillmentTarget.updateDialogValues({Name: ftName, SalesSegment: DataMetalBaseSalesSegmentName.AllOrganics, 
 | 
                                                      Product: DataMetalBaseProductName.BeverageCan, StockingPoint: '', 
 | 
                                                      Start: ftStart, End: ftEnd, TargetPercentage: ftUpdateTargetPercentage}); 
 | 
    // The disabled OK proven that previous created values same with current dialog (must unique) 
 | 
    await dialogFulfillmentTarget.verifyOKDisabled(okButtonDisabledTooltip.partialMustUnique(), false); 
 | 
    await dialogFulfillmentTarget.clickCancel(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 11 - Focus on Fulfillment Targets list and click Create action bar button.<br> 
 | 
      In dialog, set Name = "${ftName2}", Stocking Point = "${DataMetalStockingPointName.Asia}" and Sales Segment = "${DataMetalBaseSalesSegmentName.Cans}".<br> 
 | 
      Set Start = "${ftStart}", End = "${ftEnd}" and Target Percentage = ${ftUpdateTargetPercentage}. Leave Product empty. Click OK to save.`, async () => { 
 | 
    dialogFulfillmentTarget = await formFulfillmentTarget.listFulfillmentTarget.clickActionButton(appMP.abpSales.btnCreate); 
 | 
    await dialogFulfillmentTarget.updateDialogValues({Name: ftName2, StockingPoint: DataMetalStockingPointName.Asia, 
 | 
                                                      SalesSegment: DataMetalBaseSalesSegmentName.Cans, Product: '', 
 | 
                                                      Start: ftStart, End: ftEnd, TargetPercentage: ftUpdateTargetPercentage}); 
 | 
    await dialogFulfillmentTarget.clickOK(); 
 | 
  }); 
 | 
  
 | 
  it(`Step 12 - Verify fulfillment target created in list, with Target percentage = ${ftUpdateTargetPercentageRounded} (rounding, no decimal shown in list).`, async () => { 
 | 
    const row = await formFulfillmentTarget.listFulfillmentTarget.getRow({Name: ftName2}); 
 | 
    await formFulfillmentTarget.listFulfillmentTarget.verifyRowValues(row, {Start: ftStart, End: ftEnd, 'Target (%)': ftUpdateTargetPercentageRounded}); 
 | 
  }); 
 | 
  
 | 
  it(`Step 13 - Edit the created fulfillment target and verify Stocking Point = "${DataMetalStockingPointName.Asia}", 
 | 
      Sales Segment = "${DataMetalBaseSalesSegmentName.Cans}", Product is empty and Target Percentage = ${ftUpdateTargetPercentage}.<br> 
 | 
      Click Cancel to dismiss dialog.`, async () => { 
 | 
    const row = await formFulfillmentTarget.listFulfillmentTarget.getRow({Name: ftName2}); 
 | 
    await formFulfillmentTarget.listFulfillmentTarget.selectContextMenu(ListFulfillmentTargetContextMenuItem.Edit, row); 
 | 
    await dialogFulfillmentTarget.verifyDialogValues({StockingPoint: DataMetalStockingPointName.Asia, SalesSegment: DataMetalBaseSalesSegmentName.Cans, 
 | 
                                                      Product: '', TargetPercentage: ftUpdateTargetPercentage}); 
 | 
    await dialogFulfillmentTarget.clickCancel(); 
 | 
  }); 
 | 
}); 
 |