Esempio n. 1
0
def deactivate(modeladmin: admin.ModelAdmin, request: WSGIRequest,
               queryset: QuerySet):
    queryset.update(active=False)
    model = queryset.model
    model.objects.disconnect(model.signal, model.receiver, model)
    modeladmin.message_user(request,
                            _('Total deactivated: %s' % queryset.count()))
Esempio n. 2
0
def unlink_from_gsuite_action(modeladmin: ModelAdmin, request: HttpRequest, queryset: QuerySet) -> None:
    """ Unlink Users from GSuite """

    count, _ = GoogleAssociation.objects.filter(
        user__alumni__in=queryset).delete()
    modeladmin.message_user(
        request, 'Unlinked {} user(s) from their GSuite Account(s). '.format(count))
Esempio n. 3
0
 def unpublish_page(modeladmin: admin.ModelAdmin, request: HttpRequest, queryset: QuerySet):
     pages_updated = queryset.update(published=False)
     if pages_updated == 1:
         message = '1 page was'
     else:
         message = '{:d} page were'.format(pages_updated)
     modeladmin.message_user(request, '{:s} successfully marked as published.'.format(message))
Esempio n. 4
0
def disprove_tutorial_comment_action(modeladmin: ModelAdmin,
                                     request: HttpRequest, queryset: QuerySet):

    # After update update_queryset becomes empty because of applied exclusion
    # thus, we store update item primary keys in update_item_pks t use later
    update_queryset = queryset.exclude(
        confirm_status=ConfirmStatusChoices.DISPROVED).filter(is_active=True)
    update_item_pks = [comment.pk for comment in update_queryset]

    updated_count = update_queryset.update(
        confirm_status=ConfirmStatusChoices.DISPROVED)

    # Execute new query to get updated objects for notification
    send_mail_queryset = queryset.filter(
        pk__in=update_item_pks).select_related("user", "tutorial")

    # Send notifications
    confirm_disprove_notifier_result = TutorialCommentConfirmDisproveNotifier(
        request, send_mail_queryset).notify()

    modeladmin.message_user(request, f"{updated_count} مورد با موفقیت رد شد",
                            messages.SUCCESS)

    message_user_email_results(request, modeladmin,
                               confirm_disprove_notifier_result)
Esempio n. 5
0
def make_active_brother(modeladmin, request, queryset):
    group = Group.objects.get(name='Active Brother')
    for user in queryset:
        user.groups.add(group)
    ModelAdmin.message_user(self=modeladmin, request=request,
                            message='Selected users were added to the '
                                    'Active Brother group')
Esempio n. 6
0
def make_active_brother(modeladmin, request, queryset):
    group = Group.objects.get(name='Active Brother')
    for user in queryset:
        user.groups.add(group)
    ModelAdmin.message_user(self=modeladmin,
                            request=request,
                            message='Selected users were added to the '
                            'Active Brother group')
Esempio n. 7
0
def delete_expired_coupons(modeladmin, request, queryset):
    count = 0
    for coupon in queryset:
        expiration_date = coupon.ruleset.validity.expiration_date
        if timezone.now() >= expiration_date:
            coupon.delete()
            count += 1

    ModelAdmin.message_user(modeladmin, request, "{0} Expired coupons deleted!".format(count))
Esempio n. 8
0
def swap(model_admin: admin.ModelAdmin, request, queryset: QuerySet):
    if queryset.count() != 2:
        model_admin.message_user(request, _('Swapped can be only directly two matches.'), level=messages.ERROR)
        return

    first, second = queryset  # type: Match, Match
    first.match_term, second.match_term = second.match_term, first.match_term
    first.save(update_fields=['match_term', ])
    second.save(update_fields=['match_term', ])
    model_admin.message_user(request, _('Successfully swapped.'), level=messages.SUCCESS)
def reset_coupon_usage(modeladmin, request, queryset):
    to_update = []
    for coupon_user in queryset:
        if coupon_user.times_used > 0:
            coupon_user.times_used = 0
            to_update.append(coupon_user)

    CouponUser.objects.bulk_update(to_update,
                                   fields=['times_used'],
                                   batch_size=500)

    ModelAdmin.message_user(modeladmin, request, "Coupons reseted!")
