| 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
 | | Quintiq file version 2.0 |  | #parent: #root |  | StaticMethod Transform (LibOpt_Task task, LibOpt_ScopeElements from, LibOpt_ScopeElements to) |  | { |  |   Description: |  |   [* |  |     Update the `LibOpt_Scopes` that contain all elements in the set of `from` and are the input of one of the ancestors of the supplied `LibOpt_Task`, with the set of `to`. |  |     If one of the `LibOpt_Scopes` contain only a partial subset of `from`, an error will be thrown. |  |     We strongly advice against using this method, as this makes the execution of the optimizer less transparent. |  |     However, we realize there are good reasons to do so, for example, when an order is split or two orders are merged, the same needs to happen to the `LibOpt_ScopeElements`. |  |   *] |  |   TextBody: |  |   [* |  |     to_from := to.Difference( from ); |  |     from_to := from.Difference( to ); |  |      |  |     safeguard := 5000; |  |     while( not isnull( task ) |  |            and safeguard > 0 ) |  |     { |  |       scope := task.Scope(); |  |       from_set := selectvalues( from, Elements, from_elem, true, scope.Contains( from_elem ) ).Unique(); |  |       if( from_set.Size() > 1 ) |  |       { |  |         // Throw an error when a subset of the from is in the Scope. |  |         set    := selectvalues( from, Elements, e, true,                       e.Identifier() ).ToString( ', ' ); |  |         subset := selectvalues( from, Elements, e, task.Scope().Contains( e ), e.Identifier() ).ToString( ', ' ); |  |         not_in_scope := selectvalues( from, Elements, e, not task.Scope().Contains( e ), e.Identifier() ).ToString( ', ' ); |  |         error( Translations::LibOpt_ScopeElement_Transform_ScopeContainsSubset( subset, set, not_in_scope ) ); |  |       } |  |       else if( from_set.Size() = 0 or |  |                from_set.Element( 0 ) ) |  |       { |  |         // Add new elements |  |         scope.Add( to_from ); |  |          |  |         // Remove elements |  |         scope.Remove( from_to ); |  |       } |  |        |  |       task := task.Parent(); |  |       safeguard--; |  |     } |  |   *] |  | } | 
 |