def handle(self, *args, **options): now = datetime.datetime.now() print 'started', now ads_with_views_lt_2 = ViewsCount.objects.filter( date__range=[now - datetime.timedelta(days=30), now], basead__ad__user__in=User.get_user_ids_with_active_plan(), basead__ad__is_published=True, ).values_list('basead').annotate(contacts_views=Sum('contacts_views')).filter(contacts_views__lt=2) ads_without_views = Ad.objects.filter( user__in=User.get_user_ids_with_active_plan(), is_published=True, viewscounts__isnull=True ).extra(select={'contacts_views': 0}).values_list('basead_ptr', 'contacts_views') count = 0 for query in (ads_with_views_lt_2, ads_without_views): for basead_id, contacts_views in query: # для 0 или 1 реальных просмотров итоговое число просмотров с учетом добавленных будет от 2 до 3 views_to_add = random.randint(2 - contacts_views, 3 - contacts_views) updated_rows = ViewsCount.objects.filter(basead_id=basead_id, date=now.date(), is_fake=True).update( detail_views=F('detail_views') + views_to_add, contacts_views=F('contacts_views') + views_to_add, ) if not updated_rows: ViewsCount.objects.create(basead_id=basead_id, date=now.date(), is_fake=True, detail_views=views_to_add, contacts_views=views_to_add) count += 1 print 'finished %s, added views for %d ads' % (datetime.datetime.now(), count)
def queryset(self, request, queryset): if self.value() == 'plan': return queryset.filter( users__in=User.get_user_ids_with_active_plan()) elif self.value() == 'ppk': return queryset.filter( users__in=User.get_user_ids_with_active_ppk()).distinct() elif self.value() == 'plan_ppk': ids = set(User.get_user_ids_with_active_plan()) | set( User.get_user_ids_with_active_ppk()) return queryset.filter(users__in=ids).distinct() return queryset
def queryset(self, request, queryset): if self.value() == 'bank': return queryset.filter(bank__isnull=False) if self.value() == 'import': return queryset.filter(user__isnull=False, xml_id__gt=0) elif self.value() == 'parser': return queryset.filter(user__isnull=True) elif self.value() == 'user': return queryset.filter(bank__isnull=True, user__isnull=False) elif self.value() == 'person': return queryset.filter(user__isnull=False, user__agencies__isnull=True) elif self.value() == 'agency': return queryset.filter(user__agencies__isnull=False) elif self.value() == 'export': return queryset.filter(international_catalog__isnull=False) elif self.value() == 'plan': from custom_user.models import User return queryset.filter( user__in=User.get_user_ids_with_active_plan(), addr_country='UA') elif self.value() == 'ppk': return queryset.filter(user__activityperiods__isnull=False, user__activityperiods__end=None) elif self.value() == 'ppk_shared': return queryset.filter( user__activityperiods__isnull=False, user__activityperiods__end=None, user__leadgeneration__dedicated_numbers=False) return queryset
def filter_user_by_plan(queryset, parameter): from custom_user.models import User if parameter == 'w-plan': return queryset.filter(pk__in=User.get_user_ids_with_active_plan()) elif parameter == 'w-money-wo-plan': users_with_money = [ transaction['user'] for transaction in Transaction.objects.values('user').annotate( balance=models.Sum('amount')).order_by('user') if transaction['balance'] > 0 ] return queryset.filter(pk__in=users_with_money).exclude( pk__in=User.get_user_ids_with_active_plan()) elif parameter == 'wo-ads-w-plan': return queryset.filter(pk__in=User.get_user_ids_with_active_plan(), ads_count=0) elif parameter == 'w-ads-wo-plan': return queryset.filter(ads_count__gt=0).exclude( pk__in=User.get_user_ids_with_active_plan()) elif parameter == 'w-overlimit': users_with_overlimit = UserPlan.objects.filter( end__gt=datetime.datetime.now(), user__ads_count__gt=models.F('plan__ads_limit')).values_list( 'user', flat=True).order_by('user') return queryset.filter(pk__in=users_with_overlimit) elif parameter == 'w-expired-plan': prev_month_end = datetime.date.today().replace( day=1) - datetime.timedelta(days=1) prev_month_start = prev_month_end.replace(day=1) users_with_plan_in_prev_month = UserPlan.objects.filter( start__lt=prev_month_end, end__gt=prev_month_start).exclude( transactions__amount=0).values_list('user', flat=True) user_ids_w_expired_plan = set(users_with_plan_in_prev_month) - set( User.get_user_ids_with_active_plan()) return queryset.filter(pk__in=user_ids_w_expired_plan) elif parameter == 'w-plan-first-time': user_ids_w_plan_first_time = set( UserPlan.objects.filter( plan__is_active=True, user__in=User.get_user_ids_with_active_plan()).values( 'user').annotate(cnt=models.Count('user')).filter( cnt=1).values_list('user', flat=True)) return queryset.filter(pk__in=user_ids_w_plan_first_time) elif parameter == 'wo-any': return queryset.filter(transactions__isnull=True, ads__isnull=True) elif parameter == 'w-ppk': return queryset.filter(pk__in=User.get_user_ids_with_active_ppk())
def handle(self, **options): # translation.activate('uk') translation.activate('ru') if 'test_users' in options and options['test_users']: users_query = User.objects.filter(id__in=options['test_users']) else: # regions_id = Region.objects.get(id=55).get_children_ids() users_id = User.get_user_ids_with_active_plan() | set( User.get_user_ids_with_active_ppk()) users_query = User.objects.filter( # email__gt='', subscribe_news=True, ads__region__in=regions_id # email__gt='', subscribe_news=True, ads_count__gt=0 email__gt='', subscribe_news=True, id__in=users_id).distinct().order_by('id') if options['start_from_user']: users_query = users_query.filter( id__gte=options['start_from_user']) # pynliner - тормоз, лучше внутрь цикла его не класть content = render_to_string( 'mail/mailing/mail_about_new_services.jinja.html', {}) content_with_inline_css = pynliner.fromString(content) for user in users_query: print 'user #%d' % user.id message = EmailMessage( u'Обновленный раздел "Услуги" + мобильные номера телефонов', content_with_inline_css, settings.DEFAULT_FROM_EMAIL, [user.email]) message.content_subtype = 'html' message.send()