mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-03-14 17:57:39 +00:00
start to write generate_wrapped script
This commit is contained in:
parent
cd942779ca
commit
b0c3eee699
211
apps/wrapped/management/commands/generate_wrapped.py
Normal file
211
apps/wrapped/management/commands/generate_wrapped.py
Normal file
@ -0,0 +1,211 @@
|
||||
# Copyright (C) 2028-2024 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
### Import ###
|
||||
|
||||
from argparse import ArgumentParser
|
||||
from django.core.management import BaseCommand
|
||||
|
||||
from note.models import Note
|
||||
from member.models import User, Club
|
||||
from ...models import Bde
|
||||
|
||||
########################################################################################################
|
||||
"""
|
||||
Cahier des charges :
|
||||
|
||||
- Un script lisible
|
||||
- Avec beaucoup d'options
|
||||
- Personnalisable
|
||||
"""
|
||||
########################################################################################################
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Generate wrapper for the annual BDE change"
|
||||
|
||||
def add_arguments(self, parser: ArgumentParser):
|
||||
parser.add_argument(
|
||||
'-b', '--bde',
|
||||
type=str,
|
||||
required=False,
|
||||
help="A list of BDE name, BDE1,BDE2,... (a BDE name cannot have ',')",
|
||||
dest='bde',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-i', '--id',
|
||||
type=str,
|
||||
required=False,
|
||||
help="A list of BDE id, id1,id2,...",
|
||||
dest='bde_id',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-u', '--users',
|
||||
type=str,
|
||||
required=False,
|
||||
help="""User will have their(s) wrapped generated,
|
||||
all = all users
|
||||
adh = all users who have a valid memberships to BDE during the BDE considered
|
||||
supersuser = all superusers
|
||||
custom user1,user2,... = a list of username,
|
||||
custom_id id1,id2,... = a list of user id""",
|
||||
dest='user',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-c', '--club',
|
||||
type=str,
|
||||
required=False,
|
||||
help="""Club will have their(s) wrapped generated,
|
||||
all = all clubs,
|
||||
active = all clubs with at least one transaction during the BDE mandate considered,
|
||||
custom club1,club2,... = a list of club name,
|
||||
custom_id id1,id2,... = a list of club id""",
|
||||
dest='club',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-f', '--force',
|
||||
required=False,
|
||||
action='store_true',
|
||||
help="if wrapped already exist delete it and regenerate",
|
||||
dest='force',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-d', '--delete',
|
||||
required=False,
|
||||
action='store_true',
|
||||
help="delete all wrapped selectionned and don't regenerate them",
|
||||
dest='delete',
|
||||
)
|
||||
|
||||
|
||||
def handle(self, *args, **options):
|
||||
# useful string for output
|
||||
red = '\033[31;1m'
|
||||
yellow = '\033[33;1m'
|
||||
green = '\033[32;1m'
|
||||
abort = red + 'ABORT'
|
||||
warning = yellow + 'WARNING'
|
||||
success = green + 'SUCCESS'
|
||||
|
||||
###################################
|
||||
#### Traitement des paramètres ####
|
||||
###################################
|
||||
verb = options['verbosity']
|
||||
bde = []
|
||||
if options['bde']:
|
||||
bde_list = options['bde'].split(',')
|
||||
bde = [Bde.objects.get(name=bde_name) for bde_name in bde_list]
|
||||
|
||||
if options['bde_id']:
|
||||
if bde:
|
||||
if verb >= 1:
|
||||
print(warning)
|
||||
print(yellow + 'You already defined bde with their name !')
|
||||
if verb >= 0: print(abort)
|
||||
return
|
||||
bde_id = options['bde_id'].split(',')
|
||||
bde = [Bde.objects.get(pk=i) for i in bde_id]
|
||||
|
||||
user = []
|
||||
if options['user']:
|
||||
if options['user'] == 'all':
|
||||
user = ['all',None]
|
||||
elif options['user'] == 'adh':
|
||||
user = ['adh',None]
|
||||
elif options['user'] == 'superuser':
|
||||
user = ['superuser',None]
|
||||
elif options['user'].split(' ')[0] == 'custom':
|
||||
user_list = options['user'].split(' ')[1].split(',')
|
||||
user = ['custom', [User.objects.get(username=u) for u in user_list]]
|
||||
elif options['user'].split(' ')[0] == 'custom_id':
|
||||
user_id = options['user'].split(' ')[1].split(',')
|
||||
user = ['custom_id', [User.objects.get(pk=u) for u in user_id]]
|
||||
else:
|
||||
if verb >= 1:
|
||||
print(warning)
|
||||
print(yellow + 'You user option is not recognized')
|
||||
if verb >= 0: print(abort)
|
||||
return
|
||||
|
||||
club = []
|
||||
if options['club']:
|
||||
if options['club'] == 'all':
|
||||
club = ['all',None]
|
||||
elif options['club'] == 'active':
|
||||
club = ['active',None]
|
||||
elif options['club'].split(' ')[0] == 'custom':
|
||||
club_list = options['club'].split(' ')[1].split(',')
|
||||
club = ['custom', [Club.objects.get(name=club_name) for club_name in club_list]]
|
||||
elif options['club'].split(' ')[0] == 'custom_id':
|
||||
club_id = options['club'].split(' ')[1].split(',')
|
||||
club = ['custom_id', [Club.objects.get(pk=c) for c in club_id]]
|
||||
else:
|
||||
if verb >= 1:
|
||||
print(warning)
|
||||
print(yellow + 'You club option is not recognized')
|
||||
if verb >= 0: print(abort)
|
||||
return
|
||||
|
||||
force = options['force']
|
||||
delete = options['delete']
|
||||
|
||||
# check if parameters are sufficient for generate wrapped with the desired option
|
||||
if not bde:
|
||||
if verb >= 1:
|
||||
print(warning)
|
||||
print(yellow + 'You have not selectionned a BDE !')
|
||||
if verb >= 0 : print(abort)
|
||||
return
|
||||
if not (user or club):
|
||||
if verb >= 1:
|
||||
print(warning)
|
||||
print(yellow + 'No club or user selected !')
|
||||
if verb >= 0 : print(abort)
|
||||
return
|
||||
|
||||
if verb >= 3:
|
||||
print('\033[1mOptions:\033[m')
|
||||
bde_str = ''
|
||||
for b in bde: bde_str += str(b)
|
||||
print('BDE: ' + bde_str)
|
||||
if user: print('User: ' + user[0])
|
||||
if club: print('Club: ' + club[0])
|
||||
print('force: ' + str(force))
|
||||
print('delete: ' + str(delete))
|
||||
print('')
|
||||
if verb >=1 and force:
|
||||
print(warning)
|
||||
print(yellow + 'force is set to true, some wrapped may be deleted !')
|
||||
if verb >=1 and delete:
|
||||
print(warning)
|
||||
print(yellow + 'wrapped will be deleted !')
|
||||
if verb >= 2 or force or delete:
|
||||
a = str(input('\033[mContinue ? (y/n) ')).lower()
|
||||
if a in ['n','no','non','0']:
|
||||
if verb >= 0: print(abort)
|
||||
return
|
||||
|
||||
# à partir de maintenant si ça foire ce n'est plus de la faute de l'utilisateur...
|
||||
#########################################
|
||||
#### Transform club and user in note ####
|
||||
#########################################
|
||||
|
||||
########################
|
||||
#### Delete wrapped ####
|
||||
########################
|
||||
|
||||
###########################################
|
||||
#### Global data (in all user wrapped) ####
|
||||
########## modify it each year ! ##########
|
||||
###########################################
|
||||
|
||||
#################################
|
||||
########## Unique data ##########
|
||||
##### modify it each year ! #####
|
||||
#################################
|
||||
|
||||
###############################
|
||||
#### Create/Change wrapped ####
|
||||
###############################
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user