Пример #1
0
    def jsonByType(self, rooted, document_base_url, searchtext, page='1'):
        """ Returns the actual listing """
        catalog_results = []
        results = {}

        obj = self.obj
        catalog = api.portal.get_tool('portal_catalog')
        normalizer = getUtility(IIDNormalizer)

        if 'filter_portal_types' in self.request.keys():
            self.filter_portal_types = self.request['filter_portal_types']
        else:
            self.filter_portal_types = [i[0] for i in self._getCurrentValues()]

        if INavigationRoot.providedBy(obj) or (rooted == 'True'
                                               and document_base_url[:-1]
                                               == obj.absolute_url()):
            results['parent_url'] = ''
        else:
            results['parent_url'] = aq_parent(obj).absolute_url()
        if rooted == 'True':
            results['path'] = self.getBreadcrumbs(results['parent_url'])
        else:
            # get all items from siteroot to context (title and url)
            results['path'] = self.getBreadcrumbs()
        # get all portal types and get information from brains
        path = '/'.join(obj.getPhysicalPath())

        catalog_query = {'sort_on': 'getObjPositionInParent'}
        catalog_query['portal_type'] = self.filter_portal_types
        catalog_query['path'] = {'query': path, 'depth': 1}
        if searchtext:
            catalog_query['Title'] = '{0}*'.format(searchtext)

        brains = catalog(**catalog_query)
        page = int(page, 10)
        start = (page - 1) * ITEMS_BY_REQUEST
        brains = Batch(brains, size=ITEMS_BY_REQUEST, start=start, orphan=0)

        results['has_next'] = brains.next is not None
        results['nextpage'] = brains.pagenumber + 1
        results['total_results'] = len(brains)

        for brain in brains:
            catalog_results.append({
                'id':
                brain.getId,
                'uuid':
                brain.UID or None,  # Maybe Missing.Value
                'url':
                brain.getURL(),
                'portal_type':
                brain.portal_type,
                'normalized_type':
                normalizer.normalize(brain.portal_type),
                'classicon':
                'contenttype-{0}'.format(
                    normalizer.normalize(brain.portal_type)),
                'r_state':
                'state-{0}'.format(
                    normalizer.normalize(brain.review_state or '')),
                'title':
                brain.Title == '' and brain.id or brain.Title,
                'icon':
                self.getIcon(brain).url or '',
                'is_folderish':
                brain.is_folderish,
                'description':
                brain.Description or ''
            })
        # add catalog_ressults
        results['items'] = catalog_results
        # return results in JSON format
        return json.dumps(results)
