From 080b3a79f51be2c97e780bdf02793ff2e8dd3515 Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 7 Mar 2011 12:30:41 +0000 Subject: [PATCH] - work items: provide move action for assigning a work item to another task - show work items (if present) for arbitrary concepts git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4196 fd906abe-77d9-0310-91a1-e0d9ade77398 --- CHANGES.txt | 3 +++ browser/concept.py | 5 +++++ browser/concept_macros.pt | 3 +++ browser/loops.js | 7 +++++++ locales/de/LC_MESSAGES/loops.mo | Bin 14362 -> 14539 bytes locales/de/LC_MESSAGES/loops.po | 14 +++++++++++++- organize/browser/view_macros.pt | 3 --- organize/work/README.txt | 2 +- organize/work/browser.py | 17 +++++++++++++++-- organize/work/work_macros.pt | 17 ++++++++++++++--- version.py | 2 +- 11 files changed, 62 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e84ca84..7b037f4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,9 @@ $Id$ 1.1 --- +- work items: provide "move" action for assigning a work item to + another task +- show work items (if present) for arbitrary concepts - portal page with - now fully editable - portal links - calendar portlet diff --git a/browser/concept.py b/browser/concept.py index 3f327ba..1b933f1 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -452,6 +452,11 @@ class ConceptView(BaseView): return False return super(ConceptView, self).checkAction(name, category, target) + @Lazy + def workItems(self): + return component.getMultiAdapter((self.context, self.request), + name='taskworkitems.html') + class ConceptRelationView(ConceptView, BaseRelationView): diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt index 23e5db4..aec459f 100644 --- a/browser/concept_macros.pt +++ b/browser/concept_macros.pt @@ -13,6 +13,9 @@ + + + diff --git a/browser/loops.js b/browser/loops.js index 6070e92..7221b16 100644 --- a/browser/loops.js +++ b/browser/loops.js @@ -34,6 +34,13 @@ function showIf(node, value, targetName) { dojo.byId(targetName).style.display = display; } +function showIfIn(node, conditions) { + dojo.forEach(conditions, function(cond) { + var display = (node.value == cond[0]) ? 'inline' : 'none'; + dojo.byId(cond[1]).style.display = display; + }) +} + function destroyWidgets(node) { dojo.forEach(dojo.query('[widgetId]', node), function(n) { w = dijit.byNode(n); diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 6800bf39ee8e47c95adf232cfda6c3dedf39a853..91529e9fdb91d6ab5843621b4a6cc479d18bc5d7 100644 GIT binary patch delta 5889 zcmY+|3!IKs0>|-ZH130PmrE`)G|j~fqj5<}aw+7}irvuAR1!lp%EK4 zOIy0G6s1VDn_+h)B@>o5+bX)Kq?X#>?|shfZqH}`@AsVZp65L0oacGo(Jq~~b$Vi7 z!_*}aN1c=?YK7O;ilVD2Z#dP~C>q@~iiY7B%)%$I2EG^Ei#4f#gs0$PtczdZ8F&I6 zs#UWns*O3AhJ{G~MAVOhCkzZ*XXHGeevHoa{Z_e1-}@OY+$w6i27)3h}VVh6X*oyqbs@_UCD~@{j=!A z)}#G4;b~Zb_TPh!djy$Fl+uFlxqj4wf-}xSJNClHI2i3%gziXL_(To}F|)RO&o#v^F(87M-xa0+_j%+RqccndnQ1?b9F zqW#u}`b+3|73f5FqdV~_y0gd8^J?>?+pk3{_TQDCNrOAl3tic8^n_w`=B1&26MEue zbjz2A_NUPcZ4B+(unzUgP(O%lQuGx%f%*4zfbmBX)4JJOM(2hb1HSb{ubik}&9(uuU=mq

7J9#qH)3~ors5v@L0ouPe+OHob&Z01qf^Wf%=Ps~+5a30!)fS*33SGf zp)-CRJ#ia4fnDei)L!(S9}Vrtf+x^ts9J~k9yi5m)H|TJpd&h=Ty%%Kc3}T~7zTxo zqe6!<=n3P3SD_c4icV-QI>CkLfcK#nT87@LhtUf>j`rV(*;s)*KGC=6t!S1=j|Xal zr_j&|{UQq;s0+ICb3%Jx>`i?TI>CA9L>8f2dp~;K6PSw6qvNed`)xuev;`eEu`?7Z z(T@Akfj`Dn{2bk(uhA1yGUAEWMBD44{hFiawMH+L5zGzkh3LcG2kk!ui&MD&BPjHv zVO>Xle(@waaF0&$g!-cc4nZHjQRvoAK%br2=-wVa?O?2hmxuP^Ubp4Csc|)1Gl36 z=c5x`jA{5Nx`WSP9egpH{rAMpG&taP^uq6d611I(#_sL{AEC;Slt~mttLLMPgwYrK%A==quG>z9u{JC}s-i$i@jCfw?U6nq`-M^9XVwy#D9UW;CE z1G=)e&|9+$9e6)_{xP&)NR>q+JkQs~Kx-xV}Z%6x;hxTO&3huy@*chKj zcVG*8!mjZB0rWzL&;bsk6Z!^yn4&`dGYjgW_q-q4ZvxtHGJ0!D(Q$7H^~9YN9N>QR z!Yi>au0bbu3?1MHbON=z#{;CH?M=~s?Sh%;4&?KJl19X1weSC*DBMkc zOSTdR@pv`nzn^aB59C9VN$w@TBM*{o}QRma7lP=x-g={(Y#ROj5kVG8;H{)#ju9ybvGrR8yROq6iz z`TdA)3JrsU@*CpT?jd zKM>iW(fj=rSw*fRkCX4nBvN(!oWlI7%Ktf#@#KRw)8f^EM_zTjOc=RQk$qFkRBgvp-iMI{U zAk(;hbPMT7GDs8hlY@c3q2Vu~@p}9>xhT|SMkxP??L&D#o=%=4`Q+Ec;{kFcS>jJL zCd&Bu0~tjYlb?}!?Zl5XU3vVl}%h7<5kQcgVHA|sNepMK1yI+3&?)yQqcBaQquS&E`Za3*O- z4wIGSpRT_;@mNCcBcGE3vV(j=W|4o9%gFP@<7`qwZY6WcQj*GqufQA0+vIG2ud+Ii=4uQ{%k`yZpXVw z4e~O1A-P#=jx@Qre(muyOU6$tx_)L^dFS;0&8C!;7Ds;AJhN!Vg6vNj{gtts5t=u delta 5720 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\n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -676,6 +676,12 @@ msgstr "Informationen über diese Aktivität." msgid "Edit work item." msgstr "Aktivität bearbeiten." +msgid "delegate_to_party" +msgstr "an" + +msgid "move_to_task" +msgstr "nach" + msgid "new" msgstr "neu" @@ -703,6 +709,9 @@ msgstr "abgeschlossen" msgid "cancelled" msgstr "abgebrochen" +msgid "moved" +msgstr "verschoben" + msgid "replaced" msgstr "ersetzt" @@ -727,6 +736,9 @@ msgstr "abbrechen" msgid "delegate" msgstr "delegieren" +msgid "move" +msgstr "verschieben" + msgid "close" msgstr "abschließen" diff --git a/organize/browser/view_macros.pt b/organize/browser/view_macros.pt index 1345d05..51f5434 100644 --- a/organize/browser/view_macros.pt +++ b/organize/browser/view_macros.pt @@ -3,9 +3,6 @@ - - - diff --git a/organize/work/README.txt b/organize/work/README.txt index 2189e25..ea70153 100644 --- a/organize/work/README.txt +++ b/organize/work/README.txt @@ -142,7 +142,7 @@ only available for privileged users. >>> form.actions [{'name': 'plan', 'title': 'plan'}, {'name': 'accept', 'title': 'accept'}, {'name': 'start', 'title': 'start working'}, {'name': 'work', 'title': 'work'}, - {'name': 'finish', 'title': 'finish'}, + {'name': 'finish', 'title': 'finish'}, {'name': 'move', 'title': 'move'}, {'name': 'cancel', 'title': 'cancel'}, {'name': 'modify', 'title': 'modify'}] diff --git a/organize/work/browser.py b/organize/work/browser.py index 796a79e..ee9affe 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2009 Helmut Merz helmutm@cy55.de +# Copyright (c) 2011 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -217,7 +217,7 @@ class BaseWorkItemsView(object): state = form.get('wi_state') or self.options.wi_state if not state: result['state'] = ['planned', 'accepted', 'running', 'done', 'done_x', - 'finished', 'delegated', + 'finished', 'delegated', 'moved', 'cancelled'] elif state != 'all': result['state'] = state @@ -348,6 +348,17 @@ class CreateWorkItemForm(ObjectForm, BaseTrackView): return [dict(name=util.getUidForObject(p), title=p.title) for p in persons] + @Lazy + def tasks(self): + tasks = [] + tnames = ['task', 'event'] + ttypes = [self.conceptManager.get(tname) for tname in tnames] + for ttype in ttypes: + if ttype is not None: + tasks.extend(ttype.getChildren([self.typePredicate])) + return [dict(name=util.getUidForObject(t), title=t.title) + for t in tasks] + @Lazy def duration(self): if self.state == 'running': @@ -411,6 +422,8 @@ class CreateWorkItem(EditObject, BaseTrackView): setValue(k) if action == 'delegate': setValue('party') + if action == 'move': + setValue('task') startDate = form.get('start_date', '').strip() startTime = form.get('start_time', '').strip().replace('T', '') or '00:00:00' endTime = form.get('end_time', '').strip().replace('T', '') or '00:00:00' diff --git a/organize/work/work_macros.pt b/organize/work/work_macros.pt index 7da50ed..2bb6f63 100644 --- a/organize/work/work_macros.pt +++ b/organize/work/work_macros.pt @@ -90,14 +90,16 @@

- +
diff --git a/version.py b/version.py index c201bea..ce66773 100644 --- a/version.py +++ b/version.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# Copyright (c) 2011 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by