From 142e1cb20b0f543c512ff2047f1617d914139a0f Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 17 Jul 2012 08:42:36 +0200 Subject: [PATCH 1/4] provide separate interfaces and type concepts for events and agenda items, e.g. for improving meeting minutes --- locales/de/LC_MESSAGES/loops.mo | Bin 17811 -> 17851 bytes locales/de/LC_MESSAGES/loops.po | 5 ++++- organize/browser/event.py | 1 - organize/configure.zcml | 20 ++++++++++++++++++++ organize/interfaces.py | 22 ++++++++++++++++++---- organize/task.py | 32 +++++++++++++++++++++++++------- organize/tests.py | 5 ++++- organize/work/README.txt | 24 +++++++++++++++--------- organize/work/report.py | 1 + 9 files changed, 87 insertions(+), 23 deletions(-) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index c90233031aa981a76556703f28f70f418b92d917..2a03d4ac049211996b729548cdc73bc3faba5bce 100644 GIT binary patch delta 6260 zcmZA5dz?>Y9>DQ4m~kDKF=J*7X3St{+^;ia(NL=*TSM#}BBe~V5=ECON!S#r&{9g5{e0#;f9-koo%i!R=Q+>)oEatOrEHp)lGv9~ zYjMO?mJ&rR@YA|cw2Jf-O)ZV0(&kY#0?V)j=VBUe3~t8Sy*{GaQBKcq7`tAJGBK!8$lU(N8{JX-(7f}u+L7)3uf`m)F27TaZbjFqFN>rgs_Z9kJ3L9>N8R$~B zL1$Km-Y-YnxfE^p>QH_YI)K@sd?D5&pI9CW9!2+XBRaBO=t>+wm+UaQ5?`VnokHuS z6~%8&Gjs)8paW`;*6)t4OutY*5Nnb@A89`k4JY9YM`BN$7~hBpR-&SV{O&Z5o8 zVnlno+qk?1T3&(;=szka;e#X4Lv|%P!s+OMW}-_w z8*AYLw0<(=A4bp2Bj}1ehwk;u$bZpJemIen=>61ovFVtwVit*1EJT;8J$A)zn1&P3 z!#EME4-NA5jOL>CA3;}S9ooT5A^$qsZWW$~AEPVNwm5#SXEE#VO!`w`2N$3N8Xqd$ zi04RoNNq4kfU^}a1;{m&wi+CE;wuIPJR zj%-^r7Tv4a$m&H)(E)5hXZ9-E@pg1&szUie>_Gl-$Y+qLK|Ti^KpuJ~3KJx3us7OJ zKeXZV&<2O0hwpNh z{(ncp2i#aYs*N_(2peD~`e18x25F2VxxE72v}iZ-wZ{Xl&a${X~E2VR8UFU5Qufwngl zGjKNg++uX1>q2>=G9;?dk$-_M>1lM2>h_F(-R7esAB1gi4EiV9EcCTh@(r8_7c%l5{`Tx_Qh4$6!)Q9@C~|@XV96Y^^V_$cIXy#LZwdKb=wD2S&;iyii&vr*Cj20@BcUb8s~L4g56xBR5>G=rz72gl z7NSeJ3|+BR=xg;D`n#Y4eQqQAI&Vh5q&v{(>a)*oQPaMxzcXt=K_Ql4TO1xL+=4cA z2RgvJgMUH?vH;!lrRV@2L>qoIxB(sD^Ju*-=!#XM6WrUE^>>8FC~ygXL6c+TAUpZs3<|g(^-sm&=cLe zbJ3BHLicVgx^&ie0QX`EEKhHm9n?1mpDd_TMxufPuYBs$Y7w4sCO0FI(FI)ScG(K&H>ceH*fdbY~Z`y;Ui zUV{l6x{ide$5hP2ThOzx2;Hj{XuY+eyaJu+R`k2D9bKvYX#KCl{nJ>3d{iDkUlT7P z+W@&0jVWjSoxwvCII`8~d;SzU^5@XgTp8}~!rtWfqlYbfaNKY&wEnNqGcXh#$jFc% zhqf~b9q0^n0CNVj{?23@1van?9r0eYfltr}kA(Z*qV-dT#MZ@{3~&{%Y@#-oRD8rr~Z=!3IEegQhbC1^)0(00~i3cg5uM_8u~ z1$UuW7U?Ik2wM@Yuc$7Le{`k5>mK6U>J;yO@<`LX{<++_oszqWVZ@EZcH#^%o|sQ~ z9gL~|xsaa&iKfXxnb|3wlcO_x4BbQi6ybG}_>gEv+wHLv@eOgB@M=Q&bJ&q+N%|^W zNgO8HC*RBL((-*$bBG$;U4#1x|FB(z?<8Ai6}S9=R0m4@mTw}wx|6>N|DC)xtElBG zq}ma6DD~=ri{oUpE4ezWsQa7bJe*#Qx!argI?hH<1fRy@(83E*@`tR#{vFBoB>W$% zzEryje!E0J5`2216NE31=Xna@l|kKE*eyA_S$2n_XP@ zBT`kw*5uIayeT_K`HQ0q;kAu;hG@j|t8p5!fJg~_?j-H?Eb$ZZl^L$T#8iKRJ5l#e z@{fkH>#>0NBDpI&Kjp3DiR`BR`-JvJQGSeQYfv@=y}l%#Ct8Gh$4UQ&@On8pD5q)P z`rK(i)S{$<$S3_UUP}B-6p;5iMDTs6{;e_5f|TTfoWk6fNYxBgEbU5^5;@6jIe9}q zwutKj;t$m+zOT5KXi2lL{H+ZWQW|mM3>OVr<6QEcr~Q#LfluK z;{cJ*Cen!&l;z>Q;ocbhEwPq3N+gLRgxA|K)jxmWXD_0JXZ?iqsV?Q@T}h%J@h;Jv zo2&43!fOkWMwwTyC~-H#lJe0G^*Hr I_RDqt2jEnEMgRZ+ delta 6238 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 diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 76f2957..cae5306 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: $Id$\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2012-06-10 12:00 CET\n" +"PO-Revision-Date: 2012-07-17 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -296,6 +296,9 @@ msgstr "Besprechungsprotokoll für dieses Objekt anzeigen." msgid "Download Meeting Minutes" msgstr "Besprechungsprotokoll generieren" +msgid "Participants" +msgstr "Teilnehmer" + msgid "Task/Action" msgstr "Aufgabe" diff --git a/organize/browser/event.py b/organize/browser/event.py index 560abad..d42abfb 100644 --- a/organize/browser/event.py +++ b/organize/browser/event.py @@ -316,7 +316,6 @@ class CreateFollowUpEvent(CreateConcept, BaseFollowUpController): result = super(CreateFollowUpEvent, self).update() form = self.request.form toBeAssigned = form.get('cb_select_tasks') or [] - print '***', toBeAssigned for uid in toBeAssigned: task = util.getObjectForUid(uid) self.createFollowUpTask(adapted(task)) diff --git a/organize/configure.zcml b/organize/configure.zcml index e760a03..3f03420 100644 --- a/organize/configure.zcml +++ b/organize/configure.zcml @@ -39,6 +39,26 @@ set_schema="loops.organize.interfaces.ITask" /> + + + + + + + + + + + + diff --git a/organize/interfaces.py b/organize/interfaces.py index c60fdc8..20413a8 100644 --- a/organize/interfaces.py +++ b/organize/interfaces.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 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 @@ -18,8 +18,6 @@ """ Interfaces for organizational stuff like persons and addresses. - -$Id$ """ from zope.interface import Interface, Attribute @@ -156,13 +154,29 @@ class IMemberRegistrationManager(Interface): current password. """ -# task +# task management, meeting minutes: task, event, agenda item class ITask(IConceptSchema, ITask, ILoopsAdapter): pass +class IEvent(ITask): + + participants = schema.Text( + title=_(u'Participants'), + description=_(u'The names of the persons taking part in the event.'), + default=u'', + missing_value=u'', + required=False) + + + +class IAgendaItem(ILoopsAdapter): + + pass + + # 'hasrole' predicate class IHasRole(IRelationAdapter): diff --git a/organize/task.py b/organize/task.py index b069497..cdbd172 100644 --- a/organize/task.py +++ b/organize/task.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2009 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 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 @@ -17,23 +17,22 @@ # """ -Adapters for IConcept providing interfaces from the cybertools.organize package. - -$Id$ +Adapters for IConcept providing interfaces from the +cybertools.organize package. """ from time import mktime from zope.component import adapts from zope.interface import implements -from loops.organize.interfaces import ITask +from loops.organize.interfaces import ITask, IEvent, IAgendaItem from loops.interfaces import IConcept from loops.interfaces import IIndexAttributes from loops.common import AdapterBase from loops.type import TypeInterfaceSourceList -TypeInterfaceSourceList.typeInterfaces += (ITask,) +TypeInterfaceSourceList.typeInterfaces += (ITask, IEvent, IAgendaItem) class Task(AdapterBase): @@ -42,10 +41,29 @@ class Task(AdapterBase): implements(ITask) - _adapterAttributes = ('context', '__parent__',) + _adapterAttributes = AdapterBase._adapterAttributes _contextAttributes = list(ITask) +class Event(Task): + """ A scheduled event or appointment. + """ + + implements(IEvent) + + _contextAttributes = list(IEvent) + + +class AgendaItem(AdapterBase): + """ Some topic (a sort of task) that is discussed during an event. + """ + + implements(IAgendaItem) + + _adapterAttributes = AdapterBase._adapterAttributes + _contextAttributes = list(IAgendaItem) + + class IndexAttributes(object): implements(IIndexAttributes) diff --git a/organize/tests.py b/organize/tests.py index 7222b18..21f4a65 100755 --- a/organize/tests.py +++ b/organize/tests.py @@ -24,8 +24,9 @@ from cybertools.util.jeep import Jeep from loops.common import adapted from loops.concept import Concept from loops.organize.interfaces import IPerson, IHasRole +from loops.organize.interfaces import IEvent, IAgendaItem from loops.organize.party import Person, HasRole -from loops.organize.task import Task +from loops.organize.task import Task, Event, AgendaItem from loops.setup import addAndConfigureObject from loops.tests.auth import login @@ -37,6 +38,8 @@ def setupUtilitiesAndAdapters(loopsRoot): component.provideUtility(principalAnnotations, IPrincipalAnnotationUtility) component.provideAdapter(Person, provides=IPerson) component.provideAdapter(Task) + component.provideAdapter(Event, provides=IEvent) + component.provideAdapter(AgendaItem, provides=IAgendaItem) component.provideAdapter(FoundPrincipalFactory) component.provideAdapter(HasRole, provides=IHasRole) return Jeep(( diff --git a/organize/work/README.txt b/organize/work/README.txt index 1e3f88f..1cce6d4 100644 --- a/organize/work/README.txt +++ b/organize/work/README.txt @@ -242,14 +242,19 @@ and recording information about the tasks. Let's start with creating an a event and assigning it a task. - >>> from loops.organize.interfaces import ITask + >>> from loops.organize.interfaces import IEvent, IAgendaItem >>> tEvent = addAndConfigureObject(concepts, Concept, 'event', - ... title=u'Event', conceptType=concepts.getTypeConcept(), - ... typeInterface=ITask) + ... title=u'Event', conceptType=concepts.getTypeConcept(), + ... typeInterface=IEvent) + >>> tAgendaItem = addAndConfigureObject(concepts, Concept, 'agendaitem', + ... title=u'AgendaItem', conceptType=concepts.getTypeConcept(), + ... typeInterface=IEvent) >>> ev01 = addAndConfigureObject(concepts, Concept, 'ev01', - ... title=u'loops Meeting', conceptType=tEvent) - >>> ev01.assignChild(task01) + ... title=u'loops Meeting', conceptType=tEvent) + >>> aitem01 = addAndConfigureObject(concepts, Concept, 'aitem01', + ... title=u'Documentation of Features', conceptType=tAgendaItem) + >>> ev01.assignChild(aitem01) Now we create the meeting minutes report. We assign the event type as a child in order to provide the information for which types of objects the @@ -259,9 +264,9 @@ report is available. >>> component.provideAdapter(MeetingMinutes, provides=IReportInstance, ... name='meeting_minutes') - >>> meetingMinutes = addAndConfigureObject(concepts, Concept, 'meeting_minutes', - ... title=u'Meeting Minutes', conceptType=tReport, - ... reportType='meeting_minutes') + >>> meetingMinutes = addAndConfigureObject(concepts, Concept, + ... 'meeting_minutes', title=u'Meeting Minutes', conceptType=tReport, + ... reportType='meeting_minutes') >>> meetingMinutes.assignChild(tEvent, hasReport) We can now access the report using a corresponding report-based view. @@ -277,7 +282,8 @@ We can now access the report using a corresponding report-based view. ... for col in reportView.displayedColumns: ... print col.getDisplayValue(row), ... print - {'url': 'http://127.0.0.1/loops/views/home/.36', 'title': u'loops Development'} + {'url': 'http://127.0.0.1/loops/views/home/.58', + 'title': u'Documentation of Features'} diff --git a/organize/work/report.py b/organize/work/report.py index 86dc356..2cd9628 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -371,6 +371,7 @@ class MeetingMinutes(WorkReportInstance): tasks, taskTitle, taskDescription, workItems)) defaultOutputFields = fields states = ('planned', 'accepted', 'done', 'done_x', 'finished') + taskTypeNames = ('agendaitem',) def selectObjects(self, parts): return [adapted(t) for t in self.getTasks(parts)[1:]] From 6df53bfb9634eaba093db70c6161157ab5bacf36 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 17 Jul 2012 09:04:39 +0200 Subject: [PATCH 2/4] suppress all actions in edit and create (form) pages --- browser/form.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/browser/form.py b/browser/form.py index 9e0ac7f..c20723f 100644 --- a/browser/form.py +++ b/browser/form.py @@ -263,6 +263,9 @@ class EditConceptPage(EditConceptForm): super(EditConceptPage, self).setupController() self.registerDojoFormAll() + def getActions(self, category='object', page=None, target=None): + return [] + class CreateObjectForm(ObjectForm): @@ -448,6 +451,9 @@ class CreateConceptPage(CreateConceptForm): super(CreateConceptPage, self).setupController() self.registerDojoFormAll() + def getActions(self, category='object', page=None, target=None): + return [] + @Lazy def nextUrl(self): return self.getUrlForTarget(self.virtualTargetObject) From 8ed023c9627bf3aad1f9b066e0fef99aa51c9831 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 17 Jul 2012 09:29:02 +0200 Subject: [PATCH 3/4] provide additional fields for agenda item --- locales/de/LC_MESSAGES/loops.mo | Bin 17851 -> 18342 bytes locales/de/LC_MESSAGES/loops.po | 21 +++++++++++++++++++++ organize/browser/event.py | 6 ++++-- organize/interfaces.py | 21 +++++++++++++++++++-- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 2a03d4ac049211996b729548cdc73bc3faba5bce..b30c7ba268c1cbbccc2a387b75d4175657b7c103 100644 GIT binary patch delta 7256 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 S|Nnr)-SKXz>t9$WYt3)wFbZG* delta 6822 zcmZA537C)79>DQ;3}YS3*w-2BVC?&lEQ6vfH;KAjB`&h0=+fpNm5MAk(Tyxo6csLM zky1w85~XcQ5^hSV(4~}a-S7AR9?#Qr->2Vv&N=US&-tD6E;Cv)KV{pTl*GY|!iyq~ z+>|J)fnOAlqSch2DsO8Pb*L6a127kJa5kpl*5Gz5NK8io^Xup;$tSP2JXI!;6fxD8EU78b*~p}shrUxwzsHneZUGSpu~ z6MYW{;(qMK{82NO?LaqS5uA>8yeqWdAL@(HftO(hZVKn~(Zu$kD=k1*cr17Z9lub` zIPsF``3x-1{81)_a@YtRpc6XLrC1rS4(F$#E18Yz~8YxC_nv12mDtXriZ(+Zz?(hC5*vnn1fy z?}zpqi6%G=O?Yl5`(K;F+Hm4cbby0M^3iEDk&LW(fcoe|n2WAp6nd+sqFbCm2fjDd zS7Bl5>(N`Z5q(HsMEk#-m55jN1`R%hAE6J|5%j{Z(T?AvJM&YhmnCZ_s*3JJYqWn} zs9%ik*bp?)(df?IjPCd>^ty)<6x`yq=mpQBE6zuEq5$2x@6ZcVxZw_%fo^3zbY;2d z`8;%-%h7SK4ed9e3Cs-b^RWc=#In%v1bPp*qM7YOcj7R*WyjE+_!gb$4B9WPZv56% zLU*tRnovWue=BrnI)(PGm`c45GJYcJN5K^i!ZtWIJ`pWP2YMV`$p+*(i?$=15gkD9 z{cpjvdhtZ1gXPidtDuS03H2OwVQsOf@Bal9eD8Z;D)vDW>W8j$1iIyu(Jj9lUHOvG zz7Bn@UP2RnAH4;K(YN3vI$p8*aeEE4JqJrMf0ReT3kRSN*N4It+7RGsK z|AnFcDEiE-L3iW@^j^P;{1@%zhYLB4o-fiMHXRdotVp2<) z9~$KA8O=ufuR(WY13JMgq5cLsZUJ6|pP@TbKRdpzO*Z@QN;=cv1ec%*T@yM?MDO9$ zP@jSBz-+YNd`!bf&>dQhPOu@=Uq%ys3r+M(wEqdT-;dese`5+o8pd1L0)4OZklPjw zL+{m0WcQ*aXaYOXmF+?&-i_`|L1;gMji?_B^$aS7s8>M~sE$4pbrKXDupK&3Cv@P8 z&;k3R58n`Ufa|a+PCynBEyV%26J2QqR#OaHpx5W3|36Xi z0&lDn6-5UsgQc(ndSPue^X$-`gZAryUe_6&uxGGeXdjH}v=2x7Prwc-QFJ3FdeE@G z84n(wL?>+0JWePV9k45w#NOzZ4??bu#-VS=!)Rig(AVl&^tycX!?Xu|whp0R%G2mL zC0nrno~X^&#;t6NWv~l6K>yG_B-BTs6OIe*cVb!UbI}Bs<8WMuF02F(P&)QUZ^1Bh zo-v_*V@vkmt-GCuzP^)+c($U1T z(BHBhLVaK&bQp)_I59oA0JEsCLbq%uI>3JP1NB2_FV#9uye@ja17_j?bi7HJfiuzT z7NHB>5ZV*@p-_Nk{tddNXVH69yiNS;HWSUf8`i_2=$~ja&=1dwaDE&5Yx*P1#xv-| zHQUDh+9Q7uM+1@Z644|IW$$f98``kFn1CbT8lfq&7U7wpH1cof}_TeZ0j@ zuoCTE(0*571sorof$qd&bO$zCXZ~mp1%K~5|@O|WQgyc4xB;Rm4s1RlZec|}hgGl&e zR$PT9JRaT3Tf_MW!ufSro%WZ|2|h+2&g19;e?}KnPv?qeUg!4tX5B+E_jmhzbQK&}4D0C<8z`D2q z-Qq3i1Ut~o3(%DvLpRGLf{2(lZBQfDX zqbc}$Ov36o1$`D4p!aGe+HYNG-;AzwC;DC3jqcPTwEy?v{8=nSJ<5x(PsRRJOChJC zp?U1TD_B8;nLUoa=UdRsUqGMc{BV9BwxfOseb_4ZhzD+q_P-E)270533<~w(=s4rh zM5mz%%<94ZyOK9)aDaVi#s|;=K1VP7I-LIz?Vr*!wm7CzFNZFqVz4^8gSFBAErYpe zg59t%_DxW5;>*y1hN1WB8uTHYj1F)Mdg07apNA&67@cS(I?hH+!Iz1j2>aBd;ZF3Z zNcm~3i?xWvRmtY~M++J}?k0XrmU#DRyFQd#;~e64;zpt>=WfNjh`z)`VmEP)xQ3WZ zcpQmI{+!Rxu0;8GE}#GSxClBE%{Xxd-bVNq+(Kj$9@h~$$x{4|hhns!!kJJxjh_$= z7^fjNC4L~z5+3Dfe*v2iHB*@XY6`1}V?;wv`uQzFoIjR?Li+gz>=Vi#;VhyM*R91v zgnwEu!1sx4!s9-oS+W%Wcm#Z9FLV7L6OFjYUpU(ck5<%gz<&{qYzRkhTtQ3?b-!@0 z5e_G}*+Wz#nuil_;&Vh9CV3nu6Z41^>K=PzqUZ6y#CM_o_h2h*O5Zy$@kD4GgIUBk zp?;n^6p9hggoby{p9o%w?Zd=_DW4$f8?;SBk8g<=i5j8bNy>jBI14Q?1|8Q)jT$I>Eyh5ag>yuZvprHd% zB{b$zE=g1(ZYDfFi-|75zlHK>JV4YWb`c{8kFSV);xI9Y_&3ppXdK4Rqg;qsLtJR~ z4-n16$uB5BOn8*0?NU6Ltns=~uS}#9D`~5a_k?pp@vp=>;yAI8_?qx|HzxV>7k;)S za=5kxCfX;P`Jay1iTHr1#>v(A2H~-TNTbc8ZP0S6KREiuB!7O%&m#2Mh+Bx+L_MN5 z5p~O&Flyx3n@+HGYvFKK+X(866!vp3giHm$ Date: Tue, 17 Jul 2012 09:30:53 +0200 Subject: [PATCH 4/4] provide additional fields for agenda item --- locales/de/LC_MESSAGES/loops.mo | Bin 18342 -> 18346 bytes locales/de/LC_MESSAGES/loops.po | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index b30c7ba268c1cbbccc2a387b75d4175657b7c103..982b6c5074e2abf916262832b87397931b5cafaf 100644 GIT binary patch delta 182 zcmZ41&$z0eaYKu6Jr4r|!)G@J24*15;LgCn3Zz(|G#8NO2l54gG&_)1fYKU3nj6SB z0MaZ#+6G8-0cl4d4Kl|ENDBh#03giP=2jDgBSxRP@okk0J5kb fNP`TTzgbe`mJv@_eo;wLVtQ&`N@~&M-)^e`Vxk#l delta 178 zcmZ40&$z6gaYKu6JqH5=!)G@J24*1r2S~F5X$E%)%?70Tfm|LS%?_kxptK5*<_7Y0 zfHVt`wgA#xK-v~agUs;&(t<$R2S~F4={O+G4y03oG)P}Alwax2AjZH66leqrfGp|; b(jbFoZ