From: Guillaume Pellerin Date: Thu, 25 Nov 2021 17:20:36 +0000 (+0100) Subject: update recovery command X-Git-Tag: 2.5.0~6 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=94740a23ac7f48ab7ebb0e773059758170e871d6;p=teleforma.git update recovery command --- diff --git a/teleforma/management/commands/teleforma-copy-students.py b/teleforma/management/commands/teleforma-copy-students.py index a7389999..f52ea6ab 100644 --- a/teleforma/management/commands/teleforma-copy-students.py +++ b/teleforma/management/commands/teleforma-copy-students.py @@ -30,33 +30,13 @@ class Command(BaseCommand): period_name = 'Annuelle' db_from = 'recovery' db_to = 'default' - logger = Logger('/var/log/app/student_import_recovery.log') + logger = Logger('/var/log/app/student_import_from_recovery.log') - def handle(self, *args, **options): - period = Period.objects.get(name=self.period_name) - - students_from = Student.objects.using(self.db_from).filter(period=period) - students_to = Student.objects.using(self.db_to).filter(period=period) - - user_tmp, c = User.objects.using(self.db_to).get_or_create(username='tmp') - - self.logger.logger.info('Number of student in from : ' + str(students_from.count())) - self.logger.logger.info('Number of student in to : ' + str(students_to.count())) - - students_to_email = [student.user.email for student in students_to if (hasattr(student, 'user') and hasattr(student.user, 'email'))] - new_students = [] + def process_student(self, student, new=True): + self.logger.logger.info('----------------------------------------------------------------') + self.logger.logger.info('START of processing: ' + str(student) + ' ' + student.user.username + ' ' + student.user.email) - for student in students_from: - # print(student) - if student.trainings.all(): - if hasattr(student, 'user'): - if not student.user.email in students_to_email: - new_students.append(student) - - self.logger.logger.info('Number of new students to copy : ' + str(len(new_students)) + '\n') - - for student in new_students: user = deepcopy(student.user) payments = deepcopy(student.payments.all()) discounts = deepcopy(student.discounts.all()) @@ -65,48 +45,105 @@ class Command(BaseCommand): trainings = student.trainings.all() profile = deepcopy(Profile.objects.using(self.db_from).get(user=student.user)) - user.pk = None - user.username = get_unique_username(user.first_name, user.last_name) - user.save(using=self.db_to) - - student.pk = None - student.user = None - student.save(using=self.db_to) - student.user = user - student.save(using=self.db_to) - profile.pk = None - profile.user = None - profile.save(using=self.db_to) - profile.user = user - profile.save(using=self.db_to) - - for training in trainings: - training_to = Training.objects.using(self.db_to).get(name=training.name, period=period) - student.trainings.add(training_to) + if new: + user.pk = None + user.username = get_unique_username(user.first_name, user.last_name) + user.save(using=self.db_to) + self.logger.logger.info('user created: ' + user.username) + + student.pk = None + student.user = None + student.save(using=self.db_to) + student.user = user + student.save(using=self.db_to) + self.logger.logger.info('student created: ' + student.user.username) + + profile.pk = None + profile.user = None + profile.save(using=self.db_to) + profile.user = user + profile.save(using=self.db_to) + self.logger.logger.info('profile created: ' + profile.user.username) + + for training in trainings: + training_to = Training.objects.using(self.db_to).get(name=training.name, period=self.period) + student.trainings.add(training_to) + self.logger.logger.info('training added: ' + ' ' + student.user.username) + else: + students_to = Student.objects.using(self.db_to).filter(user__email=student.user.email, period=self.period) + if students_to.count() > 1: + for s in students_to[1:]: + s.delete() + self.logger.logger.info('duplicated student deleted: ' + s.user.username) + student = students_to[0] for payment in payments: + date_created = deepcopy(payment.date_created) payment.pk = None payment.save(using=self.db_to) payment.student = student payment.save(using=self.db_to) + self.logger.logger.info('payment added: ' + student.user.username + \ + ', date created:' + str(date_created) + \ + ', value: ' + str(payment.value)) for discount in discounts: discount.pk = None discount.save(using=self.db_to) discount.student = student discount.save(using=self.db_to) + self.logger.logger.info('discount added: ' + str(discount.value)) for optional_fee in optional_fees: optional_fee.pk = None optional_fee.save(using=self.db_to) optional_fee.student = student optional_fee.save(using=self.db_to) + self.logger.logger.info('optional_fee added: ' + str(optional_fee.value)) for payback in paybacks: payback.pk = None payback.save(using=self.db_to) payback.student = student payback.save(using=self.db_to) + self.logger.logger.info('payback added: ' + str(payback.value)) + + self.logger.logger.info('END of processing: ' + str(student) + ' ' + student.user.username) + + def handle(self, *args, **options): + self.period = Period.objects.get(name=self.period_name) + + students_from = Student.objects.using(self.db_from).filter(period=self.period) + students_to = Student.objects.using(self.db_to).filter(period=self.period) + + user_tmp, c = User.objects.using(self.db_to).get_or_create(username='tmp') + + self.logger.logger.info('Number of student in from : ' + str(students_from.count())) + self.logger.logger.info('Number of student in to : ' + str(students_to.count())) + + students_to_email = [student.user.email for student in students_to if (hasattr(student, 'user') and hasattr(student.user, 'email'))] + + new_students = [] + re_registered_students = [] + + for student in students_from: + # print(student) + if student.trainings.all(): + if hasattr(student, 'user'): + if not student.user.email in students_to_email: + new_students.append(student) + else: + re_registered_students.append(student) + + # print(len(new_students)) + # print(len(re_registered_students)) + + self.logger.logger.info('Number of new students to copy : ' + str(len(new_students)) + '\n') + self.logger.logger.info('Number of new students to update : ' + str(len(re_registered_students)) + '\n') + + for student in new_students: + self.process_student(student) + for student in re_registered_students: + self.process_student(student, new=False) - self.logger.logger.info(str(student) + ' ' + student.user.username)