From a123fa71e301ab89da0edcece3707d6d2f7ed5ba Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 7 Mar 2013 18:19:12 +0100 Subject: [PATCH] data entry and evaluation working, without storage of results --- knowledge/survey/base.py | 31 ++++++++++++- knowledge/survey/browser.py | 27 ++++++++++++ knowledge/survey/view_macros.pt | 74 +++++++++++++++++++++----------- locales/de/LC_MESSAGES/loops.mo | Bin 21656 -> 21889 bytes locales/de/LC_MESSAGES/loops.po | 15 +++++++ 5 files changed, 120 insertions(+), 27 deletions(-) diff --git a/knowledge/survey/base.py b/knowledge/survey/base.py index c156d7e..a4a5d57 100644 --- a/knowledge/survey/base.py +++ b/knowledge/survey/base.py @@ -52,7 +52,7 @@ class Questionnaire(AdapterBase, Questionnaire): def questions(self): for qug in self.questionGroups: for qu in qug.questions: - qu.questionnaire = self + #qu.questionnaire = self yield qu @@ -65,6 +65,13 @@ class QuestionGroup(AdapterBase, QuestionGroup): 'questionnaire', 'questions', 'feedbackItems',) _noexportAttributes = _adapterAttributes + @property + def questionnaire(self): + for p in self.context.getParents(): + ap = adapted(p) + if IQuestionnaire.providedBy(ap): + return ap + @property def subobjects(self): return [adapted(c) for c in self.context.getChildren()] @@ -73,6 +80,10 @@ class QuestionGroup(AdapterBase, QuestionGroup): def questions(self): return [obj for obj in self.subobjects if IQuestion.providedBy(obj)] + @property + def feedbackItems(self): + return [obj for obj in self.subobjects if IFeedbackItem.providedBy(obj)] + class Question(AdapterBase, Question): @@ -87,6 +98,20 @@ class Question(AdapterBase, Question): def text(self): return self.context.description + @property + def questionGroup(self): + for p in self.context.getParents(): + ap = adapted(p) + if IQuestionGroup.providedBy(ap): + return ap + + @property + def questionnaire(self): + return self.questionGroup.questionnaire + + def __hash__(self): + return hash(self.context) + class FeedbackItem(AdapterBase, FeedbackItem): @@ -97,3 +122,7 @@ class FeedbackItem(AdapterBase, FeedbackItem): 'text',) _noexportAttributes = _adapterAttributes + @property + def text(self): + return self.context.description + diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 57072dc..e232866 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -24,7 +24,9 @@ surveys and self-assessments. from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy +from cybertools.knowledge.survey.questionnaire import Response from loops.browser.concept import ConceptView +from loops.common import adapted from loops.organize.party import getPersonForUser @@ -33,8 +35,33 @@ template = ViewPageTemplateFile('view_macros.pt') class SurveyView(ConceptView): tabview = 'index.html' + data = None @Lazy def macro(self): return template.macros['survey'] + def results(self): + form = self.request.form + if 'submit' in form: + self.data = {} + response = Response(self.adapted, None) + for key, value in form.items(): + if key.startswith('question_'): + uid = key[len('question_'):] + question = adapted(self.getObjectForUid(uid)) + value = int(value) + self.data[uid] = value + response.values[question] = value + result = response.getGroupedResult() + return [dict(category=r[0].title, text=r[1].text) for r in result] + #return [{'category': 'foo', 'text': 'bar'}] + return [] + + def isChecked(self, question, value): + if self.data is not None: + setting = self.data.get(question.uid) + if setting is not None: + return value == setting + return value == 0 + diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt index 44198bc..335b628 100644 --- a/knowledge/survey/view_macros.pt +++ b/knowledge/survey/view_macros.pt @@ -2,33 +2,55 @@ - + - - - - - - - - -
- - - - - -
Does not applyFully applies
-
- -   -   - -
+
+

Feedback

+ + + + + + + +
CategoryResponse
+ +
+
+
+

Questionnaire

