Quintiq file version 2.0 #parent: #root Method ReturnEdgeLabel ( shadow[SCVNode] sourcenode, shadow[SCVNode] targetnode, output Real quantity_o ) as String id:Method_FormSupplyChainVisualization_ReturnEdgeLabel { #keys: '[134266.1.1639225912]' Body: [* // Return edge label of this edge label := ''; tooltip := ''; scvConfig := DataHolderSCVConfiguration.Data(); period := scvConfig.Period_MP(); pisps := construct( ProductInStockingPoint_MPs ); operations := construct( Operations ); lane := null( Lane ); targetPISPIP := null( ProductInStockingPoint_MP ); // RoutingStep node to other nodes if( sourcenode.istype( shadow[SCVRoutingStepNode] ) ) { sourceNode := sourcenode.astype( shadow[SCVRoutingStepNode] ); operations := selectset( sourceNode, OperationInNode.Operation, op, true ); if( targetnode.istype( shadow[SCVPISPIPNode] ) ) { targetNode := targetnode.astype( shadow[SCVPISPIPNode] ); pisps := pisps.Merge( targetNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP() ) } else if( targetnode.istype( shadow[SCVRoutingStepNode] ) ) { targetNode := targetnode.astype( shadow[SCVRoutingStepNode] ); pisps := selectset( targetNode, OperationInNode.Operation.OperationInput.ProductInStockingPoint_MP, pisp, true ) } quantity_o := SCVEdge::GetProcessQuantity( period, operations, pisps, false /*isdependentdemand*/, tooltip ); } // PISPIP node to other nodes else if( sourcenode.istype( shadow[SCVPISPIPNode] ) ) { sourceNode := sourcenode.astype( shadow[SCVPISPIPNode] ); pisps := pisps.Merge( sourceNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP() ) if( targetnode.istype( shadow[SCVRoutingStepNode] ) ) { targetNode := targetnode.astype( shadow[SCVRoutingStepNode] ); operations := selectset( targetNode, OperationInNode.Operation, op, true ); quantity_o := SCVEdge::GetProcessQuantity( period, operations, pisps, true /*isdependentdemand*/, tooltip ); } else if( targetnode.istype( shadow[SCVLaneNode] ) ) { targetNode := targetnode.astype( shadow[SCVLaneNode] ); lane := targetNode.Lane(); isupstream := targetNode.IsUpstream(); if( isupstream ) { targetPISPIPNode := select( scvConfig, SCVNode, node, node.Key().AsQUILL() = targetNode.OwnerNodeKey() ).astype( shadow[SCVPISPIPNode] ); targetPISPIP := targetPISPIPNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP(); } quantity_o := SCVEdge::GetProcessQuantity( period, lane, pisps, targetPISPIP, true /*isdependentdemand*/, isupstream, tooltip ); } else if( targetnode.istype( shadow[SCVSDNode] ) ) { quantity_o := SCVEdge::GetProcessQuantity( sourceNode.ProductInStockingPointInPeriod(), tooltip ); } } // Lane node to PISPIP node else if( sourcenode.istype( shadow[SCVLaneNode] ) ) { sourceNode := sourcenode.astype( shadow[SCVLaneNode] ); lane := sourceNode.Lane(); if( targetnode.istype( shadow[SCVPISPIPNode] ) ) { targetNode := targetnode.astype( shadow[SCVPISPIPNode] ); isupstream := sourceNode.IsUpstream(); if( not isupstream ) { targetPISPIPNode := select( scvConfig, SCVNode, node, node.Key().AsQUILL() = sourceNode.OwnerNodeKey() ).astype( shadow[SCVPISPIPNode] ); targetPISPIP := targetPISPIPNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP(); } pisps := pisps.Merge( targetNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP() ) } quantity_o := SCVEdge::GetProcessQuantity( period, lane, pisps, targetPISPIP, false /*isdependentdemand*/, sourceNode.IsUpstream(), tooltip ); } // Inventory supply node to PISPIP node else if( sourcenode.istype( shadow[SCVISNode] ) ) { if( targetnode.istype( shadow[SCVPISPIPNode] ) ) { targetNode := targetnode.astype( shadow[SCVPISPIPNode] ); pisps := pisps.Merge( targetNode.ProductInStockingPointInPeriod().ProductInStockingPoint_MP() ) quantity_o := SCVEdge::GetInventorySupplyQuantity( targetNode.ProductInStockingPointInPeriod(), tooltip ); } } uom := select( pisps, Elements.UnitOfMeasure_MP, e, true ); label := quantity_o.Format( 'N(Dec(2))' ) + ' ' + uom.Name(); if( not sourcenode.istype( shadow[SCVPISPIPNode] ) ) { sourcenode.Tooltip( tooltip ); } else { targetnode.Tooltip( tooltip ); } return label; *] Declarative: true }