yypsybs
2023-09-09 3cb5a54def670d97301f07170fcaad213bfc54f2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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) ) {
        error( "product not found" );  
    }
    if( isnull( salesSegment) ) {
        error( "sales segment not found" );  
    }
    if( isnull( stockingPoint) ) {
        error( "stock point not found" );  
    }
    if( isnull( currency) ) {
        error( "currency not found" );  
    }
    if( unitOfMeasureName <> "" and isnull( unitOfMeasure) ) {
        error( "unit of measure not found" );  
    }
    if( priorityName <> "" and isnull( stockingPoint) ) {
        error( "priority not found" );  
    }
    // 新增/更新
    result := CustomerOrder::FindById( macroPlan, id );
    if( isnull( result ) ) {
        CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price, 
                               priorityName, salesSegmentName, currency.Name(), unitOfMeasureName, 
                               false, customerName, customerId, orderId, orderLineId, true, true, true );
    } else {
        result.Update( product, stockingPoint, orderDate, quantity, price, 
                       priorityName, salesSegmentName, currency.Name(), unitOfMeasureName, 
                       false, customerName, customerId, orderId, orderLineId, true, true, true );
    }
    return result;
  *]
}