def GET(self, name):
        """ Get countries."""
        logger.debug("Query: %s" % (web.input()))

        country_name = web.input().get('country_name')
        if country_name:
            results = Country.get_from_name(country_name)
        else:
            results = Country.get_all()

        if not results:
            raise Error(NORESULT)
        data = results_to_countries(results)
        return data
Exemple #2
0
def get_all_payments(request):
    try:
        records = UserPayment.objects.all().order_by('-modification_date')
    except ObjectDoesNotExist:
        body = {
            'status': 'error',
            'message': 'No se puede consultar la lista de pagos recurrentes'
        }
        return HttpResponse(json.dumps(body),
                            content_type='application/json',
                            status=http_BAD_REQUEST)

    datatables = request.GET
    draw = int(datatables['draw'])
    length = int(datatables['length'])
    start = int(datatables['start'])
    search = datatables['search[value]']
    records_total = records.count()
    records_filtered = records_total

    # Columns Dict
    columns_dic = {
        '3': 'user__country__name',
        '4': 'user__country__name',
        '5': 'user__country__name',
        '6': 'recurrence',
        '7': 'user__country__name',
        '8': 'status',
    }

    # Filter
    def filter_table(filter_col, column_index):
        filter_input = filter_col.replace('^', '').replace('$', '')

        filtered_records = records.filter(
            **{columns_dic[column_index]: filter_input})

        if len(filter_input) == 51:
            date_filter = filter_input.split(',')
            # modification_date
            if column_index == '4':
                filtered_records = records.filter(
                    modification_date__range=[date_filter[0], date_filter[1]])
            # payment_date
            elif column_index == '5':
                filtered_records = records.filter(payment_date__range=[
                    date_filter[0][slice(10)], date_filter[1][slice(10)]
                ])

        # expiration
        if column_index == '7':
            if filter_col == 'true':
                filtered_records = records.filter(
                    user__expiration__gt=date.today())
            elif filter_col == 'false':
                filtered_records = records.filter(
                    user__expiration__lte=date.today())

        return filtered_records

    # Find Filters
    for key, value in columns_dic.iteritems():
        for param in datatables:
            if len(param) > 8 and param[8] == key:
                value = datatables['columns[' + key + '][search][value]']

                if value:
                    records = filter_table(value, key)
                    records_total = records.count()
                    records_filtered = records_total
                    break

    # Order Dict
    order_dic = {
        '0': 'user_id',
        '1': 'amount',
        '2': 'currency__name',
        '3': 'user__country__name',
        '4': 'modification_date',
        '5': 'payment_date',
        '6': 'recurrence',
        '8': 'status',
        '9': 'retries',
    }

    # Order
    for param in datatables:
        if param[slice(5)] == 'order':
            column = datatables['order[0][column]']
            direction = datatables['order[0][dir]']

            if direction == 'desc':
                records = records.order_by('-' + order_dic[column])
            elif direction == 'asc':
                records = records.order_by(order_dic[column])
            break

    # Search
    if search:
        records = UserPayment.objects.filter(
            Q(user__user_id__icontains=search) | Q(amount__icontains=search)
            | Q(currency__name__icontains=search)
            | Q(user__country__name__icontains=search)
            | Q(recurrence__icontains=search) | Q(retries__icontains=search)
            | Q(message__icontains=search) | Q(payment_date__icontains=search)
            | Q(payday__icontains=search) | Q(message__icontains=search))
        records_total = records.count()
        records_filtered = records_total

    # Paginator
    paginator = Paginator(records, length)
    page_number = start / length + 1

    try:
        object_list = paginator.page(page_number).object_list
    except PageNotAnInteger:
        print 'PageNotAnInteger'
        object_list = paginator.page(1).object_list
    except EmptyPage:
        print 'EmptyPage'
        object_list = paginator.page(1).object_list

    countries = Country.get_all()
    data = []

    for payment in object_list:
        up_data = payment.user_payment_id.split("_")
        user_id = "%s_%s_%s" % (up_data[1], up_data[2], up_data[3])

        ret = {}
        ret['amount'] = payment.amount
        ret['channel'] = payment.channel
        ret['country'] = countries[up_data[1]]["name"]
        ret['creation_date'] = payment.creation_date
        ret['currency'] = countries[up_data[1]]["currency"]
        ret['disc_counter'] = payment.disc_counter
        ret['disc_pct'] = payment.disc_pct
        ret['enabled'] = payment.enabled
        ret['message'] = payment.message
        ret['is_active'] = payment.user.is_active
        ret['modification_date'] = payment.modification_date
        ret['payday'] = payment.payday
        ret['payment_date'] = payment.payment_date
        ret['recurrence'] = payment.recurrence
        ret['retries'] = payment.retries
        ret['status'] = payment.status
        ret['user_payment_id'] = payment.user_payment_id
        ret['user'] = user_id

        data.append(ret)

    body = {
        'data': data,
        'draw': draw,
        'recordsFiltered': records_filtered,
        'recordsTotal': records_total,
    }

    return HttpResponse(json.dumps(body, cls=DjangoJSONEncoder),
                        content_type='application/json',
                        status=http_REQUEST_OK)