show meeting minutes as Word document
This commit is contained in:
		
							parent
							
								
									4447ea04ef
								
							
						
					
					
						commit
						707a1dd8c4
					
				
					 4 changed files with 79 additions and 22 deletions
				
			
		|  | @ -147,7 +147,8 @@ class ResultsConceptView(ConceptView): | ||||||
|         reportType = self.reportType or self.report.reportType |         reportType = self.reportType or self.report.reportType | ||||||
|         ri = component.getAdapter(self.report, IReportInstance, |         ri = component.getAdapter(self.report, IReportInstance, | ||||||
|                                   name=reportType) |                                   name=reportType) | ||||||
|         ri.view = self.nodeView |         #ri.view = self.nodeView | ||||||
|  |         ri.view = self | ||||||
|         return ri |         return ri | ||||||
| 
 | 
 | ||||||
|     def results(self): |     def results(self): | ||||||
|  |  | ||||||
|  | @ -67,6 +67,7 @@ | ||||||
|   <h3 i18n:translate="">Tasks</h3> |   <h3 i18n:translate="">Tasks</h3> | ||||||
|   <tal:tasks define="report item/reportInstance; |   <tal:tasks define="report item/reportInstance; | ||||||
|                      reportView nocall:item; |                      reportView nocall:item; | ||||||
|  |                      results reportView/results; | ||||||
|                      cb_name string:cb_select_tasks;"> |                      cb_name string:cb_select_tasks;"> | ||||||
|     <metal:results use-macro="view/resultsRenderer" /> |     <metal:results use-macro="view/resultsRenderer" /> | ||||||
|   </tal:tasks> |   </tal:tasks> | ||||||
|  |  | ||||||
|  | @ -3,7 +3,8 @@ | ||||||
| 
 | 
 | ||||||
| <div metal:define-macro="content" | <div metal:define-macro="content" | ||||||
|      tal:define="report item/reportInstance; |      tal:define="report item/reportInstance; | ||||||
|                  reportView nocall:item"> |                  reportView nocall:item; | ||||||
|  |                  results reportView/results"> | ||||||
|   <div tal:attributes="class string:content-$level;"> |   <div tal:attributes="class string:content-$level;"> | ||||||
|     <metal:block use-macro="view/concept_macros/concepttitle" /> |     <metal:block use-macro="view/concept_macros/concepttitle" /> | ||||||
|     <metal:block use-macro="view/concept_macros/conceptfields" /> |     <metal:block use-macro="view/concept_macros/conceptfields" /> | ||||||
|  | @ -21,15 +22,33 @@ | ||||||
| <div metal:define-macro="document" | <div metal:define-macro="document" | ||||||
|      tal:define="item nocall:view; |      tal:define="item nocall:view; | ||||||
|                  report item/reportInstance; |                  report item/reportInstance; | ||||||
|                  reportView nocall:item"> |                  reportView nocall:item; | ||||||
|   <div metal:use-macro="reportView/resultsRenderer" /> |                  results reportView/results; | ||||||
|  |                  fields results/context/fields"> | ||||||
|  |   <metal:header use-macro="item/macros/header" /> | ||||||
|  |   <metal:results use-macro="reportView/resultsRenderer" /> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div metal:define-macro="header" | ||||||
|  |      tal:define="row results/first"> | ||||||
|  |   <h1 i18n:translate="">Meeting Minutes</h1> | ||||||
|  |   <h2 tal:define="col fields/eventTitle"> | ||||||
|  |     <metal:col use-macro="python:item.getColumnRenderer(col)" /></h2> | ||||||
|  |   <div> | ||||||
|  |     <span tal:define="col fields/eventStart"> | ||||||
|  |       <metal:col use-macro="python:item.getColumnRenderer(col)" /></span> - | ||||||
|  |     <span tal:define="col fields/eventEnd"> | ||||||
|  |       <metal:col use-macro="python:item.getColumnRenderer(col)" /></span> | ||||||
|  |   </div> | ||||||
|  |   <div tal:define="col fields/eventDescription"> | ||||||
|  |     <metal:col use-macro="python:item.getColumnRenderer(col)" /></div> | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div metal:define-macro="results"> | <div metal:define-macro="results"> | ||||||
|   <table class="report" |   <table class="report" | ||||||
|          tal:define="results reportView/results; |          tal:define="showCheckboxes cb_name|nothing"> | ||||||
|                      showCheckboxes cb_name|nothing"> |  | ||||||
|     <tr> |     <tr> | ||||||
|         <th tal:condition="showCheckboxes" |         <th tal:condition="showCheckboxes" | ||||||
|             style="border: 1px solid grey"> |             style="border: 1px solid grey"> | ||||||
|  |  | ||||||
|  | @ -26,14 +26,14 @@ from zope.component import adapter | ||||||
| 
 | 
 | ||||||
