private static void ParseShopElement(XElement shopElement, LISAEntities entities, Catalogue catalogue) { MagasinCatalogue result = null; Magasin magasin = null; DateTime shopStartDateTime = UnixTimeStampToDateTime(double.Parse(shopElement.Element(XName.Get("displayStartDate")).Value)); DateTime shopEndDateTime = UnixTimeStampToDateTime(double.Parse(shopElement.Element(XName.Get("displayEndDate")).Value)); magasin = ParseShopElement_Magasin(shopElement, entities); result = entities.MagasinCatalogues.FirstOrDefault(mc => mc.IdMagasin == magasin.Id && mc.IdCatalogue == catalogue.Id); if (result == null) { result = new MagasinCatalogue() { Magasin = magasin, Catalogue = catalogue, DateDebut = shopStartDateTime, DateFin = shopEndDateTime }; entities.MagasinCatalogues.Add(result); } }
/// <summary> /// Importe une #<see cref="PageArticle"/> du fichier XML et l'enregistre dans la base de donnée. Si la PageArticle importée est déjà en base de données, /// la supprime et la restaure avec les nouvelles données. /// </summary> /// <param name="articleElement">XElement de article</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="page">Page en liaison avec la PageArticle</param> /// <param name="article">Article en liaison avec la PageArticle</param> /// <returns>Retourne la PageArticle importée</returns> private static PageArticle ParsePageArticleElement(XElement articleElement, LISAEntities entities, Page page, Article article) { int pageArticleCoordX = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("coordx")).Value); int pageArticleCoordY = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("coordy")).Value); int pageArticleWidth = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("width")).Value); int pageArticleHeight = int.Parse(articleElement.Element(XName.Get("zones")).Element(XName.Get("zone")).Element(XName.Get("height")).Value); PageArticle result = entities.PageArticles.FirstOrDefault(p => p.IdPage == page.Id && p.IdArticle == article.Id); if (result != null) { entities.PageArticles.Remove(result); } result = new PageArticle() { Article = article, Page = page, ZoneCoordonnéesX = pageArticleCoordX, ZoneCoordonnéesY = pageArticleCoordY, ZoneHauteur = pageArticleHeight, ZoneLargeur = pageArticleWidth }; entities.PageArticles.Add(result); return(result); }
/// <summary> /// Importe une #<see cref="Article"/> du fichier XML et l'enregistre dans la base de donnée. Si l'article importé est déjà en base de données, /// le supprime et le restaure avec les nouvelles données. /// </summary> /// <param name="articleElement">Element de article</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="pageElement">Element de page</param> /// <returns>Retourne l'article importé</returns> private static Article ParseArticleElement(XElement articleElement, LISAEntities entities, XElement pageElement, Categorie categorie) { int articleId = int.Parse(articleElement.Attribute(XName.Get("id")).Value); string articleCode = articleElement.Element(XName.Get("code")).Value; string articleLibelle = articleElement.Element(XName.Get("label")).Value; string articleDescription = articleElement.Element(XName.Get("description")).Value; short articleQuantite = 1; string articleUnite = articleElement.Element(XName.Get("packaging")).Value; Article result = entities.Articles.FirstOrDefault(p => p.ImportId == articleId); if (result != null) { entities.Articles.Remove(result); } result = new Article() { ImportId = articleId, Code = articleCode, Libelle = articleLibelle, Description = articleDescription, Quantite = articleQuantite, Unite = articleUnite, Categorie = categorie }; entities.Articles.Add(result); return(result); }
private static Article ParseArticleElement(XElement productElement, LISAEntities entities) { Article result = new Article(); long articleId = long.Parse(productElement.Attribute(XName.Get("id")).Value); string articleCode = productElement.Element(XName.Get("code")).Value; string articleLabel = productElement.Element(XName.Get("label")).Value; string articleDescription = productElement.Element(XName.Get("description")).Value; string articleUnite = productElement.Element(XName.Get("packaging")).Value; result = entities.Articles.FirstOrDefault(c => c.ImportId == articleId); if (result == null) { result = new Article() { ImportId = articleId, Code = articleCode, Libelle = articleLabel, Description = articleDescription, Unite = articleUnite }; entities.Articles.Add(result); } else { entities.Articles.Remove(result); } return(result); }
/// <summary> /// Importe une #<see cref="Categorie"/> du fichier XML et l'enregistre dans la base de donnée. /// Vérifie si la categorie n'a pas déjà été ajoutée dans le ChangeTracker. /// </summary> /// <param name="articleElement">XElement de article</param> /// <param name="entities">Gestionnaire DB</param> /// <returns>Renvois la catégorie</returns> private static Categorie ParseCategorieElement(XElement articleElement, LISAEntities entities) { string libelleCategorie = articleElement.Element(XName.Get("category")).Value; Categorie categorieInDB = entities.Categories.FirstOrDefault(p => p.Libelle == libelleCategorie); Categorie result = null; if (categorieInDB == null) { var categorieChangeTracker = entities.ChangeTracker.Entries <Categorie>().ToList().FirstOrDefault(c => c.State == EntityState.Added && c.Entity.Libelle == libelleCategorie); if (categorieChangeTracker == null) { if (result == null) { result = new Categorie() { Libelle = libelleCategorie }; entities.Categories.Add(result); } } else { result = categorieChangeTracker.Entity; } } return(result); }
/// <summary> /// Créer les deux types médias picto et image si ils ne sont pas en DB /// </summary> /// <param name="entities">Gestionnaire DB</param> private static void ParseTypeMedia(LISAEntities entities) { TypeMedia picto = entities.TypeMedias.FirstOrDefault(p => p.Libelle == "picto"); if (picto == null) { picto = new TypeMedia() { Libelle = "picto" }; entities.TypeMedias.Add(picto); } TypeMedia image = entities.TypeMedias.FirstOrDefault(p => p.Libelle == "image"); if (image == null) { image = new TypeMedia() { Libelle = "image" }; entities.TypeMedias.Add(image); } }
private static Operation ParseOperationElement(XElement operationElement, LISAEntities entities) { Operation result = null; //Récupérer les données de l'opération dans le fichier XML long operationId = long.Parse(operationElement.Attribute(XName.Get("id")).Value); string operationCode = operationElement.Element(XName.Get("code")).Value; string operationTitle = operationElement.Element(XName.Get("title")).Value; DateTime operationStartDateTime = UnixTimeStampToDateTime(double.Parse(operationElement.Element(XName.Get("startDate")).Value)); DateTime operationEndDateTime = UnixTimeStampToDateTime(double.Parse(operationElement.Element(XName.Get("endDate")).Value)); //Vérifier si l'opération n'existe pas déjà en base result = entities.Operations.FirstOrDefault(o => o.ImportId == operationId); //Créer l'opération si elle n'existe pas if (result == null) { result = new Operation() { ImportId = operationId, Code = operationCode, Titre = operationTitle, DateDebut = operationStartDateTime, DateFin = operationEndDateTime }; entities.Operations.Add(result); } else { //A vous de voir ce que l'on fait si elle existe déjà. } return(result); }
private static Catalogue ParseCatalogElement(XElement catalogElement, LISAEntities entities, Operation operation) { Catalogue result = new Catalogue(); long catalogueId = long.Parse(catalogElement.Attribute(XName.Get("id")).Value); string catalogueType = catalogElement.Element(XName.Get("type")).Value; string catalogueLabel = catalogElement.Element(XName.Get("label")).Value; string catalogueSpeed = catalogElement.Element(XName.Get("speed")).Value; int catalogueWidth = int.Parse(catalogElement.Element(XName.Get("catalogWidth")).Value); int catalogueHeight = int.Parse(catalogElement.Element(XName.Get("catalogHeight")).Value); result = entities.Catalogues.FirstOrDefault(c => c.ImportId == catalogueId); if (result == null) { result = new Catalogue() { ImportId = catalogueId, Type = catalogueType, Libelle = catalogueLabel, Vitesse = catalogueSpeed, Largeur = catalogueWidth, Hauteur = catalogueHeight, Operation = operation }; entities.Catalogues.Add(result); } else { entities.Catalogues.Remove(result); } return(result); }
private static void ImportXMLFile(string filePath) { //Console.WriteLine("Import du fichier : " + filePath); //Console.WriteLine(string.Format("Import du fichier : {0} {1:00}", filePath, 5)); Console.WriteLine($"Import du fichier : {filePath}"); //Nouvelle syntaxe pour string.format depuis C# 6 try { using (LISAEntities entities = new LISAEntities()) { entities.Database.Connection.Open(); XDocument document = XDocument.Load(filePath); foreach (XElement operationElement in document.Descendants(XName.Get("operation"))) { Operation operation = ParseOperationElement(operationElement, entities); foreach (XElement catalogElement in operationElement.Elements(XName.Get("catalog"))) { Catalogue catalogue = ParseCatalogElement(catalogElement, entities, operation); XElement pagesElement = catalogElement.Element(XName.Get("pages")); //XElement shopsElement = catalogElement.Element(XName.Get("shops")); foreach (XElement pageElement in pagesElement.Elements()) { Page page = ParsePageElement(pageElement, entities, catalogue); XElement productsElement = pageElement.Element(XName.Get("products")); foreach (XElement productElement in productsElement.Elements()) { Article article = ParseArticleElement(productElement, entities); } } foreach (XElement shopElement in catalogElement.Descendants(XName.Get("shop"))) { ParseShopElement(shopElement, entities, catalogue); } } } entities.SaveChanges(); } } catch (Exception ex) { //TODO : Voir comment gérer les erreurs d'import. Console.WriteLine($"Impossible d'importer le fichier {filePath + Environment.NewLine + ex.ToString()}"); } }
private static Categorie ParseCategoryElement(XElement categoryElement, LISAEntities entities) { Categorie result = new Categorie(); long categoryId = long.Parse(categoryElement.Attribute(XName.Get("id")).Value); string categoryLabel = categoryElement.Element(XName.Get("label")).Value; result = new Categorie() { Libelle = categoryLabel }; entities.Categories.Add(result); return(result); }
private static Attribut ParseAttributElement(XElement attributeElement, LISAEntities entities) { Attribut result = new Attribut(); long attributeId = long.Parse(attributeElement.Attribute(XName.Get("id")).Value); string attributeLabel = attributeElement.Element(XName.Get("label")).Value; result = new Attribut() { Libelle = attributeLabel }; entities.Attributs.Add(result); return(result); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); try { _Entities = new LISAEntities(); _Entities.Database.Connection.Open(); } catch (Exception ex) { MessageBox.Show("Erreur", "Impossible de joindre la base de données" + Environment.NewLine + ex.ToString()); this.Shutdown(); } }
private static Page ParsePageElement(XElement pageElement, LISAEntities entities, Catalogue catalogue) { Page result = new Page(); long pageId = long.Parse(pageElement.Attribute(XName.Get("id")).Value); int number = int.Parse(pageElement.Element(XName.Get("number")).Value); result = entities.Pages.FirstOrDefault(p => p.ImportId == pageId); if (result == null) { result = new Page() { ImportId = pageId, Numero = number, Catalogue = catalogue }; entities.Pages.Add(result); } return(result); }
private static Magasin ParseShopElement_Magasin(XElement shopElement, LISAEntities entities) { Magasin result = null; long shopId = long.Parse(shopElement.Attribute(XName.Get("id")).Value); result = entities.Magasins.FirstOrDefault(m => m.ImportId == shopId); if (result == null) { result = new Magasin() { ImportId = shopId, Libelle = shopId.ToString() }; entities.Magasins.Add(result); } return(result); }
private static void ParseMediumPictoElement(XElement articleElement, LISAEntities entities, Article article) { string cheminMedium = articleElement.Element(XName.Get("picto")).Value; TypeMedia typeMedia = entities.TypeMedias.FirstOrDefault(p => p.Libelle == "picto"); Media result = entities.Medias.FirstOrDefault(p => p.IdArticle == article.Id && p.IdTypeMedia == typeMedia.Id); if (result != null) { entities.Medias.Remove(result); } result = new Media() { Article = article, TypeMedia = typeMedia, Chemin = cheminMedium }; entities.Medias.Add(result); }
/// <summary> /// Importe une #<see cref="Page"/> du fichier XML et l'enregistre dans la base de donnée. Si la page importée est déjà en base de données, /// la supprime et la restaure avec les nouvelles données. /// </summary> /// <param name="pageElement">XElement de page</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="catalog">Catalogue en liaison avec la page</param> /// <returns>Retourne la page importée</returns> private static Page ParsePageElement(XElement pageElement, LISAEntities entities, Catalogue catalog) { int pageId = int.Parse(pageElement.Attribute(XName.Get("id")).Value); int pageNum = int.Parse(pageElement.Element(XName.Get("number")).Value); Page result = entities.Pages.FirstOrDefault(p => p.ImportId == pageId); if (result != null) { entities.Pages.Remove(result); } result = new Page() { ImportId = pageId, Numero = pageNum, Catalogue = catalog, }; entities.Pages.Add(result); return(result); }
private static ArticleAttribut ParseArticleAttributElement(XElement articleAttributElement, Article article, Attribut attribut, LISAEntities entities) { ArticleAttribut result = null; string articleAttributValue = articleAttributElement.Element(XName.Get("value")).Value; result = entities.ArticleAttributs.FirstOrDefault(aa => aa.Article.ImportId == article.ImportId && result.Attribut.Id == attribut.Id); result = new ArticleAttribut() { Article = article, Attribut = attribut, Valeur = articleAttributValue }; return(entities.ArticleAttributs.Add(result));; }
private static PageArticle ParsePageArticleElement(XElement pageArticleElement, Page page, Article article, LISAEntities entities) { PageArticle result = null; int coordX = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int coordY = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int width = short.Parse(pageArticleElement.Element(XName.Get("")).Value); int height = short.Parse(pageArticleElement.Element(XName.Get("")).Value); result = entities.PageArticles.FirstOrDefault(pa => pa.Article.ImportId == article.ImportId && result.Page.ImportId == page.ImportId); result = new PageArticle() { Article = article, Page = page, ZoneCoordonnéesX = coordX, ZoneCoordonnéesY = coordY, ZoneLargeur = width, ZoneHauteur = height }; return(entities.PageArticles.Add(result));; }
private static PrixCatalogueArticle ParsePriceCategoryProduct(XElement productElement, LISAEntities entities, Catalogue catalogue, Article article) { PrixCatalogueArticle result = null; long articleCategorieId = long.Parse(productElement.Element(XName.Get("id")).Value); decimal articleCategoriePrix = decimal.Parse(productElement.Element(XName.Get("price")).Value); decimal articleCategoriePrixAvantCoupon = decimal.Parse(productElement.Element(XName.Get("price_before_coupon")).Value); decimal articleCategoriePrixAvantCroise = decimal.Parse(productElement.Element(XName.Get("price_crossed")).Value); decimal articleCategorieReductionEuro = decimal.Parse(productElement.Element(XName.Get("Reduction_euro")).Value); int articleCategorieReductionPourcent = int.Parse(productElement.Element(XName.Get("Reduction_percent")).Value); decimal articleCategorieAvantageEuro = decimal.Parse(productElement.Element(XName.Get("Avantage_euro")).Value); int articleCategorieAvantagePourcent = int.Parse(productElement.Element(XName.Get("Avantage_percent")).Value); decimal articleCategorieEcotaxe = decimal.Parse(productElement.Element(XName.Get("ecotaxe")).Value); result = entities.PrixCatalogueArticles.FirstOrDefault(a => a.IdCatalogue == catalogue.Id && a.IdArticle == article.Id); if (result == null) { result = new PrixCatalogueArticle() { Article = article, Catalogue = catalogue, Prix = articleCategoriePrix, PrixAvantCoupon = articleCategoriePrixAvantCoupon, PrixAvantCroise = articleCategoriePrixAvantCroise, ReductionEuro = articleCategorieReductionEuro, ReductionPourcent = articleCategorieReductionPourcent, AvantageEuro = articleCategorieAvantageEuro, AvantagePourcent = articleCategorieAvantagePourcent, Ecotaxe = articleCategorieEcotaxe }; entities.PrixCatalogueArticles.Add(result); } return(result); }
/// <summary> /// Importe un #<see cref="PrixCatalogueArticle"/> du fichier XML et l'enregistre dans la base de donnée. Si la PrixCatalogueArticle /// importée est déjà en base de données, la supprime et la restaure avec les nouvelles données. /// </summary> /// <param name="articleElement">XElement article</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="catalog">Catalogue en liaison avec PrixCatalogueArticle</param> /// <param name="article">Article en liaison avec PrixCatalogueArticle</param> /// <returns>Retourne le PrixCatalogueArticle importé</returns> private static PrixCatalogueArticle ParsePrixCatalogueArticleElement(XElement articleElement, LISAEntities entities, Catalogue catalog, Article article) { decimal.TryParse(articleElement.Element(XName.Get("price")).Value, out decimal prixCatalogueArticlePrix); decimal.TryParse(articleElement.Element(XName.Get("price_before_coupon")).Value, out decimal prixCatalogueArticlePrixAvantCoupon); decimal.TryParse(articleElement.Element(XName.Get("price_crossed")).Value, out decimal prixCatalogueArticlePrixAvantCroise); decimal.TryParse(articleElement.Element(XName.Get("Reduction_euro")).Value, out decimal prixCatalogueArticleReductionEuro); decimal.TryParse(articleElement.Element(XName.Get("Reduction_percent")).Value, out decimal prixCatalogueArticleReductionPourcent); decimal.TryParse(articleElement.Element(XName.Get("Avantage_euro")).Value, out decimal prixCatalogueArticleAvantageEuro); decimal.TryParse(articleElement.Element(XName.Get("Avantage_percent")).Value, out decimal prixCatalogueArticleAvantagePourcent); decimal.TryParse(articleElement.Element(XName.Get("ecotaxe")).Value, out decimal prixCatalogueArticleEcotaxe); PrixCatalogueArticle result = entities.PrixCatalogueArticles.FirstOrDefault(p => p.IdArticle == article.Id && p.IdCatalogue == catalog.Id); if (result != null) { entities.PrixCatalogueArticles.Remove(result); } result = new PrixCatalogueArticle() { Prix = prixCatalogueArticlePrix, PrixAvantCoupon = prixCatalogueArticlePrixAvantCoupon, PrixAvantCroise = prixCatalogueArticlePrixAvantCroise, ReductionEuro = prixCatalogueArticleReductionEuro, ReductionPourcent = prixCatalogueArticleReductionPourcent, AvantageEuro = prixCatalogueArticleAvantageEuro, AvantagePourcent = prixCatalogueArticleAvantagePourcent, Ecotaxe = prixCatalogueArticleEcotaxe, Article = article, Catalogue = catalog }; entities.PrixCatalogueArticles.Add(result); return(result); }
/// <summary> /// Importe un #<see cref="MagasinCatalogue"/> du fichier XML. Si le MagasinCatalogue est déjà en base de données, /// le supprime et le restaure avec les nouvelles données. /// </summary> /// <param name="shopElement">Element de magasin</param> /// <param name="entities">Gestionnaire DB</param> /// <param name="catalog">Catalogue en liaison avec la table MagasinCatalogue</param> /// <param name="shop">Magasin en liaison avec la table MagasinCatalogue</param> private static MagasinCatalogue ParseShopCatalogElement(XElement shopElement, LISAEntities entities, Catalogue catalog, Magasin shop) { DateTime shopStartdate = UnixTimeStampToDateTime(double.Parse(shopElement.Element(XName.Get("startDate")).Value)); DateTime shopDisplaystartdate = UnixTimeStampToDateTime(double.Parse(shopElement.Element(XName.Get("displayStartDate")).Value)); DateTime shopDisplayenddate = UnixTimeStampToDateTime(double.Parse(shopElement.Element(XName.Get("displayEndDate")).Value)); MagasinCatalogue result = entities.MagasinCatalogues.FirstOrDefault(c => c.IdCatalogue == catalog.ImportId && c.IdMagasin == shop.Id); if (result != null) { entities.MagasinCatalogues.Remove(result); } result = new MagasinCatalogue() { DateDebut = shopDisplaystartdate, DateFin = shopDisplayenddate, Catalogue = catalog, Magasin = shop }; entities.MagasinCatalogues.Add(result); return(result); }
/// <summary> /// Importe les données du fichier XML et les enregistre en base de données /// </summary> /// <param name="filePath">Chemin du fichier XML</param> private static void ImportXMLFile(string filePath) { Console.WriteLine("Import du fichier : " + filePath); //Console.WriteLine($"Import du fichier : {filePath}"); try { using (LISAEntities entities = new LISAEntities()) { // Ouvre la connexion vers la base de donnée entities.Database.Connection.Open(); XDocument document = XDocument.Load(filePath); ParseTypeMedia(entities); // Boucle sur les opérations du fichier XML foreach (XElement operationElement in document.Descendants(XName.Get("operation"))) { Operation operation = ParseOperationElement(operationElement, entities); // Boucle sur les catalogue du fichier XML foreach (XElement catalogElement in operationElement.Elements(XName.Get("catalog"))) { Catalogue catalog = ParseCatalogElement(catalogElement, entities, operation); // Boucle sur les magasins du fichier XML foreach (XElement shopElement in catalogElement.Elements(XName.Get("shops")).Elements()) { Magasin shop = ParseShopElement(shopElement, entities); ParseShopCatalogElement(shopElement, entities, catalog, shop); } // Boucle sur les pages du fichier XML foreach (XElement pageElement in catalogElement.Elements(XName.Get("pages")).Elements()) { Page page = ParsePageElement(pageElement, entities, catalog); foreach (XElement articleElement in pageElement.Elements(XName.Get("products")).Elements()) { Categorie categorie = ParseCategorieElement(articleElement, entities); Article article = ParseArticleElement(articleElement, entities, pageElement, categorie); ParseMediumPictoElement(articleElement, entities, article); //ParseMediumImageElement(articleElement, entities, article); PageArticle pageArticle = ParsePageArticleElement(articleElement, entities, page, article); PrixCatalogueArticle prixCatalogueArticle = ParsePrixCatalogueArticleElement(articleElement, entities, catalog, article); } } } } entities.SaveChanges(); } } catch (Exception ex) { Console.WriteLine($"Impossible d'importer le fichier {filePath + Environment.NewLine + ex.Message}"); } #region Exo : Ajout opération, catalogue, page ////Créer la chaine de connexion //using (LISAEntities entities = new LISAEntities()) //{ // entities.Operations.ToList().ForEach(o => entities.Operations.Remove(o)); // entities.Catalogues.ToList().ForEach(c => entities.Catalogues.Remove(c)); // entities.Pages.ToList().ForEach(p => entities.Pages.Remove(p)); // //Créer une opération // Operation op = new Operation // { // Code = "Je suis le code de l'opération", // Titre = "Je suis le titre de l'opération", // DateDebut = DateTime.Now, // DateFin = DateTime.Now, // Catalogues = null // }; // entities.Operations.Add(op); // //Créer un catalogue // Catalogue cat = new Catalogue // { // Hauteur = 500, // Largeur = 500, // Libelle = "Je suis le libelle du catalogue", // Type = "Je suis le type du catalogue", // Vitesse = "V3", // Operation = op // }; // entities.Catalogues.Add(cat); // //Créer trois pages // List<Page> allPages = new List<Page>(); // for (int i = 0; i < 10; i++) // { // Page page = new Page() // { // Numero = i, // Catalogue = cat // }; // allPages.Add(page); // } // //Page page1 = new Page() // //{ // // Numero = 1, // // Catalogue = cat // //}; // //Page page2 = new Page() // //{ // // Numero = 2, // // Catalogue = cat // //}; // //Page page3 = new Page() // //{ // // Numero = 3, // // Catalogue = cat // //}; // //entities.Pages.Add(page1); // //entities.Pages.Add(page2); // //entities.Pages.Add(page3); // foreach (Page page in allPages) // { // entities.Pages.Add(page); // } #endregion }