<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Résumé chronologie stage by </title>
      <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt</link>
      <description>Résumé chronologique du stage</description>
      <language>en-us</language>
      <pubDate>2021-01-11 18:29:16 UTC</pubDate>
      <lastBuildDate>2023-02-20 06:34:14 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Lundi 11 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1075567756</link>
         <description><![CDATA[<div><strong> </strong>⚈ Présentation de l'entreprise<br>et mise en liaison avec les projets de l'entreprise <br><strong> </strong>⚈Installation des différents logiciels : <br>NodeJs, Python, Visual Studio Code, Angular, SVN-Tortoise, Docker Studio.<br><strong> </strong>⚈Création d'un environnement virtuel sur Python et installation d'Angular sur Visual Studio Code<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-11 18:31:04 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1075567756</guid>
      </item>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Mardi 12 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1080584256</link>
         <description><![CDATA[<div>⚈ Installation des différents modules Angular.<br><br>⚈Introduction à Python et son Framework "Django". Il sert à se connecter localement à notre site.<br><br><strong> </strong>⚈Introduction aux différentes BDD de l'entreprise sous PgAdmin.<br><br>⚈<strong>Explication du travail à réaliser pour les prochaines semaines : </strong><br>-Passer le projet Angular 6.4.2 vers 11 et y importer le Template.<br><br><strong>Début du travail : </strong><br>J'ai pu réaliser des captures d'écran des différentes erreurs.<br><br>⚈ Installation de l'environnement Python, Django et des modules Angular.<br><br></div><blockquote><strong><em>https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment<br><br>https://docs.python.org/fr/3/library/venv.html<br><br>https://code.visualstudio.com/docs/python/environments</em></strong></blockquote><div><br>⚈<strong>Tutoriel Python et Framework Django :</strong><br>-pip install -r requirements.txt<br>-Le fichier requirements.txt contient les modules à installer</div><ul><li><strong>Installation Django :</strong></li></ul><blockquote><strong><em>https://code.visualstudio.com/docs/python/tutorial-django</em></strong></blockquote><div><br>⚈ <strong>Lien du Template :</strong></div><blockquote><strong><em>https://www.creative-tim.com/product/material-dashboard-angular2 Version V10</em></strong></blockquote><div><br>⚈ <strong>Installation des modules :</strong><br>-npm install  @angular/cli<br>-npm install -r package.json<br>Le fichier package.json contient les modules à installer.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-12 20:23:32 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1080584256</guid>
      </item>
      <item>
         <title>Information stage :</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1080725056</link>
         <description><![CDATA[<div><strong> </strong>⚈ 35h par semaine<br><strong> </strong>⚈ 8h à 16h<br><strong> </strong>⚈ Travail en présentiel<br> ⚈ Ce padlet contient un code couleur : <br>-En violet : Travail réalisé<br>-En vert : Les différentes notes<br><br>Certains codes et notes sont directement écrit depuis mon cahier.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-12 20:54:52 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1080725056</guid>
      </item>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Mercredi 13 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1082694395</link>
         <description><![CDATA[<div>⚈ Apprentissage Angular :<br>Réalisation de deux projets afin d'apprendre Angular.<br><br>⚈<strong>Premier projet tutoriel Angular "Site de vente" : </strong><br>Le projet a été fini et réalisé. Il permet la compréhension de l'utilisation de classe, de composants, et des différentes fonctionnalités Angular... Celui a été réalisé sous "<a href="https://stackblitz.com/">Stackblitz</a>" permettant de virtualiser un projet Angular.<br>-Lien du projet :<br>https://stackblitz.com/edit/angular-ojtmkv-drxwfs?file=src/app/app.component.ts<br><br>⚈Début de réalisation du deuxième projet "Tour des héros" séparer en 6 parties : <br><strong>1°)Réalisation de l'éditeur d'héros <br>2°)Réalisation d'une liste d'héros</strong> ( notion array et *ngFor )<br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-13 12:31:22 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1082694395</guid>
      </item>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Jeudi 14 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1086015135</link>
         <description><![CDATA[<div>⚈ Apprentissage Angular :<br>Suite de la réalisation du deuxième projet "Tour des héros" permettant un approfondissement d'Angular.<br>J'ai fait le 2°) 3°) 4°)<br><br><strong>2°) Fin de la réalisation des listes : </strong></div><ul><li>a°)Réalisation d'un tableau (const) ; </li><li>b°) Méthode de clique bouton (click) ; </li><li>c°) *ngFor pour afficher la liste : </li><li>Ex : *ngFor="let 'x' of parcour", "parcour" étant le tableau réalisé via const et "hero" un element objet  ; </li><li>d°) Application d'un CSS avec une condition Angular</li></ul><div><br><strong>3°)Composants de fonction :</strong></div><ul><li>a°)Créer un composant :</li></ul><div>           ng generate "detailhero"</div><ul><li>b°)Importation et séparation des différents codes dans plusieurs composants classe fille pour alléger le code.</li><li>c°) Révision des notions "d'Input", "Output" et de classe ( mère / fille )</li><li>d°) Utilisation du "selector" pour importer l'HTML d'une classe fille dans la classe mère, HTML d'origine.</li><li>e°)Notion de "binding" : pour lier une propriété.</li></ul><div><br></div><ul><li><strong>A savoir :</strong></li></ul><div>Ce projet n'a pas été réalisé sur "stackblitz" comparé au premier mais directement sur Visual Studio Code de A à Z.</div><ul><li><strong>Grosse erreur corrigé :</strong></li></ul><div>"strictNullChecks" : false dans le fichier tsconfig.json qui permet de forcer une variable en "null".<br><strong>4°)Les services<br>A quoi ça sert ?</strong></div><ul><li>-Facilité les tests unitaire</li><li>Maigrir le contenu de l'application de base</li><li>-Concentré sur le support de vue de la classe mère</li><li>-Les composants ne doivent pas enregistrer et récupérer des données directement et montrer de fausse données</li><li>-Ils doivent présenter les données.</li><li>a°) Créer le service "hero service": -ng generate servicehero</li><li>b°) Notion @Injectable : Participe au système d'injection de dépendance</li><li>c°)Importation des components heros : import { Hero } from './hero';<br>import { HEROES } from './mock-heroes';</li><li>d°) Modification du fichier mère : parcourheros: Hero[]; et Ajoute d'un paramètre privé de type HeroService au constructeur.</li><li>e°)Création méthode getleHero();</li><li>ngOnInit(): garder le constructeur pour initialisation, ngoninit prendra en charge l'appel des méthodes</li><li>Librairie RxJs : Observable</li><li>Affichage du message, ng generate component message</li><li>ng generate service message</li></ul><div><br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-14 07:13:43 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1086015135</guid>
      </item>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Vendredi 15 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1090228162</link>
         <description><![CDATA[<h1>5°) <strong>Ajouter la navigation dans l'application avec le routage :</strong></h1><ul><li><em>Ajoutez une vue de tableau de bord .</em></li><li><em>Ajoutez la possibilité de naviguer entre les vues Heroes et Dashboard .</em></li><li><em>Lorsque les utilisateurs cliquent sur un nom de héros dans l'une ou l'autre vue, accédez à une vue détaillée du héros sélectionné.</em></li><li><em>Lorsque les utilisateurs cliquent sur un lien profond dans un e-mail, ouvrez la vue détaillée d'un héros particulier.</em></li></ul><div>1°) <strong>Ajout AppRoutingModule : </strong></div><ul><li><strong><em>"ng generate module app-routing --flat --module=app"</em></strong></li></ul><div><em>Configure le routeur.<br>--flat place le fichier au src/app lieu de son propre dossier.<br>--module=App indique à la CLI de l'enregistrer dans le imports tableau du AppModule.<br></em><br><em>Le fichier importe </em><a href="https://angular.io/api/router/RouterModule"><em>RouterModule</em></a><em> et </em><a href="https://angular.io/api/router/Routes"><em>Routes</em></a><em> pour avoir une fonctionnalité de routage.<br>Il importe aussi le composant demandé pour savoir ou aller.</em></div><ul><li><strong>Code :</strong></li></ul><div><em>Imports RouterModule, Routes..<br>Imports Hero from 'hero'...<br>const routes: Routes = [<br>{path:'hero', component: HeroComponent}<br>];</em></div><ul><li><strong>Explication code :</strong></li></ul><div>-<em>On créer une const "x" lié à Routes.<br>-On y ajoute le path ( le chemin ) et le composant vers ou il va.<br></em><strong><em>-Exemple du code : </em></strong><em>Le routeur lira "hero" en URL et affiche le composant "HeroComponent"</em></div><ul><li><strong>Explication systèmes des routes</strong><strong><em> :</em></strong></li></ul><div><em>Les routes permettent de dire au routeur quelle vue afficher quand l'utilisateur clique sur un lien ou donne un URL dans la barre de recherche</em></div><ul><li><strong>Par la suite on import :</strong></li></ul><div><em>imports: [ RouterModule.forRoot(routes) ],<br>La ligne suivante ajoute le </em><a href="https://angular.io/api/router/RouterModule"><em>RouterModule</em></a><em> au service app routing et le configure avec le routes en une seule étape en appelant : </em><a href="https://angular.io/api/router/RouterModule#forRoot">RouterModule.forRoot()</a>:<br>forRoot() : config à la racine</div><ul><li><strong>Ensuite :</strong></li></ul><div>exports: [ <a href="https://angular.io/api/router/RouterModule">RouterModule</a> ]<br>-<em>AppRouting exporte </em><a href="https://angular.io/api/router/RouterModule"><em>RouterModule</em></a><em> pour qu'il soit disponible dans toute l'application.</em><br><br></div><div><strong>2°) Ajout du &lt;router-outlet&gt; :</strong><br>On remplace le <strong>&lt;app-heroes&gt; </strong>par le <strong>&lt;router-outel&gt;</strong>. <br><em>L'application affichera "HeroesComponent" que si on navigue dedans maintenant.</em></div><ul><li><strong>Explication</strong></li></ul><div>- <em>&lt;router-outel&gt; dis au routeur ou afficher les vues "routes"<br>- &lt;router-outel&gt; est une directive du routeur valable aux composants d'application car elle a été importé à l'aide de "App-Module" qui importe automatiquement les modules du Routeur.</em></div><ul><li><strong>Explication</strong></li></ul><div>- <em>La première commande d'initialisation à ajouter les importations :<br></em><strong><em>"ng generate module app-routing --flat --module=app"<br>- </em></strong><em>Si on ne créer pas l'app routing sans cette commande, il faut écrire soi-même les imports</em><strong><em>.<br>- </em></strong><em>Maintenant, ng serve affiche l'app mais plus la liste des héros.<br>Pour y accéder il faut ajouter /hero dans l'URL<br><br>3°) </em><strong>Lien de navigation Ajout :</strong><br><em>Lien cliquable pour ne plus écrire l'URL<br>Utilisation de &lt;nav&gt; dans l'html<br>Ajout d'un "Routerlink" à /Heroes</em></div><ul><li><strong>Code : </strong></li></ul><div><strong><em>&lt;nav Routerlink="/hero"&gt;<br>click<br>&lt;/nav&gt;<br><br>4°) </em></strong><strong>Ajout de la vue Dashboard</strong><br>"ng g <em>Dashboard components"</em></div><ul><li><strong>Ajout NAV route :</strong></li></ul><div>Import Dashboard et on ajoute la route ( comme en haut, voir code ).</div><ul><li><strong>Route par défaut :</strong></li></ul><div>Quand l'App démarre il n'y a aucune route à l'accueil. Il faut <em>faire nav l'app automatiquement sur le DashBoard :</em><br><strong><em>{path: ' ', redirectto: '/dashboard', patchmatch:'full' }<br></em></strong><br>-Le <strong>path</strong> : ' ' amène à Dashboard.<br>-"<strong>patchMatch</strong>" : "full" signifie que la page par défaut est l'écran de bienvenu avec l'URL originel "localhost:4200"</div><ul><li><strong>Ajout du clique Dashboard :</strong></li></ul><div><strong><em>&lt;a routerlink="./Dashboard"&gt;Dash<br>&lt;/a&gt;<br><br>5°) Navigation détail Hero :</em></strong></div><div>Détail accessible en cliquant :<br>-&gt;Sur un héros<br><em>-&gt;Sur la liste des héros<br>-&gt;Par l'URL ou un lien<br><br>On enleve les details hero de "herocomponents" en supprimant &lt;app-detailhero&gt;</em></div><ul><li><strong>Ajout Routes :</strong></li></ul><div>-Import Detailherocomp...<br>-On fait la route...</div><div>- Mais ici dans le "path" on met "detail/:id"<br><em>Quand on cliquera sur l'id 11, ça affichera les détails du héro 11.</em></div><ul><li><strong>Dashboard lien Héro code :</strong></li></ul><div><strong><em>&lt;a *</em></strong><a href="https://angular.io/api/common/NgForOf"><strong><em>ngFor</em></strong></a><strong><em>="let hero of heroes" class="col-1-4" </em></strong><a href="https://angular.io/api/router/RouterLink"><strong><em>routerLink</em></strong></a><strong><em>="/detail/{{hero.id}}"&gt;<br>  &lt;div class="module hero"&gt;<br>    &lt;h4&gt;{{hero.name}}&lt;/h4&gt;<br>  &lt;/div&gt;<br>&lt;/a&gt;</em></strong></div><ul><li><strong>HeroesComponent liens héros :</strong></li></ul><div><em>&lt;ul class="heroes"&gt;<br>  &lt;li *</em><a href="https://angular.io/api/common/NgForOf"><em>ngFor</em></a><em>="let hero of heroes"<br>    [class.selected]="hero === selectedHero"<br>    (click)="onSelect(hero)"&gt;<br>    &lt;span class="badge"&gt;{{hero.id}}&lt;/span&gt; {{hero.name}}<br>  &lt;/li&gt;<br>&lt;/ul&gt;<br>&lt;ul class="heroes"&gt;<br>  &lt;li *</em><a href="https://angular.io/api/common/NgForOf"><em>ngFor</em></a><em>="let hero of heroes"&gt;<br>    &lt;a </em><a href="https://angular.io/api/router/RouterLink"><em>routerLink</em></a><em>="/detail/{{hero.id}}"&gt;<br>      &lt;span class="badge"&gt;{{hero.id}}&lt;/span&gt; {{hero.name}}<br>    &lt;/a&gt;<br>  &lt;/li&gt;<br>&lt;/ul&gt;</em><br>Dans l'HTML de hérosComponents.</div><ul><li><strong>Explication :</strong></li></ul><div>Maintenant que le routeur a une route vers HeroDetailComponent, les liens héros du dashboard pourront naviguer via l' itinéraire du dashboard <em>paramétré</em> .<br><br><strong>6°)Routes des détails hero :<br></strong><br><em>-Le routeur créer le détail du héros à l'aide de l'URL<br>-Le détail Hero a besoin d'une nouvelle méthode pour trouver le chemin.<br>-Obtenir et extraire son itinéraire<br>-Héros avec ID via le HeroService.</em></div><ul><li><strong>Imports et injections :</strong></li></ul><div><em>import { </em><a href="https://angular.io/api/router/ActivatedRoute"><em>ActivatedRoute</em></a><em> } from '@angular/router';<br>import { </em><a href="https://angular.io/api/common/Location"><em>Location</em></a><em> } from '@angular/common';<br>import { HeroService } from '../hero.service';</em></div><div><br><strong>On injecter les services </strong><a href="https://angular.io/api/router/ActivatedRoute"><strong>ActivatedRoute</strong></a><strong>, HeroService et les </strong><a href="https://angular.io/api/common/Location"><strong>Location</strong></a><strong> dans le constructeur.</strong><br><br><em>constructor(<br>  private route: </em><a href="https://angular.io/api/router/ActivatedRoute"><em>ActivatedRoute</em></a><em>,<br>  private heroService: HeroService,<br>  private location: </em><a href="https://angular.io/api/common/Location"><em>Location</em></a><em><br>) {}</em></div><ul><li><strong>Extrait l'id du parametre d'itinéraire :</strong></li></ul><div><em>ngOnInit(): void {<br>  this.prendreleHero();<br>}<br>prendreleHero(): void {<br>  const id = +this.route.snapshot.paramMap.get('id');<br>  this.heroService.prendreleHero(id)<br>    .subscribe(hero =&gt; this.hero = hero);<br>}</em></div><ul><li><strong>Explication</strong></li></ul><div><em>-</em>snapshot est une image statique <br>-Le paramMap est un dictionnaire de valeurs de paramètres d'itinéraire extraites de l'URL. La "id" clé renvoie l'id du héros à récupérer.<br>-L'opérateur JavaScript (+) convertit la chaîne en un nombre, ce que id devrait être un héros .</div><div>Le navigateur s'actualise et l'application se bloque avec une erreur du compilateur. HeroService n'a pas de méthode prendreleHero()</div><ul><li><strong>Ajouter prendreleHero():</strong></li></ul><div><em>Dans hero.service.ts :</em></div><pre>prendreleHero(id: number): Observable&lt;Hero&gt; {
  // TODO: send the message _after_ fetching the hero
  this.messageService.add(`HeroService: fetched hero id=${id}`);
  return of(tableauHeroes.find(hero =&gt; hero.id === id));
}</pre><ul><li><strong>Trouvez le chemin du retour :</strong></li></ul><div>-Dans heroes comp html.<br><strong>Code :</strong><br><em>&lt;button (click)="goBack()"&gt;go back&lt;/button&gt;</em></div><ul><li><strong>Ajout de la méthode goBack():</strong></li></ul><div><em>Méthode</em> à la classe de composant qui navigue en arrière d'une étape dans la pile d'historique du navigateur à l'aide du <a href="https://angular.io/api/common/Location">Location</a>service.<br><em><br>goBack(): void {<br>  this.location.back();<br>}</em></div><div><br>Résumé :<br>-&gt;Compréhension Routeur/route<br>-&gt;&lt;router-outlet&gt; navigable<br>-&gt; Config routeur<br>-&gt; LinkDirective...</div><div><br><br></div><div><br><br></div><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-15 07:49:32 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1090228162</guid>
      </item>
      <item>
         <title>Semaine 1 : 11/01 - 15/01 Vendredi 15 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1095336947</link>
         <description><![CDATA[<div><strong>6°)Navigation : Obtenir des données d'un serveur</strong></div><ul><li><strong>Ajout de données</strong></li><li>HTTPClient</li><li>Ajout, modif, supp d'un héros via HTTP</li><li>Rechercher héros par nom</li></ul><div>1°) Activer HTTP :<br>Communiquer avec un serveur distant HTTP<br>Importe HttpClientModule<br>Ajoute Httpclient au imports du ngModule<br>2°)Simuler le serveur de données<br>npm install angular-in-message-web-api --save<br>Importe à la racine et on les déclare dans les imports<br>3°)Import HTTPClient dans les hérosservice et on déclare une variable avec l'URL de l'API :<br>app= 'api/tableauHeroes';<br><br>Configuration de l'HTTP terminé, voir code Cahier de note.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-17 12:23:55 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1095336947</guid>
      </item>
      <item>
         <title>Ce que j&#39;ai réalisé ce week-end</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1095977919</link>
         <description><![CDATA[<ul><li>Se renseigner sur le module npm "json-server" : <a href="https://www.npmjs.com/package/json-server">json-server - npm</a>. Permet de simuler un serveur json très facilement à partir d'un fichier de données <br>et de tester tes différents accès aux données à partir de tes services </li><li>Réalisation de la partie "Routage" du tutoriel d'Angular pour le transfert de la version 6 à la 10 de "gipsy",  les notions de routage sont essentielles</li><li>Note à moi-même :</li></ul><div>Revoir les notions de services et d'observable ainsi que la bibliothèque "rxjs"</div><ul><li><strong>Lien :</strong></li></ul><div>https://www.pierre-giraud.com/javascript-apprendre-coder-cours/introduction-asynchrone/<br>https://www.youtube.com/watch?v=TrDqaABq-UY&amp;ab_channel=DevoxxFR<br>https://www.youtube.com/watch?v=xdxbbbm2aXU&amp;ab_channel=CodeStepByStep</div><ul><li><strong>Lien Dashboard Template :</strong></li></ul><div>https://www.creative-tim.com/product/material-dashboard-angular2</div><ul><li><strong>Installation environnement Python et des modules:</strong></li></ul><div>https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment<br>https://docs.python.org/fr/3/library/venv.html<br>https://code.visualstudio.com/docs/python/environments<br><br>-pip install -r requirements.txt<br>Le fichier requirements.txt dans le projet Gipsy contient les modules à installer</div><ul><li><strong>Exemple installation django </strong></li></ul><div>https://code.visualstudio.com/docs/python/tutorial-django<br><br></div><ul><li><strong>Installation des modules Angular :</strong></li></ul><div><em>-</em><strong><em>npm install  @angular/cli<br>-npm install -r package.json</em></strong><em><br>Le fichier package.json contient les modules à installer</em></div><ul><li><strong>Logiciels :</strong></li></ul><div><em>VS code / docker / material dashboard angular / noode js / pgadmin / postgresql /python / tortoise svn / wamp</em><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-17 18:29:35 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1095977919</guid>
      </item>
      <item>
         <title>Semaine 2 : 18/01 - 22/01 Lundi 18 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1100163264</link>
         <description><![CDATA[<ul><li>Mise en place du travail, je dois corriger les erreurs de modules du programme de l'entreprise sous Angular tout en l'analysant.</li><li>Donc transférer le fichier de gipsy au nouveau fichier et régler les erreurs</li></ul><div><strong>Correction d'erreurs et de bugs :</strong></div><ul><li>Correction d'un bug sur Angular apparu dans les imports d'un module buggé "<strong>angular-in-memory-webapi</strong>" :</li></ul><div><strong><em>Install angular-in-memory-webapi --save</em></strong></div><ul><li>Correction problème HTTP et erreur "Createdb" : Après être mis en commentaire, le site refonctionne.</li></ul><div><strong><em>App.module.ts -&gt; /* code HttpClientInMemory<br><br></em></strong><strong>Connection à l'app "Gibsy" :<br></strong><em>-&gt; Python / Django <br>-&gt; ng serve -o depuis Gibsy</em></div><ul><li>On se met sur l'environnement Python créer la première semaine.</li></ul><div><strong><em>SELECT interpretreter, Le .venv</em></strong></div><ul><li>Dans le terminal pour se connecter on écrit :</li></ul><div><strong><em>"python manage.py runserver localhost:8000"</em></strong><br><br>Le serveur se lance, il permet de tester le travail. Aucune modification apportés est affecté.<br><br><strong>Sans lancer Django et Python depuis le terminal il est impossible de se connecter sur l'interface de Gibsy !<br>Toujours faire cette étape !<br></strong><br></div><ul><li><strong>Instructions :</strong></li></ul><div><em>-Ne pas toucher les fichiers externe au frontend sauf si nécessité pour images etc..<br>-Déplacer les fichiers du frontend.<br>-Principalement des erreurs de chemins, de modules, installation des modules, et quelques codes en commentaires et ou inutilisable.<br>-Identifier le code et le comprendre.<br><br></em><strong>Début du portage, je mettrais les différents problèmes depuis un tableau Excel ou un Word car ils sont trop long à énumérer ici<br></strong><br></div><div><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-19 08:33:16 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1100163264</guid>
      </item>
      <item>
         <title>Semaine 2 : 18/01 - 22/01  Mardi 19 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1100211483</link>
         <description><![CDATA[<div><strong>Objectifs de la semaine :</strong><br>1°) Importer le projet Gipsy Angular 6.2.9<br> sur le nouveau dossier Angular 11 contenant le Dashboard<br>Soit :</div><ul><li><em>Importer tous les composants</em></li><li><em>Importer tous les modules et les installer</em></li><li><em>Effectuer les modifications pour faire fonctionner les modules, installation, chemin</em></li><li><strong>Lien Dashboard Template :</strong></li></ul><div>https://www.creative-tim.com/product/material-dashboard-angular2</div><div>2°)Effectuer les chemins de Routes sur le nouveau Dashboard :</div><ul><li><em>Donc dans le composant "sidebar", pouvoir naviguer sur les composants de Gipsy.</em></li></ul><div>3°)Amélioration du Paddlet et rédaction de notes pour le stage</div><div><em>-Mise à jour du padlet avec plus de détails sur certains jours.</em></div><ul><li><strong>Fait aujourd'hui :</strong></li></ul><div><em>-Je continue le portage des données du projet de l'entreprise "gipsy" vers le nouveau en Angular 11 contenant le Dashboard, je mettrais les différents problèmes depuis un tableau Excel ou un Word car ils sont trop long à énumérer ici<br><br>-Fin des imports et résolutions des imports dans le dossier "app". Tous les fichiers de gipsy sont transférés.<br><br>-Ajout des imports dans le app.module.ts ainsi que l'installation de certains modules npm.</em></div><ul><li><strong> Important erreur qui a pris beaucoup de temps !</strong></li></ul><div><em>-Mon tuteur de stage, Fabrice, a dû m'aider pour un énorme bug de "jasmine", "cannot find namespace" ainsi que des problèmes "d'entries". Il a directement changer le codage d'une méthode appelant "Order" en "Any". En outre c'était un problème de typage complexe. Concernant les Entries, dans le fichier tsconfig, j'ai rajouté : "esnext" dans "lib" pour faire appel à d'autres librairies JavaScript ( voir capture d'écran )<br></em><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-19 08:47:20 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1100211483</guid>
      </item>
      <item>
         <title>Librairie modules JS</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1101548607</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/67f10efc7900e8c82a1a52023e0cb05f/lib.png" />
         <pubDate>2021-01-19 14:56:43 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1101548607</guid>
      </item>
      <item>
         <title>Semaine 2 : 18/01 - 22/01  Mercredi 20 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104451487</link>
         <description><![CDATA[<ul><li><strong>Importation app.module.ts </strong></li></ul><div><em>J'importe tous les modules de "</em><strong><em>app.module.ts</em></strong><em>" Gipsy vers le projet "frontend-v10". Pour cela j'installe certains modules, je supprime les doublons et je réécris les chemins d'importation car la norme pour écrire les chemins d'accès à changer d'Angular 6 à 11.<br></em><strong><em>Voir le fichier note uploadé</em></strong></div><ul><li><strong>Codage de la navigation, routes</strong></li></ul><div>Dans le composant "<strong><em>sidebar</em></strong>" du fichier "<strong><em><mark>shared</mark></em></strong>", j'effectue les routes des différents chemins d'accès</div><ul><li><strong>Imports "</strong><strong><em>Angular materials</em></strong><strong>" corrigé, voir fichier "Angumath" joint contenant avant / après</strong></li><li><strong>Installation des modules :</strong></li></ul><div><em>-npm i time-ago-pipe --save<br>-npm Angular-dual-listbox --save<br><br>J'ai dû installer une dizaine de module dans le "</em><strong><em>app.module.ts</em></strong><em>" qui sont nécessaire aux fonctionnements de certaines fonctionnalités du projet Gipsy.<br><br>Pour exemple, "</em><strong><em>angular-list-box"</em></strong><em> est un composant qui fournit deux listes de contrôles côte à côte et permet aux éléments d'une liste d'être sélectionnés et déplacés * vers l'autre liste par glisser-déposer et / ou par bouton interface. Le composant prend en charge plusieurs options de sélection dans la liste, le réglage par programmation des sources de la liste et la mise en page avec mise en forme de direction et de bouton.</em></div><ul><li><strong>Petite Erreur sur le ngbModule</strong></li></ul><div>Importing any ng-bootstrap module via .forRoot() has now been completely removed since <a href="https://github.com/ng-bootstrap/ng-bootstrap/blob/26073705ea17b87117b2d5a079779a341a6ed84f/CHANGELOG.md">5.0.0-rc.0</a></div><div><strong><em>Change</em></strong></div><div><strong><em>NgbModule.forRoot()</em></strong></div><div><strong><em>To</em></strong></div><div><strong><em>NgbModule</em></strong></div><ul><li><strong>Concernant les déclarations :</strong></li></ul><div>Dans les déclarations, on déclare les components, soit les fichiers components générés.</div><ul><li><strong>Concernant NgModules :</strong></li></ul><div>Dans NgModules, on déclare les modules, tout simplement.</div><div><br>Importation finis, il faut maintenant coder et transférer certaines lignes de code</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-20 07:15:38 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104451487</guid>
      </item>
      <item>
         <title>AppModule réalisé</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104696167</link>
         <description><![CDATA[<div>Ce fichier note contient des parties de code que j'ai réalisé et réparer pour les importations des différents composants et modules du projet</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/f111a9e8b6b2c0a98694d640815fcfd9/AppModule_Fait.txt" />
         <pubDate>2021-01-20 08:32:04 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104696167</guid>
      </item>
      <item>
         <title>Handsontable / ng2 errors</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104865826</link>
         <description><![CDATA[<div>Il faut aussi changé le "from 'ng2-file-upload/ng2-file-upload';" en "from 'ng2-file-upload';</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/f5197636e41019a9c12288bdadf4b2fb/handsontable_ng2_error.png" />
         <pubDate>2021-01-20 09:22:06 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1104865826</guid>
      </item>
      <item>
         <title>Semaine 2 : 18/01 - 22/01 Jeudi 21 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1109401631</link>
         <description><![CDATA[<div>Depuis le 20/01, je commence à modifier la template pour la rendre fonctionnelle avec le projet Gipsy. </div><ul><li><strong><mark>Modification du footer/navbar/sidebar :</mark></strong></li></ul><div>Je dois modifier le footer/navbar/sidebar du template (https://demos.creative-tim.com/material-dashboard-angular2/#/dashboard ) pour qu'il soit utilisable avec le projet Gipsy<br><br><strong><em>-Compréhension de l'environnement<br><br>-Réalisation des routes pour accéder à des parties de Gipsy<br>dans "sidebard.component.ts"<br><br>-Suppresion de certains composants inutiles aux projets "Carte Google Map" etc<br><br>-Lancement du site avec le Template fonctionnel après correctif du bug index.html, les icones refonctionnent grâce à ça et le site marche.<br><br>-Reglage du footer/header/sidebar qui sont fonctionnel, il faut modifier leurs routes et leurs styles.<br></em></strong><br></div><ul><li><strong>Correction de quelques soucis :</strong></li><li>"Balise &lt;a&gt;" buggé ajout d'un cursor pointeur.</li><li>Compréhension de l'erreur css dans les navigables. Quand l'utilisateur n'est pas connecté, la css n'est pas appliqué, il faut corriger.</li><li>Suppression de "getTitle" car non fonctionnel et doublon. Cette méthode servait à afficher le titre de l'élément sélectionner.</li><li>Réglage de quelque bugs d'imports.</li></ul><div><br></div><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-21 10:21:39 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1109401631</guid>
      </item>
      <item>
         <title></title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1110393727</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/c522a76e93e4153295f2e1daee0d85e0/code_fait_21.txt" />
         <pubDate>2021-01-21 14:57:58 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1110393727</guid>
      </item>
      <item>
         <title>Semaine 2 : 18/01 - 22/01 Vendredi 22 Janvier </title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113033538</link>
         <description><![CDATA[<var><strong>Objectifs à faire :</strong></var><ul><li>Correction Hebdomadaire du Padlet en y ajoutant des captures-d'écrans etc...</li><li>Récupération du projet sur un support externe, Cle USB</li><li>Analyse composant "<strong>AdminLayout</strong>" responsable d'une problème des styles CSS dans la sidebar.</li><li>Analyse CSS / BS après connexion à Gipsy car bug CSS / BS sur la sidebar.</li><li>Correction du footer, du CSS/BS ainsi que certaines images et icones</li><li>Correction des routes dans <strong>"Adminlayout"</strong> ainsi que des routes "privées" avec conditions.</li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-22 07:29:19 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113033538</guid>
      </item>
      <item>
         <title>Site Gipsy Originel, Angular 4.8.2</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113042109</link>
         <description><![CDATA[<div>Le rectangle bleu est une censure, ce sont des données confidentiels</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/a712f8f1483b39f1ada187e7d07028cd/site_originel.png" />
         <pubDate>2021-01-22 07:33:46 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113042109</guid>
      </item>
      <item>
         <title>Ce que j&#39;ai réalisé ce week-end</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113044856</link>
         <description><![CDATA[<ul><li>Revoir Bootstrap et le CSS en général</li><li>Réviser et approfondir Angular</li><li>Compréhension du code de Gipsy et de la template pour l'assimiler </li><li>Début livret de stage</li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-22 07:35:14 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1113044856</guid>
      </item>
      <item>
         <title>Semaine 3 : 25/01 - 29/01 Lundi 25 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120587072</link>
         <description><![CDATA[<div><br><br></div><var><strong>Objectifs de la semaine :</strong></var><ul><li><strong>Améliorer l'affichage du site :<br></strong><em>(Sidebar, Navbar, panels et le texte en général du site )</em></li><li><strong>Fonctionnement de la méthode "</strong><strong><em>getAccount()</em></strong><strong>" avec le bouton pour accéder aux informations d'un profil</strong></li><li><strong>Affichage de la sidebar</strong></li></ul><div><em>-Sidebar en bleu si connecté<br>-Sidebar en rouge si déconnecté</em></div><ul><li><strong>Notifications fonctionnelles</strong></li><li><strong>Mettre tous les icones</strong></li></ul><div><br></div><var><strong><em>Optionnel :</em></strong></var><ul><li><strong><em>Méthode GetTitle() qui ne fonctionnait pas sur le projet originel</em></strong></li><li><strong><em>Nom d'utilisateur dans la sidebar</em></strong></li></ul><div><br></div><var><strong>Faits :</strong></var><ul><li><strong>La méthode "getAccount()" fonctionne, voir fiche note</strong></li><li><strong>La sidebar est rouge quand l'utilisateur est déconnecté, et bleu quand l'utilisateur est connecté.</strong></li><li>La sidebar est entièrement fini et animé, j'ai dû rajouté un fond après sélection d'une section précise ( voir note ), il manquait des éléments sur la Template.</li><li>La sidebar, footer et navbar sont fini, fonctionnelles avec un belle affichage</li></ul><div>Voir notes</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-25 07:26:55 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120587072</guid>
      </item>
      <item>
         <title>Resolution Bouton &quot;GetAccount()&quot;</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120680877</link>
         <description><![CDATA[<div>Ce fichier compressé 7zip contient des captures d'écran de la résolution du problème de la méthode "getAccount()" permettant d'afficher les informations d'un profil<br><br>La méthode ne fonctionner pas car "currentUserData" n'était" pas trouvé dans le ngInit(), erreur d'import de ma part.</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/75349956070cd6ea04f0a87d45816f38/GetAccount_erreur_resolution.7z" />
         <pubDate>2021-01-25 07:55:04 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120680877</guid>
      </item>
      <item>
         <title>Resolution condition BootStrap pour la SideBar</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120943093</link>
         <description><![CDATA[<div>Ce fichier compressé 7zip contient des captures d'écran de la résolution du problème au niveau de la Sidebar et de sa condition Bootstrap impliquant un style spécifique.<br><br></div><ul><li>Quand la condition <strong><em>"!authenticationService.userLoggedIn"</em></strong> ( soit quand l'utilisateur n'est pas connecté ) :</li></ul><div>Dans la classe "class="sidebar"", le style de la page sera en rouge :</div><div><em>class="sidebar-background" style="background:linear-gradient( rgba(255, 0, 0, 0.5) 100%, rgba(255, 0, 0, 0.5)100%), url(assets/img/sidebar-1.jpg)"&gt;<br></em><br></div><ul><li><strong>Et inversement pour "quand l'utilisateur est connecté"</strong></li></ul><div><em>Voir fichier compressé pour plus de détails sur le code et pour voir les Screenshots.</em></div><ul><li><strong>Le dossier par la suite comporte toutes les solutions CSS / SCSS / Bootstrap sur la sidebar</strong></li></ul>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/84913743644848f812da20474465e57c/Dossier_complet_corrig__sidebar.7z" />
         <pubDate>2021-01-25 09:09:55 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1120943093</guid>
      </item>
      <item>
         <title>Lien Django, python etc...</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121119153</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/14a5cd3eaa59de52b992f6991e2f308f/Lien_explication.txt" />
         <pubDate>2021-01-25 09:59:31 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121119153</guid>
      </item>
      <item>
         <title>Apercu site avec sidebar, navbar et footer réalisés</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121754732</link>
         <description><![CDATA[<div>Voici un aperçu du site avec la sidebar, footer et Navbar terminé, elles possèdent des animations, les routes fonctionnent, une image de fond y est incrusté, les icones fonctionnent.<br><br>Il manque juste l'ajout de la barre de recherche, des notifications sur la navbar.</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/f8b59f28d0dc5d800bf84a0f2dfc6fd1/site.png" />
         <pubDate>2021-01-25 13:25:04 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121754732</guid>
      </item>
      <item>
         <title>Dossier contenant navbar et footer</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121845978</link>
         <description><![CDATA[<div>Ce fichier compressé 7zip contient des informations sur le footer et la navbar réalisé, de plus, elle contient le code HTML pour appeler la sidebar, la navbar et le footer.</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/52794f9231bdbc414dcd4e5cdc48aebe/Navbar_et_footer.7z" />
         <pubDate>2021-01-25 13:45:51 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1121845978</guid>
      </item>
      <item>
         <title>Semaine 3 : 25/01 - 29/01 Mardi 26 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1125320676</link>
         <description><![CDATA[<var><strong>Objectifs :</strong></var><ul><li>-Faire les notifications</li><li>-Faire chaque partie de la navigation (Dashboard, export, composants, fournisseurs etc..) et ne plus avoir de bugs d'affichage sur leur panel</li><li>Corrigé le bug de cliping de la barre de recherche</li><li>Corrigé le but de l'image de la sidebar en expansion</li></ul><div><br>Le projet a bien avancé, l'affichage du site est bien, cependant il faut maintenant compléter les différents onglets pour ne plus obtenir de bug d'affichage. Il faudra donc optimiser le bootstrap, l'html et le css de chaque onglet.<br><br></div><ul><li><strong>Onglet "Export"</strong></li></ul><div>J'ai fini la réalisation de l'onglet "Export", j'ai modifié des éléments de son Bootstrap tel que les "rows", les boutons, ou encore directement le header. Cela m'a pris du temps mais la page est maintenant opérationnel et plus jolie que l'originel.<br>(voir fiche note export)<br><br></div><ul><li><strong>Onglet prescription</strong></li></ul><div>J'ai rajouté son sous-onglet permettant d'accéder au liste de scénario. J'ai crée un bouton avec un icone et le chemin sur l'icone mène à la page.<br><br>J'ai aussi corrigé le bouton "nouvelle prescription", l'affichage n'est plus buggué et il est opérationnel, cependant, il faudrait voir si le tableau fonctionne en test ou non et rajouter des boutons plus visible.<br><br>Cet onglet doit donc uniquement obtenir des modifications CSS<br>(voir fiche note)<br><br></div><ul><li><strong>Onglet fournisseur</strong></li></ul><div>Comme l'onglet Export, j'ai beaucoup travaillé sur cet onglet aujourd'hui, il a maintenant un bon affichage grâce au modification Bootstrap que j'ai apporté cependant il faut finir certains panels sur les boutons<br><br>Le bouton "nouveau fournisseur".<br>Le bouton "gérer un achat" est fini<br><strong>Le bouton "retour consultation" n'est pas entièrement fini<br>Le bouton "consultation d'obsolescence" n'est pas entièrement fini</strong></div><div><br></div><ul><li><strong>Onglet prestation et onglet consommable :</strong></li></ul><div>Ils ont un panel identique sur leur bouton, il faudra donc le réaliser et aussi compléter le style de leur page respectif.</div><ul><li><strong>Onglet Dashboard</strong></li></ul><div>Compléter la font sinon fini</div><ul><li><strong>Onglet Matériels et équipements</strong></li></ul><div>Ils ont un panel identique sur leur bouton, il faudra donc le réaliser et aussi compléter le style de leur page respectif<br><br><strong>A chaque fois que je compléterais entièrement un onglet je posterai un Avant / Après de mon travail et une comparaison vis à vis de la version v6 Gipsy.</strong></div><div><br></div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/d178a1ef6edba7dddd6eb5128525cace/gg.png" />
         <pubDate>2021-01-26 07:14:14 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1125320676</guid>
      </item>
      <item>
         <title>Fiche note : &quot;Export&quot;</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1125764050</link>
         <description><![CDATA[<div>Ce fichier compressé contient le code et des apercus de l'affichage concernant les "exports"<br><br>A noté que ce sont majoritairement de grosse modification Bootstrap et CSS mais le code sera cependant expliqué à certains moments.<br><br>Pour exemple, la dernière &lt;div&gt; fonctionne uniquement si le contenu de chaque listbox est selectionné</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/b4bf74b423e94a92c9d9b4f3d70e8ab0/Exports.7z" />
         <pubDate>2021-01-26 09:23:20 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1125764050</guid>
      </item>
      <item>
         <title>Semaine 3 : 25/01 - 29/01 Mercredi 27 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1130258910</link>
         <description><![CDATA[<div><strong><em>Objectifs</em></strong><strong>:</strong></div><ul><li><strong>Faire le CSS, fonts etc de chaque onglets.</strong></li><li><strong>Finir chaque onglet</strong></li><li><strong>Résoudre les bugs précédemment cité concernant l'extension de l'image de la sidebar et le clping de la barre de recherche</strong></li></ul><div><br></div><ul><li>Concernant BS/CSS/SCSS</li></ul><div><br><strong><em>Voici des lignes de code qui m'aideront à résoudre certains aspect du CSS du projet.<br>Je mettrais un dossier contenant avant après du css et une comparaison au projet V6.<br></em></strong><br></div><ul><li><strong>Bug de cursor pointeur et couleur  </strong>:</li></ul><div>Certains éléments du projet ne possède (étrangement) pas de curseur pointeur comme notamment les tableaux. Il faut donc les ajouter :<br><strong><em>style="cursor: pointer;"</em></strong> dans chaque balise &lt;mat-cell&gt;.<br>Et je rajoute la couleur simplement par un : color:blue;" dans le style.<br>J'accentue aussi la police d'écriture : font-weight:bolder;<br><strong><em>Exemple tableau fournisseur :</em></strong></div><blockquote> &lt;mat-cell *matCellDef="let element"&gt;<br>                                    &lt;a style="cursor: pointer; color:#1f81d6; font-weight:bolder;" (click)="getDetails(element.id)" [contextMenu]="basicMenu"<br>                                       [contextMenuSubject]="element"&gt;{{ element.adresse }}&lt;/a&gt;<br>                                &lt;/mat-cell&gt;</blockquote><div><br>Maintenant que j'ai réglé ce tableau, je peux tout simplement copier coller le style sur toute les autres pages</div><ul><li><strong>Modification des titres :</strong></li></ul><div>Comme dans le titre, j'ajoute le texte en gras dans chaque titre et je l'espace vers la gauche.<br><br></div><ul><li> <strong><em>Exemple dans fournisseur :</em></strong></li></ul><blockquote>  &lt;h4 class="title" style="font-weight: bold; margin-left: 15px;"&gt;Liste des fournisseurs&lt;/h4&gt;</blockquote><div><br>Maintenant que j'ai réglé les titres, je peux simplement copier coller le style sur toute les autres pages<br><br>Pour ne pas recopier les titres j'ai rajouté dans les fichers scss :<br>.title{</div><div>  font-weight: bold; </div><div>  margin-left: 15px;</div><div>}</div><ul><li><strong>CSS Terminé au niveau</strong> <strong>des titres et tableau</strong></li><li><strong>Résolution Sidebar</strong></li></ul><div>background-size: auto 1000px;<br><br></div><ul><li><strong>Panel "selection colonne":</strong></li></ul><div><br>Tous les icones ont étaient modifié et sont fonctionnelles<br><br>Un gros bug sur le module "handsontable" permettant d'afficher des tableaux a été résolu"<br><br>Dans angular.json -&gt; Styles, déclarer le styles.scss<br><br>Le site a beaucoup avancé, cependant vu la quantité énorme d'onglet je ne montrerai pas chaque changement en capture d'écran</div><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-27 07:31:52 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1130258910</guid>
      </item>
      <item>
         <title>fichier scss</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1130657095</link>
         <description><![CDATA[<div>Dans chaque SCSS je rajoute :<br>.mat-cell{</div><div>    cursor: pointer; </div><div>    color:#1f81d6; </div><div>    font-weight:bolder;</div><div>}<br>.mat-cell:link {</div><div>    text-decoration: none;</div><div>}</div><div>  </div><div>.mat-cell:visited {</div><div>    text-decoration: none;</div><div>}</div><div>  </div><div>.mat-cell:hover {</div><div>    text-decoration: underline;</div><div>}</div><div>  </div><div>.mat-cell:active {</div><div>    text-decoration: underline;</div><div>}</div><div>.title{</div><div>    font-weight: bold; </div><div>    margin-left: 15px;</div><div>  }</div><div><br><br>Si il y a des liens :<br>a{</div><div>    cursor: pointer; </div><div>    color:#1f81d6; </div><div>}</div><div>a:link {</div><div>    text-decoration: none;</div><div>}</div><div>  </div><div>a:visited {</div><div>    text-decoration: none;</div><div>}</div><div>  </div><div>a:hover {</div><div>    text-decoration: underline;</div><div>}</div><div>  </div><div>a:active {</div><div>    text-decoration: underline;</div><div>}</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-27 09:26:11 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1130657095</guid>
      </item>
      <item>
         <title>Semaine 3 : 25/01 - 29/01 : Jeudi 28 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135070643</link>
         <description><![CDATA[<div><strong>Objectifs :</strong></div><ul><li><strong>Dans l'onglet fournisseurs :</strong></li></ul><div>-Corrigé la textarea qui prend toute la page<br>-Modifier l'emplacement de certains boutons et ajouter un bouton :<br>Valider et Retour à gauche et le reste à droite<br>-Ajouter un "input" pour déposer un fichier dans le bouton consultation</div><ul><li><strong>Dans les onglets Prestation et Consommable :</strong></li></ul><div>-Corrigé l'affichage de leur méthode "nouvelle prestation / consommable"</div><ul><li><strong>Dans l'onglet Equipements IEG :</strong></li></ul><div>Tout faire comme hier, affichage, icone etc...</div><ul><li><strong>Dans l'onglet Matériel :</strong></li></ul><div>-Ajouter un cursor pointeur quand on sélectionne une référence-fournisseur<br>Modifier l'emplacement de certains boutons à l'aide de Bootstrap<br><br><br>Quand tout sera fini, on attaquera le développement de la barre de recherche avec une partie "backend"<br>Toutes les modifications apportaient jusqu'ici relèvent du frontend et du développement web design<br><br></div><div><br></div><var><strong>Faits</strong></var><ul><li><strong>Onglet matériel fait à 100%</strong></li><li><strong>Onglet DashBoard fait à 100%</strong></li><li><strong>Onglet Export fait à 100%</strong></li><li><strong>Onglet Prescription fait à 100%</strong></li><li><strong>Tout est réalisé à 100% !</strong></li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-28 07:42:27 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135070643</guid>
      </item>
      <item>
         <title>Concernant les boutons</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135098102</link>
         <description><![CDATA[<div>Le projet Gipsy comporte énormément de bouton, plus de 100 boutons en tout. Il est donc évident que je ne vais pas poster chaque code de modification de chaque bouton.<br><br>Afin de changer rapidement chaque bouton, j'utilise l'historique de recherche de Visual Studio Code et je copie un bouton préalablement créer par moi-même sur le bouton en question concernant sont type : Annuler / Valider...<br><br>Cependant, certains boutons se ressemble, je vais donc expliquer les types de boutons de l'application et certaines de leurs méthodes.<br><br><br></div><ul><li><strong>Pour les boutons valider :</strong></li></ul><div>class="btn-success btn btn-fill pull-right"<br>C'est un bouton, vert "success", et remplis de sa couleur, vers la droite "pull-right".<br><br></div><ul><li><strong>Pour les boutons Annuler / Quitter :</strong></li></ul><div>class="btn-danger btn btn-fill pull-right"<br>Btn-danger donne une couleur rouge, c'est un bouton entièrement remplis, vers la droite.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-28 07:50:40 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135098102</guid>
      </item>
      <item>
         <title>Onglet materiel</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135255882</link>
         <description><![CDATA[<div>Voici un fichier compressé 7zip contenant des informations sur mon travail sur l'onglet materiel</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/72f0cda131262786e084498be292c68a/Onglet_Materiel.7z" />
         <pubDate>2021-01-28 08:37:27 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1135255882</guid>
      </item>
      <item>
         <title>Semaine 3 : 25/01 - 29/01 : Vendredi 29 Janvier</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1140640158</link>
         <description><![CDATA[<div>Aujourd'hui j'ai fini la réalisation du site, il ne reste que quelques bugs mineurs à voir avec Fabrice lors de son retour.<br>Les notifications sont terminées<br><br>J'ai donc aujourd'hui commencé un récapitulatif de ce que j'ai fait, avec une explication appronfondis de certaines lignes de codes.<br><br>Bien évident, je ne pourrais pas mettre tout dans le compte rendu du projet étant donné que certaines parties de code font plus de 1000 lignes et je ne les ai jamais traité. Cependant, je compte expliquer certaines méthodes et leurs actions, notamment les méthodes lié à des listes ou des tableaux.<br><br>A la suite de cette semaine, je vais devoir la barre de recherche du site. Donc, je vais m'attaquer à la partie backend du projet, et je vais développer tout ça.<br><br>Il reste quelque bugs sur le site, notamment avec un input file non fonctionnel que je dois voir avec Fabrice<br><br>En outre cette semaine, j'ai énormément travaillé sur l'interface du site avec BootStrap et CSS<br>J'uploaderai toutes les captures d'écrans et modification de code que j'ai effectué lors de cette troisième semaine</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-01-29 14:01:58 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1140640158</guid>
      </item>
      <item>
         <title>Semaine 4 : 01/02 - 05/02 Lundi 1 février</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1147321044</link>
         <description><![CDATA[<div><strong><br>Le site est maintenant terminé.</strong></div><var><strong>Objectifs</strong></var><ul><li><strong>Développer la barre de recherche</strong></li><li><strong>Développer le bouton Input pour "sélectionner un fichier"</strong></li><li><strong>Corriger quelques bugs :</strong></li></ul><div><em>-Mettre l'interface "login" sur le "dashboard"<br><br>Message : <br>"Dès</em> que l'utilisateur tape un caractère dans la barre de recherche, tu vas faire des "<strong>appels Ajax</strong>" en passant par un service Angular. Côté backend (python/Django), il faut faire un "<strong>service REST</strong>" qui va chercher la chaine passée en paramètre de la requête HTTP dans les tables de la base de données. Regarde la recherche "<strong>full text</strong>" de<strong> PostgreSQL</strong>.<br><br></div><ul><li><strong>Barre de recherche</strong></li></ul><div>Quand on écrit un mot clé et qu'on le recherche, ça nous redirige vers une page affichant une liste contenant plusieurs colonnes :<br>-Le nom des tables affichant le mot clé <br>-Toutes les propriétés, Id etc...<br><br>Quand on clique sur l'élément de la liste, on est redirigé vers l'élément en question<br><br></div><ul><li><strong>Deux Solutions possible :</strong></li></ul><div>-Base de données : Utilisé un SELECT / LIKE<br>-Full-text -&gt; langage naturel</div><div><br>BackEnd -&gt; Python.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-01 07:27:28 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1147321044</guid>
      </item>
      <item>
         <title>02/02 à 21/02/21</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1181725891</link>
         <description><![CDATA[<div>Hopital Urgence arrêt de travail<br>J'ai repris le travail le 15/02 malgré l'AT</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-09 12:20:34 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1181725891</guid>
      </item>
      <item>
         <title>Semaine 6 : 15/02 - 21/02</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1206085398</link>
         <description><![CDATA[<div>Je dois toujours effectuer la barre de recherche mais c'est très compliqué surtout côté BACKEND<br><br>J'ai trouvé une ressource pour m'aider :<br>https://github.com/ParentJA/example-search<br><br>Je dois faire une recherche "full text"<br><br>J'ai réalisé le code suivant :<br><br>serializer_class = RechercheSerializer</div><div><br></div><div>    def get_queryset(self):</div><div>        query = self.request.query_params.get('query')</div><div>        if query is None:</div><div>            return Materiel.objects.none()</div><div>        search_vector = (</div><div>            SearchVector('id') + </div><div>            SearchVector('reference_ieg')</div><div>        )</div><div>        return Materiel.objects.annotate(</div><div>            search_vector=search_vector</div><div>        ).filter(search_vector=SearchQuery(query))<br><br>Problème, il y a une erreur de "GET", il m'est impossible d'utiliser le GET</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-16 08:48:13 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1206085398</guid>
      </item>
      <item>
         <title>recherche accent</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1211152605</link>
         <description><![CDATA[<h1>Unaccented query</h1><div><em><br>By activating the unaccent PostgreSQL module, we can use the “unaccent” extension.</em></div><div><br>Python</div><pre>from django.contrib.postgres.operations import UnaccentExtension
class Migration(migrations.Migration):
    ...
    operations = [
        UnaccentExtension(),
        ...
    ]</pre><div><br>SQL</div><pre>CREATE EXTENSION unaccent;</pre><div><em><br>We can search without worrying about accented characters, useful in different languages.</em></div><div><br>Python</div><pre>Author.objects.filter(
  name__unaccent='Helene Joy'
).values_list('name', flat=True))</pre><div><br>SQL</div><pre>SELECT "blog_author"."name"
  FROM "blog_author"
 WHERE UNACCENT("blog_author"."name") = (UNACCENT('Helene Joy'))</pre><div><br>Output</div><pre>['Hélène Joy']</pre><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-17 14:00:57 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1211152605</guid>
      </item>
      <item>
         <title>SearchVector</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218146695</link>
         <description><![CDATA[<div><br>La recherche dans un champ unique fonctionne bien mais est plutôt limitée. Les instances <strong>Entry</strong> que nous recherchons appartiennent à un <strong>Blog</strong>, qui possède un champ <strong>tagline</strong>. Pour interroger les deux champs, utilisez un vecteur <strong>SearchVector</strong>:<br><br></div><pre><strong>&gt;&gt;&gt; from</strong> <strong>django.contrib.postgres.search</strong> <strong>import</strong> SearchVector
<strong>&gt;&gt;&gt; </strong>Entry.objects.annotate(
<strong>... </strong>    search=SearchVector('body_text', 'blog__tagline'),
<strong>... </strong>).filter(search='Cheese')
[&lt;Entry: Cheese on Toast recipes&gt;, &lt;Entry: Pizza Recipes&gt;]
<br></pre><div><br>Les paramètres à <strong>SearchVector</strong> peuvent être n’importe quelle <a href="https://docs.djangoproject.com/fr/3.1/ref/models/expressions/#django.db.models.Expression"><strong>Expression</strong></a> ou le nom d’un champ. Plusieurs paramètres seront concaténés par des espaces afin que le document de recherche les inclue tous.<br><br></div><div><br>Les objets <strong>SearchVector</strong> peuvent être combinés ce qui permet de les réutiliser. Par exemple :<br><br></div><pre><strong>&gt;&gt;&gt; </strong>Entry.objects.annotate(
<strong>... </strong>    search=SearchVector('body_text') + SearchVector('blog__tagline'),
<strong>... </strong>).filter(search='Cheese')
[&lt;Entry: Cheese on Toast recipes&gt;, &lt;Entry: Pizza Recipes&gt;]
<br></pre><div><br>Voir <a href="https://docs.djangoproject.com/fr/3.1/ref/contrib/postgres/search/#postgresql-fts-search-configuration">Modification de la configuration de recherche</a> et <a href="https://docs.djangoproject.com/fr/3.1/ref/contrib/postgres/search/#postgresql-fts-weighting-queries">Pondération des requêtes</a> pour une explication des paramètres <strong>config</strong> et <strong>weight</strong>.<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-19 08:42:59 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218146695</guid>
      </item>
      <item>
         <title>SearchRank</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218151172</link>
         <description><![CDATA[<div><strong><em>class </em></strong><strong>SearchRank(</strong><strong><em>vector</em></strong><strong>, </strong><strong><em>query</em></strong><strong>, </strong><strong><em>weights=None</em></strong><strong>, </strong><strong><em>normalization=None</em></strong><strong>, </strong><strong><em>cover_density=False</em></strong><strong>)</strong><a href="https://docs.djangoproject.com/fr/3.1/ref/contrib/postgres/search/#django.contrib.postgres.search.SearchRank"><strong>¶</strong></a></div><div><br></div><div><br>Nous avons jusqu’ici renvoyés les résultats pour lesquels au moins une correspondance entre le vecteur et la requête est possible. Il est probable que vous souhaitiez trier les résultats par une certaine notion de pertinence. PostgreSQL fournit une fonction de classement qui prend en compte la fréquence d’apparition des termes recherchés dans le document, la proximité de ces termes dans le document et l’importance de l’endroit où les termes se trouvent dans le document. Plus la correspondance est bonne, plus le classement sera élevé. Pour trier par pertinence :<br><br></div><pre><strong>&gt;&gt;&gt; from</strong> <strong>django.contrib.postgres.search</strong> <strong>import</strong> SearchQuery, SearchRank, SearchVector
<strong>&gt;&gt;&gt; </strong>vector = SearchVector('body_text')
<strong>&gt;&gt;&gt; </strong>query = SearchQuery('cheese')
<strong>&gt;&gt;&gt; </strong>Entry.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')
[&lt;Entry: Cheese on Toast recipes&gt;, &lt;Entry: Pizza recipes&gt;]
<br></pre><div><br>Voir <a href="https://docs.djangoproject.com/fr/3.1/ref/contrib/postgres/search/#postgresql-fts-weighting-queries">Pondération des requêtes</a> pour une explication du paramètre <strong>weights</strong>.<br><br></div><div><br>Définissez le paramètre <strong>cover_density</strong> à <strong>True</strong> pour activer le classement selon densité de couverture, ce qui signifie que la proximité des termes de recherche correspondants est prise en compte.<br><br></div><div><br>Indiquez un nombre entier dans le paramètre <strong>normalization</strong> pour contrôler la normalisation du classement. Ce nombre est un masque binaire, ce qui permet de combiner plusieurs comportements<br><br></div><pre><strong>&gt;&gt;&gt; from</strong> <strong>django.db.models</strong> <strong>import</strong> Value
<strong>&gt;&gt;&gt; </strong>Entry.objects.annotate(
<strong>... </strong>    rank=SearchRank(
<strong>... </strong>        vector,
<strong>... </strong>        query,
<strong>... </strong>        normalization=Value(2).bitor(Value(4)),
<strong>... </strong>    )
<strong>... </strong>)
<br></pre><div><br>La documentation PostgreSQL contient plus de détails sur les <a href="https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-RANKING">différentes options de normalisation de classement</a>.<br><br></div><div>New in Django 3.1:Les paramètres normalization et cover_density ont été ajoutés.</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-19 08:45:11 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218151172</guid>
      </item>
      <item>
         <title>Semaine 6 : 15/02 - 21/02</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218153327</link>
         <description><![CDATA[<div>Fabrice m'a aidé côté backend<br>J'ai maintenant le code permettant d'effectuer les recherches, cependant il y a une erreur au niveau du parametre query prenant le mot saisie par l'utilisateur.<br>De plus je dois ajouter les "searchrank" pour mieux trier les recherches<br>j'ai complété le code en ajoutant les defs pour chaque table<br><br>class Recherche(View):</div><div>    def __init__(self):</div><div>        super().__init__()</div><div>        self.logger = logging.getLogger('backend')</div><div><br></div><div>    def post(self, request: HttpRequest, *args, **kwargs):</div><div>        routename = resolve(request.path_info).url_name</div><div>        query = request.GET.get('query', None)</div><div>        self.logger.debug('routename is {}'.format(routename))</div><div>        self.logger.debug('arguments are : {}'.format(kwargs))</div><div>        self.logger.debug('query terms are : {}'.format(query))</div><div>             </div><div>  </div><div>    </div><div>        if routename == 'recherche':</div><div>            data = []</div><div>            data += self.filter_materiels(query)</div><div>            data += self.filter_equipements(query)</div><div><br></div><div>            data += self.filter_prestations(query)</div><div>            data += self.filter_conso(query)</div><div>         </div><div>            data += self. filter_prescriptions(query)</div><div>            data += self.filter_fournisseurs(query)</div><div>            </div><div>            return HttpResponse(json.dumps(data), content_type='application/json')</div><div>        else:</div><div>            raise Http404('pas de données')</div><div><br></div><div>    def filter_materiels(self, query):</div><div>   </div><div>        lignes = Materiel.objects.annotate(search=SearchVector('type_materiel', 'famille','reference_ieg','version','libelle', 'equipement', 'qualification_particuliere', 'user_modification', 'date_modification')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'materiel',</div><div>                'libelle': '{} / {} / {} / {} / {} / {} / {} / {} / {}'.format(row.type_materiel, row.famille, row.reference_ieg, row.version, row.libelle, row.equipement, row.qualification_particuliere, row.user_modification, row.date_modification)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div>    </div><div>    def filter_equipements(self, query):</div><div>        lignes = TypeMateriel.objects.annotate(search=SearchVector('libelle', 'famille', 'alerte_cq', 'assemblage')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'type_materiel',</div><div>                'libelle': '{} / {} / {} / {}'.format(row.libelle, row.famille, row.alerte_cq, row.assemblage)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div>    </div><div>    def filter_prestations(self, query):</div><div>        lignes = Prestation.objects.annotate(search=SearchVector('reference_ieg', 'famille', 'type', 'origine')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'fourniture',</div><div>                'libelle': '{} / {} / {} / {}'.format(row.reference_ieg, row.famille, row.type, row.origine)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div><br></div><div>    def filter_conso(self, query):</div><div>        lignes = Consommable.objects.annotate(search=SearchVector('reference_ieg', 'famille', 'type', 'origine')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'fourniture',</div><div>                'libelle': '{} / {} / {} / {}'.format(row.reference_ieg, row.famille, row.type, row.origine)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div><br></div><div>    def filter_prescriptions(self, query):</div><div>        lignes = Fournisseur.objects.annotate(search=SearchVector('affaire','document_fdt_id','document_lma_id','user_modification',' date_modification')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'prescription',</div><div>                'libelle': '{} / {} / {} / {} / {}'.format(row.affaire,row.document_fdt_id,row.document_lma_id,row.user_modification,row.date_modification)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div><br></div><div>    def filter_fournisseurs(self, query):</div><div>        lignes = Fournisseur.objects.annotate(search=SearchVector('raison_sociale','adresse','code_postal','ville','site_web','tel_accueil', 'commentaire')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'fournisseur',</div><div>                'libelle': '{} / {} / {} / {} / {} / {} / {}'.format(row.raison_sociale, row.adresse, row.code_postal, row.ville, row.site_web, row.tel_accueil, row.commentaire)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-19 08:46:19 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1218153327</guid>
      </item>
      <item>
         <title>Semaine 7 22/02 au 25/02</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1226583996</link>
         <description><![CDATA[<div>-Documents administratif<br>-Se renseigner sur les requetes POST de Django<br>-Le frontend pour effectuer le post fonctionne<br>-Regler le bug de la query <br><br><br>Les utilisateurs peuvent maintenant effectuer une recherche sur toute la BDD<br>La pagination est présente à l'aide d'un module Angular<br><br>Il faut rajouter maintenant la barre de filtre ainsi que les liens cliquables</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-22 14:21:18 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1226583996</guid>
      </item>
      <item>
         <title>Côté BackEnd :</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234926049</link>
         <description><![CDATA[<div>Attention, il n'y a içi que la recherche pour les materiels, les autres recherches vont être implanter par la suite<br><br>import json</div><div><br></div><div>import django</div><div>from django.core.exceptions import ObjectDoesNotExist</div><div>from django.core.signals import request_finished</div><div>from django.dispatch import receiver</div><div>from django.http import HttpResponse, HttpRequest, HttpResponseNotFound, Http404</div><div>import logging</div><div><br></div><div>from django.shortcuts import get_object_or_404</div><div>from django.urls import resolve</div><div>from django.views import View</div><div><br></div><div>from backend import models</div><div>from backend.tools import serializers</div><div>from rest_framework import viewsets</div><div>from django.db.models import Q</div><div><br></div><div>from rest_framework import serializers</div><div>from django.contrib.postgres.search import SearchQuery, SearchVector, SearchRank</div><div><br><br></div><div>class Recherche(View):</div><div>    def __init__(self):</div><div>        super().__init__()</div><div>        self.logger = logging.getLogger('backend')</div><div><br></div><div>    def post(self, request: HttpRequest, *args, **kwargs):</div><div><br></div><div>        routename = resolve(request.path_info).url_name</div><div><br></div><div>        if routename == 'recherche':  </div><div>            request_body = json.loads(request.body.decode('utf-8'))</div><div>            query = request_body['query']</div><div>            self.logger.debug('query is: {}' .format(query))</div><div><br></div><div>            data = []</div><div>            data += self.filter_materiels(query)</div><div>       </div><div>            return HttpResponse(json.dumps(data), content_type='application/json')</div><div>        else:</div><div>            raise Http404('pas de données')</div><div><br></div><div>    def filter_materiels(self, query):</div><div>        lignes= models.Materiel.objects.annotate(search=SearchVector('reference_ieg','libelle')).filter(search=query)</div><div>        data = []</div><div>        for row in lignes:</div><div>            data_row = {</div><div>                'id': row.id,</div><div>                'type': 'materiel',</div><div>                'libelle': '{} / {}'.format(row.reference_ieg, row.libelle)</div><div>            }</div><div>            data.append(data_row)</div><div>        return data</div><div>   </div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-24 06:58:57 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234926049</guid>
      </item>
      <item>
         <title>Côté FrontEnd</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234941518</link>
         <description><![CDATA[<div>Voici l'html de ma barre de recherche</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/8171f9ed818d64f4ca6801dd1b8a2398/Frontend_recherche_html.txt" />
         <pubDate>2021-02-24 07:04:30 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234941518</guid>
      </item>
      <item>
         <title>Coté FrontEnd, composant</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234949657</link>
         <description><![CDATA[<div>Voici le composant contenant les méthodes</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/a4499e9bf97b8565e1ca91304cd0d66a/Frontend_comp_recherche.txt" />
         <pubDate>2021-02-24 07:07:34 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234949657</guid>
      </item>
      <item>
         <title>Côté FrontEnd, service</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234951906</link>
         <description><![CDATA[<div>Voici le service pour effectuer la connexion backend avec la requete ajax<br><br><br>import { Injectable } from '@angular/core';</div><div>import {HttpClient, HttpParams,  HttpHeaders} from '@angular/common/http';</div><div>import 'rxjs/add/operator/map'</div><div>import {Router} from '@angular/router';</div><div>import {CookieService} from 'ngx-cookie-service';</div><div>import {Refresh_componentService} from './refresh_component.service';</div><div>import { RechercheInterface } from '../rechercheInterface';</div><div>import { Observable } from 'rxjs/Rx';</div><div>import {Global} from '../globals';</div><div>import {MessageService} from './message.service';</div><div><br><br></div><div>@Injectable({</div><div>  providedIn: 'root'</div><div>})</div><div>export class RechercherService {</div><div>  private urlrecherche = Global.BACKEND_URL + 'recherche/';  // URL to web api</div><div><br></div><div>  httpOptions = {</div><div>      headers: new HttpHeaders({'Content-Type': 'application/json'})</div><div>  };</div><div><br></div><div>  constructor(private http: HttpClient, private router: Router, private cookieService: CookieService, private refreshComponent: Refresh_componentService, private messageService: MessageService) {</div><div>  }</div><div>  search(query: string): Observable&lt;RechercheInterface[]&gt; {</div><div>//    const params: HttpParams = new HttpParams().set('query', query);</div><div>    const params = {'query': query};</div><div>    return this.http.post&lt;RechercheInterface[]&gt;(this.urlrecherche, params, this.httpOptions);</div><div>  }</div><div>}</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-24 07:08:27 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234951906</guid>
      </item>
      <item>
         <title>Côté FrontEnd, interface</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234955260</link>
         <description><![CDATA[<div>Voici l'interface<br><br>export class RechercheInterface {</div><div>    public id : number;</div><div>    public type : string;</div><div>    public libelle : string;</div><div>}</div><div>//Transmit par les composants et les controles Angular</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-24 07:09:44 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234955260</guid>
      </item>
      <item>
         <title>resultat exemple</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234984300</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/2156011a4a53f09295b3fcbb64e8fed5/resultat_ex.png" />
         <pubDate>2021-02-24 07:20:23 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1234984300</guid>
      </item>
      <item>
         <title>J&#39;ai aussi réalisé la redirection en cliquant sur les liens de recherche</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1236499754</link>
         <description><![CDATA[<div>https://hasangalakdinu.medium.com/how-to-call-a-function-in-another-component-angular-using-rxjs-3f2e85920705<br>Pour utiliser la méthode d'un composant dans un autre composant<br><br>getDetailsMateriel(materiel_id) {</div><div>    this.router.navigate(['/materiel-details/', materiel_id]);</div><div>  } </div><div>  getDetailsEquipement(materiel_id) {</div><div>    this.router.navigate(['/equipement-details/', materiel_id]);</div><div>  }</div><div>  getDetailsFournisseur(materiel_id) {</div><div>    this.router.navigate(['/fournisseur-details/' , materiel_id]);</div><div>  }<br>Redirection à l'aide d'un router navigate</div><div><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-24 14:34:55 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1236499754</guid>
      </item>
      <item>
         <title>Semaine 7 : Jeudi 25 Février</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1239821219</link>
         <description><![CDATA[<div>Réglage du soucis de l'onglet Prescription ainsi que de l'animation de déconnexion qui affichait la sidebar en bleu alors que l'utilisateur est déconnecté <br><br>Dans home.components.ts, suppresion de :<br>        this.refreshComponent.sendCustomEvent('login'); // Pour afficher le nom d'utilisateur de la navbar</div><div>        this.currentUserData = JSON.parse(sessionStorage.getItem('currentUser'));</div><div>        this.authenticationService.changeLoginStatus(true);</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/c2e18d3222311bddb3c5b6b67b40bccd/Bug_Sidebar_et_Prescription.7z" />
         <pubDate>2021-02-25 07:46:12 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1239821219</guid>
      </item>
      <item>
         <title>Resolution bug background duplication</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1239955452</link>
         <description><![CDATA[<div>Ce bug provoquait une duplication du fond de la sidebar<br><br>resolution : background-size: cover;"</div>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/f05453b47e0f8d9d6aa59632735c06fb/Background_image_duplication.7z" />
         <pubDate>2021-02-25 08:26:27 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1239955452</guid>
      </item>
      <item>
         <title>Resolution form inutilisable quand un dialog est ouvert</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1240069624</link>
         <description><![CDATA[<div>A l'aide de "autoFocus: false", quand un dialog est ouvert, le fond est desactivé</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-25 09:02:42 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1240069624</guid>
      </item>
      <item>
         <title>Dossier contenant frontend / backend de mon programme</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1240143659</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/946623864/e7c0f03aadca9197d9d6b28e1aca568b/Dossier.7z" />
         <pubDate>2021-02-25 09:25:33 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1240143659</guid>
      </item>
      <item>
         <title>Semaine 7 : Vendredi 26 Février</title>
         <author>hamlaadlan</author>
         <link>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1244254653</link>
         <description><![CDATA[<div>-Attestation de stage <br>-Mise en place de "TortoiseSVN" pour récupérer mon travail<br><br>La recherche est terminé<br>Correction de bug...<br><br>Il ne reste qu'a modifier le input dans fournisseur pour la semaine prochaine et réaliser le rapport à l'aide de paddlet, de mon travail ainsi que des fichiers</div>]]></description>
         <enclosure url="" />
         <pubDate>2021-02-26 07:05:15 UTC</pubDate>
         <guid>https://padlet.com/hamlaadlan/j5r919xw0xq55pxt/wish/1244254653</guid>
      </item>
   </channel>
</rss>
