Quintiq file version 2.0
|
#parent: #root
|
StaticMethod CreateOrUpdateForPISPIP (
|
ProductInStockingPointInPeriodPlanning pispip,
|
Real penalty
|
)
|
{
|
Description: "Create or update the postponed SD cost when we want only the particular product in stocking point in period's cost (get from postponed SD cost) change."
|
TextBody:
|
[*
|
// Wayne June-6-2013 (created)
|
|
psdcost := pispip.PostponedSalesDemandCost();
|
pisp := pispip.ProductInStockingPoint_MP();
|
|
/* Case1: all pispip are referring to Jan, penalty 100.
|
PISPIP psd penalty
|
Jan Jan, 100
|
Feb
|
Mar
|
Apr
|
|
Case2: when user edit postponed sd penalty via context menu in pispip list on Mar (penalty = 200), (a) and (b) are created.
|
PISPIP psd penalty
|
Jan Jan, 100
|
Feb Mar, 200 (a)
|
Mar Apr, 100 (b)
|
Apr
|
|
|
Case3: when user edit postponed sd penalty for Mar via context menu in pispip list again (now set penalty = 300), (a) is updated.
|
PISPIP psd penalty
|
Jan Jan, 100
|
Feb Mar, 300 (a)
|
Mar Apr, 100 (b)
|
Apr
|
*/
|
nextpispip := pispip.NextPlanningPISPIP();
|
nextpsdcost := guard( nextpispip.PostponedSalesDemandCost(), null( PostponedSalesDemandCost ) );
|
|
if( not isnull( nextpispip )
|
and nextpsdcost = psdcost )
|
{
|
// Case2: creating (b)
|
PostponedSalesDemandCost::Create( pisp.Product_MP(),
|
pisp.StockingPoint_MP(),
|
nextpispip.Start().Date(),
|
guard( psdcost.Penalty(), 0.0 ),
|
false );
|
|
// Propogate the relation to pispips.
|
// This is needed for the following checking.
|
Transaction::Transaction().Propagate();
|
}
|
|
// Create a new postponed sd cost for that particular pispip if it does not bind to any postponed sd cost, or if it already has an postponed sd cost,
|
// the related postponed sd cost doesn't have the same start as the pispip.
|
if( not pispip.GetHasPostponedSalesDemandCost()
|
or PostponedSalesDemandCost::IsPrimaryKeysUnique( pisp.Product_MP(), pisp.StockingPoint_MP(), pispip.Start().Date(), null( PostponedSalesDemandCost ) ) )
|
{
|
// Case2: creating (a)
|
PostponedSalesDemandCost::Create( pisp.Product_MP(),
|
pisp.StockingPoint_MP(),
|
pispip.Start().Date(),
|
penalty,
|
false );
|
}
|
|
else
|
{
|
// Case3, (a) is updated.
|
// The to-be created postponed sd cost has the same primary keys with existing data. Therefore, we update it instead of creating a new data to avoid duplication.
|
psdcost.Update( pisp.Product_MP(),
|
pisp.StockingPoint_MP(),
|
psdcost.Start(),
|
penalty,
|
false );
|
}
|
*]
|
}
|