Пример #1
0
def search_details_analytics(request, search_data_domain=2):
    if len(request.GET) > 0:
        domain = request.GET.get('domain', '2')

        form = get_form_for_domain(int(domain))(request.GET, user=request.user)
        if form.is_valid():
            sqs = form.get_query()
            sqs = sqs.facet('sector_id').facet('loc_state')
            buyer_seller_results = sqs.facet('buyer_relevance_profile').facet('seller_relevance_profile')
            if int(search_data_domain) == 3:
                buyer_table, buyer_table_avg = get_fomrated_table(buyer_seller_results.facet_counts()['fields']['buyer_relevance_profile'])
                seller_table, seller_table_avg = get_fomrated_table(buyer_seller_results.facet_counts()['fields']['seller_relevance_profile'])
            else:
                buyer_table = []
                buyer_table_avg = []
                seller_table = []
                seller_table_avg = []

            # Create a control based on the params
            control = create_control_query(request.GET)
            control_form = get_form_for_domain(search_data_domain)(control, user=request.user, page_type='results')

            if control_form.is_valid():
                control_sqs = control_form.get_query()
                response_dict = get_query_analytics(sqs, control_sqs, search_data_domain=int(search_data_domain))
                response_dict['search_data_domain'] = int(domain)
                response_dict['buyer_table'] = buyer_table
                response_dict['seller_table'] = seller_table
                response_dict['buyer_table_avg'] = buyer_table_avg
                response_dict['seller_table_avg'] = seller_table_avg

                return response_dict

    return {}
Пример #2
0
def search_ajax(request, search_data_domain, data_url):
    show_analytics = False
    chart = None
    paginator = []
    paginate = False

    # Search Request
    qp = QueryParser()
    q = request.GET.get('q')
    
    params = qp.convert_to_query(request.GET.copy(), q)
    search_form = get_form_for_domain(search_data_domain)(params, user=request.user)

    # Return the Search results with pagination
    if search_form.is_valid():
        sqs = search_form.get_query()

        # Create a control based on the params
        control = create_control_query(params)
        control_form = get_form_for_domain(search_data_domain)(control, user=request.user)

        if control_form.is_valid():
            control_sqs = control_form.get_query()

            # Paginate Results
            paginate = is_paginate(search_form)
            rpp = calculate_results_per_page(search_form)

            paginator = get_paginated_results(sqs, request, rpp)

            if show_analytics:
                chart = get_analytics_for_domain(sqs, control_sqs, search_data_domain)

    else:
        paginator =  get_fake_paginator(0, 0, 1)
        paginate = False
        show_analytics = False

    response = {
        'results_paginator': paginator,
        'max_score': sqs.max_score(),
        'paginate': paginate,
        'chart': chart,
        'show_analytics': show_analytics
    }

    # Redirect to the right page based on the data_url
    return response, data_url
Пример #3
0
def save_search_query(request):
    user = request.user
    search_form_data = request.GET.copy()
    save_search_id = search_form_data.get('adv-save_search_id', None)
    save_search_name = ''
    url = ''
    domain = search_form_data.get('domain', SEARCH_DATA_DOMAIN_RECORD)
    existing = False
    
    # Update/Create an entry on the govini_saved_search
    # Update
    if save_search_id:
        update_params(search_form_data)
        search_form = get_form_for_domain(int(domain))(search_form_data, user=request.user, prefix='adv', page_type='advance')
        if search_form.is_valid():
            save_search = GoviniSavedSearch.objects.get(id=save_search_id)
            save_search.search_form_data = search_form.cleaned_data
            save_search.save()
            save_search_id = save_search.id
            save_search_name = save_search.name
            url = save_search.get_absolute_url()
            ds = 'domain='
            index = url.find('domain') + ds.__len__()
            if url[index] == '&':
                save_search.content_type = domain
                save_search.save()
        # TODO: Return Errors

    #Create
    else:
        save_search_name = search_form_data.get('save_search_name')
        update_params(search_form_data)
        search_form = get_form_for_domain(int(domain))(search_form_data, user=request.user)
        if search_form.is_valid():
            save_search = GoviniSavedSearch.objects.create(name = save_search_name,
                                                           user = user,
                                                           search_form_data = search_form.cleaned_data,
                                                           content_type = int(domain))
            save_search_id = save_search.id
            save_search_name = save_search.name
            url = save_search.get_absolute_url()
    return {
        'save_search_id': save_search_id,
        'save_search_name' : save_search_name,
        'url' : url,
        'existing': existing,
    }
