| Quintiq file version 2.0 | 
| #parent: #root | 
| Method MappingOperationCostData ( | 
|   GlobalOTDTable globalOTDTable, | 
|   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 { | 
|         organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() ); | 
|         listtodeal := selectset( this,  | 
|                                  MappingOperation,  | 
|                                  item,  | 
|                                  ( businesstypes.Find( item.BusinessType() ) <> -1 ) and  | 
|                                  ( organcodelist.Find( item.OrganCode() ) >= 0 ) ); | 
|     } | 
|      | 
|     // 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 ); | 
|         } | 
|       } | 
|      | 
|     totalcount := listtodealwithmaxsn.Size(); | 
|     info( "OperationCost has " + totalcount.AsQUILL() + " rows in total" ); | 
|      | 
|     count := 0; | 
|     // Get the operation cost data | 
|     traverse( listtodealwithmaxsn, Elements, item ){ | 
|       count := count + 1; | 
|       if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){ | 
|         info( "Now is dealing with the " + count.AsQUILL() + "OperationCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" ); | 
|         } | 
|       id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection(); | 
|       if( guard( item.Line(), "" ).Length() > 0 ) { | 
|           id := id + "_" + 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 ); | 
|         } | 
|       } | 
|   *] | 
| } |