Quintiq file version 2.0
|
#parent: #root
|
Method PostProcessDetailScheduleFeedback (
|
Boolean isgeneratezerofeedback,
|
output FeedbackPeriodTaskOperations updates,
|
output FeedbackPeriodTaskOperations existings
|
)
|
{
|
Description: 'Only generate zero feedback for operation without feedback within the mp sc schedule horizon'
|
TextBody:
|
[*
|
if( isgeneratezerofeedback )
|
{
|
operations := selectset( this, Unit.Operation, operation, not isnull( operation.AsOperationForOptimization() ) );
|
feedbacks := selectsortedset( updates, Elements, f, true, f.DateTime() );
|
|
schorizonstart := guard( feedbacks.First().DateTime(), DateTime::MaxDateTime() );
|
schorizonend := guard( feedbacks.Last().DateTime(), DateTime::MinDateTime() );
|
|
planningperiods := selectsortedset( this, PlanningPeriod, pp, pp.Start()>= schorizonstart and pp.Start()<= schorizonend , pp.Start() );
|
|
if ( planningperiods.Size() > 0 )
|
{
|
canbedeleted := existings.Difference( updates );
|
|
traverse( operations, Elements, op )
|
{
|
traverse( planningperiods, Elements, pp )
|
{
|
//check on newly updated or created feedback
|
feedback := select( feedbacks,
|
Elements,
|
updatedfeedback,
|
pp.IsInPeriod( updatedfeedback.DateTime(), updatedfeedback.DateTime() ) and updatedfeedback.OperationID() = op.ID() );
|
|
// only check on old feedback if cannot found
|
if ( isnull( feedback ) )
|
{
|
feedback := select( canbedeleted,
|
Elements,
|
oldfeedback,
|
pp.IsInPeriod( oldfeedback.DateTime(), oldfeedback.DateTime() ) and oldfeedback.OperationID() = op.ID() );
|
|
//create if not found
|
if ( isnull( feedback ) )
|
{
|
feedback := FeedbackPeriodTaskOperation::Create( this,
|
this.IDHolder().GetFeedbackID(),
|
guard( op.ID(), '' ),
|
pp.Start(),
|
0.0,
|
'',
|
true /*isplannedexact*/,
|
false ); /*isfromdb*/
|
|
}
|
else // update feedbackquantity if found 1
|
{
|
feedback.FeedbackQuantity( 0.0 );
|
}
|
|
updates.Add( feedback );
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
*]
|
}
|