hongjli
2023-09-05 c70ff9aa94e34f968851e813a0b80a25a7b4ea74
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
Quintiq file version 2.0
#parent: #root
Method MappingOperationCostData (
  Strings businesstypes
)
{
  Description: 'Get operation cost data from operation mapping'
  TextBody:
  [*
    // Administrator Aug-21-2023 (created)
    // list to deal
    listtodeal := construct( structured[MappingOperation] );
    
    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
        listtodeal := selectset( this, MappingOperation, item, true );
    } else {
        listtodeal := selectset( this, MappingOperation, item, businesstypes.Find( item.BusinessType() ) <> -1 );
    }
    
    // Get the list to deal with max sequence number
    listtodealwithmaxsn := construct( structured[MappingOperation] );
    traverse( listtodeal, Elements, item ){
      maxsn := maxselect( this, 
                          MappingOperation, 
                          moperation, 
                          moperation.OrganCode() = item.OrganCode(), 
                          moperation.ProductID() = item.ProductID(), 
                          moperation.SequenceNumber() ).SequenceNumber()
      if( item.SequenceNumber() = maxsn ){
        listtodealwithmaxsn.Add( item );
        }
      }
    
    // Get the operation cost data
    traverse( listtodealwithmaxsn, Elements, item ){
      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection() + "_" + item.Line();
      operation := Operation::FindOperationTypeIndex( id );
      account := Account_MP::FindByName( this, "Operation cost" );
      isfromdb := false;
      existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
      if( isnull( existoperationcost ) ){
        connecteditem := select( this, 
                                 MappingOperationCost, 
                                 moperationcost, 
                                 moperationcost.OrgCode() = item.OrganCode(), 
                                 moperationcost.ProductID() = item.ProductID() );
        cost := connecteditem.Cost();
        lengthoftime := connecteditem.LengthOfTime();
        start := connecteditem.Start();
        timeunit := connecteditem.TimeUnit();
        OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
        }
      }
  *]
}