From 50c50c378b204603f1c68662f4d9ba49506c1114 Mon Sep 17 00:00:00 2001 From: Tomas Gavenciak Date: Sun, 17 May 2015 06:31:43 +0200 Subject: [PATCH] Hotovy import dat (krom drobnosti nize) TODO: * datumy cisel * skoly a data narozeni nekterych resitelu * duplicity problemu (z AZAD a DOZ) * diskuse k DOZ * Problemy "Historicke body ..." --- dakosdump/README.md | 93 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 88 insertions(+), 5 deletions(-) diff --git a/dakosdump/README.md b/dakosdump/README.md index 43b2e152..4583102b 100644 --- a/dakosdump/README.md +++ b/dakosdump/README.md @@ -35,7 +35,24 @@ Překlad ID je potom: #### Staré úlohy [MAMOPER_MM_ULOHA] #### - r=sqget(db, "select * from MAMOPER_MM_ULOHA") +Temata (prořezávání opakujících se) + + r=sqget(db, "select * from MAMOPER_MM_ULOHA where KOD like 't%' ORDER BY CISLO") + seen = set() + for i in r: + if i.NAZEV in seen: + continue + seen.add(i.NAZEV) + o = User.objects.get(username=i.OPRAVUJICI) if i.OPRAVUJICI else None; + c = Cislo.objects.get(rocnik__rocnik=int(i.ROCNIK), cislo=i.CISLO); + t=Problem.TYP_ULOHA if i.KOD[0] == 'r' else Problem.TYP_TEMA; + Problem.objects.create(nazev=i.NAZEV, body=int(i.BODY) if i.BODY else None, typ=t, stav=Problem.STAV_ZADANY, opravovatel=o, + kod=i.KOD[1:], cislo_zadani=c, import_dakos_id='ULOHA:%s' % (i.ID, ), + text_problemu_org=u"Importováno z MAMOPER.MM_ULOHA\nKod: %s\nID: %s" % (i.KOD, i.ID, )) + +Ulohy + + r=sqget(db, "select * from MAMOPER_MM_ULOHA where KOD like 'r%'") for i in r: o = User.objects.get(username=i.OPRAVUJICI) if i.OPRAVUJICI else None; c = Cislo.objects.get(rocnik__rocnik=int(i.ROCNIK), cislo=i.CISLO); @@ -44,22 +61,86 @@ Překlad ID je potom: kod=i.KOD[1:], cislo_zadani=c, import_dakos_id='ULOHA:%s' % (i.ID, ), text_problemu_org=u"Importováno z MAMOPER.MM_ULOHA\nKod: %s\nID: %s" % (i.KOD, i.ID, )) +A pak prořezání opakujících se témátek ... + #### Stará řešení a body #### r=sqget(db, "select res.RESITEL, res.KDY, b.ULOHA, b.BODY, res.VYZVEDL, res.FORMA, res.POZNAMKA from MAMOPER_MM_RESENI as res, MAMOPER_MM_RESENI_BODY as b where res.RESITEL=b.RESITEL and res.ULOHA=b.ULOHA") for i in r: - p=Problem.objects.get(import_dakos_id='ULOHA:%s' % (i.ULOHA, )); + print i + p = Problem.objects.filter(import_dakos_id='ULOHA:%s' % (i.ULOHA, )); + g = sqget(db, "select * from MAMOPER_MM_ULOHA where ID='%s'" % (i.ULOHA, ))[0] + if not p: + assert g.KOD[0] == 't' + p = Problem.objects.filter(cislo_zadani__rocnik__rocnik=int(g.ROCNIK), typ=Problem.TYP_TEMA, kod=g.KOD[1:]).order_by('cislo_zadani__cislo') + if len(p) >= 2: + p = [p.filter(cislo_zadani__cislo__lte=g.CISLO).last()] + p = p[0] + c = Cislo.objects.get(rocnik__rocnik=int(g.ROCNIK), cislo=g.CISLO) + c2 = c.relativni_v_rocniku(2) or c.relativni_v_rocniku(1) + assert c2 resitel=Resitel.objects.get(id=MAMID_FOR_DAKOSID[i.RESITEL]); - Reseni.objects.create(problem=p, resitel=resitel, body=int(i.BODY) if i.BODY else None, timestamp=transdate(i.KDY), - forma=Reseni.FORMA_EMAIL if i.FORMA=='e' else Reseni.FORMA_PAPIR, + b = int(i.BODY) + Reseni.objects.create(problem=p, resitel=resitel, body=b, timestamp=transdate(i.KDY), + forma=Reseni.FORMA_EMAIL if i.FORMA=='e' else Reseni.FORMA_PAPIR, cislo_body=c2, poznamka="Import z MAMOPER_MM_RESENI, MAMOPER_MM_RESENI_BODY\nVyzvedl: %s\nPuvodni poznamka: %s" % (i.VYZVEDL, i.POZNAMKA, )) +#### Novější problémy (znovu) [MM_ZADANIA] #### +Pozn.: CISLO udává vždy nejen číslo zadání, ale zároveň určuje číslo řešení i u témat (+2). Témata jsou též zadána vícekrát, +jednou za každé číslo s výsledky (číslované (-2)). +Úlohy a seriály: + r = sqget(db, "select * from MAMOPER_MM_ZADANIA where TYP='1' order by CISLO") + r += sqget(db, "select * from MAMOPER_MM_ZADANIA where TYP='3' order by CISLO") + for i in r: + c = Cislo.objects.get(cislo=i.CISLO if i.CISLO!='9' else '1', rocnik__rocnik=int(i.ROCNIK)); + opravovatel = User.objects.get(username=i.OPRAVUJE) if i.OPRAVUJE else None; + Problem.objects.create(nazev=i.NAZOV, typ=typtable[i.TYP], stav=Problem.STAV_ZADANY, opravovatel=opravovatel, kod=i.ULOHA, + cislo_zadani=c, cislo_reseni=c.relativni_v_rocniku(2), body=int(i.MAX_BODY), + import_dakos_id='ZAD:%s.%s.%s.%s'%(i.ROCNIK, i.CISLO, i.ULOHA, i.TYP,), + text_problemu_org=u'Importováno z MAMOPER_MM_ZADANIA\nOpravuje: %s' % (i.OPRAVUJE, ) ) + +Témata: + + r = sqget(db, "select * from MAMOPER_MM_ZADANIA where TYP='2' order by CISLO") + for i in r: + c = Cislo.objects.get(cislo=i.CISLO if i.CISLO!='9' else '1', rocnik__rocnik=int(i.ROCNIK)); + opravovatel = User.objects.get(username=i.OPRAVUJE) if i.OPRAVUJE else None; + Problem.objects.create(nazev=i.NAZOV, typ=typtable[i.TYP], stav=Problem.STAV_ZADANY, opravovatel=opravovatel, kod=i.ULOHA, + cislo_zadani=c, body=None, import_dakos_id='ZAD:%s.%s.%s.%s'%(i.ROCNIK, i.CISLO, i.ULOHA, i.TYP,), + text_problemu_org=u'Importováno z MAMOPER_MM_ZADANIA\nOpravuje: %s' % (i.OPRAVUJE, ) ) if not Problem.objects.filter( + nazev=i.NAZOV, typ=Problem.TYP_TEMA, cislo_zadani__isnull=False) else None + + +#### Novější řešení (znovu) [MM_RIESENIA] #### + + r=sqget(db, "select * from MAMOPER_MM_RIESENIA") + for i in r: + print i + tstp = datetime.datetime.fromtimestamp(int(i.DORUCENA)); + res = Resitel.objects.get(import_mamoper_id=i.RIESITEL); + c = Cislo.objects.get(rocnik__rocnik=int(i.ROCNIK), cislo=i.CISLO if i.CISLO!='9' else '1') + if i.TYP == '2': + u = Problem.objects.filter(cislo_zadani__rocnik=c.rocnik, typ=Problem.TYP_TEMA, kod=i.ULOHA).order_by('cislo_zadani__cislo') + print c, res, u + if len(u) >= 2: + u = u.filter(cislo_zadani__cislo__lte=c.cislo).last() + else: + u = u[0] + else: + u = Problem.objects.get(import_dakos_id="ZAD:%s.%s.%s.%s" % (i.ROCNIK, i.CISLO, i.ULOHA, i.TYP,)); + cbod = c.relativni_v_rocniku(2) + if not cbod: + cbod = c.relativni_v_rocniku(1) + assert cbod + Reseni.objects.create(problem=u, resitel=res, body=int(i.POCET_BODOV) if i.POCET_BODOV else None, + forma=Reseni.FORMA_EMAIL if i.FORMA=='1' else Reseni.FORMA_PAPIR, timestamp=tstp, + poznamka='Zdroj: MM_RIESENIA\nForma: %s\n%s' % ({'1':'E', '2':'P'}[i.FORMA], i.POZNAMKA, ), + cislo_body=cbod) -`MM_RESENI`, `MM_RESENI#BODY`: @@ -175,3 +256,5 @@ Dekodovani stavu navrhu (MFIO - oblast, Tema, Konfera, Pouzita, Zamitnuta, Dopln poznamka='Zdroj: MM_RIESENIA\nForma: %s\n%s' % ({'1':'E', '2':'P'}[i['FORMA']], i['POZNAMKA'], ), timestamp=tstp) + +