Quintiq file version 2.0
|
#parent: #root
|
Method GetSalesDemandInPeriodsConst () const declarative as constcontent owning BaseSalesDemandInPeriods
|
{
|
Description: 'Related Sales Demand In Periods with this service level'
|
TextBody:
|
[*
|
// edz1 Jul-8-2016 (created)
|
|
hasproduct := not isnull( this.Product_MP() );
|
hasstockingpoint := not isnull( this.StockingPoint_MP() );
|
hassalessegment := not isnull( this.SalesSegment_MP() );
|
|
salesdemandsinperiods := construct( BaseSalesDemandInPeriods, constcontent );
|
pispips := construct( ProductInStockingPointInPeriods, constcontent );
|
|
if( hasproduct )
|
{
|
if( hasstockingpoint )
|
{
|
if( hassalessegment ) // hasproduct=true, hasstockingpoint=true, hassalessegment=true
|
{
|
salesdemandsinperiods := selectset( this,
|
SalesSegment_MP.AllChildrenOfActiveSalesLevel.AsChildren.SalesDemandInPeriod, //TODOVincent //get all SDIP via active level SalesSegments
|
sdip,
|
sdip.NeedsToBePlanned(),
|
this.Product_MP().IsParentOf( sdip.SalesDemand().Product_MP() ) // matching prod/parent prod.
|
and sdip.ProductInStockingPoint_MP().StockingPoint_MP() = this.StockingPoint_MP() // matching stockingpoint
|
and Period_MP::IsInPeriod( sdip.AsSalesDemandInPeriodBase().Start(),
|
sdip.AsSalesDemandInPeriodBase().End(),
|
this.StartDateTime(),
|
this.EndDateTime() )
|
);
|
}
|
else // hasproduct=true, hasstockingpoint=true, hassalessegment=false
|
{
|
pispips := selectset( this,
|
Product_MP.AllChildren.AsChildren.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, //get all PISPIPs of all children Products
|
pispip,
|
pispip.ProductInStockingPoint_MP().StockingPoint_MP() = this.StockingPoint_MP() // matching stockingpoint
|
and Period_MP::IsInPeriod( this.StartDateTime(), // matching start/end
|
this.EndDateTime(),
|
pispip.Start(),
|
pispip.End() )
|
);
|
|
salesdemandsinperiods := selectset( pispips,
|
Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ).PlanningBaseSalesDemandInPeriod,
|
sdip,
|
sdip.NeedsToBePlanned()
|
);
|
}
|
}
|
else if( hassalessegment ) // hasproduct=true, hasstockingpoint=false, hassalessegment=true
|
{
|
salesdemandsinperiods := selectset( this,
|
SalesSegment_MP.AllChildrenOfActiveSalesLevel.AsChildren.SalesDemandInPeriod, //get all SDIP via active level SalesSegments
|
sdip,
|
sdip.NeedsToBePlanned(),
|
this.Product_MP().IsParentOf( sdip.SalesDemand().Product_MP() ) //matching prod/parent prod.
|
and Period_MP::IsInPeriod( sdip.AsSalesDemandInPeriodBase().Start(), //matching start/end
|
sdip.AsSalesDemandInPeriodBase().End(),
|
this.StartDateTime(),
|
this.EndDateTime() )
|
);
|
}
|
else // hasproduct=true, hasstockingpoint=false, hassalessegment=false
|
{
|
pispips := selectset ( this,
|
Product_MP.AllChildren.AsChildren.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, // get all PISPIPs of all children Products
|
pispip,
|
Period_MP::IsInPeriod( this.StartDateTime(), // matching start/end
|
this.EndDateTime(),
|
pispip.Start(),
|
pispip.End() )
|
);
|
salesdemandsinperiods := selectset( pispips,
|
Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ).PlanningBaseSalesDemandInPeriod,
|
sdip,
|
sdip.NeedsToBePlanned()
|
);
|
}
|
}
|
else if( hasstockingpoint )
|
{
|
if( hassalessegment ) // hasproduct=false, hasstockingpoint=true, hassalessegment=true
|
{
|
salesdemandsinperiods := selectset( this,
|
SalesSegment_MP.AllChildrenOfActiveSalesLevel.AsChildren.SalesDemandInPeriod, // get all SDIP via active level SalesSegments
|
sd,
|
sd.NeedsToBePlanned(),
|
this.StockingPoint_MP() = sd.ProductInStockingPoint_MP().StockingPoint_MP() // matching stockingpoint
|
and Period_MP::IsInPeriod( sd.AsSalesDemandInPeriodBase().Start(), // matching start/end
|
sd.AsSalesDemandInPeriodBase().End(),
|
this.StartDateTime(),
|
this.EndDateTime() )
|
);
|
}
|
else // hasproduct=false, hasstockingpooint=true, hassalessegment=false
|
{
|
pispips := selectset ( this,
|
StockingPoint_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, // get all PISPIPs via StockingPoint
|
pispip,
|
Period_MP::IsInPeriod( this.StartDateTime(), // matching start/end
|
this.EndDateTime(),
|
pispip.Start(),
|
pispip.End() )
|
);
|
salesdemandsinperiods := selectset( pispips,
|
Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ).PlanningBaseSalesDemandInPeriod,
|
sdip,
|
sdip.NeedsToBePlanned()
|
);
|
}
|
}
|
else // hasproduct=false, hasstockingpoint=false, hassalessegment=true
|
{
|
salesdemandsinperiods := selectset( this,
|
SalesSegment_MP.AllChildrenOfActiveSalesLevel.AsChildren.SalesDemandInPeriod, // get all SD via active level SalesSegments
|
sdip,
|
sdip.NeedsToBePlanned(),
|
Period_MP::IsInPeriod( sdip.AsSalesDemandInPeriodBase().Start(), // matching start/end
|
sdip.AsSalesDemandInPeriodBase().End(),
|
this.StartDateTime(),
|
this.EndDateTime() )
|
);
|
}
|
|
return &salesdemandsinperiods;
|
*]
|
}
|