From 74988c1834f7e4c2aac0a446ba86a3c8b9092d82 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 18 Mar 2013 10:54:08 +0100 Subject: [PATCH] rearrange answer options; allow for unanswered questions; intermediate question group headings --- knowledge/survey/browser.py | 16 ++++++---- knowledge/survey/interfaces.py | 13 ++++++++ knowledge/survey/view_macros.pt | 55 ++++++++++++++++---------------- locales/de/LC_MESSAGES/loops.mo | Bin 22194 -> 23228 bytes locales/de/LC_MESSAGES/loops.po | 44 +++++++++++++++++++++---- 5 files changed, 86 insertions(+), 42 deletions(-) diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 657c3e9..30c7cdd 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -52,9 +52,10 @@ class SurveyView(ConceptView): if key.startswith('question_'): uid = key[len('question_'):] question = adapted(self.getObjectForUid(uid)) - value = int(value) - self.data[uid] = value - response.values[question] = value + if value != 'none': + value = int(value) + self.data[uid] = value + response.values[question] = value # TODO: store self.data in track # else: # get response from track @@ -65,9 +66,10 @@ class SurveyView(ConceptView): for r in result] def getValues(self, question): - setting = 0 + setting = None if self.data is not None: - setting = self.data.get(question.uid) or 0 - return [dict(value=i, checked=(i == setting)) - for i in range(question.answerRange)] + setting = self.data.get(question.uid) + noAnswer = [dict(value='none', checked=(setting == None))] + return noAnswer + [dict(value=i, checked=(setting == i)) + for i in reversed(range(question.answerRange))] diff --git a/knowledge/survey/interfaces.py b/knowledge/survey/interfaces.py index ea15928..1e23003 100644 --- a/knowledge/survey/interfaces.py +++ b/knowledge/survey/interfaces.py @@ -43,11 +43,24 @@ class IQuestionGroup(IConceptSchema, interfaces.IQuestionGroup): """ A group of questions within a questionnaire. """ + minAnswers = schema.Int( + title=_(u'Minimum Number of Answers'), + description=_(u'Minumum number of questions that have to be answered. ' + 'Empty means all questions have to be answered.'), + default=4, + required=False) + class IQuestion(IConceptSchema, interfaces.IQuestion): """ A single question within a questionnaire. """ + required = schema.Bool( + title=_(u'Required'), + description=_(u'Question must be answered.'), + default=False, + required=False) + revertAnswerOptions = schema.Bool( title=_(u'Negative'), description=_(u'Value inversion: High selection means low value.'), diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt index 3956120..d225219 100644 --- a/knowledge/survey/view_macros.pt +++ b/knowledge/survey/view_macros.pt @@ -7,7 +7,7 @@

Feedback

- +
@@ -23,33 +23,32 @@

Questionnaire

-
Category Response
- - - - - - - +
- - - - - -
Does not applyFully applies
-
- -   -   - -
+ + + + + + + + + + +
No answerFully appliesDoes not apply
+ +   +