Пример #4
0
def search_element_analytics_candle(request):

    if len(request.GET) > 0:
        domain = request.GET.get('domain', '2')

        form = get_form_for_domain(int(domain))(request.GET, user=request.user)
        if form.is_valid():
            sqs = form.get_query()
            pp = False if form['show_element_cycle_analytics_bool'].value() == 'false' else True

            return get_query_element_chart(sqs, request, show_cycle_time=pp)

    return {}
Пример #5
0
def domain_facet(request):

    domain = request.GET.get('domain', '1')
    qp = QueryParser()
    q = request.GET.get('q')
    params = qp.convert_to_query(request.GET.copy(), q)
    search_form = get_form_for_domain(int(domain))(params, user=request.user)
    domain_facet = get_domain_facet(search_form, request.user, domain)

    return {
        'domain': "%s" % domain,
        'domain_facet': domain_facet
    }
Пример #6
0
def search_element_analytics(request):

    if len(request.GET) > 0:
        domain = request.GET.get('domain', '2')

        form = get_form_for_domain(int(domain))(request.GET, user=request.user)
        if form.is_valid():
            sqs = form.get_query()
            sqs = sqs.facet('sector_id').facet('loc_state')
            pp = True if form['show_element_industry_analytics_bool'].value() == 'true' else False

            industry_list = str(form['industries'].value()).split(',')
            status_list = form.cleaned_data['element_status']

            return get_query_element_analytics(sqs, show_industry=pp, industry_list=industry_list, status_list=status_list)

    return {}
Пример #7
0
def adv_search(request, search_data_domain, data_url, redirect_url, popup_url):

    fields_to_hide = ('place_of_performance')

    # For Silver Users and above
    if request.user.govini_profile.get().is_paid_subscriber():

        # Save Search / Search Popup
        if len(request.GET) > 0:
            #Prepare to reload
            params=request.GET.copy()
            
            # TODO: Fix hacks for state and industry
            state_abbrv = params.get('state_abbrv', None)
            if state_abbrv:
                params['state'] = state_abbrv

            try:
                no_amount = params['no_amount']
            except:
                no_amount = None
            if not no_amount or no_amount == 'True':
                params['no_amount'] = True
            elif no_amount == 'False':
                params['no_amount'] = False
                
            try:
                current_status_only = params['current_status_only']
            except:
                current_status_only = None
            if not current_status_only or current_status_only == 'False':
                params['current_status_only'] = False
            elif current_status_only == 'True':
                params['current_status_only'] = True

            sector=params.getlist('sector')

            element_status = params.getlist('element_status')
            procurement_status = get_procurement_from_element(element_status)
            grant_status = get_grant_from_element(element_status)              

            industry = params.getlist('industry')
            set_autocomplete(params)

            try:
                if procurement_status:
                    del params['procurement_status']
            except:
                pass
            try:
                if grant_status:
                    del params['grant_status']
            except:
                pass
            if element_status:
                del params['element_status']
            if sector:
                del params['sector']
            if industry:
                del params['industry']
            else:
                params = extract_industry_from_industries(params)
            

            search_form = get_form_for_domain(search_data_domain)(initial=params, fields_to_hide=fields_to_hide,
                                                                   user=request.user, page_type='advance',
                                                                   prefix='adv', sector=sector, procurement_status = procurement_status,
                                                                   grant_status=grant_status, element_status=element_status, 
                                                                   industry=industry)

        #Validate Advance Search
        elif len(request.POST) > 0:
            params = request.POST.copy()
            update_params(params)
            search_form = get_form_for_domain(search_data_domain)(params, user=request.user, fields_to_hide=fields_to_hide, page_type='advance', prefix='adv')
            #Redirect to Search
            if search_form.is_valid():
                url_params = search_form.data.urlencode()
                url_params = convert_to_url(search_form.cleaned_data)
                _log.debug('Cleaned Data URL Encoding = %s' %url_params)

                # Cache Form data for IE
                browser = request.META['HTTP_USER_AGENT']
                if browser.find('MSIE') > 0:
                    request.session['search_form_type'] = SEARCH_DATA_DOMAIN_PEOPLE
                    request.session['search_form_data'] = url_params

                search_url = '%s?%s' %(redirect_url, url_params)

                return redirect(search_url)
            #Return the form with errors
            else:
                _log.error('Advance Search: Form is not valid. Error = %s' %search_form.errors)
        # New Form
        else:
            # IE Back Button Workaround
            browser = request.META['HTTP_USER_AGENT']
            if browser.find('MSIE') > 0:
                # Retrieve form Variables from session
                params = retrieve_params_from_session(request, SEARCH_DATA_DOMAIN_PEOPLE)

                if params:
                    search_form = get_form_for_domain(search_data_domain)(params, fields_to_hide=fields_to_hide, user=request.user, page_type='advance', prefix='adv')
                else:
                    # Create a new form
                    search_form = get_form_for_domain(search_data_domain)(fields_to_hide=fields_to_hide, user=request.user, page_type='advance', prefix='adv')
            # Create a new form
            else:
                search_form = get_form_for_domain(search_data_domain)(fields_to_hide=fields_to_hide, user=request.user, page_type='advance', prefix='adv')

        #Return to original form
        response = {
            'adv_search_form': search_form,
        }
        
        # Ajax Request
        if request.is_ajax():            
            return render_to_response(popup_url, response, context_instance=RequestContext(request))
        else:
            return render_to_response(data_url, response, context_instance=RequestContext(request))
    
    #Redirect to Home Page
    else:
        return redirect(default_view)
