def total_spending(request, format=None): codes = utils.param_to_list(request.query_params.get('code', [])) codes = utils.get_bnf_codes_from_number_str(codes) subdivide = request.GET.get('subdivide', None) if subdivide: if codes: if len(codes) > 1: err = 'Error: You can only subdivide a single code' return Response(err, status=400) elif len(codes[0]) > 11: err = 'Error: Code to subdivide must be 11 characters or fewer' return Response(err, status=400) spending_type = utils.get_spending_type(codes) if spending_type is False: err = 'Error: Codes must all be the same length' return Response(err, status=400) if subdivide: query = _get_query_for_total_spending_with_subdivide(codes) else: query = _get_query_for_total_spending(codes) if spending_type != 'presentation': codes = [c + '%' for c in codes] data = utils.execute_query(query, [codes]) return Response(data)
def total_spending(request, format=None): codes = utils.param_to_list(request.query_params.get('code', [])) codes = utils.get_bnf_codes_from_number_str(codes) spending_type = utils.get_spending_type(codes) if spending_type is False: err = CODE_LENGTH_ERROR return Response(err, status=400) query = _get_query_for_total_spending(codes) if spending_type != 'presentation': codes = [c + '%' for c in codes] data = utils.execute_query(query, [codes]) return Response(data)
def spending_by_practice(request, format=None): codes = utils.param_to_list(request.query_params.get('code', [])) codes = utils.get_bnf_codes_from_number_str(codes) orgs = utils.param_to_list(request.query_params.get('org', [])) date = request.query_params.get('date', None) spending_type = utils.get_spending_type(codes) if spending_type is False: err = 'Error: Codes must all be the same length' return Response(err, status=400) if spending_type == 'bnf-section' or spending_type == 'product': codes = [c + '%' for c in codes] if not date and not orgs: err = 'Error: You must supply either ' err += 'a list of practice IDs or a date parameter, e.g. ' err += 'date=2015-04-01' return Response(err, status=400) org_for_param = None if not spending_type or spending_type == 'bnf-section' \ or spending_type == 'chemical': # We can do presentation queries indexed by PCT ID, which is faster. # We have yet to update the *_by_practice matviews with PCT ID. # So for these queries, expand the CCG ID to a list of practice IDs. expanded_orgs = utils.get_practice_ids_from_org(orgs) if codes: query = _get_chemicals_or_sections_by_practice(codes, expanded_orgs, spending_type, date) org_for_param = expanded_orgs else: query = _get_total_spending_by_practice(expanded_orgs, date) org_for_param = expanded_orgs else: query = _get_presentations_by_practice(codes, orgs, date) org_for_param = orgs data = utils.execute_query( query, [codes, org_for_param, [date] if date else []]) return Response(data)
def spending_by_ccg(request, format=None): codes = utils.param_to_list(request.query_params.get('code', [])) codes = utils.get_bnf_codes_from_number_str(codes) orgs = utils.param_to_list(request.query_params.get('org', [])) spending_type = utils.get_spending_type(codes) if spending_type is False: err = CODE_LENGTH_ERROR return Response(err, status=400) if not spending_type or spending_type == 'bnf-section' \ or spending_type == 'chemical': query = _get_query_for_chemicals_or_sections_by_ccg(codes, orgs, spending_type) else: query = _get_query_for_presentations_by_ccg(codes, orgs) if spending_type == 'bnf-section' or spending_type == 'product': codes = [c + '%' for c in codes] data = utils.execute_query(query, [codes, orgs]) return Response(data)
def spending_by_ccg(request, format=None): codes = utils.param_to_list(request.query_params.get('code', [])) codes = utils.get_bnf_codes_from_number_str(codes) orgs = utils.param_to_list(request.query_params.get('org', [])) spending_type = utils.get_spending_type(codes) if spending_type is False: err = 'Error: Codes must all be the same length' return Response(err, status=400) if not spending_type or spending_type == 'bnf-section' \ or spending_type == 'chemical': query = _get_query_for_chemicals_or_sections_by_ccg(codes, orgs, spending_type) else: query = _get_query_for_presentations_by_ccg(codes, orgs) if spending_type == 'bnf-section' or spending_type == 'product': codes = [c + '%' for c in codes] data = utils.execute_query(query, [codes, orgs]) return Response(data)