BrgW;Fgw|jTuCx3m ztA8HjDSz4Ok68UFtikxsSrS^obsU9XV=4}5=5@FdE0AA{YPZhHpRxQ4r~&q193Hm% zk5Ci5f?D|($cmlviJq|-!}v}k60w+sT1i)H&j>IgbuIqZQk z*ax-J!KlkR-tyU4k$fTQ{rMP!5!8+?xBOG61#MP^w&(!rg%g%PjatDK)IdL=W?r?W zx3!H>N75Sgeh<_U3`4b_fZB;5YKQJc_4gR+y{A$AMRt?W79YY&cox;*6I4gvp*oIf z<(1b$-Qpxvc}J{_{Vbo3I^#P~6PttDk)@~|d>CVJB{ELLSxZ6`S#`(cIZ>oi#M&lW*cwEnxc-PE9%Gwp}wZEsP-W%Uu5Mgu`1=8Fj9@gE)u$(2T(Kr z5VfLpmQTcXYb&E$$z ze2uz%4cdAQ+L)bC?RuiNatLaI8K{9WQ4?Q*y6r2mGHyiuQQMBp**S{6@dvDrJ=@v$ zpGhw@D42qpS%Kx}qXt}oy48=OR=NcT;U27xzV_aPYNG1vq9&4LNtpcu?RK5Js68iQ5~&Do#hj#9Xo`~!MTAMn8?SjohU*rWF@Mf zwWxkKU;=Kza{B)NXcY&{w=tdu$52~;5jF4))C#^tP5372jD4NFcC}IM5>fR@sP@UI zud5?+U7U0)zYi1i{Vye<89srU@zbadwxK$F5p`L1<3M~JIbJ8av$vwIsP}rK-b=$< zFdfzJRI3l6F6UfK#``hSn8bDxI+WQg8Ch}iCU4<#cLOXdM_3=!8)jc zn_?|YK~3OxRKF8YM=%xjUa$-M-;=~F3e@pdYq$$_=C7eTe%JD6uqOFysL%CB%U4hF z@{LhD&=xgNN7O*wPz&jcn#gEOz&lgee|1z~4HlsWScU57X)E7?n$W9Of6VgdQ7ilc zHQkgWE%M^&5HH8XUKRGv>#r30y_3{BzXhiR$M4pwu)Qn|`w=s{Jt3 z=X@7xr87_ynTwjp0;KKV$jrsDbxd`FrMvsH3`!n)tUk3Cs6lEXH@TNoZ>~p)S*I)PVaf|7X-$okHE( zbEuBKL`_70()4~MRDEq!eKKn2Qq11ifP5;dzo}UA_kSh{4LlF^nJmGE_&91sJFy-f zw)`ikc1|DftmDn*=sNs7pmuUR>ivAIi_1{uPoXCIQXlqT4GvS#7%!nNPldkT0JTvs zwnDuyz{)etT-3@Vs4adNb#%YSCio(1;wLc)Z(t(U?dL79SHFn&$6_J{YIrv`!eZ15 z+fftvE9#HRm#8hQ+23p52DN}RY>AVx8?HdzsW(wabQ-n87f=hmhWhNQMY!@hqj=Ox z>R~x-fqF3+wX#mA&nOjj2}fZxPDOP*6ZQTaba4r4fDNb#Zn63|Q0?DE?NsCg5-y2< zpmrdBpjY8Xo$&zFnT@mZ5b7wFm}^iwv=y~82Q7aI>yZB^Y65jqz5d&wj(8~YSw@^Y zNvOkIb0O-5-=Su>6}6QIP&@Iy<*#59@;{&^*m#h)Bb~84`Cev!Y)d{3wV=CE<2{HK z_5H82f{m!pW*1`Q6})2}Lrv^2sJn3!|NPYKV7+E~=xhsIwb^TG3S0))!d)16KbO>TB778u%#c za$Z2K{BzVo8OG4MBRaW)Jhj1yY4K-iFgEcCt45l z{^d0tqsbSdCVUUJ#uccE?;6JbYYPukP!&&NW&GH@j;j9-hhtQ_*Wn1%R%W6m7)GsZ z33kMd$S3Z6fX&e5f@z&EIwRm<>RNWkjkUDQsrMYT&o zbvzu^aVBa)0qlWyqkb25qVCR7Y>$^wM^tx2$wVVgcM=^a7>t_Hy{HK+@ftV}T7HeW z4)sH`5jF4u)Ll4+`Ycac{xqt;bErFZ+4A3;baa zj{0q1iu|ARI{#>i38TE7=!M#$!Kew1#P&EIwSz0Hd<~Wy3C8OC-)s%`p$2{j)zJ~u z_kIfXIi0~8_zmjFqDOn}Vo~MwPMh zat)j_*biHe@m3T4fm)1O$#T@?D@L99I#j!tu`?b*P0ShV_1_5fUeZ|hUt86I zf_O|po#`-hJnAlFqh>tQ%8O8!Y9VUnYfvlOgc^7^YC?aq^7l{+IgeU!;y7;t$>Z36 zt-K2b8lW52!~w`3L}!dOT#J748&Dmeu=4Y$4nH- PSUMD1kUc<+0!k6K6v)XKY} z>IX!uARRUEc+>zvE1!c}*+SG^cm%a$#pW8+4m^pP$To8~YA0XAlD{RWfsdj3IfJnn zIY&Y>yMgN9Tgy9{-h`r21Jp5FpeB@p+ObrujTxu`bF4g!b;;jn`PHcY|A2abvsWH* zULv8b*pHggJE#FaM14NjFaaA+@Xod)>L~i7Ix0YQya4sya@0gtqjqvVYUMAW4^I-` z5IM@|``7C834cj}3ccraX#($}?xy8qtX)f!JLU8x`dD7g?j=%)I%UdQkj^CbQT`S2 zGVzYS|AWN;68thcJ8%l|DJSHVg;e+IFVkG;{T(;hSsi&IShYKxppGa%Kk`t zKhd82Y%A0FCI2yCt`#WXw@g}j9m5%77!gHX2fW?d%qi1$0_oY*eL-9$bZqO0m4qIB z;#oum+9eZTYyay}P(K--(C@sSTK2-d*p0kCO+7Wq_qMtzQnM6Axj#xRaVydN;FC=adJt$j@wTSHmPsCYDVHM(4a#Sa!Xr%uo9#9AU~`Re#6`P=XimOj5F(TAw2^PfcJ8Zt>lHqoE>8&UcU zB%vP~{h0J1QfR*ldlOF(rO(pR1YRP}5%WFX%BJIF^0(pNi9Zq73H^7aTy#;-AdjE^Sxx6( z`uv4N1EQQ>A|50Cf>p+o&mx)`rSiN@>dKVq5G;{2%F_#8e`W z{7n6-jUqmxU^&r-D191HuIE9bAL)F{FCgEA7)(r~tRI#>V@eZdlz9a2q3wxZ)JI|{ z*hDm;@+cl4-X;9Rp9wwR5f2mNY15b}Pr87pOgv7UB05tZCVoS@^yxre&l2LPk`(_% z6-N@Cl=pG|b!jxk8mjDdBAt9R-lGDZS;Q7%I5Cd8AYLQ%JVQ(*>JXKwOCt2#iq-Kj zv5>f%{H-{j`1vV*wPD2>aa8?}m3@wviCCgGkxJ-!gm|$e#UatY7wMOX3B+f_UBnP# z2cf4cZOT5&$Pe`G=;hX}5($Qac}02d@S?mafdV&wn%g&2I5$vG=%fcjMXKSSRx`UO zP#6y8hYH$(j>z!};!%fSXnFP9WRw4$PYsp6BKTC~>oLbKRfc`A^NA^c~|` zH}};KIKu;T7495{W(a3^zI9ssQ1Y(CDY?PvS>gPGc|Y}+?B*2}hRcp!+^5ayh&Pdc zAKC9@+iuVqP$0tNp3p!e6!y=LFpRUyont=4BPk3}m}=gW(*e>e6AL zpnR}!roTAWKQZoC)AJW+``7xicYN)St`u8XR4^wnZ_=Es+@ipwP<|*-e6!0#QSDQ9 ztVkJJJ;Kgsv(s6j`B^!+>bq|!JU71}90)mmy|QeMDzzYMdLWeSW(NZ<3(*?^Hhl_P z@3juQoMUz%^1DL=!BBwSre{qFbaMx?2Cqi@6|fH7DRIB*!N21~>I7fw zfSZw@n^h1Dzp*~dVHGI??pQmq(#}f;-;tK)^EJQUnvX6BPMgN4IUHO_d*aS7a>^DeOKX3%f7{05qOm>y1-7Z6O#lD@ delta 8480 zcmYk=33yG{8piP*1WAa5giz!V5@XDX5@SsvK@3r9Cg!4%m}?uWR}IxubTHFuwZ^nc zsZ!b+tG6f}P*fH7n%Y~Ga{q7kr%(6ueCM~;+G}2WpA&X{7_fCifP1!RzC{k#)BwjR zjin1YPEa0)CBLLR-QK|cg0SG zSq=*_z7tO(91~G1Nwx|dQ62QM`-4$CF#*-#0@T1Ou>^jA>gNa+!Lz7(*O56mkFX?` zui!Wln1rqxrjby`Ls1>NsIB&+I$V$HXqV-Wq8^WPs1@Hu9Z5(<#|g!f$k{rTP!p+# z>bE79!tSW?vMRFwn$a8zG?BG-V;8EyH>jEZf~t2PIVC4D)+=-Q&H{x z$fBKfsE7A3YC(5UM;R2y{_BjxY+OgLxzXi3Rk6jYlq7$eFKU@9^Y6bUD0~N01&Ac>fYvWNz(h$`?1$6{H zQT2zRc47i*hvuUCTa9YB4Yd>Qmn5{s-=S7|-74Hgbre+D>o^M4Fcvj|L@RHB!Q?wx zz8C6@hodI;0%}JVqjqo^7Q|IZf3CBhgevYtJ#>dL5HFy%_E!wT-%$-8ngyzOI~Inz zABh?u8Z}@HYQHTj>LT8bVI*K8v9eEyAah}~@h1#JU)L9=w z9nopj+jALJ|B;m!tLBxLM;%!MRJ+!whp{WVn(0UqnrSv_hRLtSQJ%19<_6csD4{pz5}Y?K3Ettur-c}Xa7S)9I^_>Q3IVv zt>BK`&sW3Sk;16@B`^+smT!aFsWeo(bkxKLpmuZ^hT>Su&vHp<1q)FfZa_8IhN}1p z@_ac*P+NNk^~Dj)wp73hsIyN-weN@8>S3sfyo_4;BGd%lMD5%pw%-5MBsx-X z615Ytlxii-Q605Ib)1fRJ9?rX(&wx^+nj`&*fiAEFG3Bx8nuA8P&={#b+lWtklz0T zBvkRFRXB}ma0d07TtXJ@Jhbu}b?nCnHNh0rgu9^z=!@zv1NHU{!IqebtkKzyTF_O@ z{r$g5LJjYsX7&)(aRgsm>Npzp)KTYfHvkzbBQ zaFgXft;hbW;A;xB13#e#x`Z0&8fqoCQ3C`fcv~NeY8QjLUk5cnD^x$-th^^`LZj^d zG|Rt&THx9Q&R+v=qCkF#8fYhK0{c-bJdEo2IO^d#jkyy=ZSgfLzk#av0M#xa(KE;l zM@_UOYKN-0cB8JDWEEPVCejr(k=_`I8K{mY+5H)opKHE~n!r-j%2%PDogCEn$zJno z(>-U2>!|nmFVqTy>U$F?j+#I;s^eH}5Wt^P*n<3^C;1};-$S*#jH>@TY616A{pM@n zEg%f_r&=uXec(DRNR*%;6Sb9dP&1v6TJbVeM>(jo-i5{R7#7EisCs`|c^I?N)>c40 zBk`#Ajjg=3<?ZG(D<(oqBUv;1(>5sk$N zoPz4dkDAB|)RDZS`;6~wvkHe%TX)Jli>1k5LUovjcTNq1Q3FSzb|ePNU;=6XmEubuFhpRPV|8;haDA1o=ol!H-#yET#E8uo4gJMTWwVR zG}Htppz8TiJGco|{|IUUm$5QFYU=Vdlc?Oxd#DDY&S*Spi>F~U&PBcN@1u@rE9xkA zpdQ*UQSA<+R(1mQHe5nIgtsyG2%CHT2BX?Xx+HugVo(FLK+UkNRp^hJ$Y|6~O+p_o zM6GD6l^;bN!9~=O{bA*WpYo0(#;lLpp;Xk)xPz@=CPq=P95sQDPy-x8o$*!FYxw|m zwjsO<(ub;F4>iG5)ay9_wG-nk|00$nzZ5mW-N=r(&PfvaC^%zYz#8N)qgGU+r8iI& z)Ydn#d@Iyz^$coj2cvds6b9l%)N45v^WYp*`+2A%c@-P!{a;H$9b7=2;Z@X1e>3y6 z^8Wc8juk1di>lWH^Wy;20*0BRP!r3-yf_s#k(sD=^UWm~$oS4m5~}z%YAe^HR{j}k zrYBKbdkM9*_fc;{k=EXkRY$dJg*vLJXRE}ZGu6Az)zJ}%kY>15Od(~{Z$swDbS zpqb9ag181X(EF$}-C^#x`^T_7<)^U## z|LR~T1;Mxv``}loEsk&JZG8%=L4V6EdR(Xz&U9_MNsvk zPz&%O{kTpY5_Ks^z_K_T^_4saJK^V88KXLQJJB4~VJd1u>8KU=#88}X<;yVlNKg;y zM!UZUwSZ$-Q1AaYB=mIufO;*?VG+EKIxoqrO;XqgFB(3*i#fnXg6F+l>i$6g9DY zY?}rsk7`#HwNnYGBT7OYX-9OG=t)8k!w}SrM_GjlsE2A6YURsNE8Bn?cqeK?hphY* zY9W_UJ5s5$H-Va{l{ZB7-x$NNO=tF>uX(4tRa}noz{p*p;2-bK9~P8V;b z#Zm8fG-@FUsFgRe`)w?rh8nmhs{d!Zu>Yz!kpiu37V25>qqb~`xeT=fYfux(F?XVN za3AWZj-mQHf$HZRhT}!l#QukB|G@J3+^*h?LQn&gHmji~l!V%{wy2}%f*Npym5)a~ z3)3yX6g9xxsP-GJd>87O_yRSdW2o`m^CW7KxP=iIlkS~uebiC3Ms+wA)nE#00`pN@ z_y%gl>o5Sf5HAoth!_fn;85&~$;4|!s48+558(Vqlh{ktu|nOrtq-n>l%4jH&Xc6q zlO9R*BdvdgyiB?&*1!NvBVtKsp{}hSe}C%j(B#Y5{f&D6U!vfD#HWNF4qbhSC#+KC z+!Fr70rOE7L5#ApvZVW}9>GKJbhC01McFvKNMxwMu8R08p*NyC<2${HR4UKJx`eLg zr}+q>tC>~)lk^nQV{%LR0y0H=q8;~!Tiqw^-dOVQkiJgbAexYm#zq8} z>x58Hi8$jGIPYLKE5hkTJY$80sQdU@ zW{FKY|H<4KNWlgx^jXE@T)XGI1_ZDC&t1|}mjaQI3MCj^3*~eH6cVZE%tJm=_ zLf0h^=VzUNs%4gACn~>=w}@V(yAUTy|Cbm<=xSjdPV=(*Uz*&1CC$QW+|!?2CGaY? zBy_bUqODzm8HO4^_nOY<6ictcuZaZWM=QHv&cSDC7)0oc=Wz$&mpq9$>a=tAflGs6bd zPrI%^i0Z^aqGkZozehsXdmheyQ!FJa5mV`81#TvEz2))u=Q!?{Bia%piP?6i3I0at zo3g)^Ey1}&w(=wN!PSFCA7L}%d*Tk!lz4niAW@dsP1GSOP`^HIBXrduuPdBLCp{jA z6Ymm_ufzT=zGChxWakq*tT+%C5eqG^Kl&bDt4RDnJS4s${KPJzCnFRlej!~Kbqz6N zF~=)%9$*10f8Hzeo|nmFRub`cvy^u;_cv3?N0$Er3tAl&y-BoDf-5iO+P;Rw9%4NC zdPE~)D0y9DiB{xS=jQam_$?`Te03yIn*0o0Oxz_Vk&i=NFA^!_Gcl3Kwzi$|OY&(% zFrn)|#50s%!+#T@#N#WF@?vB@*ZRAWnW!NB6ET>0p8Ru!uGZ!x(hkTjXB6pl9HtCcqTL&ePZJ+dR+XqmxKVu6rtloDBeIANL>tPU!pi7FU9~)%`jpis z-3LFxqL_k7M0L`-@|!oktkaSFDboFj38Wk2`#c&o%0-3bd{M1pK$z1$W1PY_HY0P) z&`~4(`Qx|wFT|hnx2W00pHp*TPHL@31^vAnyp*SAV$QV&?Lu=7BzF%e)jwlgMrKy_ z$icMDR%H0ny$*6x+64sUj7cdG;E!!T#Q#zIeL1r`3i%(yVh_I~8p@Rlx l`7(xNWcns%JGxaSZ0x8JBYfE-2l@v08#$3;zuTkH{{bBRZT\n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -178,8 +178,20 @@ msgstr "Abstufung Bewertungen" msgid "Number of items (answer options) to select from." msgstr "Anzahl der Abstufungen, aus denen bei der Antwort gewählt werden kann." -msgid "Negativ" -msgstr "Negativbewertung" +msgid "Minimum Number of Answers" +msgstr "Mindestanzahl an Antworten" + +msgid "Minumum number of questions that have to be answered. Empty means all questions have to be answered." +msgstr "Anzahl der Fragen, die mindestens beantwortet werden müssen. Keine Angabe: Es müssen alle Fragen beantwortet werden." + +msgid "Required" +msgstr "Erforderlich" + +msgid "Question must be answered." +msgstr "Frage muss unbedingt beantwortet werden." + +msgid "Negative" +msgstr "Negative Polarität" msgid "Value inversion: High selection means low value." msgstr "Invertierung der Bewertung: Hohe gewählte Stufe bedeutet niedriger Wert." @@ -196,27 +208,45 @@ msgstr "Kategorie" msgid "Response" msgstr "Beurteilung" +msgid "No answer" +msgstr "Keine Antwort" + msgid "Does not apply" msgstr "Trifft nicht zu" msgid "Fully applies" msgstr "Trifft voll zu" +msgid "survey_value_none" +msgstr "Keine Antwort" + msgid "survey_value_0" -msgstr "trifft für unser Unternehmen überhaupt nicht zu" +msgstr "Trifft für unser Unternehmen überhaupt nicht zu" msgid "survey_value_1" -msgstr "trifft eher nicht zu" +msgstr "Trifft eher nicht zu" msgid "survey_value_2" -msgstr "trifft eher zu" +msgstr "Trifft eher zu" msgid "survey_value_3" -msgstr "trifft für unser Unternehmen voll und ganz zu" +msgstr "Trifft für unser Unternehmen voll und ganz zu" msgid "Evaluate Questionnaire" msgstr "Fragebogen auswerten" +msgid "Please answer at least $minAnswers questions." +msgstr "Bitte beantworten Sie mindestens $minAnswers Fragen." + +msgid "Please answer all questions." +msgstr "Bitte beantworten Sie alle Fragen." + +msgid "Please answer the obligatory questions marked with an asterisk." +msgstr "Bitte beantworten Sie die mit einem Stern markierten Pflichtfragen." + +msgid "Obligatory question, must be answered" +msgstr "Pflichtfrage, muss beantwortet werden" + # competence (qualification) msgid "Validity Period (Months)"