Esempio n. 10
0
def _show_message(model_admin: ModelAdmin, request: HttpRequest, n: int,
                  message: str, error: str) -> None:
    if n == 0:
        model_admin.message_user(request, error, messages.ERROR)
    else:
        model_admin.message_user(
            request,
            message % {
                "count": n,
                "items": model_ngettext(model_admin.opts, n)
            },
            messages.SUCCESS,
        )
Esempio n. 11
0
def merge(modeladmin, request, queryset):
    main = queryset[0]
    tail = queryset[1:]

    related = main._meta.get_all_related_objects()
    valnames = dict()

    for r in related:
        valnames.setdefault(r.related_model, []).append(r.field.name)

    manyrelated = main._meta.get_all_related_many_to_many_objects()
    manyvalnames = dict()
    for r in manyrelated:
        manyvalnames.setdefault(r.related_model, []).append(r.field.name)

    for place in tail:
        for model, field_names in valnames.items():
            for field_name in field_names:
                model.objects.filter(**{field_name: place}).update(**{field_name: main})

        for model, field_names in manyvalnames.items():
            for field_name in field_names:
                for manytomany in model.objects.filter(**{field_name: place}):
                    manyfield = getattr(manytomany, field_name)  # gets attribute from string
                    manyfield.remove(place)
                    manyfield.add(main)

        place.delete()

    # merge all TeamsOnTournament on same Tournament for this Team
    modelname = modeladmin.__class__.__name__
    if modelname is 'TeamAdmin':
        tours = []
        team = Team.objects.get(name=main)
        totm = TeamOnTournament.objects.filter(team=team)
        for tour in totm:
            if tour.tournament not in tours:
                tours.append(tour.tournament)
        for tour in tours:
            totm = TeamOnTournament.objects.filter(team=team).filter(tournament=tour)
            if len(totm) > 1:
                for instance in totm[1:]:
                    for player in instance.players.all():
                        totm[0].players.add(player)
                    instance.delete()

    ModelAdmin.message_user(modeladmin, request, 'sloučeno, v objektu můžete zvolit výsledné jméno')
Esempio n. 12
0
def merge(modeladmin, request, queryset):
    main = queryset[0]
    tail = queryset[1:]

    related = main._meta.get_all_related_objects()
    valnames = dict()

    for r in related:
        valnames.setdefault(r.related_model, []).append(r.field.name)

    manyrelated = main._meta.get_all_related_many_to_many_objects()
    manyvalnames = dict()
    for r in manyrelated:
        manyvalnames.setdefault(r.related_model, []).append(r.field.name)

    for place in tail:
        for model, field_names in valnames.items():
            for field_name in field_names:
                model.objects.filter(**{field_name: place}).update(**{field_name: main})

        for model, field_names in manyvalnames.items():
            for field_name in field_names:
                for manytomany in model.objects.filter(**{field_name: place}):
                    manyfield = getattr(manytomany, field_name)  # gets attribute from string
                    manyfield.remove(place)
                    manyfield.add(main)

        place.delete()

    # merge all TeamsOnTournament on same Tournament for this Team
    modelname = modeladmin.__class__.__name__
    if modelname is 'TeamAdmin':
        tours = []
        team = Team.objects.get(name=main)
        totm = TeamOnTournament.objects.filter(team=team)
        for tour in totm:
            if tour.tournament not in tours:
                tours.append(tour.tournament)
        for tour in tours:
            totm = TeamOnTournament.objects.filter(team=team).filter(tournament=tour)
            if len(totm) > 1:
                for instance in totm[1:]:
                    for player in instance.players.all():
                        totm[0].players.add(player)
                    instance.delete()

    ModelAdmin.message_user(modeladmin, request, 'sloučeno, v objektu můžete zvolit výsledné jméno')
Esempio n. 13
0
def link_to_gsuite_action(modeladmin: ModelAdmin, request: HttpRequest,
                          queryset: QuerySet) -> None:
    """ Link to GSuite links users to a GSuite Account """
    profiles = get_user_model().objects.filter(alumni__in=queryset)

    link_gsuite_users(profiles,
                      False,
                      on_message=lambda x: modeladmin.message_user(request, x))
