Skip to content

Commit 50286bc

Browse files
authored
Merge pull request #210 from msusicky/develop
2.2.1
2 parents d0b1f0c + b7a7e92 commit 50286bc

File tree

14 files changed

+39372
-82
lines changed

14 files changed

+39372
-82
lines changed

app/filters.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@ def format_decimal_delta(number):
2828
@app.template_filter()
2929
def format_date(date):
3030
"""Converts date to string in d. m. Y format."""
31-
return date.strftime('%d. %m. %Y').lower()
31+
return 'bez dat' if date is None else date.strftime('%d. %m. %Y').lower()
3232

3333

3434
@app.template_filter()
3535
def format_date_wd(date):
3636
"""Converts date to string in a d. m. Y format."""
37-
return date.strftime('%a %d. %m. %Y').lower()
37+
return 'bez dat' if date is None else date.strftime('%a %d. %m. %Y').lower()
3838

3939

4040
@app.template_filter()
4141
def format_datetime_short_wd(date):
4242
"""Converts datetime to string in a d. m. H:M format."""
43-
return date.strftime('%a %d. %m. %H:%M').lower()
43+
return 'bez dat' if date is None else date.strftime('%a %d. %m. %H:%M').lower()
4444

4545

4646
@app.template_filter()

app/models.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,3 +379,24 @@ def __repr__(self):
379379

380380
Import.ockovani_rezervace = relationship("OckovaniRezervace", back_populates="import_", cascade="delete")
381381
OckovaciMisto.ockovani_rezervace = relationship("OckovaniRezervace", back_populates="misto")
382+
383+
384+
class ZdravotnickeStredisko(db.Model):
385+
__tablename__ = 'zdravotnicke_stredisko'
386+
387+
zdravotnicke_zarizeni_id = Column(Integer, primary_key=True)
388+
pcz = Column(Integer)
389+
pcdp = Column(Integer)
390+
nazev_cely = Column(Unicode)
391+
zdravotnicke_zarizeni_kod = Column(Unicode)
392+
druh_zarizeni_kod = Column(Integer)
393+
druh_zarizeni = Column(Unicode)
394+
obec = Column(Unicode)
395+
psc = Column(Unicode)
396+
ulice = Column(Unicode)
397+
cislo_domu = Column(Unicode)
398+
kraj = Column(Unicode)
399+
kraj_kod = Column(Unicode)
400+
okres = Column(Unicode)
401+
okres_kod = Column(Unicode)
402+
nrpzs_kod = Column(Unicode)

app/queries.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,29 @@ def count_vaccines(filter_column, filter_value):
3232
"""
3333
select ockovaci_misto_id, vyrobce, sum(pocet_davek) prijato
3434
from ockovani_distribuce
35-
where akce = 'Příjem' and ockovaci_misto_id in ({})
35+
where akce = 'Příjem' and ockovaci_misto_id in ({}) and cilove_ockovaci_misto_id not in({})
3636
group by (ockovaci_misto_id, vyrobce);
37-
""".format(mista_ids),
37+
""".format(mista_ids, mista_ids),
3838
db.engine
3939
)
4040

4141
prijato_odjinud = pd.read_sql_query(
4242
"""
4343
select cilove_ockovaci_misto_id ockovaci_misto_id, vyrobce, sum(pocet_davek) prijato_odjinud
4444
from ockovani_distribuce
45-
where akce = 'Výdej' and cilove_ockovaci_misto_id in ({})
45+
where akce = 'Výdej' and cilove_ockovaci_misto_id in ({}) and ockovaci_misto_id not in({})
4646
group by (cilove_ockovaci_misto_id, vyrobce);
47-
""".format(mista_ids),
47+
""".format(mista_ids, mista_ids),
4848
db.engine
4949
)
5050

