yanyuan
2023-08-30 eb958a9c253061d89ea524fe124b326369678557
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
Quintiq file version 2.0
#parent: #root
StaticMethod CreateOrUpdate (
  MacroPlan macroPlan,
  String productId,
  String salesSegmentName,
  String stockingPointId,
  String priorityName,
  String currencyId,
  String unitOfMeasureName,
  String id,
  Date startDate,
  Date endDate,
  Real quantity,
  Real price
) as Forecast
{
  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 := Forecast::FindById( macroPlan, id );
    if( isnull( result) ) {
        result := Forecast::Create( product, stockingPoint, id, 
                                    startDate, endDate, quantity, price, 
                                    priorityName, salesSegmentName, guard( currency.Name(), "" ), unitOfMeasureName, 
                                    0.0, false, true );
    } else {
        result.Update( product, stockingPoint, 
                      startDate, endDate, quantity, price, 
                      priority, 0.0, salesSegment, currency, unitOfMeasure, false, true );
    }
    return result;
  *]
}