Quintiq file version 2.0
|
#parent: #root
|
StaticMethod ValidateInput (
|
output Strings feedback_o,
|
output Strings sanitycheckfeedback_o,
|
MacroPlan macroplan,
|
Product_MP product,
|
StockingPoint_MP stockingpoint,
|
ActualProductInStockingPointInPeriod actualpispip,
|
Real actualinventorylevelend,
|
Date date,
|
Date manufactureddate
|
) declarative remote as Boolean
|
{
|
Description: 'Validate input for actual pispip'
|
TextBody:
|
[*
|
isvalid := true;
|
|
feedback := '';
|
sanitycheckfeedback := '';
|
|
// Has product
|
if( isnull( product ) )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsNullProduct();
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
|
}
|
// Has stocking point
|
else if( isnull( stockingpoint ) )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsNullStockingPoint();
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
|
}
|
else
|
{
|
planningperiodstart := macroplan.StartOfPlanning().Date();
|
pisp := select( product, ProductInStockingPoint_MP, p, p.StockingPoint_MP() = stockingpoint );
|
|
// set mfg date to MinDate if the product has no shelf life or maturation and not isExludeShelfLifeAndMaturation
|
hasshelflife := product.HasShelfLife()
|
and guard( not pisp.PISPSpecification().IsExcludeShelfLifeAndMaturation(), true );
|
|
hasshelflifeormaturation := product.HasShelfLifeOrMaturation()
|
and guard( not pisp.PISPSpecification().IsExcludeShelfLifeAndMaturation(), true );
|
|
manufactureddate := ifexpr( hasshelflifeormaturation, manufactureddate, Date::MinDate() );
|
|
uniqueidentifier := ActualProductInStockingPointInPeriod::GetUniqueIdentifier( product.ID(), stockingpoint.ID(), date, product.HasShelfLifeOrMaturation(), manufactureddate );
|
|
minimummanufactureddate := ActualProductInStockingPointInPeriod::GetMinimumManufacturedDate( product, stockingpoint, date );
|
|
// Check uniqueness
|
// Check if 'checkunique' = true and if there are any actuals with same type index
|
if( not isnull( pisp )
|
and exists( pisp, ActualProductInStockingPointInPeriod, a2,
|
actualpispip <> a2,
|
a2.GetUniqueIdentifier() = uniqueidentifier ) )
|
{
|
// manufactured date text only needed for product with shelflife/maturation
|
manufactureddatetext := ifexpr( hasshelflife,
|
Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsNotUnique_ManufacturedDateText( manufactureddate ),
|
'' );
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsNotUnique( manufactureddatetext );
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
|
}
|
|
// Validate negative input
|
else if( actualinventorylevelend < 0.0 )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsNegativeActualInventoryLevelEnd( actualinventorylevelend );
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning();
|
}
|
// Check if the provided date is within any periods,
|
// this is only used in GUI because the new GUI allows user to enter a date that is >= start of planning period
|
else if( date >= planningperiodstart )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsValidDate( planningperiodstart );
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
|
}
|
// Check if product has shelf-life and will expire by the period
|
else if( hasshelflife
|
and manufactureddate < minimummanufactureddate )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsExpiredManufacturedDate( manufactureddate, product.ShelfLife(), date );
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning();
|
}
|
// Check if product has shelf-life or maturation, and is manufactured in the future
|
else if( hasshelflifeormaturation
|
and manufactureddate > date )
|
{
|
feedback := Translations::MP_ActualProductInStockingPointInPeriod_ValidateInput_IsFutureManufacturedDate( manufactureddate, date );
|
sanitycheckfeedback := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();
|
}
|
}
|
|
if( feedback <> '' )
|
{
|
isvalid := false;
|
productname := MacroPlan::GetSubstituteName( guard( product.Name(), '' ) );
|
stockingpointname := MacroPlan::GetSubstituteName( guard( stockingpoint.Name(), '' ) );
|
instance := ActualProductInStockingPointInPeriod::GetInstanceText( productname, stockingpointname, date );
|
feedback := SanityCheckMessage::GetFormattedMessage( instance, feedback );
|
|
feedback_o.Add( feedback );
|
sanitycheckfeedback_o.Add( sanitycheckfeedback );
|
}
|
|
return isvalid;
|
*]
|
}
|