Compare commits

...

423 commits

Author SHA1 Message Date
Colin Darie
64400b512c
Merge pull request #9677 from govpf/feature-ouidou/clone_procedure_with_feature_flags
ETQ admin, les procédures clonées conservent les features flags
2023-11-28 08:21:02 +00:00
Lisa Durand
7a4c22bc63
Merge pull request #9752 from demarches-simplifiees/improve-dark-mode-high-contrast-windows-ldu
[accessibilité] Améliore la lisibilité du site en mode Contraste élevé de Windows
2023-11-27 15:55:42 +00:00
Lisa Durand
450bf7bb34 improve readability in Windows High Contrast Mode 2023-11-27 16:03:35 +01:00
Colin Darie
15ff65429b
Merge pull request #9738 from colinux/validate-pending-correction
ETQ usager modifiant un dossier en construction je n'ai plus besoin de cocher la case de correction effectuée
2023-11-27 13:52:06 +00:00
Colin Darie
3869dd3a92
Merge pull request #9748 from colinux/fix-etablissement-non-diffusable
ETQ usager on ne m'affiche plus la raison sociale d'un établissement non diffusible
2023-11-27 13:51:54 +00:00
Colin Darie
f1459c1414
Merge pull request #9749 from mfo/US/fix-enseigne
correctif(API.entreprise.enseigne): ajouter un attribut a une entreprise demande un peu plus que juste le definir sur l'object
2023-11-27 13:02:02 +00:00
Colin Darie
34158a6926
Merge pull request #9747 from colinux/fix-list-pj-repetables
ETQ usager la liste des pièces justificatives à fournir inclut les PJ des blocs répétables
2023-11-27 11:27:41 +00:00
seb-by-ouidou
c4ca381bed feat: enable features on cloned procedure 2023-11-27 12:00:27 +01:00
Colin Darie
cd100bccdf
perf(benchmarks): ability to pass a params list to controller 2023-11-27 11:29:21 +01:00
Colin Darie
3b9285a00b
perf(procedure): description view caching 2023-11-27 11:29:20 +01:00
Colin Darie
5d747ba0c2
fix(procedure): list piece justificative in repetitions 2023-11-27 11:08:39 +01:00
Martin
b74f7f24e7 correctif(API.entreprise.enseigne): ajouter un attribut a une entreprise demande un peu plus que juste le definir sur l'object 2023-11-24 10:33:18 +01:00
krichtof
fce2d8efa9
Merge pull request #9710 from demarches-simplifiees/9615-form-autosave
ETQ admin, je peux savoir quand mon formulaire a été sauvegardé pour la dernière fois
2023-11-23 23:17:14 +00:00
Colin Darie
be994c8933
Merge pull request #9744 from colinux/correction-reason-update
API: une demande de correction de dossier peut être de type "outdated"
2023-11-23 17:05:04 +00:00
Christophe Robillard
9c641ccee1 remove flash success messages 2023-11-23 17:10:29 +01:00
Colin Darie
aa84a4c335 fix(entreprise): don't leak identity of non diffusable etablissement 2023-11-23 17:07:05 +01:00
Colin Darie
249539fc27
feat(dossier): correction can be of kind "outdated" by API, which will later improve UI wording
Cf #9485
2023-11-23 15:01:48 +01:00
krichtof
61654d65a2
Merge pull request #9740 from demarches-simplifiees/9670-expose-rnf-api
En tant que consommateur de l'API DS, je peux récupérer les infos RNF
2023-11-23 12:55:58 +00:00
Christophe Robillard
2c6a9e7bf2 add autosave feedback when admin updates form 2023-11-23 13:35:53 +01:00
LeSim
f66a32c316
Merge pull request #9730 from demarches-simplifiees/polish_sidekiq
Tech: rajoute des logs, de l'audit de perf et du suivi de bug pour la file de job asynchrone sidekiq
2023-11-23 10:15:37 +00:00
mfo
79c63921b2
Merge pull request #9746 from mfo/US/fix-manager
correctif(manager): utilise un champ de type Field::Text plutot que Field::String, sinon administrate tente de requeter le champs/formatter
2023-11-23 10:11:45 +00:00
Martin
4939f1d1fe correctif(manager): utilise un champ de type Field::Text plutot que Field::String, sinon administrate tente de requeter le champs/formatter 2023-11-23 11:01:53 +01:00
mfo
78f9a2aa1e
Merge pull request #9737 from demarches-simplifiees/9670-export-rnf
En tant qu'instructeur, je peux exporter les données RNF des dossiers
2023-11-23 08:19:00 +00:00
mfo
c717691a6f
Merge pull request #9745 from mfo/US/chorus-fix
correctif(chorus.export): suite a un refacto, c'etait kc
2023-11-23 09:30:20 +01:00
Martin
72b8ccec36 correctif(chorus.export): suite a un refacto, c'etait kc 2023-11-23 09:30:00 +01:00
Eric Leroy-Terquem
d92155a96a
Merge pull request #9714 from demarches-simplifiees/add-not-include-operator
ETQ admin je peux conditionner / router à partir d'un champ de type choix multiple avec l'opérateur "Ne contient pas"
2023-11-22 16:29:24 +00:00
Eric Leroy-Terquem
4f1fb91abf
Merge pull request #9724 from demarches-simplifiees/update-manager-with-routing-infos
ETQ superadmin je veux avoir des informations sur le routage d'une procédure
2023-11-22 15:17:48 +00:00
Eric Leroy-Terquem
a54d55486c chore(routing): update routing_rule validation 2023-11-22 13:01:44 +01:00
Christophe Robillard
3be2a8878c expose id, title and address rnf for API 2023-11-22 12:49:28 +01:00
Christophe Robillard
6984dac41e update value reader for rnf champ 2023-11-22 12:35:44 +01:00
Colin Darie
ba076357c5
feat(dossier): submit en construction resolve automatically correction except for sva 2023-11-22 12:35:42 +01:00
Christophe Robillard
daa4c28af7 add data from rnf field to export 2023-11-22 12:20:05 +01:00
simon lehericey
2e8e401818 try to update ruby-sentry update dep instead
To avoid a deprecation warning from sidekiq relative to exception handling, we need https://github.com/getsentry/sentry-ruby/pull/2160 not yet released
2023-11-22 10:08:55 +01:00
simon lehericey
1880a15d69 sidekiq test job can raise an exception 2023-11-22 10:08:55 +01:00
simon lehericey
9f6cff07e4 add active job to skylight probes 2023-11-22 10:08:55 +01:00
simon lehericey
137680879c Add sentry sidekiq 2023-11-22 10:08:55 +01:00
LeSim
380cedc998
Merge pull request #9732 from demarches-simplifiees/move_virus_scanner_to_sidekiq
Tech: les jobs asynchrone de controle antivirus utilise sidekiq
2023-11-21 15:40:19 +00:00
simon lehericey
de82ab8dfd move virus scanner job to sidekiq 2023-11-21 16:13:32 +01:00
mfo
0203867460
Merge pull request #9729 from mfo/US/fix-cron-job-that-expires-users
correctif(users.expires): typos et perf
2023-11-21 14:46:14 +00:00
Paul Chavard
db8c57aa2d
Merge pull request #9721 from tchak/feat-tags-id
feat(tags): all tags should have ids
2023-11-21 13:07:20 +00:00
Paul Chavard
4842fc4d94 feat(tags): all tags should have ids 2023-11-21 13:55:25 +01:00
Martin
b09d42ee46 amelioration(UsersDeletionService): perf, PG aime pas le not having 2023-11-21 11:18:02 +01:00
Martin
fd81936baf correctif(users.expires): maj l'appel a process_expired car le service est instanciable maintenant 2023-11-21 10:18:58 +01:00
Colin Darie
6c4f6a52cb
Merge pull request #9727 from colinux/fix-dark-theme-blinkblink
Fix thème sombre: ne clignote pas avec le thème clair au moment du render
2023-11-20 19:42:05 +00:00
mfo
8ff1616e52
Merge pull request #9712 from mfo/US/add-enseigne-to-personne-morale
amelelioration(API): ajoute l'enseigne aux personnes morales
2023-11-20 19:18:57 +00:00
Colin Darie
10f5fae316 fix(theme): don't blink theme at render with dark theme
On ne veut pas attendre la fin du render pour que le JS du DSFR
set le theme à partir du scheme, autrement on voit le thème clair
pendant le render.
2023-11-20 17:39:38 +01:00
mfo
9a5e4d4ea5
Merge pull request #9655 from colinux/refactor-main-navigation
Administrateurs/Instructeurs/Experts : lien vers la page des nouveautés et refactorise les barres de navigation principale
2023-11-20 15:09:53 +01:00
Colin Darie
3dd25c1ea6 fix(gestionnaires): apply navigation refactor to gestionnaires 2023-11-20 15:07:21 +01:00
Colin Darie
99fe4694af fix(announces): link rendering not catched by turbo and fix a11y attributes 2023-11-20 15:07:21 +01:00
Colin Darie
8051beb068 fix(announce): don't increase attachment width (back to rails default) 2023-11-20 15:07:21 +01:00
Colin Darie
49cd10458c feat(announces): show Nouveautés link in main navigation 2023-11-20 15:07:20 +01:00
Colin Darie
352ed3969c chore(bundle): remove unused active_link_to 2023-11-20 15:06:43 +01:00
Colin Darie
ac47f82451 fix(profile): commencer is not always "as guest" 2023-11-20 15:06:43 +01:00
Colin Darie
a41c8f73ad refactor(nav): organize main navigation logic across profiles 2023-11-20 15:06:43 +01:00
Colin Darie
cdef5d8942 chore(yarn): update axe 4.7 => 4.8 2023-11-20 15:06:43 +01:00
Colin Darie
7cb6eadf18
Merge pull request #9676 from colinux/fix-rails-schema
Tech: synchronize schema.rb
2023-11-20 13:25:21 +00:00
Colin Darie
e3a1192d96 fix(migration): mismatch rails version definition 2023-11-20 11:22:28 +01:00
Colin Darie
34788bc800 fix(schema): add missing index administrateurs#groupe_gestionnaire_id 2023-11-20 11:22:28 +01:00
Colin Darie
bb4a2b84b9 fix(schema): add missing index exports#instructeur_id 2023-11-20 11:22:28 +01:00
Colin Darie
f972d36f2f test: fix when using timestamps not yet limited by postgresql precision
Sur des colonnes dont le schema ne connait pas le niveau de précision
(créées avant rails 7), rails créé un timestamp avec la précision système
(par exemple 9 décimales sur linux) alors que pg va l'arrondir
a posteriori à 6.

