upravy_exportu #91

Open
ticvac wants to merge 5 commits from upravy_exportu into master
3 changed files with 64 additions and 12 deletions

View file

@ -5,12 +5,27 @@
<h2><strong>Export lidí</strong></h2>
<p>Vyberte pole, které chcete exportovat</p>
Review

Takže pokud přibyde na řešitelovi další věc, tak se bude muset přidávat sem další položka?

Takže pokud přibyde na řešitelovi další věc, tak se bude muset přidávat sem další položka?
Review

Ano

Ano
<!-- for loop zde neni pouzit proto, aby se mohlo napsat
data-value="email telefon mesto"
a zabalit tak vice parametru do jednoho checkboxu -->
<p>
<label>( Jméno: <input class="field-check" data-value="jmeno" type="checkbox" checked>)</label>
<label>( Příjmení: <input class="field-check" data-value="prijmeni" type="checkbox" checked>)</label>
<label>( E-mail <input class="field-check" data-value="email" type="checkbox" checked>)</label>
<label>( Telefon <input class="field-check" data-value="telefon" type="checkbox" checked>)</label>
<label>( Ulice <input class="field-check" data-value="ulice" type="checkbox">)</label>
<label>( Město <input class="field-check" data-value="mesto" type="checkbox">)</label>
<label>( PSČ <input class="field-check" data-value="psc" type="checkbox">)</label>
</p>
<select name="select-one" id="select-one">
<option value="0">---</option>
<option value="1">Řešitelé čísla</option>
<option value="2">Řešitelé ročníku</option>
<option value="3">Všichni řešitelé, kteří ještě neodmaturovali</option>
<option value="4">Organizátoři soustředění</option>
<option value="5">Účastníci soustředění</option>
</select>
<select name="select-two" id="select-two">
@ -76,12 +91,22 @@
})
download_button.addEventListener('click', (e) => {
if (select_two.innerHTML == '') {
window.location.href = "/profil/exporty_lidi/get_csv_only_one_step/" + select_one.value
} else {
window.location.href = "/profil/exporty_lidi/get_csv/" + select_one.value + "/" + select_two.value
// uzivatele vybrana pole
fields = Array.from(document.getElementsByClassName('field-check'))
.filter(e => e.checked)
.map(e => e.getAttribute('data-value'));
params = ""
for (let val of fields) {
for(let s of val.split(' ')) {
params += s + ","
}
}
params = params.slice(0, -1)
Review

Nechceš použít fields.join(",")? Tohle mě neuráží, ale .join zní jakože to ušetří 5 řádků a dvě logické chyby…

Nechceš použít `fields.join(",")`? Tohle mě neuráží, ale `.join` zní jakože to ušetří 5 řádků a dvě logické chyby…
if (select_two.innerHTML == '') {
window.location.href = "/profil/exporty_lidi/get_csv_only_one_step/" + select_one.value + "?fields=" + params
} else {
window.location.href = "/profil/exporty_lidi/get_csv/" + select_one.value + "/" + select_two.value + "?fields=" + params
}
})
</script>

View file

@ -147,7 +147,9 @@ class OrgoRozcestnikView(TemplateView):
class PrvniTypExportu(Enum):
CISLA = 1
ROCNIKU = 2
SOUSTREDENI = 4
SOUSTREDENI_ORG = 4
SOUSTREDENI_UCASTNICI = 5
class ExportLidiView(TemplateView):
template_name = 'personalni/profil/export_lidi.html'
@ -163,35 +165,59 @@ def get_export_options(request, type):
data = [{"id": c.id, "display": str(c)} for c in Cislo.objects.all()]
if type == PrvniTypExportu.ROCNIKU.value:
data = [{"id": r.id, "display": str(r)} for r in Rocnik.objects.all()]
if type == PrvniTypExportu.SOUSTREDENI.value:
if type == PrvniTypExportu.SOUSTREDENI_ORG.value:
data = [{"id": s.id, "display": str(s)} for s in Soustredeni.objects.all()]
if type == PrvniTypExportu.SOUSTREDENI_UCASTNICI.value:
data = [{"id": s.id, "display": str(s)} for s in Soustredeni.objects.all()]
return HttpResponse(json.dumps(data), content_type='application/json')
def getFieldsForExport(request):
Review

Takže když nastala chyba, tak to udělá něco náhodného?

Takže když nastala chyba, tak to udělá něco náhodného?
Review

Jako... ona nenastala chyba, uživatel si zažádal o prázdné info... dostane to, co je nastaveno defaultně

Jako... ona nenastala chyba, uživatel si zažádal o prázdné info... dostane to, co je nastaveno defaultně
Review

To právě není úplně pravda. Někde nastala chyba, takže jsi dostal špatná data, a vracíš něco, co tomu neodpovídá.

To právě není úplně pravda. Někde nastala chyba, takže jsi dostal špatná data, a vracíš něco, co tomu neodpovídá.
if 'fields' not in request.GET or request.GET.get('fields') == '':
return ["jmeno", "prijmeni", "email", "telefon"]
fields = request.GET.get('fields').split(',')
return fields
def download_export_csv_only_first_step(request, type):
fields = getFieldsForExport(request)
if type == 3:
Review

Uhh, a když type != 3, tak se stane co? A co je vůbec _only_first_step sémanticky?

Uhh, a když `type != 3`, tak se stane co? A co je vůbec `_only_first_step` sémanticky?
response = dataResiteluCsvResponse(tvorba_utils.resitele_co_neodmaturovali())
resitele = tvorba_utils.resitele_co_neodmaturovali()
resiteleOsoby = Osoba.objects.filter(resitel__in=resitele)
response = dataOsobCsvResponse(resiteleOsoby, columns=fields)
response['Content-Disposition'] = 'attachment; filename="resitele_co_neodmaturovali.csv"'
return response
def download_export_csv(request, type, id):
fields = getFieldsForExport(request)
if type == PrvniTypExportu.CISLA.value:
response = dataResiteluCsvResponse(tvorba_utils.resi_cislo(Cislo.objects.get(id=id)))
resitele = tvorba_utils.resi_cislo(Cislo.objects.get(id=id))
resiteleOsoby = Osoba.objects.filter(resitel__in=resitele)
response = dataOsobCsvResponse(resiteleOsoby, columns=fields)
name = str(Cislo.objects.get(id=id)).replace(" ", "_") + "_resitele_cisla.csv"
response['Content-Disposition'] = 'attachment; filename="' + name + '"'
return response
if type == PrvniTypExportu.ROCNIKU.value:
response = dataResiteluCsvResponse(tvorba_utils.resi_v_rocniku(Rocnik.objects.get(id=id)))
resitele = tvorba_utils.resi_v_rocniku(Rocnik.objects.get(id=id))
resiteleOsoby = Osoba.objects.filter(resitel__in=resitele)
response = dataOsobCsvResponse(resiteleOsoby, columns=fields)
name = str(Rocnik.objects.get(id=id)).replace(" ", "_") + "_resitele_rocniku.csv"
response['Content-Disposition'] = 'attachment; filename="' + name + '"'
return response
if type == PrvniTypExportu.SOUSTREDENI.value:
if type == PrvniTypExportu.SOUSTREDENI_ORG.value:
soustredeni = Soustredeni.objects.get(id=id)
organizatori = soustredeni.organizatori.all()
organizatoriOsoby = Osoba.objects.filter(org__in=organizatori)
response = dataOsobCsvResponse(organizatoriOsoby, columns=("jmeno", "prijmeni", "email", "telefon",))
response = dataOsobCsvResponse(organizatoriOsoby, columns=fields)
name = str(soustredeni).replace(" ", "_") + "_organizatori_soustredeni.csv"
response['Content-Disposition'] = 'attachment; filename="' + name + '"'
return response
if type == PrvniTypExportu.SOUSTREDENI_UCASTNICI.value:
Review

Tyhle ify vypadají dost zběsile. Chápu správně, že se prakticky jen mění, jaký QuerySet předhodíme dataOsobCsvResponse a pak možná filename?

Tyhle `if`y vypadají dost zběsile. Chápu správně, že se prakticky jen mění, jaký QuerySet předhodíme `dataOsobCsvResponse` a pak možná `filename`?
soustredeni = Soustredeni.objects.get(id=id)
ucastnici = soustredeni.ucastnici.all()
ucastniciOsoby = Osoba.objects.filter(resitel__in=ucastnici)
response = dataOsobCsvResponse(ucastniciOsoby, columns=fields)
name = str(soustredeni).replace(" ", "_") + "_ucastnici_soustredeni.csv"
response['Content-Disposition'] = 'attachment; filename="' + name + '"'
return response
class ResitelView(LoginRequiredMixin,generic.DetailView):
model = m.Resitel

View file

@ -57,6 +57,7 @@
<a href="../{{soustredeni.pk}}/seznam_ucastniku">HTML tabulka pro tisk</a>,
<a href="../{{soustredeni.pk}}/export_ucastniku">CSV</a>,
Review

Nevím, jestli tohle má cenu nechávat, když je tu odkaz na obecné exporty…

Nevím, jestli tohle má cenu nechávat, když je tu odkaz na obecné exporty…
Review

Vlastně mi přijde, že je tam klidně NějakouDobu™ můžeme nechat – pokud někomu fungovaly / vyhovovaly staré exporty lépe (nevím přesně proč a jak), tak ať je klidně ještě používá… Ale hodilo by se umět nějak zjistit, jak moc to orgové chtějí používat a jaký názor mají na nové exporty…

A možná je tu můžeme <del>škrtnout</del>, aby bylo vidět, že dole jsou Nové™ a Lepší™ exporty?

Vlastně mi přijde, že je tam klidně NějakouDobu™ můžeme nechat – pokud někomu fungovaly / vyhovovaly staré exporty lépe (nevím přesně proč a jak), tak ať je klidně ještě používá… Ale hodilo by se umět nějak zjistit, jak moc to orgové chtějí používat a jaký názor mají na nové exporty… A možná je tu můžeme `<del>`škrtnout`</del>`, aby bylo vidět, že dole jsou Nové™ a Lepší™ exporty?
<a href="../{{soustredeni.pk}}/maily_ucastniku">E-maily</a><br>
Exporty pro soustředění: <a href="{% url 'exporty_lidi' %}">exporty</a><br>
Review

Ale ty jsou nejenom pro soustředění…

Ale ty jsou nejenom pro soustředění…
Review

To je podle mě asi jedno, spíš mi chybí, exporty čeho to jsou, případně v jakém formátu

To je podle mě asi jedno, spíš mi chybí, exporty *čeho* to jsou, případně *v jakém formátu*…
<a href="../{{soustredeni.pk}}/stvrzenky.pdf">Stvrzenky</a>
</div>
{% endif %}