Compare commits
423 commits
c995a06434
...
64400b512c
Author | SHA1 | Date | |
---|---|---|---|
|
64400b512c | ||
|
7a4c22bc63 | ||
|
450bf7bb34 | ||
|
15ff65429b | ||
|
3869dd3a92 | ||
|
f1459c1414 | ||
|
34158a6926 | ||
|
c4ca381bed | ||
|
cd100bccdf | ||
|
3b9285a00b | ||
|
5d747ba0c2 | ||
|
b74f7f24e7 | ||
|
fce2d8efa9 | ||
|
be994c8933 | ||
|
9c641ccee1 | ||
|
aa84a4c335 | ||
|
249539fc27 | ||
|
61654d65a2 | ||
|
2c6a9e7bf2 | ||
|
f66a32c316 | ||
|
79c63921b2 | ||
|
4939f1d1fe | ||
|
78f9a2aa1e | ||
|
c717691a6f | ||
|
72b8ccec36 | ||
|
d92155a96a | ||
|
4f1fb91abf | ||
|
a54d55486c | ||
|
3be2a8878c | ||
|
6984dac41e | ||
|
ba076357c5 | ||
|
daa4c28af7 | ||
|
2e8e401818 | ||
|
1880a15d69 | ||
|
9f6cff07e4 | ||
|
137680879c | ||
|
380cedc998 | ||
|
de82ab8dfd | ||
|
0203867460 | ||
|
db8c57aa2d | ||
|
4842fc4d94 | ||
|
b09d42ee46 | ||
|
fd81936baf | ||
|
6c4f6a52cb | ||
|
8ff1616e52 | ||
|
10f5fae316 | ||
|
9a5e4d4ea5 | ||
|
3dd25c1ea6 | ||
|
99fe4694af | ||
|
8051beb068 | ||
|
49cd10458c | ||
|
352ed3969c | ||
|
ac47f82451 | ||
|
a41c8f73ad | ||
|
cdef5d8942 | ||
|
7cb6eadf18 | ||
|
e3a1192d96 | ||
|
34788bc800 | ||
|
bb4a2b84b9 | ||
|
f972d36f2f | ||
|
e60a5f5123 | ||
|
79c6b99802 | ||
|
d5f8ee2f84 | ||
|
61ba089203 | ||
|
42027e9db9 | ||
|
ce221f86af | ||
|
14b2fc30b2 | ||
|
520863d814 | ||
|
bfe27b5eb7 | ||
|
3a9b520a93 | ||
|
e99f9b5c17 | ||
|
81826e2509 | ||
|
5f452a731e | ||
|
66cf41b6d2 | ||
|
5bf38ea06f | ||
|
1716a931c5 | ||
|
fcb4b20b65 | ||
|
afc7df9c7c | ||
|
3186b0aa68 | ||
|
c9d470d9ec | ||
|
aecc41490b | ||
|
fb238ff7ac | ||
|
99529c611d | ||
|
fb51710309 | ||
|
054b3be02a | ||
|
1950297413 | ||
|
b989af5b47 | ||
|
8790ac4978 | ||
|
5229160408 | ||
|
2f28012324 | ||
|
ea9c571a30 | ||
|
b08609af48 | ||
|
252b3e4719 | ||
|
a49a5c2c93 | ||
|
256babbf74 | ||
|
1fa3425d4f | ||
|
39bdb5f145 | ||
|
8ecc242586 | ||
|
139e8f2059 | ||
|
7be8d4447f | ||
|
90ed7dd4a9 | ||
|
ba876f5085 | ||
|
b782bcdd2b | ||
|
1d2fdeb376 | ||
|
b02edd15dc | ||
|
760c441141 | ||
|
dd31dbc450 | ||
|
f945c02c3c | ||
|
ba17f8d8aa | ||
|
31cb62e27d | ||
|
373379d132 | ||
|
9af2304019 | ||
|
d601f92be8 | ||
|
cbec8b8b75 | ||
|
d403f851c6 | ||
|
75867df013 | ||
|
cf31815890 | ||
|
7c7f9113d2 | ||
|
84cd5daf9c | ||
|
86c9a84111 | ||
|
a3307553b7 | ||
|
f4283392b7 | ||
|
11c8e408ef | ||
|
a0998ab709 | ||
|
a2f5687aa3 | ||
|
101fbb1610 | ||
|
a6f4ae3ee4 | ||
|
200cdbd4ef | ||
|
9fc6c3b641 | ||
|
791954af1b | ||
|
e4a48f1270 | ||
|
af53a9b9db | ||
|
f6001c8eae | ||
|
f6b10731d3 | ||
|
b2d29b28b0 | ||
|
8aab0cdfed | ||
|
2b6cd5068b | ||
|
f1954c1546 | ||
|
22eadafe07 | ||
|
508602fd4a | ||
|
a2ed35d44e | ||
|
1b4010205a | ||
|
6ad0547a72 | ||
|
77e589d307 | ||
|
754e4c206b | ||
|
da6e5fcd9c | ||
|
a3cba47d4b | ||
|
bacd8ab6f7 | ||
|
80f2771c05 | ||
|
fd1f33b6e5 | ||
|
2343ee83ef | ||
|
7fca13d02c | ||
|
c1a4f7d81d | ||
|
7c8777557f | ||
|
79293f9fde | ||
|
9d7f747805 | ||
|
d3d195c566 | ||
|
485dcd1db7 | ||
|
4daeed68f3 | ||
|
e00054a6ea | ||
|
c6ae4139a2 | ||
|
fb318620aa | ||
|
0db781f793 | ||
|
d0b8176081 | ||
|
154a993794 | ||
|
06a8684bfd | ||
|
e591851b79 | ||
|
92661d074d | ||
|
baecdd5cbd | ||
|
25dfbe5085 | ||
|
8326cf080e | ||
|
148611d595 | ||
|
65feaa37e3 | ||
|
610b808d32 | ||
|
867568f289 | ||
|
49d6373330 | ||
|
8c9656f7db | ||
|
e70c49d47b | ||
|
6b1aee7b0b | ||
|
2d4701ac61 | ||
|
9ab918c1b2 | ||
|
c53d35401e | ||
|
fa874a0ea3 | ||
|
f692a9e5e4 | ||
|
7926948c0d | ||
|
ae675fac2a | ||
|
95f61c3d97 | ||
|
edb47d94f7 | ||
|
c38dac789d | ||
|
fcec4a7ef7 | ||
|
460d565e8c | ||
|
167060ea14 | ||
|
c32fa93689 | ||
|
9cd165635d | ||
|
01aaec6e90 | ||
|
04f429abef | ||
|
8ef3b77c0e | ||
|
b61fa88fe0 | ||
|
7a2b6c57d2 | ||
|
87c3615774 | ||
|
c7d5bf8dc7 | ||
|
362b072c6c | ||
|
0428853f4d | ||
|
d2657d83ac | ||
|
395f2d9b04 | ||
|
39abf283d9 | ||
|
a6cf22edb8 | ||
|
13624f0f7e | ||
|
7a4456efeb | ||
|
178458215c | ||
|
e49436aa5d | ||
|
5df6997fa3 | ||
|
3ac1688fe4 | ||
|
f522b45fc3 | ||
|
ad671092c0 | ||
|
8587696f33 | ||
|
e4c37758d4 | ||
|
ff8ed6016e | ||
|
0d626f1811 | ||
|
6ade116a0e | ||
|
8c0d2bb8cb | ||
|
52752c95ec | ||
|
a431287db0 | ||
|
daf1443b0c | ||
|
a6ea607e7a | ||
|
7a3a022ed4 | ||
|
a14d77cbd3 | ||
|
8d23152630 | ||
|
ac834b0c0a | ||
|
a611852ebc | ||
|
7a0bdd6c94 | ||
|
0968f02a26 | ||
|
f7eeb21425 | ||
|
d93c624164 | ||
|
92aab8e102 | ||
|
34a76d8afd | ||
|
b92ccc0a09 | ||
|
f0168d1470 | ||
|
66f94722fb | ||
|
6ce2b33519 | ||
|
a65aba521e | ||
|
94c218e2f7 | ||
|
ce1cd4240c | ||
|
a70e7ca903 | ||
|
bfb8611c81 | ||
|
694cbcd0a2 | ||
|
0268b0af9e | ||
|
198860d9f3 | ||
|
234c6e6248 | ||
|
87b0975a7c | ||
|
22de1d277d | ||
|
806d375ac5 | ||
|
21b6479ace | ||
|
2465e13504 | ||
|
6c959d9d4e | ||
|
3e2e5a01f9 | ||
|
cd9cc65e99 | ||
|
469a50f19d | ||
|
cf80fd03e1 | ||
|
22feb48c29 | ||
|
28b07f7650 | ||
|
4d95f49c82 | ||
|
979b5101ae | ||
|
560d291bcd | ||
|
baaf4e3517 | ||
|
be8303f1c4 | ||
|
7a88a57085 | ||
|
026885ebcf | ||
|
532fe466df | ||
|
082558bb26 | ||
|
99e22a8cbe | ||
|
a26c82cde7 | ||
|
74722490bc | ||
|
17a71eb7a8 | ||
|
dda5dadaed | ||
|
13eadb93bf | ||
|
869d83dda9 | ||
|
c93141d8bb | ||
|
0f608444b5 | ||
|
0e2d973b33 | ||
|
25a4a4de4a | ||
|
b83975869c | ||
|
f6c051e08e | ||
|
1de9130ab5 | ||
|
04d40ede43 | ||
|
bade4edcc7 | ||
|
8c6489fae2 | ||
|
c4272e3bac | ||
|
0daeca14e4 | ||
|
f95bd74e74 | ||
|
d76123831c | ||
|
62d2522300 | ||
|
4a698f8264 | ||
|
ef4113f8f9 | ||
|
f8a6b634d9 | ||
|
19ffb43686 | ||
|
197866159c | ||
|
97ff31f60f | ||
|
7da2e2f073 | ||
|
78c487d512 | ||
|
528c51cb5e | ||
|
9ea59814ad | ||
|
bd5356c9b6 | ||
|
fbf2cfae50 | ||
|
4130529854 | ||
|
42d3052c4f | ||
|
e7fc8661d5 | ||
|
33f5a553b6 | ||
|
9866acc0f8 | ||
|
2b061dc2aa | ||
|
1974e35a66 | ||
|
c60494c975 | ||
|
b9b9569852 | ||
|
cf8fb9195e | ||
|
00e3d33ba4 | ||
|
53259b733b | ||
|
2295d64300 | ||
|
ebea269f79 | ||
|
5d3d4cbd91 | ||
|
3487a5f328 | ||
|
79b5b25720 | ||
|
d87c7ca424 | ||
|
7aa0c7d0e8 | ||
|
f4e3d2137b | ||
|
9b96ff5d93 | ||
|
8a8970f999 | ||
|
dbd0e82b09 | ||
|
d01cc76970 | ||
|
81ccc8ace2 | ||
|
566b6b186e | ||
|
045b4942d9 | ||
|
cf3249dba5 | ||
|
a6842e8484 | ||
|
09ce6ee1c8 | ||
|
9e2662cb34 | ||
|
60fcb51533 | ||
|
0922e0987a | ||
|
3c172e1115 | ||
|
9ad2c4358a | ||
|
48ee575990 | ||
|
7ae66d0360 | ||
|
03dd6218f8 | ||
|
8a4299ade1 | ||
|
ec2e03f24e | ||
|
70c54808fa | ||
|
befb875318 | ||
|
682b4e92cc | ||
|
bd19e237f6 | ||
|
a4ef3cdf23 | ||
|
ffdd7ee95d | ||
|
1869d6b910 | ||
|
0b7d4452fd | ||
|
3495147045 | ||
|
857c1f0c21 | ||
|
9c2e8d266c | ||
|
ecb3909e99 | ||
|
df78e14469 | ||
|
87f435d2d3 | ||
|
d8f50700fc | ||
|
fea0cb1c60 | ||
|
7d7a741a1a | ||
|
758b739aa3 | ||
|
5ad724a4cb | ||
|
b69d4baaa2 | ||
|
dac7292618 | ||
|
6ff2287a2d | ||
|
a43176b2d6 | ||
|
071167da96 | ||
|
6a02e670aa | ||
|
b37f2c6825 | ||
|
137c19cce8 | ||
|
17aab9c891 | ||
|
ce5cd63ed2 | ||
|
1bb4d3cf17 | ||
|
dbe67aaf18 | ||
|
c5899f2c46 | ||
|
311c9215cd | ||
|
0dd68ab73d | ||
|
82322e8874 | ||
|
71d5470100 | ||
|
29980ab130 | ||
|
5a11ef783a | ||
|
563c47c88c | ||
|
3c5e76e705 | ||
|
d98c4faf94 | ||
|
0f1e243b01 | ||
|
e5d0d7dda2 | ||
|
81f78c62b4 | ||
|
c88e6ab75c | ||
|
ab0bb456bc | ||
|
422a22e14b | ||
|
90524cb541 | ||
|
870efba29b | ||
|
f8c6080292 | ||
|
2879c27fbe | ||
|
95bdcc986e | ||
|
9527d19ae7 | ||
|
e31347d1bf | ||
|
8069c5bb7c | ||
|
69651f4b55 | ||
|
c72c7bc957 | ||
|
75c155c284 | ||
|
5bf0d3ed54 | ||
|
63303e51f8 | ||
|
86b44cd0a4 | ||
|
2286759b5f | ||
|
30bc4aa5d3 | ||
|
1d66b47300 | ||
|
5b08f54665 | ||
|
4145f25210 | ||
|
a26df43577 | ||
|
c22e36c35c | ||
|
9bf1c65dec | ||
|
3b5bbb0779 | ||
|
dbb68f29da | ||
|
37b9420054 | ||
|
1ecd05df54 | ||
|
a960395edb | ||
|
2c73aa64a2 | ||
|
8b23f2a555 | ||
|
2360e5e115 | ||
|
b125f921ea | ||
|
7a01889563 |
685 changed files with 12989 additions and 2733 deletions
42
.github/workflows/rails_schema_check.yml
vendored
Normal file
42
.github/workflows/rails_schema_check.yml
vendored
Normal 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
|
||||||
|
|
5
Gemfile
5
Gemfile
|
@ -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
|
||||||
|
|
60
Gemfile.lock
60
Gemfile.lock
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
BIN
app/assets/fonts/marianne-bold.ttf
Normal file
BIN
app/assets/fonts/marianne-bold.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/marianne-regular.ttf
Normal file
BIN
app/assets/fonts/marianne-regular.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/marianne-thin.ttf
Normal file
BIN
app/assets/fonts/marianne-thin.ttf
Normal file
Binary file not shown.
1
app/assets/images/centered_marianne.svg
Normal file
1
app/assets/images/centered_marianne.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 5.5 KiB |
|
@ -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 |
71
app/assets/images/liberte2.svg
Normal file
71
app/assets/images/liberte2.svg
Normal 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 |
112
app/assets/stylesheets/attestation.scss
Normal file
112
app/assets/stylesheets/attestation.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
16
app/assets/stylesheets/attestation_template_2_edit.scss
Normal file
16
app/assets/stylesheets/attestation_template_2_edit.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.autosave-explanation {
|
.autosave-explanation {
|
||||||
color: $dark-grey;
|
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
64
app/assets/stylesheets/map_info.scss
Normal file
64
app/assets/stylesheets/map_info.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
|
|
||||||
.stats-legend {
|
.stats-legend {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: $dark-grey;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
44
app/components/conditions/champs_conditions_component.rb
Normal file
44
app/components/conditions/champs_conditions_component.rb
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
28
app/components/conditions/routing_rules_component.rb
Normal file
28
app/components/conditions/routing_rules_component.rb
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
confirm_label: I certify that I have made all corrections requested by the administration.
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
fr:
|
||||||
|
confirm_label: Je certifie avoir effectué toutes les corrections demandées par l’administration.
|
|
@ -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
|
||||||
|
|
|
@ -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' }
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
|
|
@ -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 d’erreur.
|
|
|
@ -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"
|
|
||||||
|
|
|
@ -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 }))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
- 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
|
||||||
|
@ -17,17 +16,18 @@
|
||||||
.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)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
class EditableChamp::EngagementJuridiqueComponent < EditableChamp::EditableChampBaseComponent
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
en:
|
|
@ -0,0 +1 @@
|
||||||
|
= @form.text_field(:value, input_opts(id: @champ.input_id, required: @champ.required?, aria: { describedby: @champ.describedby_id }))
|
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
fr:
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class EditableChamp::ExpressionReguliereComponent < EditableChamp::EditableChampBaseComponent
|
||||||
|
def dsfr_input_classname
|
||||||
|
'fr-input'
|
||||||
|
end
|
||||||
|
end
|
|
@ -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 }))
|
|
@ -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)
|
||||||
|
|
||||||
|
|
2
app/components/editable_champ/rnf_component.rb
Normal file
2
app/components/editable_champ/rnf_component.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
class EditableChamp::RNFComponent < EditableChamp::EditableChampBaseComponent
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
rnf_info_error: No foundation found
|
||||||
|
rnf_info_pending: RNF verification pending
|
||||||
|
rnf_info_success: "This RNF matches %{title}"
|
|
@ -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}"
|
|
@ -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)
|
|
@ -0,0 +1,5 @@
|
||||||
|
class GroupeGestionnaire::Card::ChildrenComponent < ApplicationComponent
|
||||||
|
def initialize(groupe_gestionnaire:)
|
||||||
|
@groupe_gestionnaire = groupe_gestionnaire
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
fr:
|
||||||
|
title:
|
||||||
|
one: Groupe enfants
|
||||||
|
other: Groupes enfants
|
|
@ -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')
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
%tr{ id: dom_id(@child) }
|
||||||
|
%td
|
||||||
|
= link_to name, gestionnaire_groupe_gestionnaire_path(@child)
|
||||||
|
%td= created_at
|
24
app/components/main_navigation/announces_link_component.rb
Normal file
24
app/components/main_navigation/announces_link_component.rb
Normal 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
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
en:
|
||||||
|
news: News
|
||||||
|
something_new: New informations about the website may be of interest to you.
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
fr:
|
||||||
|
news: Nouveautés
|
||||||
|
something_new: De nouvelles informations à propos du site pourraient vous intéresser.
|
|
@ -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') }
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
13
app/components/procedure/card/chorus_component.rb
Normal file
13
app/components/procedure/card/chorus_component.rb
Normal 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
|
|
@ -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
|
|
@ -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
Loading…
Reference in a new issue