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
Quintiq file version 2.0
#parent: #root
Method RoundToNextMultiple (
  Real quantity
) declarative remote as Real
{
  Description: "Round the entered supply quantity to next valid multiple of the operation's lot size."
  TextBody:
  [*
    // soh yee Jun-17-2013 (created)
    
    // Given period task.quantity -> convert to a value according to quantity to process -> calculate next multiple -> convert back to period task.quantity
    qtpfactor := this.Process_MP().QuantityToProcessFactor();
    minquantity := quantity * qtpfactor;
    
    // Only round to next multiple if quantity > 0.
    if( minquantity > 0 )
    {
      lotsize := this.Process_MP().LotSize();
      maximumquantity := this.Process_MP().MaximumQuantity();
    
      minquantity := maxvalue( minquantity, this.Process_MP().MinimumQuantity() );
    
      // lot size
      if( this.Process_MP().HasLotSize() )
      {
        minquantity := ceil( minquantity / lotsize ) * lotsize;
        maximumquantity := floor( maximumquantity / lotsize ) * lotsize;
      }
      if( this.Process_MP().HasMaximumQuantity() )
      {
        minquantity := minvalue( minquantity, maximumquantity );
      }
    }
    
    minquantity := guard( minquantity / qtpfactor, quantity );
    
    return minquantity;
  *]
}