Пример #2
0
    def __call__(self):
        self.datalines = []
        workflow = getToolByName(self, 'portal_workflow')

        # check for batch size
        if self.request.form.has_key('size'):
            batch_size = self.request.form['size']
        else:
            batch_size = 6

        # check for batch start
        if self.request.form.has_key('b_start'):
            batch_start = self.request.form['b_start']
        else:
            batch_start = 0

        sc = getToolByName(self.context, 'bika_setup_catalog')
        bc = getToolByName(self.context, 'bika_catalog')
        bac = getToolByName(self.context, 'bika_analysis_catalog')
        rc = getToolByName(self.context, 'reference_catalog')
        self.query_content = {}
        parm_lines = {}
        self.parms = []
        self.headings = {}
        self.headings['header'] = _("Analysis Requests")
        self.headings['head_parms'] = _("Selected on the following criteria")
        self.headings['head_undefined'] = _("Parameters undefined")

        count_all = 0
        query = {'portal_type': 'AnalysisRequest'}

        undefined = []

        # Client
        client_title = None
        if self.request.form.has_key('ClientUID'):
            client_uid = self.request.form['ClientUID']
            query['getClientUID'] = client_uid
            client = rc.lookupObject(client_uid)
            client_title = client.Title()
        else:
            client = logged_in_client(self.context)
            if client:
                client_title = client.Title()
                query['getClientUID'] = client.UID()
        if client_title:
            self.parms.append({
                'title': _('Client'),
                'fieldid': 'ClientUID',
                'value': client_title,
                'type': 'text'
            })
        else:
            undefined.append('Client')

        # Contact
        if self.request.form.has_key('ContactUID'):
            contact_uid = self.request.form['ContactUID']
            query['getContactUID'] = contact_uid
            contact = rc.lookupObject(contact_uid)
            contact_name = contact.getFullname()
            self.parms.append({
                'title': _('Contact'),
                'fieldid': 'ContactUID',
                'value': contact_name,
                'type': 'text'
            })
        else:
            undefined.append('Contact')

        # Profile
        if self.request.form.has_key('ProfileUID'):
            profile_uid = self.request.form['ProfileUID']
            query['getAnalysisProfileUID'] = profile_uid
            profile = rc.lookupObject(profile_uid)
            profile_title = profile.Title()
            self.parms.append({
                'title': _('Profile'),
                'value': profile_title,
                'type': 'text'
            })
        else:
            undefined.append('Profile')

        # Request ID
        if self.request.form.has_key('RequestID'):
            request_id = self.request.form['RequestID']
            query['getRequestID'] = request_id
            self.parms.append({
                'title': _('AR'),
                'value': request_id,
                'type': 'text'
            })
        else:
            undefined.append('AR')

        # Client order number
        if self.request.form.has_key('ClientOrderNumber'):
            clientoid = self.request.form['ClientOrderNumber']
            query['getClientOrderNumber'] = clientoid
            self.parms.append({
                'title': _('Client order number'),
                'value': clientoid,
                'type': 'text'
            })
        else:
            undefined.append('Client order number')

        # Client reference
        if self.request.form.has_key('ClientReference'):
            clientref = self.request.form['ClientReference']
            query['getClientReference'] = clientref
            self.parms.append({
                'title': _('Client reference'),
                'value': clientref,
                'type': 'text'
            })
        else:
            undefined.append('Client reference')

        # Client sample ID
        if self.request.form.has_key('ClientSampleID'):
            clientsid = self.request.form['ClientSampleID']
            query['getClientSampleID'] = clientsid
            self.parms.append({
                'title': _('Client sample ID'),
                'value': clientsid,
                'type': 'text'
            })
        else:
            undefined.append('Client sample ID')

        # Sample type
        if self.request.form.has_key('SampleTypeUID'):
            st_uid = self.request.form['SampleTypeUID']
            query['getSampleTypeUID'] = st_uid
            st = rc.lookupObject(st_uid)
            st_title = st.Title()
            self.parms.append({
                'title': _('Sample type'),
                'value': st_title,
                'type': 'text'
            })
        else:
            undefined.append('Sample type')

        # Sample point
        if self.request.form.has_key('SamplePointUID'):
            sp_uid = self.request.form['SamplePointUID']
            query['getSamplePointUID'] = sp_uid
            sp = rc.lookupObject(sp_uid)
            sp_title = sp.Title()
            self.parms.append({
                'title': _('Sample point'),
                'value': sp_title,
                'type': 'text'
            })
        else:
            undefined.append('Sample point')

        # Date sampled
        date_query = formatDateQuery(self.context, 'DateSampled')
        if date_query:
            query['created'] = date_query
            sampled = formatDateParms(self.context, 'DateSampled')
            self.parms.append({
                'title': _('Sampled'),
                'value': sampled,
                'type': 'text'
            })
        else:
            undefined.append('Sampled')

        # Date requested
        date_query = formatDateQuery(self.context, 'DateRequested')
        if date_query:
            query['created'] = date_query
            requested = formatDateParms(self.context, 'DateRequested')
            self.parms.append({
                'title': _('Requested'),
                'value': requested,
                'type': 'text'
            })
        else:
            undefined.append('Requested')

        # Date received
        date_query = formatDateQuery(self.context, 'DateReceived')
        if date_query:
            query['created'] = date_query
            received = formatDateParms(self.context, 'DateReceived')
            self.parms.append({
                'title': _('Received'),
                'value': received,
                'type': 'text'
            })
        else:
            undefined.append('Received')

        # Date published
        date_query = formatDateQuery(self.context, 'DatePublished')
        if date_query:
            query['getDatePublished'] = date_query
            published = formatDateParms(self.context, 'DatePublished')
            self.parms.append({
                'title': _('Published'),
                'value': published,
                'type': 'text'
            })
        else:
            undefined.append('Published')

        # Category
        if self.request.form.has_key('CategoryUID'):
            category_uid = self.request.form['CategoryUID']
            query['getCategoryUID'] = category_uid
            category = rc.lookupObject(category_uid)
            category_title = category.Title()
            self.parms.append({
                'title': _('Category'),
                'value': category_title,
                'type': 'text'
            })
        else:
            undefined.append('Category')

        # Analysis service
        if self.request.form.has_key('ServiceUID'):
            service_uid = self.request.form['ServiceUID']
            query['getServiceUID'] = service_uid
            service = rc.lookupObject(service_uid)
            service_title = service.Title()
            self.parms.append({
                'title': _('Analysis service'),
                'value': service_title,
                'type': 'text'
            })
        else:
            undefined.append('Analysis service')

        # Analyst
        if self.request.form.has_key('Analyst'):
            analyst = self.request.form['Analyst']
            query['getAnalyst'] = analyst
            analyst_name = self.user_fullname(analyst)
            self.parms.append({
                'title': _('Analyst'),
                'value': analyst_name,
                'type': 'text'
            })
        else:
            undefined.append('Analyst')

        # Status
        if self.request.form.has_key('review_state'):
            query['review_state'] = self.request.form['review_state']
            review_state = workflow.getTitleForStateOnType(
                self.request.form['review_state'], 'Analysis')
            self.parms.append({
                'title': _('Status'),
                'value': review_state,
                'type': 'text'
            })
        else:
            undefined.append('Status')

        # Cancellation state
        if self.request.form.has_key('cancellation_state'):
            query['cancellation_state'] = self.request.form[
                'cancellation_state']
            cancellation_state = workflow.getTitleForStateOnType(
                self.request.form['cancellation_state'], 'Analysis')
            self.parms.append({
                'title': _('Active'),
                'value': cancellation_state,
                'type': 'text'
            })
        else:
            undefined.append('Active')

        # Assigned to worksheet
        if self.request.form.has_key('ws_review_state'):
            query['worksheetanalysis_review_state'] = self.request.form[
                'ws_review_state']
            ws_review_state = workflow.getTitleForStateOnType(
                self.request.form['ws_review_state'], 'Analysis')
            self.parms.append({
                'title': _('Assigned to worksheet'),
                'value': ws_review_state,
                'type': 'text'
            })
        else:
            undefined.append('Assigned to worksheet')

        # set up the undefined parameters in pretty format
        undefined_string = ', '.join(undefined)
        self.parms_undefined = [{
            'title': _('Parameters not defined'),
            'value': undefined_string
        }]

        self.columns = batch_size + 1
        # and now lets do the actual query lines
        self.formats = {
            'columns': self.columns,
            'col_heads': [],
            'class': '',
        }

        labels = [
            "Client order ID", "Client reference", "Client sample ID",
            "Client", "Contact", "Request ID", "Sample ID", "Profile",
            "Sample type", "Sample point", "Sampled", "Requested", "Received",
            "Published", "Status", "Submitted by", "Verified by"
        ]
        for label in labels:
            self.datalines.append([{
                'value': _(label),
                'class': 'header',
            }])

        details = []
        for i in range(len(self.datalines)):
            details.append([])

        ars = bc(query)
        self.url = self.request.URL
        self.show_all = False

        self.batch = Batch(ars, batch_size, batch_start)

        analyses = []
        analysis_dict = {}
        service_dict = {}
        ar_ids = []
        for arp in self.batch:
            ar = arp.getObject()
            ar_ids.append(ar.getRequestID())
            details[0].append({'value': ar.getClientOrderNumber()})
            details[1].append({'value': ar.getClientReference()})
            details[2].append({'value': ar.getClientSampleID()})
            details[3].append({'value': ar.aq_parent.Title()})
            details[4].append({'value': ar.getContact().Title()})
            details[5].append({'value': ar.getRequestID()})
            details[6].append({'value': ar.getSample().getSampleID()})
            details[7].append(
                {'value': ar.getProfile() and ar.getProfile().Title() or ' '})
            details[8].append({'value': ar.getSampleTypeTitle()})

            details[10].append({
                'value':
                self.ulocalized_time(ar.getSample().getDateSampled())
            })
            details[11].append({'value': self.ulocalized_time(ar.created())})
            details[12].append(
                {'value': self.ulocalized_time(ar.getDateReceived())})
            details[13].append(
                {'value': self.ulocalized_time(ar.getDatePublished())})
            details[14].append(
                {'value': workflow.getInfoFor(ar, 'review_state')})
            #details[15].append({'value': ar.getSubmittedBy().Title()})
            details[15].append({'value': ' '})

            #details[16].append({'value': ar.get_verifier().Title()})
            details[16].append({'value': ' '})

            #analyses
            for analysis in ar.getAnalyses(full_objects=True):
                service_uid = analysis.getServiceUID()
                if not analysis_dict.has_key(service_uid):
                    service_dict[analysis.Title()] = service_uid
                    analysis_dict[service_uid] = {}
                analysis_dict[service_uid][
                    ar.getRequestID()] = analysis.getResult()

            if len(details[0]) == batch_size:
                break

        # load the detail lines
        for i in range(len(self.datalines)):
            self.datalines[i].extend(details[i])

        # load the analysis lines
        service_titles = service_dict.keys()
        service_titles.sort()

        for service_title in service_titles:
            service_uid = service_dict[service_title]
            analysis_line = [
                {
                    'value': service_title
                },
            ]
            for ar_id in ar_ids:
                if analysis_dict[service_uid].has_key(ar_id):
                    analysis_line.append(
                        {'value': analysis_dict[service_uid][ar_id]})
                else:
                    analysis_line.append({})
            self.datalines.append(analysis_line)

        # footer data
        self.footlines = []
        footline = []
        footitem = {'value': _('Total'), 'class': 'total_label'}
        footline.append(footitem)
        footitem = {'value': count_all}
        footline.append(footitem)
        self.footlines.append(footline)

        return self.template()
