예제 #1
0
 def generateDocumentText(self):
     """Generate document using template from templates stored in
     
     src/bungeni_custom/reporting/templates/documents
     Each template has a config parameter with the document type for
     which it may be used.
     """
     template_vocabulary = queryUtility(IVocabularyFactory, 
         "bungeni.vocabulary.DocumentXHTMLTemplates"
     )
     
     doc_templates = [ term.value for term in template_vocabulary() if 
         self.document.type in term.doctypes
     ]
     log.debug("Looking for templates to generate [%s] report. Found : %s",
         self.document.type, doc_templates
     )
     if len(doc_templates) == 0:
         self.error_messages.append(
             _(u"No template for document of type: ${dtype}. Contact admin.",
                 mapping={ "dtype": self.document.type }
             )
         )
         raise DocumentGenerationError(
             "No template found to generate this document"
         )
     #!+REPORTS(mrb, OCT-2011) Provide UI to select templates if more than 1
     generator = generators.ReportGeneratorXHTML(doc_templates[0], 
         self.document
     )
     #return generator.generateReport()
     return generator.generateReport()
예제 #2
0
    def generateDocumentText(self):
        """Generate document using template from templates stored in
        
        src/bungeni_custom/reporting/templates/documents
        Each template has a config parameter with the document type for
        which it may be used.
        """
        def default_template(templates):
            default_templates = filter(lambda term: "default" in term.doctypes,
                                       templates)
            if default_templates:
                return default_templates[0].value
            return None

        template_vocabulary = vocabulary.document_xhtml_template_factory()
        doc_templates = [
            term.value for term in template_vocabulary
            if self.document.type in term.doctypes
        ]
        log.debug("Looking for templates to generate [%s] report. Found : %s",
                  self.document.type, doc_templates)
        if doc_templates:
            doc_template = doc_templates[0]
        else:
            doc_template = default_template(template_vocabulary)
        if doc_template is None:
            self.error_messages.append(
                _(u"No template for document of type: ${dtype}. Contact admin.",
                  mapping={"dtype": self.document.type}))
            raise DocumentGenerationError(
                "No template found to generate this document")
        generator = generators.ReportGeneratorXHTML(doc_template,
                                                    self.document)
        return generator.generateReport()
예제 #3
0
 def generate_preview(self):
     sitting = removeSecurityProxy(self.context)
     sittings = [data.ExpandedSitting(sitting)]
     generator = generators.ReportGeneratorXHTML(self.get_template())
     #!+TAGS(mb, Feb-2013) Deprecate with tags. Configure as wf/feature.
     if "minutes" in sitting.status:
         title = generator.title = _(u"Sitting Votes and Proceedings")
     else:
         title = generator.title = _(u"Sitting Agenda")
     generator.context = data.ReportContext(sittings=sittings, title=title)
     return generator.generateReport()
예제 #4
0
 def generateContent(self, data):
     self.start_date = (data.get("start_date") or 
         datetime.datetime.today().date()
     )
     generator = generators.ReportGeneratorXHTML(data.get("report_type"))
     self.title = generator.title
     self.publication_number = data.get("publication_number")
     self.end_date = self.get_end_date(self.start_date, generator.coverage)
     self.buildSittings(self.start_date, self.end_date)
     generator.context = self
     return generator.generateReport()
예제 #5
0
 def generatePreview(self):
     vocabulary = component.queryUtility(
         IVocabularyFactory, "bungeni.vocabulary.ReportXHTMLTemplates")
     preview_template = filter(lambda t: t.title == "Weekly Business",
                               vocabulary.terms)[0]
     doc_template = preview_template.value
     generator = generators.ReportGeneratorXHTML(doc_template)
     self.title = preview_template.title
     self.language = generator.language
     self.sittings = [ExpandedSitting(removeSecurityProxy(self.context))]
     generator.context = self
     return generator.generateReport()
예제 #6
0
def default_reports(sitting, event):
    wf = IWorkflow(sitting)
    if sitting.status in wf.get_state_ids(tagged=["published"]):
        sitting = removeSecurityProxy(sitting)
        sittings = [ExpandedSitting(sitting)]
        report_context = ReportContext(sittings=sittings)
        report = domain.Report()
        session = Session()
        # !+GROUP_AS_OWNER(mr, apr-2012) we assume for now that the "owner" of
        # the report is the currently logged in user.
        report.owner_id = get_db_user_id()
        report.created_date = datetime.datetime.now()
        report.group_id = sitting.group_id
        
        # generate using html template in bungeni_custom
        vocabulary = component.queryUtility(
            schema.interfaces.IVocabularyFactory, 
            "bungeni.vocabulary.ReportXHTMLTemplates"
        )
        preview_template = filter(
            lambda t: t.title=="Sitting Agenda", vocabulary.terms
        )[0]
        doc_template = preview_template.value
        generator = generators.ReportGeneratorXHTML(doc_template)
        generator.context = report_context
        report.language = generator.language
        
        if sitting.status in wf.get_state_ids(tagged=["publishedminutes"]):
            report.short_title = generator.title = _(u"Sitting Votes and "
                u" Proceedings"
            )
        else:
            report.short_title = generator.title = _(u"Sitting Agenda")
    
        report.body = generator.generateReport()
        session.add(report)
        session.flush()
        notify(ObjectCreatedEvent(report))
        sr = domain.SittingReport()
        sr.report = report
        sr.sitting = sitting
        session.add(sr)
        session.flush()
        notify(ObjectCreatedEvent(sr))