| from cybertools.composer.report.base import Report | from cybertools.composer.report.base import Report | ||||||
| from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria | from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria | ||||||
| from cybertools.composer.report.field import Field | from cybertools.composer.report.field import Field, CalculatedField | ||||||
| from cybertools.composer.report.result import ResultSet, Row as BaseRow | from cybertools.composer.report.result import ResultSet, Row as BaseRow | ||||||
| from cybertools.organize.interfaces import IWorkItems | from cybertools.organize.interfaces import IWorkItems | ||||||
| from cybertools.util.date import timeStamp2Date | from cybertools.util.date import timeStamp2Date | ||||||
| from cybertools.util.format import formatDate | from cybertools.util.format import formatDate | ||||||
| from cybertools.util.jeep import Jeep | from cybertools.util.jeep import Jeep | ||||||
| from loops.common import adapted, baseObject | from loops.common import adapted, baseObject | ||||||
| from loops.expert.field import TargetField, TextField, UrlField | from loops.expert.field import TargetField, DateField, TextField, UrlField | ||||||
| from loops.expert.field import SubReport, SubReportField | from loops.expert.field import SubReport, SubReportField | ||||||
| from loops.expert.report import ReportInstance | from loops.expert.report import ReportInstance | ||||||
| from loops import util | from loops import util | ||||||
|  | @ -44,7 +44,8 @@ class StateField(Field): | ||||||
|         value = self.getValue(row) |         value = self.getValue(row) | ||||||
|         return util._(value) |         return util._(value) | ||||||
| 
 | 
 | ||||||
| class DateField(Field): | 
 | ||||||
|  | class TrackDateField(Field): | ||||||
| 
 | 
 | ||||||
|     part = 'date' |     part = 'date' | ||||||
|     format = 'short' |     format = 'short' | ||||||
|  | @ -65,7 +66,7 @@ class DateField(Field): | ||||||
|         return u'' |         return u'' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TimeField(DateField): | class TrackTimeField(TrackDateField): | ||||||
| 
 | 
 | ||||||
|     part = 'time' |     part = 'time' | ||||||
| 
 | 
 | ||||||
