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))
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))
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}
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}
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)
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)
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)
def get_crm_path_query(self, context): """Shortcut. """ return get_crm_path_query(get_crm(context.resource))