...
|
...
|
@@ -7,6 +7,8 @@ for tool in sqlite3 getopt md5sum mktemp; do
|
7
|
7
|
}
|
8
|
8
|
done
|
9
|
9
|
|
|
10
|
+IFS_=$IFS
|
|
11
|
+
|
10
|
12
|
function create_database () {
|
11
|
13
|
declare -A groupes
|
12
|
14
|
if test -z "${groupes[@]}"; then
|
...
|
...
|
@@ -130,11 +132,12 @@ function update_database () {
|
130
|
132
|
}
|
131
|
133
|
|
132
|
134
|
function write_comparaison () {
|
133
|
|
- result="comparaisons $cible avec $groupe_ref${dossier:+ - ${dossier}}"
|
|
135
|
+ result="comparaisons ${groupe[0]} avec ${groupe_ref:-GDR}${dossier:+ - ${dossier}}"
|
134
|
136
|
content="/dev/shm/$result/content.xml"
|
135
|
137
|
id_cols="Scrutin Date Titre Adoption"
|
136
|
138
|
typevotes=$(sqlite3 "$in_ram_database" <<< "select nom from votes")
|
137
|
|
- nb_cols=$(wc -w <<< "$id_cols $typevotes $typevotes")
|
|
139
|
+ nb_cols=$(( $(wc -w <<< $id_cols) + $(wc -w <<< $typevotes) * ${#groupe[@]} ))
|
|
140
|
+ last_col=$(awk -v n=$nb_cols 'BEGIN{printf("%c%c", n < 27 ? "" : int(n/26) + 64, (n % 26) + (n % 26 == 0 ? 26 : 0) + 64)}' | tr -d '\0')
|
138
|
141
|
|
139
|
142
|
echo "génération du fichier $result"
|
140
|
143
|
|
...
|
...
|
@@ -163,6 +166,7 @@ EOmetainf
|
163
|
166
|
<office:automatic-styles>
|
164
|
167
|
EOcontent
|
165
|
168
|
|
|
169
|
+ IFS=$'\n'
|
166
|
170
|
for i in $(seq $nb_cols); do
|
167
|
171
|
cat >> "$content" << EOcontent
|
168
|
172
|
<style:style style:name="co$i" style:family="table-column">
|
...
|
...
|
@@ -193,11 +197,16 @@ EOcontent
|
193
|
197
|
for i in $(seq $(wc -w <<< $typevotes)); do
|
194
|
198
|
cat >> "$content" << EOcontent
|
195
|
199
|
<table:table-column table:style-name="co1" table:default-cell-style-name="ce1"/>
|
196
|
|
- <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
|
197
|
200
|
EOcontent
|
|
201
|
+ for (( g = 1; g < ${#groupe[@]}; g++ )); do
|
|
202
|
+ cat >> "$content" << EOcontent
|
|
203
|
+ <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
|
|
204
|
+EOcontent
|
|
205
|
+ done
|
198
|
206
|
done
|
199
|
207
|
echo '<table:table-row table:style-name="ro1">' >> "$content"
|
200
|
208
|
|
|
209
|
+ IFS=$IFS_
|
201
|
210
|
for colonne in $id_cols; do
|
202
|
211
|
cat >> "$content" << EOcontent
|
203
|
212
|
<table:table-cell office:value-type="string" calcext:value-type="string">
|
...
|
...
|
@@ -207,7 +216,7 @@ EOcontent
|
207
|
216
|
done
|
208
|
217
|
|
209
|
218
|
for typevote in $typevotes; do
|
210
|
|
- for g in "$cible" $groupe_ref; do
|
|
219
|
+ for g in "${groupe[@]}"; do
|
211
|
220
|
cat >> "$content" << EOcontent
|
212
|
221
|
<table:table-cell office:value-type="string" calcext:value-type="string">
|
213
|
222
|
<text:p>$typevote - $g</text:p>
|
...
|
...
|
@@ -222,6 +231,7 @@ EOcontent
|
222
|
231
|
begin=$(date +%s)
|
223
|
232
|
line=1
|
224
|
233
|
test -z "$seq" && qty=$(( $last - $first ))
|
|
234
|
+ IFS=$'\n'
|
225
|
235
|
for scrutin in $(eval ${seq:-seq $first $last}); do
|
226
|
236
|
|
227
|
237
|
data=$(sqlite3 "$in_ram_database" <<< "select date,intitulé,adoption,url.url from scrutins inner join url on scrutins.url = url.id where num is $scrutin")
|
...
|
...
|
@@ -259,7 +269,7 @@ EOcontent
|
259
|
269
|
</table:table-cell>
|
260
|
270
|
EOcontent
|
261
|
271
|
for typevote in 0 1 2 3; do
|
262
|
|
- cible_votes=$(sqlite3 "$in_ram_database" <<< "select
|
|
272
|
+ votes=$(sqlite3 "$in_ram_database" <<< "select
|
263
|
273
|
count(député)
|
264
|
274
|
from
|
265
|
275
|
dépouillement
|
...
|
...
|
@@ -268,26 +278,30 @@ EOcontent
|
268
|
278
|
and
|
269
|
279
|
vote is $typevote
|
270
|
280
|
and
|
271
|
|
- groupe is $groupe_id ${nom:+ and député is ${nom%|*}}")
|
272
|
|
- ref_votes=$(sqlite3 "$in_ram_database" <<< "select
|
273
|
|
- count(député)
|
274
|
|
- from
|
275
|
|
- dépouillement
|
276
|
|
- where
|
277
|
|
- scrutin is $scrutin
|
278
|
|
- and
|
279
|
|
- vote is $typevote
|
280
|
|
- and
|
281
|
|
- groupe is $groupe_ref_id")
|
|
281
|
+ groupe is ${groupe_id[0]} ${nom:+ and député is ${nom%|*}}")
|
282
|
282
|
cat >> "$content" << EOcontent
|
283
|
|
- <table:table-cell office:value-type="float" office:value="$cible_votes" calcext:value-type="float">
|
284
|
|
- <text:p>$cible_votes</text:p>
|
285
|
|
- </table:table-cell>
|
286
|
|
- <table:table-cell office:value-type="float" office:value="$ref_votes" calcext:value-type="float">
|
287
|
|
- <text:p>$ref_votes</text:p>
|
|
283
|
+ <table:table-cell office:value-type="float" office:value="$votes" calcext:value-type="float">
|
|
284
|
+ <text:p>$votes</text:p>
|
288
|
285
|
</table:table-cell>
|
|
286
|
+EOcontent
|
|
287
|
+ for (( g = 1; g < ${#groupe_id[@]}; g++ )); do
|
|
288
|
+ votes=$(sqlite3 "$in_ram_database" <<< "select
|
|
289
|
+ count(député)
|
|
290
|
+ from
|
|
291
|
+ dépouillement
|
|
292
|
+ where
|
|
293
|
+ scrutin is $scrutin
|
|
294
|
+ and
|
|
295
|
+ vote is $typevote
|
|
296
|
+ and
|
|
297
|
+ groupe is ${groupe_id[$g]}")
|
|
298
|
+ cat >> "$content" << EOcontent
|
|
299
|
+ <table:table-cell office:value-type="float" office:value="$votes" calcext:value-type="float">
|
|
300
|
+ <text:p>$votes</text:p>
|
|
301
|
+ </table:table-cell>
|
289
|
302
|
EOcontent
|
290
|
303
|
done
|
|
304
|
+ done
|
291
|
305
|
echo '</table:table-row>' >> "$content"
|
292
|
306
|
|
293
|
307
|
if test $(( ($line * 100) / ${qty:-$last} )) -ne $progress; then
|
...
|
...
|
@@ -308,7 +322,7 @@ EOcontent
|
308
|
322
|
</table:table>
|
309
|
323
|
<table:named-expressions/>
|
310
|
324
|
<table:database-ranges>
|
311
|
|
- <table:database-range table:name="__Anonymous_Sheet_DB__0" table:target-range-address="'$result'.D1:'$result'.$(printf "\\$(printf '%03o' $((64+$nb_cols)))")$line" table:display-filter-buttons="true"/>
|
|
325
|
+ <table:database-range table:name="__Anonymous_Sheet_DB__0" table:target-range-address="'$result'.D1:'$result'.$last_col$line" table:display-filter-buttons="true"/>
|
312
|
326
|
</table:database-ranges>
|
313
|
327
|
</office:spreadsheet>
|
314
|
328
|
</office:body>
|
...
|
...
|
@@ -369,11 +383,11 @@ while [[ $# -gt 0 ]]; do
|
369
|
383
|
#|ne génère pas de fichier de résultat
|
370
|
384
|
db_update_only=$true_flag;;
|
371
|
385
|
"--cible")
|
372
|
|
-#<nom court du groupe>|génère un comparatif pour ce groupe (par défaut LREM)
|
373
|
|
- groupe="${2^^}"
|
|
386
|
+#<nom court du groupe>|génère un comparatif pour ce groupe. Par défaut LREM
|
|
387
|
+ groupe[0]="${2^^}"
|
374
|
388
|
shift;;
|
375
|
389
|
"--ref")
|
376
|
|
-#<nom court du groupe>|compare avec ce groupe (par défaut GDR)
|
|
390
|
+#<nom court du groupe ou des groupes>|compare avec ce ou ces groupes. Si plusieurs groupes, ils sont séparés par une virgule, sans espace. Par défaut GDR
|
377
|
391
|
groupe_ref="${2^^}"
|
378
|
392
|
shift;;
|
379
|
393
|
"--député")
|
...
|
...
|
@@ -467,9 +481,7 @@ else
|
467
|
481
|
fi
|
468
|
482
|
fi
|
469
|
483
|
|
470
|
|
-groupe=${groupe:-LREM}
|
471
|
|
-groupe_ref=${groupe_ref:-GDR}
|
472
|
|
-cible=$groupe
|
|
484
|
+IFS=',' groupe=(${groupe[0]:-LREM} ${groupe_ref:-GDR})
|
473
|
485
|
|
474
|
486
|
in_ram_database=$(mktemp --dry-run /dev/shm/XXXXXXXXXXXX)
|
475
|
487
|
if test -r "$database"; then
|
...
|
...
|
@@ -478,10 +490,10 @@ else
|
478
|
490
|
create_database
|
479
|
491
|
fi
|
480
|
492
|
|
481
|
|
-for g in groupe groupe_ref; do
|
482
|
|
- eval "${g}_id=$(sqlite3 "$in_ram_database" <<< "select id from groupes where nom_court is '${!g}'")"
|
483
|
|
- if eval "test -z \$${g}_id"; then
|
484
|
|
- echo "groupe ${!g} inconnu" >&2
|
|
493
|
+for (( g = 0; g < ${#groupe[@]}; g++ )); do
|
|
494
|
+ groupe_id[$g]=$(sqlite3 "$in_ram_database" <<< "select id from groupes where nom_court is '${groupe[$g]}'")
|
|
495
|
+ if test -z "${groupe_id[$g]}"; then
|
|
496
|
+ echo "groupe ${groupe[$g]} inconnu" >&2
|
485
|
497
|
exit 1
|
486
|
498
|
fi
|
487
|
499
|
done
|
...
|
...
|
@@ -532,14 +544,13 @@ if test "$depute" = $true_flag; then
|
532
|
544
|
exit 1
|
533
|
545
|
else
|
534
|
546
|
nom=$(sqlite3 "$in_ram_database" <<< "select députés.id,députés.nom from députés inner join groupes on groupes.id = députés.groupe where députés.nom like '%$nom%' and groupes.nom_court is '$groupe' collate nocase")
|
535
|
|
- cible="${nom#*|} ($groupe)"
|
|
547
|
+ groupe[0]="${nom#*|} (${groupe[0]})"
|
536
|
548
|
fi
|
537
|
549
|
fi
|
538
|
550
|
fi
|
539
|
551
|
|
540
|
552
|
if test "$dossier" = $true_flag; then
|
541
|
553
|
if test -z "$dossier_value"; then
|
542
|
|
- IFS_=$IFS
|
543
|
554
|
IFS=$'\n'
|
544
|
555
|
select dossier in $(sqlite3 "$in_ram_database" <<< "select url from url" | sed 's,^.*/dossiers/,,; s/_/ /g; s/.asp$//'); do
|
545
|
556
|
if test -n "$dossier"; then
|