From 9d013929b971f21f2b86b104ede0099c4b31ffa8 Mon Sep 17 00:00:00 2001 From: Thomah <5090230+Thomah@users.noreply.github.com> Date: Mon, 30 Oct 2023 20:44:53 +0100 Subject: [PATCH] fix: display of rules, publishing ideas from scratch, resolve project refresh on first login and complete documentation --- package-lock.json | 4 +- package.json | 2 +- .../authentication/authentication.service.ts | 2 +- src/app/about/about.component.html | 12 +- .../getting-started.component.html | 82 +++++++------ .../edit/edit-organization.component.html | 2 +- .../projects/edit/edit-project.component.html | 37 +++++- .../projects/edit/edit-project.component.ts | 28 ++++- .../projects/view/view-project.component.html | 2 +- .../projects/view/view-project.component.ts | 2 +- src/app/login/login.component.ts | 78 ++++++++++--- src/locale/messages.xlf | 108 ++++++++++-------- 12 files changed, 241 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index eca5298c..d7907e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "les-projets-cagnottes", - "version": "0.16.1", + "version": "0.16.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "les-projets-cagnottes", - "version": "0.16.1", + "version": "0.16.2", "dependencies": { "@angular/animations": "^16.2.7", "@angular/cdk": "^16.2.6", diff --git a/package.json b/package.json index b4ba0b7f..a9c3db35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "les-projets-cagnottes", - "version": "0.16.1", + "version": "0.16.2", "scripts": { "ng": "ng", "start": "ng serve", diff --git a/src/app/_services/authentication/authentication.service.ts b/src/app/_services/authentication/authentication.service.ts index 805a48b7..42150c25 100644 --- a/src/app/_services/authentication/authentication.service.ts +++ b/src/app/_services/authentication/authentication.service.ts @@ -20,7 +20,7 @@ export class AuthenticationService { public currentOrganization: Observable; constructor( - private http: HttpClient, + private http: HttpClient, private router: Router, private configService: ConfigService) { const userInLocalStorage = localStorage.getItem('currentUser'); diff --git a/src/app/about/about.component.html b/src/app/about/about.component.html index 3f4f47c7..a2149278 100644 --- a/src/app/about/about.component.html +++ b/src/app/about/about.component.html @@ -1,5 +1,5 @@
-
+

About

@@ -8,12 +8,12 @@

About

1. Crédits

1.1. Création du concept

-
+ -
+

En 2015, Valeuriad créé le concept des projets cagnottes comme suit :

Sur une année, Valeuriad attribue à ses collaborateurs une cagnotte de 150€ par salarié, dans le but de favoriser la cohésion d'équipe et que chaque collaborateur soit acteur au sein de la société.

@@ -44,7 +44,7 @@

2. Bibliothèques

-
+
Spring Boot
@@ -136,7 +136,7 @@

3. Remerciements spéciaux

-
+

Summary

diff --git a/src/app/app/documentation/getting-started/getting-started.component.html b/src/app/app/documentation/getting-started/getting-started.component.html index f45dc6cd..3d57bacd 100644 --- a/src/app/app/documentation/getting-started/getting-started.component.html +++ b/src/app/app/documentation/getting-started/getting-started.component.html @@ -1,20 +1,19 @@
-
+

Documentation : Guide pratique

-

1. Gérer un projet

-

1.1. Créer un projet

+

1. Gérer ses idées et projets

+

1.1. Créer une idée ou un projet

- N’importe qui peut proposer un projet à l'organisation. Pour cela, rendez-vous une fois identifié - sur Soumettre mon projet et remplissez les champs - requis. A noter qu'il faut au moins 3 personnes dans l'équipe projet (soit 2 en plus du porteur du - projet). + N'importe qui peut proposer un projet à l'organisation. Pour cela, rendez-vous une fois identifié + sur J'ai une idée et remplissez les champs + requis.

