Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod CreateOrUpdate ( 
 | 
  MacroPlan macroPlan, 
 | 
  String currencyId, 
 | 
  String customerName, 
 | 
  String customerId, 
 | 
  String id, 
 | 
  Date orderDate, 
 | 
  String orderId, 
 | 
  String orderLineId, 
 | 
  Real price, 
 | 
  String priorityName, 
 | 
  String productId, 
 | 
  String stockingPointId, 
 | 
  String salesSegmentName, 
 | 
  Real quantity, 
 | 
  String unitOfMeasureName, 
 | 
  String orderType, 
 | 
  Boolean isAvailable 
 | 
) as CustomerOrder 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // yypsybs Aug-14-2023 (created) 
 | 
    // 查依赖项 
 | 
    product := Product_MP::FindById( macroPlan, productId ); 
 | 
    salesSegment := SalesSegment_MP::FindByName( macroPlan, salesSegmentName ); 
 | 
    stockingPoint := StockingPoint_MP::FindById(  macroPlan, stockingPointId ); 
 | 
    //currency := Currency_MP::FindById( macroPlan, currencyId ); 
 | 
    unitOfMeasure := null( UnitOfMeasure_MP ) 
 | 
    priority := null( Priority ); 
 | 
    if( unitOfMeasureName <> "" ) { 
 | 
        unitOfMeasure := UnitOfMeasure_MP::FindByName( macroPlan, unitOfMeasureName );   
 | 
    } 
 | 
    if( priorityName <> "" ) { 
 | 
        priority := Priority::FindByName( macroPlan, priorityName ); 
 | 
    } 
 | 
    // 检查依赖项 
 | 
    if( isnull( product) ) { 
 | 
        info( "product not found" + productId);   
 | 
    } 
 | 
    if( isnull( salesSegment) ) { 
 | 
        info( "sales segment not found" + salesSegmentName);   
 | 
    } 
 | 
    if( isnull( stockingPoint) ) { 
 | 
        info( "stock point not found" + stockingPointId);   
 | 
    } 
 | 
    //if( isnull( currency) ) { 
 | 
    //    error( "currency not found" );   
 | 
    //} 
 | 
    if( unitOfMeasureName <> "" and isnull( unitOfMeasure) ) { 
 | 
        info( "unit of measure not found" + unitOfMeasureName);   
 | 
    } 
 | 
    //if( priorityName <> "" and isnull( stockingPoint) ) { 
 | 
    //    info( "priority not found" );   
 | 
    //} 
 | 
    // 新增/更新 
 | 
    result := CustomerOrder::FindById( macroPlan, id ); 
 | 
    if( isnull( result ) ) { 
 | 
        CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price,  
 | 
                               priorityName, salesSegmentName, currencyId, unitOfMeasureName,  
 | 
                               false, customerName, customerId, orderId, orderLineId, true, true, true ); 
 | 
    } else { 
 | 
        if( result.ProductID() = productId  
 | 
            and result.StockingPointID() = stockingPointId  
 | 
            and result.StartDate() = orderDate  
 | 
            and result.Quantity() = quantity  
 | 
            and result.Price() = price  
 | 
            and result.PriorityName() = priorityName  
 | 
            and result.SalesSegmentName() = salesSegmentName  
 | 
            and result.CurrencyID() = currencyId  
 | 
            and result.UnitOfMeasureName() = unitOfMeasureName  
 | 
            and result.CustomerName() = customerName  
 | 
            and result.CustomerID() = customerId  
 | 
            and result.OrderID() = orderId  
 | 
            and result.OrderLineID() = orderLineId ){ 
 | 
              info( "No need to update this order: " + id ); 
 | 
              }else{ 
 | 
                if( result.IsLocked() = true ){ 
 | 
                  pispips := selectset( result, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ); 
 | 
                  pispipLeafs := selectset( pispips,  
 | 
                                            Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ),  
 | 
                                            pispip,  
 | 
                                            true ); 
 | 
                  ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, false, true ); 
 | 
                } 
 | 
                result.Update( product, stockingPoint, orderDate, quantity, price,  
 | 
                               priorityName, salesSegmentName, currencyId, unitOfMeasureName,  
 | 
                               false, customerName, customerId, orderId, orderLineId, true, true, true ); 
 | 
                result.IsLocked( false ); 
 | 
                } 
 | 
    } 
 | 
    return result; 
 | 
  *] 
 | 
} 
 |