admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Quintiq file version 2.0
#parent: #root
StaticMethod Update (
  SalesDemandBases salesdemands,
  Boolean hasproduct,
  Product_MP owner,
  Boolean hasstockingpoint,
  StockingPoint_MP stockingpoint,
  Boolean hasstart,
  Date start,
  Boolean hasend,
  Date end,
  Boolean hasquantity,
  Real quantity,
  Boolean hasprice,
  Real price,
  Boolean haspriority,
  Priority priority,
  Boolean hasdemanduncertaintypercentage,
  Real demanduncertaintypercentage,
  Boolean hassalessegment,
  SalesSegment_MP salessegment,
  Boolean hascurrency,
  Currency_MP currency,
  Boolean hasuom,
  UnitOfMeasure_MP unitofmeasure,
  Boolean hasisexcludedfromfulfillmentkpi,
  Boolean isexcludedfromfulfillmentkpi,
  Boolean ismanualupdate
)
{
  Description: 'Batch update of sales demands'
  TextBody:
  [*
    // Traverse the selected set of SalesDemands to batch update them
    traverse( salesdemands, Elements, e )
    {
      quantityadjusted := quantity;
    
      // Check which fields are selected for batch editing
      // If the field is not selected, use the current SalesDemand's value instead of the passed in value
      if( not hasproduct )
      {
        owner := e.Product_MP();
      }
      if( not hasstockingpoint )
      {
        stockingpoint := e.StockingPoint_MP();
      }
      if( not hasstart )
      {
        start := e.StartDate();
      }
      if( not hasend )
      {
        end := e.EndDate();
      }
      if( not hasquantity )
      {
        quantityadjusted := e.Quantity();
      }
      if( not hasprice )
      {
        price := e.Price();
      }
      if( not haspriority )
      {
        priority := e.Priority();
      }
      if( not hasdemanduncertaintypercentage )
      {
        demanduncertaintypercentage := e.DemandUncertaintyPercentage();
      }
      if( not hassalessegment )
      {
        salessegment := e.SalesSegment_MP();
      }
      if( not hascurrency )
      {
        currency := e.Currency_MP();
      }
      if( not hasuom )
      {
        unitofmeasure := e.UnitOfMeasure_MP();
      }
      if( not hasisexcludedfromfulfillmentkpi )
      {
        isexcludedfromfulfillmentkpi := e.IsExcludedFromFulfillmentKPI(); 
      }
    
      //Keep history quantity
      historicalquantity := e.Quantity();
      decimalpoint := e.MacroPlan().GlobalParameters_MP().NumberOfDecimals(); // Get the number of decimal points to round off to
      
      // If the current quantity is not the same as the new quantity,
      // create a log for audit purposes
      if( historicalquantity <> quantityadjusted )
      {
        description := Translations::MP_SalesDemand_Update_Description( e,
                                                                        historicalquantity.Round( decimalpoint ),
                                                                        quantityadjusted.Round( decimalpoint ) );
        e.MacroPlan().CreateDecisionLog( description, ismanualupdate );
      }
    
      // Update attributes of SalesDemand
      e.Update( owner, stockingpoint, start, end, quantityadjusted, price, priority, demanduncertaintypercentage, salessegment, currency, unitofmeasure, isexcludedfromfulfillmentkpi, false );
    }
  *]
}