- Dans l'espace "Présentation Détaillée", veillez à renseigner un maximum d’informations pour + Dans l'espace Présentation Détaillée, veillez à renseigner un maximum d'informations pour convaincre la communauté, notamment :

    @@ -26,27 +25,34 @@

    1.1. Créer un projet

    Cet espace est le vôtre ! N'hésitez pas à changer la mise en forme comme bon vous semble.

    +

    Vous aurez la possibilité de créer un Brouillon ou de publier en tant qu'idée.

    - Une fois créé, le projet est à l'état Brouillon. Tant qu'il est dans cet état, le projet - n'apparaît pas dans la liste des projets en cours mais est accessible si vous communiquez le lien. - Une fois que vous êtes prêts, pensez à Publier le projet. + A l'état Brouillon, un projet n'apparaît pas dans la liste des projets en cours mais est + accessible si vous communiquez le lien. Une fois que vous êtes prêts, pensez à Publier en + tant qu'Idée ou Projet.

    +

    A l'état Idée, les membres de l'organisation peuvent accorder des votes positifs ou + négatifs. + Cela permet d'afficher un score, révélateur de l'engouement des participants. Si le créateur de + l'idée l'a permis, n'importe qui peut prendre la main sur une idée et lancer son projet à partir de + là.

    1.2. Créer une campagne de financement

    - Une fois que vous avez identifié un besoin de financement, vous pouvez lancer une campagne pour - votre projet. Pour cela, rendez-vous sur la page du projet et cliquez sur le en haut à droite de la section "Financement". A noter que : + Une fois que vous avez réuni au moins 3 personnes dans l'équipe et que vous avez identifié un besoin + de financement, vous pouvez lancer une campagne pour votre projet. Pour cela, rendez-vous sur la + page du projet et cliquez sur le en haut à droite de la section + "Financement". A noter que :

    • - Le champ "Date limite de financement" défini combien de temps vous vous donner pour réunir votre - équipe et votre - budget. Passé cette date, 2 possibilités : + La Date limite de financement défini combien de temps vous vous donner pour réunir votre + équipe et votre budget. Passé cette date, 2 possibilités :
        -
      • Soit vous avez collecté suffisamment d'argent sur la campagne et le nombre d'équipiers - est supérieur à 3 - dans ce cas : la campagne est validée
      • -
      • Soit il manque des membres ou du financement auquel cas la campagne est abandonnée
      • +
      • Vous avez collecté suffisamment d'argent : la + campagne est validée
      • +
      • Il manque du financement : la campagne est + abandonnée et les contributeurs sont + remboursés
    • Une fois la campagne lancée, le projet passe automatiquement à l'état En cours et sera @@ -58,12 +64,18 @@

      1.3. Publier des actualités

      Pour ce faire, rendez-vous sur la page de visualisation d'un projet et cliquez sur le en haut à droite de la section "Actualités". Il suffira alors de saisir le contenu de l'article et un titre.

      +

      1.4. Pause ou clôture

      +

      Si pour quelque raison que ce soit, le projet est à l'arrêt, vous pouvez Mettre en pause ou + Clôturer le projet à partir de sa page dédiée. Vous n'êtes pas obligé d'en expliquer les + raisons précises mais pensez à Publier une actualité pour informer les personnes qui vous suivent. +

      2. Contribuer à un projet

      +

      2.1. Les cagnottes

      - Chaque membre d'une organisation dispose d’une cagnotte dont le montant s’affiche sur son profil. - Pour y accéder, cliquez sur ce lien ou sur votre nom en haut à - gauche. Il est possible de contribuer - de 3 façons à un projet : + Chaque membre d'une organisation dispose d'une cagnotte dont le montant s'affiche sur son profil. + Pour y accéder, rendez-vous votre profil ou sur votre nom + en haut à + gauche. Il est possible de contribuer de 3 façons à un projet :

      • en offrant tout ou partie de sa cagnotte
      • @@ -74,29 +86,30 @@

        2.1. Donner tout ou partie de sa cagnotte

        1. Dans Découvrir les projets, cliquez sur le projet que vous souhaitez soutenir
        2. -
        3. Cliquez sur le bouton "Contribuer financièrement" en face d'une campagne dans la section +
        4. Cliquez sur le bouton Contribuer financièrement en face d'une campagne dans la section "Financement"
        5. Dans le formulaire qui apparaît, vous pouvez choisir le montant que vous souhaitez donner en remplissant le champ "Montant"
        6. Valider en cliquant sur "Envoyer"
        7. -
        8. Vous pouvez consulter votre contribution et éventuellement la supprimer en vous rendant sur votre profil.
        9. +
        10. Vous pouvez consulter votre contribution et éventuellement la supprimer en vous rendant sur + votre profil +

        2.2 Donner du temps au projet

        1. Dans Découvrir les projets, cliquez sur le projet que - vous souhaitez soutenir
        2. -
        3. Cliquez sur le bouton "Rejoindre l'équipe"
        4. -
        5. Votre inscription apparaît dans la liste des équipiers sur la page du projet ainsi que sur votre profil.
        6. + vous souhaitez rejoindre +
        7. Cliquez sur le bouton Rejoindre l'équipe
        8. +
        9. Votre inscription apparaît dans la liste des équipiers sur la page du projet ainsi que sur votre profil

        - Vous pouvez vous retirer de l’équipe à tout moment en cliquant sur "Quitter l'équipe". + Vous pouvez vous retirer de l'équipe à tout moment en cliquant sur Quitter l'équipe.

-
+

Summary

@@ -110,6 +123,7 @@

Summary

  • Créer une campagne de financement
  • Publier des actualités
  • +
  • Pause ou clôture
  • diff --git a/src/app/app/organizations/edit/edit-organization.component.html b/src/app/app/organizations/edit/edit-organization.component.html index 467a0cda..c9cd1bc9 100644 --- a/src/app/app/organizations/edit/edit-organization.component.html +++ b/src/app/app/organizations/edit/edit-organization.component.html @@ -347,7 +347,7 @@
    - +
  • diff --git a/src/app/app/projects/edit/edit-project.component.html b/src/app/app/projects/edit/edit-project.component.html index 21c3bac2..0af43d4d 100644 --- a/src/app/app/projects/edit/edit-project.component.html +++ b/src/app/app/projects/edit/edit-project.component.html @@ -14,7 +14,6 @@

    Detailed Presentation

    - \ No newline at end of file + + + + + + + diff --git a/src/app/app/projects/edit/edit-project.component.ts b/src/app/app/projects/edit/edit-project.component.ts index 6f879b2e..e77d7e52 100644 --- a/src/app/app/projects/edit/edit-project.component.ts +++ b/src/app/app/projects/edit/edit-project.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, TemplateRef } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { v4 as uuidv4 } from 'uuid'; @@ -9,6 +9,7 @@ import { Media } from 'src/app/_models/media/media'; import { AuthenticationService, FileService, ProjectService } from 'src/app/_services'; import 'quill-emoji/dist/quill-emoji.js' +import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; @Component({ selector: 'app-edit-project', @@ -34,9 +35,17 @@ export class EditProjectComponent implements OnInit { // Long Description editor config editor: any; + + // Publish Idea Modal + publishIdeaModal = new BsModalRef(); + publishIdeaForm: UntypedFormGroup = this.formBuilder.group({ + ideaHasAnonymousCreator: [false], + ideaHasLeaderCreator: [false] + }); constructor( private route: ActivatedRoute, + private modalService: BsModalService, private router: Router, private formBuilder: UntypedFormBuilder, private authenticationService: AuthenticationService, @@ -113,10 +122,17 @@ export class EditProjectComponent implements OnInit { submittedProject.longDescription = this.form.controls['longDescription'].value; submittedProject.peopleRequired = this.form.controls['peopleRequired'].value; submittedProject.workspace = this.project.workspace; - submittedProject.ideaHasAnonymousCreator = this.project.ideaHasAnonymousCreator; - submittedProject.ideaHasLeaderCreator = this.project.ideaHasLeaderCreator; submittedProject.organization.id = this.authenticationService.currentOrganizationValue.id; + // In case of publishing as an IDEA + if(status === this.projectStatus.IDEA) { + submittedProject.ideaHasAnonymousCreator = this.publishIdeaForm.controls['ideaHasAnonymousCreator'].value; + submittedProject.ideaHasLeaderCreator = this.publishIdeaForm.controls['ideaHasLeaderCreator'].value; + } else { + submittedProject.ideaHasAnonymousCreator = this.project.ideaHasAnonymousCreator; + submittedProject.ideaHasLeaderCreator = this.project.ideaHasLeaderCreator; + } + if(status !== undefined) { submittedProject.status = status; } else { @@ -131,6 +147,7 @@ export class EditProjectComponent implements OnInit { .subscribe({ next: (response) => { this.submitting = false; + this.publishIdeaModal.hide(); this.router.navigate(['/projects/' + response.id]); }, complete: () => { }, @@ -145,6 +162,7 @@ export class EditProjectComponent implements OnInit { .subscribe({ next: (response) => { this.submitting = false; + this.publishIdeaModal.hide(); this.router.navigate(['/projects/' + response.id]); }, complete: () => { }, @@ -168,4 +186,8 @@ export class EditProjectComponent implements OnInit { } }); } + + openPublishIdeaModal(template: TemplateRef) { + this.publishIdeaModal = this.modalService.show(template); + } } diff --git a/src/app/app/projects/view/view-project.component.html b/src/app/app/projects/view/view-project.component.html index 5c666510..cc7d5151 100644 --- a/src/app/app/projects/view/view-project.component.html +++ b/src/app/app/projects/view/view-project.component.html @@ -283,7 +283,7 @@

    Team

    diff --git a/src/app/app/projects/view/view-project.component.ts b/src/app/app/projects/view/view-project.component.ts index d921eb27..9fb63b2d 100644 --- a/src/app/app/projects/view/view-project.component.ts +++ b/src/app/app/projects/view/view-project.component.ts @@ -41,7 +41,7 @@ export class ViewProjectComponent implements OnInit { campaignsBudgets = new Map(); // Publish Idea Modal - publishIdeaModalRef = new BsModalRef(); + publishIdeaModal = new BsModalRef(); publishIdeaForm: UntypedFormGroup = this.formBuilder.group({ ideaHasAnonymousCreator: [false], ideaHasLeaderCreator: [false] diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index de533ba6..c2f6a4dd 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -52,22 +52,58 @@ export class LoginComponent implements OnInit { && !this.router.url.startsWith('/login/ms')) { this.redirectUrlMSOAuth = location.href.replace(/\/login.*/, "/login/ms"); } - if(this.router.url.startsWith('/login/slack')) { + if (this.router.url.startsWith('/login/slack')) { this.redirectUrlSlackOAuth = encodeURIComponent(location.href.replace(/\?code.*/, "").replace(/&code.*/, "")); this.code = this.route.snapshot.queryParams['code']; this.loading = true; this.authenticationService.slack(this.code, this.redirectUrlSlackOAuth) - .subscribe(() => { - this.router.navigate([this.returnUrl]); + .subscribe({ + next: () => { + this.authenticationService.refresh() + .subscribe({ + next: () => { + this.router.navigate([this.returnUrl]); + this.loading = false; + }, + complete: () => { }, + error: error => { + console.error(error); + this.loading = false; + } + }); + }, + complete: () => { }, + error: error => { + console.error(error); + this.loading = false; + } }); } - if(this.router.url.startsWith('/login/ms')) { + if (this.router.url.startsWith('/login/ms')) { this.redirectUrlMSOAuth = encodeURIComponent(location.href.replace(/\?code.*/, "").replace(/&code.*/, "")); this.code = this.route.snapshot.queryParams['code']; this.loading = true; this.authenticationService.microsoft(this.code, this.redirectUrlMSOAuth, this.configService.get('microsoftTenantId')) - .subscribe(() => { - this.router.navigate([this.returnUrl]); + .subscribe({ + next: () => { + this.authenticationService.refresh() + .subscribe({ + next: () => { + this.router.navigate([this.returnUrl]); + this.loading = false; + }, + complete: () => { }, + error: error => { + console.error(error); + this.loading = false; + } + }); + }, + complete: () => { }, + error: error => { + console.error(error); + this.loading = false; + } }); } this.slackClientId = this.configService.get('slackClientId'); @@ -92,22 +128,26 @@ export class LoginComponent implements OnInit { } this.loading = true; this.authenticationService.login(this.loginForm.controls['email'].value, this.loginForm.controls['password'].value) - .subscribe( - () => { + .subscribe({ + next: () => { this.authenticationService.refresh() - .subscribe( - () => { - this.router.navigate([this.returnUrl]); - this.loading = false; - }, - error => { - console.error(error); - this.loading = false; - }) + .subscribe({ + next: () => { + this.router.navigate([this.returnUrl]); + this.loading = false; + }, + complete: () => { }, + error: error => { + console.error(error); + this.loading = false; + } + }); }, - error => { + complete: () => { }, + error: error => { console.error(error); this.loading = false; - }); + } + }); } } diff --git a/src/locale/messages.xlf b/src/locale/messages.xlf index ee5df897..ae2c8044 100644 --- a/src/locale/messages.xlf +++ b/src/locale/messages.xlf @@ -21,7 +21,7 @@ src/app/app/documentation/getting-started/getting-started.component.html - 102 + 115 @@ -266,7 +266,7 @@ src/app/app/projects/edit/edit-project.component.html - 51 + 50 src/app/app/projects/view/view-project.component.html @@ -314,11 +314,11 @@ src/app/app/projects/edit/edit-project.component.html - 24 + 23 src/app/app/projects/edit/edit-project.component.html - 25 + 24 @@ -622,7 +622,7 @@ src/app/app/projects/edit/edit-project.component.html - 20 + 19 src/app/app/projects/view/view-project.component.html @@ -841,11 +841,11 @@ src/app/app/projects/edit/edit-project.component.html - 30 + 29 src/app/app/projects/edit/edit-project.component.html - 32 + 31 @@ -1068,7 +1068,7 @@ People needed (in addition of the project leader) src/app/app/projects/edit/edit-project.component.html - 36,37 + 35,36 src/app/app/projects/view/view-project.component.html @@ -1079,14 +1079,66 @@ Save as draft src/app/app/projects/edit/edit-project.component.html - 45 + 44 Publish as Idea src/app/app/projects/edit/edit-project.component.html - 48 + 47 + + + + Publish the idea + + src/app/app/projects/edit/edit-project.component.html + 61 + + + src/app/app/projects/view/view-project.component.html + 285 + + + + Publish this idea anonymously + + src/app/app/projects/edit/edit-project.component.html + 73 + + + src/app/app/projects/view/view-project.component.html + 297 + + + + I want to lead the realization of the idea + + src/app/app/projects/edit/edit-project.component.html + 80,81 + + + src/app/app/projects/view/view-project.component.html + 304,306 + + + + Submit + + src/app/app/projects/edit/edit-project.component.html + 87 + + + src/app/app/projects/view/view-project.component.html + 312 + + + src/app/app/projects/view/view-project.component.html + 334 + + + src/app/app/projects/view/view-project.component.html + 405 @@ -1426,42 +1478,6 @@ 257 - - Publish the idea - - src/app/app/projects/view/view-project.component.html - 285 - - - - Publish this idea anonymously - - src/app/app/projects/view/view-project.component.html - 297 - - - - I want to lead the realization of the idea - - src/app/app/projects/view/view-project.component.html - 304,306 - - - - Submit - - src/app/app/projects/view/view-project.component.html - 312 - - - src/app/app/projects/view/view-project.component.html - 334 - - - src/app/app/projects/view/view-project.component.html - 405 - - Campaign Goals