39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from django.core.management.base import BaseCommand
|
|
from random import choices
|
|
from ...models import Voucher
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "bulk-add vouchers with a given prefix and generate a latex output to render them"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument("prefix", type=str)
|
|
parser.add_argument("amount", type=int)
|
|
|
|
def handle(self, *args, **options):
|
|
unabmigous_characters = "abcdefghijkmnopqrstuvwxyzACDEFHJKLMNPQRTUVWXY1234679"
|
|
|
|
vouchers = set()
|
|
while len(vouchers) < options["amount"]:
|
|
random_part = "".join(choices(unabmigous_characters, k=5))
|
|
vouchers.add(f"{options['prefix']}-{random_part}")
|
|
|
|
Voucher.objects.bulk_create(Voucher(code=v) for v in vouchers)
|
|
|
|
header = r"""\begin{document}
|
|
\begin{center}
|
|
"""
|
|
output = header
|
|
even = False
|
|
for v in vouchers:
|
|
output += f"\\voucher{{{v}}}"
|
|
if even:
|
|
output += "\\newline\n"
|
|
else:
|
|
output += "\n"
|
|
even = not even
|
|
|
|
output += r"""\end{center}
|
|
\end{document}"""
|
|
|
|
print(output)
|