def import_rent_list(self, user_id): c = self.mconn.cursor() c.execute("select w.add_date, w.position, i.upc, i.id from wishes w inner join items i on w.ref_item=i.id where w.ref_user=%s order by w.id", [user_id,]) for add_date, position, upc, id in c.fetchall(): item = self.get_item(upc) if not item: self.missing_items.add(id) continue rl = RentList( user_id = user_id, item = item, order = position, added = add_date ) rl.save()
def do_weight_matrix(self): for o in RentList.get_priority1(): w = RentAllocationMatrix.calculate_weight(o) debug('Allocation weight for %s - %s %s (%s): %s (old: %s)', o.id, o.item, o.item.category, o.user, w, o.weight) if w != o.weight: o.weight = w o.save()
def add(request, id): item = get_object_or_404(Item, pk=id) if not request.is_ajax(): return redirect(item.get_absolute_url()) if request.method == 'POST': res = {} if 'move_to_1' in request.POST: RentList.add_to_list(request, item, True) if not request.user.is_authenticated(): return JsonResponse({'goto_url': reverse('new_rent:sign_up')}) res['redirect_to'] = reverse('members:rent_list') else: added_at = RentList.add_to_list(request, item) if not request.user.is_authenticated(): return JsonResponse({'goto_url': reverse('new_rent:sign_up')}) other_games = item.rent_games_like_this(5, user=request.user) context = { 'item': item, 'other_games': other_games, 'added_at': added_at, 'item_rent_status': item.get_rent_status(request.user), } res['form'] = loader.render_to_string('rent/dialogs/add.dialog.html', context, RequestContext(request)) return JsonResponse(res) elif 'quietly' in request.GET: added_at = RentList.add_to_list(request, item) if not request.user.is_authenticated(): return JsonResponse({'goto_url': reverse('new_rent:sign_up')}) other_games = item.rent_games_like_this(5, user=request.user) return render_to_response('rent/dialogs/add.dialog.html', { 'item': item, 'other_games': other_games, 'added_at': added_at, 'item_rent_status': item.get_rent_status(request.user), }, context_instance=RequestContext(request)) else: item_position = RentList.find_position(request, item) other_games = item.rent_games_like_this(5, user=request.user) return render_to_response('rent/dialogs/add.dialog.html', { 'item': item, 'other_games': other_games, 'added_at': item_position, 'at_home': item.get_rent_status(request.user) == 'At Home', 'item_rent_status': item.get_rent_status(request.user), }, context_instance=RequestContext(request))
def do_send_empty_list_nofitications(self): debug('Sending "empty" rent list notifications...') qs = MemberRentalPlan.objects.filter(status=RentalPlanStatus.Active) for member_plan in qs: if RentList.get(member_plan.user).count() < 10: user = member_plan.user debug(" Send to %s...", user.email) mail(user.email, "emails/rent_emails/add_more_games.html", { "user": user, }, subject="Your Rent List is Low! - Add More Games")
def _get_rent_list(user, limit=None): qs = RentList.get(user) if limit: qs = qs[:limit] res = [] for q in qs: res.append({ 'item': q, 'in_stock': Inventory.objects.filter(item=q.item, status=InventoryStatus.InStock, buy_only=False).count(), 'vendor': DistributorItem.objects.filter(item=q.item).exclude(distributor__id=5).count(), }) return res
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
def do_process_matrix(self): debug('Allocate inventory for buy orders...') self.do_allocate_inventory_for_buy_orders() debug('Canceling dead plans...') MemberRentalPlan.cancel_dead_plans() debug('Canceling expired plans...') MemberRentalPlan.cancel_expired_plans() debug('Calculating weights...') self.do_weight_matrix() debug('OK') debug('Processing matrix...') for o in RentList.get_priority1(): debug('--------------------------') debug('Allocation matrix for %s - %s %s (%s) %s', o.id, o.item, o.item.category, o.user, o.weight) RentAllocationMatrix.process_item(o) debug('OK')
def _rent_action(request, message=None): if request.is_ajax(): from project.members.context_processors import core list = RentList.get(request=request) context = { 'rent_list': list, } res = { 'rent_list': { 'size': list.count(), }, 'lists_size': core(request)['lists_size'], 'html': render_to_string('members/lists/rent_list_grid.html', context, RequestContext(request)), 'message': message, } return JsonResponse(res) return redirect('members:rent_list')
def move_to(request, id, pos): filter = {'pk': id} if request.user.is_authenticated(): filter['user'] = request.user else: filter['session_id'] = request.current_session_id item = get_object_or_404(RentList, **filter) r = [] for i in RentList.get(request=request): if i != item: r.append(i) pos = int(pos) r.insert(pos, item) for order, rr in itertools.izip(itertools.count(1), r): rr.order = order rr.save() return _rent_action(request)
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()], }
def move_down(request, id): filter = {'pk': id} if request.user.is_authenticated(): filter['user'] = request.user else: filter['session_id'] = request.current_session_id item = get_object_or_404(RentList, **filter) a, b = [], [] r = a for i in RentList.get(request=request): if i == item: if a: del a[-1] r = b else: r.append(i) for order, rr in itertools.izip(itertools.count(1), itertools.chain(a, [b[0]], [item], b[1:])): rr.order = order rr.save() return _rent_action(request)
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()], }
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()], }
def do_purge(self): MemberRentalPlan.purge_expired_plans() MemberRentalPlan.cleanup_expired_cancellations() RentList.purge()