Beispiel #1
0
    def change_view(self, request, object_id, extra_context=None):
        obj = self.get_object(request, admin.util.unquote(object_id))
        if obj is None:
            raise Http404("Profile object with primary key %d does not exist." % object_id)

        last_order_buy = obj.user.buyorder_set.order_by("-id")
        last_order_buy = last_order_buy[0] if len(last_order_buy) > 0 else None

        last_order_trade = obj.user.tradeorder_set.order_by("-id")
        last_order_trade = last_order_trade[0] if len(last_order_trade) > 0 else None

        last_order_rent = obj.user.rentorder_set.order_by("-id")
        last_order_rent = last_order_rent[0] if len(last_order_rent) > 0 else None

        stat = {
            "buy": {
                "last_date": last_order_buy.create_date if last_order_buy else "",
                "status": "Active" if obj.user.buyorder_set.count() else "Inactive",
                "earned_total": obj.user.buyorder_set.aggregate(Sum("total"))["total__sum"] or 0,
                "earned_avg": obj.user.buyorder_set.aggregate(Avg("total"))["total__avg"] or 0,
            },
            "trade": {
                "last_date": last_order_trade.create_date if last_order_trade else "",
                "status": "Active" if obj.user.tradeorder_set.count() else "Inactive",
                "earned_total": obj.user.tradeorder_set.aggregate(Sum("total"))["total__sum"] or 0,
                "earned_avg": obj.user.tradeorder_set.aggregate(Avg("total"))["total__avg"] or 0,
            },
            "rent": {
                "last_date": last_order_rent.date_rent if last_order_rent else "",
                "status": "Active" if obj.user.rentorder_set.count() else "Inactive",
                "earned_total": obj.user.billinghistory_set.filter(status=0).aggregate(Sum("debit"))["debit__sum"] or 0,
                "earned_avg": obj.user.billinghistory_set.filter(status=0).aggregate(Avg("debit"))["debit__avg"] or 0,
            },
        }
        stat["earned_total"] = (
            stat["buy"]["earned_total"] + stat["trade"]["earned_total"] + stat["rent"]["earned_total"]
        ) / 3
        stat["earned_avg"] = (stat["buy"]["earned_avg"] + stat["trade"]["earned_avg"] + stat["rent"]["earned_avg"]) / 3

        last_order = {}
        last_order["buy"] = last_order_buy
        last_order["trade"] = last_order_trade
        last_order["rent"] = last_order_rent

        buy_cart, _created = BuyCart.objects.get_or_create(user=obj.user)
        trade_list = TradeListItem.get_for_user(obj.user)

        extra_context = extra_context or {}
        extra_context.update(
            {
                "stat": stat,
                "last_order": last_order,
                "cart": buy_cart,
                "cart_total": sum([item.get_retail_price() * item.quantity for item in buy_cart.items.all()]),
                "trade_list": trade_list,
                "trade_total": sum([item.get_price() for item in trade_list]),
            }
        )
        return super(ProfileAdmin, self).change_view(request, object_id, extra_context)
def core(request):
    result = {}

    if not request.user.is_authenticated():
        result['login_form'] = AuthenticationByEmailForm.create(request)
        result['sigup_form'] = SignupForm(request)

    lists_size = request.buy_list.count() + \
        RentList.get(request=request).count() + \
        TradeListItem.get(request).count()

    result['lists_size'] = lists_size

    return result
Beispiel #3
0
def  _trade_action(request):
    if request.is_ajax():
        from project.members.context_processors import core
        list = TradeListItem.get(request)
        context = {
            'trade_list': list,
            'trade_list_total': sum([item.get_price() for item in list])
        }
        res = {
            'trade_list': {
                'size': list.count(),
            },
            'lists_size': core(request)['lists_size'],
            'html': render_to_string('members/lists/trade_list_grid.html', context, RequestContext(request)),
        }
        return JsonResponse(res)
    return redirect('trade:list')
Beispiel #4
0
def rent_list(request):
    rent_plan = MemberRentalPlan.get_current_plan(request.user)
    rent_list = RentList.get(request=request)
    if request.user.is_authenticated():
        rent_orders = RentOrder.objects.filter(user=request.user).order_by('-id')
        rent_orders = rent_orders.filter(status__in=[RentOrderStatus.Pending, RentOrderStatus.Prepared, RentOrderStatus.Shipped])
        rent_orders = rent_orders.filter(list_item=None)
    else:
        rent_orders = None
    return {
        'buy_list': request.buy_list,
        'trade_list': TradeListItem.get(request),
        'rent_plan': rent_plan,
        'rent_list': rent_list,
        'rent_orders': rent_orders,
        'pending_credits': request.user.get_profile().get_pending_credits(),
        'banners': [ListPageBanner.objects.get_random()],
    }
