| 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; | 
|   *] | 
| } |