private void ExecDistantLocal(Model.Prestashop.PsCategory Category, Model.Local.Catalog Catalog, Model.Local.CatalogRepository CatalogRepository)
        {
            try
            {
                // Recovery Data From CatalogLang
                Model.Prestashop.PsCategoryLangRepository CategoryLangRepository = new Model.Prestashop.PsCategoryLangRepository();
                Model.Prestashop.PsCategoryLang           CategoryLang           = new Model.Prestashop.PsCategoryLang();
                if (CategoryLangRepository.ExistCategoryLang((Int32)Category.IDCategory, Core.Global.Lang, Global.CurrentShop.IDShop))
                {
                    CategoryLang                = CategoryLangRepository.ReadCategoryLang((Int32)Category.IDCategory, Core.Global.Lang, Global.CurrentShop.IDShop);
                    Catalog.Cat_Name            = CategoryLang.Name;
                    Catalog.Cat_Description     = CategoryLang.Description;
                    Catalog.Cat_MetaTitle       = CategoryLang.MetaTitle;
                    Catalog.Cat_MetaKeyword     = CategoryLang.MetaKeywords;
                    Catalog.Cat_MetaDescription = CategoryLang.MetaDescription;
                    Catalog.Cat_LinkRewrite     = CategoryLang.LinkRewrite;
                }

                bool find_parent = false;
                if (Category.IDParent != Core.Global.CurrentShop.IDCategory)
                {
                    if (!CatalogRepository.ExistPre_Id((int)Category.IDParent))
                    {
                        // todo import catalogue depuis prestashop
                        Core.ImportPrestashop.ImportCatalogue ImportCatalogue = new ImportPrestashop.ImportCatalogue();
                        ImportCatalogue.Exec((int)Category.IDParent);
                        find_parent = CatalogRepository.ExistPre_Id((int)Category.IDParent);
                    }
                    else
                    {
                        find_parent = true;
                    }
                    if (find_parent)
                    {
                        Catalog.Cat_Level = Category.LevelDepth;
                    }
                }
                else
                {
                    Catalog.Cat_Level = Category.LevelDepth;
                }

                //Catalog.Cat_Position = (Int32)Category.Position;
                Catalog.Cat_Active = Convert.ToBoolean(Category.Active);
                Catalog.Cat_Date   = (Category.DateUpd != null && Category.DateUpd > new DateTime(1753, 1, 2)) ? Category.DateUpd : DateTime.Now.Date;
                CatalogRepository.Save();

                int parent = (Category.IDParent != Core.Global.CurrentShop.IDCategory)
                    ? CatalogRepository.ReadPre_Id((int)Category.IDParent).Cat_Id
                    : 0;
                CatalogRepository.WriteParent(Catalog.Cat_Id, parent);
            }
            catch (Exception ex)
            {
                Core.Error.SendMailError(ex.ToString());
            }
        }
        public void MoveCatalog()
        {
            if (MessageBox.Show("Valider le déplacement de :\n\""
                                + TargetCatalog.Cat_Name
                                + "\"\n vers :\n\""
                                + ((SelectedCatalog == null) ? "Racine boutique" : SelectedCatalog.Cat_Name) + "\"", "Déplacement catalogue", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                CatalogRepository.WriteParent(TargetCatalog.Cat_Id, ((SelectedCatalog == null) ? 0 : SelectedCatalog.Cat_Id));

                CatalogRepository       = new Model.Local.CatalogRepository();
                TargetCatalog           = CatalogRepository.ReadId(TargetCatalog.Cat_Id);
                TargetCatalog.Cat_Level = ((SelectedCatalog == null) ? 2 : SelectedCatalog.Cat_Level + 1);
                TargetCatalog.Cat_Date  = DateTime.Now;

                // <JG> 07/10/2016 ajout recalcul des niveaux sur les enfants
                ChangeLevelChilds(TargetCatalog);

                CatalogRepository.Save();
            }
        }
        private void ExecLocalDistant(Model.Local.Catalog Catalog, Model.Prestashop.PsCategory Category, Model.Local.CatalogRepository CatalogRepository, Model.Prestashop.PsCategoryRepository CategoryRepository, Boolean isCategory, uint IdParent)
        {
            try
            {
                bool flag_move = (Category.IDParent != IdParent);

                Core.Temp.SyncCatalogue_ClearSmartyCache = true;
                Core.Temp.SyncCatalogue_RegenerateTree   = true;
                // Assign data from Catalog to Category
                //Category.Position = (uint)Catalog.Cat_Position;
                Category.Active     = Convert.ToByte(Catalog.Cat_Active);
                Category.LevelDepth = (Byte)Catalog.Cat_Level;
                Category.IDParent   = IdParent;
                Category.DateUpd    = Catalog.Cat_Date;
                // use cron for function "regenerateEntireNtree"
                //Category.NLeft = CategoryRepository.ReadId(IdParent).NLeft;
                //Category.NRight = CategoryRepository.ReadId(IdParent).NRight;
                Category.IDShopDefault = Global.CurrentShop.IDShop;
                if (isCategory == false)
                {
                    Category.DateAdd        = Category.DateUpd;
                    Category.IsRootCategory = Convert.ToSByte(false);
                    Category.Position       = 0;
                    CategoryRepository.Add(Category, Global.CurrentShop.IDShop);
                    // We assign the CategoryId to Catalog
                    Catalog.Pre_Id = (Int32)Category.IDCategory;
                    CatalogRepository.Save();
                }
                else
                {
                    CategoryRepository.Save();

                    if (flag_move)
                    {
                        Model.Prestashop.PsCategoryShopRepository PsCategoryShopRepository = new Model.Prestashop.PsCategoryShopRepository();
                        if (PsCategoryShopRepository.ExistCategoryShop(Category.IDCategory, Core.Global.CurrentShop.IDShop))
                        {
                            Model.Prestashop.PsCategoryShop PsCategoryShop = PsCategoryShopRepository.ReadCategoryShop(Category.IDCategory, Core.Global.CurrentShop.IDShop);
                            PsCategoryShop.Position = new Model.Prestashop.PsCategoryRepository().ReadNextPosition(1, Category, (uint)Core.Global.CurrentShop.IDShop);
                            PsCategoryShopRepository.Save();

                            Category.Position = PsCategoryShop.Position;
                            CategoryRepository.Save();
                        }
                    }
                }

                // We need to update CategoryLang too
                Boolean isCategoryLang = false;
                Model.Prestashop.PsCategoryLangRepository CategoryLangRepository = new Model.Prestashop.PsCategoryLangRepository();
                Model.Prestashop.PsCategoryLang           CategoryLang           = new Model.Prestashop.PsCategoryLang();
                if (CategoryLangRepository.ExistCategoryLang((Int32)Category.IDCategory, Core.Global.Lang, Global.CurrentShop.IDShop))
                {
                    CategoryLang   = CategoryLangRepository.ReadCategoryLang((Int32)Category.IDCategory, Core.Global.Lang, Global.CurrentShop.IDShop);
                    isCategoryLang = true;
                }
                CategoryLang.Name            = Core.Global.RemovePurge(Catalog.Cat_Name, 128);
                CategoryLang.Description     = Catalog.Cat_Description;
                CategoryLang.LinkRewrite     = Core.Global.ReadLinkRewrite(Catalog.Cat_LinkRewrite);
                CategoryLang.MetaTitle       = Core.Global.RemovePurge(Catalog.Cat_MetaTitle, 70);
                CategoryLang.MetaDescription = Core.Global.RemovePurge(Catalog.Cat_MetaDescription, 160);
                CategoryLang.MetaKeywords    = Core.Global.RemovePurgeMeta(Catalog.Cat_MetaKeyword, 255);

                if (isCategoryLang == false)
                {
                    CategoryLang.IDShop     = Global.CurrentShop.IDShop;
                    CategoryLang.IDLang     = (uint)Core.Global.Lang;
                    CategoryLang.IDCategory = Category.IDCategory;
                    CategoryLangRepository.Add(CategoryLang);
                }
                else
                {
                    CategoryLangRepository.Save();
                }


                // <JG> 26/12/2012 ajout insertion autres langues actives si non renseignées
                try
                {
                    Model.Prestashop.PsLangRepository PsLangRepository = new Model.Prestashop.PsLangRepository();
                    foreach (Model.Prestashop.PsLang PsLang in PsLangRepository.ListActive(1, Global.CurrentShop.IDShop))
                    {
                        if (!CategoryLangRepository.ExistCategoryLang((int)Category.IDCategory, PsLang.IDLang, Global.CurrentShop.IDShop))
                        {
                            CategoryLang                 = new Model.Prestashop.PsCategoryLang();
                            CategoryLang.IDShop          = Global.CurrentShop.IDShop;
                            CategoryLang.IDCategory      = Category.IDCategory;
                            CategoryLang.IDLang          = PsLang.IDLang;
                            CategoryLang.Name            = Core.Global.RemovePurge(Catalog.Cat_Name, 128);
                            CategoryLang.Description     = Catalog.Cat_Description;
                            CategoryLang.LinkRewrite     = Core.Global.ReadLinkRewrite(Catalog.Cat_LinkRewrite);
                            CategoryLang.MetaTitle       = Core.Global.RemovePurge(Catalog.Cat_MetaTitle, 70);
                            CategoryLang.MetaDescription = Core.Global.RemovePurge(Catalog.Cat_MetaDescription, 160);
                            CategoryLang.MetaKeywords    = Core.Global.RemovePurgeMeta(Catalog.Cat_MetaKeyword, 255);
                            CategoryLangRepository.Add(CategoryLang);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Core.Error.SendMailError(ex.ToString());
                }

                this.ExecGroupsLocalDistant(Category);

                // We need to send pictures
                this.ExecLocalDistantImage(Catalog, Category);
            }
            catch (Exception ex)
            {
                Core.Error.SendMailError(ex.ToString());
            }
        }