creation of follow-up meeting with copying of tasks OK
This commit is contained in:
parent
719bd165aa
commit
2e8618b375
4 changed files with 63 additions and 6 deletions
|
@ -390,6 +390,11 @@ Events listing
|
||||||
>>> list(listing.events())
|
>>> list(listing.events())
|
||||||
[<loops.browser.concept.ConceptRelationView ...>]
|
[<loops.browser.concept.ConceptRelationView ...>]
|
||||||
|
|
||||||
|
Creation of follow-up event
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
>>> from loops.organize.browser.event import CreateFollowUpEvent
|
||||||
|
|
||||||
|
|
||||||
Send Email to Members
|
Send Email to Members
|
||||||
=====================
|
=====================
|
||||||
|
|
|
@ -23,9 +23,11 @@ Definition of view classes and other browser related stuff for tasks.
|
||||||
import calendar
|
import calendar
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta
|
||||||
from urllib import urlencode
|
from urllib import urlencode
|
||||||
from zope import interface, component
|
from zope.app.container.interfaces import INameChooser
|
||||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
|
from zope import interface, component
|
||||||
|
from zope.traversing.api import getName
|
||||||
|
|
||||||
from cybertools.browser.action import actions
|
from cybertools.browser.action import actions
|
||||||
from cybertools.meta.interfaces import IOptions
|
from cybertools.meta.interfaces import IOptions
|
||||||
|
@ -34,8 +36,10 @@ from loops.browser.concept import ConceptView
|
||||||
from loops.browser.form import CreateConceptPage, CreateConcept
|
from loops.browser.form import CreateConceptPage, CreateConcept
|
||||||
from loops.browser.form import EditConceptPage, EditConcept
|
from loops.browser.form import EditConceptPage, EditConcept
|
||||||
from loops.browser.node import NodeView
|
from loops.browser.node import NodeView
|
||||||
from loops.common import adapted
|
from loops.common import adapted, baseObject
|
||||||
|
from loops.concept import Concept
|
||||||
from loops.organize.work.meeting import MeetingMinutes
|
from loops.organize.work.meeting import MeetingMinutes
|
||||||
|
from loops.setup import addAndConfigureObject
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
from loops import util
|
from loops import util
|
||||||
|
|
||||||
|
@ -300,6 +304,55 @@ class CreateFollowUpEvent(CreateConcept, BaseFollowUpController):
|
||||||
|
|
||||||
defaultTypeToken = '.loops/concepts/event'
|
defaultTypeToken = '.loops/concepts/event'
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def followsPredicate(self):
|
||||||
|
return self.view.conceptManager['follows']
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def baseEvent(self):
|
||||||
|
return adapted(self.view.virtualTargetObject)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
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))
|
||||||
|
return result
|
||||||
|
|
||||||
|
def createFollowUpTask(self, source):
|
||||||
|
cm = self.view.conceptManager
|
||||||
|
stask = baseObject(source)
|
||||||
|
bevt = baseObject(self.baseEvent)
|
||||||
|
taskType = stask.conceptType
|
||||||
|
taskName = getName(stask)
|
||||||
|
name = INameChooser(cm).chooseName(taskName, stask)
|
||||||
|
newTask = addAndConfigureObject(cm, Concept, name,
|
||||||
|
conceptType=taskType,
|
||||||
|
title=source.title,
|
||||||
|
description=source.description,
|
||||||
|
start=source.start,
|
||||||
|
end=source.end)
|
||||||
|
stask.assignChild(newTask, self.followsPredicate)
|
||||||
|
for rel in stask.getParentRelations():
|
||||||
|
if rel.predicate != self.view.typePredicate:
|
||||||
|
if rel.first == bevt:
|
||||||
|
parent = self.object
|
||||||
|
else:
|
||||||
|
parent = rel.first
|
||||||
|
newTask.assignParent(parent, rel.predicate,
|
||||||
|
order=rel.order, relevance=rel.relevance)
|
||||||
|
return newTask
|
||||||
|
|
||||||
|
def assignConcepts(self, obj):
|
||||||
|
bevt = baseObject(self.baseEvent)
|
||||||
|
bevt.assignChild(obj, self.followsPredicate)
|
||||||
|
for rel in bevt.getParentRelations():
|
||||||
|
if rel.predicate != self.view.typePredicate:
|
||||||
|
obj.assignParent(rel.first, rel.predicate)
|
||||||
|
|
||||||
|
|
||||||
class EditFollowUpEvent(EditConcept, BaseFollowUpController):
|
class EditFollowUpEvent(EditConcept, BaseFollowUpController):
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,8 @@
|
||||||
style="border: 1px solid grey">
|
style="border: 1px solid grey">
|
||||||
<input type="checkbox" checked
|
<input type="checkbox" checked
|
||||||
tal:condition="python:colname == 'title'"
|
tal:condition="python:colname == 'title'"
|
||||||
tal:attributes="name string:$cb_name:list" /></td>
|
tal:attributes="name string:$cb_name:list;
|
||||||
|
value row/context/uid" /></td>
|
||||||
<td style="border: 1px solid grey"
|
<td style="border: 1px solid grey"
|
||||||
tal:define="col report/fields/?colname"
|
tal:define="col report/fields/?colname"
|
||||||
tal:attributes="class col/cssClass">
|
tal:attributes="class col/cssClass">
|
||||||
|
|
|
@ -330,8 +330,6 @@ class TaskRow(BaseRow):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MeetingMinutes(WorkReportInstance):
|
class MeetingMinutes(WorkReportInstance):
|
||||||
|
|
||||||
type = "meeting_minutes"
|
type = "meeting_minutes"
|
||||||
|
@ -345,6 +343,6 @@ class MeetingMinutes(WorkReportInstance):
|
||||||
states = ('planned', 'accepted', 'done', 'done_x', 'finished')
|
states = ('planned', 'accepted', 'done', 'done_x', 'finished')
|
||||||
|
|
||||||
def selectObjects(self, parts):
|
def selectObjects(self, parts):
|
||||||
return self.getTasks(parts)[1:]
|
return [adapted(t) for t in self.getTasks(parts)[1:]]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue