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