private void ExecAttributeImage(Model.Local.Article Article)
        {
            Model.Local.ArticleImageRepository ArticleImageRepository = new Model.Local.ArticleImageRepository();
            List <Model.Local.ArticleImage>    ListArticleImage       = ArticleImageRepository.ListArticle(Article.Art_Id);

            Model.Local.AttributeArticleImageRepository        AttributeArticleImageRepository   = new Model.Local.AttributeArticleImageRepository();
            Model.Local.CompositionArticleImageRepository      CompositionArticleImageRepository = new Model.Local.CompositionArticleImageRepository();
            Model.Prestashop.PsProductAttributeImageRepository PsProductAttributeImageRepository = new Model.Prestashop.PsProductAttributeImageRepository();
            Model.Prestashop.PsImageRepository PsImageRepository  = new Model.Prestashop.PsImageRepository();
            Model.Local.AttributeArticle       AttributeArticle   = new Model.Local.AttributeArticle();
            Model.Local.CompositionArticle     CompositionArticle = new Model.Local.CompositionArticle();

            foreach (Model.Local.ArticleImage ArticleImage in ListArticleImage)
            {
                if (ArticleImage.Pre_Id != null && PsImageRepository.ExistImage((uint)ArticleImage.Pre_Id.Value))
                {
                    List <Model.Local.AttributeArticleImage>   ListAttributeArticleImage   = AttributeArticleImageRepository.ListImageArticle(ArticleImage.ImaArt_Id);
                    List <Model.Local.CompositionArticleImage> ListCompositionArticleImage = CompositionArticleImageRepository.ListImageArticle(ArticleImage.ImaArt_Id);

                    #region suppression lien image déclinaison PrestaShop
                    Model.Local.AttributeArticleRepository   AttributeArticleRepository   = new Model.Local.AttributeArticleRepository();
                    Model.Local.CompositionArticleRepository CompositionArticleRepository = new Model.Local.CompositionArticleRepository();
                    // liste des liens images déclinaisons Prestashop
                    foreach (Model.Prestashop.PsProductAttributeImage PsProductAttributeImage in PsProductAttributeImageRepository.ListImage((uint)ArticleImage.Pre_Id))
                    {
                        // si la déclinaison existe dans PrestaConnect
                        if (AttributeArticleRepository.ExistPrestashop((int)PsProductAttributeImage.IDProductAttribute))
                        {
                            AttributeArticle = AttributeArticleRepository.ReadPrestashop((int)PsProductAttributeImage.IDProductAttribute);
                            // si dans prestaconnect la déclinaison n'est pas liée à l'image
                            if (!AttributeArticleImageRepository.ExistAttributeArticleImage(AttributeArticle.AttArt_Id, ArticleImage.ImaArt_Id))
                            {
                                // suppression du lien dans PrestaShop
                                PsProductAttributeImageRepository.Delete(PsProductAttributeImage);
                            }
                        }
                        else if (CompositionArticleRepository.ExistPrestaShop((int)PsProductAttributeImage.IDProductAttribute))
                        {
                            CompositionArticle = CompositionArticleRepository.ReadPrestaShop((int)PsProductAttributeImage.IDProductAttribute);
                            // si dans prestaconnect la déclinaison n'est pas liée à l'image
                            if (!CompositionArticleImageRepository.ExistCompositionArticleImage(CompositionArticle.ComArt_Id, ArticleImage.ImaArt_Id))
                            {
                                // suppression du lien dans PrestaShop
                                PsProductAttributeImageRepository.Delete(PsProductAttributeImage);
                            }
                        }
                    }
                    #endregion

                    // affectation image déclinaison
                    foreach (Model.Local.AttributeArticleImage AttributeArticleImage in ListAttributeArticleImage)
                    {
                        if (AttributeArticleImage.AttributeArticle.Pre_Id != null &&
                            AttributeArticleImage.AttributeArticle.Pre_Id != 0)
                        {
                            if (PsProductAttributeImageRepository.ExistProductAttributeImage((UInt32)AttributeArticleImage.AttributeArticle.Pre_Id, (UInt32)AttributeArticleImage.ArticleImage.Pre_Id) == false)
                            {
                                PsProductAttributeImageRepository.Add(new Model.Prestashop.PsProductAttributeImage()
                                {
                                    IDImage            = (UInt32)AttributeArticleImage.ArticleImage.Pre_Id,
                                    IDProductAttribute = (UInt32)AttributeArticleImage.AttributeArticle.Pre_Id,
                                });
                            }
                        }
                    }
                    foreach (Model.Local.CompositionArticleImage CompositionArticleImage in ListCompositionArticleImage)
                    {
                        if (CompositionArticleImage.CompositionArticle.Pre_Id != null &&
                            CompositionArticleImage.CompositionArticle.Pre_Id != 0)
                        {
                            if (PsProductAttributeImageRepository.ExistProductAttributeImage((UInt32)CompositionArticleImage.CompositionArticle.Pre_Id, (UInt32)CompositionArticleImage.ArticleImage.Pre_Id) == false)
                            {
                                PsProductAttributeImageRepository.Add(new Model.Prestashop.PsProductAttributeImage()
                                {
                                    IDImage            = (UInt32)CompositionArticleImage.ArticleImage.Pre_Id,
                                    IDProductAttribute = (UInt32)CompositionArticleImage.CompositionArticle.Pre_Id,
                                });
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        private void ExecCompositionArticle(Model.Local.Article Article, Model.Prestashop.PsProduct Product)
        {
            Model.Sage.F_ARTICLERepository           F_ARTICLERepository          = new Model.Sage.F_ARTICLERepository();
            Model.Local.CompositionArticleRepository CompositionArticleRepository = new Model.Local.CompositionArticleRepository();
            List <Model.Local.CompositionArticle>    ListCompositionArticle       = CompositionArticleRepository.ListArticle(Article.Art_Id);

            foreach (var item in ListCompositionArticle)
            {
                try
                {
                    Model.Sage.F_ARTICLE_Composition F_ARTICLE_Composition = F_ARTICLERepository.ReadComposition(item.ComArt_F_ARTICLE_SagId, item.ComArt_F_ARTENUMREF_SagId, item.ComArt_F_CONDITION_SagId);
                    if (F_ARTICLE_Composition != null)
                    {
                        Model.Sage.F_ARTICLE F_ARTICLE = F_ARTICLERepository.ReadArticle(item.ComArt_F_ARTICLE_SagId);
                        Model.Prestashop.PsProductAttributeRepository PsProductAttributeRepository  = new Model.Prestashop.PsProductAttributeRepository();
                        Model.Prestashop.PsProductAttribute           PsProductAttributeComposition = new Model.Prestashop.PsProductAttribute();
                        Boolean isProductAttribute = false;
                        if (item.Pre_Id != null && PsProductAttributeRepository.ExistProductAttribute((uint)item.Pre_Id))
                        {
                            PsProductAttributeComposition = PsProductAttributeRepository.ReadProductAttribute((uint)item.Pre_Id);
                            if (PsProductAttributeComposition != null)
                            {
                                isProductAttribute = true;
                            }
                        }

                        if (isProductAttribute == true)
                        {
                            int CatComptaArticle      = Core.Global.GetConfig().ConfigArticleCatComptable;
                            Model.Sage.F_TAXE TaxeTVA = SynchronisationArticle.ReadTaxe(F_ARTICLE, Product, CatComptaArticle);

                            Model.Prestashop.PsProduct temp_product = new Model.Prestashop.PsProduct();
                            temp_product.taxe_famillesage = Product.taxe_famillesage;

                            // temp_product sert pour conserver l'information "ecoraxeht_sage" pour la fonction SpecificPrice
                            Model.Sage.F_TAXE TaxeEco = SynchronisationArticle.ReadEcoTaxe(F_ARTICLE, temp_product, TaxeTVA, CatComptaArticle);
                            PsProductAttributeComposition.EcOtAx = temp_product.EcOtAx;

                            if (F_ARTICLE_Composition.F_CONDITION_SagId == null && F_ARTICLE_Composition.F_ARTENUMREF_SagId == null)
                            {
                                if (Core.Global.GetConfig().MajPoidsSynchroStock)
                                {
                                    SynchronisationArticle.ReadWeight(F_ARTICLE, PsProductAttributeComposition);
                                }

                                SynchronisationArticle.ReadQuantity(F_ARTICLE, PsProductAttributeComposition);

                                // <JG> 03/06/2016
                                if (Article.Art_SyncPrice)
                                {
                                    SynchronisationArticle.ReadPrice(F_ARTICLE, PsProductAttributeComposition, TaxeTVA);
                                }

                                //List<string> log;
                                //this.ExecSpecificPrice(F_ARTICLE, Product, Article.Art_Id, TaxeTVA, TaxeEco, out log);
                                //if (log != null && log.Count > 0)
                                //    log_chrono.AddRange(log);
                            }
                            else if (F_ARTICLE_Composition.F_ARTENUMREF_SagId != null)
                            {
                                Model.Prestashop.PsProduct temp_product_f_artenumref = new Model.Prestashop.PsProduct();
                                // lecture des valeurs pour F_ARTICLE
                                if (Core.Global.GetConfig().MajPoidsSynchroStock)
                                {
                                    SynchronisationArticle.ReadWeight(F_ARTICLE, temp_product_f_artenumref);
                                }

                                SynchronisationArticle.ReadQuantity(F_ARTICLE, temp_product_f_artenumref);

                                // <JG> 03/06/2016
                                if (Article.Art_SyncPrice)
                                {
                                    SynchronisationArticle.ReadPrice(F_ARTICLE, temp_product_f_artenumref, TaxeTVA);
                                }

                                // transformation en fonction de f_artenumref
                                if (Core.Global.GetConfig().MajPoidsSynchroStock)
                                {
                                    SynchronisationArticle.ReadWeightAttribute(temp_product_f_artenumref, PsProductAttributeComposition, F_ARTICLE, item.EnumereGamme1);
                                    PsProductAttributeComposition.Weight += temp_product_f_artenumref.Weight;
                                }
                                SynchronisationArticle.ReadQuantityAttribute(PsProductAttributeComposition, F_ARTICLE, item.EnumereGamme1, item.EnumereGamme2);
                                //SynchronisationArticle.ReadRefEANAttribute(PsProductAttributeComposition, F_ARTICLE, item.EnumereGamme1, item.EnumereGamme2);

                                // <JG> 03/06/2016
                                if (Article.Art_SyncPrice)
                                {
                                    SynchronisationArticle.ReadPriceAttribute(temp_product_f_artenumref, PsProductAttributeComposition, F_ARTICLE, item.EnumereGamme1, item.EnumereGamme2, TaxeTVA);
                                }
                                PsProductAttributeComposition.Price += temp_product_f_artenumref.Price;
                            }
                            else if (F_ARTICLE_Composition.F_CONDITION_SagId != null)
                            {
                                Model.Prestashop.PsProduct temp_product_f_condition = new Model.Prestashop.PsProduct();
                                // lecture des valeurs pour F_ARTICLE
                                if (Core.Global.GetConfig().MajPoidsSynchroStock)
                                {
                                    SynchronisationArticle.ReadWeight(F_ARTICLE, temp_product_f_condition);
                                }

                                SynchronisationArticle.ReadQuantity(F_ARTICLE, temp_product_f_condition);

                                // <JG> 03/06/2016
                                if (Article.Art_SyncPrice)
                                {
                                    SynchronisationArticle.ReadPrice(F_ARTICLE, temp_product_f_condition, TaxeTVA);
                                }

                                // transformation en fonction de F_CONDITION
                                if (Core.Global.GetConfig().MajPoidsSynchroStock)
                                {
                                    SynchronisationArticle.ReadWeightConditioning(temp_product_f_condition, PsProductAttributeComposition, item.EnumereF_CONDITION);
                                    PsProductAttributeComposition.Weight += temp_product_f_condition.Weight;
                                }
                                SynchronisationArticle.ReadQuantityConditioning(PsProductAttributeComposition, F_ARTICLE, item.EnumereF_CONDITION);

                                // <JG> 03/06/2016
                                if (Article.Art_SyncPrice)
                                {
                                    SynchronisationArticle.ReadPriceConditioning(temp_product_f_condition, PsProductAttributeComposition, F_ARTICLE, item.EnumereF_CONDITION, TaxeTVA);
                                }
                                PsProductAttributeComposition.Price += temp_product_f_condition.Price;
                            }

                            //PsProductAttributeComposition.DefaultOn = (item.ComArt_Default) ? (byte)1 : (byte)0;
                            PsProductAttributeRepository.Save();
                            SynchronisationArticle.ExecShopProductAttribute(PsProductAttributeComposition);

                            SynchronisationArticle.WriteStockAvailableComposition(Product, PsProductAttributeComposition);

                            // <JG> 03/06/2016
                            if (Article.Art_SyncPrice)
                            {
                                // prix spécifiques
                                temp_product.Price     = PsProductAttributeComposition.Price;
                                temp_product.IDProduct = Product.IDProduct;
                                List <string> log;
                                SynchronisationArticle.ExecSpecificPrice(F_ARTICLE, temp_product, Article, item, TaxeTVA, TaxeEco, out log);
                                if (log != null && log.Count > 0)
                                {
                                    SynchronisationArticle.log_chrono.AddRange(log);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex) { Core.Error.SendMailError(ex.ToString()); }
            }
        }
        public void SearchArticleComposition()
        {
            if (SelectedF_TAXE == null)
            {
                MessageBox.Show("Veuillez sélectionner une taxe !", "Recherche article", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            else
            {
                List <Model.Sage.F_ARTICLE_Composition> temp = new Model.Sage.F_ARTICLERepository().ListComposition();

                // Filtres sommeil et publié
                bool sommeil   = Core.Global.GetConfig().ArticleEnSommeil;
                bool nonpublie = Core.Global.GetConfig().ArticleNonPublieSurLeWeb;
                // <JG> 19/12/2016 ajout filtre gammes
                temp = temp.Where(ar => (sommeil || ar.AR_Sommeil == 0) && (nonpublie || ar.AR_Publie == 1) && (sommeil || ar.AE_Sommeil != 1)).ToList();

                Model.Local.CompositionArticleRepository CompositionArticleRepository = new Model.Local.CompositionArticleRepository();
                Model.Local.ArticleRepository            ArticleRepository            = new Model.Local.ArticleRepository();

                // FILTRE TAXE OBLIGATOIRE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                #region Taxes
                switch (Core.Global.GetConfig().TaxSageTVA)
                {
                case PRESTACONNECT.Core.Parametres.TaxSage.CodeTaxe1:
                    temp = temp.Where(a => a.TA_Code1 == SelectedF_TAXE.TA_Code || (string.IsNullOrEmpty(a.TA_Code1) && a.TA_CodeFamille1 == SelectedF_TAXE.TA_Code)).ToList();
                    break;

                case PRESTACONNECT.Core.Parametres.TaxSage.CodeTaxe2:
                    temp = temp.Where(a => a.TA_Code2 == SelectedF_TAXE.TA_Code || (string.IsNullOrEmpty(a.TA_Code2) && a.TA_CodeFamille2 == SelectedF_TAXE.TA_Code)).ToList();
                    break;

                case PRESTACONNECT.Core.Parametres.TaxSage.CodeTaxe3:
                    temp = temp.Where(a => a.TA_Code3 == SelectedF_TAXE.TA_Code || (string.IsNullOrEmpty(a.TA_Code3) && a.TA_CodeFamille3 == SelectedF_TAXE.TA_Code)).ToList();
                    break;

                case PRESTACONNECT.Core.Parametres.TaxSage.Empty:
                default:
                    temp = new List <Model.Sage.F_ARTICLE_Composition>();
                    break;
                }
                #endregion

                if (temp.Count == 0)
                {
                    MessageBox.Show("Aucun résultat pour la taxe sélectionnée !", "Recherche article", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    // filtres
                    if (SelectedF_FAMILLE != null)
                    {
                        temp = temp.Where(ar => ar.FA_CodeFamille == SelectedF_FAMILLE.FA_CodeFamille).ToList();
                    }
                    if (SelectedP_GAMME1 != null)
                    {
                        temp = temp.Where(ar => ar.AR_Gamme1 == SelectedP_GAMME1.cbMarq).ToList();
                    }
                    if (SelectedP_GAMME2 != null)
                    {
                        temp = temp.Where(ar => ar.AR_Gamme2 == SelectedP_GAMME1.cbMarq).ToList();
                    }
                    if (SelectedP_CONDITIONNEMENT != null)
                    {
                        temp = temp.Where(ar => ar.AR_Condition == SelectedP_CONDITIONNEMENT.cbMarq).ToList();
                    }
                    if (!string.IsNullOrWhiteSpace(FilterReferenceValue))
                    {
                        if (FilterReferenceContains)
                        {
                            temp = temp.Where(ar => ar.AR_Ref.Contains(FilterReferenceValue)).ToList();
                        }
                        if (FilterReferenceStartWith)
                        {
                            temp = temp.Where(ar => ar.AR_Ref.StartsWith(FilterReferenceValue)).ToList();
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(FilterDesignationValue))
                    {
                        if (FilterDesignationContains)
                        {
                            temp = temp.Where(ar => ar.AR_Design.ToLower().Contains(FilterDesignationValue.ToLower())).ToList();
                        }
                        if (FilterDesignationStartWith)
                        {
                            temp = temp.Where(ar => ar.AR_Design.ToLower().StartsWith(FilterDesignationValue.ToLower())).ToList();
                        }
                    }

                    List <Int32> ListF_ARTICLE_SagId    = null;
                    List <Int32> ListF_ARTENUMREF_SagId = null;
                    List <Int32> ListF_CONDITION_SagId  = null;
                    if (FilterComposition)
                    {
                        ListF_ARTICLE_SagId    = CompositionArticleRepository.ListSageF_ARTICLE();
                        ListF_ARTENUMREF_SagId = CompositionArticleRepository.ListSageF_ARTENUMREF();
                        ListF_CONDITION_SagId  = CompositionArticleRepository.ListSageF_CONDITION();
                    }
                    if (FilterArticle)
                    {
                        if (ListF_ARTICLE_SagId != null)
                        {
                            ListF_ARTICLE_SagId.AddRange(ArticleRepository.ListSageId());
                        }
                        else
                        {
                            ListF_ARTICLE_SagId = ArticleRepository.ListSageId();
                        }
                    }
                    if (ListF_ARTICLE_SagId != null)
                    {
                        temp = temp.Where(ar => !ListF_ARTICLE_SagId.Contains(ar.cbMarq)).ToList();
                    }
                    if (ListF_ARTENUMREF_SagId != null)
                    {
                        temp = temp.Where(ar => ar.F_ARTENUMREF_SagId == null || (ar.F_ARTENUMREF_SagId != null && !ListF_ARTENUMREF_SagId.Contains(ar.F_ARTENUMREF_SagId.Value))).ToList();
                    }
                    if (ListF_CONDITION_SagId != null)
                    {
                        temp = temp.Where(ar => ar.F_CONDITION_SagId == null || (ar.F_CONDITION_SagId != null && !ListF_CONDITION_SagId.Contains(ar.F_CONDITION_SagId.Value))).ToList();
                    }

                    // filtres exclusion
                    int count = temp.Count;
                    List <Model.Sage.F_ARTICLE_Composition> results = Core.Tools.FiltreImportSage.ImportSageFilter(temp);
                    StrCompositionFilteredProducts = (results.Count < count) ? ((count - results.Count) + " résultats dans les filtres d'exclusion") : string.Empty;
                    if (!ShowResultInImportSageFilter)
                    {
                        temp = results;
                    }

                    ListResultSearchCompositionArticle = new ObservableCollection <Model.Sage.F_ARTICLE_Composition>(temp);
                }
            }
        }
        private void ExecAttributeImage(Model.Prestashop.PsImage PsImage, Model.Local.ArticleImage ArticleImage)
        {
            Model.Prestashop.PsProductAttributeImageRepository PsProductAttributeImageRepository = new Model.Prestashop.PsProductAttributeImageRepository();
            List <Model.Prestashop.PsProductAttributeImage>    ListPsProductAttributeImage       = PsProductAttributeImageRepository.ListImage(PsImage.IDImage);

            Model.Local.AttributeArticleImageRepository   AttributeArticleImageRepository   = new Model.Local.AttributeArticleImageRepository();
            Model.Local.CompositionArticleImageRepository CompositionArticleImageRepository = new Model.Local.CompositionArticleImageRepository();
            Model.Local.AttributeArticleRepository        AttributeArticleRepository        = new Model.Local.AttributeArticleRepository();
            Model.Local.CompositionArticleRepository      CompositionArticleRepository      = new Model.Local.CompositionArticleRepository();

            #region suppression lien image déclinaison
            List <Model.Local.AttributeArticleImage>   ListAttributeArticleImage   = AttributeArticleImageRepository.ListImageArticle(ArticleImage.ImaArt_Id);
            List <Model.Local.CompositionArticleImage> ListCompositionArticleImage = CompositionArticleImageRepository.ListImageArticle(ArticleImage.ImaArt_Id);

            Model.Prestashop.PsProductAttributeRepository PsProductAttributeRepository = new Model.Prestashop.PsProductAttributeRepository();
            // liste des liens images déclinaisons PrestaConnect
            foreach (Model.Local.AttributeArticleImage AttributeArticleImage in ListAttributeArticleImage)
            {
                // si la déclinaison PrestaConnectexiste dans PrestaConnect
                if (AttributeArticleRepository.Exist(AttributeArticleImage.AttArt_Id))
                {
                    Model.Local.AttributeArticle AttributeArticle = AttributeArticleRepository.Read(AttributeArticleImage.AttArt_Id);
                    if (AttributeArticle.Pre_Id != null && AttributeArticle.Pre_Id != 0)
                    {
                        // si dans PrestaShop la déclinaison n'est pas liée à l'image
                        if (ListPsProductAttributeImage.Count(pai => pai.IDProductAttribute == (uint)AttributeArticle.Pre_Id.Value) == 0)
                        {
                            // suppression du lien dans PrestaConnect
                            AttributeArticleImageRepository.Delete(AttributeArticleImage);
                        }
                    }
                }
            }
            foreach (Model.Local.CompositionArticleImage CompositionArticleImage in ListCompositionArticleImage)
            {
                if (CompositionArticleRepository.Exist(CompositionArticleImage.ComArt_Id))
                {
                    Model.Local.CompositionArticle CompositionArticle = CompositionArticleRepository.Read(CompositionArticleImage.ComArt_Id);
                    if (CompositionArticle.Pre_Id != null && CompositionArticle.Pre_Id != 0)
                    {
                        // si dans PrestaShop la déclinaison n'est pas liée à l'image
                        if (ListPsProductAttributeImage.Count(pai => pai.IDProductAttribute == (uint)CompositionArticle.Pre_Id.Value) == 0)
                        {
                            // suppression du lien dans PrestaConnect
                            CompositionArticleImageRepository.Delete(CompositionArticleImage);
                        }
                    }
                }
            }
            #endregion

            foreach (Model.Prestashop.PsProductAttributeImage PsProductAttributeImage in ListPsProductAttributeImage)
            {
                if (AttributeArticleRepository.ExistPrestashop((int)PsProductAttributeImage.IDProductAttribute))
                {
                    Model.Local.AttributeArticle AttributeArticle = AttributeArticleRepository.ReadPrestashop((int)PsProductAttributeImage.IDProductAttribute);
                    if (!AttributeArticleImageRepository.ExistAttributeArticleImage(AttributeArticle.AttArt_Id, ArticleImage.ImaArt_Id))
                    {
                        AttributeArticleImageRepository.Add(new Model.Local.AttributeArticleImage()
                        {
                            AttArt_Id = AttributeArticle.AttArt_Id,
                            ImaArt_Id = ArticleImage.ImaArt_Id,
                        });
                    }
                }
                else if (CompositionArticleRepository.ExistPrestaShop((int)PsProductAttributeImage.IDProductAttribute))
                {
                    Model.Local.CompositionArticle CompositionArticle = CompositionArticleRepository.ReadPrestaShop((int)PsProductAttributeImage.IDProductAttribute);
                    if (!AttributeArticleImageRepository.ExistAttributeArticleImage(CompositionArticle.ComArt_Id, ArticleImage.ImaArt_Id))
                    {
                        CompositionArticleImageRepository.Add(new Model.Local.CompositionArticleImage()
                        {
                            ComArt_Id = CompositionArticle.ComArt_Id,
                            ImaArt_Id = ArticleImage.ImaArt_Id,
                        });
                    }
                }
            }
        }
        public Boolean Exec(String PathImg, Int32 ArticleSend, int position, int Declination)
        {
            Boolean result         = false;
            Int32   IdArticleImage = 0;

            try
            {
                String extension = Path.GetExtension(PathImg);
                String FileName  = Path.GetFileName(PathImg);

                Model.Local.ArticleImageRepository ArticleImageRepository = new Model.Local.ArticleImageRepository();

                if (!ArticleImageRepository.ExistArticleFile(ArticleSend, FileName))
                {
                    Model.Local.ArticleRepository ArticleRepository = new Model.Local.ArticleRepository();
                    Model.Local.Article           Article           = ArticleRepository.ReadArticle(ArticleSend);
                    Model.Local.ArticleImage      ArticleImage      = new Model.Local.ArticleImage()
                    {
                        Art_Id            = Article.Art_Id,
                        ImaArt_Name       = Article.Art_Name,
                        ImaArt_Image      = "",
                        ImaArt_DateAdd    = DateTime.Now,
                        ImaArt_SourceFile = FileName
                    };
                    ArticleImage.ImaArt_Position = this.ReadNextPosition(Article, position);
                    ArticleImage.ImaArt_Default  = !(new Model.Local.ArticleImageRepository().ExistArticleDefault(Article.Art_Id, true));
                    ArticleImageRepository.Add(ArticleImage);
                    ArticleImage.ImaArt_Image = String.Format("{0}" + extension, ArticleImage.ImaArt_Id);
                    ArticleImageRepository.Save();
                    IdArticleImage = ArticleImage.ImaArt_Id;

                    string uri = PathImg.Replace("File:///", "").Replace("file:///", "").Replace("File://", "\\\\").Replace("file://", "\\\\").Replace("/", "\\");

                    System.IO.File.Copy(uri, ArticleImage.TempFileName);

                    Model.Prestashop.PsImageTypeRepository PsImageTypeRepository = new Model.Prestashop.PsImageTypeRepository();
                    List <Model.Prestashop.PsImageType>    ListPsImageType       = PsImageTypeRepository.ListProduct(1);

                    System.Drawing.Image img = System.Drawing.Image.FromFile(ArticleImage.TempFileName);

                    foreach (Model.Prestashop.PsImageType PsImageType in ListPsImageType)
                    {
                        Core.Img.resizeImage(img, Convert.ToInt32(PsImageType.Width), Convert.ToInt32(PsImageType.Height),
                                             ArticleImage.FileName(PsImageType.Name));
                    }

                    Core.Img.resizeImage(img, Core.Global.GetConfig().ConfigImageMiniatureWidth, Core.Global.GetConfig().ConfigImageMiniatureHeight,
                                         ArticleImage.SmallFileName);

                    img.Dispose();

                    // <JG> 28/10/2015 ajout attribution gamme/images
                    if (Declination != 0)
                    {
                        if (ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleMonoGamme ||
                            ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleMultiGammes)
                        {
                            Model.Local.AttributeArticleRepository AttributeArticleRepository = new Model.Local.AttributeArticleRepository();
                            if (AttributeArticleRepository.Exist(Declination))
                            {
                                Model.Local.AttributeArticleImageRepository AttributeArticleImageRepository = new Model.Local.AttributeArticleImageRepository();
                                if (!AttributeArticleImageRepository.ExistAttributeArticleImage(Declination, ArticleImage.ImaArt_Id))
                                {
                                    AttributeArticleImageRepository.Add(new Model.Local.AttributeArticleImage()
                                    {
                                        AttArt_Id = Declination,
                                        ImaArt_Id = ArticleImage.ImaArt_Id,
                                    });
                                }
                            }
                        }
                        else if (ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleComposition)
                        {
                            Model.Local.CompositionArticleRepository CompositionArticleRepository = new Model.Local.CompositionArticleRepository();
                            if (CompositionArticleRepository.Exist(Declination))
                            {
                                Model.Local.CompositionArticleImageRepository CompositionArticleImageRepository = new Model.Local.CompositionArticleImageRepository();
                                if (!CompositionArticleImageRepository.ExistCompositionArticleImage(Declination, ArticleImage.ImaArt_Id))
                                {
                                    CompositionArticleImageRepository.Add(new Model.Local.CompositionArticleImage()
                                    {
                                        ComArt_Id = Declination,
                                        ImaArt_Id = ArticleImage.ImaArt_Id,
                                    });
                                }
                            }
                        }
                    }

                    result = true;
                }
                else if (Core.Global.GetConfig().ImportImageReplaceFiles)
                {
                    FileInfo importfile = new FileInfo(PathImg);
                    Model.Local.ArticleImage ArticleImage = ArticleImageRepository.ReadArticleFile(ArticleSend, FileName);
                    FileInfo existfile = new FileInfo(ArticleImage.TempFileName);
                    if ((ArticleImage.ImaArt_DateAdd == null || importfile.LastWriteTime > ArticleImage.ImaArt_DateAdd) ||
                        importfile.Length != existfile.Length)
                    {
                        try
                        {
                            // import nouveau fichier
                            string uri = PathImg.Replace("File:///", "").Replace("file:///", "").Replace("File://", "\\\\").Replace("file://", "\\\\").Replace("/", "\\");
                            System.IO.File.Copy(uri, ArticleImage.TempFileName, true);

                            Model.Prestashop.PsImageTypeRepository PsImageTypeRepository = new Model.Prestashop.PsImageTypeRepository();
                            List <Model.Prestashop.PsImageType>    ListPsImageType       = PsImageTypeRepository.ListProduct(1);

                            System.Drawing.Image img = System.Drawing.Image.FromFile(ArticleImage.TempFileName);

                            foreach (Model.Prestashop.PsImageType PsImageType in ListPsImageType)
                            {
                                Core.Img.resizeImage(img, Convert.ToInt32(PsImageType.Width), Convert.ToInt32(PsImageType.Height),
                                                     ArticleImage.FileName(PsImageType.Name));
                            }

                            Core.Img.resizeImage(img, Core.Global.GetConfig().ConfigImageMiniatureWidth, Core.Global.GetConfig().ConfigImageMiniatureHeight,
                                                 ArticleImage.SmallFileName);
                            Model.Prestashop.PsImageRepository PsImageRepository = new Model.Prestashop.PsImageRepository();

                            if (ArticleImage.Pre_Id != null && PsImageRepository.ExistImage((uint)ArticleImage.Pre_Id))
                            {
                                String FTP      = Core.Global.GetConfig().ConfigFTPIP;
                                String User     = Core.Global.GetConfig().ConfigFTPUser;
                                String Password = Core.Global.GetConfig().ConfigFTPPassword;

                                Model.Prestashop.PsImage PsImage = PsImageRepository.ReadImage((uint)ArticleImage.Pre_Id);

                                string ftpPath = "/img/p/";
                                switch (Core.Global.GetConfig().ConfigImageStorageMode)
                                {
                                case Core.Parametres.ImageStorageMode.old_system:
                                    #region old_system
                                    // no action on path
                                    break;
                                    #endregion

                                case Core.Parametres.ImageStorageMode.new_system:
                                default:
                                    #region new_system

                                    //System.Net.FtpWebRequest ftp_folder = null;

                                    foreach (char directory in PsImage.IDImage.ToString())
                                    {
                                        ftpPath += directory + "/";

                                        #region MyRegion
                                        try
                                        {
                                            System.Net.FtpWebRequest request = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(FTP + ftpPath);

                                            request.Credentials = new System.Net.NetworkCredential(User, Password);
                                            request.UsePassive  = true;
                                            request.UseBinary   = true;
                                            request.KeepAlive   = false;

                                            request.Method = System.Net.WebRequestMethods.Ftp.MakeDirectory;

                                            System.Net.FtpWebResponse makeDirectoryResponse = (System.Net.FtpWebResponse)request.GetResponse();
                                        }
                                        catch     //Exception ex
                                        {
                                            //System.Windows.MessageBox.Show(ex.ToString());
                                        }
                                        #endregion
                                    }
                                    break;
                                    #endregion
                                }

                                #region Upload des images
                                extension = ArticleImage.GetExtension;
                                if (System.IO.File.Exists(ArticleImage.TempFileName))
                                {
                                    string ftpfullpath = (Core.Global.GetConfig().ConfigImageStorageMode == Core.Parametres.ImageStorageMode.old_system)
                                        ? FTP + ftpPath + PsImage.IDProduct + "-" + PsImage.IDImage + ".jpg"
                                        : FTP + ftpPath + PsImage.IDImage + ".jpg";

                                    System.Net.FtpWebRequest ftp = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(ftpfullpath);
                                    ftp.Credentials = new System.Net.NetworkCredential(User, Password);
                                    //userid and password for the ftp server to given

                                    ftp.UseBinary  = true;
                                    ftp.UsePassive = true;
                                    ftp.EnableSsl  = Core.Global.GetConfig().ConfigFTPSSL;
                                    ftp.Method     = System.Net.WebRequestMethods.Ftp.UploadFile;
                                    System.IO.FileStream fs = System.IO.File.OpenRead(ArticleImage.TempFileName);
                                    byte[] buffer           = new byte[fs.Length];
                                    fs.Read(buffer, 0, buffer.Length);
                                    fs.Close();
                                    System.IO.Stream ftpstream = ftp.GetRequestStream();
                                    ftpstream.Write(buffer, 0, buffer.Length);
                                    ftpstream.Close();
                                    ftp.Abort();
                                }


                                foreach (Model.Prestashop.PsImageType PsImageType in ListPsImageType)
                                {
                                    String localfile = ArticleImage.FileName(PsImageType.Name);
                                    if (System.IO.File.Exists(localfile))
                                    {
                                        string ftpfullpath = (Core.Global.GetConfig().ConfigImageStorageMode == Core.Parametres.ImageStorageMode.old_system)
                                            ? FTP + ftpPath + PsImage.IDProduct + "-" + PsImage.IDImage + "-" + PsImageType.Name + ".jpg"
                                            : FTP + ftpPath + PsImage.IDImage + "-" + PsImageType.Name + ".jpg";

                                        System.Net.FtpWebRequest ftp = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(ftpfullpath);
                                        ftp.Credentials = new System.Net.NetworkCredential(User, Password);
                                        //userid and password for the ftp server to given

                                        ftp.UseBinary  = true;
                                        ftp.UsePassive = true;
                                        ftp.EnableSsl  = Core.Global.GetConfig().ConfigFTPSSL;
                                        ftp.Method     = System.Net.WebRequestMethods.Ftp.UploadFile;
                                        System.IO.FileStream fs = System.IO.File.OpenRead(localfile);
                                        byte[] buffer           = new byte[fs.Length];
                                        fs.Read(buffer, 0, buffer.Length);
                                        fs.Close();
                                        System.IO.Stream ftpstream = ftp.GetRequestStream();
                                        ftpstream.Write(buffer, 0, buffer.Length);
                                        ftpstream.Close();
                                        ftp.Abort();
                                    }
                                }
                                #endregion
                            }

                            ArticleImage.ImaArt_DateAdd = DateTime.Now;
                            ArticleImageRepository.Save();

                            // <JG> 28/10/2015 ajout attribution gamme/images
                            if (Declination != 0)
                            {
                                if (ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleMonoGamme ||
                                    ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleMultiGammes)
                                {
                                    Model.Local.AttributeArticleRepository AttributeArticleRepository = new Model.Local.AttributeArticleRepository();
                                    if (AttributeArticleRepository.Exist(Declination))
                                    {
                                        Model.Local.AttributeArticleImageRepository AttributeArticleImageRepository = new Model.Local.AttributeArticleImageRepository();
                                        if (!AttributeArticleImageRepository.ExistAttributeArticleImage(Declination, ArticleImage.ImaArt_Id))
                                        {
                                            AttributeArticleImageRepository.Add(new Model.Local.AttributeArticleImage()
                                            {
                                                AttArt_Id = Declination,
                                                ImaArt_Id = ArticleImage.ImaArt_Id,
                                            });
                                        }

                                        // réaffectation côté PrestaShop
                                        Model.Local.AttributeArticle AttributeArticle = AttributeArticleRepository.Read(Declination);
                                        if (AttributeArticle.Pre_Id != null &&
                                            AttributeArticle.Pre_Id != 0)
                                        {
                                            Model.Prestashop.PsProductAttributeImageRepository PsProductAttributeImageRepository = new Model.Prestashop.PsProductAttributeImageRepository();
                                            if (PsProductAttributeImageRepository.ExistProductAttributeImage((UInt32)AttributeArticle.Pre_Id, (UInt32)ArticleImage.Pre_Id) == false)
                                            {
                                                PsProductAttributeImageRepository.Add(new Model.Prestashop.PsProductAttributeImage()
                                                {
                                                    IDImage            = (UInt32)ArticleImage.Pre_Id,
                                                    IDProductAttribute = (UInt32)AttributeArticle.Pre_Id,
                                                });
                                            }
                                        }
                                    }
                                }
                                else if (ArticleImage.Article.TypeArticle == Model.Local.Article.enum_TypeArticle.ArticleComposition)
                                {
                                    Model.Local.CompositionArticleRepository CompositionArticleRepository = new Model.Local.CompositionArticleRepository();
                                    if (CompositionArticleRepository.Exist(Declination))
                                    {
                                        Model.Local.CompositionArticleImageRepository CompositionArticleImageRepository = new Model.Local.CompositionArticleImageRepository();
                                        if (!CompositionArticleImageRepository.ExistCompositionArticleImage(Declination, ArticleImage.ImaArt_Id))
                                        {
                                            CompositionArticleImageRepository.Add(new Model.Local.CompositionArticleImage()
                                            {
                                                ComArt_Id = Declination,
                                                ImaArt_Id = ArticleImage.ImaArt_Id,
                                            });
                                        }

                                        // réaffectation côté PrestaShop
                                        Model.Local.CompositionArticle CompositionArticle = CompositionArticleRepository.Read(Declination);
                                        if (CompositionArticle.Pre_Id != null &&
                                            CompositionArticle.Pre_Id != 0)
                                        {
                                            Model.Prestashop.PsProductAttributeImageRepository PsProductAttributeImageRepository = new Model.Prestashop.PsProductAttributeImageRepository();
                                            if (PsProductAttributeImageRepository.ExistProductAttributeImage((UInt32)CompositionArticle.Pre_Id, (UInt32)ArticleImage.Pre_Id) == false)
                                            {
                                                PsProductAttributeImageRepository.Add(new Model.Prestashop.PsProductAttributeImage()
                                                {
                                                    IDImage            = (UInt32)ArticleImage.Pre_Id,
                                                    IDProductAttribute = (UInt32)CompositionArticle.Pre_Id,
                                                });
                                            }
                                        }
                                    }
                                }
                            }

                            result = true;

                            logs.Add("II30- Remplacement de l'image " + ArticleImage.ImaArt_SourceFile + " en position " + ArticleImage.ImaArt_Position + " pour l'article " + ArticleImage.Article.Art_Ref);
                        }
                        catch (Exception ex)
                        {
                            Core.Error.SendMailError(ex.ToString());
                            logs.Add("II39- Erreur lors du remplacement de l'image " + ArticleImage.ImaArt_SourceFile + " en position " + ArticleImage.ImaArt_Position + " pour l'article " + ArticleImage.Article.Art_Ref);
                            logs.Add(ex.ToString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Core.Error.SendMailError(ex.ToString());
                if (ex.ToString().Contains("System.UnauthorizedAccessException") && IdArticleImage != 0)
                {
                    Model.Local.ArticleImageRepository ArticleImageRepository = new Model.Local.ArticleImageRepository();
                    ArticleImageRepository.Delete(ArticleImageRepository.ReadArticleImage(IdArticleImage));
                }
            }
            return(result);
        }
예제 #6
0
        private void RecoveryDataProductAttribute(Model.Prestashop.PsProduct Product)
        {
            Model.Prestashop.PsProductAttributeRepository      PsProductAttributeRepository      = new Model.Prestashop.PsProductAttributeRepository();
            Model.Prestashop.PsProductAttributeShopRepository  PsProductAttributeShopRepository  = new Model.Prestashop.PsProductAttributeShopRepository();
            Model.Prestashop.PsProductAttributeImageRepository PsProductAttributeImageRepository = new Model.Prestashop.PsProductAttributeImageRepository();

            Model.Local.AttributeArticleRepository    AttributeArticleRepository    = new Model.Local.AttributeArticleRepository();
            Model.Local.ConditioningArticleRepository ConditioningArticleRepository = new Model.Local.ConditioningArticleRepository();
            Model.Local.CompositionArticleRepository  CompositionArticleRepository  = new Model.Local.CompositionArticleRepository();

            Model.Local.AttributeArticleImageRepository   AttributeArticleImageRepository   = new Model.Local.AttributeArticleImageRepository();
            Model.Local.CompositionArticleImageRepository CompositionArticleImageRepository = new Model.Local.CompositionArticleImageRepository();
            Model.Local.ArticleImageRepository            ArticleImageRepository            = new Model.Local.ArticleImageRepository();

            Model.Local.AttributeArticle    AttributeArticle;
            Model.Local.ConditioningArticle ConditioningArticle;
            Model.Local.CompositionArticle  CompositionArticle;
            Model.Local.ArticleImage        ArticleImage;

            List <Model.Prestashop.PsProductAttribute> ListPsProductAttribute = PsProductAttributeRepository.List(Product.IDProduct);

            //parcours déclinaisons PrestaShop
            foreach (Model.Prestashop.PsProductAttribute PsProductAttribute in ListPsProductAttribute)
            {
                // test si déclinaison en gamme dans PrestaConnect
                if (AttributeArticleRepository.ExistPrestashop((int)PsProductAttribute.IDProductAttribute))
                {
                    AttributeArticle = AttributeArticleRepository.ReadPrestashop((int)PsProductAttribute.IDProductAttribute);
                    Model.Prestashop.PsProductAttributeShop PsProductAttributeShop = (PsProductAttributeShopRepository.ExistPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop))
                        ? PsProductAttributeShopRepository.ReadPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop)
                        : null;
                    bool defaut = (PsProductAttributeShop != null) ? PsProductAttributeShop.DefaultOn == 1 : PsProductAttribute.DefaultOn == 1;
                    if (AttributeArticle.AttArt_Default != defaut)
                    {
                        AttributeArticle.AttArt_Default = defaut;
                        AttributeArticleRepository.Save();
                        if (defaut)
                        {
                            List <Model.Local.AttributeArticle> ListAttributeArticle = AttributeArticleRepository.ListArticle(AttributeArticle.Art_Id);
                            if (ListAttributeArticle.Count(i => i.AttArt_Default == true && i.AttArt_Id != AttributeArticle.AttArt_Id) > 0)
                            {
                                foreach (Model.Local.AttributeArticle AttributeArticleDefault in ListAttributeArticle.Where(i => i.AttArt_Default == true && i.AttArt_Id != AttributeArticle.Art_Id))
                                {
                                    AttributeArticleDefault.AttArt_Default = false;
                                    AttributeArticleRepository.Save();
                                }
                            }
                        }
                    }

                    // attribution images gammes
                    if (PsProductAttributeImageRepository.ExistProductAttribute(PsProductAttribute.IDProductAttribute))
                    {
                        List <Model.Prestashop.PsProductAttributeImage> ListPsProductAttributeImage = PsProductAttributeImageRepository.ListProductAttribute(PsProductAttribute.IDProductAttribute);
                        // étape 1 attachement dans PrestaConnect des images affectées a la déclinaison PrestaShop
                        foreach (Model.Prestashop.PsProductAttributeImage PsProductAttributeImage in ListPsProductAttributeImage)
                        {
                            // si l'image existe dans PrestaConnect
                            if (ArticleImageRepository.ExistPre_Id((int)PsProductAttributeImage.IDImage))
                            {
                                ArticleImage = ArticleImageRepository.ReadPrestaShop((int)PsProductAttributeImage.IDImage);
                                if (!AttributeArticleImageRepository.ExistAttributeArticleImage(AttributeArticle.AttArt_Id, ArticleImage.ImaArt_Id))
                                {
                                    AttributeArticleImageRepository.Add(new Model.Local.AttributeArticleImage()
                                    {
                                        AttArt_Id = AttributeArticle.AttArt_Id,
                                        ImaArt_Id = ArticleImage.ImaArt_Id,
                                    });
                                }
                            }
                        }
                        // étape 2 détachement
                        List <uint> list_prestashop = ListPsProductAttributeImage.Select(pai => pai.IDImage).ToList();
                        foreach (Model.Local.AttributeArticleImage AttributeArticleImage in AttributeArticleImageRepository.ListAttributeArticle(AttributeArticle.AttArt_Id))
                        {
                            if (AttributeArticleImage.ArticleImage.Pre_Id != null &&
                                !list_prestashop.Contains((uint)AttributeArticleImage.ArticleImage.Pre_Id.Value))
                            {
                                AttributeArticleImageRepository.Delete(AttributeArticleImage);
                            }
                        }
                    }
                    else if (AttributeArticleImageRepository.ExistAttributeArticle(AttributeArticle.AttArt_Id))
                    {
                        // absence de lien gamme déclinaison dans Prestashop donc suppression des liens dans PrestaConnect
                        AttributeArticleImageRepository.DeleteAll(AttributeArticleImageRepository.ListAttributeArticle(AttributeArticle.AttArt_Id));
                    }
                }
                // test si déclinaison en conditionnement dans PrestaConnect
                else if (ConditioningArticleRepository.ExistPrestashop((int)PsProductAttribute.IDProductAttribute))
                {
                    ConditioningArticle = ConditioningArticleRepository.ReadPrestashop((int)PsProductAttribute.IDProductAttribute);
                    Model.Prestashop.PsProductAttributeShop PsProductAttributeShop = (PsProductAttributeShopRepository.ExistPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop))
                        ? PsProductAttributeShopRepository.ReadPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop)
                        : null;
                    bool defaut = (PsProductAttributeShop != null) ? PsProductAttributeShop.DefaultOn == 1 : PsProductAttribute.DefaultOn == 1;
                    if (ConditioningArticle.ConArt_Default != defaut)
                    {
                        ConditioningArticle.ConArt_Default = defaut;
                        ConditioningArticleRepository.Save();
                        if (defaut)
                        {
                            List <Model.Local.ConditioningArticle> ListConditioningArticle = ConditioningArticleRepository.ListArticle(ConditioningArticle.Art_Id);
                            if (ListConditioningArticle.Count(i => i.ConArt_Default == true && i.ConArt_Id != ConditioningArticle.ConArt_Id) > 0)
                            {
                                foreach (Model.Local.ConditioningArticle ConditioningArticleDefault in ListConditioningArticle.Where(i => i.ConArt_Default == true && i.ConArt_Id != ConditioningArticle.Art_Id))
                                {
                                    ConditioningArticleDefault.ConArt_Default = false;
                                    ConditioningArticleRepository.Save();
                                }
                            }
                        }
                    }
                }
                // test si déclinaison composition dans PrestaConnect
                else if (CompositionArticleRepository.ExistPrestaShop((int)PsProductAttribute.IDProductAttribute))
                {
                    CompositionArticle = CompositionArticleRepository.ReadPrestaShop((int)PsProductAttribute.IDProductAttribute);
                    Model.Prestashop.PsProductAttributeShop PsProductAttributeShop = (PsProductAttributeShopRepository.ExistPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop))
                        ? PsProductAttributeShopRepository.ReadPsProductAttributeShop(PsProductAttribute.IDProductAttribute, Core.Global.CurrentShop.IDShop)
                        : null;
                    bool defaut = (PsProductAttributeShop != null) ? PsProductAttributeShop.DefaultOn == 1 : PsProductAttribute.DefaultOn == 1;
                    if (CompositionArticle.ComArt_Default != defaut)
                    {
                        CompositionArticle.ComArt_Default = defaut;
                        CompositionArticleRepository.Save();
                        if (defaut)
                        {
                            List <Model.Local.CompositionArticle> ListCompositionArticle = CompositionArticleRepository.ListArticle(CompositionArticle.ComArt_ArtId);
                            if (ListCompositionArticle.Count(i => i.ComArt_Default == true && i.ComArt_Id != CompositionArticle.ComArt_Id) > 0)
                            {
                                foreach (Model.Local.CompositionArticle CompositionArticleDefault in ListCompositionArticle.Where(i => i.ComArt_Default == true && i.ComArt_Id != CompositionArticle.ComArt_ArtId))
                                {
                                    CompositionArticleDefault.ComArt_Default = false;
                                    ConditioningArticleRepository.Save();
                                }
                            }
                        }
                    }

                    // attribution images gammes
                    if (PsProductAttributeImageRepository.ExistProductAttribute(PsProductAttribute.IDProductAttribute))
                    {
                        List <Model.Prestashop.PsProductAttributeImage> ListPsProductAttributeImage = PsProductAttributeImageRepository.ListProductAttribute(PsProductAttribute.IDProductAttribute);
                        // étape 1 attachement dans PrestaConnect des images affectées a la déclinaison PrestaShop
                        foreach (Model.Prestashop.PsProductAttributeImage PsProductAttributeImage in ListPsProductAttributeImage)
                        {
                            // si l'image existe dans PrestaConnect
                            if (ArticleImageRepository.ExistPre_Id((int)PsProductAttributeImage.IDImage))
                            {
                                ArticleImage = ArticleImageRepository.ReadPrestaShop((int)PsProductAttributeImage.IDImage);
                                if (!CompositionArticleImageRepository.ExistCompositionArticleImage(CompositionArticle.ComArt_Id, ArticleImage.ImaArt_Id))
                                {
                                    CompositionArticleImageRepository.Add(new Model.Local.CompositionArticleImage()
                                    {
                                        ComArt_Id = CompositionArticle.ComArt_Id,
                                        ImaArt_Id = ArticleImage.ImaArt_Id,
                                    });
                                }
                            }
                        }
                        // étape 2 détachement
                        List <uint> list_prestashop = ListPsProductAttributeImage.Select(pai => pai.IDImage).ToList();
                        foreach (Model.Local.CompositionArticleImage CompositionArticleImage in CompositionArticleImageRepository.ListCompositionArticle(CompositionArticle.ComArt_Id))
                        {
                            if (CompositionArticleImage.ArticleImage.Pre_Id != null &&
                                !list_prestashop.Contains((uint)CompositionArticleImage.ArticleImage.Pre_Id.Value))
                            {
                                CompositionArticleImageRepository.Delete(CompositionArticleImage);
                            }
                        }
                    }
                    else if (CompositionArticleImageRepository.ExistCompositionArticle(CompositionArticle.ComArt_Id))
                    {
                        // absence de lien gamme déclinaison dans Prestashop donc suppression des liens dans PrestaConnect
                        CompositionArticleImageRepository.DeleteAll(CompositionArticleImageRepository.ListCompositionArticle(CompositionArticle.ComArt_Id));
                    }
                }
            }
        }