+
+ + + + + + + + +
+ + + + + +
Does not applyFully applies
+
+ +   +   + +
+
+ +
diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index b9a8f3d8b5afeec4365535b5ee95d18d6a0a2118..17afdeae7d8c6af05044b6a085829c0524f7aa0d 100644 GIT binary patch delta 8357 zcmYk>3w+P@9>?+DW*58J%utMNhRxmF)+X1v&24T)ZfoWr%Nk~LEq~NWpFO|#>+iQY=d6CkZ~m)(-gD6bs~nz( z{TwG2{|IxOKS`I@R;lA0k8_+s_z5<{2Jwy)gagfcFqr&ktb*f_A)JXAfkjAHX8}gx z3mAfB816V;XSbVh4xz{hE=hvY=evcY3rGeuFVmhi_S5$c)%MV6Pa34nFLsmZzwZKKF zov%b~Xrs9et1`c{heUNegxbj&Yj7Slz>ijc19cK1iSB@LsEJ#nZmS1soY5GG1*nPV zB3+$jcqhJzF?a;M>Ue>K2L25-U}Qu0s1s2GrlSVxZ}~BJ2l>gU9Y2A(>*uf)>~&`2reo{#sF;M(z&Up(^^LI*dcDbULctlgO<&rB;3j)xI3-;Z@Xv zq8hvX6OlbRsi>EC6ly~YQCGR9G3T$lETKRXY)0h|U;rLPUBL;gg5_3!9<|f&P%rCE z%LgR6S6BnpzYc1=IMj(HTfQ4=zP?@(I->EY4n>xqg*t&nsEO90R{k35X!oG5*9$eCcQ^?haUN=?bFIM>sDaj?2Hs@l+ffTRWaTF@ zl>9}@|A@Nd-%$&z)xjIeC`Rb}kMSk=M6f;$TccjGEDXk}<}B2N^UcRG zg#44Jg{`vudej0oq55w@ZD@Z{huPCySRk9ikqktiQtu0!+NOt6x0c2 zpsr*j>WU_!KI0jv_RFmNMJs<3b!CT9{XR#%jNhPFEB%XvRvOscU10=2TIg)l_dXv(@mZ{kFQD4*L7m(o)VQBp{!7%jKVt-5$KF__CFidr?AOvAU?i$R zE^4BwsD&-G`lnGRvd;1^V-oqTmOqU;sSBunmrx78hC0z(SPg?(x%rx2652rmY6qQA z9eSY}4nST9XEf?)7ovV~ti^`-7V7TLp!#1y9rZ2LLgG0-?Yt3c0nJb+multS?j-m! zoIa?D3$0=n`jhvfj&gz3FGjs&D^L@Zq6XfKnrJ&}f_G6b?IF}SXOL5O%26j4n!+z5 zegADp45Gk;I*IM5ot!`obQU%6CDhmP1L`yKqqoWf%`nu$s-up+5o+Q#s13A7Ew~fv zYP(~&zW)&<)X-xMCZak#g!)X1kwrU8t$Z(PA%{>4EJrQ40yV)esPV3&-j$o!6aCxr z31c7B!e^uJ@Bcg!>bMBCvZbhjH>v?{LA{hau{j>ZIJ}0svKst)Q@c8-d?H3;Q`AXy zLT#uUs$C|k-4OI@h4+!r#JQ+nFtbn#SdQxO9BRcIQ5`p9C)|b__-9nR8(1Bk_U_K3 zQTbSm!j>3`T`Zr~p7U41{S@c~rl2M&MolyawUY&?307eYu1EDNv-W5muFw_o5p$5)Hy<8K~w@}m(&#`hZs@)P) zzZK>hvjnx!S5POvOC8kkfO*6koJ1|;8`MI6!kTy;)jllMt*?Q~$C?dM3uunoc?#;? z$v}OkgHan8gBsuaAPG${4b^crru$KWJ;?96%W*p5->8lq)7Ct@v3MGZXA%EzOQZYJs-Sb*yP zl$Aec`BK!xZ&>+3^Em1XzQ8bj|CdQ*Q*Z;db9Qo6zfo`HE2<_~4tcPl! ziYo7KW}`Mxh&tkVsHiZp$X@rK97}_ zUyJ&zwx9-j2X#{WQAc?U^;w=oe>{ike*twR-y-j=a}(9SLr?b#JEJz*+b8#bFNp>e zc(4&Zfx7EAPy_D30Ni8lM=k6Ftb!*|3ptJIchS6zf#iQhwY!Bn$-hunS*sTdWqzj# z2_0=3>S(jD9_FI%Y(A>vTGUm&iQ2&d)KPzG_1{~)e{c8eh(S%%8uhYepf)-fgRls_ zy2Cjnw8AB*w|Y712-l$|d>z$pFKS1}k^eZK@nbaB@8jP691JGE4z<8iY=&>47J445 z;tkY1PA2!SJB`S6@AeK!_Xof$AUG z*B!q$W|MD#I^hLd3yt5d0BC@dj!_|9<>y2CJba=!9z56V*Qp zwGa=6VLs|aW}-H@5Y=wEmxKm>3Bzz3Y9YIkU+2zo)b||G-+c#?Fok><)aN!8wa}H= z21`&2I*D39xz&GV`77p4)b9uH-y}3~>;U&}lTn{jOUtLA224f0oLwwG)EtG{QLg3l zQ5z^ijk6Hj;bPRU^1Y~E$>(s0zW+P9=q428qfX)()PNaI2koiTda<$sD)*s`VX@F2-JeIQR7cB=b;v~+)F}7wjT96eiLfK zeO7)1^)7s7`Cm{I+(HfDe~;Tg3UyL-Pzy>#P1qjQzNh5}pvE7AIw5Z!3GHY)`k|h| zmiUtN*Tf8BGohES3U$M=D^dB(BT<)fP1GDm5(9|J$B*ik{h|8xY-z0=LLHiYG073TImSEM6u?S-zM)%PcK2Ed2pyQ}+PTTi?H)5kw3H z#h5_cOFDtLi)ckY4L`%m=Qk3^h$6}>pGhP<A7`RHZT)6>QGa~nVPSF;a&^ndSkA{~vDk3MDZ z34ZX|JG-p(SNxG^L&GRyrgd0BSu>&qd3`bcuo1DAw4MgUcZB}IQj7ATgkEet-?}(I zVI<|B;}~qt{Jytwwl&y^daGX{ZV`=$k;LP~T%s*e`AlYj%BPIPB+C!5!u>e$wl<3^ z8{>4!XA#wP|8XR4P#B0)@I29r(6gSHK)F7pABYDCJ@G_74lg}TqFKX)Fx^WgJ?gR=uNy% zK9u;LsC@K~it5z$!RLtr(tn|T*`$+xi1;t*O+=x-|2ZU*2|Zn?jKTYGk*|b*O}p`g9{qaO6GYyhxWmeyqHH?x5s^a-B2ui*tNX7<<{1j7VmqsdBj1D= zXnB&(9{u16wz8I_I}=xl$B3VahlyOPuZAV$J7XF~;5Vq}ii_TV_kUcxiIc5x7!6wy zdScBeH|so&J*?~#(i@1Lmj9h}9-$|kvYKwvsZTnZ^gBdVq8IrcxPcis6Sd=Y1a=ku!Yri!(o>GLi>M>%v(f-6^^3u zKuc$mzSq)slGbxSv4*%#tR&_We-o{#?}AnFJ*<2hlSrw|;6`EyvD{b2MaR=&FPSsM z{iGWche@9%5?7YguHpTP)I)?rO$WG7X?x1e5b9=G`XU}7awz*4YgzeNe3WQUd8(Cl z#N(Fkfe%_*9B|X4eE%4`MCJm~jLuDne9|wt4SYW{`I$(pv$97p$kL(>F_D-+937z$udprg_SOThVkIV~U-95#$%F9<(!@fnK{|BsQTX+Bf delta 8144 zcmY+}3w+P@9>?+DX7?*2yI^yfF=mDl>zLa%3^UAK2)QjSmqa*!qC_00v*cEol2&fD zSu-=k?z2vmVa(aXy~k@Avopeeb_NJwaTM0aZRm&R%`50n`8Otccf9 z?fhyuPB@05KjS;q$n>D1HfG^uR7bne7x$r7_?6Wkv+`+F#}_aH@7VM3n(n|+s1?^l zEu@Lr8r6RntibqAFEX0hNNZ4ln)y^Uz~@jquo%_hdep!lqE6`us@*TBmEA?P3$4ZA z7>m)^1}kBI)O$~$M;$*;Mjb9kZSlLP4)>utI%(z07)ALWYQ>T9?orgkFv`tQD{YUO zNFJ)+VHksxP~#P%CR7~H{%aRa1w7=!GtlZvYEh3Y6DtKkgPgjS&5 ze;1jf^BL;WUP3LXa)Nu5bx}ujtViwGW-A{=jrT2Thi-Vt=!J51+=>9y3ZhU0C81{i5Nd0?ppK*;s)Kyg z*DwXuehz9U7Nd6PZB&0Bq2Bu%)!%v4PI~?zqm_o%bsI#YI;xB6_(7}BL`|TV)eprW z%44lO6?MjQQ4?E@ez*y>gF7$)ccCV-4{7IdPLT1X;u300uc9V&2LsSA(cPhNRDC5> zhq0&uYNA${h^g4p>c?Rq<;kdp%rsxbSjsD~hQ9v~$oNxn+Pr`|lB?!T45a)gYC=Bs z+;S*t0+FcqV^Ir9Kus_SHL(=biZf7K-xIaL_BRPip zTF#@|-?RD%uDI%JppK{o>b)$~<;z1&bPQ^u6HpVJik@IH)5&Os^H3{)8P&luD;Hx5 z<@MMFPoXYZgCw`Z)~JCyAYYo(6Sd+gr~&7hFJTDfS5P}uoW%ZXOE*xV0k)uKdJ%Pd zuVN7THE^6NSOL|(0qT-9Lk*B+XyYQmFI1206iUyfn88aX}ZJr5ae@1ZJXkYJt@+MeeJ!5;gGWR(}Y+DIY`aoacl! zIE%Ve7f}P;MRn}WxoDs;)Bu%Gw>S>fQ6prtoK)0~4Z+4Z7jtnZYA3=PxeKX>>Zb|P zug6Izqt77&bu0V251fb1p{R+CLT&vt)WCC5E0~X(@Ius?E=9H5h-$afp6^1n-;Mez zzQh!L|L5&NB-7SJ;!rb8MQwd6)Bqh&9d<$8kzCBgen=P2O4LprM!k0&_1+oO#LlDo zy<^Y)n{XNR{g)?`gs~Whols|%kLqZgm8W0?Me)J*r_>tblz`9gnv11T0VaISj`|R$gP}EvOyX ziyG%k)Hp{_3ptT$-~SaVDp7F@)lqO$w?P%u0LiG1T3LMtYC^s3`6w$tjauP6)PRf3 zS5XUj4K;zas0EfZW&hRjb}Dpfc46sEQCob(>W`t?{e*h)qIu1{jhd)eGk1p~Q0=Ok z@u=rXsEM>hO(e@h<^eKYP%jL%2KiQ=U`|C%U>0iSb1)Q_p+3`M)B-l42KX2?z<$(w zhcV5I?;bNKM>OZ(6zJ(qMlTkkURa6hU=6C{ji?FkK>bteFzS21iuy|@wuQS>%`l8| z8mfIqR6m1IXFU=t;uNfm3y^jm=M8(X19iC$qVB*6R0o%={)UzBq6YR$bKA$Fwze*6 z!YyzRW};TQ8nsiGPevrQZP%_&3DAXmaj_Rl>Y65Lg9c0_{KK6VJYR4v< z(^3BgH5=96>!|nEq6XfE+KJt$oji__jPKkc6N6!Yb61v#YS;#K)_LY|tWJ3nY73X3 zc48w&<6f&ji(1HSdmhF&9Y;9<)n68>|32u^i}_^q!n5{Zsksidf?cRBK7cygQ>cHA z-$YG3GTr^{Z;bJj`(ZWoU=@57)ov@s;!&)FH`3XEO`u9Ew_#JPO1T^Ag~w4VoP&v2 zglV`Rb(#EHyGIm*+TvOmhsmhVI0tn^d8mc-M}5|#P)9qawZ~oAL@M+Z%tl?lm$38< zQ5~;Eb+8$$<8IUd=TQ^9jC$_V#%&*g+No+-9h;yQlxOt?s3UmRLq=!0*dA;^9mQ_* z1ZszVMeR&rTeqBmQIuPwCeRl(z*y87&qIBV%TfKUGe1VPKZcs1=T|b?O5b+wPDG>1 z^{@t}qb4{QwIffV4|>d5*pTuZ)QYyEw)_j!z(-JD(*@M~zoB;S4)Pg#9PbSGuhkIL zi{YpvsEph%Cjs^1Fw~hnhFaN^<}9p9xe#mP`>1x`q53=-i$_H$~CbZ)w1{#RETw_ry^`IZFLVcFSs0nUEUE&W=6WfpK?*dBfO z!!v+PXEHkLV)V!Ts2Lu?`gj&~2f{kIJ5(DrP%`T4c*xAM=iM-e`hKYXicy#I9n{3W zz*_iS2liiQ;dFEd2thxJwNNXshw7ju4#G^-)~-fv`6sA$-&*-HYNx!j-6JiJnqUkj zV{KG_c^HTTve|!iG@J?zJQX#enW!CDfC0E1)ou+2;Z9V$y{HKsMSg9apHZJ{d?)uv z)3FidUZ@>@9yP(YurY4&kkO2OK~3O>HTcuY0iE6YaMbr-8H2G2>MUEKH)dM71FF9q z)Me~t<6VzN6Rr4i%`GS-=KbSZ(?^$>Eiwr&%_|g>rfqTK~3l* z)Qb0@cJQ{<2XG*|Acj(oMZKSddfp7Z_5G)lQHO1i|2f(G(H57YR`flF;g6^vlIy6I z{Ei{$o$H=?II3MDHpAwqi4~ywpO1R)WmLaKSW(~q8ZtW5?dBfTT{wc8@d>N{3H3vA z6~i&0o4c|o)W8X-2{pC)wy1^VqE=jpn!qyDj=zB(4Ny#`JeDB8iq5B~hJhS-GFC!$ z+zwTri|VkyITZDEy z)RuYoa1B81Kp1Kwv1S5lCzDY}m4+I)6{??XtbjSFi4E?-{;Pu#R#AYO&_vV#v&}`Q z39Uix*e29be25zGnAQJ?`u?w2*+0+izXIz0Xw>_4P&?HqmyBkVh8nOlYC;37JPb9! z1k?^qN3Cc+dg0?l0-=;c#o)p-u@yZxDP1I5Q?n2G_m-1Dei%+CGzFy(T>ko#e~3CQ zXgA+#_G1bWL|rAkMQC4ZQf`4tU%NQ#Os>Ai=}aM*M(<)9q9@UXc#+5yzj=GUnN0!8)ZifX#BVq^-yA!XFe*#BiZ+oFO zHn9A7>f^`{weoY6%hEP7tIG-)N}EEgj!zN=8$bftW+w8TGeP#0+_@z?nOqOh2Fl!i((T$~l= z3Dn;zN@rc14BB=e9wF*b_a&jf+LZcHcgD>+8<0!r)S<2sq3=sS0tYnyN-|2H6Jv;n zi5NoZxQp`{`taflR{j(h68e9llqz8_q7V6FL>e)K@T2YuK8Vr89rB^XHA2a^Z2iM2 z45xt--(%^287M!Qc!%i0v+q=Kf1+-YmH&HR{jcQzb6;86KZq@a{<~UfCozG%f7$+T zqT&MKPi1|~Ct4Eg3H{yrH|m=b@kB1=QCOCGlR0mN5Ah%|mS|6#Wmew=*I528W?8;; z{3IHFLq$E}Hqp>JpG3a7<*Sh&Mbsh&5YG^A6J@C~?aEu*iI_#q<>4@^Q@dK^eTi?$ zCu975_s?lZMH@nCFVTm5d+dwR7><8Or5!HLZ+HQK|2)iv`?qAAL