yunchai
2023-10-12 e8619d825e5f09daf129b4847bf2bf4e660d40c5
_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -2,7 +2,8 @@
#parent: #root
Method MappingOperationCostData (
  GlobalOTDTable globalOTDTable,
  Strings businesstypes
  Strings businesstypes,
  Strings organcodelist
)
{
  Description: 'Get operation cost data from operation mapping'
@@ -10,24 +11,21 @@
  [*
    // Administrator Aug-21-2023 (created)
    // list to deal
    listtodeal := construct( structured[MappingOperation] );
    listtodeal := construct( structured[Global_MappingOperation] );
    
    if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
        listtodeal := selectset( this, MappingOperation, item, true );
        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
    } else {
        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
        listtodeal := selectset( this,
                                 MappingOperation,
        listtodeal := selectset( globalOTDTable, Global_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] );
    listtodealwithmaxsn := construct( structured[Global_MappingOperation] );
    traverse( listtodeal, Elements, item ){
      maxsn := maxselect( this,
                          MappingOperation,
      maxsn := maxselect( globalOTDTable, Global_MappingOperation,
                          moperation, 
                          moperation.OrganCode() = item.OrganCode(), 
                          moperation.ProductID() = item.ProductID(), 
@@ -47,26 +45,31 @@
      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();
      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
      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 );
        }
      if(not isnull(operation)){
            account := Account_MP::FindByName( this, "Operating cost" );
            isfromdb := false;
            existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
            if( isnull( existoperationcost ) ){
              connecteditem := select( globalOTDTable,
                                       Global_MappingOperationCost,
                                       moperationcost,
                                       moperationcost.OrgCode() = item.OrganCode(),
                                       moperationcost.ProductID() = item.ProductID() );
              if( not isnull( connecteditem)){
                  cost := connecteditem.Cost();
                  lengthoftime := connecteditem.LengthOfTime();
                  start := connecteditem.Start();
                  timeunit := connecteditem.TimeUnit();
                  OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
                }
              }
      }
    }
  *]
}