Пример #8
0
def search(request, search_data_domain, data_url, ajax_url):

    # For filtering, we will need to hide the following fields from the form
    fields_to_hide = ('q', 'state', 'state_abbrv', 'naics_code', 'fsc_code', 'nigp_code', 'cfda_code', 'start_amount', 'end_amount', 'city', 'county', 'industries', 'start_date', 'end_date', 'industry', 'place_of_performance', 'sector', 'last_name', 'first_name', 'none_of_these_words', 'exact_phrase', 'element_status', 'procurement_status', 'grant_status', 'no_amount', 'any_of_these_words', 'county_names', 'wo_elements', 'current_status_only', 'org_id', 'person_id')
    domain_facet = {}
    charts = {}
    entity_id = None
    quarters = []
    if len(request.GET) > 0:
        # Retrieve the Form based on the domain
        # Quick Search
        qp = QueryParser()
        q = request.GET.get('q')
        params = qp.convert_to_query(request.GET.copy(), q)
        
        #TODO: Hack. Fix Later
        if 'no_amount' not in params:
            params['no_amount'] = True
        search_form = get_form_for_domain(search_data_domain)(params, fields_to_hide=fields_to_hide, user=request.user, page_type='results')
        _log.debug('Search Form Data = %s' % search_form.data)

        # For Overview and Advance Search, we will need to run the query and return the results and facets
        if  search_form.is_valid():
            sqs = search_form.get_query()
            quarters = quarters_range(search_form._default_query_fields.get('maxDate'),
                                      search_form._default_query_fields.get('minDate'))

            # Create a control based on the params
            control = create_control_query(params)
            control_form = get_form_for_domain(search_data_domain)(control, fields_to_hide=fields_to_hide, user=request.user, page_type='results')

            if control_form.is_valid():
                control_sqs = control_form.get_query()
                buyer_seller_results = sqs.facet('buyer_relevance_profile').facet('seller_relevance_profile')
                if search_data_domain == 3:
                    buyer_table, buyer_table_avg = get_fomrated_table(buyer_seller_results.facet_counts()['fields']['buyer_relevance_profile'])
                    seller_table, seller_table_avg = get_fomrated_table(buyer_seller_results.facet_counts()['fields']['seller_relevance_profile'])
                else:
                    buyer_table = []
                    buyer_table_avg = []
                    seller_table = []
                    seller_table_avg = []

                # log query
                tasks.log_query.delay(q, request.user, search_data_domain)

                # Results Per Page
                paginate = is_paginate(search_form)
                rpp = calculate_results_per_page(search_form)

                # Facets
                sqs = sqs.facet('sector_id').facet('loc_state')
                domain = request.GET.get('domain', '1')
                qp = QueryParser()
                q = request.GET.get('q')
                params = qp.convert_to_query(request.GET.copy(), q)

                new_search_form = get_form_for_domain_facet()(params, user=request.user)
                domain_facet = get_domain_facet(new_search_form, request.user, search_data_domain)
                paginator = get_paginated_results(sqs, request, rpp)
                charts = get_query_analytics(sqs, control_sqs, search_data_domain)

        else:
            # For errors, no results will be displayed with empty charts
            _log.error('Search: Form is not valid. Error = %s' % search_form.errors)

            paginator = get_fake_paginator(0, 0, 1)
            paginate = False
            charts = {
                'sector_chart': get_sector_analytics([]),
                'sector_chart_bar': get_sector_analytics_bar([]),
                'state_chart': get_state_bar_graph([])
            }

        try:
            max_score = sqs.max_score()
        except:
            max_score = 1

        response = {
                    'search_form': search_form,
                    'max_score': max_score,
                    'results_paginator': paginator,
                    'paginate': paginate,
                    'search_data_domain': search_data_domain,
                    'ajax_url': ajax_url,
                    'quarters': quarters,
                    'domain_facet': domain_facet,
                    'domain': "%s" % search_data_domain,
            }

        # Append the charts to the response
        response.update(charts)

        return response, data_url


    else:
        # Redirect back to the Home Page
        return redirect(default_view)