Quintiq file version 2.0
#parent: MatrixEditorProductPlanning
Response OnEndEdit (
  structured[ProductInStockingPointInPeriod] cell,
  structured[internal[MatrixEditorCell]] newvalue
) id:Response_FormProductPlanningMatrix_MatrixEditorProductPlanning_OnEndEdit
{
  #keys: '[132448.0.56969954]'
  Body:
  [*
    //Smart plan with user qty
    pispipPlannings := selectset( cell, Elements.astype( ProductInStockingPointInPeriodPlanning ), pispipPlanning, true )                              
    Form.UpdatePISPIPValues( pispipPlannings, newvalue );
    
    ApplicationLibMacroPlanner.RefreshFormSupplyPlanWebClient();
    this.EndEdit( false );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_MatrixEditor_OnEndEdit'
  Precondition:
  [*
    //Check 2 conditions:
    //1 - whether the selected attribute can be edited
    //2 - whether the params and profiles are there
    //3 - if editing supply qty, check if optimizer can be executed
    attributes := selectvalues( newvalue, Elements, e, true, e.AttributePath() );
    isSupply_o := false;
    cond := ProductInStockingPointInPeriod::CanEnterSupplyQuantity( feedback, cell, attributes, isSupply_o ); 
    
    // Only check for condition 2 if editing supplyQuantity
    if( cond )
    {
      if( isSupply_o )
      {
        periods := selectset( cell, Elements.Period_MP, period, true );
        cond := Form.CheckExistParamAndProfile( feedback,
                                                cell.Element( 0 ), // pispip
                                                /* User [Real] instead of ApplicationMacroPlanner.FormatStringToReal
                                                   MatrixEdiot will do the format internaly to match the server locale
                                                   and it only allow Real for cell bind to Real attribute */
                                                [Real]newvalue.Element( 0 ).NewValue() )
                and ScenarioManager::CanStartSmartPlan( ScenarioManager,
                                                        DataHolderActiveScenario.Data(),
                                                        true,
                                                        periods,
                                                        feedback );
      }     
    }
    
    return cond;
  *]
}
