Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method MappingCustomerOrderData ( 
 | 
  Strings businessTypes, 
 | 
  GlobalOTDTable globalOTDTable 
 | 
) 
 | 
{ 
 | 
  Description: 'ETL订单预测' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // yypsybs Aug-15-2023 (created) 
 | 
    // 待处理数据 
 | 
    listToDeal := construct( Global_MappingCustomOrders ); 
 | 
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) { 
 | 
        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true ); 
 | 
    } else { 
 | 
        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() ); 
 | 
        listToDeal := selectset( globalOTDTable,  
 | 
                                 Global_MappingCustomOrder,  
 | 
                                 item,  
 | 
                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and  
 | 
                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) ); 
 | 
    } 
 | 
    queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date(); 
 | 
    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() ); 
 | 
    listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockingPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) ); 
 | 
     
 | 
    totalcount := listToDeal.Size(); 
 | 
    info( "CustomerOrder has " + totalcount.AsQUILL() + " rows in total" ); 
 | 
     
 | 
    count := 0; 
 | 
    priorityName :="Normal"; 
 | 
    // 处理 
 | 
    traverse( listToDeal, Elements, item ) { 
 | 
      count := count + 1; 
 | 
      if( count - [Number](count/100) * 100 = 0 or count = totalcount ){ 
 | 
        info( "Now is dealing with the " + count.AsQUILL() + "CustomerOrder " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" ); 
 | 
        } 
 | 
    //  if( not isnull( Product_MP::FindById( this, item.ProductID() ) ) ){ 
 | 
    //    info( item.ProductID().AsQUILL() ); 
 | 
      customOrder := CustomerOrder::CreateOrUpdate( this, item.CurrencyID(), item.Customer(), item.CustomerID(), item.ID(),  
 | 
                                                    item.OrderDate(), item.OrderID(), item.OrderLineID(), item.Price(),  
 | 
                                                    priorityName, item.ProductID(),  
 | 
                                                    item.StockingPointID(),  
 | 
                                                    item.SalesSegmentName(),  
 | 
                                                    item.Quantity(), item.UnitOfMeasureName(), item.OrderType(), item.IsAvailable()); 
 | 
      customOrder.BusinessType( item.BusinessType() ); 
 | 
      customOrder.OrderType( item.OrderType() ); 
 | 
      customOrder.OrderTime( item.OrderTime() ); 
 | 
      customOrder.ProductGrade( item.ProductGrade() ); 
 | 
      customOrder.SegmentPriority( item.SegmentPriority() ); 
 | 
      customOrder.SheetProfitability( item.SheetProfitability() ); 
 | 
    //  }else{ 
 | 
    //    info( "invaild product: " + item.ProductID().AsQUILL() ); 
 | 
    //    } 
 | 
    } 
 | 
  *] 
 | 
} 
 |