private void LoadWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <int> ArticleIds = new Model.Local.ArticleRepository().ListIdSync(true);

            if (ArticleIds != null)
            {
                Core.Transfert.TransfertArticleImage sync = new Core.Transfert.TransfertArticleImage();

                if (!Core.Global.GetConfig().ConfigImageSynchroPositionLegende)
                {
                    Model.Local.ArticleImageRepository ArticleImageRepository = new Model.Local.ArticleImageRepository();
                    List <int> listarticlewithimagetosync = ArticleImageRepository.ListIDArticleNotSync();
                    ArticleIds = ArticleIds.Where(a => listarticlewithimagetosync.Contains(a)).ToList();
                }

                int count = ArticleIds.Count;

                for (int i = 0; i < count; i++)
                {
                    sync.Exec(ArticleIds[i]);
                    LoadWorker.ReportProgress((((i + 1) * 100) / count));
                }
            }
        }
        public ReimportArticle(List <Int32> ListArticleSend)
        {
            this.InitializeComponent();
            List <Int32> ListArticle = ListArticleSend;

            if (Core.Global.GetConfig().ReimportUpdateAttribute || Core.Global.GetConfig().ReimportUpdateConditioning)
            {
                List <Model.Local.Article_Light> ListLocal = new Model.Local.ArticleRepository().ListLight();
                List <Int32> ListSagId = ListLocal.Where(l => ListArticleSend.Contains(l.Art_Id)).Select(l => l.Sag_Id).ToList();

                #region TODO TRANSFERT IN STATIC METHOD duplicate from importsagearticle.xaml.cs
                Model.Sage.F_ARTICLERepository    F_ARTICLERepository = new Model.Sage.F_ARTICLERepository();
                List <Model.Sage.F_ARTICLE_Light> ListF_ARTICLE       = F_ARTICLERepository.ListLight();

                ListF_ARTICLE = ListF_ARTICLE.AsParallel().Where(a => ListSagId.Contains(a.cbMarq)).AsParallel().ToList();

                ListF_ARTICLE = Core.Tools.FiltreImportSage.ImportSageFilter(ListF_ARTICLE);

                List <string> list_arref = ListF_ARTICLE.Select(a => a.AR_Ref).ToList();

                // ajout pré-import gammes / conditionnements
                // !!! traitement en parallèle déconseillé !!!
                // occurences d'énumérés pouvant se recouper entre les articles

                if (Core.Global.GetConfig().ReimportUpdateAttribute)
                {
                    List <short?> gammes = new List <short?>();
                    gammes.AddRange(ListF_ARTICLE.Where(a => a.AR_Gamme1 != null && a.AR_Gamme1 != 0).Select(a => a.AR_Gamme1).Distinct());
                    gammes.AddRange(ListF_ARTICLE.Where(a => a.AR_Gamme2 != null && a.AR_Gamme2 != 0).Select(a => a.AR_Gamme2).Distinct());

                    // import gammes
                    ImportSageGamme importsagegamme = new ImportSageGamme(gammes);
                    importsagegamme.ShowDialog();

                    // import énumérés de gammes
                    List <Model.Sage.F_ARTENUMREF> declinaisons = new Model.Sage.F_ARTENUMREFRepository().List().ToList();
                                        #if !(SAGE_VERSION_16 || SAGE_VERSION_17)
                    declinaisons = declinaisons.Where(d => d.AE_Sommeil == 0).ToList();
                                        #endif

                    declinaisons = Core.Tools.FiltreImportSage.ImportSageFilter(declinaisons);

                    List <Model.Sage.F_ARTGAMME> enumeres_gammes = new Model.Sage.F_ARTGAMMERepository().List();
                    List <int> localAttribute = new Model.Local.AttributeRepository().List().Select(a => a.Sag_Id).AsParallel().ToList();
                    enumeres_gammes = enumeres_gammes.AsParallel().Where(e => list_arref.Contains(e.AR_Ref) &&
                                                                         !localAttribute.Contains(e.cbMarq) &&
                                                                         declinaisons.Count(d => d.AG_No1 == e.AG_No || d.AG_No2 == e.AG_No) > 0).ToList();

                    enumeres_gammes = Core.Tools.FiltreImportSage.ImportSageFilter(enumeres_gammes);

                    ImportSageGammeEnumere importsagegammeenumere = new ImportSageGammeEnumere(enumeres_gammes);
                    importsagegammeenumere.ShowDialog();
                }

                // import conditionnements
                if (Core.Global.GetConfig().ReimportUpdateConditioning)
                {
                    if (Core.Global.GetConfig().ArticleImportConditionnementActif)
                    {
                        List <short?>             conditionnements          = ListF_ARTICLE.Where(a => a.AR_Condition != null && a.AR_Condition != 0).Select(a => a.AR_Condition).Distinct().ToList();
                        ImportSageConditionnement importsageconditionnement = new ImportSageConditionnement(conditionnements);
                        importsageconditionnement.ShowDialog();

                        List <Model.Sage.F_CONDITION> enumeres_conditionnement = new Model.Sage.F_CONDITIONRepository().List();
                        List <int> localConditioning = new Model.Local.ConditioningRepository().List().Select(c => c.Sag_Id).AsParallel().ToList();
                        enumeres_conditionnement = enumeres_conditionnement.AsParallel().Where(e => list_arref.Contains(e.AR_Ref) &&
                                                                                               !localConditioning.Contains(e.cbMarq)).ToList();

                        enumeres_conditionnement = Core.Tools.FiltreImportSage.ImportSageFilter(enumeres_conditionnement);

                        ImportSageConditionnementEnumere importsageconditionnementenumere = new ImportSageConditionnementEnumere(enumeres_conditionnement);
                        importsageconditionnementenumere.ShowDialog();
                    }
                }
                // fin
                #endregion
            }

            this.ListCount = ListArticle.Count;
            Context        = SynchronizationContext.Current;
            this.ParallelOptions.MaxDegreeOfParallelism = System.Environment.ProcessorCount;
            this.ReportProgress(0);
            Task.Factory.StartNew(() =>
            {
                Parallel.ForEach(ListArticle, this.ParallelOptions, Sync);
            });
        }