Esempio n. 1
0
    def get_items(self, resource, context, *args):
        # Get the parameters from the query
        query = context.query
        search_text = query['search_text'].strip()
        field = query['search_type']
        m_status = query['crm_m_status']

        # Build the query
        args = list(args)
        args.append(PhraseQuery('format', 'mission'))
        args.append(PhraseQuery('crm_m_contact', resource.name))
        missions = resource.parent.parent.get_resource('missions')
        abspath = str(missions.get_canonical_path())
        args.append(PhraseQuery('parent_path', abspath))
        if search_text:
            args.append(PhraseQuery(field, search_text))
        # Insert status filter
        if m_status:
            status_query = []
            for s in m_status:
                status_query.append(PhraseQuery('crm_m_status', s))
            args.append(OrQuery(*status_query))
        if len(args) == 1:
            query = args[0]
        else:
            query = AndQuery(*args)

        # Ok
        crm = get_crm(resource)
        base_path_query = get_crm_path_query(crm)
        return context.root.search(AndQuery(query, base_path_query))
Esempio n. 2
0
 def get_items(self, resource, context, *args):
     # Build the query
     args = list(args)
     args.append(PhraseQuery('crm_m_contact', resource.name))
     if len(args) == 1:
         query = args[0]
     else:
         query = AndQuery(*args)
     # Ok
     crm = get_crm(resource)
     base_path_query = get_crm_path_query(crm)
     return context.root.search(AndQuery(query, base_path_query))
Esempio n. 3
0
 def test_mission_without_contact(self, resource, context):
     root = context.root
     query = AndQuery(get_crm_path_query(resource),
             PhraseQuery('format', 'mission'),
             PhraseQuery('crm_m_contact', ''))
     results_ = root.search(query)
     results = []
     for brain in results_.get_documents(sort_by='name'):
         mission = root.get_resource(brain.abspath)
         results.append({
             'title': mission.get_title(),
             'href': context.get_link(mission)})
     return {'title': u"Missions sans contact",
             'results': results}
Esempio n. 4
0
 def test_contact_without_companies(self, resource, context):
     root = context.root
     query = AndQuery(get_crm_path_query(resource),
             PhraseQuery('format', 'contact'),
             PhraseQuery('crm_p_company', ''))
     results_ = root.search(query)
     results = []
     for brain in results_.get_documents(sort_by='name'):
         contact = root.get_resource(brain.abspath)
         results.append({
             'title': contact.get_title(),
             'href': context.get_link(contact)})
     return {'title': u"Contacts sans société",
             'results': results}
Esempio n. 5
0
 def get_item_value(self, resource, context, item, column, cache={}):
     item_brain, item_resource = item
     if column == 'title':
         value = get_name(item_brain)
         href = '%s/' % context.get_link(item_resource)
         return value, href
     elif column == 'company':
         p_company = item_brain.crm_p_company
         if not p_company:
             return u''
         crm = get_crm(resource)
         company = crm.get_resource('companies/' + p_company)
         href = context.get_link(company)
         title = company.get_title()
         return title, href
     elif column == 'email':
         value = item_brain.crm_p_email
         href = 'mailto:%s' % value
         return value, href
     elif column == 'phones':
         return Phones(item_brain, 'crm_p_phone', 'crm_p_mobile')
     elif column == 'crm_p_assured':
         value = item_brain.crm_p_assured
         return format_amount(value, context)
     elif column == 'crm_p_probable':
         value = item_brain.crm_p_probable
         return format_amount(value, context)
     elif column.startswith('crm_m_'):
         # CSV export
         contact_name = item_brain.name
         mission_brain = cache.get(contact_name)
         if mission_brain is None:
             crm = get_crm(resource)
             query = AndQuery(
                     get_crm_path_query(crm),
                     PhraseQuery('format', 'mission'),
                     PhraseQuery('crm_m_contact', item_brain.name))
             results = context.root.search(query)
             last_missions = results.get_documents(sort_by='mtime',
                     reverse=True, size=1)
             if not last_missions:
                 return None
             mission_brain = cache[contact_name] = last_missions[0]
         if column == 'crm_m_title':
             column = 'title'
         return getattr(mission_brain, column)
     proxy = super(CRM_SearchContacts, self)
     return proxy.get_item_value(resource, context, item, column,
             cache=cache)
Esempio n. 6
0
    def _get_query(self, resource, context, *args):
        crm = get_crm(resource)
        search_term = context.query['search_term'].strip()
        tags = context.query['tags']

        # Build the query
        args = list(args)
        args.append(PhraseQuery('format', self.search_format))
        args.append(get_crm_path_query(crm))
        if search_term:
            args.append(PhraseQuery('text', search_term))
        if tags:
            args.append(PhraseQuery('tags', tags))

        return AndQuery(*args)
Esempio n. 7
0
 def get_item_value(self, resource, context, item, column, cache={}):
     item_brain, item_resource = item
     if column == 'checkbox':
         parent = item_resource.parent
         if parent is None:
             return None
         if item_resource.name in parent.__fixed_handlers__:
             return None
         id = resource.get_canonical_path().get_pathto(item_brain.abspath)
         id = str(id)
         return id, False
     elif column == 'alert':
         return get_alert_icon(item_brain.crm_m_alert, context)
     elif column == 'crm_m_alert':
         alert = item_brain.crm_m_alert
         if alert:
             return alert.date()
         return None
     elif column == 'status':
         # Status
         return ShortStatusIcon(item_brain.crm_m_status)
     elif column in ('contacts', 'contacts_csv'):
         m_contacts = item_brain.crm_m_contact
         query = [PhraseQuery('name', name) for name in m_contacts]
         if len(query) == 1:
             query = query[0]
         else:
             query = OrQuery(*query)
         crm = get_crm(resource)
         query = AndQuery(get_crm_path_query(crm), query)
         query = AndQuery(PhraseQuery('format', 'contact'), query)
         results = context.root.search(query)
         if column == 'contacts':
             pattern = u'<a href="{link}">{lastname}<br/>{firstname}</a>'
         else:
             pattern = u"{lastname} {firstname}"
         names = []
         for brain in results.get_documents(sort_by='crm_p_lastname'):
             link = context.get_link(brain)
             lastname = brain.crm_p_lastname.upper()
             firstname = brain.crm_p_firstname
             names.append(pattern.format(link=link, lastname=lastname,
                 firstname=firstname))
         if column == 'contacts':
             return MSG(u"<br/>".join(names), format='html')
         return u"\n".join(names)
     elif column == 'company':
         contact_id = item_brain.crm_m_contact[0]
         contact = resource.get_resource('contacts/' + contact_id)
         p_company = contact.get_property('crm_p_company')
         if not p_company:
             return u""
         company = resource.get_resource('companies/' + p_company)
         title = company.get_title()
         href = context.get_link(company)
         return title, href
     elif column == 'assigned':
         user_id = item_brain.crm_m_assigned
         return context.root.get_user_title(user_id)
     return super(CRM_SearchMissions, self).get_item_value(resource,
             context, item, column, cache=cache)
Esempio n. 8
0
File: menus.py Progetto: hforge/crm
 def get_crm_path_query(self, context):
     """Shortcut.
     """
     return get_crm_path_query(get_crm(context.resource))