Пример #3
0
 def batch(self):
     start = int(self.request.get('b_start') or 0)
     return Batch(self.items, ITEMSPERPAGE, start, orphan=1)
Пример #4
0
 def solrResults(self, query, batch=True, b_size=20, b_start=0):
     """
     Do the search with solr.
     Add to the query some solr parameters.
     """
     solr_config = getUtility(ISolrConnectionConfig)
     for field in solr_config.required:
         query[field] = True
     query['facet'] = 'true'
     indexes_list = self.available_indexes.keys()
     indexes_list.append('portal_type')
     query['facet_field'] = indexes_list
     if batch:
         query['b_size'] = b_size
         query['b_start'] = b_start
     results = self.catalog(**query)
     res_dict = {'tabs': ['all']}
     if results.actual_result_count is None:
         res_dict['tot_results_len'] = 0
         return res_dict
     res_dict['tot_results_len'] = results.actual_result_count
     filtered_results = []
     global_facet_counts = getattr(results, 'facet_counts', None)
     if global_facet_counts:
         if hasattr(global_facet_counts, 'facet_fields'):
             # new c.solr with scorched lib
             facets = dict(
                 (k, dict(v))
                 for k, v in global_facet_counts.facet_fields.items())
         else:
             # old c.solr
             facets = global_facet_counts.get('facet_fields', {})
         res_dict['tabs'] = self.solrAvailableTabs(facets)
     active_tab = self.context.REQUEST.form.get('filter_tab')
     if active_tab:
         filtered_results = self.doFilteredSearch(active_tab, query)
     else:
         if self.tabs_order[0] != "all":
             for tab_id in self.tabs_order:
                 filtered_results = self.doFilteredSearch(tab_id, query)
                 if filtered_results:
                     break
     if filtered_results:
         facet_counts = getattr(filtered_results, 'facet_counts', None)
         results = IContentListing(filtered_results)
     else:
         facet_counts = getattr(results, 'facet_counts', None)
         results = IContentListing(results)
     if batch:
         results = Batch(results, b_size, b_start)
     res_dict['results'] = results
     if facet_counts:
         if hasattr(facet_counts, 'facet_fields'):
             # new c.solr with scorched lib
             facets = dict(
                 (k, dict(v)) for k, v in facet_counts.facet_fields.items())
         else:
             # old c.solr
             facets = facet_counts.get('facet_fields', {})
         res_dict['indexes_dict'] = self.solrFacetsFormatter(facets)
     return res_dict