222 lines
8.5 KiB
Python
222 lines
8.5 KiB
Python
from five import grok
|
|
from zope import interface, schema
|
|
from z3c.form import form, field, button
|
|
from plone.z3cform.layout import wrap_form
|
|
from Products.CMFCore.utils import getToolByName
|
|
|
|
from z3c.form.ptcompat import ViewPageTemplateFile
|
|
|
|
from z3c.relationfield.schema import RelationChoice, RelationList
|
|
from plone.formwidget.contenttree import ObjPathSourceBinder
|
|
|
|
from tabellio.searchform.interfaces import MessageFactory as _
|
|
|
|
from Products.Five import BrowserView
|
|
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
|
from zope.schema.interfaces import IContextSourceBinder
|
|
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
|
|
|
|
|
|
class IFolderWithDocuments(interface.Interface):
|
|
pass
|
|
|
|
class IFolderWithPfbDocuments(interface.Interface):
|
|
pass
|
|
|
|
@grok.provider(IContextSourceBinder)
|
|
def possible_document_types(context):
|
|
catalog = getToolByName(context, 'portal_catalog')
|
|
possible_doctypes = catalog.uniqueValuesFor('doctype')
|
|
terms = []
|
|
for doctype in possible_doctypes:
|
|
doctype_id = doctype.encode('ascii', 'replace')
|
|
terms.append(SimpleVocabulary.createTerm(doctype_id, doctype_id, doctype))
|
|
return SimpleVocabulary(terms)
|
|
|
|
|
|
class IDocumentSearch(interface.Interface):
|
|
nodoc = schema.TextLine(title=_(u'Document Number'), required=False)
|
|
nosuite = schema.TextLine(title=_(u'Suite Number'), required=False)
|
|
doctype = schema.Set(title=_(u'Type'), required=False,
|
|
value_type=schema.Choice(values=[_(u'Lorem'), _(u'Ipsum')]))
|
|
#subjects =
|
|
ttitle = schema.TextLine(title=_(u'Title'), required=False)
|
|
text = schema.TextLine(title=_(u'Text'), required=False)
|
|
authors = RelationList(title=_(u'Authors'), default=[], required=False,
|
|
value_type=RelationChoice(title=_(u'Author'),
|
|
source=ObjPathSourceBinder(
|
|
portal_type=['themis.datatypes.deputy'])))
|
|
# polgroups
|
|
# session
|
|
start = schema.Date(title=_(u'Start'), required=False)
|
|
end = schema.Date(title=_(u'End'), required=False)
|
|
|
|
|
|
class DocumentSearchForm(form.Form):
|
|
fields = field.Fields(IDocumentSearch)
|
|
ignoreContext = True
|
|
template = ViewPageTemplateFile('form_templates/view_effectivesearch.pt')
|
|
|
|
@button.buttonAndHandler(_(u'Search'))
|
|
def handleApply(self, action):
|
|
data, errors = self.extractData()
|
|
if not errors and False:
|
|
plone_utils = getToolByName(self.context.context, 'plone_utils')
|
|
plone_utils.addPortalMessage(_('Your search has been completed!'))
|
|
return self.request.response.redirect('./')
|
|
return
|
|
|
|
|
|
class IDossierSearch(interface.Interface):
|
|
nodos = schema.TextLine(title=_(u'Dossier Number'), required=False)
|
|
dostype = schema.Set(title=_(u'Type'), required=False,
|
|
value_type=schema.Choice(values=[_(u'Lorem'), _(u'Ipsum')]))
|
|
#subjects =
|
|
ttitle = schema.TextLine(title=_(u'Title'), required=False)
|
|
authors = RelationList(title=_(u'Authors'), default=[], required=False,
|
|
value_type=RelationChoice(title=_(u'Author'),
|
|
source=ObjPathSourceBinder(
|
|
portal_type=['themis.datatypes.deputy'])))
|
|
# polgroups
|
|
# session
|
|
start = schema.Date(title=_(u'Start'), required=False)
|
|
end = schema.Date(title=_(u'End'), required=False)
|
|
|
|
|
|
class DossierSearchForm(form.Form):
|
|
fields = field.Fields(IDossierSearch)
|
|
ignoreContext = True
|
|
template = ViewPageTemplateFile('form_templates/view_dossier_search.pt')
|
|
|
|
@button.buttonAndHandler(_(u'Search'))
|
|
def handleApply(self, action):
|
|
data, errors = self.extractData()
|
|
if not errors and False:
|
|
plone_utils = getToolByName(self.context.context, 'plone_utils')
|
|
plone_utils.addPortalMessage(_('Your search has been completed!'))
|
|
return self.request.response.redirect('./')
|
|
return
|
|
|
|
|
|
class IQuestionSearch(interface.Interface):
|
|
nodos = schema.TextLine(title=_(u'Question Number'), required=False)
|
|
dostype = schema.Set(title=_(u'Type'), required=False,
|
|
value_type=schema.Choice(values=[_(u'Lorem'), _(u'Ipsum')]))
|
|
#subjects =
|
|
ttitle = schema.TextLine(title=_(u'Title'), required=False)
|
|
authors = RelationList(title=_(u'Authors'), default=[], required=False,
|
|
value_type=RelationChoice(title=_(u'Author'),
|
|
source=ObjPathSourceBinder(
|
|
portal_type=['themis.datatypes.deputy'])))
|
|
# polgroups
|
|
# session
|
|
start = schema.Date(title=_(u'Start'), required=False)
|
|
end = schema.Date(title=_(u'End'), required=False)
|
|
|
|
|
|
class QuestionSearchForm(form.Form):
|
|
fields = field.Fields(IQuestionSearch)
|
|
ignoreContext = True
|
|
template = ViewPageTemplateFile('form_templates/view_question_search.pt')
|
|
|
|
@button.buttonAndHandler(_(u'Search'))
|
|
def handleApply(self, action):
|
|
data, errors = self.extractData()
|
|
if not errors and False:
|
|
plone_utils = getToolByName(self.context.context, 'plone_utils')
|
|
plone_utils.addPortalMessage(_('Your search has been completed!'))
|
|
return self.request.response.redirect('./')
|
|
return
|
|
|
|
|
|
class IDocumentPfbSearch(interface.Interface):
|
|
nodoc = schema.TextLine(title=_(u'Document Number'), required=False)
|
|
doctype = schema.Choice(title=_(u'Type'), required=False,
|
|
source=possible_document_types)
|
|
#subjects =
|
|
ttitle = schema.TextLine(title=_(u'Title'), required=False)
|
|
text = schema.TextLine(title=_(u'Text'), required=False)
|
|
authors = RelationList(title=_(u'Authors'), default=[], required=False,
|
|
value_type=RelationChoice(title=_(u'Author'),
|
|
source=ObjPathSourceBinder(
|
|
portal_type=['themis.datatypes.deputy'])))
|
|
# polgroups
|
|
# session
|
|
start = schema.Date(title=_(u'Start'), required=False)
|
|
end = schema.Date(title=_(u'End'), required=False)
|
|
|
|
sort_on = schema.Choice(title=_(u'Sort By'), required=True,
|
|
values=[_(u'Type'), _(u'Number'), _(u'Session')])
|
|
|
|
|
|
class DocumentPfbSearchForm(form.Form):
|
|
fields = field.Fields(IDocumentPfbSearch)
|
|
ignoreContext = True
|
|
template = ViewPageTemplateFile('form_templates/view_pfbdocsearch.pt')
|
|
|
|
@button.buttonAndHandler(_(u'Search'))
|
|
def handleApply(self, action):
|
|
data, errors = self.extractData()
|
|
if not errors and False:
|
|
plone_utils = getToolByName(self.context.context, 'plone_utils')
|
|
plone_utils.addPortalMessage(_('Your search has been completed!'))
|
|
return self.request.response.redirect('./')
|
|
return
|
|
|
|
|
|
class SearchView(BrowserView):
|
|
def document_results(self):
|
|
f = DocumentPfbSearchForm(self.context, self.request)
|
|
f.update()
|
|
data, errors = f.extractData()
|
|
catalog = getToolByName(self.context, 'portal_catalog')
|
|
kw = {}
|
|
|
|
if data.get('ttitle'):
|
|
kw['Title'] = data.get('ttitle')
|
|
|
|
if data.get('doctype'):
|
|
kw['doctype'] = possible_document_types(self.context).getTermByToken(data.get('doctype')).title
|
|
if data.get('start') and data.get('end'):
|
|
kw['dateDoc'] = {'query': [data.get('start'), data.get('end')], 'range': 'minmax'}
|
|
elif data.get('start'):
|
|
kw['dateDoc'] = {'query': data.get('start'), 'range': 'min'}
|
|
elif data.get('end'):
|
|
kw['dateDoc'] = {'query': data.get('end'), 'range': 'max'}
|
|
|
|
if data.get('sort_on') == 'Type':
|
|
kw['sort_on'] = 'doctype'
|
|
elif data.get('sort_on') == 'Number':
|
|
kw['sort_on'] = 'no'
|
|
elif data.get('sort_on') == 'Session':
|
|
kw['sort_on'] = 'session'
|
|
kw['sort_order'] = 'descending'
|
|
|
|
if not kw:
|
|
return []
|
|
|
|
return catalog(
|
|
portal_type=['tabellio.documents.document'],
|
|
**kw)
|
|
|
|
def document_pfb_search_form(self):
|
|
f = DocumentPfbSearchForm(self.context, self.request)
|
|
f.update()
|
|
return f.render()
|
|
|
|
def document_search_form(self):
|
|
f = DocumentSearchForm(self.context, self.request)
|
|
f.update()
|
|
return f.render()
|
|
|
|
def dossier_search_form(self):
|
|
f = DossierSearchForm(self.context, self.request)
|
|
f.update()
|
|
return f.render()
|
|
|
|
def question_search_form(self):
|
|
f = QuestionSearchForm(self.context, self.request)
|
|
f.update()
|
|
return f.render()
|
|
|