5151
vydano = pd.read_sql_query(
5252
"""
5353
select ockovaci_misto_id, vyrobce, sum(pocet_davek) vydano
5454
from ockovani_distribuce
55-
where akce = 'Výdej' and ockovaci_misto_id in ({})
55+
where akce = 'Výdej' and ockovaci_misto_id in ({}) and cilove_ockovaci_misto_id not in({})
5656
group by (ockovaci_misto_id, vyrobce);
57-
""".format(mista_ids),
57+
""".format(mista_ids, mista_ids),
5858
db.engine
5959
)
6060

@@ -86,8 +86,8 @@ def count_vaccines(filter_column, filter_value):
8686
res['pouzito'] = res['pouzito'].fillna(0).astype('int')
8787
res['znehodnoceno'] = res['znehodnoceno'].fillna(0).astype('int')
8888

89-
res['prijato_celkem'] = res['prijato'] + res['prijato_odjinud']
90-
res['skladem'] = res['prijato_celkem'] - res['vydano'] - res['pouzito'] - res['znehodnoceno']
89+
res['prijato_celkem'] = res['prijato'] + res['prijato_odjinud'] - res['vydano']
90+
res['skladem'] = res['prijato_celkem'] - res['pouzito'] - res['znehodnoceno']
9191

9292
res = res.groupby(by=['vyrobce'], as_index=False).sum().sort_values(by=['vyrobce'])
9393

app/templates/kraj.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ <h3>Kraj: {{ kraj.nazev }} </h3>
4141
{{ macros.metrika('Počet obyvatel (18+)', metriky.pocet_obyvatel_dospeli) }}
4242
{{ macros.metrika('Očkovaní (obě dávky)', metriky.ockovani_pocet_2, delta_day=metriky.ockovani_pocet_2_zmena_den, delta_week=metriky.ockovani_pocet_2_zmena_tyden, color='std') }}
4343
{{ macros.metrika('Očkováno dávek', metriky.ockovani_pocet, delta_day=metriky.ockovani_pocet_zmena_den, delta_week=metriky.ockovani_pocet_zmena_tyden, color='std') }}
44-
{{ macros.metrika('Přibližně skladem', metriky.vakciny_skladem_pocet, delta_day=metriky.vakciny_skladem_pocet_zmena_den, delta_week=metriky.vakciny_skladem_pocet_zmena_tyden, warning='Odhadovaný počet dávek skladem.<br>Údaj je počítán z dodaných dávek, počtu očkovaných lidí a zničených dávek - může vykazovat velké nepřesnosti!') }}
44+
{{ macros.metrika('Přibližně skladem', metriky.vakciny_skladem_pocet, delta_day=metriky.vakciny_skladem_pocet_zmena_den, delta_week=metriky.vakciny_skladem_pocet_zmena_tyden, warning='Odhadovaný počet dávek skladem.<br>Údaj je počítán z dat o distribuci vakcín, očkovaných lidech a znehodnocených vakcínách. Informace o počtu očkovaných přichází se zpožděním, proto může být reálný počet výrazně nižší. Tento údaj by měl být přesnější než počet uvedený v tabulce "Stav vakcín", který vychází z jiných dat.') }}
4545
{{ macros.metrika('Čekající ve frontě', metriky.registrace_fronta, delta_day=metriky.registrace_fronta_zmena_den, delta_week=metriky.registrace_fronta_zmena_tyden, color='rev', info='Počet registrovaných čekajících na rezervaci konkrétního termínu (přibližně odpovídá čekajícím na SMS s PIN2).') }}
4646
{{ macros.metrika('Čekající s rezervací', metriky.rezervace_cekajici, delta_day=metriky.rezervace_cekajici_zmena_den, delta_week=metriky.rezervace_cekajici_zmena_tyden, info='Počet registrovaných s rezervovaným konkrétním termínem na očkování.') }}
4747
{{ macros.metrika('Čekání na rezervaci', metriky.registrace_prumer_cekani, delta_day=metriky.registrace_prumer_cekani_zmena_den, delta_week=metriky.registrace_prumer_cekani_zmena_tyden, decimal=True, unit='týdne', divide=7, color='rev', info='Průměrná doba mezi registrací a rezervací konkrétního termínu za posledních 7 dní (přibližně odpovídá čekání na SMS s PIN2).') }}

app/templates/macros.html

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,38 +76,32 @@
7676
<table class="table table-bordered table-striped table-sm" style="word-break: break-all">
7777
<thead class="thead-dark">
7878
<tr>
79-
<th scope="col" class="text-center">Výrobce</th>
80-
<th scope="col" class="text-center">
79+
<th scope="col" class="col-3 text-center">Výrobce</th>
80+
<th scope="col" class="col-2 text-center">
8181
Přijato
8282
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto"
8383
title="Počet dávek přijatých na očkovací místo.">
8484
</i>
8585
</th>
86-
<th scope="col" class="text-center">
87-
Vydáno
88-
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto"
89-
title="Počet dávek převedených na jiné očkovací místo.">
90-
</i>
91-
</th>
92-
<th scope="col" class="text-center">
93-
Očkováno
86+
<th scope="col" class="col-2 text-center">
87+
Použito
9488
<i class="fas fa-exclamation-triangle" data-toggle="tooltip" data-placement="auto"
9589
data-html="true"
9690
title="Počet vyočkovaných dávek.<br>Dataset spotřeba vakcín vykazuje velké zpoždění a nepřesnosti!">
9791
</i>
9892
</th>
99-
<th scope="col" class="text-center">
93+
<th scope="col" class="col-2 text-center">
10094
Zničeno
10195
<i class="fas fa-exclamation-triangle" data-toggle="tooltip" data-placement="auto"
10296
data-html="true"
10397
title="Počet zničených dávek.<br>Dataset spotřeba vakcín vykazuje velké zpoždění a nepřesnosti!">
10498
</i>
10599
</th>
106-
<th scope="col" class="text-center">
100+
<th scope="col" class="col-2 text-center">
107101
Skladem
108102
<i class="fas fa-exclamation-triangle" data-toggle="tooltip" data-placement="auto"
109103
data-html="true"
110-
title="Počet dávek skladem.<br>Údaj je počítán z předchozích sloupců a může vykazovat velké nepřesnosti!">
104+
title="Počet dávek skladem.<br>Údaj je počítán z předchozích sloupců a může vykazovat nepřesnosti způsobené zpožděním v datech. Údaj na kartě &#34;Statistiky&#34;, pokud je k dispozici, vychází z dat o očkovaných lidech a měl by být přesnější.">
111105
</i>
112106
</th>
113107
</tr>
@@ -117,7 +111,6 @@
117111
<tr>
118112
<td>{{ row['vyrobce'] }}</td>
119113
<td class="text-right">{{ row['prijato_celkem'] | format_number }}</td>
120-
<td class="text-right">{{ row['vydano'] | format_number }}</td>
121114
<td class="text-right">{{ row['pouzito'] | format_number }}</td>
122115
<td class="text-right">{{ row['znehodnoceno'] | format_number }}</td>
123116
<td class="text-right">{{ row['skladem'] | format_number }}</td>
@@ -128,7 +121,6 @@
128121
<tr>
129122
<td>Celkem</td>
130123
<td class="text-right">{{ vaccines['prijato_celkem'].sum() | format_number }}</td>
131-
<td class="text-right">{{ vaccines['vydano'].sum() | format_number }}</td>
132124
<td class="text-right">{{ vaccines['pouzito'].sum() | format_number }}</td>
133125
<td class="text-right">{{ vaccines['znehodnoceno'].sum() | format_number }}</td>
134126
<td class="text-right">{{ vaccines['skladem'].sum() | format_number }}</td>
@@ -143,16 +135,16 @@
143135

144136
{% macro metrika(name, number, delta_day=None, delta_week=None, decimal=False, unit='', multiply=1, divide=1, color=None, info=None, warning=None) -%}
145137
{% if number != None %}
146-
<div class="col-md-4 col-lg-3 mb-3 py-2">
138+
<div class="col-sm-6 col-md-4 col-lg-3 mb-3 py-2">
147139
<div class="card h-100">
148140
<div class="card-body">
149141
<div class="row">
150-
<div class="col-md-9 col-xl-10 pr-0">
142+
<div class="col-9 col-xl-10 pr-0">
151143
<h6 class="card-title ellipsis mb-1">
152144
{{ name }}
153145
</h6>
154146
</div>
155-
<div class="col pl-0 text-right">
147+
<div class="col-3 col-xl-2 pl-0 text-right">
156148
<h6 class="card-title mb-1">
157149
{% if info %}
158150
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto" data-html="true" title="{{ info }}"></i>

app/templates/mapa.html

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ <h3>Očkovací místa</h3>
2727
var markers = [];
2828
var coords = [];
2929

30-
{% for misto in ockovaci_mista %}
30+
{% for misto in mista %}
3131
var c = SMap.Coords.fromWGS84({{ misto.longitude }}, {{ misto.latitude }});
3232

3333
var icon = JAK.mel("div");
34-
{% if misto.pocet_mist == None %}
34+
{% if misto.registrace_prumer_cekani == None %}
3535
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-yellow.png"}, {filter:"grayscale(1)"});
36-
{% elif misto.pocet_mist < 0 %}
36+
{% elif misto.registrace_prumer_cekani/7 > 2 %}
37+
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-red.png"});
38+
{% elif misto.registrace_prumer_cekani/7 < 1 %}
3739
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-yellow.png"}, {filter:"hue-rotate(80deg)"});
38-
{% elif misto.pocet_mist < 0 %}
39-
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-yellow.png"});
4040
{% else %}
41-
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-red.png"});
41+
var image = JAK.mel("img", {src:SMap.CONFIG.img+"/marker/drop-yellow.png"});
4242
{% endif %}
4343

4444
icon.appendChild(image);
@@ -54,7 +54,8 @@ <h3>Očkovací místa</h3>
5454
card.getHeader().innerHTML = "<strong>{{ misto.nazev }}</strong>";
5555
card.getBody().innerHTML = "<strong>Adresa:</strong> {{misto.adresa}}<br>" +
5656
"<strong>Bezbariérový přístup:</strong> {{ 'Ano' if misto.bezbarierovy_pristup else 'Ne' }}<br>" +
57-
"<!-- <strong>Volná místa (příštích {{ days }} dní):</strong> {{ 'nemáme data' if misto.pocet_mist == None else misto.pocet_mist }} --><br>" +
57+
"<strong>Čekání na rezervaci v týdnech:</strong> {{ (None if misto.registrace_prumer_cekani == None else (misto.registrace_prumer_cekani / 7)) | format_decimal }} <br>" +
58+
"<strong>Odhad týdnů potřebných k naočkování lidí ve frontě a rezervacích:</strong> {{ (None if misto.ockovani_odhad_cekani == None else (misto.ockovani_odhad_cekani / 7)) | format_decimal }} <br>" +
5859
"<a href=\"./misto/{{ misto.id }}\" class=\"btn btn-primary mt-2\">Detail místa</a>";
5960
card.getFooter().style = "display: none";
6061
card.getContainer().style.padding = "0";

app/templates/misto.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ <h5 class="card-title">Mapa</h5>
7474
<div class="row mb-n3">
7575
{{ macros.metrika('Očkovaní (obě dávky)', metriky.ockovani_pocet_2, delta_day=metriky.ockovani_pocet_2_zmena_den, delta_week=metriky.ockovani_pocet_2_zmena_tyden, color='std') }}
7676
{{ macros.metrika('Očkováno dávek', metriky.ockovani_pocet, delta_day=metriky.ockovani_pocet_zmena_den, delta_week=metriky.ockovani_pocet_zmena_tyden, color='std') }}
77-
{{ macros.metrika('Přibližně skladem', metriky.vakciny_skladem_pocet, delta_day=metriky.vakciny_skladem_pocet_zmena_den, delta_week=metriky.vakciny_skladem_pocet_zmena_tyden, warning='Odhadovaný počet dávek skladem.<br>Údaj je počítán z dodaných dávek, počtu očkovaných lidí a zničených dávek - může vykazovat velké nepřesnosti!') }}
77+
{{ macros.metrika('Přibližně skladem', metriky.vakciny_skladem_pocet, delta_day=metriky.vakciny_skladem_pocet_zmena_den, delta_week=metriky.vakciny_skladem_pocet_zmena_tyden, warning='Odhadovaný počet dávek skladem.<br>Údaj je počítán z dat o distribuci vakcín, očkovaných lidech a znehodnocených vakcínách. Informace o počtu očkovaných přichází se zpožděním, proto může být reálný počet výrazně nižší. Tento údaj by měl být přesnější než počet uvedený v tabulce "Stav vakcín", který vychází z jiných dat.') }}
7878
{{ macros.metrika('Čekající ve frontě', metriky.registrace_fronta, delta_day=metriky.registrace_fronta_zmena_den, delta_week=metriky.registrace_fronta_zmena_tyden, color='rev', info='Počet registrovaných čekajících na rezervaci konkrétního termínu (přibližně odpovídá čekajícím na SMS s PIN2).') }}
7979
{{ macros.metrika('Čekající s rezervací', metriky.rezervace_cekajici, delta_day=metriky.rezervace_cekajici_zmena_den, delta_week=metriky.rezervace_cekajici_zmena_tyden, info='Počet registrovaných s rezervovaným konkrétním termínem na očkování.') }}
8080
{{ macros.metrika('Čekání na rezervaci', metriky.registrace_prumer_cekani, delta_day=metriky.registrace_prumer_cekani_zmena_den, delta_week=metriky.registrace_prumer_cekani_zmena_tyden, decimal=True, unit='týdne', divide=7, color='rev', info='Průměrná doba mezi registrací a rezervací konkrétního termínu za posledních 7 dní (přibližně odpovídá čekání na SMS s PIN2).') }}

app/templates/statistiky.html

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ <h3>Souhrnné statistiky očkování</h3>
2424
</p>
2525
<h5>Nedovolené zjednodušení</h5>
2626
<p>
27-
Pokud bychom očkovali rychlostí nejrychlejšího dne včetně víkendů a očkovali nepřetržitě, pak skončíme
28-
(60% dospělé populace, 2 dávky) <strong>{{ end_date | format_date }}</strong>.
27+
Pokud bychom očkovali průměrnou rychlostí posledního týdne, pak skončíme (60 % dospělé populace, 2 dávky)
28+
<strong>{{ end_date | format_date }}</strong>.
2929
Nicméně mnoho očkovacích center bude ještě vybudováno a dodávky vakcín se výrazně zvýší.
3030
</p>
3131
{% endif %}
@@ -42,36 +42,44 @@ <h5 class="card-title">Počty vakcín</h5>
4242
<thead class="thead-dark">
4343
<tr>
4444
<th scope="col" class="col-3 text-center">Vakcína</th>
45-
<th scope="col" class="col-3 text-center">
45+
<th scope="col" class="col-2 text-center">
4646
Přijato
4747
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto"
4848
title="Počet přijatých vakcín. Podle datasetu distribuce vakcín - akce příjem.">
4949
</i>
5050
</th>
51-
<th scope="col" class="col-3 text-center">
51+
<th scope="col" class="col-2 text-center">
5252
Očkováno
5353
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto"
5454
title="Počet vyočkovaných dávek. Podle datasetu vykázaných očkování.">
5555
</i>
5656
</th>
57-
<th scope="col" class="col-3 text-center">
57+
<th scope="col" class="col-2 text-center">
58+
Zničeno
59+
<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="auto"
60+
title="Počet znehodnocených dávek. Podle datasetu spotřeba vakcín.">
61+
</i>
62+
</th>
63+
<th scope="col" class="col-2 text-center">
5864
Skladem
5965
<i class="fas fa-exclamation-triangle" data-toggle="tooltip" data-placement="auto"
60-
title="Přibližný počet skladem. Data o očkování přicházejí zpožděně!">
66+
title="Přibližný počet skladem. Vypočteno jako rozdíl předchozích sloupců, data o vykázaných očkováních a spotřebě ale přicházejí se zpožděním, proto může být reálný počet výrazně nižší.">
6167
</i>
6268
</th>
6369
</tr>
6470
</thead>
6571
<tbody>
66-
{% set sum=namespace(prijem = 0, spotreba = 0, rozdil = 0) %}
72+
{% set sum=namespace(prijem = 0, ockovano = 0, zniceno = 0, rozdil = 0) %}
6773
{% for item in vacc_storage %}
6874
{% set sum.prijem = sum.prijem + item.prijem %}
69-
{% set sum.spotreba = sum.spotreba + item.spotreba %}
75+
{% set sum.ockovano = sum.ockovano + item.ockovano %}
76+
{% set sum.zniceno = sum.zniceno + item.zniceno %}
7077
{% set sum.rozdil = sum.rozdil + item.rozdil %}
7178
<tr>
7279
<td>{{ item.vyrobce }}</td>
7380
<td class="text-right">{{ item.prijem | format_number }}</td>
74-
<td class="text-right">{{ item.spotreba | format_number }}</td>
81+
<td class="text-right">{{ item.ockovano | format_number }}</td>
82+
<td class="text-right">{{ item.zniceno | format_number }}</td>
7583
<td class="text-right">{{ item.rozdil | format_number }}</td>
7684
</tr>
7785
{% endfor %}
@@ -80,7 +88,8 @@ <h5 class="card-title">Počty vakcín</h5>
8088
<tr>
8189
<td>Celkem</td>
8290
<td class="text-right">{{ sum.prijem | format_number }}</td>
83-
<td class="text-right">{{ sum.spotreba | format_number }}</td>
91+
<td class="text-right">{{ sum.ockovano | format_number }}</td>
92+
<td class="text-right">{{ sum.zniceno | format_number }}</td>
8493
<td class="text-right">{{ sum.rozdil | format_number }}</td>
8594
</tr>
8695
</tfoot>

0 commit comments

Comments
 (0)