Ce n'est généralement pas un problème en production,
mais se révèle dans les tests typiquement avec des objets crées
par des factories: si un test dépend de ces timestamps,
il faut récupérer la valeur limitée par pg (d'où le reload),
plutôt que celle directement issue de Time.now à la création de l'objet.

Une alternative aurait été de créer une migration pour ces colonnes pour
forcer la précision à 6 et que le schema en aurait pris connaissance:
rails limiterait la précision de lui même dès la création de l'objet.
2023-11-20 11:22:28 +01:00
Colin Darie
e60a5f5123 ci: fail when someones forget to commit it's schema.rb with a new migration 2023-11-20 11:22:27 +01:00
Colin Darie
79c6b99802 fix(schema): remove foreign keys and index references but not existing in production 2023-11-20 11:22:24 +01:00
Colin Darie
d5f8ee2f84 fix(schema): update and fix schema with new rails 7 precision behavior 2023-11-20 11:16:57 +01:00
Eric Leroy-Terquem
61ba089203 feat(manager): add routing rule in groupe instructeur show 2023-11-17 15:11:05 +01:00
Eric Leroy-Terquem
42027e9db9 feat(manager): add champs de routage in procedure show 2023-11-17 15:11:05 +01:00
mfo
ce221f86af
Merge pull request #9666 from mfo/US/expire-user
ETQ RSSI : j'aimerais savoir que DS a une politique d'expiration de donnée agressive 💥
2023-11-17 10:42:25 +00:00
Martin
14b2fc30b2 tech(user.expiration): ne perds pas de vue qu'il faut mettre a jour le users.last_sign_in_at 2023-11-17 11:33:14 +01:00
Martin
520863d814 amelioration(user.expiration): ajoute une raison specifique a la suppression d'un dossier : user_expired 2023-11-17 11:33:14 +01:00
Martin
bfe27b5eb7 amelioration(UsersDeletionService.expired_users_with_dossiers): ignore les usagers ayant un dossier en instruction, meme si il a des dossiers en brouillon ou autre 2023-11-17 11:33:14 +01:00
Martin
3a9b520a93 tech(review): quelques améliorations de style 2023-11-17 11:33:14 +01:00
Martin
e99f9b5c17 amelioration(data): ajoute un index sur users.last_signed_in_at 2023-11-17 11:33:14 +01:00
Martin
81826e2509 amelioration(Cron::ExpiredUsersDeletionJob): ne retente jamais ce job si il crash [pour eviter de se lancer ds une boucle infinie de suppression] 2023-11-17 11:33:14 +01:00
Martin
5f452a731e amelioration(UserDeletionService): les usagers ont uniquement identifié comme inactif si ils ne se sont pas connecté depuis 2ans [et on ignore les admin, expert, instructeur, usager avec un dossier en instruction ou usager sans dossier dutout] 2023-11-17 11:33:14 +01:00
Martin
66cf41b6d2 amelioration(procedure.duree_conservation_dossiers_dans_ds_changes): reset les flag d'expirations lorsqu'on change la date de conservation des dosseirs d'une procedure 2023-11-17 11:33:14 +01:00
Martin
5bf38ea06f amelioration(data): backfill procedure_expires_when_termine_enabled:true pour les procedures ou c'est pas activé qui n'ont pas de dossiers 2023-11-17 11:33:14 +01:00
Martin
1716a931c5 amelioration(Procedure.procedure_expires_when_termine_enabled): active l'expiration des dossiers terminés sur les procedure ne l'ayant pas activé jusqu'à présent. La cible est de faire ça sur 20 Procedure quotidiennement 2023-11-17 11:33:14 +01:00
Martin
fcb4b20b65 amelioration(notify_inactive_close_to_deletion): ajoute le lien vers les dossiers 2023-11-17 11:33:14 +01:00
Martin
afc7df9c7c amelioration(UserDeletionService): on ne supprime pas 800k utilisateurs en une passe 2023-11-17 11:33:14 +01:00
Martin
3186b0aa68 tech(refactor): centralise/documente les constantes de duree de retentions dans le ns dedié à l'expiration 2023-11-17 11:33:14 +01:00
Martin
c9d470d9ec tech(refactor): mutualise la duree de rentention apres notification entre dossier/user 2023-11-17 11:33:14 +01:00
Martin
aecc41490b tech(refactor): deplace le mail rate limiter dans le module dédié à l'expiration 2023-11-17 11:33:14 +01:00
Martin
fb238ff7ac tech(refactor): deplace l'echelonnement des taches cron liés a l'expiration dans un module dédié 2023-11-17 11:33:14 +01:00
Martin
99529c611d tech(refactor): deplace les service d'expiration usager/dossier dans un namespace dedié 2023-11-17 11:33:14 +01:00
Martin
fb51710309 amelioration(ExpiredUsersDeletionService): ne touche pas aux dossiers en instruction 2023-11-17 11:33:14 +01:00
Martin
054b3be02a tech(clean): cleanup spec and code 2023-11-17 11:33:14 +01:00
Martin
1950297413 amelioration(ExpiredUsersDeletionService): ne supprime pas les experts, instructeurs, administrateurs 2023-11-17 11:33:14 +01:00
Martin
b989af5b47 amelioration(ExpiredUsersDeletionService): limite le nombre d'envoie d'email sur le job de suppression des utilisateurs 2023-11-17 11:33:14 +01:00
Martin
8790ac4978 amelioration(ExpiredUsersDeletionService): ajoute le rate limit a l'envoie des mails 2023-11-17 11:33:14 +01:00
Martin
5229160408 amelioration(ExpiredUsersDeletionService.process_expired): supprime aussi les usagers qui n'ont plus de dossiers sur la plateforme 2023-11-17 11:33:14 +01:00
Martin
2f28012324 amelioration(User.mailer.notify_inactive_close_to_deletion): ajoute le mail pour prevenir de la suppression de compte 2023-11-17 11:33:14 +01:00
Martin
ea9c571a30 amelioration(users.expiration): notifie deux semaine a l'avance avant de supprimer un compte 2023-11-17 11:33:14 +01:00
Martin
b08609af48 tech(users.inactive_close_to_expiration_notice_sent_at): ajoute une colonne pour suivre la date de notification avant suppression du compte usager inactif 2023-11-17 11:33:14 +01:00
Martin
252b3e4719 tech(expires-user.cron): ajoute une tache cron [débrayable] pour faire tourner la tache de suppression des usagers inutile
attention, pour notre instance, avec ma db anonymiser :
```
ExpiredUsersDeletionService.find_expired_user.pluck(:id).size
=> 1795515
```
2023-11-17 11:33:14 +01:00
Martin
a49a5c2c93 amelioration(ExpiredUsersDeletionService): prepare le grand ménage 2023-11-17 11:33:14 +01:00
mfo
256babbf74
Merge pull request #9716 from mfo/US/tags.pre-wrap.text
correctif(tags): ETQ admin, je peux utiliser un tag referençant un type de champ dont le libellé contient deux espaces consécutif
2023-11-16 16:08:10 +00:00
Lisa Durand
1fa3425d4f
Merge pull request #9705 from demarches-simplifiees/setup-dark-mode-ldu
[Accessibilité] Configurer le mode "sombre"
2023-11-16 15:10:41 +00:00
krichtof
39bdb5f145
Merge pull request #9701 from demarches-simplifiees/carte
Afficher une carte de déploiement de DS par département
2023-11-16 13:18:16 +00:00
Lisa Durand
8ecc242586 fix display of notification dot inside DSFR tabs 2023-11-16 14:06:05 +01:00
Lisa Durand
139e8f2059 rename theme modal 2023-11-16 14:02:07 +01:00
Christophe Robillard
7be8d4447f add links to deployment map 2023-11-16 13:27:12 +01:00
Christophe Robillard
90ed7dd4a9 fix false positives for activemodel i18n keys 2023-11-16 13:27:12 +01:00
Christophe Robillard
ba876f5085 show france map with stats for each departement 2023-11-16 13:27:12 +01:00
Lisa Durand
b782bcdd2b
Merge pull request #9672 from demarches-simplifiees/add-confirmation-page-for-procedure-publication-ldu
[admin] Ajout d'une page de confirmation après la publication d'une procédure - mise en avant de l'URL à partager
2023-11-16 11:08:54 +00:00
Colin Darie
1d2fdeb376
Merge pull request #9709 from mfo/fix-typo-treatment-time-for-dossier
correctif(typo):  Quels sont des délais... ->  Quels sont les délais
2023-11-16 10:12:26 +00:00
Lisa Durand
b02edd15dc remove condition - Colin feedback review 2023-11-16 11:03:33 +01:00
Martin
760c441141 correctif(typo): Quels sont des délais... -> Quels sont les délais 2023-11-16 10:57:25 +01:00
Martin
dd31dbc450 correctif(mail_templates/_form.html.haml): force la preservation des espaces dans le code des balises, sinon un tag d'un type de champ ayant un libelle contenant deux espaces consécutif est invalide car il se fait manger par le rendu html 2023-11-16 10:31:35 +01:00
Eric Leroy-Terquem
f945c02c3c feat(conditional): add exclude operator 2023-11-16 10:27:03 +01:00
krichtof
ba17f8d8aa
Merge pull request #9713 from demarches-simplifiees/8742-privileges
tech: migration api entreprise privileges
2023-11-16 08:46:24 +00:00
Lisa Durand
31cb62e27d improve dark mode for admin user 2023-11-15 19:09:11 +01:00
Lisa Durand
373379d132 remove icon from admin dashboard and use badge - Figma 2023-11-15 19:08:56 +01:00
Lisa Durand
9af2304019 remove hard coded color for dossier subheader 2023-11-15 18:43:20 +01:00
Lisa Durand
d601f92be8 add links in footer and page profil and modal to choose scheme 2023-11-15 18:43:20 +01:00
Colin Darie
cbec8b8b75 chore(assets): setup dsfr artwork 2023-11-15 18:43:17 +01:00
Lisa Durand
d403f851c6 fix specs with good aria attributes for tabs 2023-11-15 18:42:40 +01:00
Lisa Durand
75867df013 fix linter with correct indentation 2023-11-15 18:42:40 +01:00
Lisa Durand
cf31815890 change rgb color by var from DSFR 2023-11-15 18:42:40 +01:00
Lisa Durand
7c7f9113d2 improve css dark mode for combobox 2023-11-15 18:42:40 +01:00
Lisa Durand
84cd5daf9c add css to make dropdown readable with dark mode 2023-11-15 18:42:40 +01:00
Lisa Durand
86c9a84111 fix dark mode on login pages 2023-11-15 18:42:40 +01:00
Lisa Durand
a3307553b7 simplify html and css for landing pages and improve dark mode 2023-11-15 18:42:40 +01:00
Lisa Durand
f4283392b7 improve table and messagerie display in dark mode 2023-11-15 18:42:40 +01:00
Lisa Durand
11c8e408ef remove specific tabs css and use DSFR tabs 2023-11-15 18:42:40 +01:00
Lisa Durand
a0998ab709 import dark mode from DSFR and setup as system 2023-11-15 18:42:40 +01:00
Christophe Robillard
a2f5687aa3 migrate api entreprise privileges 2023-11-15 17:19:53 +01:00
Martin
101fbb1610 amelelioration(API): ajoute l'enseigne aux personnes morales 2023-11-15 15:58:29 +01:00
LeSim
a6f4ae3ee4
Merge pull request #9612 from demarches-simplifiees/attestation_editor_1
Prototype de l'éditeur d'attestation v2
2023-11-15 14:54:13 +00:00
simon lehericey
200cdbd4ef fix types 2023-11-15 15:42:24 +01:00
simon lehericey
9fc6c3b641 attestation_template v2 : add feature flag 2023-11-15 15:24:46 +01:00
simon lehericey
791954af1b attestation_template v2: add weasyprint integration 2023-11-15 15:24:46 +01:00
simon lehericey
e4a48f1270 tiptap service handle empty attestation 2023-11-15 15:24:46 +01:00
simon lehericey
af53a9b9db attestation_template v2: edit / update 2023-11-15 15:24:46 +01:00
simon lehericey
f6001c8eae attestation_template v2: show 2023-11-15 12:17:26 +01:00
simon lehericey
f6b10731d3 add json_body to attestation template 2023-11-15 10:35:16 +01:00
simon lehericey
b2d29b28b0 yarn add tiptap 2023-11-15 10:35:16 +01:00
Paul Chavard
8aab0cdfed
Merge pull request #9707 from demarches-simplifiees/remove-routing-feature-flags
Tech : supprime des features flags liés au routage
2023-11-15 09:23:00 +00:00
Paul Chavard
2b6cd5068b
Merge pull request #9697 from tchak/fix-repasser_en_instruction-email
fix(dossier): use traitements to send repasser_en_instruction template
2023-11-15 09:22:40 +00:00
Eric Leroy-Terquem
f1954c1546
Merge pull request #9694 from demarches-simplifiees/fix-number-type-condition-bug
ETQ admin je peux conditionner / router avec un champ de type nombre décimal
2023-11-15 09:04:07 +00:00
Eric Leroy-Terquem
22eadafe07 fix(condition): make condition work with decimal 2023-11-15 09:53:02 +01:00
Paul Chavard
508602fd4a fix(dossier): use traitements to send repasser_en_instruction template 2023-11-14 23:59:45 +01:00
Paul Chavard
a2ed35d44e spec(dossier): improuve dossier with state factories 2023-11-14 23:59:45 +01:00
LeSim
1b4010205a
Merge pull request #9599 from demarches-simplifiees/destroy_dossier_operation_logs_with_dossier
fix: destroy dossier_operation_logs with dossier
2023-11-14 16:45:26 +00:00
Eric Leroy-Terquem
6ad0547a72 chore(feature flag): remove multi line routing flag 2023-11-14 17:06:05 +01:00
Eric Leroy-Terquem
77e589d307 chore(feature flag): remove rerouting flag 2023-11-14 17:04:35 +01:00
Eric Leroy-Terquem
754e4c206b chore(feature flag): remove routing_rules flag call 2023-11-14 17:02:39 +01:00
Colin Darie
da6e5fcd9c
Merge pull request #9700 from mfo/US/fix-invite-modal
correctif(dossiers): ETQ usager, le menu d'invitation etait cassé sur mobile
2023-11-14 10:17:40 +00:00
Colin Darie
a3cba47d4b
Merge pull request #9703 from colinux/fix-flaky-repetition
Test: fix flaky brouillon on repetition
2023-11-14 09:33:04 +00:00
mfo
bacd8ab6f7
Merge pull request #9704 from mfo/US/fix-procedure-presentation-find-type-de-champ
correctif(instructeurs/procedures/filters): ETQ instructeur, je ne peux filtrer les dossiers d'une procedure par type de champs choix simple
2023-11-14 09:11:52 +00:00
Martin
80f2771c05 correctif(filtres): utilise la derniere version du type de champs de sorte a avoir les bons types 2023-11-14 09:46:29 +01:00
Martin
fd1f33b6e5 bug(filtres): les filtres par type de champs select ne fonctionnent pas 2023-11-14 09:46:29 +01:00
Colin Darie
2343ee83ef test: fix flaky brouillon on repetition 2023-11-14 09:23:00 +01:00
mfo
7fca13d02c
Merge pull request #9696 from colinux/procedure-visible-by-user-faster
Perf: accélération du chargement des dossiers visibles
2023-11-14 08:22:31 +00:00
Martin
c1a4f7d81d correctif(dossiers): ETQ usager, le menu d'invitation etait cassé sur mobile 2023-11-14 09:22:07 +01:00
LeSim
7c8777557f
Merge pull request #9702 from colinux/fix-lograge-to-log
Tech: fix log without to_log key
2023-11-13 16:03:01 +00:00
mfo
79293f9fde
Merge pull request #9699 from mfo/US/combobox-full-with-no-matter-screen
amelioration(combobox): ETQ usager, les combobox de DS se comportent comme un `<select>`
2023-11-13 15:32:06 +00:00
Colin Darie
9d7f747805
chore(lograge): fix log without to_log key 2023-11-13 15:52:09 +01:00
Martin
d3d195c566 amelioration(combobox): ETQ usager, les combobox de DS se comportent comme un <select> 2023-11-13 14:43:26 +01:00
mfo
485dcd1db7
Merge pull request #9698 from mfo/US/fix-combobox-on-mobile
correctif(combobox): ETQ usager, les combobox sur mobile n'etaient pas utilisable
2023-11-13 11:17:43 +00:00
Martin
4daeed68f3 correctif(combobox): problème de z-index et de fond sur les combobox en mobile
Co-authored-by: Colin Darie <colin@darie.eu>
2023-11-13 11:55:19 +01:00
simon lehericey
e00054a6ea first test for sidekiq 2023-11-13 11:40:48 +01:00
simon lehericey
c6ae4139a2 add task to remove dol orphan 2023-11-13 11:40:48 +01:00
Colin Darie
fb318620aa
Merge pull request #9692 from colinux/fix-deprecation-warnings
Tech: fix multiple deprecation warnings
2023-11-13 10:16:06 +00:00
Colin Darie
0db781f793
Merge pull request #9693 from colinux/admin-fix-form-limit
Admin: fix affichage du choix de la limite de caractères d'un champ texte
2023-11-13 09:50:43 +00:00
Colin Darie
d0b8176081 chore(procedure): faster procedure closing 2023-11-10 15:53:29 +01:00
Colin Darie
154a993794 chore(perf): improve perf of Dossier#visible_by_user up to 32% 2023-11-10 15:51:24 +01:00
Colin Darie
06a8684bfd chore(schema): dossiers#for_procedure_preview not nullable 2023-11-10 15:41:30 +01:00
Colin Darie
e591851b79 test: fix warning about classes already defined by another spec 2023-11-10 14:24:28 +01:00
Colin Darie
92661d074d
chore(bundle): update chartkick to fix defer deprecation warning and v5 like JS counterpart 2023-11-10 14:20:03 +01:00
Colin Darie
baecdd5cbd
chore(bundle): update groupdate to fix ActiveRecord::Base.default_timezone deprecation warning 2023-11-10 14:20:02 +01:00
Colin Darie
25dfbe5085
chore: fix ActiveStorage::Current.host deprecation warning 2023-11-10 14:20:01 +01:00
Colin Darie
8326cf080e
fix: typo in method name extention => extension 2023-11-10 14:20:00 +01:00
Colin Darie
148611d595
fix(dossier): rails 7 deprecation warning about sum of non numeric values 2023-11-10 14:19:59 +01:00
Colin Darie
65feaa37e3
test: fix deprecated Mail::CheckDeliveryParams.check syntax 2023-11-10 14:19:57 +01:00
Colin Darie
610b808d32
test: fix deprecated any_instance and stub old syntax 2023-11-10 14:19:56 +01:00
Colin Darie
867568f289 fix(style): select of admin limit text characters 2023-11-10 14:09:18 +01:00
mfo
49d6373330
Merge pull request #9691 from mfo/US/fix-multiple-attachement-not-enabled
correctif(pjs.upload.multiple): ETQ usager, lorsqu'une demarche n'a pas activé les PJ multiples, je ne dois pas pouvoir uploader plus d'une pj
2023-11-10 12:38:17 +00:00
Martin
8c9656f7db correctif(pjs.upload.multiple): ETQ usager, lorsqu'une demarche n'a pas activé les PJ multiples, je ne dois pas pouvoir uploader plus d'une pj 2023-11-10 12:02:52 +01:00
mfo
e70c49d47b
Merge pull request #9689 from mfo/US/fix-not-normalized-champs-commune
correctif(Champs::CommuneChamp): il restait des champs commune a normaliser
2023-11-10 09:55:11 +00:00
mfo
6b1aee7b0b
Merge pull request #9686 from demarches-simplifiees/no-email-for-500
Suppression de l'adresse email de contact dans la page 500
2023-11-10 09:53:14 +00:00
Martin
2d4701ac61 correctif(Champs::CommuneChamp): il restait des champs commune a normaliser 2023-11-10 10:42:42 +01:00
Kara Diaby
9ab918c1b2
Merge pull request #9627 from demarches-simplifiees/feat/9528
ETQ instructeur, je souhaite que l'email de réexamen du dossier soit affiché dans la messagerie
2023-11-10 09:19:50 +00:00
Kara Diaby
c53d35401e Tests 2023-11-10 08:54:27 +00:00
Kara Diaby
fa874a0ea3 Permet de configurer le mail de réexamen du dossier par l'administrateur 2023-11-10 08:54:27 +00:00
Kara Diaby
f692a9e5e4 Migration : re_instructed_at à Dossier et ajoute le re_instructed_mails 2023-11-10 08:46:13 +00:00
Kara Diaby
7926948c0d Ajoute l'email de repassage en instruction dans la messagerie du dossier 2023-11-10 08:44:48 +00:00
Colin Darie
ae675fac2a
Merge pull request #9688 from colinux/fix-geocoder-redis-cache
Geocoder: ensure to use exact rails redis cache configuration
2023-11-09 17:33:34 +00:00
Colin Darie
95f61c3d97 fix(geocoder): ensure to use exact rails redis cache configuration 2023-11-09 18:21:38 +01:00
Colin Darie
edb47d94f7 test: fix not_to raise_error(SpecificErrorClass) false positive risk 2023-11-09 17:27:55 +01:00
Colin Darie
c38dac789d test: fix deprecation warning, a selector matcher must be a string or symbol 2023-11-09 17:24:49 +01:00
LeSim
fcec4a7ef7
Merge pull request #9519 from demarches-simplifiees/init_sidekiq
Tech: infrastructure pour utiliser sidekiq
2023-11-09 16:18:04 +00:00
Colin Darie
460d565e8c
Merge pull request #9687 from colinux/geocoder-cache
Tech: active le cache pour le geocoder pour contourner le rate limiting dans certains contextes
2023-11-09 16:00:54 +00:00
simon lehericey
167060ea14 add dummy sidekiq job 2023-11-09 16:57:10 +01:00
simon lehericey
c32fa93689 add sidekiq UI 2023-11-09 16:57:10 +01:00
simon lehericey
9cd165635d add sidekiq initializer 2023-11-09 16:57:10 +01:00
Colin Darie
01aaec6e90
chore(geocoder): enable caching for geocoder 2023-11-09 16:43:04 +01:00
Colin Darie
04f429abef chore(bundle): update geocoder 1.6 => 1.8 2023-11-09 16:36:23 +01:00
simon lehericey
8ef3b77c0e add gem sidekiq 2023-11-09 16:23:49 +01:00
mfo
b61fa88fe0
Merge pull request #9621 from mfo/US/type-de-champs-ej
amelioration(chorus): ETQ admin, je peux ajouter un type de champ EngagementJuridique
2023-11-09 14:40:49 +00:00
Christophe Robillard
7a2b6c57d2 remove contact email on 500 page 2023-11-09 14:31:24 +01:00
mfo
87c3615774 review(tech): utilise un code unique pr les elements de l'autocomplete, corrections de typos, amelioration du code
Co-authored-by: LeSim <mail@simon.lehericey.net>
2023-11-09 11:10:17 +01:00
Martin
c7d5bf8dc7 amelioration(export.chorus): integre le cadre budgetaire en pus des champs ej 2023-11-09 10:09:51 +01:00
Martin
362b072c6c amelioration(chorus): flip sur le type de champ engagement_juridique afin d'activer la tuile et le type de champs avec un seul flag 2023-11-09 10:09:50 +01:00
Martin
0428853f4d amelioration(Champs::EngagementJuridiqueChamp): valide le format 2023-11-09 10:09:14 +01:00
Martin
d2657d83ac amelioration(chorus.update): oriente l'admin a remplir tous les champs du cadre budgetaire. une fois le cadre budgetaire renseigné, oriente l'admin a ajouter un champ EJ 2023-11-09 10:09:14 +01:00
Martin
395f2d9b04 amelioration(chorus.edit): ajoute un Dsfr::Callout pour documenter l'intention de la fonctionnalité aupres des des administrateurs 2023-11-09 10:09:14 +01:00
Martin
39abf283d9 tech(amelioration.chorus_configuration): deplace les methodes liées au rendu du model ChorusConfiguration dans le ChorusFormComponent 2023-11-09 10:09:14 +01:00
Martin
a6cf22edb8 amelioration(types_de_champ_editor/champ_component): isole le type de champs Ej aux annotation privée 2023-11-09 10:09:14 +01:00
Martin
13624f0f7e add type de champs ej bin/rails generate add_champ EngagementJuridique 2023-11-09 10:09:13 +01:00
Colin Darie
7a4456efeb
Merge pull request #9638 from colinux/poc-release-notes
ETQ super-admin je peux informer les administrateurs, instructeurs et experts des évolutions du site
2023-11-09 09:00:01 +00:00
Colin Darie
178458215c
chore(announces): main navigation across announces 2023-11-08 18:23:18 +01:00
Colin Darie
e49436aa5d
feat(announce): can destroy a note and add at the same date 2023-11-08 18:23:16 +01:00
Colin Darie
5df6997fa3
feat(announces): link from manager 2023-11-08 18:23:15 +01:00
Colin Darie
3ac1688fe4
chore(schema): add announces_seen_at to users 2023-11-08 18:23:14 +01:00
Colin Darie
f522b45fc3
chore(generators): fix defaults for view_component generator 2023-11-08 18:23:13 +01:00
Colin Darie
ad671092c0
refactor(announces): note form as view component 2023-11-08 18:23:07 +01:00
Colin Darie
8587696f33
feat(components): make works rich_text_area inputs 2023-11-08 18:22:15 +01:00
Colin Darie
e4c37758d4
feat(announces): anyone can read announces 2023-11-08 18:22:14 +01:00
Colin Darie
ff8ed6016e
feat(announce): super admin can create announce 2023-11-08 18:22:11 +01:00
Colin Darie
0d626f1811
chore(schema): create release_notes 2023-11-08 18:20:00 +01:00
LeSim
6ade116a0e
Merge pull request #9681 from demarches-simplifiees/add_token_id_to_graphql_logs
Tech: ajoute l'identifiant du jeton api utilisé lors de requête à l'api graphql
2023-11-08 16:58:48 +00:00
simon lehericey
8c0d2bb8cb refactor: add request_logs methods
it avoids having to change lograge.rb for adding an entry
2023-11-08 17:49:09 +01:00
simon lehericey
52752c95ec tech: add api_token_id to graphql logs 2023-11-08 16:50:10 +01:00
simon lehericey
a431287db0 chore: @current_user is set by authenticate_from_token 2023-11-08 16:50:09 +01:00
simon lehericey
daf1443b0c chore: remove duplicated private 2023-11-08 16:50:09 +01:00
krichtof
a6ea607e7a
Merge pull request #9566 from adullact/feature-ouidou/admin_creation_delegation_gestionnaire_page_children_management
Feature ouidou/admin creation delegation gestionnaire page children management
2023-11-08 15:13:10 +00:00
seb-by-ouidou
7a3a022ed4 feat: replace fail by flast alert 2023-11-08 13:54:40 +00:00
seb-by-ouidou
a14d77cbd3 fix: remove useless comments 2023-11-08 13:50:18 +00:00
Paul Chavard
8d23152630
Merge pull request #9680 from colinux/stats-layout
Super-Admin: fix layout des gros nombres de la page stats
2023-11-08 12:09:11 +00:00
Lisa Durand
ac834b0c0a add confirmation page after publishing procedure for admin 2023-11-08 12:07:32 +01:00
Paul Chavard
a611852ebc
Merge pull request #9663 from tchak/legacy-browsers
feat(traitement): add browser information
2023-11-08 10:23:31 +00:00
Colin Darie
7a0bdd6c94 style(stats): fix big number layout 2023-11-08 10:39:03 +01:00
Eric Leroy-Terquem
0968f02a26
Merge pull request #9648 from demarches-simplifiees/add-rnf-service
Ajout d'un nouveau référentiel : le Répertoire National des Fondations (RNF)
2023-11-08 09:06:47 +00:00
Eric Leroy-Terquem
f7eeb21425
Merge pull request #9604 from demarches-simplifiees/etq-admin-je-peux-creer-une-regle-de-routage-de-plusieurs-lignes
ETQ admin je peux créer une règle de routage de plusieurs lignes
2023-11-08 08:28:34 +00:00
Paul Chavard
d93c624164 feat(traitement): add browser information 2023-11-08 00:09:38 +01:00
Paul Chavard
92aab8e102
Merge pull request #9605 from tchak/feat-autocomplete-communes
feat(dossier): commune champ is an autocomplete now
2023-11-07 20:17:31 +00:00
Paul Chavard
34a76d8afd feat(dossier): commune champ is an autocomplete now 2023-11-07 20:58:39 +01:00
Paul Chavard
b92ccc0a09 chore(adresse): improuve adresse data source 2023-11-07 20:58:39 +01:00
Paul Chavard
f0168d1470 feat(combobox): add data:string slot 2023-11-07 20:58:39 +01:00
Paul Chavard
66f94722fb
Merge pull request #9674 from tchak/graphql-prefilled-flag
feat(graphql): expose prefilled flag on dossier
2023-11-07 19:57:48 +00:00
Paul Chavard
6ce2b33519 feat(graphql): expose prefilled flag on dossier and champ 2023-11-07 19:00:32 +01:00
Paul Chavard
a65aba521e
Merge pull request #9675 from tchak/fix-multiple-dropdown-options
fix(dropdown_multiple): options -> enabled_non_empty_options
2023-11-07 14:33:19 +00:00
Eric Leroy-Terquem
94c218e2f7 wording(type de champ): add full wording for rna and rnf 2023-11-07 14:21:29 +01:00
Lisa Durand
ce1cd4240c add code postal, city code and department infos in view 2023-11-07 14:21:29 +01:00
Eric Leroy-Terquem
a70e7ca903 feat(graphql): add rnf_champ to graphql api 2023-11-07 14:21:29 +01:00
Eric Leroy-Terquem
bfb8611c81 feat(rnf): display rnf data in show 2023-11-07 14:21:29 +01:00
Eric Leroy-Terquem
694cbcd0a2 feat(rnf): add rnf type_de_champ 2023-11-07 14:21:28 +01:00
Eric Leroy-Terquem
0268b0af9e chore(champ): update error catching when fetching external data 2023-11-07 14:21:28 +01:00
Paul Chavard
198860d9f3 fix(dropdown_multiple): options -> enabled_non_empty_options 2023-11-07 13:55:16 +01:00
Colin Darie
234c6e6248
Merge pull request #9667 from mfo/doc/env-var-bulk-email
doc(.env.optional): documente BULK_EMAIL_QUEUE
2023-11-07 11:51:42 +00:00
Colin Darie
87b0975a7c
Merge pull request #9673 from colinux/autolink-instructeurs
ETQ Instructeur les urls de mes messages dans la messagerie sont converties en lien
2023-11-07 11:51:16 +00:00
Paul Chavard
22de1d277d
Merge pull request #9669 from colinux/spec-retry-3-ci
Tech: retry system tests JS seulement sur CI pour avoir les erreurs rapidement en local
2023-11-07 11:50:13 +00:00
Martin
806d375ac5 doc(.env.optional): documente BULK_EMAIL_QUEUE 2023-11-07 11:08:20 +01:00
Colin Darie
21b6479ace feat(messages): re-enable simple autolink for instructeurs messages
Closes #9541
2023-11-06 19:01:25 +01:00
Eric Leroy-Terquem
2465e13504 chore(logic): add a translation for empty rule 2023-11-06 18:10:08 +01:00
Eric Leroy-Terquem
6c959d9d4e refactor(groupe instructeur): use logic validation system for routing
rule"
2023-11-06 17:44:40 +01:00
Eric Leroy-Terquem
3e2e5a01f9 fix(test): update routing tests 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
cd9cc65e99 feat(routing): add a feature flag on multi line routing 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
469a50f19d refactor(condition): move conditions_error_component 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
cf80fd03e1 chore(routing): update routing_rule validations 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
22feb48c29 chore(conditions): update views 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
28b07f7650 chore(conditions): update condition_form 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
4d95f49c82 chore(conditions): update controllers and routes 2023-11-06 15:25:45 +01:00
Eric Leroy-Terquem
979b5101ae chore(conditions): champs_conditions_component and routing_rules_component inherit from conditions_component 2023-11-06 15:25:45 +01:00
Colin Darie
560d291bcd test: retry system tests only on CI (get error fast in local) 2023-11-06 15:15:51 +01:00
Lisa Durand
baaf4e3517
Merge pull request #9653 from demarches-simplifiees/fix-close-procedure-page
[Fix] ETQ admin, je souhaite associer une démarche existante depuis le bouton "clore" du tableau de bord de la démarche
2023-11-06 13:13:33 +00:00
Lisa Durand
be8303f1c4 feedback review - remove unused class and simplify method 2023-11-06 11:22:09 +01:00
Paul Chavard
7a88a57085
Merge pull request #9660 from tchak/feat-annotations-can-be-conditioned-by-champs
ETQ Administrateur, je voudrais pouvoir conditionner les annotations en utilisant des champs du formulaire
2023-11-03 12:46:25 +00:00
Paul Chavard
026885ebcf feat(conditional): annotations can be conditioned by champs 2023-11-03 10:45:07 +00:00
Paul Chavard
532fe466df refactor(conditional): use upper_coordinates method 2023-11-03 10:15:46 +00:00
Paul Chavard
082558bb26
Merge pull request #9662 from tchak/api-log-deprecated-order-usage
log(graphql): log deprecated order argument usage
2023-11-02 15:14:40 +00:00
Paul Chavard
99e22a8cbe log(graphql): log deprecated order argument usage 2023-11-02 15:01:34 +00:00
Colin Darie
a26c82cde7
Merge pull request #9661 from colinux/admin-no-rib-alert
ETQ administrateur je n'ai plus d'avertissement si ma démarche contient un champ RIB
2023-11-02 14:27:37 +00:00
Colin Darie
74722490bc fix(admin): RIB champ is not a forbidden keyword 2023-11-02 11:27:34 +01:00
mfo
17a71eb7a8
Merge pull request #9659 from mfo/US/enhance-export-page-for-less-zip-support
amelioration(export): suggère l'usage de 7zip et de renommer l'archive pour un nommage plus court sur la page des exports afin d'eviter les problèmes au support
2023-11-02 08:57:26 +00:00
Martin
dda5dadaed amelioration(export): suggère l'usage de 7zip et de renommer l'archive pour un nommage plus court sur la page des exports afin d'eviter les problèmes au support
Co-authored-by: Colin Darie <colin@darie.eu>
2023-11-02 09:08:17 +01:00
Paul Chavard
13eadb93bf
Merge pull request #9643 from tchak/feat-autosave-validation
feat(dossier): validate on change and revalidate on input
2023-10-31 18:03:20 +00:00
Paul Chavard
869d83dda9 feat(dossier): validate on change and revalidate on input 2023-10-31 17:52:00 +00:00
Paul Chavard
c93141d8bb chore(coldwired): update utils 2023-10-31 17:52:00 +00:00
mfo
0f608444b5
Merge pull request #9657 from mfo/US/ops-dossier-champs-missing
tech(maintenance): ajoute `maintenance_task` une  pour ajouter des champs manquant a un dossier
2023-10-31 16:31:11 +00:00
mfo
0e2d973b33
Merge pull request #9656 from mfo/US/fix-non-printable-char-in-pdf
correctif(pdf): ETQ instructeur, lorsque je télécharge un dossier et ses PJs, les \t deviennent des ?
2023-10-31 16:30:32 +00:00
Martin
25a4a4de4a correctif(pdf): ETQ instructeur, lorsque je télécharge un dossier et ses PJs, les \t deviennent des ?
Co-authored-by: colin@darie.eu
2023-10-31 17:05:14 +01:00
Martin
b83975869c tech(maintenance): ajoute une maintenance_task pour ajouter des champs manquant a un dossier 2023-10-31 16:42:35 +01:00
Paul Chavard
f6c051e08e
Merge pull request #9654 from colinux/improve-autocomplete-style
Usager: légères harmonisations visuelles de la combobox
2023-10-30 17:47:24 +00:00
Lisa Durand
1de9130ab5 fix not displaying select on page close procedure and make the 2 buttons redirect to this page 2023-10-30 15:02:26 +01:00
Colin Darie
04d40ede43 style(combobox): fix height of fake input/select 2023-10-30 11:34:38 +01:00
Colin Darie
bade4edcc7 style(combobox): fix spacing between label/hint & input 2023-10-30 11:20:04 +01:00
Colin Darie
8c6489fae2
Merge pull request #9652 from colinux/fix-dropdown-other-markup
Usager: fix alignement du champ "autre" des listes de choix
2023-10-30 10:19:40 +00:00
Colin Darie
c4272e3bac
fix(dropdown-other): other input alignement/markup 2023-10-30 11:05:27 +01:00
krichtof
0daeca14e4
Merge pull request #9649 from demarches-simplifiees/9642-filter-dept
En tant qu'admin, je peux filtrer les démarches par département
2023-10-30 09:14:41 +00:00
Paul Chavard
f95bd74e74
Merge pull request #9651 from tchak/fix-select-other
fix(drop_down_list): fix other option with combobox and some cleanup
2023-10-30 08:55:03 +00:00
Paul Chavard
d76123831c fix(drop_down_list): fix other option with combobox and some cleanup 2023-10-27 18:11:26 +02:00
krichtof
62d2522300
display departement name filter, not only code
Co-authored-by: Paul Chavard <paul.chavard@beta.gouv.fr>
2023-10-27 17:27:50 +02:00
krichtof
4a698f8264
Merge pull request #9616 from demarches-simplifiees/9525-remove-admin-from-manager
ETQ superadmin, je peux supprimer un admin depuis le manager
2023-10-27 12:21:23 +00:00
Christophe Robillard
ef4113f8f9 filter all demarches by departement 2023-10-27 14:15:03 +02:00
Colin Darie
f8a6b634d9
Merge pull request #9650 from colinux/fix-super-admin-2fa-reset-password
Sécurité/2FA: ne connecte pas automatiquement un super-admin après réinitialisation du mot de passe
2023-10-27 09:52:27 +00:00
Colin Darie
19ffb43686 fix(security): don't automatically sign in after reset password when 2FA is enabled 2023-10-27 11:39:33 +02:00
Colin Darie
197866159c chore(bundle): update devise 4.9.2 => 4.9.3 2023-10-27 11:26:37 +02:00
Christophe Robillard
97ff31f60f update departement after getting etablissement_infos 2023-10-27 10:00:52 +02:00
krichtof
7da2e2f073
Merge pull request #9647 from demarches-simplifiees/9642-add-dept-services
tech: ajoute le departement aux services
2023-10-26 15:17:01 +00:00
seb-by-ouidou
78c487d512 fix: add schema modification 2023-10-26 11:39:46 +00:00
seb-by-ouidou
528c51cb5e feat: US4.3.9 children management 2023-10-26 10:46:18 +00:00
Paul Chavard
9ea59814ad
Merge pull request #9646 from tchak/graphql-fix-pagination-preloader
fix(graphql): fix preloader with pagination
2023-10-26 09:54:36 +00:00
Paul Chavard
bd5356c9b6
Merge pull request #9565 from adullact/feature-ouidou/admin_creation_delegation_gestionnaire_page_group_gestionnaire_management
Feature ouidou/admin creation delegation gestionnaire page group gestionnaire management
2023-10-26 09:51:44 +00:00
Paul Chavard
fbf2cfae50 fix(graphql): fix preloader with pagination 2023-10-26 11:43:19 +02:00
Christophe Robillard
4130529854 backfill departement services 2023-10-26 11:36:58 +02:00
Christophe Robillard
42d3052c4f convert code_insee to departement 2023-10-26 11:34:55 +02:00
Colin Darie
e7fc8661d5
Merge pull request #9644 from tchak/graphql-fix-pagination-with-order-desc
fix(graphql): fix pagination with order desc
2023-10-26 09:10:48 +00:00
Paul Chavard
33f5a553b6 fix(graphql): fix pagination with order desc 2023-10-26 10:52:18 +02:00
mfo
9866acc0f8
Merge pull request #9624 from mfo/US/dossier.export.pdf
amelioration(dossier.pdf): pour les champs de type Champs::AddressChamp, ajoute le code insee de la commune sous l'adresse complete
2023-10-26 06:34:30 +00:00
Christophe Robillard
2b061dc2aa add departement_to_services migration 2023-10-25 18:41:03 +02:00
krichtof
1974e35a66
Merge pull request #9636 from demarches-simplifiees/9530-remove-piece-jointe
can reset file input in messagerie
2023-10-25 10:24:43 +00:00
Paul Chavard
c60494c975 refactor to use event delegation 2023-10-25 12:04:12 +02:00
mfo
b9b9569852
Merge pull request #9639 from mfo/US/fix-missing-autosave-end-for-file-upload
correctif(upload): ETQ usager, lorsque j'upload un fichier, ca bloquele bouton pour deposer un dossier
2023-10-25 09:02:11 +00:00
Martin
cf8fb9195e correctif(upload): ETQ usager, lorsque j'upload un fichier, ca bloque le bouton pour deposer un dossier 2023-10-25 10:46:15 +02:00
Christophe Robillard
00e3d33ba4 can reset file input in messagerie 2023-10-25 09:52:49 +02:00
mfo
53259b733b
Merge pull request #9626 from tchak/tiptap_service
feat(attestation): add tiptap json to html converter
2023-10-25 07:24:32 +00:00
Martin
2295d64300 amelioration(dossier.pdf): pour les champs de type Champs::AddressChamp, ajoute le code insee de la commune sous l'adresse complete, ajoute le code postal, ajoute le departemenent et son code. Pour les champs de type Champs::CommuneChamp ajoute le code postal de la commune 2023-10-25 09:22:35 +02:00
mfo
ebea269f79
Merge pull request #9420 from mfo/US/chorus-tile
amelioration(tuile.chorus): ETQ admin, je peux saisir le cadre budgetaire d'une demarche de subvention pour faciliter le rapprochement d'un export DS a un export Chorus
2023-10-24 12:57:26 +00:00
Colin Darie
5d3d4cbd91
Merge pull request #9634 from colinux/fix-regex-timeout
Sécurité (champ regex): timeout plus agressif à 1 seconde
2023-10-24 12:37:58 +00:00
mfo
3487a5f328
Merge pull request #9635 from mfo/US/fix-reactivate-procedure-with-date-cloture-in-past
correctif(procedure.edit): le fixed-footer venait en sur-elevation des options avancées la ou il etait présent
2023-10-24 13:46:13 +02:00
Martin
79b5b25720 correctif(procedure.edit): le fixed-footer venait en sur-elevation des options avancées la ou il etait présent 2023-10-24 13:35:08 +02:00
Colin Darie
d87c7ca424 fix(scss): fix remaining comma which leads to invalid css 2023-10-24 12:54:39 +02:00
Colin Darie
7aa0c7d0e8 style(champ regex): shows delimiter as hint: they don't have to be filled 2023-10-24 12:53:43 +02:00
Colin Darie
f4e3d2137b fix(champ regex): same timeout across validations, and more agressive value 2023-10-24 10:30:12 +02:00
mfo
9b96ff5d93
Merge pull request #9633 from mfo/US/update-decimal-number-champ-format
amelioration(wording): met a jour le hint des decimal_number_champ car on utilise les `.` en lieu et place des `,`
2023-10-24 08:04:32 +00:00
Martin
8a8970f999 amelioration(wording): met a jour le hint des decimal_number_champ car on utilise les . en lieu et place des , 2023-10-24 09:39:31 +02:00
mfo
dbd0e82b09
Merge pull request #9632 from tchak/fix-decimal-bis
fix(decimal_champ): only remove dots if coma also present
2023-10-23 17:03:50 +02:00
Paul Chavard
d01cc76970 fix(decimal_champ): only remove dots if coma also present 2023-10-23 16:46:07 +02:00
mfo
81ccc8ace2
Merge pull request #9630 from tchak/fix-champ-address
fix(address): champ address should allow custom values
2023-10-23 13:23:59 +00:00
Paul Chavard
566b6b186e
Merge pull request #9628 from tchak/fix-departement-epci
fix(epci): do not show let select departements with no epci
2023-10-23 10:53:16 +00:00
Paul Chavard
045b4942d9 fix(epci): do not show let select departements with no epci 2023-10-23 12:41:24 +02:00
Paul Chavard
cf3249dba5 fix(address): champ address should allow custom values 2023-10-23 12:35:19 +02:00
Lisa Durand
a6842e8484
Merge pull request #9603 from demarches-simplifiees/design-admin-form-move-button-to-sticky-footer
[admin] Rendre les boutons d'actions de la page "création du formulaire" et "annotations" plus visibles
2023-10-23 09:13:47 +00:00
Paul Chavard
09ce6ee1c8 feat(attestation): add tiptap json to html converter 2023-10-21 12:08:12 +02:00
Kara Diaby
9e2662cb34
Merge pull request #9622 from demarches-simplifiees/fix-regexp-type-de-champ
Fix type de champ expression_reguliere
2023-10-20 09:14:34 +00:00
Kara Diaby
60fcb51533 affiche le message d'erreur entré par l'administrateur 2023-10-20 08:59:12 +00:00
mfo
0922e0987a review(maj): strip la valeur recherché sur les api chorus avant de le soumettre à l'API, et quelques maj de style
Co-authored-by: Colin Darie <colin@darie.eu>
2023-10-20 07:07:53 +02:00
Kara Diaby
3c172e1115 Supprime du code mort 2023-10-19 23:21:54 +00:00
Paul Chavard
9ad2c4358a
Merge pull request #9584 from tchak/maintenance_tasks
use maintenance tasks gem
2023-10-19 16:07:17 +00:00
Lisa Durand
48ee575990 fix specs 2023-10-19 17:59:16 +02:00
krichtof
7ae66d0360
Merge pull request #9613 from demarches-simplifiees/8742-effectifs
tech: utilise l'api entreprise v3 pour récupérer les effectifs mensuels et annuels
2023-10-19 14:46:10 +00:00
Paul Chavard
03dd6218f8 fix(editor): always render add champ button 2023-10-19 15:43:35 +02:00
mfo
8a4299ade1
Merge pull request #9610 from mfo/US/fix-missing-champs
correctif(data): tâche rake recréant les champs manquant à un dossier ayant subi une perte de données
2023-10-19 09:49:35 +00:00
Martin
ec2e03f24e amelioration(data_fixer/dossier_champs_missing): ajoute du log 2023-10-19 11:37:51 +02:00
Martin
70c54808fa amelioration(datafixer.DossierChampsMissing): prends aussi en compte les champs manquant dans une repetition 2023-10-19 11:25:10 +02:00
Colin Darie
befb875318
Merge pull request #9618 from tchak/fix-search-deleted-dossiers
fix(search): show a message if searching for deleted dossier
2023-10-19 08:37:06 +00:00
Colin Darie
682b4e92cc
Merge pull request #9619 from demarches-simplifiees/dependabot/npm_and_yarn/babel/traverse-7.23.2
chore(deps): bump @babel/traverse from 7.20.12 to 7.23.2
2023-10-19 08:03:37 +00:00
dependabot[bot]
bd19e237f6 chore(deps): bump @babel/traverse from 7.20.12 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.12 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 09:53:25 +02:00
Martin
a4ef3cdf23 tech(ActiveModel.types.json): renomme en simple_json pour eviter la confusion avec ActiveRecord.types.json 2023-10-19 09:30:52 +02:00
Martin
ffdd7ee95d tech(APIBretagneService.clean): l'API de data.bretagne renvoie un vide quand il n'y a pas de resultat, change l'implem pour ce cas 2023-10-19 09:30:52 +02:00
Christophe Robillard
1869d6b910 bugfix: have to repeatedly press confirm button when removing accounts 2023-10-19 09:14:44 +02:00
Christophe Robillard
0b7d4452fd remove admin from manager 2023-10-19 09:14:44 +02:00
Martin
3495147045 tech(APIBretagneService.clean): renvoie un tableau vide tant que la recherche ne fait pas plus de 2 caractères 2023-10-19 08:47:48 +02:00
Martin
857c1f0c21 amelioration(ChorusComponent): ameliore le rendu de la tuile si celle ci n'est que partiellement rempli 2023-10-19 07:31:14 +02:00
Martin
9c2e8d266c fixup! amelioration(procedure.chorus): ajoute la tuile chorus quand cette fonction est active sur la procedure 2023-10-19 07:14:27 +02:00
Martin
ecb3909e99 chorus(autocomplete): autocomplete sur le centre de cout, domaine fonctionnel, referentiel de programmation 2023-10-19 07:14:27 +02:00
Martin
df78e14469 amelioration(procedure.chorus): ajoute le service pour requeter les api chorus fournies par la bretagne 2023-10-19 07:14:27 +02:00
Martin
87f435d2d3 amelioration(procedure.chorus): ajoute le form component pour le 'crud' du ChorusConfiguration 2023-10-19 07:14:27 +02:00
Martin
d8f50700fc tech(model.procedure): ajoute une a la table procedures la colonne chorus (jsonb) 2023-10-19 07:14:27 +02:00
Martin
fea0cb1c60 amelioration(procedure.chorus): connecte la tuile a un controller basique ayant les ACL 2023-10-19 07:14:27 +02:00
Martin
7d7a741a1a amelioration(procedure.chorus): ajoute la tuile chorus quand cette fonction est active sur la procedure 2023-10-19 07:14:27 +02:00
Martin
758b739aa3 amelioration(procedure.chorus): ajoute le feature flag chorus aux procedure pour activer/desactiver cette nouvelle feature 2023-10-19 07:14:27 +02:00
mfo
5ad724a4cb
Merge pull request #9617 from mfo/US/move_low_priority_email_in_low_priority_queue
amelioration(email): passe les jobs non prioritaire [appelons ça des bulk email], dans la queue de low_priority
2023-10-19 03:25:57 +00:00
Martin
b69d4baaa2 amelioration(email): passe les jobs non prioritaire [appelons ça des bulk email], dans la queue de low_priority 2023-10-18 17:08:43 +02:00
Eric Leroy-Terquem
dac7292618
Merge pull request #9614 from demarches-simplifiees/add-communes-epci-and-regions-to-conditional
ETQ admin je peux conditionner sur les champs communes, EPCI et région
2023-10-18 12:18:12 +00:00
Paul Chavard
6ff2287a2d
Merge pull request #9387 from tchak/graphql-pagination-fix
fix(graphql): implement real cursor pagination
2023-10-18 11:14:11 +00:00
Paul Chavard
a43176b2d6 fix lint 2023-10-18 13:02:59 +02:00
simon lehericey
071167da96 remove methods 2023-10-18 13:01:07 +02:00
simon lehericey
6a02e670aa use new methods 2023-10-18 13:01:07 +02:00
simon lehericey
b37f2c6825 add next_page? 2023-10-18 13:01:07 +02:00
simon lehericey
137c19cce8 add previous_page? 2023-10-18 13:01:07 +02:00
simon lehericey
17aab9c891 add limit_and_inverted method 2023-10-18 13:01:07 +02:00
simon lehericey
ce5cd63ed2 comment 2023-10-18 13:01:07 +02:00
simon lehericey
1bb4d3cf17 remove useless assignment 2023-10-18 13:01:07 +02:00
simon lehericey
dbe67aaf18 default_page <= max_page_size 2023-10-18 13:01:07 +02:00
simon lehericey
c5899f2c46 extract limit and expected_size 2023-10-18 13:01:07 +02:00
simon lehericey
311c9215cd extract ensure_valid_params 2023-10-18 13:01:07 +02:00
simon lehericey
0dd68ab73d add comments 2023-10-18 13:01:07 +02:00
Paul Chavard
82322e8874 chore(breakman): ignore injection warnings – table and column names com from our code not user input 2023-10-18 13:01:07 +02:00
Paul Chavard
71d5470100 fix(graphql): implement real cursor pagination 2023-10-18 13:01:07 +02:00
Paul Chavard
29980ab130 fix(search): show a message if searching for deleted dossier 2023-10-18 12:55:10 +02:00
Lisa Durand
5a11ef783a change wording for button 'continue' 2023-10-18 10:36:39 +02:00
Paul Chavard
563c47c88c
Merge pull request #9600 from tchak/update-browsers
chore(browser): show browser outdated message to more (very) old browsers
2023-10-18 08:03:44 +00:00
seb-by-ouidou
3c5e76e705 feat: US4.3 update and delete groupe gestionnaire 2023-10-18 09:51:04 +02:00
Christophe Robillard
d98c4faf94 explain more precisely effectifs 2023-10-17 13:48:46 +02:00
Christophe Robillard
0f1e243b01 use api entreprise v3 for effectifs annuels 2023-10-17 13:48:46 +02:00
Christophe Robillard
e5d0d7dda2 get most fresh info for effectifs mensuels 2023-10-17 13:48:46 +02:00
Christophe Robillard
81f78c62b4 use api entreprise v3 for effectifs mensuels 2023-10-17 13:48:46 +02:00
Lisa Durand
c88e6ab75c fix specs 2023-10-17 12:25:58 +02:00
Eric Leroy-Terquem
ab0bb456bc feat(conditional): can condition on commune champ value 2023-10-17 11:51:45 +02:00
Eric Leroy-Terquem
422a22e14b feat(conditional): can condition on epci champ value 2023-10-17 11:51:45 +02:00
Eric Leroy-Terquem
90524cb541 feat(conditional): can condition on region champ value 2023-10-17 11:51:45 +02:00
Kara Diaby
870efba29b
Merge pull request #9535 from demarches-simplifiees/feat/9411
ETQ administrateur, je veux pouvoir valider des champs avec des règles simples (Regexp)
2023-10-17 09:11:32 +00:00
Lisa Durand
f8c6080292
Merge pull request #9597 from demarches-simplifiees/display-rna-info-for-user-ldu
[amélioration] Affichage de plus d'info RNA coté usager + amélioration affichage coté instructeur/usager
2023-10-17 08:35:52 +00:00
Martin
2879c27fbe bigup(colinux): merci pour le support au debug et les datas
Co-authored-by: Colin Darie <colin@darie.eu>
2023-10-16 17:38:50 +02:00
Martin
95bdcc986e refactor(renomme): deplace le phone_fixer.rb dans un repertoire dedié aux fix de data en prod 2023-10-16 17:25:06 +02:00
Martin
9527d19ae7 amelioration(data_fixer.rake): ajoute la tache pour fixer les champs manquant a un dossier 2023-10-16 17:20:17 +02:00
Martin
e31347d1bf refactor(deplacement): renomme le phone_fixer.rake en un data_fixer.rake pour corriger les données de prod 2023-10-16 17:19:31 +02:00
Martin
8069c5bb7c correctif(data): ajoute une classe pour ajouter les champs manquant a des dossiers qui ont subit une perte de donnée supposant qu'une race-condition sur le dossier.merge(fork) puisse detruire des champs 2023-10-16 17:18:10 +02:00
Paul Chavard
69651f4b55
Merge pull request #9606 from demarches-simplifiees/fix-routage-doc-link
Correction du lien vers la doc du routage
2023-10-16 15:07:30 +00:00
Paul Chavard
c72c7bc957
Merge pull request #9607 from tchak/fix-decimal-number-input
fix(dossier): remove extra input event on page load
2023-10-16 15:02:31 +00:00
Lisa Durand
75c155c284 fix displaying add field button with turbo 2023-10-16 17:02:24 +02:00
Paul Chavard
5bf0d3ed54
Merge pull request #9608 from tchak/fix-api-client
fix(api_client): fix some edge cases
2023-10-16 14:50:51 +00:00
Paul Chavard
63303e51f8 fix(dossier): improuve decimal field formatting 2023-10-16 16:50:07 +02:00
Martin
86b44cd0a4 iamelioration(champ.expression_reguliere): empeche le rebase lorsqu'il y a un changement sur un type de champ expression reguliere.
Plus quelques adaptation de style cf: pas besoin d'executer la validation du champs expression reguliere dans controller, le validateur le fait sur le champ au moment de sauver le dossier avec le bon context
2023-10-16 11:52:05 +00:00
Paul Chavard
2286759b5f fix(api_client): fix some edge cases 2023-10-16 13:36:06 +02:00
Martin
30bc4aa5d3 amelioration(champ.expression_reguliere): pas besoin d'executer la validation du champs expression reguliere dans controller, le validateur le fait sur le champ au moment de sauver le dossier avec le bon context 2023-10-16 08:53:52 +00:00
Kara Diaby
1d66b47300 Prend en charge les révisions sur les démarches 2023-10-16 08:53:52 +00:00
Kara Diaby
5b08f54665 Ajoute les changements à l'API 2023-10-16 08:53:52 +00:00
Kara Diaby
4145f25210 Ajoute le feature flag sur le nouveau champ expression reguliere 2023-10-16 08:53:52 +00:00
Kara Diaby
a26df43577 User : Ajoute le type de champ Expression régulière coté utilisateur 2023-10-16 08:53:52 +00:00
Kara Diaby
c22e36c35c Si l'exemple ne passe pas la regexp, la publication de la démarche est imopssible 2023-10-16 08:53:52 +00:00
Kara Diaby
9bf1c65dec Procedure Revision and tests 2023-10-16 08:53:52 +00:00
Kara Diaby
3b5bbb0779 Add new type de champ expression_reguliere with tests 2023-10-16 08:53:52 +00:00
Eric Leroy-Terquem
dbb68f29da
Merge pull request #9602 from demarches-simplifiees/fix-invalid-phones
Correction : tâche Rake pour corriger les numéros de téléphone invalides
2023-10-16 07:22:22 +00:00
Eric Leroy-Terquem
37b9420054 fix routage doc url 2023-10-13 16:15:31 +02:00
Eric Leroy-Terquem
1ecd05df54 task(phone): add task to fix invalid phones 2023-10-12 17:57:43 +02:00
Eric Leroy-Terquem
a960395edb fix(db): add phone fixer 2023-10-12 16:47:05 +02:00
Lisa Durand
2c73aa64a2 remove button from header for champs and annotations views & harmonize footer 2023-10-12 16:04:58 +02:00
Paul Chavard
8b23f2a555 chore(browser): reduce browser support scope 2023-10-12 15:28:07 +02:00
Lisa Durand
2360e5e115 fix specs 2023-10-11 16:33:45 +02:00
Lisa Durand
b125f921ea harmonize rna display for instructeur and usager - add grey card like siret 2023-10-11 12:14:00 +02:00
Paul Chavard
7a01889563 use maintenance tasks gem 2023-10-10 15:11:08 +02:00
685 changed files with 12989 additions and 2733 deletions

View file

@ -0,0 +1,42 @@
name: Rails Schema Check
on:
push:
branches: [main]
paths:
- 'db/migrate/**'
- 'db/schema.rb'
pull_request:
branches: [main]
paths:
- 'db/migrate/**'
- 'db/schema.rb'
jobs:
check-migration-and-schema:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 2 # Fetch the last 2 commits to be able to compare with the base branch
- name: Check for migration and schema.rb changes
run: |
#!/bin/bash
set -e
latest_migration_file=$(ls -v db/migrate/*.rb | tail -n 1)
latest_migration_version=$(basename $latest_migration_file | grep -oE '^[0-9]+')
# Get the schema version, without underscores
schema_version=$(grep -oE 'define.version: [0-9_]+' db/schema.rb | cut -d ' ' -f 2 | tr -d _)
if [ "$latest_migration_version" != "$schema_version" ]; then
echo "schema.rb version does not match the latest migration version. Have you forgotten to update the schema.rb?"
echo " SCHEMA VERSION = $schema_version (config/schema.rb)"
echo " LATEST MIGRATION VERSION = $latest_migration_version ($latest_migration_file)"
exit 1
fi

View file

@ -4,7 +4,6 @@ gem 'rails', '~> 7.0.5' # allows update to security fixes at any time
gem 'aasm' gem 'aasm'
gem 'acsv' gem 'acsv'
gem 'active_link_to' # Automatically set a class on active links
gem 'active_model_serializers' gem 'active_model_serializers'
gem 'activestorage-openstack' gem 'activestorage-openstack'
gem 'active_storage_validations' gem 'active_storage_validations'
@ -12,6 +11,7 @@ gem 'addressable'
gem 'administrate' gem 'administrate'
gem 'administrate-field-enum' # Allow using Field::Enum in administrate gem 'administrate-field-enum' # Allow using Field::Enum in administrate
gem 'after_party' gem 'after_party'
gem 'ancestry'
gem 'anchored' gem 'anchored'
gem 'bcrypt' gem 'bcrypt'
gem 'bootsnap', '>= 1.4.4', require: false # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.4', require: false # Reduces boot times through caching; required in config/boot.rb
@ -58,6 +58,7 @@ gem 'listen' # Required by ActiveSupport::EventedFileUpdateChecker
gem 'lograge' gem 'lograge'
gem 'logstash-event' gem 'logstash-event'
gem 'mailjet', require: false gem 'mailjet', require: false
gem 'maintenance_tasks'
gem 'matrix' # needed by prawn and not default in ruby 3.1 gem 'matrix' # needed by prawn and not default in ruby 3.1
gem 'mini_magick' gem 'mini_magick'
gem 'net-imap', require: false # See https://github.com/mikel/mail/pull/1439 gem 'net-imap', require: false # See https://github.com/mikel/mail/pull/1439
@ -83,7 +84,9 @@ gem 'sassc-rails' # Use SCSS for stylesheets
gem 'sentry-delayed_job' gem 'sentry-delayed_job'
gem 'sentry-rails' gem 'sentry-rails'
gem 'sentry-ruby' gem 'sentry-ruby'
gem 'sentry-sidekiq'
gem 'sib-api-v3-sdk' gem 'sib-api-v3-sdk'
gem 'sidekiq'
gem 'skylight' gem 'skylight'
gem 'spreadsheet_architect' gem 'spreadsheet_architect'
gem 'strong_migrations' # lint database migrations gem 'strong_migrations' # lint database migrations

View file

@ -49,9 +49,6 @@ GEM
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_link_to (1.0.5)
actionpack
addressable
active_model_serializers (0.10.13) active_model_serializers (0.10.13)
actionpack (>= 4.1, < 7.1) actionpack (>= 4.1, < 7.1)
activemodel (>= 4.1, < 7.1) activemodel (>= 4.1, < 7.1)
@ -100,6 +97,8 @@ GEM
administrate (~> 0.12) administrate (~> 0.12)
aes_key_wrap (1.1.0) aes_key_wrap (1.1.0)
after_party (1.11.2) after_party (1.11.2)
ancestry (4.3.3)
activerecord (>= 5.2.6)
anchored (1.1.0) anchored (1.1.0)
ast (2.4.2) ast (2.4.2)
attr_required (1.0.1) attr_required (1.0.1)
@ -117,7 +116,7 @@ GEM
axlsx_styler (1.1.0) axlsx_styler (1.1.0)
activesupport (>= 3.1) activesupport (>= 3.1)
caxlsx (>= 2.0.2) caxlsx (>= 2.0.2)
bcrypt (3.1.18) bcrypt (3.1.19)
benchmark-ips (2.12.0) benchmark-ips (2.12.0)
better_html (1.0.16) better_html (1.0.16)
actionview (>= 4.0) actionview (>= 4.0)
@ -159,7 +158,7 @@ GEM
nokogiri (~> 1.10, >= 1.10.4) nokogiri (~> 1.10, >= 1.10.4)
rubyzip (>= 1.3.0, < 3) rubyzip (>= 1.3.0, < 3)
charlock_holmes (0.7.7) charlock_holmes (0.7.7)
chartkick (4.1.3) chartkick (5.0.4)
choice (0.2.0) choice (0.2.0)
chunky_png (1.4.0) chunky_png (1.4.0)
clamav-client (3.2.0) clamav-client (3.2.0)
@ -192,7 +191,7 @@ GEM
sinatra (>= 1.4.4) sinatra (>= 1.4.4)
descendants_tracker (0.0.4) descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
devise (4.9.2) devise (4.9.3)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 4.1.0) railties (>= 4.1.0)
@ -238,7 +237,7 @@ GEM
excon (0.102.0) excon (0.102.0)
factory_bot (6.1.0) factory_bot (6.1.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
ffi (1.16.2) ffi (1.16.3)
ffi-compiler (1.0.1) ffi-compiler (1.0.1)
ffi (>= 1.0.0) ffi (>= 1.0.0)
rake rake
@ -270,7 +269,7 @@ GEM
et-orbi (~> 1.1, >= 1.1.8) et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.4) raabro (~> 1.4)
geo_coord (0.2.0) geo_coord (0.2.0)
geocoder (1.6.5) geocoder (1.8.2)
globalid (1.2.1) globalid (1.2.1)
activesupport (>= 6.1) activesupport (>= 6.1)
gon (6.4.0) gon (6.4.0)
@ -278,7 +277,7 @@ GEM
i18n (>= 0.7) i18n (>= 0.7)
multi_json multi_json
request_store (>= 1.0) request_store (>= 1.0)
graphql (2.0.15) graphql (2.0.24)
graphql-batch (0.5.1) graphql-batch (0.5.1)
graphql (>= 1.10, < 3) graphql (>= 1.10, < 3)
promise.rb (~> 0.7.2) promise.rb (~> 0.7.2)
@ -291,8 +290,8 @@ GEM
bundler (>= 1.14) bundler (>= 1.14)
graphql (>= 1.10, < 3.0) graphql (>= 1.10, < 3.0)
thor (>= 0.19, < 2.0) thor (>= 0.19, < 2.0)
groupdate (5.2.2) groupdate (6.4.0)
activesupport (>= 5) activesupport (>= 6.1)
haml (6.0.5) haml (6.0.5)
temple (>= 0.8.2) temple (>= 0.8.2)
thor thor
@ -348,6 +347,8 @@ GEM
ruby-vips (>= 2.0.17, < 3) ruby-vips (>= 2.0.17, < 3)
invisible_captcha (2.0.0) invisible_captcha (2.0.0)
rails (>= 5.0) rails (>= 5.0)
job-iteration (1.4.1)
activejob (>= 5.2)
jquery-rails (4.5.1) jquery-rails (4.5.1)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
@ -396,7 +397,7 @@ GEM
railties (>= 4) railties (>= 4)
request_store (~> 1.0) request_store (~> 1.0)
logstash-event (1.2.02) logstash-event (1.2.02)
loofah (2.21.3) loofah (2.22.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.12.0) nokogiri (>= 1.12.0)
mail (2.8.1) mail (2.8.1)
@ -408,6 +409,12 @@ GEM
activesupport (>= 3.1.0) activesupport (>= 3.1.0)
rack (>= 1.4.0) rack (>= 1.4.0)
rest-client (>= 2.0.0) rest-client (>= 2.0.0)
maintenance_tasks (2.3.2)
actionpack (>= 6.0)
activejob (>= 6.0)
activerecord (>= 6.0)
job-iteration (>= 1.3.6)
railties (>= 6.0)
marcel (1.0.2) marcel (1.0.2)
matrix (0.4.2) matrix (0.4.2)
memory_profiler (1.0.0) memory_profiler (1.0.0)
@ -420,7 +427,7 @@ GEM
rake rake
mini_magick (4.11.0) mini_magick (4.11.0)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.4) mini_portile2 (2.8.5)
minitest (5.20.0) minitest (5.20.0)
msgpack (1.4.2) msgpack (1.4.2)
multi_json (1.15.0) multi_json (1.15.0)
@ -437,7 +444,7 @@ GEM
net-protocol net-protocol
netrc (0.11.0) netrc (0.11.0)
nio4r (2.5.9) nio4r (2.5.9)
nokogiri (1.15.4) nokogiri (1.15.5)
mini_portile2 (~> 2.8.2) mini_portile2 (~> 2.8.2)
racc (~> 1.4) racc (~> 1.4)
open4 (1.3.4) open4 (1.3.4)
@ -490,7 +497,7 @@ GEM
pundit (2.2.0) pundit (2.2.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.4.0) raabro (1.4.0)
racc (1.7.1) racc (1.7.3)
rack (2.2.8) rack (2.2.8)
rack-attack (6.5.0) rack-attack (6.5.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
@ -552,7 +559,7 @@ GEM
thor (~> 1.0) thor (~> 1.0)
zeitwerk (~> 2.5) zeitwerk (~> 2.5)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.0.6) rake (13.1.0)
rake-progressbar (0.0.5) rake-progressbar (0.0.5)
rb-fsevent (0.11.2) rb-fsevent (0.11.2)
rb-inotify (0.10.1) rb-inotify (0.10.1)
@ -560,12 +567,12 @@ GEM
redcarpet (3.6.0) redcarpet (3.6.0)
redis (5.0.6) redis (5.0.6)
redis-client (>= 0.9.0) redis-client (>= 0.9.0)
redis-client (0.14.1) redis-client (0.18.0)
connection_pool connection_pool
regexp_parser (2.8.1) regexp_parser (2.8.1)
request_store (1.5.0) request_store (1.5.0)
rack (>= 1.4) rack (>= 1.4)
responders (3.1.0) responders (3.1.1)
actionpack (>= 5.2) actionpack (>= 5.2)
railties (>= 5.2) railties (>= 5.2)
rest-client (2.1.0) rest-client (2.1.0)
@ -675,11 +682,19 @@ GEM
sentry-ruby (~> 5.9.0) sentry-ruby (~> 5.9.0)
sentry-ruby (5.9.0) sentry-ruby (5.9.0)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
sentry-sidekiq (5.9.0)
sentry-ruby (~> 5.9.0)
sidekiq (>= 3.0)
shoulda-matchers (4.5.1) shoulda-matchers (4.5.1)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
sib-api-v3-sdk (7.4.0) sib-api-v3-sdk (7.4.0)
json (~> 2.1, >= 2.1.0) json (~> 2.1, >= 2.1.0)
typhoeus (~> 1.0, >= 1.0.1) typhoeus (~> 1.0, >= 1.0.1)
sidekiq (7.2.0)
concurrent-ruby (< 2)
connection_pool (>= 2.3.0)
rack (>= 2.2.4)
redis-client (>= 0.14.0)
simple_xlsx_reader (1.0.4) simple_xlsx_reader (1.0.4)
nokogiri nokogiri
rubyzip rubyzip
@ -716,7 +731,7 @@ GEM
temple (0.8.2) temple (0.8.2)
terminal-table (3.0.2) terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
thor (1.2.2) thor (1.3.0)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.0.11) tilt (2.0.11)
timecop (0.9.4) timecop (0.9.4)
@ -785,7 +800,7 @@ GEM
nokogiri (~> 1.11) nokogiri (~> 1.11)
xpath (3.2.0) xpath (3.2.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
zeitwerk (2.6.11) zeitwerk (2.6.12)
zip_tricks (5.6.0) zip_tricks (5.6.0)
zipline (1.4.1) zipline (1.4.1)
actionpack (>= 6.0, < 8.0) actionpack (>= 6.0, < 8.0)
@ -799,7 +814,6 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
aasm aasm
acsv acsv
active_link_to
active_model_serializers active_model_serializers
active_storage_validations active_storage_validations
activestorage-openstack activestorage-openstack
@ -807,6 +821,7 @@ DEPENDENCIES
administrate administrate
administrate-field-enum administrate-field-enum
after_party after_party
ancestry
anchored anchored
axe-core-rspec axe-core-rspec
bcrypt bcrypt
@ -864,6 +879,7 @@ DEPENDENCIES
lograge lograge
logstash-event logstash-event
mailjet mailjet
maintenance_tasks
matrix matrix
memory_profiler memory_profiler
mina mina
@ -908,8 +924,10 @@ DEPENDENCIES
sentry-delayed_job sentry-delayed_job
sentry-rails sentry-rails
sentry-ruby sentry-ruby
sentry-sidekiq
shoulda-matchers shoulda-matchers
sib-api-v3-sdk sib-api-v3-sdk
sidekiq
simple_xlsx_reader simple_xlsx_reader
skylight skylight
spreadsheet_architect spreadsheet_architect

View file

@ -19,6 +19,11 @@ Vous souhaitez y apporter des changements ou des améliorations ? Lisez notre [
- postgresql - postgresql
- imagemagick et gsfonts pour générer les filigranes sur les titres d'identité. - imagemagick et gsfonts pour générer les filigranes sur les titres d'identité.
nous sommes en cours de migration de delayed_job vers sidekiq pour le traitement des jobs asynchrones.
pour faire tourner sidekiq, vous aurez besoin de
- redis
#### Développement #### Développement
- rbenv : voir https://github.com/rbenv/rbenv-installer#rbenv-installer--doctor-scripts - rbenv : voir https://github.com/rbenv/rbenv-installer#rbenv-installer--doctor-scripts

View file

@ -4,3 +4,5 @@
//= link administrate/application.css //= link administrate/application.css
//= link administrate/application.js //= link administrate/application.js
//= link manager.css //= link manager.css
//= link attestation.css
//= link_tree ../../../node_modules/@gouvfr/dsfr/dist/artwork

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-prefix="fas" data-icon="arrows-alt-v" class="svg-inline--fa fa-arrows-alt-v fa-w-8 fa-lg" width="32" height="32"><path d="M19.04 20.763h-1.656v-9.526h1.656c.768 0 2.494.242.61-1.6l-3.094-3.362a.815.815 0 0 0-1.22 0l-3.093 3.361c-1.643 1.831-.159 1.6.61 1.6h1.655v9.527h-1.655c-.769 0-2.235-.244-.61 1.6l3.093 3.362a.815.815 0 0 0 1.22 0l3.094-3.361c1.884-1.795.158-1.6-.61-1.6z" fill="currentColor"/><rect width="9" height="2" y="11" ry=".402"/><rect ry=".402" y="19" height="2" width="9"/><rect width="9" height="2" y="15" ry=".402"/><rect ry=".402" y="11" x="23" height="2" width="9"/><rect width="9" height="2" x="23" y="19" ry=".402"/><rect ry=".402" y="15" x="23" height="2" width="9"/></svg>

Before

Width:  |  Height:  |  Size: 761 B

View file

@ -0,0 +1,71 @@
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 252 90'>
<defs>
<symbol id='a' viewBox='0 0 11 15.5'>
<path d='M10.4 5.3C11.9 1.5 10.1 0 7.9 0 4.2 0 0 6.5 0 11.7c0 2.5 1.2 3.8 3 3.8 2.1 0 4.3-2 6.2-5.5h-1c-1.2 1.5-2.6 2.6-3.9 2.6-1.3 0-2-.8-2-2.6a10.7 10.7 0 01.3-2.2zm-4-3.1c1.1 0 2 .8 1.5 2.6L3.1 6.1c.8-2.2 2.2-4 3.4-4z' />
</symbol>
<symbol id='b' viewBox='0 0 12.4 21.8'>
<use width='11' height='15.5' y='6.4' href='#a' />
<path d='M7.9 4.7L12.4.6V0h-3L6.7 4.7H8z' />
</symbol>
<symbol id='c' viewBox='0 0 11.5 19'>
<path d='M1.7 5.7h2.6L.1 17.1a1.3 1.3 0 001.2 2c3 0 6.4-2.6 7.8-6.2h-.7a9.4 9.4 0 01-5.1 3.5L7 5.7H11l.5-1.6H7.7L9 0H7.6L4.9 4.1l-3.2.4v1.2z' />
</symbol>
<symbol id='d' viewBox='0 0 9.8 21.9'>
<path d='M7.6 8c.3-1-.4-1.6-1-1.6-2.2 0-5 2.1-6 5h.7A5.6 5.6 0 014.4 9L.1 20.3a1.1 1.1 0 001 1.6c2.2 0 4.7-2 5.8-5H6A5.6 5.6 0 013 19.5zM8 3.7a1.8 1.8 0 001.8-1.8A1.8 1.8 0 008 0a1.8 1.8 0 00-1.8 1.8A1.8 1.8 0 008 3.6' />
</symbol>
<symbol id='e' viewBox='0 0 14.8 15.5'>
<path d='M3.3 3.1c.7 0 1 1 0 3.4l-3 6.8c-.7 1.3 0 2.2 1.2 2.2a1.3 1.3 0 001.5-1l3-8C7.4 4.8 10 3 11 3s.8.6.3 1.6l-4.6 9a1.3 1.3 0 001.1 1.9c2.3 0 5-2 6-5h-.6A5.6 5.6 0 0110 13l4-8a6.1 6.1 0 00.8-2.8A2 2 0 0012.6 0c-2 0-3.6 2.2-6 5V2.8C6.6 1.4 6.1 0 4.8 0 3.2 0 1.8 2.5.7 4.9h.7c.7-1.1 1.3-1.8 2-1.8' />
</symbol>
<symbol id='f' viewBox='0 0 12 15.5'>
<path d='M11.8 3.5c.5-1.9.2-3.5-1.2-3.5-1.8 0-2.3 1.2-4 5V2.8C6.5 1.3 6 0 4.6 0 3.1 0 1.7 2.5.5 5h.8C2 3.7 2.8 3 3.3 3c.7 0 1 1 0 3.4l-3 6.8c-.7 1.3 0 2.1 1.2 2.1a1.3 1.3 0 001.5-1l3-8a50.3 50.3 0 012.6-3h3.2z' />
</symbol>
<symbol id='g' viewBox='0 0 14.7 16.2'>
<path d='M10.5 13.1c-.6 0-1-1 0-3.4L14.6.1 13.4 0l-1.3 1.3h-.3C6.1 1.3 0 8.6 0 14.2a2 2 0 002.1 2.1c1.7 0 3.3-2.4 5.2-5l-.1 1c-.3 2.6.6 4 2 4 1.5 0 3-2.4 4-4.9h-.7c-.7 1.1-1.5 1.8-2 1.8zM7.9 9.8c-1.3 1.6-3.4 3.5-4.3 3.5-.5 0-.9-.5-.9-1.6 0-3.5 4-8.2 6-8.2a4.2 4.2 0 011.4.2z' />
</symbol>
<symbol id='h' viewBox='0 0 21.9 19.8'>
<path d='M11.2 19.8l.3-.9c-3.8-.7-4.3-.7-2.7-4.8l1.4-3.9h3c1.9 0 1.9.9 1.6 3h1l2.6-6.9h-1c-1 1.6-1.8 2.9-3.8 2.9h-3l2-5.6c.8-2 1.1-2.4 3.7-2.4h.7c2.6 0 3 .7 3 3.5h1l.9-4.7H7.3L7 .9c3 .6 3.3.9 2 4.8L5.7 14c-1.5 3.9-2 4.2-5.5 4.8l-.3.9z' />
</symbol>
<symbol id='i' viewBox='0 0 10.1 21.9'>
<path d='M2.9 19.4L10.1.3 9.8 0l-5 .6v.6l1 .7c.9.7.6 1.3-.2 3.4L.2 19.9a1.3 1.3 0 001.1 2c2.3 0 4.7-2.1 5.8-5h-.7a6.5 6.5 0 01-3.5 2.5' />
</symbol>
<symbol id='j' viewBox='0 0 18 22'>
<path d='M18 .6h-4.3a3.8 3.8 0 00-2.1-.6A6.6 6.6 0 005 6.5a3.3 3.3 0 003 3.6c-1.9.8-3 1.8-3 2.9a1.7 1.7 0 00.9 1.5c-4.3 1.3-6 2.8-6 4.7 0 2 2.6 2.8 5.6 2.8 5.3 0 9.6-2.7 9.6-5.1 0-1.8-1.6-2.5-4.3-3.3-2.2-.7-3.2-.8-3.2-1.6A2.4 2.4 0 019 10.2a6.6 6.6 0 006.1-6.5 4.5 4.5 0 00-.2-1.5h2.5zM9.8 16.2c2.1.7 3 1 3 1.6 0 1.4-2 2.5-5.6 2.5-2.7 0-4-.6-4-2 0-1.5 1.4-2.5 3.5-3.3a21.5 21.5 0 003 1.2zM9 9c-1 0-1.3-.8-1.3-1.7 0-2.8 1.4-6.2 3.5-6.2 1 0 1.3.8 1.3 1.6 0 2.9-1.4 6.3-3.5 6.3z' />
</symbol>
<symbol id='k' viewBox='0 0 23 25.1'>
<path d='M14.3 15.6c1.9 0 2 .8 1.6 2.8H17l2.5-6.8h-1c-1 1.6-1.7 2.9-3.8 2.9h-4.1l2-5.6c.7-2 1-2.4 3.7-2.4H18c2.6 0 3 .7 3 3.5h1l.9-4.7H7.3l-.3.9c3 .6 3.3.9 2 4.8l-3.2 8.4c-1.5 3.9-2 4.2-5.6 4.8l-.2 1h17.4l3.2-5h-1.2c-2 2-4 3.8-8 3.8-4.7 0-4.3-.3-2.7-4.6l1.4-3.8h4.2zm2.3-11.8L21 .6V0h-3l-2.6 3.9h1.2v-.1z' />
</symbol>
<symbol id='l' viewBox='0 0 13.6 21.8'>
<path d='M11.4 6.4c-2 0-4 2.2-5.8 4.8L9.6.3 9.4 0l-5 .6V1l1 .8c.9.7.6 1.3-.2 3.4L.8 16.8A13.9 13.9 0 000 19c0 1.4 1.8 2.7 3.5 2.7 3.8 0 10-6.9 10-12.2 0-2.3-.5-3.2-2.1-3.2zM4.8 19.5c-.8 0-1.9-.7-1.9-1.3a15.5 15.5 0 01.8-2.2L5 12.7C6.3 11 8.4 9.3 9.6 9.3c.7 0 1.2.4 1.2 1.5 0 3.1-2.9 8.7-6 8.7z' />
</symbol>
<symbol id='m' viewBox='0 0 19.2 19.9'>
<path d='M17.6 0H7.3L7 .9c3 .6 3.3.9 2 4.8l-3.2 8.5c-1.5 3.9-2 4.2-5.5 4.8L0 20h15.7l3.5-6H18c-2 2-4.2 4.8-7.7 4.8-2.7 0-3-.5-1.6-4.5l3.1-8.5c1.4-3.9 2-4.2 5.5-4.8z' />
</symbol>
<symbol id='n' viewBox='0 0 126 90'>
<use width='12.4' height='21.8' x='112.7' y='66.1' xlink:href='#b' />
<use width='11.5' height='19' x='102.2' y='69' xlink:href='#c' />
<use width='9.8' height='21.9' x='93.6' y='66.1' xlink:href='#d' />
<use width='14.8' height='15.5' x='77.2' y='72.5' xlink:href='#e' />
<use width='12' height='15.5' x='65.7' y='72.5' xlink:href='#f' />
<use width='11' height='15.5' x='54.3' y='72.5' xlink:href='#a' />
<use width='11.5' height='19' x='43.7' y='69' xlink:href='#c' />
<use width='14.7' height='16.2' x='28.9' y='71.8' xlink:href='#g' />
<use width='12' height='15.5' x='19.6' y='72.5' xlink:href='#f' />
<use width='21.9' height='19.8' y='67.6' xlink:href='#h' />
<use width='12.4' height='21.8' x='77.3' y='33.1' xlink:href='#b' />
<use width='11.5' height='19' x='66.8' y='36' xlink:href='#c' />
<use width='9.8' height='21.9' x='58.2' y='33' xlink:href='#d' />
<use width='10.1' height='21.9' x='49.4' y='33.1' xlink:href='#i' />
<use width='14.7' height='16.2' x='34.9' y='38.8' xlink:href='#g' />
<use width='18' height='22' x='18.6' y='39.4' xlink:href='#j' />
<use width='23' height='25.1' y='29.3' xlink:href='#k' />
<use width='12.4' height='21.8' x='76.8' y='.1' xlink:href='#b' />
<use width='11.5' height='19' x='66.2' y='2.9' xlink:href='#c' />
<use width='12' height='15.5' x='54.8' y='6.5' xlink:href='#f' />
<use width='11' height='15.5' x='43.4' y='6.4' xlink:href='#a' />
<use width='13.6' height='21.8' x='29.4' y='.1' xlink:href='#l' />
<use width='9.8' height='21.9' x='20.6' xlink:href='#d' />
<use width='19.2' height='19.9' y='1.4' xlink:href='#m' />
</symbol>
</defs>
<use fill='#161616' width='126' height='90' x='0' y='0' href='#n' />
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,112 @@
@font-face {
font-family: "Marianne";
src: url("marianne-regular.ttf");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "Marianne";
src: url("marianne-bold.ttf");
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: "Marianne";
src: url("marianne-thin.ttf");
font-weight: 100; // weasy print n"accepte pas lighter
font-style: normal;
}
@page {
size: A4;
margin: 17mm 17mm 34mm; // add margin at the bottom to add address
@bottom-center {
font-size: 8pt;
content: counter(page) " / " counter(pages);
margin-top: 17mm;
}
@bottom-left {
content: element(footer);
}
}
#attestation {
@media screen {
max-width: 21cm;
padding: 17mm;
margin: 0 auto;
}
font-family: Marianne;
.header {
display: flex;
justify-content: space-between;
}
.right {
text-align: right;
}
.bloc-marque {
margin-bottom: 14mm;
}
.marianne {
height: 4.25mm;
margin-bottom: 1mm;
}
.intitule {
font-size: 12pt;
font-weight: bold;
margin: 0 0 1mm;
}
.devise {
height: 8.5mm;
margin: 0;
}
.issuer {
font-size: 10pt;
margin: 0 0 14mm; // pas sur, pour mettre une marge si issuer plus bas que date
}
.direction {
font-size: 12pt;
font-weight: bold;
margin: 0 0 23.3mm;
}
.date {
font-size: 8pt;
margin: 0 0 14mm;
}
.title {
font-size: 12pt;
font-weight: bold;
text-align: center;
margin: 0 0 12.6mm;
}
.main {
font-size: 10pt;
}
.notice {
font-size: 10pt;
font-style: italic;
}
.footer {
position: running(footer);
font-size: 7pt;
font-weight: 100;
}
}

View file

@ -0,0 +1,16 @@
#attestation-edit {
.mention {
border: 1px solid var(--text-default-grey);
padding: 8px;
}
.selected {
border: 1px solid #000000;
}
.tiptap {
padding: 8px;
min-height: 300px;
}
}

View file

@ -7,7 +7,6 @@
} }
.autosave-explanation { .autosave-explanation {
color: $dark-grey;
margin-left: 4px; margin-left: 4px;
} }

View file

@ -174,6 +174,27 @@
} }
} }
[data-fr-theme="dark"] .dropdown-content {
border: none;
background: var(--background-action-low-blue-france);
}
[data-fr-theme="dark"] .dropdown-items {
li {
&:not(.inactive) {
&:hover,
&.selected {
background: var(--background-action-low-blue-france-hover);
}
}
&.form-inside {
background-color: var(--background-action-low-blue-france);
}
}
}
.dropdown-content { .dropdown-content {
border: 1px solid $border-grey; border: 1px solid $border-grey;
background: #FFFFFF; background: #FFFFFF;
@ -226,7 +247,6 @@ ul.dropdown-items {
li { li {
display: flex; display: flex;
padding: $default-padding; padding: $default-padding;
color: $dark-grey;
border-bottom: 1px solid $border-grey; border-bottom: 1px solid $border-grey;
font-size: 12px; font-size: 12px;
min-width: 300px; min-width: 300px;
@ -293,7 +313,6 @@ ul.dropdown-items {
h4 { h4 {
font-size: 14px; font-size: 14px;
color: $black;
margin-bottom: $default-spacer; margin-bottom: $default-spacer;
} }

View file

@ -1,6 +1,12 @@
@import "colors"; @import "colors";
@import "constants"; @import "constants";
[data-fr-theme="dark"] .card {
background: none;
border: 1px solid var(--background-action-low-blue-france);
}
.card { .card {
padding: ($default-spacer * 3) ($default-spacer * 2); padding: ($default-spacer * 3) ($default-spacer * 2);
border: 1px solid $border-grey; border: 1px solid $border-grey;
@ -8,7 +14,6 @@
background: #FFFFFF; background: #FFFFFF;
.card-title { .card-title {
color: $black;
font-weight: bold; font-weight: bold;
font-size: 20px; font-size: 20px;
line-height: 1.5rem; line-height: 1.5rem;

View file

@ -3,6 +3,11 @@
$dossier-actions-bar-border-width: 1px; $dossier-actions-bar-border-width: 1px;
[data-fr-theme="dark"] .dossier-edit .dossier-edit-sticky-footer {
background-color: var(--background-action-low-blue-france);
border: none;
}
.dossier-header { .dossier-header {
.fr-container { .fr-container {
padding-bottom: $default-padding; padding-bottom: $default-padding;

View file

@ -4,21 +4,18 @@
.dossier-container { .dossier-container {
.sub-header { .sub-header {
h1 { h1 {
color: $black;
font-size: 22px; font-size: 22px;
margin-bottom: 0; margin-bottom: 0;
} }
h2 { h2 {
color: $dark-grey;
font-weight: bold; font-weight: bold;
} }
.header-actions { .header-actions {
margin-bottom: $default-spacer; margin-bottom: $default-spacer;
display: flex; display: flex;
justify-content: flex-end;
column-gap: $default-spacer * 2;
} }
} }
@ -54,3 +51,26 @@
} }
} }
} }
@media (min-width: 48em) {
.dossier-container {
.header-actions {
flex-direction: row;
justify-content: flex-end;
gap: 0 $default-spacer * 2;
}
}
}
@media (max-width: 48em) {
.dossier-container .header-actions {
flex-direction: column;
justify-content: stretch;
gap: $default-spacer * 2 0;
.dropdown-button {
min-width: 100%;
white-space: normal;
}
}
}

View file

@ -10,15 +10,6 @@ ol.fr-ol-content--override {
} }
} }
// override default transparent background on inputs & font-size to 16px by default
input,
textarea,
select,
// FIXME when DSFR is DONE
.form-ds-fr-white .fr-input {
background: $white;
font-size: 1em;
}
// with Marianne font, weight of font is less bolder, so bold it up // with Marianne font, weight of font is less bolder, so bold it up
.button.primary { .button.primary {
@ -29,6 +20,33 @@ trix-editor.fr-input {
max-height: none; max-height: none;
} }
.fr-label + .fr-ds-combobox { // same as .fr-label + .fr-input
margin-top: 0.5rem;
}
.fr-ds-combobox {
.fr-menu {
width: 100%;
.fr-menu__list {
width: 100%;
}
}
}
@media (max-width: 62em) {
.fr-ds-combobox .fr-menu .fr-menu__list {
z-index: calc(var(--ground) + 1000);
background-color: var(--background-default-grey);
--idle: transparent;
--hover: var(--background-overlap-grey-hover);
--active: var(--background-overlap-grey-active);
filter: drop-shadow(var(--overlap-shadow));
box-shadow: inset 0 1px 0 0 var(--border-open-blue-france);
}
}
// Fix firefox < 80, Safari < 15.4, Chrome < 83 not supporting "appearance: auto" on inputs // Fix firefox < 80, Safari < 15.4, Chrome < 83 not supporting "appearance: auto" on inputs
// This rule was set by DSFR for DSFR design, but broke our legacy forms. // This rule was set by DSFR for DSFR design, but broke our legacy forms.
// scss-lint:disable DuplicateProperty // scss-lint:disable DuplicateProperty
@ -120,3 +138,25 @@ button.fr-tag-bug {
align-items: flex-end; align-items: flex-end;
} }
} }
// improve readability in Windows High Contrast Mode
@media screen and (forced-colors: active) {
.fr-input,
.fr-select,
.fr-btn {
border: 2px solid var(--border-action-high-grey);
}
.fr-radio-group input[type="radio"] {
opacity: 1;
}
.fr-tabs__tab[aria-selected=true]:not(:disabled) {
border: 5px solid var(--border-action-high-grey);
}
.fr-tabs__tab {
border: 2px solid var(--border-action-high-grey);
}
}

View file

@ -252,7 +252,7 @@
} }
} }
input[type=text]:not([data-address='true']) { input[type=text]:not(.fr-input):not(.fr-select) {
border: solid 1px $border-grey; border: solid 1px $border-grey;
padding: $default-padding; padding: $default-padding;
@ -293,7 +293,7 @@
input[type=number], input[type=number],
input[type=datetime-local], input[type=datetime-local],
textarea, textarea,
input[type=tel], { input[type=tel] {
@media (max-width: $two-columns-breakpoint) { @media (max-width: $two-columns-breakpoint) {
width: 100%; width: 100%;
} }
@ -386,7 +386,6 @@
[data-reach-combobox-token] button { [data-reach-combobox-token] button {
border: solid 1px $border-grey; border: solid 1px $border-grey;
color: $black;
border-radius: 4px; border-radius: 4px;
padding: $default-spacer; padding: $default-spacer;
margin-right: $default-spacer; margin-right: $default-spacer;
@ -449,22 +448,6 @@
margin-bottom: $default-padding; margin-bottom: $default-padding;
} }
.explication-libelle {
font-weight: bold;
font-size: 20px;
margin-bottom: $default-padding;
}
.explication {
margin-bottom: $default-fields-spacer;
padding: $default-spacer;
background-color: $light-grey;
p:not(:last-child) {
margin-bottom: $default-padding;
}
}
.send-wrapper { .send-wrapper {
display: flex; display: flex;
width: 100%; width: 100%;
@ -538,6 +521,17 @@
} }
} }
.type-de-champ-expression-reguliere {
display: flex;
align-items: center;
&:before,
&:after {
font-weight: bold;
content: "/";
}
}
[data-react-component-value^="ComboMultiple"] { [data-react-component-value^="ComboMultiple"] {
margin-bottom: $default-fields-spacer; margin-bottom: $default-fields-spacer;
@ -612,6 +606,15 @@
outline-color: $light-blue; outline-color: $light-blue;
} }
[data-fr-theme="dark"] [data-reach-combobox-popover] {
border: none;
background: var(--background-action-low-blue-france);
}
[data-fr-theme="dark"] [data-reach-combobox-option]:hover {
background: var(--background-action-low-blue-france-hover);
}
[data-reach-combobox-popover] { [data-reach-combobox-popover] {
z-index: 20; z-index: 20;
} }
@ -628,14 +631,32 @@ textarea::placeholder {
color: $dark-grey; color: $dark-grey;
} }
.sticky-action-footer { @media (max-width: 62em) {
.padded-fixed-footer {
padding-top: 120px;
}
}
@media (min-width: 62em) {
.padded-fixed-footer {
padding-top: 60px;
}
}
[data-fr-theme="dark"] .fixed-footer {
border-top: 2px solid var(--background-action-low-blue-france-hover);
background-color: var(--background-action-low-blue-france);
}
.fixed-footer {
border-top: 2px solid $blue-france-500; border-top: 2px solid $blue-france-500;
position: sticky; position: fixed;
// scss-lint:disable VendorPrefix
position: -webkit-sticky; // This is needed on Safari (tested on 12.1)
// scss-lint:enable VendorPrefix
bottom: 0; bottom: 0;
padding: $default-padding 0; left: 0;
right: 0;
padding-top: $default-padding;
background-color: $white; background-color: $white;
z-index: 2; z-index: 2;
} }

View file

@ -8,7 +8,7 @@
} }
.help-dropdown-title { .help-dropdown-title {
color: $blue-france-500; font-weight: bold;
} }
.dropdown-items li.help-dropdown-service { .dropdown-items li.help-dropdown-service {

View file

@ -170,10 +170,6 @@
background-image: image-url("icons/trash.svg"); background-image: image-url("icons/trash.svg");
} }
&.move-handle {
background-image: image-url("icons/move-handle.svg");
}
&.mandatory { &.mandatory {
width: 10px; width: 10px;
} }

View file

@ -3,10 +3,6 @@
@import "mixins"; @import "mixins";
@import "placeholders"; @import "placeholders";
.landing-panel {
@include vertical-padding(60px);
}
$landing-breakpoint: 1040px; $landing-breakpoint: 1040px;
.hero-wrapper { .hero-wrapper {
@ -27,16 +23,6 @@ $landing-breakpoint: 1040px;
} }
} }
.hero-tagline {
margin-bottom: 0px;
}
.hero-tagline-em {
color: $blue-france-500;
font-style: normal;
font-weight: bold;
}
.hero-illustration { .hero-illustration {
max-width: 500px; max-width: 500px;
@ -74,7 +60,6 @@ $landing-breakpoint: 1040px;
} }
.feature-text { .feature-text {
color: #FFFFFF;
font-size: 20px; font-size: 20px;
text-align: center; text-align: center;
} }
@ -139,17 +124,7 @@ $landing-breakpoint: 1040px;
font-weight: bold; font-weight: bold;
} }
.usagers-panel,
.numbers-panel,
.cta-panel-2 {
background-color: var(--background-alt-blue-france);
}
.landing { .landing {
.more-info {
background-color: #FFFFFF;
}
.numbers { .numbers {
@extend %horizontal-list; @extend %horizontal-list;
@ -229,15 +204,6 @@ $users-breakpoint: 950px;
height: 180px; height: 180px;
} }
.cta-panel {
background-color: $blue-france-500;
color: #FFFFFF;
.fr-btn {
box-shadow: inset 0 0 0 1px var(--text-inverted-blue-france);
}
}
.role-panel-wrapper { .role-panel-wrapper {
width: 100%; width: 100%;
display: flex; display: flex;
@ -274,25 +240,6 @@ $users-breakpoint: 950px;
} }
} }
.cta-panel-title {
font-size: 24px;
font-weight: bold;
margin-top: 13px;
color: #FFFFFF;
&.grey {
color: $g700;
}
}
.cta-panel-explanation {
font-size: 22px;
margin-bottom: 10px;
&.grey {
color: $g700;
}
}
.role-administrations-image { .role-administrations-image {
text-align: right; text-align: right;

View file

@ -3,10 +3,9 @@
@import "placeholders"; @import "placeholders";
.two-columns { .two-columns {
background-color: $white;
@media (min-width: $two-columns-breakpoint) { @media (min-width: $two-columns-breakpoint) {
background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%); background: linear-gradient(to right, transparent 0%, transparent 50%, var(--background-alt-blue-france) 50%, var(--background-alt-blue-france) 100%);
} }
.columns-container { // TODO: https://github.com/betagouv/demarches-simplifiees.fr/issues/7882, once implemented, we won't need container anymore .columns-container { // TODO: https://github.com/betagouv/demarches-simplifiees.fr/issues/7882, once implemented, we won't need container anymore

View file

@ -23,7 +23,6 @@
.form [data-reach-combobox-token] button { .form [data-reach-combobox-token] button {
border: solid 1px #CCCCCC; border: solid 1px #CCCCCC;
background-color: transparent; background-color: transparent;
color: #333333;
border-radius: 4px; border-radius: 4px;
padding: 8px; padding: 8px;
margin-right: 8px; margin-right: 8px;

View file

@ -0,0 +1,64 @@
@import "colors";
$dep-nothing: #E3E3FD; // blue-france-925
$dep-small: #CACAFB; // blue-france-850
$dep-medium: #8585F6; // blue-france-625
$dep-large: #313178; // blue-france-200
$dep-xlarge: #272747; // blue-france-125
#map-svg {
max-width: 100%;
height: auto;
}
#map-infos {
min-width: 328px;
}
.departement.nothing {
fill: $dep-nothing;
}
.departement.small {
fill: $dep-small;
}
.departement.medium {
fill: $dep-medium;
}
.departement.large {
fill: $dep-large;
}
.departement.xlarge {
fill: $dep-xlarge;
}
.legends {
.legend {
width: 60px;
height: 10px;
display: inline-block;
}
.nothing {
background-color: $dep-nothing;
}
.small {
background-color: $dep-small;
}
.medium {
background-color: $dep-medium;
}
.large {
background-color: $dep-large;
}
.xlarge {
background-color: $dep-xlarge;
}
}

View file

@ -1,7 +1,6 @@
@import "colors"; @import "colors";
.menu-component-header { .menu-component-header {
color: $dark-grey;
font-size: 12px; font-size: 12px;
a { a {

View file

@ -1,12 +1,21 @@
@import "colors"; @import "colors";
@import "constants"; @import "constants";
[data-fr-theme="dark"] .message {
background: var(--background-action-low-blue-france);
&.inverted-background {
background: var(--background-action-low-blue-france);
}
}
.message { .message {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
margin-bottom: $default-padding; margin-bottom: $default-padding;
padding: $default-padding; padding: $default-padding;
background: #FFFFFF; background: $light-grey;
border-radius: 3px; border-radius: 3px;
&.inverted-background { &.inverted-background {

View file

@ -5,7 +5,6 @@
max-height: 350px; max-height: 350px;
overflow-y: scroll; overflow-y: scroll;
border: 1px solid $border-grey; border: 1px solid $border-grey;
background: $light-grey;
padding: 2 * $default-spacer; padding: 2 * $default-spacer;
margin-bottom: $default-spacer; margin-bottom: $default-spacer;
border-radius: 4px; border-radius: 4px;

View file

@ -7,3 +7,20 @@ span.notifications {
border-radius: 4px; border-radius: 4px;
background-color: $orange; background-color: $orange;
} }
.fr-tabs__list span.notifications {
z-index: 2;
top: 5px;
right: 8px;
}
.fr-nav {
&__notifiable {
position: relative;
}
.notifications {
top: 1rem;
right: 0.25rem;
}
}

View file

@ -19,7 +19,6 @@
[data-reach-combobox-token] button { [data-reach-combobox-token] button {
border: solid 1px $border-grey; border: solid 1px $border-grey;
color: $black;
margin-top: 0.5 * $default-padding; margin-top: 0.5 * $default-padding;
margin-bottom: 0.5 * $default-padding; margin-bottom: 0.5 * $default-padding;
margin-right: 0.5 * $default-padding; margin-right: 0.5 * $default-padding;

View file

@ -4,7 +4,6 @@
.types-de-champ-editor { .types-de-champ-editor {
> .types-de-champ-block { > .types-de-champ-block {
padding-bottom: 50px;
padding-left: 0; padding-left: 0;
.types-de-champ-errors { .types-de-champ-errors {
@ -26,15 +25,9 @@
box-shadow: 0px 2px 4px -4px; box-shadow: 0px 2px 4px -4px;
} }
.handle.icon { .handle {
width: 32px;
height: 32px;
background-size: 32px;
margin-left: 7px;
margin-right: 16px;
align-self: center; align-self: center;
cursor: grab; cursor: grab;
opacity: 0.8;
&:hover { &:hover {
opacity: 0.4; opacity: 0.4;
@ -76,10 +69,6 @@
display: none; display: none;
} }
&.last .type-de-champ-add-button.root {
display: none;
}
.head { .head {
select { select {
margin-bottom: 0px; margin-bottom: 0px;
@ -125,13 +114,6 @@
} }
} }
.bottom-container {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
.buttons { .buttons {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;

View file

@ -22,7 +22,6 @@
.procedure-form__column--form { .procedure-form__column--form {
flex: 10; flex: 10;
padding: 0 $default-padding; padding: 0 $default-padding;
background-color: $light-grey;
input[type=file] { input[type=file] {
background-color: transparent; // Remove white bg set by DSFR background-color: transparent; // Remove white bg set by DSFR
@ -67,6 +66,11 @@
} }
} }
[data-fr-theme="dark"] .procedure-form__actions {
background: var(--background-action-low-blue-france);
border-top: 1px solid var(--background-action-low-blue-france-hover);
}
.procedure-form__actions { .procedure-form__actions {
display: flex; display: flex;
padding: $default-spacer $default-padding; padding: $default-spacer $default-padding;

View file

@ -49,7 +49,6 @@
.stats-legend { .stats-legend {
font-size: 12px; font-size: 12px;
color: $dark-grey;
} }
} }

View file

@ -56,7 +56,6 @@
[data-reach-combobox-token] button { [data-reach-combobox-token] button {
border: solid 1px $border-grey; border: solid 1px $border-grey;
color: $black;
margin: 0.25 * $default-padding; margin: 0.25 * $default-padding;
border-radius: 2px; border-radius: 2px;
padding: 0.25 * $default-padding; padding: 0.25 * $default-padding;

View file

@ -1,26 +0,0 @@
@import "constants";
#sources-particulier-form {
h2 {
margin-bottom: 0;
}
h3 {
margin-top: 2 * $default-padding;
}
.explication {
padding: $default-padding;
ul {
list-style-type: circle;
list-style-position: inside;
padding-left: $default-padding;
margin-bottom: $default-padding;
}
}
.form input[type="checkbox"] {
margin-bottom: 0;
}
}

View file

@ -146,10 +146,11 @@ $big-number-card-padding: 2 * $segmented-control-item-border-radius;
.big-number-card-number { .big-number-card-number {
display: block; display: block;
text-align: center; text-align: center;
font-size: 90px; font-size: 80px;
line-height: 90px; line-height: 1em;
font-weight: bold; font-weight: bold;
color: $blue-france-500; color: $blue-france-500;
white-space: nowrap;
} }
.big-number-card-detail { .big-number-card-detail {

View file

@ -56,6 +56,17 @@
width: calc(100vw); width: calc(100vw);
} }
[data-fr-theme="dark"] .fr-table--bordered {
.table {
&.hoverable {
tbody tr:hover {
background-color: var(--background-action-low-blue-france);
}
}
}
}
.fr-table--bordered { .fr-table--bordered {
.table { .table {
&.hoverable { &.hoverable {

View file

@ -1,57 +0,0 @@
@import "colors";
@import "mixins";
.tabs {
ul {
margin-bottom: 0;
padding: 0;
}
li {
display: inline-block;
line-height: 36px;
position: relative;
text-align: center;
font-size: 14px;
border-radius: 3px 3px 0 0;
border: 1px solid transparent;
a {
display: block;
padding-left: 20px;
padding-right: 20px;
color: $black;
background-image: none;
}
&.active {
background-color: #FFFFFF;
border-top: 2px solid $blue-france-500;
border-left: 1px solid $border-grey;
border-right: 1px solid $border-grey;
a {
color: $blue-france-500;
}
.badge {
color: $blue-france-500;
}
}
&:hover {
a {
color: $blue-france-500;
}
.badge {
color: $blue-france-500;
}
}
.notifications {
top: 3px;
right: 3px;
}
}
}

View file

@ -2,6 +2,8 @@ class ApplicationComponent < ViewComponent::Base
include ViewComponent::Translatable include ViewComponent::Translatable
include FlipperHelper include FlipperHelper
delegate :rich_text_area_tag, to: :helpers
def current_user def current_user
controller.current_user controller.current_user
end end

View file

@ -7,7 +7,7 @@
%li{ id: dom_id(attachment) } %li{ id: dom_id(attachment) }
= render Attachment::EditComponent.new(champ:, attached_file:, attachment:, index:, as_multiple: true, view_as:, user_can_destroy:, user_can_replace:, form_object_name:) = render Attachment::EditComponent.new(champ:, attached_file:, attachment:, index:, as_multiple: true, view_as:, user_can_destroy:, user_can_replace:, form_object_name:)
%div{ id: empty_component_id, class: class_names("hidden": !can_attach_next?) } %div{ id: empty_component_id, class: class_names("hidden": !can_attach_next?), data: { turbo_force: :server } }
= render Attachment::EditComponent.new(champ:, attached_file:, attachment: nil, index: attachments_count, user_can_destroy:, user_can_replace:, form_object_name:) = render Attachment::EditComponent.new(champ:, attached_file:, attachment: nil, index: attachments_count, user_can_destroy:, user_can_replace:, form_object_name:)
// single poll and refresh message for all attachments // single poll and refresh message for all attachments

View file

@ -0,0 +1,44 @@
class Conditions::ChampsConditionsComponent < Conditions::ConditionsComponent
def initialize(tdc:, upper_tdcs:, procedure_id:)
@tdc, @condition, @source_tdcs = tdc, tdc.condition, upper_tdcs
@procedure_id = procedure_id
end
private
def logic_conditionnel_button
html_class = 'fr-btn fr-btn--tertiary fr-btn--sm'
if @condition.nil?
submit_tag(
t('.enable_conditionnel'),
formaction: add_condition_path,
class: html_class
)
else
submit_tag(
t('.disable_conditionnel'),
formmethod: 'delete',
formnovalidate: true,
data: { confirm: t('.disable_conditionnel_alert') },
class: html_class
)
end
end
def add_condition_path
add_row_admin_procedure_condition_path(@procedure_id, @tdc.stable_id)
end
def delete_condition_path(row_index)
delete_row_admin_procedure_condition_path(@procedure_id, @tdc.stable_id, row_index: row_index)
end
def input_id_for(name, row_index)
"#{@tdc.stable_id}-#{name}-#{row_index}"
end
def input_prefix
'type_de_champ[condition_form]'
end
end

View file

@ -6,7 +6,7 @@
Logique conditionnelle Logique conditionnelle
= logic_conditionnel_button = logic_conditionnel_button
= render TypesDeChampEditor::ConditionsErrorsComponent.new(conditions: condition_per_row, upper_tdcs: @upper_tdcs) = render Conditions::ConditionsErrorsComponent.new(conditions: condition_per_row, source_tdcs: @source_tdcs)
- if @condition.present? - if @condition.present?
%table.condition-table.mt-2.width-100 %table.condition-table.mt-2.width-100

View file

@ -1,11 +1,6 @@
class TypesDeChampEditor::ConditionsComponent < ApplicationComponent class Conditions::ConditionsComponent < ApplicationComponent
include Logic include Logic
def initialize(tdc:, upper_tdcs:, procedure_id:)
@tdc, @condition, @upper_tdcs = tdc, tdc.condition, upper_tdcs
@procedure_id = procedure_id
end
private private
def rows def rows
@ -20,26 +15,6 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
end end
end end
def logic_conditionnel_button
html_class = 'fr-btn fr-btn--tertiary fr-btn--sm'
if @condition.nil?
submit_tag(
t('.enable_conditionnel'),
formaction: add_row_admin_procedure_condition_path(@procedure_id, @tdc.stable_id),
class: html_class
)
else
submit_tag(
t('.disable_conditionnel'),
formmethod: 'delete',
formnovalidate: true,
data: { confirm: t('.disable_conditionnel_alert') },
class: html_class
)
end
end
def far_left_tag(row_number) def far_left_tag(row_number)
if row_number == 0 if row_number == 0
t('.display_if') t('.display_if')
@ -85,7 +60,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
end end
def available_targets_for_select def available_targets_for_select
@upper_tdcs @source_tdcs
.filter { |tdc| ChampValue::MANAGED_TYPE_DE_CHAMP.values.include?(tdc.type_champ) } .filter { |tdc| ChampValue::MANAGED_TYPE_DE_CHAMP.values.include?(tdc.type_champ) }
.map { |tdc| [tdc.libelle, champ_value(tdc.stable_id).to_json] } .map { |tdc| [tdc.libelle, champ_value(tdc.stable_id).to_json] }
end end
@ -108,7 +83,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
end end
def compatibles_operators_for_select(left) def compatibles_operators_for_select(left)
case left.type(@upper_tdcs) case left.type(@source_tdcs)
when ChampValue::CHAMP_VALUE_TYPE.fetch(:boolean) when ChampValue::CHAMP_VALUE_TYPE.fetch(:boolean)
[ [
[t('is', scope: 'logic'), Eq.name] [t('is', scope: 'logic'), Eq.name]
@ -124,7 +99,8 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
] ]
when ChampValue::CHAMP_VALUE_TYPE.fetch(:enums) when ChampValue::CHAMP_VALUE_TYPE.fetch(:enums)
[ [
[t(IncludeOperator.name, scope: 'logic.operators'), IncludeOperator.name] [t(IncludeOperator.name, scope: 'logic.operators'), IncludeOperator.name],
[t(ExcludeOperator.name, scope: 'logic.operators'), ExcludeOperator.name]
] ]
when ChampValue::CHAMP_VALUE_TYPE.fetch(:number) when ChampValue::CHAMP_VALUE_TYPE.fetch(:number)
[Eq, LessThan, GreaterThan, LessThanEq, GreaterThanEq] [Eq, LessThan, GreaterThan, LessThanEq, GreaterThanEq]
@ -138,7 +114,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
def right_operand_tag(left, right, row_index) def right_operand_tag(left, right, row_index)
right_invalid = !current_right_valid?(left, right) right_invalid = !current_right_valid?(left, right)
case left.type(@upper_tdcs) case left.type(@source_tdcs)
when :boolean when :boolean
booleans_for_select = [[t('utils.yes'), constant(true).to_json], [t('utils.no'), constant(false).to_json]] booleans_for_select = [[t('utils.yes'), constant(true).to_json], [t('utils.no'), constant(false).to_json]]
@ -160,7 +136,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
class: 'fr-select' class: 'fr-select'
) )
when :enum, :enums when :enum, :enums
enums_for_select = left.options(@upper_tdcs) enums_for_select = left.options(@source_tdcs)
if right_invalid if right_invalid
enums_for_select = empty_target_for_select + enums_for_select enums_for_select = empty_target_for_select + enums_for_select
@ -186,13 +162,13 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
end end
def current_right_valid?(left, right) def current_right_valid?(left, right)
Logic.compatible_type?(left, right, @upper_tdcs) Logic.compatible_type?(left, right, @source_tdcs)
end end
def add_condition_tag def add_condition_tag
tag.button( tag.button(
t('.add_condition'), t('.add_condition'),
formaction: add_row_admin_procedure_condition_path(@procedure_id, @tdc.stable_id), formaction: add_condition_path,
formnovalidate: true, formnovalidate: true,
class: 'fr-btn fr-btn--secondary fr-btn--sm fr-icon-add-circle-line fr-btn--icon-left' class: 'fr-btn fr-btn--secondary fr-btn--sm fr-icon-add-circle-line fr-btn--icon-left'
) )
@ -201,7 +177,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
def delete_condition_tag(row_index) def delete_condition_tag(row_index)
tag.button( tag.button(
tag.span('', class: 'icon delete') + tag.span(t('.remove_a_row'), class: 'sr-only'), tag.span('', class: 'icon delete') + tag.span(t('.remove_a_row'), class: 'sr-only'),
formaction: delete_row_admin_procedure_condition_path(@procedure_id, @tdc.stable_id, row_index: row_index), formaction: delete_condition_path(row_index),
formmethod: 'delete', formmethod: 'delete',
formnovalidate: true formnovalidate: true
) )
@ -214,12 +190,4 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
def input_name_for(name) def input_name_for(name)
"#{input_prefix}[rows][][#{name}]" "#{input_prefix}[rows][][#{name}]"
end end
def input_id_for(name, row_index)
"#{@tdc.stable_id}-#{name}-#{row_index}"
end
def input_prefix
'type_de_champ[condition_form]'
end
end end

View file

@ -1,13 +1,13 @@
class TypesDeChampEditor::ConditionsErrorsComponent < ApplicationComponent class Conditions::ConditionsErrorsComponent < ApplicationComponent
def initialize(conditions:, upper_tdcs:) def initialize(conditions:, source_tdcs:)
@conditions, @upper_tdcs = conditions, upper_tdcs @conditions, @source_tdcs = conditions, source_tdcs
end end
private private
def errors def errors
errors = @conditions errors = @conditions
.flat_map { |condition| condition.errors(@upper_tdcs) } .flat_map { |condition| condition.errors(@source_tdcs) }
.uniq .uniq
# if a tdc is not available (has been removed for example) # if a tdc is not available (has been removed for example)
@ -34,13 +34,13 @@ class TypesDeChampEditor::ConditionsErrorsComponent < ApplicationComponent
in { type: :incompatible, stable_id: nil } in { type: :incompatible, stable_id: nil }
t('not_available', scope: '.errors') t('not_available', scope: '.errors')
in { type: :unmanaged, stable_id: stable_id } in { type: :unmanaged, stable_id: stable_id }
targeted_champ = @upper_tdcs.find { |tdc| tdc.stable_id == stable_id } targeted_champ = @source_tdcs.find { |tdc| tdc.stable_id == stable_id }
t('unmanaged', t('unmanaged',
scope: '.errors', scope: '.errors',
libelle: targeted_champ.libelle, libelle: targeted_champ.libelle,
type_champ: t(targeted_champ.type_champ, scope: 'activerecord.attributes.type_de_champ.type_champs')&.downcase) type_champ: t(targeted_champ.type_champ, scope: 'activerecord.attributes.type_de_champ.type_champs')&.downcase)
in { type: :incompatible, stable_id: stable_id, right: right, operator_name: operator_name } in { type: :incompatible, stable_id: stable_id, right: right, operator_name: operator_name }
targeted_champ = @upper_tdcs.find { |tdc| tdc.stable_id == stable_id } targeted_champ = @source_tdcs.find { |tdc| tdc.stable_id == stable_id }
t('incompatible', scope: '.errors', t('incompatible', scope: '.errors',
libelle: targeted_champ.libelle, libelle: targeted_champ.libelle,
type_champ: t(targeted_champ.type_champ, scope: 'activerecord.attributes.type_de_champ.type_champs')&.downcase, type_champ: t(targeted_champ.type_champ, scope: 'activerecord.attributes.type_de_champ.type_champs')&.downcase,
@ -50,7 +50,7 @@ class TypesDeChampEditor::ConditionsErrorsComponent < ApplicationComponent
t('required_number', scope: '.errors', t('required_number', scope: '.errors',
operator: t(operator_name, scope: 'logic.operators')) operator: t(operator_name, scope: 'logic.operators'))
in { type: :not_included, stable_id: stable_id, right: right } in { type: :not_included, stable_id: stable_id, right: right }
targeted_champ = @upper_tdcs.find { |tdc| tdc.stable_id == stable_id } targeted_champ = @source_tdcs.find { |tdc| tdc.stable_id == stable_id }
t('not_included', scope: '.errors', t('not_included', scope: '.errors',
libelle: targeted_champ.libelle, libelle: targeted_champ.libelle,
right: right.to_s.downcase) right: right.to_s.downcase)
@ -67,7 +67,7 @@ class TypesDeChampEditor::ConditionsErrorsComponent < ApplicationComponent
def render? def render?
@conditions @conditions
.filter { |condition| condition.errors(@upper_tdcs).present? } .filter { |condition| condition.errors(@source_tdcs).present? }
.present? .present?
end end
end end

View file

@ -0,0 +1,28 @@
class Conditions::RoutingRulesComponent < Conditions::ConditionsComponent
include Logic
def initialize(groupe_instructeur:)
@groupe_instructeur = groupe_instructeur
@condition = groupe_instructeur.routing_rule || empty_operator(empty, empty)
@procedure_id = groupe_instructeur.procedure_id
@source_tdcs = groupe_instructeur.procedure.active_revision.types_de_champ_public
end
private
def add_condition_path
add_row_admin_procedure_routing_rule_path(@procedure_id, @groupe_instructeur.id)
end
def delete_condition_path(row_index)
delete_row_admin_procedure_routing_rule_path(@procedure_id, @groupe_instructeur.id, row_index: row_index)
end
def input_id_for(name, row_index)
"#{@groupe_instructeur.id}-#{name}-#{row_index}"
end
def input_prefix
'groupe_instructeur[condition_form]'
end
end

View file

@ -0,0 +1,6 @@
---
fr:
display_if: Router si
select: Sélectionner
add_condition: Ajouter une règle de routage
remove_a_row: Supprimer la ligne

View file

@ -0,0 +1,31 @@
.flex.justify-start.section{ id: dom_id(@groupe_instructeur, :routing_rule) }
= form_tag admin_procedure_routing_rule_path(@procedure_id, @groupe_instructeur.id),
method: :patch,
data: { turbo: true, controller: 'autosave' },
class: 'form width-100' do
.conditionnel.mt-2.width-100
.flex
- if @groupe_instructeur.invalid_rule?
%p.fr-mb-1w.fr-badge.fr-badge--warning.fr-badge--sm règle invalide
- elsif @groupe_instructeur.non_unique_rule?
%p.fr-mb-1w.fr-badge.fr-badge--warning.fr-badge--sm règle déjà attribuée à #{@groupe_instructeur.groups_with_same_rule}
= render Conditions::ConditionsErrorsComponent.new(conditions: condition_per_row, source_tdcs: @source_tdcs)
%table.condition-table.mt-2
%thead
%tr
%th.far-left
%th.target Champ Cible
%th.operator Opérateur
%th.value Valeur
%th.delete-column
%tbody
- rows.each.with_index do |(targeted_champ, operator_name, value), row_index|
%tr
%td.far-left= far_left_tag(row_index)
%td.target= left_operand_tag(targeted_champ, row_index)
%td.operator= operator_tag(operator_name, targeted_champ, row_index)
%td.value= right_operand_tag(targeted_champ, value, row_index)
%td.delete-column= delete_condition_tag(row_index)
.flex.justify-end.mt-2= add_condition_tag

View file

@ -48,6 +48,8 @@
= render partial: "shared/champs/regions/show", locals: { champ: champ } = render partial: "shared/champs/regions/show", locals: { champ: champ }
- when TypeDeChamp.type_champs.fetch(:rna) - when TypeDeChamp.type_champs.fetch(:rna)
= render partial: "shared/champs/rna/show", locals: { champ: champ, profile: @profile } = render partial: "shared/champs/rna/show", locals: { champ: champ, profile: @profile }
- when TypeDeChamp.type_champs.fetch(:rnf)
= render partial: "shared/champs/rnf/show", locals: { champ: champ, profile: @profile }
- when TypeDeChamp.type_champs.fetch(:epci) - when TypeDeChamp.type_champs.fetch(:epci)
= render partial: "shared/champs/epci/show", locals: { champ: champ } = render partial: "shared/champs/epci/show", locals: { champ: champ }
- when TypeDeChamp.type_champs.fetch(:cojo) - when TypeDeChamp.type_champs.fetch(:cojo)
@ -60,4 +62,3 @@
%p= helpers.number_with_html_delimiter(champ.to_s) %p= helpers.number_with_html_delimiter(champ.to_s)
- else - else
= helpers.format_text_value(champ.to_s.strip) # format already wrap in p = helpers.format_text_value(champ.to_s.strip) # format already wrap in p

View file

@ -12,12 +12,18 @@ class Dossiers::ErrorsFullMessagesComponent < ApplicationComponent
formated_errors = @errors.to_enum # ActiveModel::Errors.to_a is an alias to full_messages, we don't want that formated_errors = @errors.to_enum # ActiveModel::Errors.to_a is an alias to full_messages, we don't want that
.to_a # but enum.to_a gives back an array .to_a # but enum.to_a gives back an array
.uniq { |error| [error.inner_error.base] } # dedup cumulated errors from dossier.champs, dossier.champs_public, dossier.champs_private which run the validator one time per association .uniq { |error| [error.inner_error.base] } # dedup cumulated errors from dossier.champs, dossier.champs_public, dossier.champs_private which run the validator one time per association
.map { |error| to_error_descriptor(error.message, error.inner_error.base) } .map { |error| to_error_descriptor(error) }
yield(Array(formated_errors[0..2]), Array(formated_errors[3..])) yield(Array(formated_errors[0..2]), Array(formated_errors[3..]))
end end
def to_error_descriptor(str_error, model) def to_error_descriptor(error)
ErrorDescriptor.new("##{model.labelledby_id}", model.libelle.truncate(200), str_error) model = error.inner_error.base
if model.respond_to?(:libelle) # a Champ or something acting as a Champ
ErrorDescriptor.new("##{model.labelledby_id}", model.libelle.truncate(200), error.message)
else
ErrorDescriptor.new("##{model.model_name.singular}_#{error.attribute}", model.class.human_attribute_name(error.attribute), error.message)
end
end end
def render? def render?

View file

@ -17,7 +17,7 @@
- elsif commentaire.sent_by_system? - elsif commentaire.sent_by_system?
= sanitize(commentaire.body, scrubber: Sanitizers::MailScrubber.new) = sanitize(commentaire.body, scrubber: Sanitizers::MailScrubber.new)
- else - else
= render SimpleFormatComponent.new(commentaire.body, allow_a: false) = render SimpleFormatComponent.new(commentaire.body, allow_a: false, allow_autolink: commentaire.sent_by_instructeur?)
.message-extras.flex.justify-start .message-extras.flex.justify-start

View file

@ -0,0 +1,28 @@
# frozen_string_literal: true
class Dossiers::PendingCorrectionCheckboxComponent < ApplicationComponent
attr_reader :dossier
# Pass the editing fork origin, ie. dossier en construction holding the correction
def initialize(dossier:)
@dossier = dossier
end
def render?
return false unless dossier.procedure.sva_svr_enabled?
dossier.pending_correction?
end
def error? = dossier.errors.include?(:pending_correction)
def error_message
dossier.errors.generate_message(:pending_correction, :blank)
end
def check_box_aria_attributes
return unless error?
{ describedby: :dossier_pending_correction_error_messages }
end
end

View file

@ -0,0 +1,3 @@
---
en:
confirm_label: I certify that I have made all corrections requested by the administration.

View file

@ -0,0 +1,3 @@
---
fr:
confirm_label: Je certifie avoir effectué toutes les corrections demandées par ladministration.

View file

@ -0,0 +1,10 @@
.fr-checkbox-group.fr-my-3w{ class: class_names("fr-checkbox-group--error" => error?) }
= check_box_tag field_name(:dossier, :pending_correction), "1", false, form: "form-submit-en-construction", required: true, aria: check_box_aria_attributes
%label.fr-label{ for: :dossier_pending_correction }
= t('.confirm_label')
= render EditableChamp::AsteriskMandatoryComponent.new
- if error?
#dossier_pending_correction_error_messages.fr-messages-group{ aria: { live: "assertlive" } }
%p.fr-message.fr-message--error= error_message

View file

@ -1,2 +1,2 @@
= render Dsfr::ComboboxComponent.new form: @form, name: :value, url: data_sources_data_source_adresse_path, selected: @champ.value, id: @champ.input_id, class: 'fr-select', describedby: @champ.describedby_id do = render Dsfr::ComboboxComponent.new form: @form, name: :value, url: data_sources_data_source_adresse_path, selected: @champ.value, id: @champ.input_id, class: 'fr-select', describedby: @champ.describedby_id, allows_custom_value: true do
= @form.hidden_field :external_id, data: { value_slot: 'value' } = @form.hidden_field :external_id, data: { value_slot: 'value' }

View file

@ -1,21 +1,3 @@
class EditableChamp::CommunesComponent < EditableChamp::EditableChampBaseComponent class EditableChamp::CommunesComponent < EditableChamp::EditableChampBaseComponent
include ApplicationHelper include ApplicationHelper
def dsfr_champ_container
:fieldset
end
private
def commune_options
@champ.communes.map { ["#{_1[:name]} (#{_1[:postal_code]})", _1[:code]] }
end
def code_postal_input_id
"#{@champ.input_id}-code_postal"
end
def commune_select_options
{ selected: @champ.selected }.merge(@champ.mandatory? ? { prompt: '' } : { include_blank: '' })
end
end end

View file

@ -1,5 +0,0 @@
---
en:
postal_code: "Enter <strong>the postal code</strong>"
commune: "Select <strong>the municipality</strong> from the list"
not_found: No municipality found for postal code %{postal_code}. Please check that you haven't made any mistakes.

View file

@ -1,5 +0,0 @@
---
fr:
postal_code: "Renseignez le <strong>code postal</strong>"
commune: "Sélectionnez la commune dans la liste"
not_found: Aucune commune trouvée pour le code postal %{postal_code}. Verifiez que vous n'avez pas fait derreur.

View file

@ -1,23 +1,2 @@
.fr-fieldset__element.fr-mb-0 = render Dsfr::ComboboxComponent.new form: @form, name: :external_id, url: data_sources_data_source_commune_path, selected: [@champ.to_s, @champ.selected], id: @champ.input_id, class: 'fr-select', describedby: @champ.describedby_id do
.fr-input-group = @form.hidden_field :code_postal, data: { value_slot: 'data:string' }
= @form.label :code_postal, t('.postal_code').html_safe, class: 'fr-label', for: code_postal_input_id
= @form.text_field :code_postal, required: @champ.required?, id: code_postal_input_id, class: "width-33-desktop width-100-mobile small-margin fr-input"
- if @champ.code_postal?
- if commune_options.empty?
.fr-error-text.mb-4= t('.not_found', postal_code: @champ.code_postal)
.fr-fieldset__element.fr-mb-0
- if commune_options.empty?
-# noop
- elsif commune_options.size <= 3
%fieldset.fr-fieldset
.fr-fieldset__legend--regular.fr-fieldset__legend= t('.commune').html_safe
- commune_options.each.with_index do |(option, value), index|
.fr-fieldset__element
.fr-radio-group
= @form.radio_button :value, value, checked: @champ.selected == value, id: "#{code_postal_input_id}-#{value.parameterize}"
= @form.label :value, option, for: "#{code_postal_input_id}-#{value.parameterize}", class: 'fr-label'
- else
= @form.label :value, t('.commune').html_safe, for: @champ.input_id, class: 'fr-label'
= @form.select :value, commune_options, commune_select_options, required: @champ.required?, id: @champ.input_id, aria: { describedby: @champ.describedby_id }, class: "width-33-desktop width-100-mobile fr-select"

View file

@ -1 +1 @@
= @form.text_field(:value, input_opts(id: @champ.input_id, aria: { describedby: @champ.describedby_id }, required: @champ.required?, pattern: "-?[0-9]+([\.,][0-9]{1,3})?", inputmode: :decimal, data: { controller: 'format decimal-number-input', format: :decimal })) = @form.text_field(:value, input_opts(id: @champ.input_id, aria: { describedby: @champ.describedby_id }, required: @champ.required?, pattern: "-?[0-9]+([\.,][0-9]{1,3})?", inputmode: :decimal, data: { controller: 'format', format: :decimal }))

View file

@ -1,4 +1,8 @@
class EditableChamp::DropDownListComponent < EditableChamp::EditableChampBaseComponent class EditableChamp::DropDownListComponent < EditableChamp::EditableChampBaseComponent
def render?
@champ.options?
end
def select_class_names def select_class_names
class_names('width-100': contains_long_option?, 'fr-select': true) class_names('width-100': contains_long_option?, 'fr-select': true)
end end
@ -11,8 +15,12 @@ class EditableChamp::DropDownListComponent < EditableChamp::EditableChampBaseCom
@champ.render_as_radios? ? :fieldset : :div @champ.render_as_radios? ? :fieldset : :div
end end
def other_element_class_names
class_names("fr-fieldset__element" => dsfr_champ_container == :fieldset)
end
def contains_long_option? def contains_long_option?
max_length = 100 max_length = 100
@champ.options.any? { _1.size > max_length } @champ.enabled_non_empty_options.any? { _1.size > max_length }
end end
end end

View file

@ -1,33 +1,33 @@
- if @champ.options? - if @champ.render_as_radios?
- if @champ.render_as_radios? .fr-fieldset__content
.fr-fieldset__content - @champ.enabled_non_empty_options.each_with_index do |option, index|
- @champ.enabled_non_empty_options.each_with_index do |option, index| .fr-radio-group
.fr-radio-group = @form.radio_button :value, option, id: "#{@champ.id}_radio_option_#{index}"
= @form.radio_button :value, option, id: "#{@champ.id}_radio_option_#{index}" %label.fr-label{ for: "#{@champ.id}_radio_option_#{index}" }
%label.fr-label{ for: "#{@champ.id}_radio_option_#{index}" } = option
= option
- if !@champ.mandatory? - if !@champ.mandatory?
.fr-radio-group .fr-radio-group
= @form.radio_button :value, '', checked: @champ.value.blank? && !@champ.other?, id: "#{@champ.id}_radio_option_blank" = @form.radio_button :value, '', checked: @champ.value.blank? && !@champ.other?, id: "#{@champ.id}_radio_option_blank"
%label.fr-label{ for: "#{@champ.id}_radio_option_blank" } %label.fr-label{ for: "#{@champ.id}_radio_option_blank" }
Non renseigné Non renseigné
- if @champ.drop_down_other? - if @champ.drop_down_other?
.fr-radio-group .fr-radio-group
= @form.radio_button :value, Champs::DropDownListChamp::OTHER, checked: @champ.other?, id: "#{@champ.id}_radio_option_other" = @form.radio_button :value, Champs::DropDownListChamp::OTHER, checked: @champ.other?, id: "#{@champ.id}_radio_option_other"
%label.fr-label{ for: "#{@champ.id}_radio_option_other" } %label.fr-label{ for: "#{@champ.id}_radio_option_other" }
Autre = t('shared.champs.drop_down_list.other')
- elsif @champ.render_as_combobox? - elsif @champ.render_as_combobox?
= render Dsfr::ComboboxComponent.new form: @form, name: :value, options: @champ.enabled_non_empty_options, selected: @champ.selected, id: @champ.input_id, class: select_class_names, describedby: @champ.describedby_id = render Dsfr::ComboboxComponent.new form: @form, name: :value, options: @champ.enabled_non_empty_options(other: true), selected: @champ.selected, id: @champ.input_id, class: select_class_names, describedby: @champ.describedby_id
- else - else
= @form.select :value, = @form.select :value,
@champ.options.compact_blank, @champ.enabled_non_empty_options(other: true),
{ selected: @champ.selected, include_blank: true }, { selected: @champ.selected, include_blank: true },
required: @champ.required?, required: @champ.required?,
id: @champ.input_id, id: @champ.input_id,
class: select_class_names, class: select_class_names,
aria: { describedby: @champ.describedby_id } aria: { describedby: @champ.describedby_id }
- if @champ.drop_down_other? - if @champ.drop_down_other?
%div{ class: other_element_class_names }
= render EditableChamp::DropDownOtherInputComponent.new(form: @form, champ: @champ) = render EditableChamp::DropDownOtherInputComponent.new(form: @form, champ: @champ)

View file

@ -0,0 +1,2 @@
class EditableChamp::EngagementJuridiqueComponent < EditableChamp::EditableChampBaseComponent
end

View file

@ -0,0 +1,2 @@
---
en:

View file

@ -0,0 +1 @@
= @form.text_field(:value, input_opts(id: @champ.input_id, required: @champ.required?, aria: { describedby: @champ.describedby_id }))

View file

@ -0,0 +1,2 @@
---
fr:

View file

@ -8,7 +8,7 @@ class EditableChamp::EpciComponent < EditableChamp::EditableChampBaseComponent
private private
def departement_options def departement_options
APIGeoService.departements.filter { _1[:code] != '99' }.map { ["#{_1[:code]} #{_1[:name]}", _1[:code]] } APIGeoService.departements.filter(&method(:departement_with_epci?)).map { ["#{_1[:code]} #{_1[:name]}", _1[:code]] }
end end
def epci_options def epci_options
@ -26,4 +26,9 @@ class EditableChamp::EpciComponent < EditableChamp::EditableChampBaseComponent
def epci_select_options def epci_select_options
{ selected: @champ.code }.merge(@champ.mandatory? ? { prompt: '' } : { include_blank: '' }) { selected: @champ.code }.merge(@champ.mandatory? ? { prompt: '' } : { include_blank: '' })
end end
def departement_with_epci?(departement)
code = departement[:code]
!code.start_with?('98') && !code.in?(['99', '975', '977', '978'])
end
end end

View file

@ -0,0 +1,5 @@
class EditableChamp::ExpressionReguliereComponent < EditableChamp::EditableChampBaseComponent
def dsfr_input_classname
'fr-input'
end
end

View file

@ -0,0 +1 @@
= @form.text_field(:value, input_opts(id: @champ.input_id, placeholder: @champ.expression_reguliere_exemple_text, required: @champ.required?, aria: { describedby: @champ.describedby_id }))

View file

@ -1,5 +1,5 @@
%fieldset %fieldset
%legend.header-subsection{ legend_params }= @champ.libelle %legend.fr-h5{ legend_params }= @champ.libelle
- if @champ.description.present? - if @champ.description.present?
.notice{ notice_params }= render SimpleFormatComponent.new(@champ.description, allow_a: true) .notice{ notice_params }= render SimpleFormatComponent.new(@champ.description, allow_a: true)

View file

@ -0,0 +1,2 @@
class EditableChamp::RNFComponent < EditableChamp::EditableChampBaseComponent
end

View file

@ -0,0 +1,5 @@
---
en:
rnf_info_error: No foundation found
rnf_info_pending: RNF verification pending
rnf_info_success: "This RNF matches %{title}"

View file

@ -0,0 +1,5 @@
---
fr:
rnf_info_error: Aucune fondation trouvée
rnf_info_pending: Vérification du RNF en cours
rnf_info_success: "Ce RNF correspond à %{title}"

View file

@ -0,0 +1,9 @@
= @form.text_field :external_id, required: @champ.required?, class: "width-33-desktop fr-input small-margin", id: @champ.input_id
.rnf-info{ id: dom_id(@champ, :rnf_info) }
- if @champ.fetch_external_data_error?
%p.fr-error-text= t('.rnf_info_error')
- elsif @champ.fetch_external_data_pending?
%p.fr-info-text= t('.rnf_info_pending')
- elsif @champ.data?
%p.fr-info-text= t('.rnf_info_success', title: @champ.title)

View file

@ -0,0 +1,5 @@
class GroupeGestionnaire::Card::ChildrenComponent < ApplicationComponent
def initialize(groupe_gestionnaire:)
@groupe_gestionnaire = groupe_gestionnaire
end
end

View file

@ -0,0 +1,5 @@
---
fr:
title:
one: Groupe enfants
other: Groupes enfants

View file

@ -0,0 +1,10 @@
.fr-col-6.fr-col-md-4.fr-col-lg-3
= link_to gestionnaire_groupe_gestionnaire_children_path(@groupe_gestionnaire), id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
.fr-tile__body.flex.column.align-center.justify-between
%p.fr-badge.fr-badge--success Validé
%div
.line-count.fr-my-1w
%p.fr-tag= @groupe_gestionnaire.children.size
%h3.fr-h6
= t('.title', count: @groupe_gestionnaire.children.size)
%p.fr-btn.fr-btn--tertiary= t('views.shared.actions.edit')

View file

@ -1,13 +1,10 @@
.fr-col-6.fr-col-md-4.fr-col-lg-3 .fr-col-6.fr-col-md-4.fr-col-lg-3
= link_to gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire), id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do = link_to gestionnaire_groupe_gestionnaire_gestionnaires_path(@groupe_gestionnaire), id: 'gestionnaires', class: 'fr-tile fr-enlarge-link' do
.fr-tile__body.flex.column.align-center.justify-between .fr-tile__body.flex.column.align-center.justify-between
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
%div %div
.line-count.fr-my-1w .line-count.fr-my-1w
%p.fr-tag= @groupe_gestionnaire.gestionnaires.size %p.fr-tag= @groupe_gestionnaire.gestionnaires.size
%h3.fr-h6 %h3.fr-h6
= t('.title', count: @groupe_gestionnaire.gestionnaires.size) = t('.title', count: @groupe_gestionnaire.gestionnaires.size)
%p.fr-tile-subtitle Gestion de la démarche
%p.fr-btn.fr-btn--tertiary= t('views.shared.actions.edit') %p.fr-btn.fr-btn--tertiary= t('views.shared.actions.edit')

View file

@ -0,0 +1,16 @@
class GroupeGestionnaire::GroupeGestionnaireChildren::ChildComponent < ApplicationComponent
include ApplicationHelper
def initialize(groupe_gestionnaire:, child:)
@groupe_gestionnaire = groupe_gestionnaire
@child = child
end
def name
@child.name
end
def created_at
try_format_datetime(@child.created_at)
end
end

View file

@ -0,0 +1,4 @@
%tr{ id: dom_id(@child) }
%td
= link_to name, gestionnaire_groupe_gestionnaire_path(@child)
%td= created_at

View file

@ -0,0 +1,24 @@
# frozen_string_literal: true
class MainNavigation::AnnouncesLinkComponent < ApplicationComponent
def render?
# also see app/controllers/release_notes_controller.rb#ensure_access_allowed!
return false if !helpers.instructeur_signed_in? && !helpers.administrateur_signed_in? && !helpers.expert_signed_in?
@most_recent_released_on = load_most_recent_released_on
@most_recent_released_on.present?
end
def something_new?
return true if current_user.announces_seen_at.nil?
@most_recent_released_on.after? current_user.announces_seen_at
end
def load_most_recent_released_on
categories = helpers.infer_default_announce_categories
ReleaseNote.most_recent_announce_date_for_categories(categories)
end
end

View file

@ -0,0 +1,4 @@
---
en:
news: News
something_new: New informations about the website may be of interest to you.

View file

@ -0,0 +1,4 @@
---
fr:
news: Nouveautés
something_new: De nouvelles informations à propos du site pourraient vous intéresser.

View file

@ -0,0 +1,4 @@
%li.fr-nav__item.fr-nav__notifiable
= link_to t('.news'), release_notes_path, class: "fr-nav__link",'aria-current': current_page?(release_notes_path) ? 'page' : nil
- if something_new?
%span.notifications{ 'aria-label': t('.something_new') }

View file

@ -0,0 +1,26 @@
# frozen_string_literal: true
class MainNavigation::InstructeurExpertNavigationComponent < ApplicationComponent
def instructeur?
helpers.instructeur_signed_in?
end
def expert?
helpers.expert_signed_in?
end
def aria_current_for(page)
{ current: page == current_page ? :page : nil }
end
private
def current_page
case controller_name
when 'avis'
:avis
when 'procedures', 'dossiers'
:procedure
end
end
end

View file

@ -0,0 +1,14 @@
%nav#header-navigation.fr-nav{ role: :navigation, "aria-label" => t('main_menu', scope: [:layouts, :header]) }
%ul.fr-nav__list
- if instructeur?
%li.fr-nav__item
= link_to Procedure.model_name.human(count: 10), instructeur_procedures_path, class: 'fr-nav__link', aria: aria_current_for(:procedure)
- if expert?
%li.fr-nav__item
= link_to expert_all_avis_path, class: 'fr-nav__link', aria: aria_current_for(:avis) do
= Avis.model_name.human(count: 10)
- if helpers.current_expert.avis_summary[:unanswered] > 0
%span.badge.warning= helpers.current_expert.avis_summary[:unanswered]
= render MainNavigation::AnnouncesLinkComponent.new

View file

@ -1,9 +1,7 @@
.fr-col-6.fr-col-md-4.fr-col-lg-3 .fr-col-6.fr-col-md-4.fr-col-lg-3
= link_to admin_procedure_administrateurs_path(@procedure), id: 'administrateurs', class: 'fr-tile fr-enlarge-link' do = link_to admin_procedure_administrateurs_path(@procedure), id: 'administrateurs', class: 'fr-tile fr-enlarge-link' do
.fr-tile__body.flex.column.align-center.justify-between .fr-tile__body.flex.column.align-center.justify-between
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
%div %div
.line-count.fr-my-1w .line-count.fr-my-1w
%p.fr-tag= @procedure.administrateurs.size %p.fr-tag= @procedure.administrateurs.size

View file

@ -6,13 +6,9 @@
%span.icon.refuse %span.icon.refuse
%p.fr-tile-status-error À modifier %p.fr-tile-status-error À modifier
- elsif @count == 0 - elsif @count == 0
%div %p.fr-badge.fr-badge--info À configurer
%span.icon.clock
%p.fr-tile-status-todo À configurer
- else - else
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
%div %div
.line-count.fr-my-1w .line-count.fr-my-1w
%p.fr-tag= @count %p.fr-tag= @count

View file

@ -2,13 +2,9 @@
= link_to jeton_admin_procedure_path(@procedure), class: 'fr-tile fr-enlarge-link' do = link_to jeton_admin_procedure_path(@procedure), class: 'fr-tile fr-enlarge-link' do
.fr-tile__body.flex.column.align-center.justify-between .fr-tile__body.flex.column.align-center.justify-between
- if @procedure.api_entreprise_token.present? - if @procedure.api_entreprise_token.present?
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
- else - else
%div %p.fr-badge.fr-badge--info À configurer
%span.icon.clock
%p.fr-tile-status-todo À configurer
%div %div
%h3.fr-h6.fr-mt-10v= t('.title') %h3.fr-h6.fr-mt-10v= t('.title')
%p.fr-tile-subtitle Configurer le jeton API entreprise %p.fr-tile-subtitle Configurer le jeton API entreprise

View file

@ -2,13 +2,9 @@
= link_to admin_procedure_api_particulier_path(@procedure), class: 'fr-tile fr-enlarge-link', id: 'api-particulier' do = link_to admin_procedure_api_particulier_path(@procedure), class: 'fr-tile fr-enlarge-link', id: 'api-particulier' do
.fr-tile__body.flex.column.align-center.justify-between .fr-tile__body.flex.column.align-center.justify-between
- if @procedure.api_particulier_token.present? - if @procedure.api_particulier_token.present?
%div %p.fr-badge.fr-badge--success= t('.ready')
%span.icon.accept
%p.fr-tile-status-accept= t('.ready')
- else - else
%div %p.fr-badge.fr-badge--info= t('.needs_configuration')
%span.icon.clock
%p.fr-tile-status-todo= t('.needs_configuration')
%div %div
%h3.fr-h6.fr-mt-10v= Procedure.human_attribute_name(:api_particulier_token) %h3.fr-h6.fr-mt-10v= Procedure.human_attribute_name(:api_particulier_token)
%p.fr-tile-subtitle= t('.configure_api_particulier_token') %p.fr-tile-subtitle= t('.configure_api_particulier_token')

View file

@ -4,15 +4,11 @@
- if @procedure.attestation_template&.activated? - if @procedure.attestation_template&.activated?
%div %div
- if error_messages.present? - if error_messages.present?
%span.icon.refuse %p.fr-badge.fr-badge--warning À modifier
%p.fr-tile-status-error À modifier
- else - else
%span.icon.accept %p.fr-badge.fr-badge--success Activée
%p.fr-tile-status-accept Activée
- else - else
%div %p.fr-badge Désactivée
%span.icon.clock
%p.fr-tile-status-todo Désactivée
%div %div
%h3.fr-h6.fr-mt-10v= t('.title') %h3.fr-h6.fr-mt-10v= t('.title')
%p.fr-tile-subtitle Délivrance automatique pour les dossiers acceptés %p.fr-tile-subtitle Délivrance automatique pour les dossiers acceptés

View file

@ -6,13 +6,9 @@
%span.icon.refuse %span.icon.refuse
%p.fr-tile-status-error À modifier %p.fr-tile-status-error À modifier
- elsif @count == 0 - elsif @count == 0
%div %p.fr-badge.fr-badge--warning À faire
%span.icon.clock
%p.fr-tile-status-todo À faire
- else - else
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
%div %div
.line-count.fr-my-1w .line-count.fr-my-1w
%p.fr-tag= @count %p.fr-tag= @count

View file

@ -0,0 +1,13 @@
class Procedure::Card::ChorusComponent < ApplicationComponent
def initialize(procedure:)
@procedure = procedure
end
def render?
@procedure.chorusable?
end
def complete?
@procedure.chorus_configuration.complete?
end
end

View file

@ -0,0 +1,12 @@
.fr-col-6.fr-col-md-4.fr-col-lg-3.chorus-component
= link_to edit_admin_procedure_chorus_path(@procedure), class: 'fr-tile fr-enlarge-link', title: 'Configurer le cadre budgetaire Chorus' do
.fr-tile__body.flex.column.align-center.justify-between
- if !@procedure.chorus_configuration.complete?
%p.fr-badge.fr-badge--warning À compléter
- else
%p.fr-badge.fr-badge--success Configuré
%div
%h3.fr-h6.fr-mt-10v
Connecteur Chorus
%p.fr-tile-subtitle Vous traitez des données de subvention d'état ?
%p.fr-btn.fr-btn--tertiary Configurer

View file

@ -2,13 +2,9 @@
= link_to edit_admin_procedure_dossier_submitted_message_path(@procedure), class: 'fr-tile fr-enlarge-link' do = link_to edit_admin_procedure_dossier_submitted_message_path(@procedure), class: 'fr-tile fr-enlarge-link' do
.fr-tile__body.flex.column.align-center.justify-between .fr-tile__body.flex.column.align-center.justify-between
- if @procedure.active_dossier_submitted_message.present? - if @procedure.active_dossier_submitted_message.present?
%div %p.fr-badge.fr-badge--success Validé
%span.icon.accept
%p.fr-tile-status-accept Validé
- else - else
%div %p.fr-badge.fr-badge--info À configurer
%span.icon.clock
%p.fr-tile-status-todo À configurer
%div %div
%h3.fr-h6.fr-mt-10v= t('.title') %h3.fr-h6.fr-mt-10v= t('.title')
%p.fr-tile-subtitle Orienter l'usager suite à l'envoi de son dossier %p.fr-tile-subtitle Orienter l'usager suite à l'envoi de son dossier

Some files were not shown because too many files have changed in this diff Show more