Esempio n. 14
0
def message_user_email_results(
    request: HttpRequest,
    modeladmin: ModelAdmin,
    notifications_result: NotificationResult,
):

    if notifications_result.success:
        successful_notifications_msg = (
            f"{notifications_result.success} اطلاعیه با موفقیت ارسال شد")
        modeladmin.message_user(request, successful_notifications_msg,
                                messages.SUCCESS)

    if notifications_result.failed:
        failed_notifications_msg = (
            f"ارسال {notifications_result.failed} اطلاعیه با خطا مواجه شد")
        modeladmin.message_user(request, failed_notifications_msg,
                                messages.ERROR)
Esempio n. 15
0
def disprove_tutorial_action(modeladmin: ModelAdmin, request: HttpRequest,
                             queryset: QuerySet):

    update_queryset = queryset.exclude(
        confirm_status=ConfirmStatusChoices.DISPROVED).filter(is_active=True)
    update_item_pks = [tutorial.pk for tutorial in update_queryset]

    updated = update_queryset.update(
        confirm_status=ConfirmStatusChoices.DISPROVED)

    # Execute new query to get updated objects for notification
    send_mail_queryset = queryset.filter(
        pk__in=update_item_pks).select_related("author")

    # Send notifications
    notifier = TutorialConfirmDisproveNotifier(request, send_mail_queryset)
    notify_result = notifier.notify()

    modeladmin.message_user(request, f"{updated} مورد با موفقیت رد شد",
                            messages.SUCCESS)

    message_user_email_results(request, modeladmin, notify_result)
Esempio n. 16
0
def confirm_tutorial_comment_action(
    modeladmin: ModelAdmin,
    request: HttpRequest,
    queryset: QuerySet[TutorialComment],
):

    # After update update_queryset becomes empty because of applied exclusion
    # then we store update item primary keys in update_item_pks t use later
    update_queryset = queryset.exclude(
        confirm_status=ConfirmStatusChoices.CONFIRMED).filter(is_active=True)
    update_item_pks = [comment.pk for comment in update_queryset]

    updated_count = update_queryset.update(
        confirm_status=ConfirmStatusChoices.CONFIRMED)

    # Execute new query to get updated objects for notification
    send_mail_queryset = queryset.filter(
        pk__in=update_item_pks).select_related("user", "tutorial",
                                               "parent_comment",
                                               "parent_comment__user")

    # Send notifications
    confirm_disprove_notifier_result = TutorialCommentConfirmDisproveNotifier(
        request, send_mail_queryset).notify()

    reply_notifier_result = TutorialCommentReplyNotifier(
        request, send_mail_queryset).notify()

    tutorial_author_new_comment_notifier_result = (
        TutorialAuthorNewConfirmedCommentNotifier(request,
                                                  send_mail_queryset).notify())

    emails_result = (confirm_disprove_notifier_result + reply_notifier_result +
                     tutorial_author_new_comment_notifier_result)

    # Send messages
    confirm_msg = f"{updated_count} مورد با موفقیت تایید شد"
    modeladmin.message_user(request, confirm_msg, messages.SUCCESS)
    message_user_email_results(request, modeladmin, emails_result)
Esempio n. 17
0
 def delete_statistics(modeladmin: admin.ModelAdmin, request: HttpRequest, queryset: QuerySet):
     for l in queryset:
         HitModel.objects.filter(for_link=l).delete()
     modeladmin.message_user(request, 'Statistics deleted')
Esempio n. 18
0
def reset_coupon_usage(modeladmin, request, queryset):
    for coupon_user in queryset:
        coupon_user.times_used = 0
        coupon_user.save()

    ModelAdmin.message_user(modeladmin, request, "Coupons reseted!")
Esempio n. 19
0
def move_to_rejected(modeladmin: admin.ModelAdmin, request: HttpRequest,
                     queryset: models.QuerySet):
    queryset.update(validation=Request.VALIDATION_REJECTED)
    modeladmin.message_user(request, _('Objects were updated successfully'))