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
|
||||
ri = component.getAdapter(self.report, IReportInstance,
|
||||
name=reportType)
|
||||
ri.view = self.nodeView
|
||||
#ri.view = self.nodeView
|
||||
ri.view = self
|
||||
return ri
|
||||
|
||||
def results(self):
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
<h3 i18n:translate="">Tasks</h3>
|
||||
<tal:tasks define="report item/reportInstance;
|
||||
reportView nocall:item;
|
||||
results reportView/results;
|
||||
cb_name string:cb_select_tasks;">
|
||||
<metal:results use-macro="view/resultsRenderer" />
|
||||
</tal:tasks>
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
<div metal:define-macro="content"
|
||||
tal:define="report item/reportInstance;
|
||||
reportView nocall:item">
|
||||
reportView nocall:item;
|
||||
results reportView/results">
|
||||
<div tal:attributes="class string:content-$level;">
|
||||
<metal:block use-macro="view/concept_macros/concepttitle" />
|
||||
<metal:block use-macro="view/concept_macros/conceptfields" />
|
||||
|
@ -21,15 +22,33 @@
|
|||
<div metal:define-macro="document"
|
||||
tal:define="item nocall:view;
|
||||
report item/reportInstance;
|
||||
reportView nocall:item">
|
||||
<div metal:use-macro="reportView/resultsRenderer" />
|
||||
reportView nocall:item;
|
||||
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 metal:define-macro="results">
|
||||
<table class="report"
|
||||
tal:define="results reportView/results;
|
||||
showCheckboxes cb_name|nothing">
|
||||
tal:define="showCheckboxes cb_name|nothing">
|
||||
<tr>
|
||||
<th tal:condition="showCheckboxes"
|
||||
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 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.organize.interfaces import IWorkItems
|
||||
from cybertools.util.date import timeStamp2Date
|
||||
from cybertools.util.format import formatDate
|
||||
from cybertools.util.jeep import Jeep
|
||||
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.report import ReportInstance
|
||||
from loops import util
|
||||
|
@ -44,7 +44,8 @@ class StateField(Field):
|
|||
value = self.getValue(row)
|
||||
return util._(value)
|
||||
|
||||
class DateField(Field):
|
||||
|
||||
class TrackDateField(Field):
|
||||
|
||||
part = 'date'
|
||||
format = 'short'
|
||||
|
@ -65,7 +66,7 @@ class DateField(Field):
|
|||
return u''
|
||||
|
||||
|
||||
class TimeField(DateField):
|
||||
class TrackTimeField(TrackDateField):
|
||||
|
||||
part = 'time'
|
||||
|
||||
|
@ -105,14 +106,14 @@ dayFrom = Field('dayFrom', u'Start Day',
|
|||
dayTo = Field('dayTo', u'End Day',
|
||||
description=u'The last day until which to select work.',
|
||||
executionSteps=['query'])
|
||||
day = DateField('day', u'Day',
|
||||
day = TrackDateField('day', u'Day',
|
||||
description=u'The day the work was done.',
|
||||
cssClass='center',
|
||||
executionSteps=['sort', 'output'])
|
||||
timeStart = TimeField('start', u'Start',
|
||||
timeStart = TrackTimeField('start', u'Start',
|
||||
description=u'The time the unit of work was started.',
|
||||
executionSteps=['sort', 'output'])
|
||||
timeEnd = TimeField('end', u'End',
|
||||
timeEnd = TrackTimeField('end', u'End',
|
||||
description=u'The time the unit of work was finished.',
|
||||
executionSteps=['output'])
|
||||
task = TargetField('taskId', u'Task',
|
||||
|
@ -272,7 +273,21 @@ class MeetingMinutesWork(WorkReportInstance, SubReport):
|
|||
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.',
|
||||
cssClass='header-1',
|
||||
executionSteps=['output'])
|
||||
|
@ -288,23 +303,44 @@ workItems = SubReportField('workItems', u'Work Items',
|
|||
|
||||
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):
|
||||
|
||||
# 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"
|
||||
label = u'Meeting Minutes'
|
||||
|
||||
rowFactory = TaskRow
|
||||
|
||||
fields = Jeep((tasks, taskTitle, taskDescription, workItems))
|
||||
fields = Jeep((eventTitle, eventStart, eventEnd, eventDescription,
|
||||
tasks, taskTitle, taskDescription, workItems))
|
||||
defaultOutputFields = fields
|
||||
states = ('planned', 'accepted', 'done', 'done_x', 'finished')
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue