aB>s5q)V}LR1h>
zQ(uNoB9G`p=2&rXkSUWsm{laPKYf^h|O`t4(J-2?ztBGny=?v{6$~S!K6>U
z{G8?41=HLmZNogTrgRIaF{C8X5nJXy)n%B!m0nU_P*Uuk*E7n~sp~QSq(bMEa%YaC
z$eCSS<|r;HcVt(T=a-Zg%y#DZW;sjC=iK*GRJmK4(I6&wvR>0^Pr4)^Z2s4-RqkEhsK4cTSsD
zQJm*2c0bH)=)OKF+Os%+dSIi+206Q;^ho8Dsd>(s1OvFE4hKls!f<1EN?I(iqE
zmuBa=Z&bw9%q%WvlvDCc3v$cd^=9;NF!BOtsnapSSum~GnP22Abxd{^6gjd=N;QLG
QPsWThL0-Mx%@%n652@9Zi2wiq
delta 9482
zcmZA534Bgh8prXQgsdVWB4SA*ydsGtLl%^YPmDV~#M=@hYZQW?;{QkMeOgs0}C*S9sd+t5wo^$SvX6;<}ujjb$T4{RG>B?wH)w+Dpc{H&Z`8=MF#so{rf>o3#xJ90;x$u#
z*LVaqqo1Re@)qj4hgb=n)|3`TVrhFVhxs-s4z3)`6bOjL(is2Lk!>Zf5MM#T~r4Ccy5H-*g)RS~T
z4Y(g_%JY!@W{orTYmD1b?GIrf{ac@tIHdAYcrfeW;DMpz3ai|;3
zz{*9LU+fs@e@CmGlXHEG!YM^(~lm0EYCic{OqedQpy098*&Fi3cbs7d@f7F0R
zp_Z%&HLz)@0nI@TWT`p7581!g5!6iHMh);0I^#$@SO`@#LUqs-wIrP}1~X9|O+l^U
zENqJhP*3(4qtL&p{dP1#JxFJ~k3CTX?9j}9@=Vk~1~y~<)lohb%)T`qYvUWnk1&$*
zKT&I4p}CnE)C|QB&O=wO1yZ^RrP8vdQ={Y6fni267K|zn`5Xy3mVvLKRg|
z1E`C-aRTamZ>)zosHt6mYWEVV-K(hUkD_Mg6l!TMqT1g?&E$P_$Eq#u50EpIB$$fE
zs3+=-K{y08wUf;GMOdBkdgDP1rF<6E?k-kE&s2MgYoYEFYszV;x1<}^z`^!;r!}2K
zOYkD{Mp!E_1W%wk{0`O8@2IH{ZDn_uih9DHs3*+9S~vi9frpjS{!bK9JM
zfPqdbJX_nFr5b8;q@X%TGj>Jo{sE{Ca!~`Ci}AP&8{l!|mA3ApHd|C1yFLMReKu+U
zBT!2-0i7Dzd=g!-3^mnjP!0E>p5Q2|-N&dYJd0{~1vQX|r~&x#Q7FJ>xC1w%Uc3Qgg5)C?R(Ey;0I2WLI0FCnt^s0i`E{^gkE*B}Mx*K*VmWMqdg9io0cD|PVm|6g
z)}aHBV+d6H9D56_}*_!#vBbvoG{CSnHVf#`u-
zP&e3)UidERN%x~VIF5RN?@%*(8?^}^VQuv3T(*~-RxF7Ikc7HX3Tg`58vCO@90jNu
zC`NriRvY)Amf|$3-Br}u|Agw;i&6VvFlqqdsDZ~~1-<_bNi={|^u=`4g_-Dy*~osg
zhMMwb)IfKjHrHg3vHm@_2`PYT7
zP~nE_u>x*HUAPm~;eJzp617wpP&c@O6S(jJY7gXhxA)F;)LZZ}_Qdy)|19qw{L01w
zs2O;v2lHQ%z|J$R0jq!P&}48mzx8JA!JZa_WpR~UikP)qRuwKv>)+XJtO`m{!)mY@}C%Cj&C
zhoc^JD*EF>)LZ6UVUq2rhR0A(bQbmGRv-Jr5{5M?w!;~igW3a^QBQgub>q7jjK8Cv
zFu1QhkTBGP#-Lum7RdEZt2N0|Dmvmxyo950YrnF-t>FH42cuDM$0XE~twJruCe*-7
zQM>*E#-S&lzbH&X%}6$CPfbR>ezP%5@BbcB&a$UE78_9RfEq|4
z>c%TD5KB-4`4F{N&SN$F#TfXs-9832kPetk|5kUBR`@LHf>P8}T}Cy$gIc?X=Dbg~
zJ)lTzOnoZq{CL#fnT1*k7wY=;r~$o&y8oxB@5@zms^JY1y*@u0%Rgi9{$PxuJ^^)M
z7V3tDs2Q7qS_&6xt=FMu;7!zh4`NmP6!k#gqWZaK>fHx2|9b602ipJhSPwPj15oej
zbZmsXusL4G78o&zuNY>dI$neIa1&}Xo!=GJq1puuu?G~1x?uvUgJ!7f(oo-rZdmp}sNG(GHE}*_U>l9j
z9VA-QeW(kLp{D#2>P8iZ+Mmj*sHyCW>To!=#4)HD+lrC+HmZZKFbV&Pnz_ou_;z3z
zvi#OitfKe-D2aoLZ%`xr4b^dIE)Cq6PSgOChubsI+Sm)#ZaB8W0<4GIF$&M1mgG0o
z=5yrPGnb5-xpWNB``?vBQ@Eqz!OEC=JKuV2tH}#oV4*Ov(%tj4pDptousE#+G
z?(-h{;04qSe}~#5zN75^s-d$!6%G>C!pcNn9E#d(1*kPIM%~~g)ByINX6zu=z%y7I
z@1O=!d9-~#4nrxoN1Y#p8h9~=g!fQ4vhwW#)Ihy1v8btQgL*r1
zQA;o#+u|J5{Yp_CT}I8sBh+<~W9+5tfO^2(G0eX&$z&?Dd*`6mY7=JQUepwO6xai+
zf@&X$T9P=_z>>}RuI79eYLDciW^gWQz)Mm0dkeK`4?4|>Ur|$Bd91xQ%}^b*M_rJK
z>Ua?9iASMkXgnt3^XB|v)F=2;)RO+ql<#8{Wv_Ae%p_n#%Fb>knTh(ezK!bmUl@%)
zU;u`Vw>MKf>PecRX6h-dggF?G6Hx8fqaVJ5fp`eD8NWd7ne)hfoYs#d`Yl#r0virn
z<1u_2{jspn-b}@)O|#Ot54E|@qrMyWQ5{q&vdh&`d!Z?6vv$WI9AV1SF;(yXQj&I@
z_zEjy$VA&1tUx){n1QL3`=K_|GSr^ghq~?(Y9?-@IWS~8Zd`SW{g2ZcsLfj&)vhCIM#f?zoQ>Ua
z7kXg%skS~-nSU=T{Hf5B1Y-h5qn>yG>WTBPBF@0Z_`E3}L2cGAQ1>~9YJbJ}6Y9Pd
zrrDb=0yV=eQ4f+ejrG^m&!9pVE=H}*>!<ya(uCIu?VLWQ8Q&Cer6t$@qq1JQ-
zy5j+?iSMJ<{32?JE6=pcX&6h{If3owN8GSp0NM|FGvwZzBJP49m=g_&-w1r`uHh)R^#;NJ)j@)CS<
zyh!o^p*LVF=PDCllkY_xgE5o%mOK>a;}xP4F^uw2LdOcCZCwhJi1QTs;y|6@@HCCy
zB7fQCRx2bY#nkMi<{e@qp_R^{{%O?Fo4gQXv4HR<7M7j)-;aNi-XR|Uugbbe{)1~u
zts2f;vd@VDT*=E*_WHwr4;S@1eDEZGLTI@U5`)aSapXEyQI0WnZ&U6`ehF9Ozc3wd
zU{^xNQ`!z=NnAu{bKz^`7lU$xV+e=menUT7}Zgj+e+
zl6ao{0Ujp0k@q5wlmAFGC$>}85sWwSef+Yl#{TfWMtPK*xm!<8Vi@s_DLY+(wZr|>XpuvVAx^kb
zYlrh^u|FT*Q|xD|n$l_>c|Bq@xjtn*@ESHi9nTu$$iE|Ap&UiDH1!9l3nM>BOdx;8
z)bArd#v)v-UCX(ax{5@9>JH)0s3Vblkeym?>&>%s*s;0
zbo8NIfzT0cY(VZHp3#d?QD-=|n3Dncy2)$fBH{>9k2q#GE&G1}rGCUJq7M8D)uD2$kTA8X-{h95pNQs
zi1O5@U=;B?QH%0$({?P*qHZ>^jc7x>M3j99axj$Ws|t=6Z2tQ*i;J5O#ne@fbFmgC6XysWBdK#1@#8tWY*+I0RqB>u9QqMD{L#x!
zt=~|;&~&6?Yg~sL@Gabo0|*_?h0(-u@^)?k{2hS8vqTf(b(fnXD78MP
z=1?k!PmUMJTbS}+@ZX#mLaZhZnMNbf;p*WCah^6cqJ-AB@gq|=!rbL90l&qLBr8f2u4jDUP{X&MT)VH*f5ODJ4S^PPnALZlvFmsDv!{%{~
znnffgrX)5knex;^PtP_5MH6!JT<7y5sujkyA6ZaXl$)PFu^^BCq1LHmujl2Kxb;0<
z-lvP*_sHCm(@)2_yPg>sSrR?)n2+mWUWV&bK|;yG5#xPIf+yVYaJ}0r$n`=mhpWY;
R)RI+`zVvm=ag8o6`420Jaq$2E
diff --git a/openslides/locale/de/LC_MESSAGES/django.po b/openslides/locale/de/LC_MESSAGES/django.po
index d863961d5..10d30e59c 100644
--- a/openslides/locale/de/LC_MESSAGES/django.po
+++ b/openslides/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenSlides 1.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-09-18 22:27+0200\n"
+"POT-Creation-Date: 2012-10-24 12:51+0200\n"
"PO-Revision-Date: 2012-07-28 11:07+0200\n"
"Last-Translator: Oskar Hahn \n"
"Language-Team: Deutsch \n"
@@ -29,14 +29,14 @@ msgstr "Englisch"
msgid "Parent item"
msgstr "Elternelement"
-#: agenda/models.py:42 application/forms.py:22 application/models.py:541
-#: application/templates/application/view.html:246 config/forms.py:61
+#: agenda/models.py:42 config/forms.py:61 motion/forms.py:22
+#: motion/models.py:544 motion/templates/motion/view.html:246
#: projector/models.py:32
msgid "Title"
msgstr "Titel"
-#: agenda/models.py:43 application/forms.py:23 application/models.py:542
-#: application/templates/application/view.html:247 projector/models.py:33
+#: agenda/models.py:43 motion/forms.py:23 motion/models.py:545
+#: motion/templates/motion/view.html:247 projector/models.py:33
msgid "Text"
msgstr "Text"
@@ -143,13 +143,12 @@ msgid "Agenda settings"
msgstr "Tagesordnungs-Einstellungen"
#: agenda/templates/agenda/config.html:13 agenda/templates/agenda/edit.html:24
-#: application/templates/application/config.html:13
-#: application/templates/application/edit.html:26
-#: application/templates/application/poll_view.html:52
#: assignment/templates/assignment/config.html:13
#: assignment/templates/assignment/edit.html:26
#: assignment/templates/assignment/poll_view.html:66
#: config/templates/config/general.html:56
+#: motion/templates/motion/config.html:13 motion/templates/motion/edit.html:26
+#: motion/templates/motion/poll_view.html:52
#: participant/templates/participant/config.html:13
#: participant/templates/participant/edit.html:31
#: participant/templates/participant/group_edit.html:25
@@ -161,14 +160,13 @@ msgid "Save"
msgstr "Speichern"
#: agenda/templates/agenda/config.html:17 agenda/templates/agenda/edit.html:31
-#: application/templates/application/config.html:17
-#: application/templates/application/edit.html:33
-#: application/templates/application/import.html:27
-#: application/templates/application/poll_view.html:59
#: assignment/templates/assignment/config.html:17
#: assignment/templates/assignment/edit.html:33
#: assignment/templates/assignment/poll_view.html:73
#: config/templates/config/general.html:60
+#: motion/templates/motion/config.html:17 motion/templates/motion/edit.html:33
+#: motion/templates/motion/import.html:27
+#: motion/templates/motion/poll_view.html:59
#: participant/templates/participant/config.html:17
#: participant/templates/participant/edit.html:38
#: participant/templates/participant/group_edit.html:32
@@ -180,11 +178,11 @@ msgid "Cancel"
msgstr "Abbrechen"
#: agenda/templates/agenda/edit.html:27
-#: application/templates/application/edit.html:29
-#: application/templates/application/poll_view.html:55
#: assignment/templates/assignment/edit.html:29
#: assignment/templates/assignment/poll_view.html:69
#: assignment/templates/assignment/view.html:83
+#: motion/templates/motion/edit.html:29
+#: motion/templates/motion/poll_view.html:55
#: participant/templates/participant/edit.html:34
#: participant/templates/participant/group_edit.html:28
#: projector/templates/projector/control_overlay_message.html:8
@@ -193,9 +191,8 @@ msgid "Apply"
msgstr "Übernehmen"
#: agenda/templates/agenda/edit.html:35
-#: application/templates/application/edit.html:37
-#: application/templates/application/import.html:31
#: assignment/templates/assignment/edit.html:37
+#: motion/templates/motion/edit.html:37 motion/templates/motion/import.html:31
#: participant/templates/participant/edit.html:42
#: participant/templates/participant/group_edit.html:36
#: participant/templates/participant/import.html:31
@@ -224,33 +221,31 @@ msgstr "Zusammenfassung für diesen Eintrag projizieren"
msgid "Do you want to save the changed order of agenda items?"
msgstr "Möchten Sie die geänderte Reihenfolge der Einträge speichern?"
-#: agenda/templates/agenda/overview.html:46 application/models.py:575
-#: application/views.py:775 application/views.py:826
-#: application/templates/application/view.html:79
-#: application/templates/projector/Application.html:37
-#: assignment/models.py:297 assignment/views.py:576
-#: assignment/templates/assignment/view.html:166
+#: agenda/templates/agenda/overview.html:46 assignment/models.py:300
+#: assignment/views.py:576 assignment/templates/assignment/view.html:166
#: assignment/templates/assignment/view.html:170
#: assignment/templates/projector/Assignment.html:78
-#: assignment/templates/projector/Assignment.html:82 utils/utils.py:53
+#: assignment/templates/projector/Assignment.html:82 motion/models.py:578
+#: motion/views.py:778 motion/views.py:829
+#: motion/templates/motion/view.html:79
+#: motion/templates/projector/Motion.html:37 utils/utils.py:53
#: utils/views.py:111
msgid "Yes"
msgstr "Ja"
-#: agenda/templates/agenda/overview.html:47 application/models.py:575
-#: application/views.py:775 application/views.py:827
-#: application/templates/application/view.html:80
-#: application/templates/projector/Application.html:38
-#: assignment/models.py:297 assignment/views.py:577
-#: assignment/templates/assignment/view.html:167
-#: assignment/templates/projector/Assignment.html:79 utils/utils.py:53
+#: agenda/templates/agenda/overview.html:47 assignment/models.py:300
+#: assignment/views.py:577 assignment/templates/assignment/view.html:167
+#: assignment/templates/projector/Assignment.html:79 motion/models.py:578
+#: motion/views.py:778 motion/views.py:830
+#: motion/templates/motion/view.html:80
+#: motion/templates/projector/Motion.html:38 utils/utils.py:53
#: utils/views.py:111
msgid "No"
msgstr "Nein"
#: agenda/templates/agenda/overview.html:55
-#: application/templates/application/overview.html:12
#: assignment/templates/assignment/overview.html:12
+#: motion/templates/motion/overview.html:12
#: participant/templates/participant/overview.html:22
msgid "Filter"
msgstr "Filter"
@@ -274,8 +269,8 @@ msgid "Item"
msgstr "Eintrag"
#: agenda/templates/agenda/overview.html:68
-#: application/templates/application/overview.html:43
#: assignment/templates/assignment/overview.html:28
+#: motion/templates/motion/overview.html:43
#: participant/templates/participant/group_overview.html:13
#: participant/templates/participant/overview.html:74
msgid "Actions"
@@ -289,897 +284,29 @@ msgstr "Keine Einträge vorhanden."
#: agenda/templates/agenda/widget.html:10
#: agenda/templates/agenda/widget.html:29
-#: application/templates/application/widget.html:17
#: assignment/templates/assignment/widget.html:17
+#: motion/templates/motion/widget.html:17
#: projector/templates/projector/custom_slide_widget.html:11
#: projector/templates/projector/custom_slide_widget.html:30
msgid "Preview"
msgstr "Vorschau"
#: agenda/templates/agenda/widget.html:23
-#: application/templates/application/widget.html:11
#: assignment/templates/assignment/view.html:130
#: assignment/templates/assignment/widget.html:11
+#: motion/templates/motion/widget.html:11
#: projector/templates/projector/custom_slide_widget.html:24
msgid "Delete"
msgstr "Löschen"
#: agenda/templates/agenda/widget.html:26
-#: application/templates/application/widget.html:14
#: assignment/templates/assignment/view.html:129
#: assignment/templates/assignment/widget.html:14
+#: motion/templates/motion/widget.html:14
#: projector/templates/projector/custom_slide_widget.html:27
msgid "Edit"
msgstr "Bearbeiten"
-#: application/forms.py:25 application/models.py:543 application/views.py:794
-#: application/templates/application/view.html:229
-#: application/templates/application/view.html:249
-#: application/templates/projector/Application.html:77
-msgid "Reason"
-msgstr "Begründung"
-
-#: application/forms.py:30
-msgid "Trivial change"
-msgstr "Triviale Änderung"
-
-#: application/forms.py:31
-msgid "Trivial changes don't create a new version."
-msgstr "Triviale Änderungen erzeugen keine neue Version."
-
-#: application/forms.py:44 application/views.py:733
-#: application/templates/application/view.html:22
-msgid "Supporters"
-msgstr "Unterstützer/innen"
-
-#: application/forms.py:50 participant/forms.py:102
-msgid "CSV File"
-msgstr "CSV-Datei"
-
-#: application/forms.py:54
-msgid "Import motions with status \"authorized\""
-msgstr "Anträge als \"Zugelassen\" importieren"
-
-#: application/forms.py:55
-msgid "Set the initial status for each motion to \"authorized\""
-msgstr "Setzt den initialen Status für jeden Antrag auf \"zugelassen\""
-
-#: application/forms.py:63
-msgid "Number of (minimum) required supporters for a motion"
-msgstr "Mindestanzahl erforderlicher Unterstützer/innen für einen Antrag"
-
-#: application/forms.py:67
-msgid "Choose 0 to disable the supporting system"
-msgstr "Wähle 0 um das Unterstützersystem zu deaktivieren"
-
-#: application/forms.py:72
-msgid "Motion preamble"
-msgstr "Antragseinleitung"
-
-#: application/forms.py:77 assignment/forms.py:47
-msgid "Number of ballot papers (selection)"
-msgstr "Anzahl der Stimmzettel (Vorauswahl)"
-
-#: application/forms.py:79 assignment/forms.py:49
-msgid "Number of all delegates"
-msgstr "Anzahl aller Delegierten"
-
-#: application/forms.py:80 assignment/forms.py:50
-msgid "Number of all participants"
-msgstr "Anzahl aller Teilnehmer/innen"
-
-#: application/forms.py:81 assignment/forms.py:51
-msgid "Use the following custom number"
-msgstr "Verwende die folgende benutzerdefinierte Anzahl"
-
-#: application/forms.py:88 assignment/forms.py:58
-msgid "Custom number of ballot papers"
-msgstr "Benutzerdefinierte Anzahl von Stimmzetteln"
-
-#: application/forms.py:93
-msgid "Title for PDF document (all motions)"
-msgstr "Titel für PDF-Dokument (alle Anträge)"
-
-#: application/forms.py:98
-msgid "Preamble text for PDF document (all motions)"
-msgstr "Einleitungstext für PDF-Dokument (alle Wahlen) "
-
-#: application/forms.py:102
-msgid "Allow trivial changes"
-msgstr "Triviale Änderungen erlauben"
-
-#: application/forms.py:103
-msgid "Warning: Trivial changes undermine the motions autorisation system."
-msgstr ""
-"Warnung: Triviale Änderungen unterlaufen das Zulassungssystem von Anträgen."
-
-#: application/models.py:45
-msgid "Published"
-msgstr "Veröffentlicht"
-
-#: application/models.py:46
-msgid "Permitted"
-msgstr "Zugelassen"
-
-#: application/models.py:47 application/templates/application/overview.html:24
-#: application/templates/application/view.html:167
-msgid "Accepted"
-msgstr "Angenommen"
-
-#: application/models.py:48 application/templates/application/overview.html:25
-#: application/templates/application/view.html:172
-msgid "Rejected"
-msgstr "Abgelehnt"
-
-#: application/models.py:49
-msgid "Withdrawed"
-msgstr "Zurückgezogen"
-
-#: application/models.py:50 application/templates/application/view.html:180
-msgid "Adjourned"
-msgstr "Vertagt"
-
-# please check!
-#: application/models.py:51 application/templates/application/view.html:183
-msgid "Not Concerned"
-msgstr "Nicht befasst"
-
-# please check!
-#: application/models.py:52 application/templates/application/view.html:186
-msgid "Commited a bill"
-msgstr "Verwiesen (in Ausschuss)"
-
-#: application/models.py:53
-msgid "Rejected (not authorized)"
-msgstr "Verworfen (nicht zulässig)"
-
-#: application/models.py:54 application/templates/application/overview.html:27
-msgid "Needs Review"
-msgstr "Benötigt Review"
-
-#: application/models.py:66 application/views.py:713
-#: application/templates/application/overview.html:41
-#: application/templates/application/view.html:18
-#: application/templates/projector/Application.html:55
-msgid "Submitter"
-msgstr "Antragsteller/in"
-
-#: application/models.py:103
-#, python-format
-msgid "Version %d authorized"
-msgstr "Version %d zugelassen"
-
-#: application/models.py:139
-msgid "Searching for supporters."
-msgstr "Auf Unterstützersuche."
-
-#: application/models.py:141
-msgid "Not yet authorized."
-msgstr "Noch nicht zugelassen."
-
-#: application/models.py:143
-msgid "Not yet authorized changes."
-msgstr "Noch nicht zugelassene Änderungen."
-
-#: application/models.py:220
-#, python-format
-msgid ""
-"Trivial changes to version %(version)d; changed fields: %(changed_fields)s"
-msgstr ""
-"Triviale Änderung an Version %(version)d; Geänderte Felder: "
-"%(changed_fields)s"
-
-#: application/models.py:231
-#, python-format
-msgid "Version %s created"
-msgstr "Version %s erstellt"
-
-#: application/models.py:241
-msgid "Supporters removed"
-msgstr "Unterstützer/innen gelöscht"
-
-#: application/models.py:250
-#, python-format
-msgid "Status reseted to: %s"
-msgstr "Status zurückgesetzt auf: %s"
-
-#: application/models.py:265
-#, python-format
-msgid "Supporter: +%s"
-msgstr "Unterstützer/in: +%s"
-
-#: application/models.py:279
-#, python-format
-msgid "Supporter: -%s"
-msgstr "Unterstützer/in: -%s"
-
-#: application/models.py:296
-#, python-format
-msgid "Number set: %s"
-msgstr "Nummer gesetzt: %s"
-
-#: application/models.py:309
-#, python-format
-msgid "Version %s authorized"
-msgstr "Version %s zugelassen"
-
-#: application/models.py:323
-#, python-format
-msgid "Version %s not authorized"
-msgstr "Version %s nicht zugelassen"
-
-#: application/models.py:336 assignment/models.py:69
-#, python-format
-msgid "%s is not a valid status."
-msgstr "%s ist kein gültiger Status."
-
-#: application/models.py:339
-#, python-format
-msgid "The motion status is already '%s.'"
-msgstr "Der Antragsstatus ist bereits '%s'."
-
-#: application/models.py:347
-#, python-format
-msgid ""
-"The motion status is: '%(currentstatus)s'. You can not set the status to "
-"'%(newstatus)s'."
-msgstr ""
-"Der Antragsstatus ist: '%(currentstatus)s'. Sie können den Status nicht auf "
-"'%(newstatus)s' setzen."
-
-#: application/models.py:355
-msgid "Status modified"
-msgstr "Status geändert"
-
-#: application/models.py:447
-msgid "by"
-msgstr "von"
-
-#: application/models.py:455 application/templates/application/view.html:210
-#: application/templates/application/widget.html:27
-#: application/templates/projector/Application.html:65
-msgid "no number"
-msgstr "ohne Nummer"
-
-#: application/models.py:456
-#: application/templates/application/overview.html:32
-#: application/templates/application/widget.html:23
-msgid "motion"
-msgstr "antrag"
-
-#: application/models.py:481
-msgid "Poll created"
-msgstr "Abstimmung erstellt"
-
-#: application/models.py:532
-msgid "Can see motions"
-msgstr "Darf Anträge sehen"
-
-#: application/models.py:533
-msgid "Can create motions"
-msgstr "Darf Anträge erstellen"
-
-#: application/models.py:534
-msgid "Can support motions"
-msgstr "Darf Anträge unterstützen"
-
-#: application/models.py:535
-msgid "Can manage motions"
-msgstr "Darf Anträge verwalten"
-
-#: application/models.py:576 assignment/models.py:298
-msgid "Abstain"
-msgstr "Enthaltung"
-
-#: application/models.py:602
-msgid "The assembly may decide,"
-msgstr "Die Versammlung möge beschließen,"
-
-#: application/models.py:605
-#: application/templates/application/base_application.html:9
-#: application/templates/application/overview.html:7
-#: application/templates/application/overview.html:10
-msgid "Motions"
-msgstr "Anträge"
-
-#: application/views.py:179
-msgid "You have not the necessary rights to create or edit motions."
-msgstr ""
-"Sie haben nicht die nötigen Rechte, um Anträge zu erstellen oder zu "
-"bearbeiten."
-
-#: application/views.py:184
-msgid "You can not edit this motion."
-msgstr "Sie dürfen diesen Antrag nicht bearbeiten."
-
-#: application/views.py:247
-msgid "New motion was successfully created."
-msgstr "Neuer Antrag wurde erfolgreich angelegt."
-
-#: application/views.py:249
-msgid "Motion was successfully modified."
-msgstr "Antrag wurde erfolgreich geändert."
-
-#: application/views.py:256 application/views.py:634 assignment/views.py:138
-#: participant/views.py:512 participant/views.py:535 utils/views.py:210
-#: utils/views.py:228 utils/views.py:252
-msgid "Please check the form for errors."
-msgstr "Bitte kontrollieren Sie das Formular nach Fehlern."
-
-#: application/views.py:263
-msgid ""
-"Attention: Do you really want to edit this motion? The supporters will "
-"not be removed automatically because you can manage motions. Please "
-"check if the supports are valid after your changing!"
-msgstr ""
-"Achtung: Wollen Sie den Antrag wirklich ändern? Die Unterstützer/innen "
-"werden nicht automatisch entfernt, da Sie Anträge verwalten dürfen. "
-"Prüfen Sie, ob die Unterstützungen noch gültig sind."
-
-#: application/views.py:265
-#, python-format
-msgid ""
-"Attention: Do you really want to edit this motion? All %s supporters "
-"will be removed! Try to convince the supporters again."
-msgstr ""
-"Wollen Sie den Antrag wirklich ändern? Alle %s Unterstützer/innen "
-"werden dann automatisch entfernt. Versuchen Sie diese erneut zu gewinnen."
-
-#: application/views.py:297
-msgid "Motion number was successfully set."
-msgstr "Antragsnummer wurde erfolgreich gesetzt."
-
-#: application/views.py:313
-msgid "Motion was successfully authorized."
-msgstr "Antrag wurde erfolgreich zugelassen."
-
-#: application/views.py:328
-msgid "Motion was successfully rejected."
-msgstr "Antrag wurde erfolgreich verworfen."
-
-#: application/views.py:344
-#, python-format
-msgid "Motion status was set to: %s."
-msgstr "Antragsstatus wurde gesetzt auf: %s."
-
-#: application/views.py:360
-msgid "Motion status was reset."
-msgstr "Antragsstatus wurde zurückgesetzt."
-
-#: application/views.py:374
-msgid "You have support the motion successfully."
-msgstr "Sie haben den Antrag erfolgreich unterstützt."
-
-#: application/views.py:388
-msgid "You have unsupport the motion successfully."
-msgstr "Sie haben dem Antrag erfolgreich Ihre Unterstützung entzogen."
-
-#: application/views.py:402
-msgid "New vote was successfully created."
-msgstr "Neue Abstimmung erfolgreich angelegt."
-
-#: application/views.py:418
-msgid "Poll deleted"
-msgstr "Abstimmung gelöscht"
-
-#: application/views.py:419
-msgid "Poll was successfully deleted."
-msgstr "Abstimmung wurde erfolgreich gelöscht."
-
-#: application/views.py:421
-#, python-format
-msgid "the %s. poll"
-msgstr "die %s. Abstimmung"
-
-#: application/views.py:459 application/views.py:468
-#, python-format
-msgid "You can not delete motion %s."
-msgstr "Sie können Antrag %s nicht löschen."
-
-#: application/views.py:464 application/views.py:472
-#, python-format
-msgid "Motion %s was successfully deleted."
-msgstr "Antrag %s wurde erfolgreich gelöscht."
-
-#: application/views.py:474
-msgid "Invalid request"
-msgstr "Ungültige Anfrage"
-
-#: application/views.py:498
-msgid "Poll was updated"
-msgstr "Abstimmung wurde aktualisiert"
-
-#: application/views.py:515
-#, python-format
-msgid "Version %s accepted."
-msgstr "Version %s akzeptiert."
-
-#: application/views.py:517
-#, python-format
-msgid "Do you really want to authorize version %s?"
-msgstr "Soll Version %s wirklich zugelassen werden?"
-
-#: application/views.py:527
-#, python-format
-msgid "Version %s rejected."
-msgstr "Version %s zurückgewiesen."
-
-#: application/views.py:529
-msgid "ERROR by rejecting the version."
-msgstr "FEHLER beim Zurückweisen der Version."
-
-#: application/views.py:531
-#, python-format
-msgid "Do you really want to reject version %s?"
-msgstr "Soll Version %s wirklich zurückgewiesen werden?"
-
-#: application/views.py:561 application/views.py:565 application/views.py:571
-#: application/views.py:574 participant/api.py:76
-#, python-format
-msgid "Ignoring malformed line %d in import file."
-msgstr "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert."
-
-#: application/views.py:620
-#, python-format
-msgid "%d motion was successfully imported."
-msgid_plural "%d motions were successfully imported."
-msgstr[0] "%d Antrag wurde erfolgreich importiert."
-msgstr[1] "%d Anträge wurden erfolgreich importiert."
-
-#: application/views.py:623
-#, python-format
-msgid "%d motion was successfully modified."
-msgid_plural "%d motions were successfully modified."
-msgstr[0] "%d Antrag wurde erfolgreich geändert."
-msgstr[1] "%d Anträge wurden erfolgreich geändert."
-
-#: application/views.py:626
-#, python-format
-msgid "%d new user was added."
-msgid_plural "%d new users were added."
-msgstr[0] "%d neuer Nutzer wurde erstellt."
-msgstr[1] "%d neue Nutzer wurden erstellt."
-
-#: application/views.py:630 participant/api.py:92
-msgid "Import aborted because of severe errors in the input file."
-msgstr "Import auf Grund von schweren Fehlern in der Quelldatei abgebrochen."
-
-#: application/views.py:632 participant/api.py:94
-msgid "Import file has wrong character encoding, only UTF-8 is supported!"
-msgstr ""
-"Die Quelldatei benutzt eine ungültige Zeichenkodierung, es wird nur UTF-8 "
-"wird unterstützt!"
-
-#: application/views.py:636
-msgid ""
-"Attention: Existing motions will be modified if you import new motions with "
-"the same number."
-msgstr ""
-"Achtung: Existierende Anträge werden geändert wenn Sie neue Anträge mit "
-"identischer Nummer importieren."
-
-#: application/views.py:637
-msgid ""
-"Attention: Importing an motions without a number multiple times will create "
-"duplicates."
-msgstr ""
-"Achtung: Bei mehrfachem Import eines Antrags ohne Nummer können Duplikate "
-"entstehen."
-
-#: application/views.py:663 application/views.py:888
-msgid "Applications"
-msgstr "Anträge"
-
-#: application/views.py:670 application/views.py:808
-msgid "Application"
-msgstr "Antrag"
-
-#: application/views.py:684 application/templates/application/overview.html:84
-msgid "No motions available."
-msgstr "Keine Anträge vorhanden."
-
-#: application/views.py:689 application/views.py:691 application/views.py:706
-#: application/views.py:708
-#: application/templates/projector/Application.html:63
-msgid "Motion No."
-msgstr "Antrag Nr."
-
-#: application/views.py:723
-msgid "Signature"
-msgstr ""
-
-#: application/views.py:746 application/templates/application/overview.html:20
-#: application/templates/application/overview.html:40
-#: application/templates/application/view.html:34
-#: application/templates/projector/Application.html:11
-#: assignment/templates/assignment/overview.html:14
-#: assignment/templates/assignment/overview.html:27
-#: assignment/templates/assignment/view.html:11
-#: assignment/templates/projector/Assignment.html:18
-#: participant/templates/participant/overview.html:52
-msgid "Status"
-msgstr "Status"
-
-#: application/views.py:760 application/templates/application/view.html:214
-#: application/templates/application/view.html:244 config/models.py:131
-#: config/templates/config/version.html:5
-#: config/templates/config/version.html:8
-#: config/templates/config/version.html:11
-msgid "Version"
-msgstr "Version"
-
-#: application/views.py:768 application/templates/application/view.html:44
-#: assignment/views.py:410
-msgid "Vote results"
-msgstr "Abstimmungsergebnis"
-
-#: application/views.py:774
-#: application/templates/application/base_application.html:55
-#: application/templates/application/poll_view.html:8
-#: application/templates/application/poll_view.html:13
-#: application/templates/application/view.html:66
-#: application/templates/application/view.html:74
-#: application/templates/projector/Application.html:33
-msgid "Vote"
-msgstr "Abstimmung"
-
-#: application/views.py:775 application/views.py:828
-#: application/templates/application/view.html:81
-#: application/templates/projector/Application.html:39 assignment/views.py:577
-#: assignment/templates/assignment/view.html:168
-#: assignment/templates/projector/Assignment.html:80
-msgid "Abstention"
-msgstr "Enthaltung"
-
-#: application/views.py:775 application/templates/application/view.html:82
-#: application/templates/projector/Application.html:40
-#: assignment/templates/assignment/view.html:190
-#: assignment/templates/projector/Assignment.html:101
-msgid "Invalid"
-msgstr "Ungültig"
-
-#: application/views.py:775
-#: application/templates/application/poll_view.html:35
-#: application/templates/application/view.html:84
-#: application/templates/projector/Application.html:42 assignment/views.py:461
-#: assignment/templates/assignment/poll_view.html:45
-#: assignment/templates/assignment/view.html:202
-#: assignment/templates/assignment/view.html:207
-#: assignment/templates/projector/Assignment.html:111
-#: assignment/templates/projector/Assignment.html:117 poll/models.py:76
-msgid "Votes cast"
-msgstr "Abgegebene Stimmen"
-
-#: application/views.py:808
-msgid "Poll"
-msgstr "Abstimmung"
-
-#: application/views.py:822
-#, python-format
-msgid "Application No. %s"
-msgstr "Antrag Nr. %s"
-
-#: application/views.py:824
-#, python-format
-msgid "%d. Vote"
-msgstr "%d. Abstimmung"
-
-#: application/views.py:881
-msgid "Motion settings successfully saved."
-msgstr "Antrags-Einstellungen wurden erfolgreich gespeichert."
-
-#: application/templates/application/base_application.html:11
-msgid "All motions"
-msgstr "Alle Anträge"
-
-#: application/templates/application/base_application.html:13
-#: application/templates/application/edit.html:10
-#: application/templates/application/edit.html:18
-msgid "New motion"
-msgstr "Neuer Antrag"
-
-#: application/templates/application/base_application.html:16
-#: application/templates/application/import.html:5
-#: application/templates/application/import.html:8
-msgid "Import motions"
-msgstr "Anträge importieren"
-
-#: application/templates/application/base_application.html:18
-msgid "All motions as PDF"
-msgstr "Alle Anträge als PDF"
-
-#: application/templates/application/base_application.html:24
-msgid "Application No."
-msgstr "Antrag Nr."
-
-#: application/templates/application/base_application.html:34
-msgid "View motion"
-msgstr "Antrag anzeigen"
-
-#: application/templates/application/base_application.html:38
-#: application/templates/application/edit.html:8
-#: application/templates/application/edit.html:16
-#: application/templates/application/overview.html:72
-msgid "Edit motion"
-msgstr "Antrag bearbeiten"
-
-#: application/templates/application/base_application.html:42
-#: application/templates/application/overview.html:74
-msgid "Delete motion"
-msgstr "Antrag löschen"
-
-#: application/templates/application/base_application.html:45
-#: application/templates/application/overview.html:77
-msgid "Motion as PDF"
-msgstr "Antrag als PDF"
-
-#: application/templates/application/base_application.html:49
-msgid "Show Application"
-msgstr "Antrag projizieren"
-
-#: application/templates/application/base_application.html:61
-#: assignment/templates/assignment/base_assignment.html:63
-msgid "New agenda item"
-msgstr "Neuer Tagesordnungseintrag"
-
-#: application/templates/application/config.html:5
-#: application/templates/application/config.html:8
-msgid "Application settings"
-msgstr "Antrags-Einstellungen"
-
-#: application/templates/application/import.html:9
-msgid "Select a CSV file to import motions!"
-msgstr "Wählen Sie eine CSV-Datei zum Importieren von Anträgen aus!"
-
-#: application/templates/application/import.html:11
-msgid ""
-"Required comma separated values: {number, title, text, reason, "
-"first_name, last_name}
(number
and reason
"
-"are optional and may be empty)"
-msgstr ""
-"Erforderliche kommaseparierte Werte: {Nummer, Titel, Text, Begründung, "
-"Vorname, Nachname}
(Nummer
und Begründung
"
-"sind optional und können auch leer sein)"
-
-#: application/templates/application/import.html:13
-#: participant/templates/participant/import.html:13
-msgid "Required CSV file encoding: UTF-8 (Unicode)."
-msgstr "Erforderliches CSV-Datei-Encoding: UTF-8 (Unicode)."
-
-#: application/templates/application/import.html:16
-#: participant/templates/participant/import.html:16
-msgid "A CSV example file is available in OpenSlides Wiki."
-msgstr "Eine CSV-Beispiel-Datei gibt es im OpenSlides Wiki."
-
-#: application/templates/application/import.html:23
-#: participant/templates/participant/import.html:23
-msgid "Import"
-msgstr "Importieren"
-
-#: application/templates/application/overview.html:15
-msgid "Need supporters"
-msgstr "Benötigt Unterstützer/innen"
-
-#: application/templates/application/overview.html:18
-msgid "Without number"
-msgstr "Ohne Nummer"
-
-#: application/templates/application/overview.html:22
-msgid "Not yet authorized"
-msgstr "Noch nicht zugelassen"
-
-#: application/templates/application/overview.html:23
-msgid "Authorized"
-msgstr "Zugelassen"
-
-#: application/templates/application/overview.html:26
-msgid "Withdrawen (by submitter)"
-msgstr "Zurückgezogen (durch Antragsteller/in)"
-
-#: application/templates/application/overview.html:35
-msgid "Number"
-msgstr "Nummer"
-
-#: application/templates/application/overview.html:36
-msgid "Motion title"
-msgstr "Antragstitel"
-
-#: application/templates/application/overview.html:38
-msgid "Number of supporters"
-msgstr "Anzahl der Unterstützer/innen"
-
-#: application/templates/application/overview.html:42
-#: application/templates/application/view.html:109
-msgid "Creation Time"
-msgstr "Erstellungszeit"
-
-#: application/templates/application/overview.html:67
-msgid "Activate motion"
-msgstr "Antrag projizieren"
-
-#: application/templates/application/poll_view.html:7
-#: application/templates/application/poll_view.html:12
-#: application/templates/application/view.html:7
-#: application/templates/application/view.html:206
-#: application/templates/application/view.html:225
-#: application/templates/projector/Application.html:7
-#: application/templates/projector/Application.html:65
-msgid "Motion"
-msgstr "Antrag"
-
-#: application/templates/application/poll_view.html:14
-#: assignment/templates/assignment/poll_view.html:12
-msgid "Special values"
-msgstr "Spezielle Werte"
-
-#: application/templates/application/poll_view.html:14
-#: assignment/templates/assignment/poll_view.html:12 poll/models.py:235
-msgid "majority"
-msgstr "Mehrheit"
-
-#: application/templates/application/poll_view.html:14
-#: assignment/templates/assignment/poll_view.html:12 poll/models.py:237
-#: poll/models.py:239
-msgid "undocumented"
-msgstr "nicht erfasst"
-
-#: application/templates/application/poll_view.html:21
-msgid "Option"
-msgstr "Wahlmöglichkeit"
-
-#: application/templates/application/poll_view.html:22
-#: assignment/models.py:300
-msgid "Votes"
-msgstr "Stimmen"
-
-#: application/templates/application/poll_view.html:31 assignment/views.py:454
-#: assignment/templates/assignment/poll_view.html:35
-#: assignment/templates/assignment/view.html:185
-#: assignment/templates/projector/Assignment.html:97
-msgid "Invalid votes"
-msgstr "Ungültige Stimmen"
-
-#: application/templates/application/poll_view.html:45
-#: assignment/templates/assignment/poll_view.html:59
-msgid "Ballot paper as PDF"
-msgstr "Stimmzettel als PDF"
-
-#: application/templates/application/view.html:51
-#: application/templates/application/view.html:91
-msgid "New vote"
-msgstr "Neue Abstimmung"
-
-#: application/templates/application/view.html:67
-msgid "Edit Vote"
-msgstr "Abstimmung bearbeiten"
-
-#: application/templates/application/view.html:70
-msgid "Delete Vote"
-msgstr "Abstimmung löschen"
-
-#: application/templates/application/view.html:99
-msgid "Enter result"
-msgstr "Ergebnis eingeben"
-
-#: application/templates/application/view.html:116
-msgid "Withdraw"
-msgstr "Zurückziehen"
-
-#: application/templates/application/view.html:124
-msgid "Unsupport"
-msgstr "Nicht unterstützen"
-
-#: application/templates/application/view.html:130
-msgid "Support"
-msgstr "Unterstützen"
-
-#: application/templates/application/view.html:136
-msgid "minimum required supporters"
-msgstr "minimal erforderliche Unterstützer/innen"
-
-#: application/templates/application/view.html:143
-msgid "Manage motion"
-msgstr "Antrag Verwalten"
-
-#: application/templates/application/view.html:146
-msgid "Formal validation"
-msgstr "Formale Gültigkeitsprüfung"
-
-#: application/templates/application/view.html:148
-msgid "Publish"
-msgstr "Veröffentlichen"
-
-#: application/templates/application/view.html:151
-msgid "Permit"
-msgstr "Zulassen"
-
-#: application/templates/application/view.html:154
-msgid "Not permit (reject)"
-msgstr "Nicht zulassen (verwerfen)"
-
-#: application/templates/application/view.html:157
-msgid "Set Number"
-msgstr "Setze Nummer"
-
-#: application/templates/application/view.html:164
-msgid "Result after vote"
-msgstr "Ergebnis nach der Abstimmung"
-
-#: application/templates/application/view.html:178
-msgid "Result after debate"
-msgstr "Ergebnis nach der Debatte"
-
-#: application/templates/application/view.html:189
-msgid "Withdrawed by Submitter"
-msgstr "Zurückgezogen durch Antragsteller/in"
-
-#: application/templates/application/view.html:194
-msgid "For Administration only:"
-msgstr "Nur zur Administration:"
-
-#: application/templates/application/view.html:196
-msgid "Reset"
-msgstr "Zurücksetzen"
-
-#: application/templates/application/view.html:219
-msgid "This is not the newest version."
-msgstr "Dies ist nicht die neuste Version."
-
-#: application/templates/application/view.html:219
-#: application/templates/application/view.html:221
-msgid "Go to version"
-msgstr "Gehe zu Version"
-
-#: application/templates/application/view.html:221
-msgid "This is not the authorized version."
-msgstr "Dies ist nicht die zugelassene Version."
-
-#: application/templates/application/view.html:239
-msgid "Version History"
-msgstr "Versionshistorie"
-
-#: application/templates/application/view.html:245
-msgid "Time"
-msgstr "Zeit"
-
-#: application/templates/application/view.html:256
-msgid "Version authorized"
-msgstr "Version %d zugelassen"
-
-#: application/templates/application/view.html:259
-msgid "Permit Version"
-msgstr "Version zulassen"
-
-#: application/templates/application/view.html:262
-msgid "Reject Version"
-msgstr "Version verwerfen"
-
-#: application/templates/application/view.html:266
-msgid "Version rejected"
-msgstr "Version verworfen"
-
-#: application/templates/application/view.html:276
-#: application/templates/application/view.html:283
-#: application/templates/application/view.html:290
-msgid "unchanged"
-msgstr "unverändert"
-
-#: application/templates/application/view.html:299
-msgid "Log"
-msgstr "Log"
-
-#: application/templates/application/widget.html:31
-msgid "No motion available."
-msgstr "Keine Antrag vorhanden."
-
-#: application/templates/projector/Application.html:29
-msgid "Poll result"
-msgstr "Abstimmungsergebnis"
-
-#: application/templates/projector/Application.html:47
-msgid "No poll results available."
-msgstr "Keine Abstimmungen vorhanden."
-
#: assignment/forms.py:24 assignment/models.py:57 assignment/views.py:383
#: assignment/templates/assignment/view.html:13
#: assignment/templates/projector/Assignment.html:21
@@ -1195,6 +322,26 @@ msgid "Only publish voting results for selected winners (Projector view only)"
msgstr ""
"Wahlergebnisse der nicht gewählten Kandidaten auf dem Projektor verbergen"
+#: assignment/forms.py:47 motion/forms.py:77
+msgid "Number of ballot papers (selection)"
+msgstr "Anzahl der Stimmzettel (Vorauswahl)"
+
+#: assignment/forms.py:49 motion/forms.py:79
+msgid "Number of all delegates"
+msgstr "Anzahl aller Delegierten"
+
+#: assignment/forms.py:50 motion/forms.py:80
+msgid "Number of all participants"
+msgstr "Anzahl aller Teilnehmer/innen"
+
+#: assignment/forms.py:51 motion/forms.py:81
+msgid "Use the following custom number"
+msgstr "Verwende die folgende benutzerdefinierte Anzahl"
+
+#: assignment/forms.py:58 motion/forms.py:88
+msgid "Custom number of ballot papers"
+msgstr "Benutzerdefinierte Anzahl von Stimmzetteln"
+
#: assignment/forms.py:63
msgid "Title for PDF document (all elections)"
msgstr "Titel für PDF-Dokument (alle Wahlen)"
@@ -1246,6 +393,11 @@ msgstr "Beschreibung"
msgid "Comment on the ballot paper"
msgstr "Kommentar für den Stimmzettel"
+#: assignment/models.py:69 motion/models.py:339
+#, python-format
+msgid "%s is not a valid status."
+msgstr "%s ist kein gültiger Status."
+
#: assignment/models.py:71
#, python-format
msgid "The assignment status is already %s."
@@ -1270,28 +422,36 @@ msgstr "%s möchte nicht kandidieren."
msgid "%s is no candidate"
msgstr "%s ist kein/e Kandidat/in"
-#: assignment/models.py:250
+#: assignment/models.py:253
msgid "Can see assignment"
msgstr "Darf Wahlen sehen"
-#: assignment/models.py:252
+#: assignment/models.py:255
msgid "Can nominate another person"
msgstr "Darf andere Personen für Wahlen vorschlagen"
-#: assignment/models.py:253
+#: assignment/models.py:256
msgid "Can nominate themselves"
msgstr "Darf selbst für Wahlen kandidieren"
-#: assignment/models.py:254
+#: assignment/models.py:257
msgid "Can manage assignment"
msgstr "Darf Wahlen verwalten"
-#: assignment/models.py:317
+#: assignment/models.py:301 motion/models.py:579
+msgid "Abstain"
+msgstr "Enthaltung"
+
+#: assignment/models.py:303 motion/templates/motion/poll_view.html:22
+msgid "Votes"
+msgstr "Stimmen"
+
+#: assignment/models.py:320
#, python-format
msgid "Ballot %d"
msgstr "Wahlgang %d"
-#: assignment/models.py:326 assignment/views.py:340 assignment/views.py:663
+#: assignment/models.py:329 assignment/views.py:340 assignment/views.py:663
#: assignment/templates/assignment/base_assignment.html:14
#: assignment/templates/assignment/overview.html:6
#: assignment/templates/assignment/overview.html:9
@@ -1311,6 +471,12 @@ msgstr "Neue Wahl wurde erfolgreich angelegt."
msgid "Election was successfully modified."
msgstr "Wahl wurde erfolgreich geändert."
+#: assignment/views.py:138 motion/views.py:256 motion/views.py:637
+#: participant/views.py:463 participant/views.py:486 utils/views.py:210
+#: utils/views.py:228 utils/views.py:252
+msgid "Please check the form for errors."
+msgstr "Bitte kontrollieren Sie das Formular nach Fehlern."
+
#: assignment/views.py:157
#, python-format
msgid "Election %s was successfully deleted."
@@ -1329,8 +495,9 @@ msgstr "Sie haben Ihre Kandidatur erfolgreich gesetzt."
msgid ""
"You have withdrawn your candidature successfully. You can not be nominated "
"by other participants anymore."
-msgstr "Sie haben Ihre Kandidatur erfolgreich zurückgezogen. Sie können nun "
-"von anderen Teilnehmer/innen nicht mehr vorgeschlagen werden."
+msgstr ""
+"Sie haben Ihre Kandidatur erfolgreich zurückgezogen. Sie können nun von "
+"anderen Teilnehmer/innen nicht mehr vorgeschlagen werden."
#: assignment/views.py:218
#, python-format
@@ -1338,6 +505,7 @@ msgid "Candidate %s was withdrawn successfully."
msgstr "Die Kandidatur von %s wurde erfolgreich zurückgezogen."
#: assignment/views.py:220
+#, python-format
msgid "%s was unblocked successfully."
msgstr "%s wurde erfolgreich freigegeben."
@@ -1347,6 +515,7 @@ msgid "Do you really want to withdraw %s from the election?"
msgstr "Soll %s wirklich von der Wahl zurückgezogen werden?"
#: assignment/views.py:226
+#, python-format
msgid "Do you really want to unblock %s from the election?"
msgstr "Soll %s wirklich für die Wahl freigegeben werden?"
@@ -1403,6 +572,11 @@ msgstr "Wahlen: %s"
msgid "Candidates"
msgstr "Kandidaten/innen"
+#: assignment/views.py:410 motion/views.py:771
+#: motion/templates/motion/view.html:44
+msgid "Vote results"
+msgstr "Abstimmungsergebnis"
+
#: assignment/views.py:414
#: assignment/templates/assignment/base_assignment.html:71
#: assignment/templates/assignment/poll_view.html:5
@@ -1428,6 +602,24 @@ msgstr ""
"N: %(NO)s\n"
"E: %(ABSTAIN)s"
+#: assignment/views.py:454 assignment/templates/assignment/poll_view.html:35
+#: assignment/templates/assignment/view.html:185
+#: assignment/templates/projector/Assignment.html:97
+#: motion/templates/motion/poll_view.html:31
+msgid "Invalid votes"
+msgstr "Ungültige Stimmen"
+
+#: assignment/views.py:461 assignment/templates/assignment/poll_view.html:45
+#: assignment/templates/assignment/view.html:202
+#: assignment/templates/assignment/view.html:207
+#: assignment/templates/projector/Assignment.html:111
+#: assignment/templates/projector/Assignment.html:117 motion/views.py:778
+#: motion/templates/motion/poll_view.html:35
+#: motion/templates/motion/view.html:84
+#: motion/templates/projector/Motion.html:42 poll/models.py:76
+msgid "Votes cast"
+msgstr "Abgegebene Stimmen"
+
#: assignment/views.py:520 assignment/views.py:536
#: assignment/templates/assignment/overview.html:25
#: assignment/templates/assignment/poll_view.html:5
@@ -1453,6 +645,13 @@ msgstr[1] "%d Kandidaten/innen"
msgid "%d available posts"
msgstr "%d verfügbare Posten"
+#: assignment/views.py:577 assignment/templates/assignment/view.html:168
+#: assignment/templates/projector/Assignment.html:80 motion/views.py:778
+#: motion/views.py:831 motion/templates/motion/view.html:81
+#: motion/templates/projector/Motion.html:39
+msgid "Abstention"
+msgstr "Enthaltung"
+
#: assignment/views.py:656
msgid "Election settings successfully saved."
msgstr "Wahl-Einstellungen wurden erfolgreich gespeichert."
@@ -1500,11 +699,28 @@ msgstr "Wahl als PDF"
msgid "Show election"
msgstr "Wahl projizieren"
+#: assignment/templates/assignment/base_assignment.html:63
+#: motion/templates/motion/base_motion.html:61
+msgid "New agenda item"
+msgstr "Neuer Tagesordnungseintrag"
+
#: assignment/templates/assignment/config.html:5
#: assignment/templates/assignment/config.html:8
msgid "Election settings"
msgstr "Wahl-Einstellungen"
+#: assignment/templates/assignment/overview.html:14
+#: assignment/templates/assignment/overview.html:27
+#: assignment/templates/assignment/view.html:11
+#: assignment/templates/projector/Assignment.html:18 motion/views.py:749
+#: motion/templates/motion/overview.html:20
+#: motion/templates/motion/overview.html:40
+#: motion/templates/motion/view.html:34
+#: motion/templates/projector/Motion.html:11
+#: participant/templates/participant/overview.html:52
+msgid "Status"
+msgstr "Status"
+
#: assignment/templates/assignment/overview.html:22
msgid "election"
msgid_plural "elections"
@@ -1519,6 +735,27 @@ msgstr "Wahl projizieren"
msgid "Short description (for ballot paper)"
msgstr "Kurzbeschreibung (für Stimmzettel)"
+#: assignment/templates/assignment/poll_view.html:12
+#: motion/templates/motion/poll_view.html:14
+msgid "Special values"
+msgstr "Spezielle Werte"
+
+#: assignment/templates/assignment/poll_view.html:12
+#: motion/templates/motion/poll_view.html:14 poll/models.py:235
+msgid "majority"
+msgstr "Mehrheit"
+
+#: assignment/templates/assignment/poll_view.html:12
+#: motion/templates/motion/poll_view.html:14 poll/models.py:237
+#: poll/models.py:239
+msgid "undocumented"
+msgstr "nicht erfasst"
+
+#: assignment/templates/assignment/poll_view.html:59
+#: motion/templates/motion/poll_view.html:45
+msgid "Ballot paper as PDF"
+msgstr "Stimmzettel als PDF"
+
#: assignment/templates/assignment/view.html:21
msgid "Change status"
msgstr "Status ändern"
@@ -1577,6 +814,13 @@ msgstr "Kandidat/in ist gewählt"
msgid "was not a
candidate"
msgstr "war kein Kandidat"
+#: assignment/templates/assignment/view.html:190
+#: assignment/templates/projector/Assignment.html:101 motion/views.py:778
+#: motion/templates/motion/view.html:82
+#: motion/templates/projector/Motion.html:40
+msgid "Invalid"
+msgstr "Ungültig"
+
#: assignment/templates/assignment/view.html:221
#: assignment/templates/projector/Assignment.html:126
msgid "No ballots available."
@@ -1622,7 +866,7 @@ msgstr "Präsentationssystem für Tagesordnung, Anträge und Wahlen"
msgid "Welcome"
msgstr "Willkommen"
-#: config/models.py:90 participant/models.py:189
+#: config/models.py:90 participant/models.py:192
msgid "Welcome to OpenSlides!"
msgstr "Willkommen bei OpenSlides!"
@@ -1635,7 +879,14 @@ msgstr "Professionelle Unterstützung für OpenSlides gibt es unter %s."
msgid "General"
msgstr "Allgemein"
-#: config/views.py:78
+#: config/models.py:131 config/templates/config/version.html:5
+#: config/templates/config/version.html:8
+#: config/templates/config/version.html:11 motion/views.py:763
+#: motion/templates/motion/view.html:214 motion/templates/motion/view.html:244
+msgid "Version"
+msgstr "Version"
+
+#: config/views.py:79
msgid ""
"Anonymous access enabled. Please modify the \"Anonymous\" group to fit your "
"required permissions."
@@ -1643,11 +894,11 @@ msgstr ""
"Anonymer Zugriff aktiviert. Bitte setzen Sie die Rechte der Benutzerrolle "
"\"Anonymous\" passend zum gewünschten Zugriffslevel."
-#: config/views.py:84
+#: config/views.py:85
msgid "General settings successfully saved."
msgstr "Allgemeine Einstellungen erfolgreich gespeichert."
-#: config/views.py:119 config/templates/config/base_config.html:7
+#: config/views.py:120 config/templates/config/base_config.html:7
msgid "Configuration"
msgstr "Konfiguration"
@@ -1668,6 +919,729 @@ msgstr "Startseite"
msgid "System"
msgstr "System"
+#: motion/forms.py:25 motion/models.py:546 motion/views.py:797
+#: motion/templates/motion/view.html:229 motion/templates/motion/view.html:249
+#: motion/templates/projector/Motion.html:77
+msgid "Reason"
+msgstr "Begründung"
+
+#: motion/forms.py:30
+msgid "Trivial change"
+msgstr "Triviale Änderung"
+
+#: motion/forms.py:31
+msgid "Trivial changes don't create a new version."
+msgstr "Triviale Änderungen erzeugen keine neue Version."
+
+#: motion/forms.py:44 motion/views.py:736 motion/templates/motion/view.html:22
+msgid "Supporters"
+msgstr "Unterstützer/innen"
+
+#: motion/forms.py:50 participant/forms.py:102
+msgid "CSV File"
+msgstr "CSV-Datei"
+
+#: motion/forms.py:54
+msgid "Import motions with status \"authorized\""
+msgstr "Anträge als \"Zugelassen\" importieren"
+
+#: motion/forms.py:55
+msgid "Set the initial status for each motion to \"authorized\""
+msgstr "Setzt den initialen Status für jeden Antrag auf \"zugelassen\""
+
+#: motion/forms.py:63
+msgid "Number of (minimum) required supporters for a motion"
+msgstr "Mindestanzahl erforderlicher Unterstützer/innen für einen Antrag"
+
+#: motion/forms.py:67
+msgid "Choose 0 to disable the supporting system"
+msgstr "Wähle 0 um das Unterstützersystem zu deaktivieren"
+
+#: motion/forms.py:72
+msgid "Motion preamble"
+msgstr "Antragseinleitung"
+
+#: motion/forms.py:93
+msgid "Title for PDF document (all motions)"
+msgstr "Titel für PDF-Dokument (alle Anträge)"
+
+#: motion/forms.py:98
+msgid "Preamble text for PDF document (all motions)"
+msgstr "Einleitungstext für PDF-Dokument (alle Wahlen) "
+
+#: motion/forms.py:102
+msgid "Allow trivial changes"
+msgstr "Triviale Änderungen erlauben"
+
+#: motion/forms.py:103
+msgid "Warning: Trivial changes undermine the motions autorisation system."
+msgstr ""
+"Warnung: Triviale Änderungen unterlaufen das Zulassungssystem von Anträgen."
+
+#: motion/models.py:45
+msgid "Published"
+msgstr "Veröffentlicht"
+
+#: motion/models.py:46
+msgid "Permitted"
+msgstr "Zugelassen"
+
+#: motion/models.py:47 motion/templates/motion/overview.html:24
+#: motion/templates/motion/view.html:167
+msgid "Accepted"
+msgstr "Angenommen"
+
+#: motion/models.py:48 motion/templates/motion/overview.html:25
+#: motion/templates/motion/view.html:172
+msgid "Rejected"
+msgstr "Abgelehnt"
+
+#: motion/models.py:49
+msgid "Withdrawed"
+msgstr "Zurückgezogen"
+
+#: motion/models.py:50 motion/templates/motion/view.html:180
+msgid "Adjourned"
+msgstr "Vertagt"
+
+# please check!
+#: motion/models.py:51 motion/templates/motion/view.html:183
+msgid "Not Concerned"
+msgstr "Nicht befasst"
+
+# please check!
+#: motion/models.py:52 motion/templates/motion/view.html:186
+msgid "Commited a bill"
+msgstr "Verwiesen (in Ausschuss)"
+
+#: motion/models.py:53
+msgid "Rejected (not authorized)"
+msgstr "Verworfen (nicht zulässig)"
+
+#: motion/models.py:54 motion/templates/motion/overview.html:27
+msgid "Needs Review"
+msgstr "Benötigt Review"
+
+#: motion/models.py:66 motion/views.py:716
+#: motion/templates/motion/overview.html:41
+#: motion/templates/motion/view.html:18
+#: motion/templates/projector/Motion.html:55
+msgid "Submitter"
+msgstr "Antragsteller/in"
+
+#: motion/models.py:103
+#, python-format
+msgid "Version %d authorized"
+msgstr "Version %d zugelassen"
+
+#: motion/models.py:110
+msgctxt "Rejected means not authorized"
+msgid "Version %d rejected"
+msgstr "Version %d zurückgewiesen"
+
+#: motion/models.py:139
+msgid "Searching for supporters."
+msgstr "Auf Unterstützersuche."
+
+#: motion/models.py:141
+msgid "Not yet authorized."
+msgstr "Noch nicht zugelassen."
+
+#: motion/models.py:143
+msgid "Not yet authorized changes."
+msgstr "Noch nicht zugelassene Änderungen."
+
+#: motion/models.py:223
+#, python-format
+msgid ""
+"Trivial changes to version %(version)d; changed fields: %(changed_fields)s"
+msgstr ""
+"Triviale Änderung an Version %(version)d; Geänderte Felder: "
+"%(changed_fields)s"
+
+#: motion/models.py:234
+#, python-format
+msgid "Version %s created"
+msgstr "Version %s erstellt"
+
+#: motion/models.py:244
+msgid "Supporters removed"
+msgstr "Unterstützer/innen gelöscht"
+
+#: motion/models.py:253
+#, python-format
+msgid "Status reseted to: %s"
+msgstr "Status zurückgesetzt auf: %s"
+
+#: motion/models.py:268
+#, python-format
+msgid "Supporter: +%s"
+msgstr "Unterstützer/in: +%s"
+
+#: motion/models.py:282
+#, python-format
+msgid "Supporter: -%s"
+msgstr "Unterstützer/in: -%s"
+
+#: motion/models.py:299
+#, python-format
+msgid "Number set: %s"
+msgstr "Nummer gesetzt: %s"
+
+#: motion/models.py:312
+#, python-format
+msgid "Version %s authorized"
+msgstr "Version %s zugelassen"
+
+#: motion/models.py:326
+#, python-format
+msgid "Version %s not authorized"
+msgstr "Version %s nicht zugelassen"
+
+#: motion/models.py:342
+#, python-format
+msgid "The motion status is already '%s.'"
+msgstr "Der Antragsstatus ist bereits '%s'."
+
+#: motion/models.py:350
+#, python-format
+msgid ""
+"The motion status is: '%(currentstatus)s'. You can not set the status to "
+"'%(newstatus)s'."
+msgstr ""
+"Der Antragsstatus ist: '%(currentstatus)s'. Sie können den Status nicht auf "
+"'%(newstatus)s' setzen."
+
+#: motion/models.py:358
+msgid "Status modified"
+msgstr "Status geändert"
+
+#: motion/models.py:450
+msgid "by"
+msgstr "von"
+
+#: motion/models.py:458 motion/templates/motion/view.html:210
+#: motion/templates/motion/widget.html:27
+#: motion/templates/projector/Motion.html:65
+msgid "no number"
+msgstr "ohne Nummer"
+
+#: motion/models.py:459 motion/templates/motion/overview.html:32
+#: motion/templates/motion/widget.html:23
+msgid "motion"
+msgstr "Antrag"
+
+#: motion/models.py:484
+msgid "Poll created"
+msgstr "Abstimmung erstellt"
+
+#: motion/models.py:535
+msgid "Can see motions"
+msgstr "Darf Anträge sehen"
+
+#: motion/models.py:536
+msgid "Can create motions"
+msgstr "Darf Anträge erstellen"
+
+#: motion/models.py:537
+msgid "Can support motions"
+msgstr "Darf Anträge unterstützen"
+
+#: motion/models.py:538
+msgid "Can manage motions"
+msgstr "Darf Anträge verwalten"
+
+#: motion/models.py:605
+msgid "The assembly may decide,"
+msgstr "Die Versammlung möge beschließen,"
+
+#: motion/models.py:608 motion/views.py:666 motion/views.py:891
+#: motion/templates/motion/base_motion.html:9
+#: motion/templates/motion/overview.html:7
+#: motion/templates/motion/overview.html:10
+msgid "Motions"
+msgstr "Anträge"
+
+#: motion/views.py:179
+msgid "You have not the necessary rights to create or edit motions."
+msgstr ""
+"Sie haben nicht die nötigen Rechte, um Anträge zu erstellen oder zu "
+"bearbeiten."
+
+#: motion/views.py:184
+msgid "You can not edit this motion."
+msgstr "Sie dürfen diesen Antrag nicht bearbeiten."
+
+#: motion/views.py:247
+msgid "New motion was successfully created."
+msgstr "Neuer Antrag wurde erfolgreich angelegt."
+
+#: motion/views.py:249
+msgid "Motion was successfully modified."
+msgstr "Antrag wurde erfolgreich geändert."
+
+#: motion/views.py:263
+msgid ""
+"Attention: Do you really want to edit this motion? The supporters will "
+"not be removed automatically because you can manage motions. Please "
+"check if the supports are valid after your changing!"
+msgstr ""
+"Achtung: Wollen Sie den Antrag wirklich ändern? Die Unterstützer/innen "
+"werden nicht automatisch entfernt, da Sie Anträge verwalten dürfen. "
+"Prüfen Sie, ob die Unterstützungen noch gültig sind."
+
+#: motion/views.py:265
+#, python-format
+msgid ""
+"Attention: Do you really want to edit this motion? All %s supporters "
+"will be removed! Try to convince the supporters again."
+msgstr ""
+"Wollen Sie den Antrag wirklich ändern? Alle %s Unterstützer/innen "
+"werden dann automatisch entfernt. Versuchen Sie diese erneut zu gewinnen."
+
+#: motion/views.py:297
+msgid "Motion number was successfully set."
+msgstr "Antragsnummer wurde erfolgreich gesetzt."
+
+#: motion/views.py:313
+msgid "Motion was successfully authorized."
+msgstr "Antrag wurde erfolgreich zugelassen."
+
+#: motion/views.py:328
+msgid "Motion was successfully rejected."
+msgstr "Antrag wurde erfolgreich verworfen."
+
+#: motion/views.py:344
+#, python-format
+msgid "Motion status was set to: %s."
+msgstr "Antragsstatus wurde gesetzt auf: %s."
+
+#: motion/views.py:360
+msgid "Motion status was reset."
+msgstr "Antragsstatus wurde zurückgesetzt."
+
+#: motion/views.py:374
+msgid "You have support the motion successfully."
+msgstr "Sie haben den Antrag erfolgreich unterstützt."
+
+#: motion/views.py:388
+msgid "You have unsupport the motion successfully."
+msgstr "Sie haben dem Antrag erfolgreich Ihre Unterstützung entzogen."
+
+#: motion/views.py:402
+msgid "New vote was successfully created."
+msgstr "Neue Abstimmung erfolgreich angelegt."
+
+#: motion/views.py:418
+msgid "Poll deleted"
+msgstr "Abstimmung gelöscht"
+
+#: motion/views.py:419
+msgid "Poll was successfully deleted."
+msgstr "Abstimmung wurde erfolgreich gelöscht."
+
+#: motion/views.py:421
+#, python-format
+msgid "the %s. poll"
+msgstr "die %s. Abstimmung"
+
+#: motion/views.py:462 motion/views.py:471
+#, python-format
+msgid "You can not delete motion %s."
+msgstr "Sie können Antrag %s nicht löschen."
+
+#: motion/views.py:467 motion/views.py:475
+#, python-format
+msgid "Motion %s was successfully deleted."
+msgstr "Antrag %s wurde erfolgreich gelöscht."
+
+#: motion/views.py:477
+msgid "Invalid request"
+msgstr "Ungültige Anfrage"
+
+#: motion/views.py:501
+msgid "Poll was updated"
+msgstr "Abstimmung wurde aktualisiert"
+
+#: motion/views.py:518
+#, python-format
+msgid "Version %s accepted."
+msgstr "Version %s akzeptiert."
+
+#: motion/views.py:520
+#, python-format
+msgid "Do you really want to authorize version %s?"
+msgstr "Soll Version %s wirklich zugelassen werden?"
+
+#: motion/views.py:530
+#, python-format
+msgid "Version %s rejected."
+msgstr "Version %s zurückgewiesen."
+
+#: motion/views.py:532
+msgid "ERROR by rejecting the version."
+msgstr "FEHLER beim Zurückweisen der Version."
+
+#: motion/views.py:534
+#, python-format
+msgid "Do you really want to reject version %s?"
+msgstr "Soll Version %s wirklich zurückgewiesen werden?"
+
+#: motion/views.py:564 motion/views.py:568 motion/views.py:574
+#: motion/views.py:577 participant/api.py:76
+#, python-format
+msgid "Ignoring malformed line %d in import file."
+msgstr "Fehlerhafte Zeile %d der Quelldatei wurde ignoriert."
+
+#: motion/views.py:623
+#, python-format
+msgid "%d motion was successfully imported."
+msgid_plural "%d motions were successfully imported."
+msgstr[0] "%d Antrag wurde erfolgreich importiert."
+msgstr[1] "%d Anträge wurden erfolgreich importiert."
+
+#: motion/views.py:626
+#, python-format
+msgid "%d motion was successfully modified."
+msgid_plural "%d motions were successfully modified."
+msgstr[0] "%d Antrag wurde erfolgreich geändert."
+msgstr[1] "%d Anträge wurden erfolgreich geändert."
+
+#: motion/views.py:629
+#, python-format
+msgid "%d new user was added."
+msgid_plural "%d new users were added."
+msgstr[0] "%d neuer Nutzer wurde erstellt."
+msgstr[1] "%d neue Nutzer wurden erstellt."
+
+#: motion/views.py:633 participant/api.py:92
+msgid "Import aborted because of severe errors in the input file."
+msgstr "Import auf Grund von schweren Fehlern in der Quelldatei abgebrochen."
+
+#: motion/views.py:635 participant/api.py:94
+msgid "Import file has wrong character encoding, only UTF-8 is supported!"
+msgstr ""
+"Die Quelldatei benutzt eine ungültige Zeichenkodierung, es wird nur UTF-8 "
+"wird unterstützt!"
+
+#: motion/views.py:639
+msgid ""
+"Attention: Existing motions will be modified if you import new motions with "
+"the same number."
+msgstr ""
+"Achtung: Existierende Anträge werden geändert wenn Sie neue Anträge mit "
+"identischer Nummer importieren."
+
+#: motion/views.py:640
+msgid ""
+"Attention: Importing an motions without a number multiple times will create "
+"duplicates."
+msgstr ""
+"Achtung: Bei mehrfachem Import eines Antrags ohne Nummer können Duplikate "
+"entstehen."
+
+#: motion/views.py:673 motion/views.py:811
+#: motion/templates/motion/poll_view.html:7
+#: motion/templates/motion/poll_view.html:12
+#: motion/templates/motion/view.html:7 motion/templates/motion/view.html:206
+#: motion/templates/motion/view.html:225
+#: motion/templates/projector/Motion.html:7
+#: motion/templates/projector/Motion.html:65
+msgid "Motion"
+msgstr "Antrag"
+
+#: motion/views.py:687 motion/templates/motion/overview.html:84
+msgid "No motions available."
+msgstr "Keine Anträge vorhanden."
+
+#: motion/views.py:692 motion/views.py:694 motion/views.py:709
+#: motion/views.py:711 motion/templates/motion/base_motion.html:24
+#: motion/templates/projector/Motion.html:63
+msgid "Motion No."
+msgstr "Antrag Nr."
+
+#: motion/views.py:726
+msgid "Signature"
+msgstr "Unterschrift"
+
+#: motion/views.py:777 motion/templates/motion/base_motion.html:55
+#: motion/templates/motion/poll_view.html:8
+#: motion/templates/motion/poll_view.html:13
+#: motion/templates/motion/view.html:66 motion/templates/motion/view.html:74
+#: motion/templates/projector/Motion.html:33
+msgid "Vote"
+msgstr "Abstimmung"
+
+#: motion/views.py:811
+msgid "Poll"
+msgstr "Abstimmung"
+
+#: motion/views.py:825
+msgid "Motion No. %s"
+msgstr "Antrag Nr. %s"
+
+#: motion/views.py:827
+#, python-format
+msgid "%d. Vote"
+msgstr "%d. Abstimmung"
+
+#: motion/views.py:884
+msgid "Motion settings successfully saved."
+msgstr "Antrags-Einstellungen wurden erfolgreich gespeichert."
+
+#: motion/templates/motion/base_motion.html:11
+msgid "All motions"
+msgstr "Alle Anträge"
+
+#: motion/templates/motion/base_motion.html:13
+#: motion/templates/motion/edit.html:10 motion/templates/motion/edit.html:18
+msgid "New motion"
+msgstr "Neuer Antrag"
+
+#: motion/templates/motion/base_motion.html:16
+#: motion/templates/motion/import.html:5 motion/templates/motion/import.html:8
+msgid "Import motions"
+msgstr "Anträge importieren"
+
+#: motion/templates/motion/base_motion.html:18
+msgid "All motions as PDF"
+msgstr "Alle Anträge als PDF"
+
+#: motion/templates/motion/base_motion.html:34
+msgid "View motion"
+msgstr "Antrag anzeigen"
+
+#: motion/templates/motion/base_motion.html:38
+#: motion/templates/motion/edit.html:8 motion/templates/motion/edit.html:16
+#: motion/templates/motion/overview.html:72
+msgid "Edit motion"
+msgstr "Antrag bearbeiten"
+
+#: motion/templates/motion/base_motion.html:42
+#: motion/templates/motion/overview.html:74
+msgid "Delete motion"
+msgstr "Antrag löschen"
+
+#: motion/templates/motion/base_motion.html:45
+#: motion/templates/motion/overview.html:77
+msgid "Motion as PDF"
+msgstr "Antrag als PDF"
+
+#: motion/templates/motion/base_motion.html:49
+msgid "Show Motion"
+msgstr "Zeige Antrag"
+
+#: motion/templates/motion/config.html:5 motion/templates/motion/config.html:8
+msgid "Motion settings"
+msgstr "Antrags Einstellungen"
+
+#: motion/templates/motion/import.html:9
+msgid "Select a CSV file to import motions!"
+msgstr "Wählen Sie eine CSV-Datei zum Importieren von Anträgen aus!"
+
+#: motion/templates/motion/import.html:11
+msgid ""
+"Required comma separated values: {number, title, text, reason, "
+"first_name, last_name}
(number
and reason
"
+"are optional and may be empty)"
+msgstr ""
+"Erforderliche kommaseparierte Werte: {Nummer, Titel, Text, Begründung, "
+"Vorname, Nachname}
(Nummer
und Begründung
"
+"sind optional und können auch leer sein)"
+
+#: motion/templates/motion/import.html:13
+#: participant/templates/participant/import.html:13
+msgid "Required CSV file encoding: UTF-8 (Unicode)."
+msgstr "Erforderliches CSV-Datei-Encoding: UTF-8 (Unicode)."
+
+#: motion/templates/motion/import.html:16
+#: participant/templates/participant/import.html:16
+msgid "A CSV example file is available in OpenSlides Wiki."
+msgstr "Eine CSV-Beispiel-Datei gibt es im OpenSlides Wiki."
+
+#: motion/templates/motion/import.html:23
+#: participant/templates/participant/import.html:23
+msgid "Import"
+msgstr "Importieren"
+
+#: motion/templates/motion/overview.html:15
+msgid "Need supporters"
+msgstr "Benötigt Unterstützer/innen"
+
+#: motion/templates/motion/overview.html:18
+msgid "Without number"
+msgstr "Ohne Nummer"
+
+#: motion/templates/motion/overview.html:22
+msgid "Not yet authorized"
+msgstr "Noch nicht zugelassen"
+
+#: motion/templates/motion/overview.html:23
+msgid "Authorized"
+msgstr "Zugelassen"
+
+#: motion/templates/motion/overview.html:26
+msgid "Withdrawen (by submitter)"
+msgstr "Zurückgezogen (durch Antragsteller/in)"
+
+#: motion/templates/motion/overview.html:35
+msgid "Number"
+msgstr "Nummer"
+
+#: motion/templates/motion/overview.html:36
+msgid "Motion title"
+msgstr "Antragstitel"
+
+#: motion/templates/motion/overview.html:38
+msgid "Number of supporters"
+msgstr "Anzahl der Unterstützer/innen"
+
+#: motion/templates/motion/overview.html:42
+#: motion/templates/motion/view.html:109
+msgid "Creation Time"
+msgstr "Erstellungszeit"
+
+#: motion/templates/motion/overview.html:67
+msgid "Activate motion"
+msgstr "Antrag projizieren"
+
+#: motion/templates/motion/poll_view.html:21
+msgid "Option"
+msgstr "Wahlmöglichkeit"
+
+#: motion/templates/motion/view.html:51 motion/templates/motion/view.html:91
+msgid "New vote"
+msgstr "Neue Abstimmung"
+
+#: motion/templates/motion/view.html:67
+msgid "Edit Vote"
+msgstr "Abstimmung bearbeiten"
+
+#: motion/templates/motion/view.html:70
+msgid "Delete Vote"
+msgstr "Abstimmung löschen"
+
+#: motion/templates/motion/view.html:99
+msgid "Enter result"
+msgstr "Ergebnis eingeben"
+
+#: motion/templates/motion/view.html:116
+msgid "Withdraw"
+msgstr "Zurückziehen"
+
+#: motion/templates/motion/view.html:124
+msgid "Unsupport"
+msgstr "Nicht unterstützen"
+
+#: motion/templates/motion/view.html:130
+msgid "Support"
+msgstr "Unterstützen"
+
+#: motion/templates/motion/view.html:136
+msgid "minimum required supporters"
+msgstr "minimal erforderliche Unterstützer/innen"
+
+#: motion/templates/motion/view.html:143
+msgid "Manage motion"
+msgstr "Antrag Verwalten"
+
+#: motion/templates/motion/view.html:146
+msgid "Formal validation"
+msgstr "Formale Gültigkeitsprüfung"
+
+#: motion/templates/motion/view.html:148
+msgid "Publish"
+msgstr "Veröffentlichen"
+
+#: motion/templates/motion/view.html:151
+msgid "Permit"
+msgstr "Zulassen"
+
+#: motion/templates/motion/view.html:154
+msgid "Not permit (reject)"
+msgstr "Nicht zulassen (verwerfen)"
+
+#: motion/templates/motion/view.html:157
+msgid "Set Number"
+msgstr "Setze Nummer"
+
+#: motion/templates/motion/view.html:164
+msgid "Result after vote"
+msgstr "Ergebnis nach der Abstimmung"
+
+#: motion/templates/motion/view.html:178
+msgid "Result after debate"
+msgstr "Ergebnis nach der Debatte"
+
+#: motion/templates/motion/view.html:189
+msgid "Withdrawed by Submitter"
+msgstr "Zurückgezogen durch Antragsteller/in"
+
+#: motion/templates/motion/view.html:194
+msgid "For Administration only:"
+msgstr "Nur zur Administration:"
+
+#: motion/templates/motion/view.html:196
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: motion/templates/motion/view.html:219
+msgid "This is not the newest version."
+msgstr "Dies ist nicht die neuste Version."
+
+#: motion/templates/motion/view.html:219 motion/templates/motion/view.html:221
+msgid "Go to version"
+msgstr "Gehe zu Version"
+
+#: motion/templates/motion/view.html:221
+msgid "This is not the authorized version."
+msgstr "Dies ist nicht die zugelassene Version."
+
+#: motion/templates/motion/view.html:239
+msgid "Version History"
+msgstr "Versionshistorie"
+
+#: motion/templates/motion/view.html:245
+msgid "Time"
+msgstr "Zeit"
+
+#: motion/templates/motion/view.html:256
+msgid "Version authorized"
+msgstr "Version %d zugelassen"
+
+#: motion/templates/motion/view.html:259
+msgid "Permit Version"
+msgstr "Version zulassen"
+
+#: motion/templates/motion/view.html:262
+msgid "Reject Version"
+msgstr "Version verwerfen"
+
+#: motion/templates/motion/view.html:266
+msgid "Version rejected"
+msgstr "Version verworfen"
+
+#: motion/templates/motion/view.html:276 motion/templates/motion/view.html:283
+#: motion/templates/motion/view.html:290
+msgid "unchanged"
+msgstr "unverändert"
+
+#: motion/templates/motion/view.html:299
+msgid "Log"
+msgstr "Log"
+
+#: motion/templates/motion/widget.html:31
+msgid "No motion available."
+msgstr "Keine Antrag vorhanden."
+
+#: motion/templates/projector/Motion.html:29
+msgid "Poll result"
+msgstr "Abstimmungsergebnis"
+
+#: motion/templates/projector/Motion.html:47
+msgid "No poll results available."
+msgstr "Keine Abstimmungen vorhanden."
+
#: participant/__init__.py:3
msgid "Participant"
msgstr "Teilnehmer"
@@ -1705,7 +1679,7 @@ msgstr "Erscheint nur im PDF der Erst-Passwörter"
#: participant/forms.py:118
msgid "Sort users by first name"
-msgstr ""
+msgstr "Sortiere Teilnehmer beim Vornamen"
#: participant/models.py:29 participant/templates/participant/overview.html:25
msgid "Male"
@@ -1733,8 +1707,8 @@ msgstr "Gast"
#: participant/models.py:41 participant/templates/participant/overview.html:30
#: participant/templates/participant/overview.html:68
-msgid "Category"
-msgstr "Kategorie"
+msgid "Detail"
+msgstr "Detail"
#: participant/models.py:42
msgid "Will be shown behind the name."
@@ -1752,7 +1726,7 @@ msgstr "Nur zum Filtern der Benutzerliste."
msgid "Typ"
msgstr "Typ"
-#: participant/models.py:50 participant/views.py:219
+#: participant/models.py:50 participant/views.py:217
#: participant/templates/participant/overview.html:45
#: participant/templates/participant/overview.html:70
msgid "Committee"
@@ -1766,86 +1740,86 @@ msgstr "Nur für Notizen."
msgid "Default password"
msgstr "Vorgegebenes Passwort"
-#: participant/models.py:99
+#: participant/models.py:102
msgid "Can see participant"
msgstr "Darf die Teilnehmer/inen sehen"
-#: participant/models.py:101
+#: participant/models.py:104
msgid "Can manage participant"
msgstr "Darf die Teilnehmer/inen verwalten"
-#: participant/views.py:214
+#: participant/views.py:212
msgid "Participant-list"
msgstr "Teilnehmerliste"
-#: participant/views.py:215
+#: participant/views.py:213
msgid "List of Participants"
msgstr "Teilnehmerliste"
-#: participant/views.py:218 participant/templates/participant/overview.html:67
+#: participant/views.py:216 participant/templates/participant/overview.html:67
msgid "Last Name"
msgstr "Nachname"
-#: participant/views.py:218 participant/templates/participant/overview.html:66
+#: participant/views.py:216 participant/templates/participant/overview.html:66
msgid "First Name"
msgstr "Vorname"
-#: participant/views.py:218
+#: participant/views.py:216
msgid "Group"
msgstr "Gruppe"
-#: participant/views.py:218 participant/templates/participant/overview.html:37
+#: participant/views.py:216 participant/templates/participant/overview.html:37
#: participant/templates/participant/overview.html:69
msgid "Type"
msgstr "Typ"
-#: participant/views.py:247
+#: participant/views.py:245
msgid "Participant-passwords"
msgstr "Teilnehmer-Passwoerter"
-#: participant/views.py:269
+#: participant/views.py:263
msgid "Account for OpenSlides"
msgstr "Zugang für OpenSlides"
-#: participant/views.py:271
+#: participant/views.py:265
#, python-format
msgid "for %s"
msgstr "für %s"
-#: participant/views.py:274
+#: participant/views.py:268
#, python-format
msgid "User: %s"
msgstr "Nutzername: %s"
-#: participant/views.py:278
+#: participant/views.py:272
#, python-format
msgid "Password: %s"
msgstr "Passwort: %s"
-#: participant/views.py:283
+#: participant/views.py:277
#, python-format
msgid "URL: %s"
msgstr "URL: %s"
-#: participant/views.py:368
+#: participant/views.py:319
#, python-format
msgid "%d new participants were successfully imported."
msgstr "%d neue Teilnehmer/innen wurden erfolgreich importiert."
-#: participant/views.py:379
+#: participant/views.py:330
msgid "Do you really want to reset the password?"
msgstr "Soll das Passwort wirklich zurückgesetzt werden?"
-#: participant/views.py:395
+#: participant/views.py:346
#, python-format
msgid "The Password for %s was successfully reset."
msgstr "Das Passwort für %s wurde erfolgreich zurückgesetzt."
-#: participant/views.py:477
+#: participant/views.py:428
msgid "Participants settings successfully saved."
msgstr "Teilnehmer/innen-Einstellungen wurden erfolgreich gespeichert."
-#: participant/views.py:487
+#: participant/views.py:438
#, python-format
msgid ""
"Installation was successfully! Use %(user)s (password: %(password)s) for "
@@ -1858,15 +1832,15 @@ msgstr ""
"Sie das Passwort nach der ersten Anmeldung! Anderenfalls erscheint diese "
"Meldung weiterhin für alle und ist ein Sicherheitsrisiko."
-#: participant/views.py:510
+#: participant/views.py:461
msgid "User settings successfully saved."
msgstr "Nutzereinstellungen wurden erfolgreich gespeichert."
-#: participant/views.py:532
+#: participant/views.py:483
msgid "Password successfully changed."
msgstr "Password wurde erfolgreich geändert."
-#: participant/views.py:550
+#: participant/views.py:501
#: participant/templates/participant/base_participant.html:12
#: participant/templates/participant/overview.html:7
#: participant/templates/participant/overview.html:18
@@ -2060,23 +2034,23 @@ msgstr "Darf den Projektor sehen"
msgid "Can see the dashboard"
msgstr "Darf das Dashboard sehen"
-#: projector/views.py:184
+#: projector/views.py:185
msgid "Errors in the form"
msgstr "Fehler im Formular"
-#: projector/views.py:360 projector/templates/projector/dashboard.html:17
+#: projector/views.py:361 projector/templates/projector/dashboard.html:17
msgid "Dashboard"
msgstr "Dashboard"
-#: projector/views.py:377
+#: projector/views.py:378
msgid "Projector live view"
msgstr "Projektor-Live-Ansicht"
-#: projector/views.py:403
+#: projector/views.py:404
msgid "Overlays"
msgstr "Einblendungen"
-#: projector/views.py:416
+#: projector/views.py:417
msgid "Custom Slides"
msgstr "Benutzerdefinierte Folien"
@@ -2101,6 +2075,7 @@ msgid "Projector view"
msgstr "Projektor-Ansicht"
#: projector/templates/projector/control_countdown.html:6
+msgctxt "seconds"
msgid "s"
msgstr "s"
@@ -2187,16 +2162,16 @@ msgstr "Abmelden"
msgid "You have access to the following pages:"
msgstr "Sie haben Zugriff auf folgende Seiten:"
-#: utils/pdf.py:224
+#: utils/pdf.py:225
msgid "%Y-%m-%d %H:%Mh"
msgstr "%d.%m.%Y %H:%Mh"
-#: utils/pdf.py:225
+#: utils/pdf.py:226
#, python-format
msgid "Printed: %s"
msgstr "Gedruckt am: %s"
-#: utils/pdf.py:236 utils/pdf.py:245
+#: utils/pdf.py:237 utils/pdf.py:246
#, python-format
msgid "Page %s"
msgstr "Seite %s"
@@ -2241,6 +2216,27 @@ msgstr "undefinierter-dateiname"
msgid "Enter valid JSON"
msgstr "Gebe valides JSON ein"
+#~ msgid "Applications"
+#~ msgstr "Anträge"
+
+#~ msgid "Application"
+#~ msgstr "Antrag"
+
+#~ msgid "Application No. %s"
+#~ msgstr "Antrag Nr. %s"
+
+#~ msgid "Application No."
+#~ msgstr "Antrag Nr."
+
+#~ msgid "Show Application"
+#~ msgstr "Antrag projizieren"
+
+#~ msgid "Application settings"
+#~ msgstr "Antrags-Einstellungen"
+
+#~ msgid "Category"
+#~ msgstr "Kategorie"
+
#~ msgid "Do you really want to delete multiple motions?"
#~ msgstr "Wollen Sie wirklich mehrere Anträge löschen?"
From 2e41dcdefea4c765542c4123ef95a0a33d242bae Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Thu, 25 Oct 2012 10:15:41 +0200
Subject: [PATCH 15/22] Fixt problems with the permission of supporting and
unsupporting a motion Ticket #377
---
openslides/motion/models.py | 8 +-------
openslides/motion/urls.py | 6 +++---
openslides/motion/views.py | 30 ++++++++++++++++++++++++------
3 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/openslides/motion/models.py b/openslides/motion/models.py
index 3f5635a19..71a6aa80f 100644
--- a/openslides/motion/models.py
+++ b/openslides/motion/models.py
@@ -258,11 +258,8 @@ class Motion(models.Model, SlideMixin):
"""
if person == self.submitter:
# TODO: Use own Exception
- raise NameError('Supporter can not be the submitter of a ' \
+ raise NameError('Supporter can not be the submitter of a '
'motion.')
- if self.permitted is not None:
- # TODO: Use own Exception
- raise NameError('This motion is already permitted.')
if not self.is_supporter(person):
MotionSupporter(motion=self, person=person).save()
self.writelog(_("Supporter: +%s") % (person))
@@ -272,9 +269,6 @@ class Motion(models.Model, SlideMixin):
"""
remove a supporter from the list of supporters of the motion
"""
- if self.permitted is not None:
- # TODO: Use own Exception
- raise NameError('This motion is already permitted.')
try:
object = self.motionsupporter_set.get(person=person).delete()
except MotionSupporter.DoesNotExist:
diff --git a/openslides/motion/urls.py b/openslides/motion/urls.py
index 55543d615..6c7956c60 100644
--- a/openslides/motion/urls.py
+++ b/openslides/motion/urls.py
@@ -13,7 +13,7 @@
from django.conf.urls.defaults import url, patterns
from openslides.motion.views import (MotionDelete, ViewPoll,
- MotionPDF, MotionPollPDF, CreateAgendaItem)
+ MotionPDF, MotionPollPDF, CreateAgendaItem, SupportView)
urlpatterns = patterns('openslides.motion.views',
url(r'^$',
@@ -99,12 +99,12 @@ urlpatterns = patterns('openslides.motion.views',
),
url(r'^(?P\d+)/support/$',
- 'support',
+ SupportView.as_view(unsupport=False, answer_url='support/'),
name='motion_support',
),
url(r'^(?P\d+)/unsupport/$',
- 'unsupport',
+ SupportView.as_view(unsupport=True, answer_url='unsupport/'),
name='motion_unsupport',
),
diff --git a/openslides/motion/views.py b/openslides/motion/views.py
index 1b4166870..0ef1f140f 100644
--- a/openslides/motion/views.py
+++ b/openslides/motion/views.py
@@ -381,14 +381,32 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
return _('Do you really want to unsupport this motion?')
def pre_post_redirect(self, request, *args, **kwargs):
- if self.get_answer().lower() == 'yes':
- if not self.unsupport:
- self.get_object().support(person=request.user)
- self.success_message = _("You have supported this motion successfully.")
+ motion = self.get_object()
+ allowed_actions = motion.get_allowed_actions(request.user)
+ if not self.get_answer().lower() == 'yes':
+ return
+ if not self.unsupport:
+ if 'support' in allowed_actions:
+ motion.support(person=request.user)
+ messages.success(
+ request,
+ _("You have supported this motion successfully."))
+
else:
+ messages.error(
+ request,
+ _('You can not support this motion.'))
+ else:
+ if 'unsupport' in allowed_actions:
self.get_object().unsupport(person=request.user)
- self.success_message = _("You have unsupported this motion successfully.")
- messages.success(request, self.success_message)
+ messages.success(
+ request,
+ _("You have unsupported this motion successfully."))
+ else:
+ messages.error(
+ request,
+ _('You can not support this motion.'))
+
def get_redirect_url(self, **kwargs):
return reverse('motion_view', args=[kwargs[self.pk_url_kwarg]])
From 1002ecc6e60d77968e7b2d060a6969e0b3057191 Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Thu, 25 Oct 2012 10:25:59 +0200
Subject: [PATCH 16/22] Remove redundant keyword for the SupportView class
---
openslides/motion/urls.py | 4 ++--
openslides/motion/views.py | 18 ++++++++++++------
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/openslides/motion/urls.py b/openslides/motion/urls.py
index 6c7956c60..177a5b04f 100644
--- a/openslides/motion/urls.py
+++ b/openslides/motion/urls.py
@@ -99,12 +99,12 @@ urlpatterns = patterns('openslides.motion.views',
),
url(r'^(?P\d+)/support/$',
- SupportView.as_view(unsupport=False, answer_url='support/'),
+ SupportView.as_view(support=True),
name='motion_support',
),
url(r'^(?P\d+)/unsupport/$',
- SupportView.as_view(unsupport=True, answer_url='unsupport/'),
+ SupportView.as_view(support=False),
name='motion_unsupport',
),
diff --git a/openslides/motion/views.py b/openslides/motion/views.py
index 0ef1f140f..c6d902602 100644
--- a/openslides/motion/views.py
+++ b/openslides/motion/views.py
@@ -371,11 +371,10 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
permission_required = 'motion.can_support_motion'
model = Motion
pk_url_kwarg = 'motion_id'
- unsupport = False # Must be given in SupportView.as_view()
- answer_url = None # Must be given in SupportView.as_view()
+ support = True
def get_question(self):
- if not self.unsupport:
+ if self.support:
return _('Do you really want to support this motion?')
else:
return _('Do you really want to unsupport this motion?')
@@ -385,7 +384,7 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
allowed_actions = motion.get_allowed_actions(request.user)
if not self.get_answer().lower() == 'yes':
return
- if not self.unsupport:
+ if self.support:
if 'support' in allowed_actions:
motion.support(person=request.user)
messages.success(
@@ -405,12 +404,19 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
else:
messages.error(
request,
- _('You can not support this motion.'))
-
+ _('You can not unsupport this motion.'))
def get_redirect_url(self, **kwargs):
return reverse('motion_view', args=[kwargs[self.pk_url_kwarg]])
+ def get_answer_url(self):
+ if self.support:
+ answer_url = 'motion_support'
+ else:
+ answer_url = 'motion_unsupport'
+ return reverse(answer_url, args=[self.kwargs[self.pk_url_kwarg]])
+
+
@permission_required('motion.can_manage_motion')
@template('motion/view.html')
def gen_poll(request, motion_id):
From c4e64669264c981efde3118457faa277196eff62 Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Thu, 25 Oct 2012 15:17:25 +0200
Subject: [PATCH 17/22] Added cache for the ajax-version of the projector
---
openslides/openslides_global_settings.py | 7 +++++++
openslides/projector/api.py | 3 +++
openslides/projector/views.py | 18 ++++++++++++++----
3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/openslides/openslides_global_settings.py b/openslides/openslides_global_settings.py
index 5d3348e9c..6b0417b0d 100644
--- a/openslides/openslides_global_settings.py
+++ b/openslides/openslides_global_settings.py
@@ -134,3 +134,10 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'openslides.utils.utils.revision',
'openslides.utils.auth.anonymous_context_additions',
)
+
+CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+ 'LOCATION': 'openslidecache'
+ }
+}
diff --git a/openslides/projector/api.py b/openslides/projector/api.py
index 56fe4e0d4..de0cf03b8 100644
--- a/openslides/projector/api.py
+++ b/openslides/projector/api.py
@@ -11,6 +11,7 @@
"""
from django.conf import settings
+from django.core.cache import cache
from django.template.loader import render_to_string
from django.utils.datastructures import SortedDict
from django.utils.importlib import import_module
@@ -85,6 +86,8 @@ def set_active_slide(sid, argument=None):
"""
config["presentation"] = sid
config['presentation_argument'] = argument
+ cache.delete('projector_content')
+ cache.delete('projector_scrollcontent')
def register_slidemodel(model, model_name=None, control_template=None,
diff --git a/openslides/projector/views.py b/openslides/projector/views.py
index 6a71ad637..54fa7a866 100644
--- a/openslides/projector/views.py
+++ b/openslides/projector/views.py
@@ -15,6 +15,7 @@ from time import time
from django.conf import settings
from django.contrib import messages
+from django.core.cache import cache
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
from django.db import transaction
@@ -107,10 +108,19 @@ class Projector(TemplateView, AjaxMixin):
return context
def get_ajax_context(self, **kwargs):
- content = render_block_to_string(self.get_template_names()[0],
- 'content', self.data)
- scrollcontent = render_block_to_string(self.get_template_names()[0],
- 'scrollcontent', self.data)
+ content = cache.get('projector_content')
+ if not content:
+ content = render_block_to_string(
+ self.get_template_names()[0],
+ 'content', self.data)
+ cache.set('projector_content', content)
+
+ scrollcontent = cache.get('projector_scrollcontent')
+ if not scrollcontent:
+ scrollcontent = render_block_to_string(
+ self.get_template_names()[0],
+ 'scrollcontent', self.data)
+ cache.set('projector_scrollcontent', scrollcontent)
context = super(Projector, self).get_ajax_context(**kwargs)
content_hash = hash(content)
From 9d3d0951629a04c2374348127af12ba4d23e3a95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Norman=20J=C3=A4ckel?=
Date: Sun, 28 Oct 2012 02:09:47 +0200
Subject: [PATCH 18/22] Clean up SupportView. Raise error message at GET
request instead of POST.
---
openslides/motion/views.py | 40 ++++++++++++++++----------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/openslides/motion/views.py b/openslides/motion/views.py
index c6d902602..5a675dd22 100644
--- a/openslides/motion/views.py
+++ b/openslides/motion/views.py
@@ -366,7 +366,8 @@ def reset(request, motion_id):
class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
"""
- Support or unsupport an motion.
+ Classed based view to support or unsupport a motion. Use
+ support=True or support=False in urls.py
"""
permission_required = 'motion.can_support_motion'
model = Motion
@@ -379,32 +380,25 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
else:
return _('Do you really want to unsupport this motion?')
+ def pre_redirect(self, request, *args, **kwargs):
+ allowed_actions = self.get_object().get_allowed_actions(request.user)
+ if self.support and not 'support' in allowed_actions:
+ messages.error(request, _('You can not support this motion.'))
+ elif not self.support and not 'unsupport' in allowed_actions:
+ messages.error(request, _('You can not unsupport this motion.'))
+ else:
+ super(SupportView, self).pre_redirect(request, *args, **kwargs)
+
def pre_post_redirect(self, request, *args, **kwargs):
motion = self.get_object()
- allowed_actions = motion.get_allowed_actions(request.user)
- if not self.get_answer().lower() == 'yes':
- return
- if self.support:
- if 'support' in allowed_actions:
+ if self.get_answer().lower() == 'yes':
+ if self.support:
motion.support(person=request.user)
- messages.success(
- request,
- _("You have supported this motion successfully."))
-
+ self.success_message = _("You have supported this motion successfully.")
else:
- messages.error(
- request,
- _('You can not support this motion.'))
- else:
- if 'unsupport' in allowed_actions:
- self.get_object().unsupport(person=request.user)
- messages.success(
- request,
- _("You have unsupported this motion successfully."))
- else:
- messages.error(
- request,
- _('You can not unsupport this motion.'))
+ motion.unsupport(person=request.user)
+ self.success_message = _("You have unsupported this motion successfully.")
+ messages.success(request, self.success_message)
def get_redirect_url(self, **kwargs):
return reverse('motion_view', args=[kwargs[self.pk_url_kwarg]])
From 21c12a6d32d31decaebae1f7fda067055005dba6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Norman=20J=C3=A4ckel?=
Date: Sun, 28 Oct 2012 17:44:15 +0100
Subject: [PATCH 19/22] Fix POST request in SupportView
---
openslides/motion/views.py | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/openslides/motion/views.py b/openslides/motion/views.py
index 5a675dd22..66a7f3100 100644
--- a/openslides/motion/views.py
+++ b/openslides/motion/views.py
@@ -380,18 +380,28 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
else:
return _('Do you really want to unsupport this motion?')
- def pre_redirect(self, request, *args, **kwargs):
+ def check_allowed_actions(self, request):
+ """
+ Checks whether request.user can support or unsupport the motion.
+ Returns True or False.
+ """
allowed_actions = self.get_object().get_allowed_actions(request.user)
if self.support and not 'support' in allowed_actions:
messages.error(request, _('You can not support this motion.'))
+ return False
elif not self.support and not 'unsupport' in allowed_actions:
messages.error(request, _('You can not unsupport this motion.'))
+ return False
else:
+ return True
+
+ def pre_redirect(self, request, *args, **kwargs):
+ if self.check_allowed_actions(request):
super(SupportView, self).pre_redirect(request, *args, **kwargs)
def pre_post_redirect(self, request, *args, **kwargs):
motion = self.get_object()
- if self.get_answer().lower() == 'yes':
+ if self.get_answer().lower() == 'yes' and self.check_allowed_actions(request):
if self.support:
motion.support(person=request.user)
self.success_message = _("You have supported this motion successfully.")
From 79c5e9342256b1a9a0837d9e6aadad8611763807 Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Sun, 28 Oct 2012 19:59:41 +0100
Subject: [PATCH 20/22] Redesigned the QuestioMixin
---
openslides/agenda/views.py | 4 +-
openslides/motion/views.py | 41 ++++++++++-----------
openslides/participant/views.py | 16 +++-----
openslides/utils/views.py | 65 ++++++++++++++++++---------------
4 files changed, 63 insertions(+), 63 deletions(-)
diff --git a/openslides/agenda/views.py b/openslides/agenda/views.py
index deb3e69a6..57629e1e4 100644
--- a/openslides/agenda/views.py
+++ b/openslides/agenda/views.py
@@ -177,12 +177,12 @@ class ItemDelete(DeleteView):
if self.get_answer() == 'all':
self.object.delete(with_children=True)
messages.success(request,
- _("Item %s and his children were successfully deleted.") \
+ _("Item %s and his children were successfully deleted.")
% html_strong(self.object))
elif self.get_answer() == 'yes':
self.object.delete(with_children=False)
messages.success(request,
- _("Item %s was successfully deleted.") \
+ _("Item %s was successfully deleted.")
% html_strong(self.object))
diff --git a/openslides/motion/views.py b/openslides/motion/views.py
index 66a7f3100..78873ba92 100644
--- a/openslides/motion/views.py
+++ b/openslides/motion/views.py
@@ -374,18 +374,16 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
pk_url_kwarg = 'motion_id'
support = True
- def get_question(self):
- if self.support:
- return _('Do you really want to support this motion?')
- else:
- return _('Do you really want to unsupport this motion?')
+ def get(self, request, *args, **kwargs):
+ self.object = self.get_object()
+ return super(SupportView, self).get(request, *args, **kwargs)
def check_allowed_actions(self, request):
"""
Checks whether request.user can support or unsupport the motion.
Returns True or False.
"""
- allowed_actions = self.get_object().get_allowed_actions(request.user)
+ allowed_actions = self.object.get_allowed_actions(request.user)
if self.support and not 'support' in allowed_actions:
messages.error(request, _('You can not support this motion.'))
return False
@@ -399,27 +397,28 @@ class SupportView(SingleObjectMixin, QuestionMixin, RedirectView):
if self.check_allowed_actions(request):
super(SupportView, self).pre_redirect(request, *args, **kwargs)
- def pre_post_redirect(self, request, *args, **kwargs):
- motion = self.get_object()
- if self.get_answer().lower() == 'yes' and self.check_allowed_actions(request):
+ def get_question(self):
+ if self.support:
+ return _('Do you really want to support this motion?')
+ else:
+ return _('Do you really want to unsupport this motion?')
+
+ def case_yes(self):
+ if self.check_allowed_actions(self.request):
if self.support:
- motion.support(person=request.user)
- self.success_message = _("You have supported this motion successfully.")
+ self.object.support(person=self.request.user)
else:
- motion.unsupport(person=request.user)
- self.success_message = _("You have unsupported this motion successfully.")
- messages.success(request, self.success_message)
+ self.object.unsupport(person=self.request.user)
+
+ def get_success_message(self):
+ if self.support:
+ return _("You have supported this motion successfully.")
+ else:
+ return _("You have unsupported this motion successfully.")
def get_redirect_url(self, **kwargs):
return reverse('motion_view', args=[kwargs[self.pk_url_kwarg]])
- def get_answer_url(self):
- if self.support:
- answer_url = 'motion_support'
- else:
- answer_url = 'motion_unsupport'
- return reverse(answer_url, args=[self.kwargs[self.pk_url_kwarg]])
-
@permission_required('motion.can_manage_motion')
@template('motion/view.html')
diff --git a/openslides/participant/views.py b/openslides/participant/views.py
index 8c49d6eee..00599c327 100644
--- a/openslides/participant/views.py
+++ b/openslides/participant/views.py
@@ -320,7 +320,7 @@ class UserImportView(FormView):
return super(UserImportView, self).form_valid(form)
-class ResetPasswordView(RedirectView, SingleObjectMixin, QuestionMixin):
+class ResetPasswordView(SingleObjectMixin, QuestionMixin, RedirectView):
"""
Set the Passwort for a user to his default password.
"""
@@ -336,17 +336,11 @@ class ResetPasswordView(RedirectView, SingleObjectMixin, QuestionMixin):
def get_redirect_url(self, **kwargs):
return reverse('user_edit', args=[self.object.id])
- def pre_redirect(self, request, *args, **kwargs):
- self.confirm_form()
+ def case_yes(self):
+ self.object.reset_password()
- def pre_post_redirect(self, request, *args, **kwargs):
- if self.get_answer().lower() == 'yes':
- self.object.reset_password()
- messages.success(request,
- _('The Password for %s was successfully reset.') % html_strong(self.object))
-
- def get_answer_url(self):
- return reverse('user_reset_password', args=[self.object.id])
+ def get_success_message(self):
+ return _('The Password for %s was successfully reset.') % html_strong(self.object)
class GroupOverviewView(ListView):
diff --git a/openslides/utils/views.py b/openslides/utils/views.py
index 3ecfb64de..d3fd10d07 100644
--- a/openslides/utils/views.py
+++ b/openslides/utils/views.py
@@ -110,20 +110,21 @@ class QuestionMixin(object):
success_message = ugettext_lazy('Thank you for your answer')
answer_options = [('yes', ugettext_lazy("Yes")), ('no', ugettext_lazy("No"))]
- def get_answer_options(self):
- return self.answer_options
+ def pre_redirect(self, request, *args, **kwargs):
+ # Prints the question in a GET request
+ self.confirm_form()
def get_question(self):
return unicode(self.question)
- def get_answer(self):
- for option in self.get_answer_options():
- if option[0] in self.request.POST:
- return option[0]
- return None
+ def get_answer_options(self):
+ return self.answer_options
def get_answer_url(self):
- return self.answer_url
+ try:
+ return self.answer_url
+ except AttributeError:
+ return self.request.path
def confirm_form(self):
option_fields = "\n".join([
@@ -142,11 +143,25 @@ class QuestionMixin(object):
'csrf': csrf(self.request)['csrf_token'],
'option_fields': option_fields})
- def pre_redirect(self, request, *args, **kwargs):
- self.confirm_form()
-
def pre_post_redirect(self, request, *args, **kwargs):
- messages.success(request)
+ # Reacts on the response of the user in a POST-request.
+ # TODO: call the methodes for all possible answers.
+ if self.get_answer() == 'yes':
+ self.case_yes()
+ messages.success(request, self.get_success_message())
+
+ def get_answer(self):
+ for option in self.get_answer_options():
+ if option[0] in self.request.POST:
+ return option[0]
+ return None
+
+ def case_yes(self):
+ # TODO: raise a warning
+ pass
+
+ def get_success_message(self):
+ return self.success_message
class TemplateView(PermissionMixin, _TemplateView):
@@ -266,27 +281,19 @@ class CreateView(PermissionMixin, _CreateView):
pass
-class DeleteView(RedirectView, SingleObjectMixin, QuestionMixin):
- def get_question(self):
- return _('Do you really want to delete %s?') % html_strong(self.object)
-
- def get_success_message(self):
- return _('%s was successfully deleted.') % html_strong(self.object)
-
- def pre_redirect(self, request, *args, **kwargs):
- self.confirm_form()
-
- def pre_post_redirect(self, request, *args, **kwargs):
- if self.get_answer().lower() == 'yes':
- self.object.delete()
- messages.success(request, self.get_success_message())
-
+class DeleteView(SingleObjectMixin, QuestionMixin, RedirectView):
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super(DeleteView, self).get(request, *args, **kwargs)
- def get_answer_url(self):
- return self.object.get_absolute_url('delete')
+ def get_question(self):
+ return _('Do you really want to delete %s?') % html_strong(self.object)
+
+ def case_yes(self):
+ self.object.delete()
+
+ def get_success_message(self):
+ return _('%s was successfully deleted.') % html_strong(self.object)
class DetailView(TemplateView, SingleObjectMixin):
From f4e1f83f15e77ec961421944a2186cf3348f235d Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Mon, 29 Oct 2012 16:27:15 +0100
Subject: [PATCH 21/22] rename test_name_surfix in test_name_suffix in
participant/tests.py
---
openslides/participant/tests.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openslides/participant/tests.py b/openslides/participant/tests.py
index 43db62492..0ee4c6cb4 100644
--- a/openslides/participant/tests.py
+++ b/openslides/participant/tests.py
@@ -37,7 +37,7 @@ class UserTest(TestCase):
def test_repr(self):
self.assertEqual(unicode(self.user1), 'Max Mustermann')
- def test_name_surfix(self):
+ def test_name_suffix(self):
self.user1.detail = 'München'
self.user1.save()
self.assertEqual(unicode(self.user1), 'Max Mustermann (München)')
From 9dc799ef5eddfb9d02b6bca34932f7738b8ddbdd Mon Sep 17 00:00:00 2001
From: Oskar Hahn
Date: Mon, 29 Oct 2012 23:26:10 +0100
Subject: [PATCH 22/22] fixed projector_cache. It still does not work, but it
does show changes on slides now
---
openslides/projector/api.py | 5 +++++
openslides/projector/projector.py | 6 ++++++
openslides/projector/views.py | 11 +++++++++--
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/openslides/projector/api.py b/openslides/projector/api.py
index de0cf03b8..6bcc04772 100644
--- a/openslides/projector/api.py
+++ b/openslides/projector/api.py
@@ -86,8 +86,13 @@ def set_active_slide(sid, argument=None):
"""
config["presentation"] = sid
config['presentation_argument'] = argument
+ clear_projector_cache()
+
+
+def clear_projector_cache():
cache.delete('projector_content')
cache.delete('projector_scrollcontent')
+ cache.delete('projector_data')
def register_slidemodel(model, model_name=None, control_template=None,
diff --git a/openslides/projector/projector.py b/openslides/projector/projector.py
index 5ebd81ab3..9247a010b 100644
--- a/openslides/projector/projector.py
+++ b/openslides/projector/projector.py
@@ -58,6 +58,12 @@ class SlideMixin(object):
"""
set_active_slide(self.sid)
+ def save(self, *args, **kwargs):
+ if self.active:
+ from api import clear_projector_cache
+ clear_projector_cache()
+ return super(SlideMixin, self).save(*args, **kwargs)
+
class Slide(object):
"""
diff --git a/openslides/projector/views.py b/openslides/projector/views.py
index 54fa7a866..10c22f1ea 100644
--- a/openslides/projector/views.py
+++ b/openslides/projector/views.py
@@ -122,14 +122,21 @@ class Projector(TemplateView, AjaxMixin):
'scrollcontent', self.data)
cache.set('projector_scrollcontent', scrollcontent)
+
+ # TODO: do not call the hole data-methode, if we only need some vars
+ data = cache.get('projector_data')
+ if not data:
+ data = self.data
+ cache.set('projector_data', data)
+
context = super(Projector, self).get_ajax_context(**kwargs)
content_hash = hash(content)
context.update({
'content': content,
'scrollcontent': scrollcontent,
'time': datetime.now().strftime('%H:%M'),
- 'overlays': self.data['overlays'],
- 'title': self.data['title'],
+ 'overlays': data['overlays'],
+ 'title': data['title'],
'bigger': config['bigger'],
'up': config['up'],
'content_hash': content_hash,