yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Quintiq file version 2.0
#parent: #root
StaticMethod ValidateInput (
  output String feedback_o,
  ProductInStockingPoint_MPs owners,
  Account_MP account,
  String costDriver,
  Date start,
  String timeUnit,
  Number lengthOfTime,
  Real cost,
  InventoryValueAndCosts inventoryCosts
) declarative remote as Boolean
{
  Description: '(Web) Validate one or more inventory cost'
  TextBody:
  [*
    // Traverse to check batch/single create/edit input
    hasPISP := InventoryValueAndCost::HasPISP( feedback_o, owners );
    isCreate := inventoryCosts.Size() = 0;
    isSingleEdit := inventoryCosts.Size() = 1;
    isWeb := true; // True to indicate specific to WC
    sanityfb := '';
    
    if( hasPISP )
    {
      if( isCreate )
      {
        traverse( owners, Elements, owner )
        {
          // Temporary local variable in order to not overwrite feedback_o
          fb := '';
          isValid := InventoryValueAndCost::ValidateInput( fb, 
                                                           sanityfb,
                                                           owner.Product_MP(),
                                                           owner.StockingPoint_MP(),
                                                           account,
                                                           costDriver,
                                                           start,
                                                           timeUnit,
                                                           lengthOfTime,
                                                           cost,
                                                           null( AccountCost ), // Create mode thus neglect account cost argument
                                                           isWeb );
                                                                                                          
          if( not isValid )
          {
            if( feedback_o <> '' )
            {
              feedback_o := feedback_o + String::NewLine(); // New line
            }
            feedback_o := feedback_o + fb;
          }                                                                 
        }
      }
      else // Validate single & batch edit
      {
        
        // 1. traverse into cost, validate all owners
        traverse( inventoryCosts, Elements, invCost )
        {
          invCostOwner := ifexpr( isSingleEdit, owners.First(), invCost.ProductInStockingPoint_MP() );
          InventoryValueAndCost::ValidateInput( feedback_o,
                                                sanityfb,
                                                invCostOwner.Product_MP(),
                                                invCostOwner.StockingPoint_MP(),
                                                ifexpr( isSingleEdit, account, invCost.Account_MP() ),
                                                ifexpr( isSingleEdit, costDriver, invCost.CostDriver() ),
                                                ifexpr( isSingleEdit, start, invCost.Start() ),
                                                invCost.TimeUnit(),
                                                invCost.LengthOfTime(),
                                                cost, // Regardless of batch, always check cost
                                                invCost,
                                                isWeb ); 
        }
      }
        
    }
    return feedback_o = '';
  *]
}