diff --git a/core/models.py b/core/models.py index 1d1d4266..e7a74cd1 100644 --- a/core/models.py +++ b/core/models.py @@ -469,36 +469,6 @@ class User(AbstractBaseUser): else: create = True super(User, self).save(*args, **kwargs) - if ( - create and settings.IS_OLD_MYSQL_PRESENT - ): # Create user on the old site: TODO remove me! - import MySQLdb - - try: - db = MySQLdb.connect(**settings.OLD_MYSQL_INFOS) - c = db.cursor() - c.execute( - """INSERT INTO utilisateurs (id_utilisateur, nom_utl, prenom_utl, email_utl, hash_utl, ae_utl) VALUES - (%s, %s, %s, %s, %s, %s)""", - ( - self.id, - self.last_name, - self.first_name, - self.email, - "valid", - "0", - ), - ) - db.commit() - except Exception as e: - with open(settings.BASE_DIR + "/user_fail.log", "a") as f: - print( - "FAIL to add user %s (%s %s - %s) to old site" - % (self.id, self.first_name, self.last_name, self.email), - file=f, - ) - print("Reason: %s" % (repr(e)), file=f) - db.rollback() def make_home(self): if self.home is None: diff --git a/migrate.py b/migrate.py deleted file mode 100644 index bead1a51..00000000 --- a/migrate.py +++ /dev/null @@ -1,1700 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding:utf-8 -* -# -# Copyright 2016,2017 -# - Skia -# -# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, -# http://ae.utbm.fr. -# -# This program is free software; you can redistribute it and/or modify it under -# the terms of the GNU General Public License a published by the Free Software -# Foundation; either version 3 of the License, or (at your option) any later -# version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple -# Place - Suite 330, Boston, MA 02111-1307, USA. -# -# - -import MySQLdb -import os -import django -import random -import datetime -from io import StringIO -from pytz import timezone -from os import listdir - -os.environ["DJANGO_SETTINGS_MODULE"] = "sith.settings" -os.environ["DJANGO_COLORS"] = "nocolor" -django.setup() - -from django.db import IntegrityError -from django.conf import settings -from django.core.management import call_command -from django.db import connection -from django.forms import ValidationError -from django.core.files import File - - -from core.models import User, SithFile -from core.utils import doku_to_markdown, bbcode_to_markdown -from club.models import Club, Membership, Mailing, MailingSubscription -from counter.models import ( - Customer, - Counter, - Selling, - Refilling, - Product, - ProductType, - Permanency, - Eticket, -) -from subscription.models import Subscription -from eboutic.models import Invoice, InvoiceItem -from accounting.models import ( - BankAccount, - ClubAccount, - GeneralJournal, - Operation, - AccountingType, - Company, - SimplifiedAccountingType, - Label, -) -from sas.models import Album, Picture, PeoplePictureRelation -from forum.models import ( - Forum, - ForumTopic, - ForumMessage, - ForumMessageMeta, - ForumUserInfo, -) -from pedagogy.models import UV, UVComment, UVResult - -db = MySQLdb.connect(**settings.OLD_MYSQL_INFOS) -start = datetime.datetime.now() - - -def reset_index(*args): - sqlcmd = StringIO() - call_command("sqlsequencereset", *args, stdout=sqlcmd) - cursor = connection.cursor() - cursor.execute(sqlcmd.getvalue()) - - -def to_unicode(s): - if s: - return bytes(s, "cp1252", errors="replace").decode("utf-8", errors="replace") - return "" - - -def migrate_core(): - def migrate_users(): - SEX = {"1": "MAN", "2": "WOMAN", None: "MAN"} - TSHIRT = { - None: "-", - "": "-", - "NULL": "-", - "XS": "XS", - "S": "S", - "M": "M", - "L": "L", - "XL": "XL", - "XXL": "XXL", - "XXXL": "XXXL", - } - ROLE = { - "doc": "DOCTOR", - "etu": "STUDENT", - "anc": "FORMER STUDENT", - "ens": "TEACHER", - "adm": "ADMINISTRATIVE", - "srv": "SERVICE", - "per": "AGENT", - None: "", - } - DEPARTMENTS = { - "tc": "TC", - "gi": "GI", - "gesc": "GESC", - "na": "NA", - "mc": "MC", - "imap": "IMAP", - "huma": "HUMA", - "edim": "EDIM", - "ee": "EE", - "imsi": "IMSI", - "truc": "NA", - None: "NA", - } - - def get_random_free_email(): - email = "no_email_%s@git.an" % random.randrange(4000, 40000) - while User.objects.filter(email=email).exists(): - email = "no_email_%s@git.an" % random.randrange(4000, 40000) - return email - - c = db.cursor(MySQLdb.cursors.SSDictCursor) - c.execute( - """ - SELECT * - FROM utilisateurs utl - LEFT JOIN utl_etu ue - ON ue.id_utilisateur = utl.id_utilisateur - LEFT JOIN utl_etu_utbm ueu - ON ueu.id_utilisateur = utl.id_utilisateur - LEFT JOIN utl_extra uxtra - ON uxtra.id_utilisateur = utl.id_utilisateur - LEFT JOIN loc_ville ville - ON utl.id_ville = ville.id_ville - -- WHERE utl.id_utilisateur = 9360 - """ - ) - User.objects.filter(id__gt=0).delete() - print("Users deleted") - - for u in c: - try: - new = User( - id=u["id_utilisateur"], - last_name=to_unicode(u["nom_utl"]) or "Bou", - first_name=to_unicode(u["prenom_utl"]) or "Bi", - email=u["email_utl"], - second_email=u["email_utbm"] or "", - date_of_birth=u["date_naissance_utl"], - last_update=u["date_maj_utl"], - nick_name=to_unicode(u["surnom_utbm"]), - sex=SEX[u["sexe_utl"]], - tshirt_size=TSHIRT[u["taille_tshirt_utl"]], - role=ROLE[u["role_utbm"]], - department=DEPARTMENTS[u["departement_utbm"]], - dpt_option=to_unicode(u["filiere_utbm"]), - semester=u["semestre_utbm"] or 0, - quote=to_unicode(u["citation"]), - school=to_unicode(u["nom_ecole_etudiant"]), - promo=u["promo_utbm"] or 0, - forum_signature=to_unicode(u["signature_utl"]), - address=( - to_unicode(u["addresse_utl"]) - + ", " - + to_unicode(u["cpostal_ville"]) - + " " - + to_unicode(u["nom_ville"]) - ), - parent_address=( - to_unicode(u["adresse_parents"]) - + ", " - + to_unicode(u["cpostal_parents"]) - + " " - + to_unicode(u["ville_parents"]) - ), - phone=u["tel_portable_utl"] or "", - parent_phone=u["tel_parents"] or "", - is_subscriber_viewable=bool(u["publique_utl"]), - ) - new.generate_username() - new.set_password(str(random.randrange(1000000, 10000000))) - new.save() - except IntegrityError as e: - if "Key (email)" in repr(e): - new.email = get_random_free_email() - new.save() - print("New email generated") - else: - print("FAIL for user %s: %s" % (u["id_utilisateur"], repr(e))) - except Exception as e: - print("FAIL for user %s: %s" % (u["id_utilisateur"], repr(e))) - c.close() - print("Users migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_profile_pict(): - PROFILE_ROOT = "/data/matmatronch/" - - profile = SithFile.objects.filter(parent=None, name="profiles").first() - profile.children.all().delete() - print("Profiles pictures deleted") - for filename in listdir(PROFILE_ROOT): - if filename.split(".")[-2] != "mini": - try: - uid = filename.split(".")[0].split("-")[0] - user = User.objects.filter(id=int(uid)).first() - if user: - f = File(open(PROFILE_ROOT + "/" + filename, "rb")) - f.name = f.name.split("/")[-1] - t = filename.split(".")[1] - new_file = SithFile( - parent=profile, - name=filename, - file=f, - owner=user, - is_folder=False, - mime_type="image/jpeg", - size=f.size, - ) - if t == "identity": - new_file.save() - user.profile_pict = new_file - user.save() - elif t == "blouse": - new_file.save() - user.scrub_pict = new_file - user.save() - else: - new_file.save() - user.avatar_pict = new_file - user.save() - except Exception as e: - print(repr(e)) - print("Profile pictures migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - migrate_users() - migrate_profile_pict() - - -def migrate_club(): - def migrate_clubs(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM asso asso - WHERE nom_unix_asso <> "ae" - AND nom_unix_asso <> "bdf" - AND nom_unix_asso <> "laverie" - """ - ) - # club = cur.fetchone() - # for k,v in club.items(): - # print("%40s | %40s" % (k, v)) - - for c in cur: - try: - new = Club( - id=c["id_asso"], - name=to_unicode(c["nom_asso"]), - unix_name=to_unicode(c["nom_unix_asso"]), - address=to_unicode(c["adresse_postale"]), - ) - new.save() - except Exception as e: - print("FAIL for club %s: %s" % (c["nom_unix_asso"], repr(e))) - cur.execute( - """ - SELECT * - FROM asso - """ - ) - for c in cur: - club = Club.objects.filter(id=c["id_asso"]).first() - parent = Club.objects.filter(id=c["id_asso_parent"]).first() - club.parent = parent - club.save() - cur.close() - print("Clubs migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_club_memberships(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM asso_membre - """ - ) - - Membership.objects.all().delete() - print("Memberships deleted") - for m in cur: - try: - club = Club.objects.filter(id=m["id_asso"]).first() - user = User.objects.filter(id=m["id_utilisateur"]).first() - if club and user: - new = Membership( - id=Membership.objects.count() + 1, - club=club, - user=user, - start_date=m["date_debut"], - end_date=m["date_fin"], - role=m["role"], - description=to_unicode(m["desc_role"]), - ) - new.save() - except Exception as e: - print("FAIL for club membership %s: %s" % (m["id_asso"], repr(e))) - cur.close() - print("Clubs memberships migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - # migrate_clubs() - migrate_club_memberships() - - -def migrate_subscriptions(): - LOCATION = {5: "SEVENANS", 6: "BELFORT", 9: "MONTBELIARD", None: "SEVENANS"} - TYPE = { - 0: "un-semestre", - 1: "deux-semestres", - 2: "cursus-tronc-commun", - 3: "cursus-branche", - 4: "membre-honoraire", - 5: "assidu", - 6: "amicale/doceo", - 7: "reseau-ut", - 8: "crous", - 9: "sbarro/esta", - 10: "cursus-alternant", - None: "un-semestre", - } - PAYMENT = {1: "CHECK", 2: "CARD", 3: "CASH", 4: "OTHER", 5: "EBOUTIC", 0: "OTHER"} - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM ae_cotisations - """ - ) - - Subscription.objects.all().delete() - print("Subscriptions deleted") - Customer.objects.all().delete() - print("Customers deleted") - for r in cur: - try: - user = User.objects.filter(id=r["id_utilisateur"]).first() - if user: - new = Subscription( - id=r["id_cotisation"], - member=user, - subscription_start=r["date_cotis"], - subscription_end=r["date_fin_cotis"], - subscription_type=TYPE[r["type_cotis"]], - payment_method=PAYMENT[r["mode_paiement_cotis"]], - location=LOCATION[r["id_comptoir"]], - ) - new.save() - except Exception as e: - print("FAIL for subscription %s: %s" % (r["id_cotisation"], repr(e))) - cur.close() - print("Subscriptions migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - -def migrate_counter(): - def update_customer_account(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM ae_carte carte - JOIN ae_cotisations cotis - ON carte.id_cotisation = cotis.id_cotisation - """ - ) - for r in cur: - try: - user = Customer.objects.filter(user_id=r["id_utilisateur"]).first() - if user: - user.account_id = str(r["id_carte_ae"]) + r["cle_carteae"].lower() - user.save() - except Exception as e: - print( - "FAIL to update customer account for %s: %s" - % (r["id_cotisation"], repr(e)) - ) - cur.close() - print("Customer accounts migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_counters(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_comptoir - """ - ) - Counter.objects.all().delete() - for r in cur: - try: - club = Club.objects.filter(id=r["id_assocpt"]).first() - new = Counter( - id=r["id_comptoir"], - name=to_unicode(r["nom_cpt"]), - club=club, - type="OFFICE", - ) - new.save() - except Exception as e: - print("FAIL to migrate counter %s: %s" % (r["id_comptoir"], repr(e))) - cur.close() - eboutic = Counter.objects.filter(id=3).first() - eboutic.type = "EBOUTIC" - eboutic.save() - print("Counters migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def reset_customer_amount(): - Refilling.objects.all().delete() - Selling.objects.all().delete() - Invoice.objects.all().delete() - for c in Customer.objects.all(): - c.amount = 0 - c.save() - print("Customer amount reset") - - def migrate_refillings(): - BANK = { - 0: "OTHER", - 1: "SOCIETE-GENERALE", - 2: "BANQUE-POPULAIRE", - 3: "BNP", - 4: "CAISSE-EPARGNE", - 5: "CIC", - 6: "CREDIT-AGRICOLE", - 7: "CREDIT-MUTUEL", - 8: "CREDIT-LYONNAIS", - 9: "LA-POSTE", - 100: "OTHER", - None: "OTHER", - } - PAYMENT = {2: "CARD", 1: "CASH", 0: "CHECK"} - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_rechargements - """ - ) - root_cust = Customer.objects.filter(user__id=0).first() - mde = Counter.objects.filter(id=1).first() - Refilling.objects.all().delete() - print("Refillings deleted") - fail = 100 - for r in cur: - try: - cust = Customer.objects.filter(user__id=r["id_utilisateur"]).first() - user = User.objects.filter(id=r["id_utilisateur"]).first() - if not cust: - if not user: - cust = root_cust - else: - cust = Customer( - user=user, - amount=0, - account_id=Customer.generate_account_id(fail), - ) - cust.save() - fail += 1 - op = User.objects.filter(id=r["id_utilisateur_operateur"]).first() - counter = Counter.objects.filter(id=r["id_comptoir"]).first() - new = Refilling( - id=r["id_rechargement"], - counter=counter or mde, - customer=cust or root_cust, - operator=op or root_cust.user, - amount=r["montant_rech"] / 100, - payment_method=PAYMENT[r["type_paiement_rech"]], - bank=BANK[r["banque_rech"]], - date=r["date_rech"].replace(tzinfo=timezone("Europe/Paris")), - ) - new.save() - except Exception as e: - print( - "FAIL to migrate refilling %s for %s: %s" - % (r["id_rechargement"], r["id_utilisateur"], repr(e)) - ) - cur.close() - print("Refillings migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_typeproducts(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_type_produit - """ - ) - ProductType.objects.all().delete() - print("Product types deleted") - for r in cur: - try: - new = ProductType( - id=r["id_typeprod"], - name=to_unicode(r["nom_typeprod"]), - description=to_unicode(r["description_typeprod"]), - ) - new.save() - except Exception as e: - print( - "FAIL to migrate product type %s: %s" % (r["nom_typeprod"], repr(e)) - ) - cur.close() - print("Product types migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_products(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_produits - """ - ) - Product.objects.all().delete() - print("Product deleted") - for r in cur: - try: - type = ProductType.objects.filter(id=r["id_typeprod"]).first() - club = Club.objects.filter(id=r["id_assocpt"]).first() - new = Product( - id=r["id_produit"], - product_type=type, - name=to_unicode(r["nom_prod"]), - description=to_unicode(r["description_prod"]), - code=to_unicode(r["cbarre_prod"]), - purchase_price=r["prix_achat_prod"] / 100, - selling_price=r["prix_vente_prod"] / 100, - special_selling_price=r["prix_vente_barman_prod"] / 100, - club=club, - limit_age=r["mineur"] or 0, - tray=bool(r["plateau"]), - ) - new.save() - except Exception as e: - print("FAIL to migrate product %s: %s" % (r["nom_prod"], repr(e))) - cur.close() - print("Product migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_product_pict(): - FILE_ROOT = "/data/files/" - - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_produits - WHERE id_file IS NOT NULL - """ - ) - for r in cur: - try: - prod = Product.objects.filter(id=r["id_produit"]).first() - if prod: - f = File(open(FILE_ROOT + "/" + str(r["id_file"]) + ".1", "rb")) - f.name = prod.name - prod.icon = f - prod.save() - except Exception as e: - print(repr(e)) - print("Product pictures migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_products_to_counter(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_mise_en_vente - """ - ) - for r in cur: - try: - product = Product.objects.filter(id=r["id_produit"]).first() - counter = Counter.objects.filter(id=r["id_comptoir"]).first() - counter.products.add(product) - counter.save() - except Exception as e: - print( - "FAIL to set product %s in counter %s: %s" - % (product, counter, repr(e)) - ) - cur.close() - print("Product in counters migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_invoices(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_vendu ven - LEFT JOIN cpt_debitfacture fac - ON ven.id_facture = fac.id_facture - WHERE fac.mode_paiement = 'SG' - """ - ) - Invoice.objects.all().delete() - print("Invoices deleted") - Refilling.objects.filter(payment_method="CARD").delete() - print("Card refillings deleted") - Selling.objects.filter(payment_method="CARD").delete() - print("Card sellings deleted") - root = User.objects.filter(id=0).first() - for r in cur: - try: - product = Product.objects.filter(id=r["id_produit"]).first() - user = User.objects.filter(id=r["id_utilisateur_client"]).first() - i = Invoice.objects.filter(id=r["id_facture"]).first() or Invoice( - id=r["id_facture"] - ) - i.user = user or root - for f in i._meta.local_fields: - if f.name == "date": - f.auto_now = False - i.date = r["date_facture"].replace(tzinfo=timezone("Europe/Paris")) - i.save() - InvoiceItem( - invoice=i, - product_id=product.id, - product_name=product.name, - type_id=product.product_type.id, - product_unit_price=r["prix_unit"] / 100, - quantity=r["quantite"], - ).save() - except ValidationError as e: - print(repr(e) + " for %s (%s)" % (customer, customer.user.id)) - except Exception as e: - print("FAIL to migrate invoice %s: %s" % (r["id_facture"], repr(e))) - cur.close() - for i in Invoice.objects.all(): - for f in i._meta.local_fields: - if f.name == "date": - f.auto_now = False - i.validate() - print("Invoices migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_sellings(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_vendu ven - LEFT JOIN cpt_debitfacture fac - ON ven.id_facture = fac.id_facture - WHERE fac.mode_paiement = 'AE' - """ - ) - Selling.objects.filter(payment_method="SITH_ACCOUNT").delete() - print("Sith account selling deleted") - for c in Customer.objects.all(): - c.amount = sum([r.amount for r in c.refillings.all()]) - c.save() - print("Customer amount reset to sum of refillings") - ae = Club.objects.filter(unix_name="ae").first() - mde = Counter.objects.filter(id=1).first() - root = User.objects.filter(id=0).first() - beer = Product.objects.filter(id=1).first() - for r in cur: - try: - product = Product.objects.filter(id=r["id_produit"]).first() or beer - club = Club.objects.filter(id=r["id_assocpt"]).first() or ae - counter = Counter.objects.filter(id=r["id_comptoir"]).first() or mde - op = User.objects.filter(id=r["id_utilisateur"]).first() or root - customer = ( - Customer.objects.filter(user__id=r["id_utilisateur_client"]).first() - or root.customer - ) - new = Selling( - label=product.name or "Produit inexistant", - counter=counter, - club=club, - product=product, - seller=op, - customer=customer, - unit_price=r["prix_unit"] / 100, - quantity=r["quantite"], - payment_method="SITH_ACCOUNT", - date=r["date_facture"].replace(tzinfo=timezone("Europe/Paris")), - ) - new.save() - except ValidationError as e: - print(repr(e) + " for %s (%s)" % (customer, customer.user.id)) - except Exception as e: - print("FAIL to migrate selling %s: %s" % (r["id_facture"], repr(e))) - cur.close() - print("Sellings migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_permanencies(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_tracking - """ - ) - Permanency.objects.all().delete() - print("Permanencies deleted") - for r in cur: - try: - counter = Counter.objects.filter(id=r["id_comptoir"]).first() - user = User.objects.filter(id=r["id_utilisateur"]).first() - new = Permanency( - user=user, - counter=counter, - start=r["logged_time"].replace(tzinfo=timezone("Europe/Paris")), - activity=r["logged_time"].replace(tzinfo=timezone("Europe/Paris")), - end=r["closed_time"].replace(tzinfo=timezone("Europe/Paris")), - ) - new.save() - except Exception as e: - print("FAIL to migrate permanency: %s" % (repr(e))) - cur.close() - print("Permanencies migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - update_customer_account() - migrate_counters() - migrate_permanencies() - migrate_typeproducts() - migrate_products() - migrate_product_pict() - migrate_products_to_counter() - reset_customer_amount() - migrate_invoices() - migrate_refillings() - migrate_sellings() - - -def check_accounts(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM utilisateurs - """ - ) - mde = Counter.objects.filter(id=1).first() - ae = Club.objects.filter(unix_name="ae").first() - root = User.objects.filter(id=0).first() - for r in cur: - if r["montant_compte"] and r["montant_compte"] > 0: - try: - cust = Customer.objects.filter(user__id=r["id_utilisateur"]).first() - if int(cust.amount * 100) != r["montant_compte"]: - print( - "Adding %s to %s's account" - % (float(cust.amount) - (r["montant_compte"] / 100), cust.user) - ) - new = Selling( - label="Ajustement migration base de donnée", - counter=mde, - club=ae, - product=None, - seller=root, - customer=cust, - unit_price=float(cust.amount) - (r["montant_compte"] / 100.0), - quantity=1, - payment_method="SITH_ACCOUNT", - ) - new.save() - except Exception as e: - print("FAIL to adjust user account: %s" % (repr(e))) - - -### Accounting - - -def migrate_accounting(): - def migrate_companies(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM entreprise - """ - ) - Company.objects.all().delete() - print("Company deleted") - for r in cur: - try: - new = Company( - id=r["id_ent"], - name=to_unicode(r["nom_entreprise"]), - street=to_unicode(r["rue_entreprise"]), - city=to_unicode(r["ville_entreprise"]), - postcode=to_unicode(r["cpostal_entreprise"]), - country=to_unicode(r["pays_entreprise"]), - phone=to_unicode(r["telephone_entreprise"]), - email=to_unicode(r["email_entreprise"]), - website=to_unicode(r["siteweb_entreprise"]), - ) - new.save() - except Exception as e: - print("FAIL to migrate company: %s" % (repr(e))) - cur.close() - print("Companies migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_bank_accounts(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_cpbancaire - """ - ) - BankAccount.objects.all().delete() - print("Bank accounts deleted") - ae = Club.objects.filter(unix_name="ae").first() - for r in cur: - try: - new = BankAccount( - id=r["id_cptbc"], club=ae, name=to_unicode(r["nom_cptbc"]) - ) - new.save() - except Exception as e: - print("FAIL to migrate bank account: %s" % (repr(e))) - cur.close() - print("Bank accounts migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_club_accounts(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_cpasso - """ - ) - ClubAccount.objects.all().delete() - print("Club accounts deleted") - ae = Club.objects.filter(id=1).first() - for r in cur: - try: - club = Club.objects.filter(id=r["id_asso"]).first() or ae - bank_acc = BankAccount.objects.filter(id=r["id_cptbc"]).first() - new = ClubAccount( - id=r["id_cptasso"], - club=club, - name=club.name[:30], - bank_account=bank_acc, - ) - new.save() - except Exception as e: - print("FAIL to migrate club account: %s" % (repr(e))) - cur.close() - print("Club accounts migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_journals(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_classeur - """ - ) - GeneralJournal.objects.all().delete() - print("General journals deleted") - for r in cur: - try: - club_acc = ClubAccount.objects.filter(id=r["id_cptasso"]).first() - new = GeneralJournal( - id=r["id_classeur"], - club_account=club_acc, - name=to_unicode(r["nom_classeur"]), - start_date=r["date_debut_classeur"], - end_date=r["date_fin_classeur"], - closed=bool(r["ferme"]), - ) - new.save() - except Exception as e: - print("FAIL to migrate general journal: %s" % (repr(e))) - cur.close() - print("General journals migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_accounting_types(): - MOVEMENT = {-1: "DEBIT", 0: "NEUTRAL", 1: "CREDIT"} - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_op_plcptl - """ - ) - AccountingType.objects.all().delete() - print("Accounting types deleted") - for r in cur: - try: - new = AccountingType( - id=r["id_opstd"], - code=str(r["code_plan"]), - label=to_unicode(r["libelle_plan"]).capitalize(), - movement_type=MOVEMENT[r["type_mouvement"]], - ) - new.save() - except Exception as e: - print("FAIL to migrate accounting type: %s" % (repr(e))) - cur.close() - print("Accounting types migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_simpleaccounting_types(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_op_clb - WHERE id_asso IS NULL - """ - ) - SimplifiedAccountingType.objects.all().delete() - print("Simple accounting types deleted") - for r in cur: - try: - at = AccountingType.objects.filter(id=r["id_opstd"]).first() - new = SimplifiedAccountingType( - id=r["id_opclb"], - label=to_unicode(r["libelle_opclb"]).capitalize(), - accounting_type=at, - ) - new.save() - except Exception as e: - print("FAIL to migrate simple type: %s" % (repr(e))) - cur.close() - print("Simple accounting types migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_labels(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_libelle - WHERE id_asso IS NOT NULL - """ - ) - Label.objects.all().delete() - print("Labels deleted") - for r in cur: - try: - club_accounts = ClubAccount.objects.filter(club__id=r["id_asso"]).all() - for ca in club_accounts: - new = Label(club_account=ca, name=to_unicode(r["nom_libelle"])) - new.save() - except Exception as e: - print("FAIL to migrate label: %s" % (repr(e))) - cur.close() - print("Labels migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_operations(): - MODE = { - 1: "CHECK", - 2: "CASH", - 3: "TRANSFERT", - 4: "CARD", - 0: "CASH", - None: "CASH", - } - MOVEMENT_TYPE = {-1: "DEBIT", 0: "NEUTRAL", 1: "CREDIT", None: "NEUTRAL"} - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_operation op - LEFT JOIN cpta_op_clb clb - ON op.id_opclb = clb.id_opclb - LEFT JOIN cpta_libelle lab - ON op.id_libelle = lab.id_libelle - """ - ) - Operation.objects.all().delete() - print("Operation deleted") - for r in cur: - try: - simple_type = None - accounting_type = None - label = None - if r["id_opclb"]: - simple_type = SimplifiedAccountingType.objects.filter( - id=r["id_opclb"] - ).first() - if r["id_opstd"]: - accounting_type = AccountingType.objects.filter( - id=r["id_opstd"] - ).first() - if not accounting_type and simple_type: - accounting_type = simple_type.accounting_type - if not accounting_type: - accounting_type = AccountingType.objects.filter( - movement_type=MOVEMENT_TYPE[r["type_mouvement"]] - ).first() - journal = GeneralJournal.objects.filter(id=r["id_classeur"]).first() - if r["id_libelle"]: - label = journal.club_account.labels.filter( - name=to_unicode(r["nom_libelle"]) - ).first() - - def get_target_type(): - if r["id_utilisateur"]: - return "USER" - if r["id_asso"]: - return "CLUB" - if r["id_ent"]: - return "COMPANY" - if r["id_classeur"]: - return "ACCOUNT" - - def get_target_id(): - return ( - int( - r["id_utilisateur"] - or r["id_asso"] - or r["id_ent"] - or r["id_classeur"] - ) - or None - ) - - new = Operation( - id=r["id_op"], - journal=journal, - amount=r["montant_op"] / 100, - date=r["date_op"] or journal.end_date, - remark=to_unicode(r["commentaire_op"]), - mode=MODE[r["mode_op"]], - cheque_number=str(r["num_cheque_op"]), - done=bool(r["op_effctue"]), - simpleaccounting_type=simple_type, - accounting_type=accounting_type, - target_type=get_target_type(), - target_id=get_target_id(), - target_label="-", - label=label, - ) - try: - new.clean() - except: - new.target_id = get_target_id() - new.target_type = "OTHER" - new.save() - except Exception as e: - print("FAIL to migrate operation: %s" % (repr(e))) - cur.close() - print("Operations migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - def make_operation_links(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpta_operation - """ - ) - for r in cur: - if r["id_op_liee"]: - try: - op1 = Operation.objects.filter(id=r["id_op"]).first() - op2 = Operation.objects.filter(id=r["id_op_liee"]).first() - op1.linked_operation = op2 - op1.save() - op2.linked_operation = op1 - op2.save() - except Exception as e: - print("FAIL to link operations: %s" % (repr(e))) - cur.close() - print("Operations links migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - migrate_companies() - migrate_accounting_types() - migrate_simpleaccounting_types() - migrate_bank_accounts() - migrate_club_accounts() - migrate_labels() - migrate_journals() - migrate_operations() - make_operation_links() - - -def migrate_godfathers(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM parrains - """ - ) - for r in cur: - try: - father = User.objects.filter(id=r["id_utilisateur"]).first() - child = User.objects.filter(id=r["id_utilisateur_fillot"]).first() - father.godchildren.add(child) - father.save() - except Exception as e: - print("FAIL to migrate godfathering: %s" % (repr(e))) - cur.close() - print("Godfathers migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - -def migrate_etickets(): - FILE_ROOT = "/data/files/" - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM cpt_etickets - """ - ) - Eticket.objects.all().delete() - print("Etickets deleted") - for r in cur: - try: - p = Product.objects.filter(id=r["id_produit"]).first() - try: - f = File(open(FILE_ROOT + "/" + str(r["banner"]) + ".1", "rb")) - except: - f = None - e = Eticket( - product=p, secret=to_unicode(r["secret"]), banner=f, event_title=p.name - ) - e.save() - e.secret = to_unicode(r["secret"]) - e.save() - except Exception as e: - print("FAIL to migrate eticket: %s" % (repr(e))) - cur.close() - print("Etickets migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - -def migrate_sas(): - album_link = {} - picture_link = {} - FILE_ROOT = "/data/sas/" - SithFile.objects.filter(id__gte=18892).delete() - print("Album/Pictures deleted") - reset_index("core", "sas") - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM sas_cat_photos - """ - ) - root = User.objects.filter(username="root").first() - for r in cur: - try: - a = Album( - name=to_unicode(r["nom_catph"]), - owner=root, - is_moderated=True, - parent=None, - ) - a.save() - album_link[str(r["id_catph"])] = a.id - except Exception as e: - print("FAIL to migrate Album: %s" % (repr(e))) - print("Album moved, need to make the tree") - cur.execute( - """ - SELECT * - FROM sas_cat_photos - """ - ) - for r in cur: - try: - p = Album.objects.filter(id=album_link[str(r["id_catph_parent"])]).first() - a = Album.objects.filter(id=album_link[str(r["id_catph"])]).first() - a.parent = p - a.save() - except: - pass - print("Album migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - with open("albums.link", "w") as f: - f.write(str(album_link)) - cur.close() - finished = False - chunk = 0 - while not finished: - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM sas_photos - ORDER BY 'id_photo' - LIMIT %s, 1000 - """, - (chunk * 1000,), - ) - has_result = False - for r in cur: - try: - user = User.objects.filter(id=r["id_utilisateur"]).first() or root - parent = Album.objects.filter(id=album_link[str(r["id_catph"])]).first() - - file_name = FILE_ROOT - if r["date_prise_vue"]: - file_name += r["date_prise_vue"].strftime("%Y/%m/%d") - else: - file_name += "/".join(["1970", "01", "01"]) - file_name += "/" + str(r["id_photo"]) + ".jpg" - - file = File(open(file_name, "rb")) - file.name = str(r["id_photo"]) + ".jpg" - - p = Picture( - name=str(r["id_photo"]) + ".jpg", - owner=user, - is_moderated=True, - is_folder=False, - mime_type="image/jpeg", - parent=parent, - file=file, - ) - if r["date_prise_vue"]: - p.date = r["date_prise_vue"].replace( - tzinfo=timezone("Europe/Paris") - ) - else: - p.date = r["date_ajout_ph"].replace(tzinfo=timezone("Europe/Paris")) - for f in p._meta.local_fields: - if f.name == "date": - f.auto_now = False - p.generate_thumbnails() - p.save() - db2 = MySQLdb.connect(**settings.OLD_MYSQL_INFOS) - cur2 = db2.cursor(MySQLdb.cursors.SSDictCursor) - cur2.execute( - """ - SELECT * - FROM sas_personnes_photos - WHERE id_photo = %s - """, - (r["id_photo"],), - ) - for r2 in cur2: - try: - u = User.objects.filter(id=r2["id_utilisateur"]).first() - if u: - PeoplePictureRelation(user=u, picture=p).save() - except: - print( - "Fail to associate user %d to picture %d" - % (r2["id_utilisateur"], p.id) - ) - has_result = True - except Exception as e: - print("FAIL to migrate Picture: %s" % (repr(e))) - cur.close() - print("Chunk %d migrated at %s" % (chunk, str(datetime.datetime.now()))) - print("Running time: %s" % (datetime.datetime.now() - start)) - chunk += 1 - finished = not has_result - print("SAS migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - # try: - # f = File(open(FILE_ROOT + '/' + str(r['banner']) + ".1", 'rb')) - # except: - # f = None - - -def reset_sas_moderators(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute( - """ - SELECT * - FROM sas_photos - WHERE id_utilisateur_moderateur IS NOT NULL - """ - ) - for r in cur: - try: - name = str(r["id_photo"]) + ".jpg" - pict = SithFile.objects.filter(name__icontains=name, is_in_sas=True).first() - user = User.objects.filter(id=r["id_utilisateur_moderateur"]).first() - if pict and user: - pict.moderator = user - pict.save() - else: - print( - "No pict %s (%s) or user %s (%s)" - % (pict, name, user, r["id_utilisateur_moderateur"]) - ) - except Exception as e: - print(repr(e)) - - -def migrate_forum(): - print("Migrating forum") - - def migrate_forums(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - print(" Cleaning up forums") - Forum.objects.all().delete() - cur.execute( - """ - SELECT * - FROM frm_forum - WHERE id_forum <> 1 - """ - ) - print(" Migrating forums") - for r in cur: - try: - # parent = Forum.objects.filter(id=r['id_forum_parent']).first() - club = Club.objects.filter(id=r["id_asso"]).first() - ae = Club.objects.filter(id=settings.SITH_MAIN_CLUB_ID).first() - forum = Forum( - id=r["id_forum"], - name=to_unicode(r["titre_forum"]), - description=to_unicode(r["description_forum"])[:511], - is_category=bool(r["categorie_forum"]), - # parent=parent, - owner_club=club or ae, - number=r["ordre_forum"], - ) - forum.save() - except Exception as e: - print(" FAIL to migrate forum: %s" % (repr(e))) - cur.execute( - """ - SELECT * - FROM frm_forum - WHERE id_forum_parent <> 1 - """ - ) - for r in cur: - parent = Forum.objects.filter(id=r["id_forum_parent"]).first() - forum = Forum.objects.filter(id=r["id_forum"]).first() - forum.parent = parent - forum.save() - cur.close() - print(" Forums migrated at %s" % datetime.datetime.now()) - print(" Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_topics(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - print(" Cleaning up topics") - ForumTopic.objects.all().delete() - cur.execute( - """ - SELECT * - FROM frm_sujet - """ - ) - print(" Migrating topics") - for r in cur: - try: - parent = Forum.objects.filter(id=r["id_forum"]).first() - saloon = Forum.objects.filter(id=3).first() - author = User.objects.filter(id=r["id_utilisateur"]).first() - root = User.objects.filter(id=0).first() - topic = ForumTopic( - id=r["id_sujet"], - author=author or root, - forum=parent or saloon, - _title=to_unicode(r["titre_sujet"])[:64], - description=to_unicode(r["soustitre_sujet"]), - ) - topic.save() - except Exception as e: - print(" FAIL to migrate topic: %s" % (repr(e))) - cur.close() - print(" Topics migrated at %s" % datetime.datetime.now()) - print(" Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_messages(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - print(" Cleaning up messages") - ForumMessage.objects.all().delete() - cur.execute( - """ - SELECT * - FROM frm_message - """ - ) - print(" Migrating messages") - for r in cur: - try: - topic = ForumTopic.objects.filter(id=r["id_sujet"]).first() - author = User.objects.filter(id=r["id_utilisateur"]).first() - root = User.objects.filter(id=0).first() - msg = ForumMessage( - id=r["id_message"], - topic=topic, - author=author or root, - title=to_unicode(r["titre_message"])[:63], - date=r["date_message"].replace(tzinfo=timezone("Europe/Paris")), - ) - try: - if r["syntaxengine_message"] == "doku": - msg.message = doku_to_markdown(to_unicode(r["contenu_message"])) - else: - msg.message = bbcode_to_markdown( - to_unicode(r["contenu_message"]) - ) - except: - msg.message = to_unicode(r["contenu_message"]) - msg.save() - except Exception as e: - print(" FAIL to migrate message: %s" % (repr(e))) - cur.close() - print(" Messages migrated at %s" % datetime.datetime.now()) - print(" Running time: %s" % (datetime.datetime.now() - start)) - - def migrate_message_infos(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - print(" Cleaning up message meta") - ForumMessageMeta.objects.all().delete() - cur.execute( - """ - SELECT * - FROM frm_modere_info - """ - ) - print(" Migrating message meta") - ACTIONS = { - "EDIT": "EDIT", - "AUTOEDIT": "EDIT", - "UNDELETE": "UNDELETE", - "DELETE": "DELETE", - "DELETEFIRST": "DELETE", - "AUTODELETE": "DELETE", - } - for r in cur: - try: - msg = ForumMessage.objects.filter(id=r["id_message"]).first() - author = User.objects.filter(id=r["id_utilisateur"]).first() - root = User.objects.filter(id=0).first() - meta = ForumMessageMeta( - message=msg, - user=author or root, - date=r["modere_date"].replace(tzinfo=timezone("Europe/Paris")), - action=ACTIONS[r["modere_action"]], - ) - meta.save() - except Exception as e: - print(" FAIL to migrate message meta: %s" % (repr(e))) - cur.close() - print(" Messages meta migrated at %s" % datetime.datetime.now()) - print(" Running time: %s" % (datetime.datetime.now() - start)) - - migrate_forums() - migrate_topics() - migrate_messages() - migrate_message_infos() - print("Forum migrated at %s" % datetime.datetime.now()) - print("Running time: %s" % (datetime.datetime.now() - start)) - - -def migrate_mailings(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - - print("Delete all mailings") - - Mailing.objects.all().delete() - - print("Migrating old mailing database") - - cur.execute( - """ - SELECT * FROM mailing - """ - ) - - moderator = User.objects.get(id=0) - - for mailing in cur: - club = Club.objects.filter(id=mailing["id_asso_parent"]) - if club.exists(): - print(mailing) - club = club.first() - if mailing["nom"]: - mailing["nom"] = "." + mailing["nom"] - Mailing( - id=mailing["id_mailing"], - club=club, - email=to_unicode(club.unix_name + mailing["nom"]), - moderator=moderator, - is_moderated=(mailing["is_valid"] > 0), - ).save() - print("-------------------") - - cur.execute( - """ - SELECT * FROM mailing_membres - """ - ) - - for mailing_sub in cur: - mailing = Mailing.objects.filter(id=mailing_sub["id_mailing"]) - if mailing.exists(): - print(mailing_sub) - mailing = mailing.first() - if ( - mailing_sub["id_user"] - and User.objects.filter(id=mailing_sub["id_user"]).exists() - ): - user = User.objects.get(id=mailing_sub["id_user"]) - MailingSubscription(mailing=mailing, user=user, email=user.email).save() - elif mailing_sub["email"]: - MailingSubscription( - mailing=mailing, email=to_unicode(mailing_sub["email"]) - ).save() - - -def migrate_club_again(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - cur.execute("SELECT * FROM asso") - - print("Migrating club is_active") - - for club in cur: - try: - c = Club.objects.get(unix_name=club["nom_unix_asso"]) - c.is_active = club["hidden"] == 0 - c.save() - except: - pass - - -def migrate_pedagogy(): - cur = db.cursor(MySQLdb.cursors.SSDictCursor) - - print("Migrating UVs") - root = User.objects.get(id=0) - semester_conversion = { - "closed": "CLOSED", - "A": "AUTUMN", - "P": "SPRING", - "AP": "AUTUMN_AND_SPRING", - } - - def department_conversion(department): - # Default of this enum is HUMA - if not department or department == "Humas": - return "HUMA" - return department - - def convert_number(num, default=0): - if not num: - return default - return num - - def convert_text(text): - if not text: - return "" - return doku_to_markdown(to_unicode(text)) - - cur.execute( - """ - SELECT * FROM pedag_uv - LEFT JOIN pedag_uv_dept dept - ON dept.id_uv = pedag_uv.id_uv - """ - ) - for uv in cur: - UV( - id=uv["id_uv"], - code=uv["code"], - author=root, - credit_type=uv["type"], - semester=semester_conversion[uv["semestre"]], - language="FR", # No infos in previous guide about that - credits=convert_number(uv["guide_credits"]), - department=department_conversion(uv["departement"]), - title=convert_text(uv["intitule"]), - manager=convert_text(uv["responsable"]), - objectives=convert_text(uv["guide_objectifs"]), - program=convert_text(uv["guide_programme"]), - skills="", # No info in previous guide about that - key_concepts="", # No info either - hours_CM=convert_number(uv["guide_c"]), - hours_TD=convert_number(uv["guide_td"]), - hours_TP=convert_number(uv["guide_tp"]), - hours_THE=convert_number(uv["guide_the"]), - hours_TE=0, # No info either - ).save() - - print("Migrating UV Comments") - - cur.execute("SELECT * FROM pedag_uv_commentaire") - - for comment in cur: - author = User.objects.filter(id=comment["id_utilisateur"]).first() - uv = UV.objects.filter(id=comment["id_uv"]).first() - if not author or not uv: - continue - UVComment( - id=comment["id_commentaire"], - author=author, - uv=uv, - comment=convert_text(comment["content"]), - grade_global=convert_number(comment["note_generale"], -1), - grade_utility=convert_number(comment["note_utilite"], -1), - grade_interest=convert_number(comment["note_interet"], -1), - grade_teaching=convert_number(comment["note_enseignement"], -1), - grade_work_load=convert_number(comment["note_travail"], -1), - publish_date=comment["date"].replace(tzinfo=timezone("Europe/Paris")), - ).save() - - print("Migrating UV Results") - cur.execute("SELECT * FROM pedag_resultat") - - for result in cur: - author = User.objects.filter(id=comment["id_utilisateur"]).first() - uv = UV.objects.filter(id=comment["id_uv"]).first() - if not author or not uv: - continue - UVResult( - id=result["id_resultat"], - uv=uv, - user=author, - grade=result["note"], - semester=result["semestre"], - ).save() - - -def main(): - print("Start at %s" % start) - # Core - # migrate_core() - # Club - # migrate_club() - # Subscriptions - # migrate_subscriptions() - # Counters - # migrate_counter() - # check_accounts() - # Accounting - # migrate_accounting() - # migrate_godfathers() - # migrate_etickets() - # reset_index('core', 'club', 'subscription', 'accounting', 'eboutic', 'launderette', 'counter') - # migrate_sas() - # reset_index('core', 'sas') - # reset_sas_moderators() - # migrate_forum() - # reset_index('forum') - # migrate_mailings() - # migrate_club_again() - migrate_pedagogy() - reset_index("pedagogy") - end = datetime.datetime.now() - print("End at %s" % end) - print("Running time: %s" % (end - start)) - - -if __name__ == "__main__": - main() diff --git a/sith/settings.py b/sith/settings.py index 74331540..4e4a99ea 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -35,13 +35,15 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.8/ref/settings/ """ +import binascii + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os import sys -import binascii + import sentry_sdk -from sentry_sdk.integrations.django import DjangoIntegration from django.utils.translation import gettext_lazy as _ +from sentry_sdk.integrations.django import DjangoIntegration BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -59,7 +61,6 @@ INTERNAL_IPS = ["127.0.0.1"] ALLOWED_HOSTS = ["*"] - # Application definition DEFAULT_AUTO_FIELD = "django.db.models.AutoField" @@ -199,7 +200,6 @@ WSGI_APPLICATION = "sith.wsgi.application" REST_FRAMEWORK = {} - # Database # https://docs.djangoproject.com/en/1.8/ref/settings/#databases @@ -210,7 +210,6 @@ DATABASES = { } } - # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ @@ -264,17 +263,6 @@ EMAIL_PORT = 25 # Below this line, only Sith-specific variables are defined -IS_OLD_MYSQL_PRESENT = False -OLD_MYSQL_INFOS = { - "host": "ae-db", - "user": "my_user", - "passwd": "password", - "db": "ae2-db", - "charset": "utf8", - "use_unicode": True, -} - - SITH_URL = "my.url.git.an" SITH_NAME = "Sith website" SITH_TWITTER = "@ae_utbm" @@ -326,7 +314,6 @@ SITH_GROUP_SAS_ADMIN_ID = 11 SITH_GROUP_FORUM_ADMIN_ID = 12 SITH_GROUP_PEDAGOGY_ADMIN_ID = 13 - SITH_CLUB_REFOUND_ID = 89 SITH_COUNTER_REFOUND_ID = 38 SITH_PRODUCT_REFOUND_ID = 5 diff --git a/subscription/models.py b/subscription/models.py index f0ea0907..40eeb207 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -119,58 +119,6 @@ class Subscription(models.Model): from_email="ae@utbm.fr", ) self.member.make_home() - if settings.IS_OLD_MYSQL_PRESENT: - import MySQLdb - - try: # Create subscription on the old site: TODO remove me! - LOCATION = {"SEVENANS": 5, "BELFORT": 6, "MONTBELIARD": 9, "EBOUTIC": 5} - TYPE = { - "un-semestre": 0, - "deux-semestres": 1, - "cursus-tronc-commun": 2, - "cursus-branche": 3, - "membre-honoraire": 4, - "assidu": 5, - "amicale/doceo": 6, - "reseau-ut": 7, - "crous": 8, - "sbarro/esta": 9, - "cursus-alternant": 10, - "welcome-semestre": 11, - "deux-mois-essai": 12, - } - PAYMENT = { - "CHECK": 1, - "CARD": 2, - "CASH": 3, - "OTHER": 4, - "EBOUTIC": 5, - "OTHER": 0, - } - - db = MySQLdb.connect(**settings.OLD_MYSQL_INFOS) - c = db.cursor() - c.execute( - """INSERT INTO ae_cotisations (id_utilisateur, date_cotis, date_fin_cotis, mode_paiement_cotis, - type_cotis, id_comptoir) VALUES (%s, %s, %s, %s, %s, %s)""", - ( - self.member.id, - self.subscription_start, - self.subscription_end, - PAYMENT[self.payment_method], - TYPE[self.subscription_type], - LOCATION[self.location], - ), - ) - db.commit() - except Exception as e: - with open(settings.BASE_DIR + "/subscription_fail.log", "a") as f: - print( - "FAIL to add subscription to %s to old site" % (self.member), - file=f, - ) - print("Reason: %s" % (repr(e)), file=f) - db.rollback() def get_absolute_url(self): return reverse("core:user_edit", kwargs={"user_id": self.member.pk})