Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
    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()