| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CanExecuteImportProfiles ( | 
|   output String feedback_o, | 
|   MPSync mpsync, | 
|   Boolean isrefreshfromsource, | 
|   UserImportProfiles userimportprofiles | 
| ) declarative remote as Boolean | 
| { | 
|   Description: 'Validate whether the selected import profiles have different sources for a single object group' | 
|   TextBody: | 
|   [* | 
|     // If MPSync is empty, prompt the user to refresh from data source | 
|     if( not isrefreshfromsource  | 
|         and guard( mpsync.IOBase( relsize ), 0 ) = 0 ) | 
|     { | 
|       feedback_o := Translations::MPSync_ImportProfile_ValidateInput_EmptyMPSync(); | 
|     } | 
|     // Check if there are more than one userimportprofiles | 
|     else if( userimportprofiles.Size() > 1 ) | 
|     { | 
|       stringbreaker := '[qQsTrBrk@]'; | 
|        | 
|       // Get the name of expected import group name | 
|       expectedGroups := selectuniquevalues( userimportprofiles, Elements.ImportObjectGroupInUserProfile, e,  | 
|                                             e.IsIncludeInImportExport(),  | 
|                                             e.ObjectGroupName() ); | 
|       // Get the unique name of the combination of user import profile, import group name, and import file location | 
|       uniqueGroups := selectuniquevalues( userimportprofiles, Elements.BaseImportObjectGroupInProfile, e,  | 
|                                           e.IsIncludeInImportExport(),  | 
|                                           e.GetSourcePathObjectGroupString( stringbreaker ) ); | 
|        | 
|       // If the number of expected groups is not the same as unique groups | 
|       if( expectedGroups.Size() <> uniqueGroups.Size() ) | 
|       { | 
|         // Select the set of duplicated import groups | 
|         erroneousGroups := selectduplicates( uniqueGroups, Elements, e, | 
|                                              true, | 
|                                              e.RestString( e.FindString( stringbreaker, 0 ) ) ); | 
|         // Get the names of the duplicated import groups | 
|         erroneousgroupnames := selectuniquevalues( erroneousGroups, Elements, e, | 
|                                                    true, | 
|                                                    e.RestString( e.FindString( stringbreaker, 0 ) ).ReplaceAll( stringbreaker, '' ) ); | 
|         erroneousgroupnames.Sort(); | 
|         erroneousgroups_feedback := construct( Strings ); | 
|         // Traverse all duplicated import groups' names to construct the feedback | 
|         traverse( erroneousgroupnames, Elements, erroneousgroup_name ) | 
|         { | 
|           // Get the user import profile names that has duplicating import groups that import data from different file locations | 
|           erroneous_userimportprofilenames := selectvalues( userimportprofiles, Elements.BaseImportObjectGroupInProfile, groupinprofile, | 
|                                                             groupinprofile.IsIncludeInImportExport() | 
|                                                             and groupinprofile.ImportObjectGroup().GetDisplayName() = erroneousgroup_name | 
|                                                             and erroneousGroups.Find( groupinprofile.GetSourcePathObjectGroupString( stringbreaker ) ) <> -1, | 
|                                                             groupinprofile.BaseImportProfile().astype( UserImportProfile ).Name() ); | 
|            | 
|           erroneous_userimportprofilenames.Sort(); | 
|           // Generate feedback text | 
|           erroneousgroupandprofile := erroneousgroup_name | 
|                                       + ' - ' | 
|                                       + erroneous_userimportprofilenames.ToString( ', ' ); | 
|           // Add feedback text to the set | 
|           erroneousgroups_feedback.Add( erroneousgroupandprofile ); | 
|         } | 
|          | 
|         erroneousgroups_detail := erroneousgroups_feedback.ToString( String::NewLine() ); | 
|         feedback_o := Translations::MPSync_ImportProfile_ValidateInput_InvalidSources( erroneousgroups_detail ); | 
|       } | 
|     } | 
|      | 
|     return feedback_o = ''; | 
|   *] | 
| } |