Beispiel #5
0
def buy_list(request):
    if request.method == 'POST':
        # add to cart
        cart = BuyCart.get(request)
        for item in request.buy_list:
            if ('item-%d' % item.id) in request.POST:
                cart.push_item(request, item.item, inc_quantity=1, is_new=item.is_new)
                item.delete()
        return redirect(reverse('cart:index'))

    date_x = datetime.now() - timedelta(30)
    buy_orders = BuyOrder.objects.filter(user=request.user, create_date__gt=date_x).exclude(status=BuyOrderStatus.Canceled) if request.user.is_authenticated() else None

    return {
        'buy_list': request.buy_list,
        'buy_orders': buy_orders,
        'trade_list': TradeListItem.get(request),
        'rent_list': RentList.get(request=request),
        'pending_credits': request.user.get_profile().get_pending_credits(),
        'banners': [ListPageBanner.objects.get_random()],
    }
Beispiel #6
0
def list(request):
    trade_list = TradeListItem.get(request)
    trade_list_total = sum([item.get_price() for item in trade_list])

    if request.method == 'POST':
        # add to cart
        cart = TradeCart.get(request)
        for item in trade_list:
            if ('item-%d' % item.id) in request.POST:
                cart.push_item(request, item.item, inc_quantity=1, is_complete=item.is_complete)
                item.delete()
        return redirect(reverse('trade:cart'))

    orders = TradeOrder.objects.filter(user=request.user).extra(where=["exists(select * from trade_tradeorderitem where order_id=trade_tradeorder.id and processed='f')"])

    return {
        'buy_list': request.buy_list,
        'rent_list': RentList.get(request.user, request),
        'trade_orders': orders,
        'trade_list': trade_list,
        'trade_list_total': trade_list_total,
        'pending_credits': request.user.get_profile().get_pending_credits(),
        'banners': [ListPageBanner.objects.get_random()],
    }
Beispiel #7
0
def add(request, id):
    item = get_object_or_404(Item, id=id)
    if not request.is_ajax():
        return redirect(item.get_absolute_url())

    if request.method == 'POST':
        dest_wizard = False
        form = AddItemCompletenessForm(request.POST)
        if form.is_valid():
            is_complete = form.cleaned_data['completeness'] == 'cg'

            is_valid_choice = True
            if not is_complete:
                if not request.user.is_authenticated():
                    is_valid_choice = False
                elif not request.user.get_profile().has_game_perks():
                    is_valid_choice = False

            if is_valid_choice:
                if request.POST.get('submit') == 'list':
                    # add to list
                    TradeListItem.add(request, item, is_complete)
                    if request.user.is_authenticated():
                        return JsonResponse({'redirect_to': reverse('trade:list')})
                    else:
                        request.session['entry_point'] = ProfileEntryPoint.Trade
                        return JsonResponse({'goto_url': reverse('members:create_account')})
                else:
                    # add to cart
                    if not item.trade_flag:
                        return redirect(item.get_absolute_url())
                    cart = TradeCart.get(request)
                    cart.push_item(request, item, inc_quantity=1, is_complete=is_complete)
                    if request.user.is_authenticated():
                        dest = reverse('trade:cart')
                    else:
                        request.session['entry_point'] = ProfileEntryPoint.Trade
                        return JsonResponse({'goto_url': reverse('members:create_account')})
#                        dest_wizard = True
#                        dest = reverse('trade:login')

                template = 'trade/check_upc.html'
                form = CheckUPCForm()
            else:
                template = 'trade/add.dialog.html'
                dest = None
        else:
            template = 'trade/add.dialog.html'
            dest = None

        ctx = {
            'form': form,
            'item': item,
            'dest': dest,
            'dest_wizard': dest_wizard,
        }

        res = {}
        res['form'] = loader.render_to_string(template, ctx, RequestContext(request))
        return JsonResponse(res)

    form = AddItemCompletenessForm()
    return render_to_response('trade/add.dialog.html',
                          {'form': form, 'item': item, },
                          context_instance=RequestContext(request))