|  | @ -105,14 +106,14 @@ dayFrom = Field('dayFrom', u'Start Day', | ||||||
| dayTo = Field('dayTo', u'End Day', | dayTo = Field('dayTo', u'End Day', | ||||||
|                 description=u'The last day until which to select work.', |                 description=u'The last day until which to select work.', | ||||||
|                 executionSteps=['query']) |                 executionSteps=['query']) | ||||||
| day = DateField('day', u'Day', | day = TrackDateField('day', u'Day', | ||||||
|                 description=u'The day the work was done.', |                 description=u'The day the work was done.', | ||||||
|                 cssClass='center', |                 cssClass='center', | ||||||
|                 executionSteps=['sort', 'output']) |                 executionSteps=['sort', 'output']) | ||||||
| timeStart = TimeField('start', u'Start', | timeStart = TrackTimeField('start', u'Start', | ||||||
|                 description=u'The time the unit of work was started.', |                 description=u'The time the unit of work was started.', | ||||||
|                 executionSteps=['sort', 'output']) |                 executionSteps=['sort', 'output']) | ||||||
| timeEnd = TimeField('end', u'End', | timeEnd = TrackTimeField('end', u'End', | ||||||
|                 description=u'The time the unit of work was finished.', |                 description=u'The time the unit of work was finished.', | ||||||
|                 executionSteps=['output']) |                 executionSteps=['output']) | ||||||
| task = TargetField('taskId', u'Task', | task = TargetField('taskId', u'Task', | ||||||
|  | @ -272,7 +273,21 @@ class MeetingMinutesWork(WorkReportInstance, SubReport): | ||||||
|         return [] |         return [] | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| taskTitle = UrlField('title', u'Title', | eventTitle = CalculatedField('eventTitle', u'Event Title', | ||||||
|  |                 description=u'', | ||||||
|  |                 executionSteps=(['header'])) | ||||||
|  | eventDescription = CalculatedField('eventDescription', u'Event Description', | ||||||
|  |                 description=u'', | ||||||
|  |                 executionSteps=(['header'])) | ||||||
|  | eventStart = DateField('eventStart', u'Event Start', | ||||||
|  |                 description=u'', | ||||||
|  |                 format=('dateTime', 'short'), | ||||||
|  |                 executionSteps=(['header'])) | ||||||
|  | eventEnd = DateField('eventEnd', u'Event End', | ||||||
|  |                 description=u'', | ||||||
|  |                 format=('dateTime', 'short'), | ||||||
|  |                 executionSteps=(['header'])) | ||||||
|  | taskTitle = UrlField('title', u'Task Title', | ||||||
|                 description=u'The short description of the task.', |                 description=u'The short description of the task.', | ||||||
|                 cssClass='header-1', |                 cssClass='header-1', | ||||||
|                 executionSteps=['output']) |                 executionSteps=['output']) | ||||||
|  | @ -288,23 +303,44 @@ workItems = SubReportField('workItems', u'Work Items', | ||||||
| 
 | 
 | ||||||
| class TaskRow(BaseRow): | class TaskRow(BaseRow): | ||||||
| 
 | 
 | ||||||
|     pass |     @Lazy | ||||||
|  |     def event(self): | ||||||
|  |         return self.parent.context.view.adapted | ||||||
|  | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def eventTitle(self): | ||||||
|  |         return self.event.title | ||||||
|  | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def eventDescription(self): | ||||||
|  |         return self.event.description | ||||||
|  | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def eventStart(self): | ||||||
|  |         return self.event.start | ||||||
|  | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def eventEnd(self): | ||||||
|  |         return self.event.end | ||||||
|  | 
 | ||||||
|  |     useRowProperty = BaseRow.useRowProperty | ||||||
|  |     attributeHandlers = dict( | ||||||
|  |             eventStart=useRowProperty, | ||||||
|  |             eventEnd=useRowProperty, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class MeetingMinutes(WorkReportInstance): | class MeetingMinutes(WorkReportInstance): | ||||||
| 
 | 
 | ||||||
|     # TODO: |  | ||||||
|     # header (event) fields: title, description, from/to, |  | ||||||
|     #               location, participants (or put in description?) |  | ||||||
|     # result set field for work items |  | ||||||
|     # work item fields: title, description, party, deadline, state |  | ||||||
| 
 |  | ||||||
|     type = "meeting_minutes" |     type = "meeting_minutes" | ||||||
|     label = u'Meeting Minutes' |     label = u'Meeting Minutes' | ||||||
| 
 | 
 | ||||||
|     rowFactory = TaskRow |     rowFactory = TaskRow | ||||||
| 
 | 
 | ||||||
|     fields = Jeep((tasks, taskTitle, taskDescription, workItems)) |     fields = Jeep((eventTitle, eventStart, eventEnd, eventDescription, | ||||||
|  |                    tasks, taskTitle, taskDescription, workItems)) | ||||||
|     defaultOutputFields = fields |     defaultOutputFields = fields | ||||||
|     states = ('planned', 'accepted', 'done', 'done_x', 'finished') |     states = ('planned', 'accepted', 'done', 'done_x', 'finished') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue