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