feat: review model to retrieve all the questions with a single query
- update initial data - add description field to the axepull/1/head
parent
075a508bb5
commit
3c4928ae61
|
@ -31,6 +31,10 @@
|
||||||
<groupId>org.springframework.security</groupId>
|
<groupId>org.springframework.security</groupId>
|
||||||
<artifactId>spring-security-data</artifactId>
|
<artifactId>spring-security-data</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.hateoas</groupId>
|
||||||
|
<artifactId>spring-hateoas</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
|
|
@ -9,9 +9,11 @@ import org.hibernate.Hibernate;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@ -34,9 +36,16 @@ public class Axe {
|
||||||
@Size(max = 100)
|
@Size(max = 100)
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
@Size(max = 500)
|
||||||
|
private String description;
|
||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private String color;
|
private String color;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "axe")
|
||||||
|
@ToString.Exclude
|
||||||
|
private Set<Question> questions;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|
|
@ -7,12 +7,12 @@ import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import org.hibernate.Hibernate;
|
import org.hibernate.Hibernate;
|
||||||
import org.springframework.security.authentication.AuthenticationManager;
|
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
import javax.persistence.PrePersist;
|
import javax.persistence.PrePersist;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
@ -31,6 +31,8 @@ public class Question {
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "axe_id")
|
||||||
|
@JsonIgnore
|
||||||
private Axe axe;
|
private Axe axe;
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
|
|
|
@ -19,6 +19,7 @@ import javax.persistence.Id;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
import javax.persistence.PrePersist;
|
import javax.persistence.PrePersist;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -44,6 +45,10 @@ public class Quiz {
|
||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
private Set<Response> responses;
|
private Set<Response> responses;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "quiz")
|
||||||
|
@ToString.Exclude
|
||||||
|
private List<QuizScore> scores;
|
||||||
|
|
||||||
@PrePersist
|
@PrePersist
|
||||||
public void prePersist() {
|
public void prePersist() {
|
||||||
var userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
var userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||||
|
|
|
@ -9,6 +9,8 @@ import org.hibernate.annotations.Immutable;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@ -24,6 +26,11 @@ public class QuizScore {
|
||||||
|
|
||||||
private Float scoreAvg;
|
private Float scoreAvg;
|
||||||
private Integer axeIdentifier;
|
private Integer axeIdentifier;
|
||||||
|
// @JsonIgnore
|
||||||
|
// private Long quizId;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "quiz_id")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private Long quizId;
|
private Quiz quiz;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package fr.itsonus.bousoleplussbackend.payload.response;
|
||||||
|
|
||||||
|
import fr.itsonus.bousoleplussbackend.models.Question;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.hateoas.RepresentationModel;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AxeWithQuestion extends RepresentationModel<AxeWithQuestion> {
|
||||||
|
|
||||||
|
private Integer identifier;
|
||||||
|
private String shortTitle;
|
||||||
|
private String title;
|
||||||
|
private String color;
|
||||||
|
private Iterable<Question> questions;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package fr.itsonus.bousoleplussbackend.projections;
|
||||||
|
|
||||||
|
import fr.itsonus.bousoleplussbackend.models.Axe;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.rest.core.config.Projection;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Projection(name = "axeWithQuestion", types = {Axe.class})
|
||||||
|
public interface AxeWithQuestion {
|
||||||
|
|
||||||
|
Integer getIdentifier();
|
||||||
|
|
||||||
|
String getShortTitle();
|
||||||
|
|
||||||
|
String getTitle();
|
||||||
|
|
||||||
|
String getDescription();
|
||||||
|
|
||||||
|
String getColor();
|
||||||
|
|
||||||
|
@Value("#{target.getQuestions()}")
|
||||||
|
List<QuestionProj> getQuestions();
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package fr.itsonus.bousoleplussbackend.projections;
|
||||||
|
|
||||||
|
import fr.itsonus.bousoleplussbackend.models.Question;
|
||||||
|
import org.springframework.data.rest.core.config.Projection;
|
||||||
|
|
||||||
|
@Projection(types = {Question.class})
|
||||||
|
public interface QuestionProj {
|
||||||
|
Long getId();
|
||||||
|
String getLabel();
|
||||||
|
String getDescription();
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package fr.itsonus.bousoleplussbackend.projections;
|
||||||
|
|
||||||
|
import fr.itsonus.bousoleplussbackend.models.Quiz;
|
||||||
|
import fr.itsonus.bousoleplussbackend.models.QuizScore;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.rest.core.config.Projection;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Projection(name = "quizWithScore", types = {Quiz.class})
|
||||||
|
public interface QuizWithScore {
|
||||||
|
|
||||||
|
Long getId();
|
||||||
|
|
||||||
|
Date getCreatedDate();
|
||||||
|
|
||||||
|
@Value("#{target.getScores()}")
|
||||||
|
List<QuizScore> getScores();
|
||||||
|
}
|
|
@ -1,13 +1,16 @@
|
||||||
package fr.itsonus.bousoleplussbackend.repositories;
|
package fr.itsonus.bousoleplussbackend.repositories;
|
||||||
|
|
||||||
import fr.itsonus.bousoleplussbackend.models.Axe;
|
import fr.itsonus.bousoleplussbackend.models.Axe;
|
||||||
|
import fr.itsonus.bousoleplussbackend.projections.AxeWithQuestion;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
||||||
|
import org.springframework.data.rest.core.annotation.RestResource;
|
||||||
|
|
||||||
import java.util.Optional;
|
@RepositoryRestResource(excerptProjection = AxeWithQuestion.class)
|
||||||
|
|
||||||
@RepositoryRestResource
|
|
||||||
public interface AxeRepository extends CrudRepository<Axe, Long> {
|
public interface AxeRepository extends CrudRepository<Axe, Long> {
|
||||||
|
|
||||||
Optional<Axe> findByIdentifier(Integer identifier);
|
@RestResource(path = "me", rel = "me")
|
||||||
|
@Query("SELECT DISTINCT a FROM Axe a INNER JOIN a.questions as q WHERE q.userId = ?#{principal.id}")
|
||||||
|
Iterable<Axe> findAllWithQuestionsOfCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,18 @@
|
||||||
package fr.itsonus.bousoleplussbackend.repositories;
|
package fr.itsonus.bousoleplussbackend.repositories;
|
||||||
|
|
||||||
import fr.itsonus.bousoleplussbackend.models.Quiz;
|
import fr.itsonus.bousoleplussbackend.models.Quiz;
|
||||||
import fr.itsonus.bousoleplussbackend.models.Response;
|
import fr.itsonus.bousoleplussbackend.projections.QuizWithScore;
|
||||||
import fr.itsonus.bousoleplussbackend.projections.QuizWithResponses;
|
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.PagingAndSortingRepository;
|
import org.springframework.data.repository.PagingAndSortingRepository;
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
|
||||||
import org.springframework.data.rest.core.annotation.RestResource;
|
import org.springframework.data.rest.core.annotation.RestResource;
|
||||||
|
|
||||||
import java.util.Set;
|
@RepositoryRestResource(excerptProjection = QuizWithScore.class)
|
||||||
|
|
||||||
@RepositoryRestResource(excerptProjection = QuizWithResponses.class)
|
|
||||||
public interface QuizRepository extends PagingAndSortingRepository<Quiz, Long> {
|
public interface QuizRepository extends PagingAndSortingRepository<Quiz, Long> {
|
||||||
|
|
||||||
@RestResource(path = "me", rel = "me")
|
@RestResource(path = "me", rel = "me")
|
||||||
@Query("SELECT q FROM Quiz q WHERE q.userId = ?#{principal.id}")
|
@Query("SELECT q FROM Quiz q WHERE q.userId = ?#{principal.id}")
|
||||||
Page<Quiz> findAllOfCurrentUser(final Pageable pageable);
|
Page<Quiz> findAllWithScoresOfCurrentUser(final Pageable pageable);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ CREATE TABLE axe
|
||||||
identifier INTEGER NOT NULL,
|
identifier INTEGER NOT NULL,
|
||||||
short_title VARCHAR(100) NOT NULL,
|
short_title VARCHAR(100) NOT NULL,
|
||||||
title VARCHAR(200) NOT NULL,
|
title VARCHAR(200) NOT NULL,
|
||||||
|
description VARCHAR(500) NULL,
|
||||||
color VARCHAR(7) NOT NULL,
|
color VARCHAR(7) NOT NULL,
|
||||||
CONSTRAINT pk_axe PRIMARY KEY (id),
|
CONSTRAINT pk_axe PRIMARY KEY (id),
|
||||||
CONSTRAINT uc_axe_identifier UNIQUE (identifier, title, short_title)
|
CONSTRAINT uc_axe_identifier UNIQUE (identifier, title, short_title)
|
||||||
|
@ -35,7 +36,7 @@ CREATE TABLE question
|
||||||
axe_id INTEGER NOT NULL,
|
axe_id INTEGER NOT NULL,
|
||||||
user_id INTEGER NOT NULL,
|
user_id INTEGER NOT NULL,
|
||||||
label VARCHAR(200) NOT NULL,
|
label VARCHAR(200) NOT NULL,
|
||||||
description VARCHAR(500),
|
description VARCHAR(500) NULL,
|
||||||
CONSTRAINT question_quiz PRIMARY KEY (id)
|
CONSTRAINT question_quiz PRIMARY KEY (id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -56,10 +57,10 @@ CREATE TABLE response
|
||||||
comment VARCHAR(500),
|
comment VARCHAR(500),
|
||||||
CONSTRAINT pk_response PRIMARY KEY (id)
|
CONSTRAINT pk_response PRIMARY KEY (id)
|
||||||
);
|
);
|
||||||
-- FIXME id may be wrong
|
|
||||||
CREATE VIEW quiz_score AS
|
CREATE VIEW quiz_score AS
|
||||||
SELECT
|
SELECT
|
||||||
r.quiz_id + a.identifier AS id
|
DENSE_RANK() OVER(ORDER BY a.identifier, r.quiz_id) AS id
|
||||||
,a.identifier AS axe_identifier
|
,a.identifier AS axe_identifier
|
||||||
,r.quiz_id as quiz_id
|
,r.quiz_id as quiz_id
|
||||||
,AVG(r.score) as score_avg
|
,AVG(r.score) as score_avg
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
INSERT INTO axe (id, identifier, short_title, title, color)
|
INSERT INTO axe (id, identifier, short_title, title, description, color)
|
||||||
VALUES
|
VALUES
|
||||||
(nextval('hibernate_sequence'), '1', 'Pouvoir d’agir', 'AGIR en (re)donnant du pouvoir d’agir aux territoires et à leurs habitants', '#CA8AE8'),
|
(nextval('hibernate_sequence'), '1', 'Pouvoir d’agir', 'AGIR en (re)donnant du pouvoir d’agir aux territoires et à leurs habitants', null, '#CA8AE8'),
|
||||||
(nextval('hibernate_sequence'), '2', 'Multi-secteur', 'AGIR sur tous les secteurs de l’économie et l’ensemble des chaînes de valeur', '#22B9A6'),
|
(nextval('hibernate_sequence'), '2', 'Multi-secteur', 'AGIR sur tous les secteurs de l’économie et l’ensemble des chaînes de valeur*', '* ensemble des activités concourant à la création et la vente d’un produit ou d’un service : de l’approvisionnement à la vente en passant par la production même, la distribution, les services associés, ...', '#22B9A6'),
|
||||||
(nextval('hibernate_sequence'), '3', 'Local global', 'AGIR localement en pensant globalement', '#E7E145'),
|
(nextval('hibernate_sequence'), '3', 'Local global', 'AGIR localement en pensant globalement', null, '#E7E145'),
|
||||||
(nextval('hibernate_sequence'), '4', 'Utilité (sociale et écologique)', 'AGIR de manière utile et sobre socialement et écologiquement', '#F39345'),
|
(nextval('hibernate_sequence'), '4', 'Utilité (sociale et écologique)', 'AGIR de manière utile et sobre socialement et écologiquement', null, '#F39345'),
|
||||||
(nextval('hibernate_sequence'), '5', 'Communs', 'AGIR pour préserver et se réapproprier les communs', '#9FCC8B'),
|
(nextval('hibernate_sequence'), '5', 'Communs', 'AGIR pour préserver et se réapproprier les communs*', '* ressources partagées, gérées et maintenues collectivement par une communauté ; celle-ci établit des règles dans le but de préserver et pérenniser ces ressources tout en fournissant aux membres de cette communauté la possibilité et le droit de les utiliser', '#9FCC8B'),
|
||||||
(nextval('hibernate_sequence'), '6', 'Démocratie', 'AGIR démocratiquement', '#FDA6C5'),
|
(nextval('hibernate_sequence'), '6', 'Démocratie', 'AGIR démocratiquement', null, '#FDA6C5'),
|
||||||
(nextval('hibernate_sequence'), '7', 'Coopération', 'AGIR en encourageant la coopération à tous les niveaux', '#7E91F1'),
|
(nextval('hibernate_sequence'), '7', 'Coopération', 'AGIR en encourageant la coopération à tous les niveaux', null, '#7E91F1'),
|
||||||
(nextval('hibernate_sequence'), '8', 'Finances', 'AGIR pour maîtriser les outils de production', '#F37665'),
|
(nextval('hibernate_sequence'), '8', 'Finances', 'AGIR pour maîtriser les outils de production', null, '#F37665'),
|
||||||
(nextval('hibernate_sequence'), '9', 'Moyens de production', 'AGIR sur les instruments financiers', '#E9D280'),
|
(nextval('hibernate_sequence'), '9', 'Moyens de production', 'AGIR sur les instruments financiers', null, '#E9D280'),
|
||||||
(nextval('hibernate_sequence'), '10','Travail', 'AGIR pour redonner au travail sa valeur véritable', '#7BD1F5');
|
(nextval('hibernate_sequence'), '10','Travail', 'AGIR pour redonner au travail sa valeur véritable', null, '#7BD1F5');
|
||||||
|
|
||||||
INSERT INTO users (id, username, password)
|
INSERT INTO users (id, username, password)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -17,64 +17,73 @@ VALUES
|
||||||
|
|
||||||
INSERT INTO question (id, axe_id, user_id, label, description)
|
INSERT INTO question (id, axe_id, user_id, label, description)
|
||||||
VALUES
|
VALUES
|
||||||
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il la montée en compétence des parties prenantes?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet permet-il la participation active de plusieurs parties prenantes ?', null),
|
||||||
(nextval('hibernate_sequence'), 1, 11, 'Le projet permet-il la participation active des parties prenantes?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il la participation active des (futurs) usagers ?', null),
|
||||||
(nextval('hibernate_sequence'), 1, 11, 'Le projet est il accessible à différentes parties prenantes?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet est il accessible financièrement au plus grand nombre ?', null),
|
||||||
(nextval('hibernate_sequence'), 1, 11, 'Le projet a-t-il une animation des liens sociaux?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 1, 11, 'L’animation du projet est-elle organisée et continue ?', null),
|
||||||
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il l''inclusion? la mixité sociale? les liens sociaux?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il la mixité sociale et/ou les liens sociaux ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet prend -il en compte les enjeux sociaux et environnementaux locaux ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il la montée en compétences des parties prenantes ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 1, 11, 'Le projet favorise-t-il l’inclusion de personnes en situation de vulnérabilité ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 2, 11, 'Les ressources locales sont-elles prises en compte?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 2, 11, 'Les approvisionnements via des ressources locales sont-ils à l’œuvre ou envisagés ?', null),
|
||||||
(nextval('hibernate_sequence'), 2, 11, 'Plusieurs filières ou thématiques sont-elles abordées dans le projet?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 2, 11, 'Plusieurs filières ou thématiques sont-elles abordées dans le projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 2, 11, 'Quel est le degré d''indépendance du projet vis à vis des ressources extèrieures?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 2, 11, 'Le projet est-il suffisamment émancipé de l’apport de ressources extérieures ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 2, 11, 'Une analyse systémique du projet (connaissance des différentes interactions) est-elle à l’œuvre ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 2, 11, 'Le projet est-il ouvert et propice à l’innovation ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 3 ,11, 'Êtes-vous en lien avec des écosystèmes locaux?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 3 ,11, 'Les parties prenantes du projet sont-elles en lien avec d’autres écosystèmes locaux ?', null),
|
||||||
(nextval('hibernate_sequence'), 3 ,11, 'Le projet contribue-t-il au développement économique d''autres acteurs du territoire?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 3 ,11, 'Le projet prévoit-il de s’associer officiellement (contrat, convention, charte commune, …) avec d’autres écosystèmes locaux ?', null),
|
||||||
(nextval('hibernate_sequence'), 3 ,11, 'Le projet contribue-t-il au rééquilibrage territorial?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 3 ,11, 'Le projet contribue-t-il au développement économique d’autres acteurs en dehors du territoire ?', null),
|
||||||
(nextval('hibernate_sequence'), 3 ,11, 'Les parties prenantes du projet contribuent-elles à essaimer les bonnes pratiques liées au projet?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 3 ,11, 'Le projet contribue-t-il à un rééquilibrage territorial en faveur de territoires moins favorisés ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 3 ,11, 'Les parties prenantes du projet contribuent-elles à essaimer les bonnes pratiques liées au projet ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 3 ,11, 'Des ressources extérieures utiles et complémentaires au projet ont-elles été identifiées ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 4 ,11, 'Les besoins auxquels répond le projet ont-ils été définis collectivement?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 4 ,11, 'Le projet a-t-il intégré un objectif de sobriété sur un ou plusieurs aspects ?', null),
|
||||||
(nextval('hibernate_sequence'), 4 ,11, 'Avez-vous une politique d''achat responsable?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 4 ,11, 'Les besoins auxquels répond le projet ont-ils été définis en concertation avec les parties prenantes ?', null),
|
||||||
(nextval('hibernate_sequence'), 4 ,11, 'Le projet cherche-t-il à réduire les impacts environnementaux négatifs?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 4 ,11, 'Le projet a-t-il défini une politique d’achats responsables ?', null),
|
||||||
(nextval('hibernate_sequence'), 4 ,11, 'Le projet contribue-t-il à une boucle d''économie circulaire?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 4 ,11, 'Les impacts environnementaux de la production et de la consommation liées au projet ont-ils été identifiés ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 4 ,11, 'Le projet est-il associé à une boucle d’économie circulaire ?', null),
|
||||||
|
(nextval('hibernate_sequence'), 4 ,11, 'Le projet prend-il en compte la gestion des déchets et leur transformation en ressources ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il autour du projet une(des) ressource(s) partageable(s) préexistante(s) ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il autour du projet une(des) ressource(s) partageable(s) préexistante(s) ?', null),
|
||||||
(nextval('hibernate_sequence'), 5 ,11, 'Le projet va-t-il produire une(des) ressource(s) partageable(s) ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 5 ,11, 'Le projet va-t-il produire une(des) ressource(s) partageable(s) ?', null),
|
||||||
(nextval('hibernate_sequence'), 5 ,11, 'Le projet est-il considéré lui-même comme une ressource partageable ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 5 ,11, 'Le projet est-il considéré lui-même comme une ressource partageable ?', null),
|
||||||
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il autour du projet une communauté souhaitant s''occuper de cette ressource partageable ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il autour du projet une communauté souhaitant administrer et gérer cette ressource partageable ?', null),
|
||||||
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il des règles d''accès et/ou d''usage à ces ressources ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 5 ,11, 'Existe-t-il des règles d’accès et/ou d’usage à ces ressources ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'Existe t-il des lieux et des temps d''expression et de débat ouverts autour du projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'Existe t-il des lieux et des temps d’expression et de débat ouverts autour du projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'Les phases essentielles de développement et d''évaluation du projet sont elles soumises au débat ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'Les phases essentielles de développement et d’évaluation du projet sont elles soumises au débat ?', null),
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'Tous les groupes représentatifs sont ils invités au débat: élu.e.s, producteur.ices, consommateur.ices, bénéficiaires, chargé.e.s de projet, encadrant.e.s, ....', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'Tous les groupes représentatifs sont ils invités au débat : élu.e.s, producteur.ices, consommateur.ices, bénéficiaires, chargé.e.s de projet, encadrant.e.s, ....', null),
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'Le droit à la parole est-il équitable lors des débats ? (ou les moyens mobilisés permettent-ils l''expression de chacun.e de manière équitable ?)', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'Le droit à la parole est-il équitable lors des débats ? (ou les moyens mobilisés permettent-ils l’expression de chacun.e de manière équitable ?', null),
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'La gouvernance permet-elle une prise de décision partagée avec tous les groupes de parties prenantes ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'La gouvernance permet-elle une prise de décision partagée avec tous les groupes de parties prenantes ?', null),
|
||||||
(nextval('hibernate_sequence'), 6 ,11, 'L''accès à la gouvernance par chacun.e est-il lisible et accessible ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 6 ,11, 'Les modalités de participation à la gouvernance par chacun.e sont-elles lisibles et accessibles ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'Le projet prend-il en compte les contraintes des différentes parties prenantes?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'Le projet prend-il en compte les contraintes des différentes parties prenantes ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'La prise en compte des contraintes des parties prenantes fait-elle évoluer le projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'La prise en compte des contraintes des parties prenantes fait-elle évoluer le projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'La coopération des acteurs permet-elle d''identifier les ressources matérielles et immatérielles locales mobilisables ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'La coopération des acteurs permet-elle d’identifier les ressources matérielles et immatérielles locales mobilisables ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'La coopération permet-elle de réintégrer les externalités négatives du projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'La coopération permet-elle de mieux prendre en compte les externalités négatives du projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'La coopération permet-elle le financement des externalités positives du projet de manière monétaire ou non monétaire ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'La coopération permet-elle le financement des externalités positives du projet de manière monétaire ou non monétaire ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'Le processus de coopération fait-il évoluer la façon de travailler de chacun.e ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'Le processus de coopération fait-il évoluer la façon de travailler de chacun.e ?', null),
|
||||||
(nextval('hibernate_sequence'), 7 ,11, 'Existe t-il un processus de partage et de transmission de l''information qui favorise la coopération?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 7 ,11, 'Existe t-il un processus de partage et de transmission de l’information qui favorise la coopération ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété du foncier/l''immobilier utile au projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété du foncier/l’immobilier utile au projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété des machines et des équipements utiles au projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété des machines et des équipements utiles au projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété des process de production et d''innovation ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Existe-t-il une réflexion autour de la propriété des process de production et d’innovation ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Êtes-vous libre de décider de l''emploi des outils de production nécessaires au projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Êtes-vous libre de décider de l’emploi des outils de production nécessaires au projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Êtes-vous libre de décider quel est le niveau souhaitable de productivité du projet ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Êtes-vous libre de décider quel est le niveau souhaitable de productivité du projet ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Un processus d''acquisition en propriété collective est-il à l''œuvre ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Un processus d’acquisition en propriété collective est-il à l’œuvre ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Vous sentez vous protégé contre d''éventuelles opérations de délocalisation ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Le projet permet-il de mieux de sentir protégés contre d’éventuelles opérations de délocalisation ?', null),
|
||||||
(nextval('hibernate_sequence'), 8 ,11, 'Le projet contribue-t-il à une reprise en main de l''économie locale ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 8 ,11, 'Le projet contribue-t-il à une reprise en main de l’économie locale ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il du financement solidaire et/ou participatif (épargne solidaire, crowdfunding, ...) ?','Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il du financement solidaire et/ou participatif (épargne solidaire, crowdfunding, ...) ?', null),
|
||||||
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il des financements locaux (micro-crédit, capital-risque solidaire, clubs d''investisseurs locaux, ...) ?','Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il des financements locaux (micro-crédit, capital-risque solidaire, clubs d’investisseurs locaux, ...) ?', null),
|
||||||
(nextval('hibernate_sequence'), 9 ,11, 'Le projet intègre-t-il le recours à des boucles locales d''échanges (monnaie complémentaire, troc inter-entreprise, système d''échange local, ...) ?','Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 9 ,11, 'Le projet intègre-t-il le recours à des boucles locales d’échanges (monnaie complémentaire, troc inter-entreprise, système d’échange local, ...) ?', null),
|
||||||
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il du soutien auprès de fondations ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 9 ,11, 'Le projet mobilise-t-il du soutien auprès de fondations ?', null),
|
||||||
(nextval('hibernate_sequence'), 9 ,11, 'Le projet cherche-t-il à favoriser la création d''une fondation territoriale ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 9 ,11, 'Le projet cherche-t-il à favoriser la création d’une fondation territoriale ?', null),
|
||||||
|
|
||||||
(nextval('hibernate_sequence'), 10 ,11, 'Le projet valorise-t-il les ressources immatérielles (intentions, initiatives, compétences, savoir-faire) des contributeur.ices ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 10 ,11, 'Le projet valorise-t-il les ressources immatérielles (intentions, initiatives, compétences, savoir-faire) des contributeur.ices ?', null),
|
||||||
(nextval('hibernate_sequence'), 10 ,11, 'Le projet contribue-t-il à développer les ressources immatérielles des contributeur.ices? (formation, santé, bien-être, confiance) ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 10 ,11, 'Le projet contribue-t-il à développer les ressources immatérielles des contributeur.ices? (formation, santé, bien-être, confiance) ?', null),
|
||||||
(nextval('hibernate_sequence'), 10 ,11, 'Le projet mobilise-t-il différentes formes de contribution : bénévolat, insertion, salariat, ... ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 10 ,11, 'Le projet mobilise-t-il différentes formes de contribution : bénévolat, insertion, salariat, ... ?', null),
|
||||||
(nextval('hibernate_sequence'), 10 ,11, 'Le projet mobilise-t-il différentes formes de rétribution des contributions : salariat., rétribution contributive,échanges, ...', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.'),
|
(nextval('hibernate_sequence'), 10 ,11, 'Le projet mobilise-t-il différentes formes de rétribution des contributions : salariat, rétribution contributive,échanges, ...', null),
|
||||||
(nextval('hibernate_sequence'), 10 ,11, 'La rémunération juste des parties prenantes est-elle prise en compte ?', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus.');
|
(nextval('hibernate_sequence'), 10 ,11, 'La rémunération juste des parties prenantes est-elle prise en compte ?', null);
|
||||||
|
|
|
@ -6,15 +6,19 @@
|
||||||
<span class="part-number">{{ axeNumber }}</span>
|
<span class="part-number">{{ axeNumber }}</span>
|
||||||
<span>{{ title }}</span>
|
<span>{{ title }}</span>
|
||||||
</h1>
|
</h1>
|
||||||
|
<div v-if="description" class="description">{{ description }}</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img :src="icon" width="200px" alt="" aria-hidden="true"/>
|
<img :src="icon" width="200px" alt="" aria-hidden="true"/>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<section v-for="question in questions" :key="question._links.self.href" class="question">
|
<section v-for="question in questions" :key="question._links.self.href" class="question">
|
||||||
<details>
|
<details v-if="question.description">
|
||||||
<summary> {{ question.label }}</summary>
|
<summary> {{ question.label }}</summary>
|
||||||
<p>{{ question.description }}</p>
|
<p>{{ question.description }}</p>
|
||||||
</details>
|
</details>
|
||||||
|
<div v-else class="title">
|
||||||
|
{{ question.label }}
|
||||||
|
</div>
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
<rating :color="color" :initial-value="getCurrentScore(question)" @rate="rate => onRate(rate, question)" />
|
<rating :color="color" :initial-value="getCurrentScore(question)" @rate="rate => onRate(rate, question)" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -36,6 +40,11 @@ export default class Quiz extends Vue {
|
||||||
})
|
})
|
||||||
private title!: string;
|
private title!: string;
|
||||||
|
|
||||||
|
@Prop({
|
||||||
|
required: false
|
||||||
|
})
|
||||||
|
private description!: string;
|
||||||
|
|
||||||
@Prop({
|
@Prop({
|
||||||
required: true
|
required: true
|
||||||
})
|
})
|
||||||
|
@ -132,15 +141,26 @@ $size: 31px;
|
||||||
margin: $small;
|
margin: $small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
color: $gray_3;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
.question {
|
.question {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.question details {
|
.question details,
|
||||||
|
.question .title {
|
||||||
margin-bottom: $x_small;
|
margin-bottom: $x_small;
|
||||||
}
|
}
|
||||||
.question details summary {
|
.question details summary,
|
||||||
|
.question .title {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: $title-font-size;
|
font-size: $title-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question details summary {
|
||||||
margin-bottom: $xxx_small;
|
margin-bottom: $xxx_small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ import {Component, Vue} from "vue-property-decorator";
|
||||||
import {AxiosResponse} from "axios";
|
import {AxiosResponse} from "axios";
|
||||||
import {RepositoryFactory} from "~/repositories/RepositoryFactory";
|
import {RepositoryFactory} from "~/repositories/RepositoryFactory";
|
||||||
import {RestResponse} from "~/repositories/models/rest-response.model";
|
import {RestResponse} from "~/repositories/models/rest-response.model";
|
||||||
import {Quiz, Score} from "~/repositories/models/quiz.model";
|
import {Quiz} from "~/repositories/models/quiz.model";
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export default class History extends Vue {
|
export default class History extends Vue {
|
||||||
|
@ -52,12 +52,6 @@ export default class History extends Vue {
|
||||||
await this.quizRepository.findMine().then((response: AxiosResponse<RestResponse<Quiz>>) => {
|
await this.quizRepository.findMine().then((response: AxiosResponse<RestResponse<Quiz>>) => {
|
||||||
this.quizzes = response.data._embedded.quizzes;
|
this.quizzes = response.data._embedded.quizzes;
|
||||||
});
|
});
|
||||||
for (const quiz of this.quizzes) {
|
|
||||||
await this.quizRepository.findScores(quiz.id)
|
|
||||||
.then((value: AxiosResponse<Score[]>) => {
|
|
||||||
quiz.scores = value.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.currentResult = this.quizzes.length > 0 ? this.quizzes[0] : null;
|
this.currentResult = this.quizzes.length > 0 ? this.quizzes[0] : null;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import {Quiz, ResponseWithQuestion, Score} from "~/repositories/models/quiz.mode
|
||||||
import QuizAxeDetails from "~/components/QuizAxeDetails.vue";
|
import QuizAxeDetails from "~/components/QuizAxeDetails.vue";
|
||||||
import {Axe} from "~/repositories/models/axe.model";
|
import {Axe} from "~/repositories/models/axe.model";
|
||||||
import {RestResponse} from "~/repositories/models/rest-response.model";
|
import {RestResponse} from "~/repositories/models/rest-response.model";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: {QuizAxeDetails}
|
components: {QuizAxeDetails}
|
||||||
})
|
})
|
||||||
|
@ -36,7 +37,6 @@ export default class Result extends Vue {
|
||||||
|
|
||||||
private axes: Axe[] = [];
|
private axes: Axe[] = [];
|
||||||
private quiz: Quiz | null = null;
|
private quiz: Quiz | null = null;
|
||||||
private scores: Score[] = [];
|
|
||||||
private responses: ResponseWithQuestion[] = [];
|
private responses: ResponseWithQuestion[] = [];
|
||||||
private loading = false;
|
private loading = false;
|
||||||
|
|
||||||
|
@ -50,22 +50,9 @@ export default class Result extends Vue {
|
||||||
this.quizRepository.findById(quizId)
|
this.quizRepository.findById(quizId)
|
||||||
.then((response: AxiosResponse<Quiz>) => {
|
.then((response: AxiosResponse<Quiz>) => {
|
||||||
this.quiz = response.data;
|
this.quiz = response.data;
|
||||||
return response;
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return this.quizRepository.findScores(quizId)
|
|
||||||
.then((response: AxiosResponse<Score[]>) => {
|
|
||||||
this.scores = response.data;
|
|
||||||
return response;
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return this.quizRepository.findResponses(quizId)
|
|
||||||
.then((response: AxiosResponse<RestResponse<ResponseWithQuestion>>) => {
|
|
||||||
this.responses = response.data._embedded.responses;
|
this.responses = response.data._embedded.responses;
|
||||||
return response;
|
return response;
|
||||||
})
|
})
|
||||||
})
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return this.axeRepository.findAll()
|
return this.axeRepository.findAll()
|
||||||
.then((response: AxiosResponse<RestResponse<Axe>>) => {
|
.then((response: AxiosResponse<RestResponse<Axe>>) => {
|
||||||
|
@ -82,8 +69,12 @@ export default class Result extends Vue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getScore(axe: Axe) {
|
getScore(axe: Axe): Score {
|
||||||
return this.scores.find(value => value.axeIdentifier === axe.identifier);
|
const responses = this.getResponses(axe);
|
||||||
|
return {
|
||||||
|
axeIdentifier: axe.identifier,
|
||||||
|
scoreAvg: responses.reduce((total, response) => total + response.score, 0) / responses.length
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getResponses(axe: Axe) {
|
getResponses(axe: Axe) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<quiz-part
|
<quiz-part
|
||||||
:key="currentAxe.identifier" :axe-number="currentAxe.identifier" :total-axes="axes.length"
|
:key="currentAxe.identifier" :axe-number="currentAxe.identifier" :total-axes="axes.length"
|
||||||
:title="currentAxe.title"
|
:title="currentAxe.title"
|
||||||
|
:description="currentAxe.description"
|
||||||
:color="currentAxe.color"
|
:color="currentAxe.color"
|
||||||
:icon="'balise_' + currentAxe.identifier + '.svg'"
|
:icon="'balise_' + currentAxe.identifier + '.svg'"
|
||||||
:questions="questions.get(currentAxe.identifier)"
|
:questions="questions.get(currentAxe.identifier)"
|
||||||
|
@ -43,7 +44,7 @@
|
||||||
import {AxiosResponse} from "axios";
|
import {AxiosResponse} from "axios";
|
||||||
import {Component, Vue} from "nuxt-property-decorator";
|
import {Component, Vue} from "nuxt-property-decorator";
|
||||||
import {RepositoryFactory} from "~/repositories/RepositoryFactory";
|
import {RepositoryFactory} from "~/repositories/RepositoryFactory";
|
||||||
import {Axe} from "~/repositories/models/axe.model";
|
import {AxeWithQuestions} from "~/repositories/models/axe.model";
|
||||||
import {RestResponse} from "~/repositories/models/rest-response.model";
|
import {RestResponse} from "~/repositories/models/rest-response.model";
|
||||||
import {Question} from "~/repositories/models/question.model";
|
import {Question} from "~/repositories/models/question.model";
|
||||||
import {Quiz} from "~/repositories/models/quiz.model";
|
import {Quiz} from "~/repositories/models/quiz.model";
|
||||||
|
@ -53,10 +54,9 @@ import {quizStore} from "~/utils/store-accessor";
|
||||||
export default class Login extends Vue {
|
export default class Login extends Vue {
|
||||||
|
|
||||||
readonly axeRepository = RepositoryFactory.get("axe");
|
readonly axeRepository = RepositoryFactory.get("axe");
|
||||||
readonly questionRepository = RepositoryFactory.get("question");
|
|
||||||
|
|
||||||
private axes: Axe[] = [];
|
private axes: AxeWithQuestions[] = [];
|
||||||
private currentAxe?: Axe;
|
private currentAxe?: AxeWithQuestions | undefined;
|
||||||
private currentAxeIdentifier = 1;
|
private currentAxeIdentifier = 1;
|
||||||
private questions: Map<number, Question[]> = new Map<number, []>();
|
private questions: Map<number, Question[]> = new Map<number, []>();
|
||||||
private loading = true;
|
private loading = true;
|
||||||
|
@ -67,29 +67,18 @@ export default class Login extends Vue {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.axeRepository
|
this.axeRepository
|
||||||
.findAll()
|
.findAll()
|
||||||
.then((response: AxiosResponse<RestResponse<Axe>>) => {
|
.then((response: AxiosResponse<RestResponse<AxeWithQuestions>>) => {
|
||||||
this.axes = response.data._embedded.axes;
|
this.axes = response.data._embedded.axes;
|
||||||
const promises: any[] = [];
|
|
||||||
this.axes.forEach(axe => {
|
this.axes.forEach(axe => {
|
||||||
promises.push(
|
this.questions.set(axe.identifier, axe.questions);
|
||||||
this.questionRepository
|
|
||||||
.findAllByAxeId(axe.identifier)
|
|
||||||
.then((response: AxiosResponse<RestResponse<Question>>) => {
|
|
||||||
return {
|
|
||||||
axeId: axe.identifier,
|
|
||||||
questions: response.data._embedded.questions
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
});
|
});
|
||||||
Promise.all(promises).then((axeQuestions) => {
|
|
||||||
axeQuestions.forEach(axeQuestion => {
|
|
||||||
this.questions.set(axeQuestion.axeId, axeQuestion.questions)
|
|
||||||
});
|
|
||||||
quizStore.initialize(this.questions);
|
|
||||||
this.initializeState();
|
this.initializeState();
|
||||||
|
quizStore.initialize(this.questions);
|
||||||
|
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
showPrevious() {
|
showPrevious() {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import {Axe} from "~/repositories/models/axe.model";
|
|
||||||
import {RestResponse} from "~/repositories/models/rest-response.model";
|
import {RestResponse} from "~/repositories/models/rest-response.model";
|
||||||
import {$axios} from "~/utils/api";
|
import {$axios} from "~/utils/api";
|
||||||
|
import {AxeWithQuestions} from "~/repositories/models/axe.model";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
findAll() {
|
findAll() {
|
||||||
return $axios.get<RestResponse<Axe>>("/axes");
|
return $axios.get<RestResponse<AxeWithQuestions>>("/axes/search/me");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
import {RestLinks} from "~/repositories/models/rest-response.model";
|
import {RestLinks} from "~/repositories/models/rest-response.model";
|
||||||
|
import {Question} from "~/repositories/models/question.model";
|
||||||
|
|
||||||
export interface Axe extends RestLinks {
|
export interface Axe extends RestLinks {
|
||||||
identifier: number;
|
identifier: number;
|
||||||
shortTitle: string;
|
shortTitle: string;
|
||||||
|
description: string;
|
||||||
title: string;
|
title: string;
|
||||||
color: string;
|
color: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AxeWithQuestions extends RestLinks {
|
||||||
|
identifier: number;
|
||||||
|
shortTitle: string;
|
||||||
|
description: string;
|
||||||
|
title: string;
|
||||||
|
color: string;
|
||||||
|
questions: Question[];
|
||||||
|
}
|
||||||
|
|
|
@ -5,19 +5,6 @@ export interface Score {
|
||||||
axeIdentifier: number;
|
axeIdentifier: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Quiz extends RestLinks {
|
|
||||||
id: number;
|
|
||||||
createdDate: string;
|
|
||||||
scores: Score[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Response {
|
|
||||||
axeId: number;
|
|
||||||
questionId: number;
|
|
||||||
score?: number;
|
|
||||||
comment?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ResponseWithQuestion extends RestLinks {
|
export interface ResponseWithQuestion extends RestLinks {
|
||||||
axeIdentifier: number;
|
axeIdentifier: number;
|
||||||
question: string;
|
question: string;
|
||||||
|
@ -25,6 +12,22 @@ export interface ResponseWithQuestion extends RestLinks {
|
||||||
comment: string;
|
comment: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Quiz extends RestLinks {
|
||||||
|
id: number;
|
||||||
|
createdDate: string;
|
||||||
|
scores: Score[];
|
||||||
|
_embedded: {
|
||||||
|
responses: ResponseWithQuestion[]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Response {
|
||||||
|
axeId: number;
|
||||||
|
questionId: number;
|
||||||
|
score?: number;
|
||||||
|
comment?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface QuizRate {
|
export interface QuizRate {
|
||||||
score?: number;
|
score?: number;
|
||||||
comment?: string;
|
comment?: string;
|
||||||
|
|
Loading…
Reference in New Issue