예제 #7
0
def default_reports(sitting, event):
    #!+REPORTS(mb, Feb-2013) add a publish_report action - remove this handler
    if "published" in sitting.status:
        sitting = removeSecurityProxy(sitting)
        report_type = "sitting_agenda"
        report_title = _("report_title_sitting_agenda",
                         default=u"Sitting Agenda")
        if "minutes" in sitting.status:
            report_type = "sitting_minutes"
            report_title = _("report_title_votes_and_proceedings",
                             default=u"Sitting Votes and Proceedings")
        sittings = [ExpandedSitting(sitting)]
        report = domain.Report()
        session = Session()
        # !+GROUP_AS_OWNER(mr, apr-2012) we assume for now that the "owner" of
        # the report is the currently logged in user.
        report.owner_id = get_login_user().user_id
        report.created_date = datetime.datetime.now()
        report.group_id = sitting.group_id
        # generate using html template in bungeni_custom
        vocab = vocabulary.report_xhtml_template_factory
        term = vocab.getTermByFileName(report_type)
        doc_template = term and term.value or vocab.terms[0].value
        generator = generators.ReportGeneratorXHTML(doc_template)
        generator.title = report_title
        report_title_i18n = translate(report_title,
                                      target_language=generator.language)
        report_context = ReportContext(sittings=sittings,
                                       title=report_title_i18n)
        generator.context = report_context
        report.title = report_title_i18n
        report.language = generator.language
        report.body = generator.generateReport()
        session.add(report)
        session.flush()
        notify(ObjectCreatedEvent(report))
        sr = domain.SittingReport()
        sr.report = report
        sr.sitting = sitting
        session.add(sr)
        session.flush()
        notify(ObjectCreatedEvent(sr))
예제 #8
0
def default_reports(sitting, event):
    #!+REPORTS(mb, Feb-2013) - remove this handler for workflow events:
    # EITHER a publish_report action, maybe configure this as a workflow action
    # (so not hardwired to status/workflow event)
    # OR make it part of sitting feature options e.g. publish state and report
    # template.
    if "published" in sitting.status:
        sitting = removeSecurityProxy(sitting)
        report_type = "sitting_agenda"
        report_title = _("report_title_order_of_the_day",
                         default=u"Order of the day")
        if "minutes" in sitting.status:
            report_type = "sitting_minutes"
            report_title = _("report_title_votes_and_proceedings",
                             default=u"Votes and Proceedings")
        sittings = [ExpandedSitting(sitting)]
        report = domain.Report()
        session = Session()
        # !+GROUP_AS_OWNER(mr, apr-2012) we assume for now that the "owner" of
        # the report is the currently logged in user.
        report.owner_id = get_login_user().user_id
        report.created_date = datetime.datetime.now()
        report.group_id = sitting.group_id
        # !+ReportXHTMLTemplateFactory
        # generate using html template in bungeni_custom
        vocab = vocabulary.report_xhtml_template_factory(sitting)
        try:
            report_template_path = vocab.getTermByToken(report_type).value
        except LookupError:
            vtokens = [t.token for t in vocab._terms]
            # first check if we have any values in the reports vocab for this context
            if not vtokens:
                log.error(
                    "Sitting %s Workflow Transition Handler - "
                    "entry for report type %r NOT found in EMPTY vocabulary: %s",
                    sitting, report_type, vtokens)
                raise
            # ok, as a tmp workaround, pick off the first term value in the reports vocab
            log.warning(
                "Sitting %s Workflow Transition Handler - "
                "entry for report type %r NOT found in vocabulary: %s - "
                "proceeding with the template for first entry found: %r ",
                sitting, report_type, vtokens, vtokens[0])
            report_template_path = vocab._terms[0].value
        generator = generators.ReportGeneratorXHTML(report_template_path)
        generator.title = report_title
        report_title_i18n = translate(report_title,
                                      target_language=generator.language)
        report_context = ReportContext(sittings=sittings,
                                       title=report_title_i18n)
        generator.context = report_context
        report.title = report_title_i18n
        report.language = generator.language
        report.body = generator.generate_report(common.get_request())
        session.add(report)
        session.flush()
        notify(ObjectCreatedEvent(report))
        sr = domain.SittingReport()
        sr.report = report
        sr.sitting = sitting
        session.add(sr)
        session.flush()
        notify(ObjectCreatedEvent(sr))