populate.py 18.1 KB
Newer Older
Skia's avatar
Skia committed
1
import os
Skia's avatar
Skia committed
2
from datetime import date, datetime
Skia's avatar
Skia committed
3
from io import StringIO
Skia's avatar
Skia committed
4

Skia's avatar
Skia committed
5 6 7
from django.core.management.base import BaseCommand, CommandError
from django.core.management import call_command
from django.conf import settings
Skia's avatar
Skia committed
8
from django.db import connection
9
from django.contrib.sites.models import Site
Skia's avatar
Skia committed
10 11


Skia's avatar
Skia committed
12
from core.models import Group, User, Page, PageRev, SithFile
Krophil's avatar
Krophil committed
13
from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, SimplifiedAccountingType, Company
Skia's avatar
Skia committed
14
from club.models import Club, Membership
Skia's avatar
Skia committed
15
from subscription.models import Subscription
Skia's avatar
Skia committed
16
from counter.models import Customer, ProductType, Product, Counter
17
from com.models import Sith
Sli's avatar
Sli committed
18 19
from election.models import Election, Responsability, Candidate

Skia's avatar
Skia committed
20 21 22 23 24 25 26

class Command(BaseCommand):
    help = "Populate a new instance of the Sith AE"

    def add_arguments(self, parser):
        parser.add_argument('--prod', action="store_true")

27 28 29 30 31 32
    def reset_index(self, *args):
        sqlcmd = StringIO()
        call_command("sqlsequencereset", *args, stdout=sqlcmd)
        cursor = connection.cursor()
        cursor.execute(sqlcmd.getvalue())

Skia's avatar
Skia committed
33
    def handle(self, *args, **options):
Skia's avatar
Skia committed
34
        os.environ['DJANGO_COLORS'] = 'nocolor'
35
        Site(id=4000, domain=settings.SITH_URL, name=settings.SITH_NAME).save()
Skia's avatar
Skia committed
36
        root_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
Skia's avatar
Skia committed
37 38 39 40 41 42 43 44 45
        Group(name="Root").save()
        Group(name="Not registered users").save()
        Group(name="Accounting admin").save()
        Group(name="Communication admin").save()
        Group(name="Counter admin").save()
        Group(name="Banned from buying alcohol").save()
        Group(name="Banned from counters").save()
        Group(name="Banned to subscribe").save()
        Group(name="SAS admin").save()
46
        self.reset_index("core", "auth")
Skia's avatar
Skia committed
47
        root = User(id=0, username='root', last_name="", first_name="Bibou",
Skia's avatar
Skia committed
48 49 50
                 email="ae.info@utbm.fr",
                 date_of_birth="1942-06-12",
                 is_superuser=True, is_staff=True)
Skia's avatar
Skia committed
51 52
        root.set_password("plop")
        root.save()
53
        SithFile(parent=None, name="profiles", is_folder=True, owner=root).save()
Skia's avatar
Skia committed
54 55 56 57
        home_root = SithFile(parent=None, name="users", is_folder=True, owner=root)
        home_root.save()
        club_root = SithFile(parent=None, name="clubs", is_folder=True, owner=root)
        club_root.save()
Skia's avatar
Skia committed
58
        SithFile(parent=None, name="SAS", is_folder=True, owner=root).save()
Skia's avatar
Skia committed
59
        main_club = Club(id=1, name=settings.SITH_MAIN_CLUB['name'], unix_name=settings.SITH_MAIN_CLUB['unix_name'],
Skia's avatar
Skia committed
60
                address=settings.SITH_MAIN_CLUB['address'])
61
        main_club.save()
Skia's avatar
Skia committed
62
        bar_club = Club(id=2, name=settings.SITH_BAR_MANAGER['name'], unix_name=settings.SITH_BAR_MANAGER['unix_name'],
63 64
                address=settings.SITH_BAR_MANAGER['address'])
        bar_club.save()
Skia's avatar
Skia committed
65
        launderette_club = Club(id=84, name=settings.SITH_LAUNDERETTE_MANAGER['name'],
66 67 68
                unix_name=settings.SITH_LAUNDERETTE_MANAGER['unix_name'],
                address=settings.SITH_LAUNDERETTE_MANAGER['address'])
        launderette_club.save()
69
        self.reset_index("club")
70 71 72 73 74 75 76 77
        for b in settings.SITH_COUNTER_BARS:
            g = Group(name=b[1]+" admin")
            g.save()
            c = Counter(id=b[0], name=b[1], club=bar_club, type='BAR')
            c.save()
            c.edit_groups = [g]
            c.save()
        self.reset_index("counter")
Skia's avatar
Skia committed
78
        Counter(name="Eboutic", club=main_club, type='EBOUTIC').save()
Sli's avatar
Sli committed
79
        Counter(name="AE", club=main_club, type='OFFICE').save()
Skia's avatar
Skia committed
80 81 82 83 84 85

        home_root.view_groups = [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()]
        club_root.view_groups = [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()]
        home_root.save()
        club_root.save()

86 87
        Sith().save()

Skia's avatar
Skia committed
88 89 90
        p = Page(name='Index')
        p.set_lock(root)
        p.save()
Skia's avatar
Skia committed
91
        p.view_groups=[settings.SITH_GROUP_PUBLIC_ID]
Skia's avatar
Skia committed
92 93 94 95
        p.set_lock(root)
        p.save()
        PageRev(page=p, title="Wiki index", author=root, content="""
Welcome to the wiki page!
Skia's avatar
Skia committed
96 97 98 99 100
""").save()

        p = Page(name="services")
        p.set_lock(root)
        p.save()
Skia's avatar
Skia committed
101
        p.view_groups=[settings.SITH_GROUP_PUBLIC_ID]
Skia's avatar
Skia committed
102 103 104 105 106 107 108
        p.set_lock(root)
        PageRev(page=p, title="Services", author=root, content="""
|   |   |   |
| :---: | :---: | :---: | :---: |
| [Eboutic](/eboutic) | [Laverie](/launderette) | Matmat | [Fichiers](/file) |
| SAS | Weekmail | Forum | |

Skia's avatar
Skia committed
109
""").save()
Skia's avatar
Skia committed
110

111 112 113 114
        p = Page(name="launderette")
        p.set_lock(root)
        p.save()
        p.set_lock(root)
115
        PageRev(page=p, title="Laverie", author=root, content="Fonctionnement de la laverie").save()
116

Skia's avatar
Skia committed
117 118 119
        # Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment
        if not options['prod']:
            # Adding user Skia
Skia's avatar
Skia committed
120
            skia = User(username='skia', last_name="Kia", first_name="S'",
Skia's avatar
Skia committed
121 122
                     email="skia@git.an",
                     date_of_birth="1942-06-12")
Skia's avatar
Skia committed
123 124 125 126
            skia.set_password("plop")
            skia.save()
            skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
            skia.save()
Sli's avatar
Sli committed
127 128 129 130 131 132 133 134
            # Adding user sli
            sli = User(username='sli', last_name="Li", first_name="S",
                       email="sli@git.an",
                       date_of_birth="1942-06-12")
            sli.set_password("plop")
            sli.save()
            skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
            sli.save()
Skia's avatar
Skia committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
            # Adding user public
            public = User(username='public', last_name="Not subscribed", first_name="Public",
                     email="public@git.an",
                     date_of_birth="1942-06-12",
                     is_superuser=False, is_staff=False)
            public.set_password("plop")
            public.save()
            public.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
            public.save()
            # Adding user Subscriber
            subscriber = User(username='subscriber', last_name="User", first_name="Subscribed",
                     email="Subscribed@git.an",
                     date_of_birth="1942-06-12",
                     is_superuser=False, is_staff=False)
            subscriber.set_password("plop")
            subscriber.save()
            subscriber.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
            subscriber.save()
153 154 155 156 157 158 159 160
            # Adding user Counter admin
            counter = User(username='counter', last_name="Ter", first_name="Coun",
                     email="counter@git.an",
                     date_of_birth="1942-06-12",
                     is_superuser=False, is_staff=False)
            counter.set_password("plop")
            counter.save()
            counter.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
161
            counter.groups=[Group.objects.filter(id=settings.SITH_GROUP_COUNTER_ADMIN_ID).first().id]
162
            counter.save()
Skia's avatar
Skia committed
163 164 165 166 167 168 169 170
            # Adding user Comptable
            comptable = User(username='comptable', last_name="Able", first_name="Compte",
                     email="compta@git.an",
                     date_of_birth="1942-06-12",
                     is_superuser=False, is_staff=False)
            comptable.set_password("plop")
            comptable.save()
            comptable.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
171
            comptable.groups=[Group.objects.filter(id=settings.SITH_GROUP_ACCOUNTING_ADMIN_ID).first().id]
Skia's avatar
Skia committed
172
            comptable.save()
Skia's avatar
Skia committed
173 174 175 176 177 178 179
            # Adding user Guy
            u = User(username='guy', last_name="Carlier", first_name="Guy",
                     email="guy@git.an",
                     date_of_birth="1942-06-12",
                     is_superuser=False, is_staff=False)
            u.set_password("plop")
            u.save()
Skia's avatar
Skia committed
180
            u.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
181
            u.save()
Skia's avatar
Skia committed
182 183 184 185 186 187
            # Adding user Richard Batsbak
            r = User(username='rbatsbak', last_name="Batsbak", first_name="Richard",
                     email="richard@git.an",
                     date_of_birth="1982-06-12")
            r.set_password("plop")
            r.save()
Skia's avatar
Skia committed
188
            r.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
189
            r.save()
Skia's avatar
Skia committed
190 191
            # Adding syntax help page
            p = Page(name='Aide_sur_la_syntaxe')
Skia's avatar
Skia committed
192
            p.save(force_lock=True)
Skia's avatar
Skia committed
193
            PageRev(page=p, title="Aide sur la syntaxe", author=skia, content="""
Skia's avatar
Skia committed
194
Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
Skia's avatar
Skia committed
195 196
""").save()
            p = Page(name='Services')
Skia's avatar
Skia committed
197
            p.save(force_lock=True)
Skia's avatar
Skia committed
198
            p.view_groups=[settings.SITH_GROUP_PUBLIC_ID]
Skia's avatar
Skia committed
199
            p.save(force_lock=True)
Skia's avatar
Skia committed
200 201 202 203 204 205
            PageRev(page=p, title="Services", author=skia, content="""
|   |   |   |
| :---: | :---: | :---: |
| [Eboutic](/eboutic) | [Laverie](/launderette) | Matmat |
| SAS | Weekmail | Forum|

Skia's avatar
Skia committed
206 207 208
""").save()
            # Adding README
            p = Page(name='README')
Skia's avatar
Skia committed
209
            p.save(force_lock=True)
Skia's avatar
Skia committed
210
            p.view_groups=[settings.SITH_GROUP_PUBLIC_ID]
Skia's avatar
Skia committed
211
            p.save(force_lock=True)
Skia's avatar
Skia committed
212
            with open(os.path.join(root_path)+'/README.md', 'r') as rm:
213
                PageRev(page=p, title="README", author=skia, content=rm.read()).save()
Skia's avatar
Skia committed
214 215

            # Subscription
Skia's avatar
Skia committed
216
            ## Root
Skia's avatar
Skia committed
217
            s = Subscription(member=User.objects.filter(pk=root.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
Skia's avatar
Skia committed
218 219 220 221 222 223
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Skia's avatar
Skia committed
224
            ## Skia
Skia's avatar
Skia committed
225
            s = Subscription(member=User.objects.filter(pk=skia.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
Skia's avatar
Skia committed
226 227 228 229 230 231
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Sli's avatar
Sli committed
232 233 234 235 236 237 238 239
            ## Sli
            s = Subscription(member=Subscriber.objects.filter(pk=sli.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Skia's avatar
Skia committed
240
            ## Comptable
Skia's avatar
Skia committed
241
            s = Subscription(member=User.objects.filter(pk=comptable.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
Skia's avatar
Skia committed
242 243 244 245 246 247
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Skia's avatar
Skia committed
248
            ## Richard
Skia's avatar
Skia committed
249
            s = Subscription(member=User.objects.filter(pk=r.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
Skia's avatar
Skia committed
250 251 252 253 254 255
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Skia's avatar
Skia committed
256 257
            ## User
            s = Subscription(member=User.objects.filter(pk=subscriber.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
Skia's avatar
Skia committed
258 259 260 261 262 263
                    payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
            s.subscription_start = s.compute_start()
            s.subscription_end = s.compute_end(
                    duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
                    start=s.subscription_start)
            s.save()
Skia's avatar
Skia committed
264 265 266

            # Clubs
            Club(name="Bibo'UT", unix_name="bibout",
267
                    address="46 de la Boustifaille", parent=main_club).save()
Skia's avatar
Skia committed
268
            guyut = Club(name="Guy'UT", unix_name="guyut",
269
                    address="42 de la Boustifaille", parent=main_club)
Skia's avatar
Skia committed
270 271 272
            guyut.save()
            Club(name="Woenzel'UT", unix_name="woenzel",
                    address="Woenzel", parent=guyut).save()
273
            Membership(user=skia, club=main_club, role=3, description="").save()
Skia's avatar
Skia committed
274
            troll = Club(name="Troll Penché", unix_name="troll",
275
                    address="Terre Du Milieu", parent=main_club)
Skia's avatar
Skia committed
276
            troll.save()
Sli's avatar
Sli committed
277 278 279
            refound = Club(name="Carte AE", unix_name="carte_ae",
                    address="Jamais imprimée", parent=main_club)
            refound.save()
Skia's avatar
Skia committed
280

Skia's avatar
Skia committed
281 282
            # Counters
            Customer(user=skia, account_id="6568j", amount=0).save()
283
            Customer(user=r, account_id="4000", amount=0).save()
Skia's avatar
Skia committed
284 285
            p = ProductType(name="Bières bouteilles")
            p.save()
Skia's avatar
Skia committed
286
            barb = Product(name="Barbar", code="BARB", product_type=p, purchase_price="1.50", selling_price="1.7",
287
                    special_selling_price="1.6", club=main_club)
Skia's avatar
Skia committed
288 289
            barb.save()
            cble = Product(name="Chimay Bleue", code="CBLE", product_type=p, purchase_price="1.50", selling_price="1.7",
290
                    special_selling_price="1.6", club=main_club)
Skia's avatar
Skia committed
291
            cble.save()
Skia's avatar
Skia committed
292
            Product(name="Corsendonk", code="CORS", product_type=p, purchase_price="1.50", selling_price="1.7",
293
                    special_selling_price="1.6", club=main_club).save()
Skia's avatar
Skia committed
294
            Product(name="Carolus", code="CARO", product_type=p, purchase_price="1.50", selling_price="1.7",
295 296
                    special_selling_price="1.6", club=main_club).save()
            mde = Counter.objects.filter(name="MDE").first()
Skia's avatar
Skia committed
297 298 299
            mde.products.add(barb)
            mde.products.add(cble)
            mde.save()
Sli's avatar
Sli committed
300 301 302 303 304 305

            refound_counter = Counter(name="Carte AE", club=refound, type='OFFICE')
            refound_counter.save()
            refound_product = Product(name="remboursement", code="REMBOURS", purchase_price="0", selling_price="0",
                    special_selling_price="0", club=refound)
            refound_product.save()
Skia's avatar
Skia committed
306 307

            # Accounting test values:
308 309 310
            BankAccount(name="AE TG", club=main_club).save()
            BankAccount(name="Carte AE", club=main_club).save()
            ba = BankAccount(name="AE TI", club=main_club)
311 312 313
            ba.save()
            ca = ClubAccount(name="Troll Penché", bank_account=ba, club=troll)
            ca.save()
Skia's avatar
Skia committed
314 315
            gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
            gj.save()
Krophil's avatar
Krophil committed
316
            credit = AccountingType(code='74', label="Subventions d'exploitation", movement_type='CREDIT')
Skia's avatar
Skia committed
317
            credit.save()
Krophil's avatar
Krophil committed
318
            debit = AccountingType(code='606', label="Achats non stockés de matières et fournitures(*1)", movement_type='DEBIT')
Skia's avatar
Skia committed
319
            debit.save()
Krophil's avatar
Krophil committed
320 321 322 323
            debit2 = AccountingType(code='604', label="Achats d'études et prestations de services(*2)", movement_type='DEBIT')
            debit2.save()
            buying = AccountingType(code='60', label="Achats (sauf 603)", movement_type='DEBIT')
            buying.save()
Krophil's avatar
Krophil committed
324 325 326 327
            comptes = AccountingType(code='6', label="Comptes de charge", movement_type='DEBIT')
            comptes.save()
            simple = SimplifiedAccountingType(label = 'Je fais du simple 6', accounting_type = comptes, movement_type='DEBIT')
            simple.save()
Skia's avatar
Skia committed
328 329
            woenzco = Company(name="Woenzel & co")
            woenzco.save()
Krophil's avatar
Krophil committed
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349

            operation_list = [
                            (27, "J'avais trop de bière", 'CASH', None, buying, 'USER', skia.id, "", None), 
                            (4000, "Ceci n'est pas une opération... en fait si mais non", 'CHECK', None, debit,'COMPANY', woenzco.id, "", 23),
                            (22, "C'est de l'argent ?", 'CARD', None, credit, 'CLUB', troll.id, "", None),
                            (37, "Je paye CASH", 'CASH', None, debit2, 'OTHER', None, "tous les étudiants <3", None),
                            (300, "Paiement Guy", 'CASH', None, buying, 'USER', skia.id, "", None),
                            (32.3, "Essence", 'CASH', None, buying, 'OTHER', None, "station", None),
                            (46.42, "Allumette", 'CHECK', None, credit, 'CLUB', main_club.id, "", 57),
                            (666.42, "Subvention de far far away", 'CASH', None, comptes, 'CLUB', main_club.id, "", None),
                            (496, "Ça, c'est un 6", 'CARD', simple, None, 'USER', skia.id, "", None),
                            (17, "La Gargotte du Korrigan", 'CASH', None, debit2, 'CLUB', bar_club.id, "", None),
                            ]
            for op in operation_list:
                operation = Operation(journal=gj, date=date.today(), amount=op[0], 
                    remark=op[1], mode=op[2], done=True, simpleaccounting_type=op[3], 
                    accounting_type=op[4], target_type=op[5], target_id=op[6], 
                    target_label=op[7], cheque_number=op[8])
                operation.clean()
                operation.save()
Sli's avatar
Sli committed
350 351

            # Create an election
Sli's avatar
Sli committed
352
            el = Election(title="Élection 2017", description="La roue tourne", start_proposal='1942-06-12 10:28:45', end_proposal='2042-06-12 10:28:45',start_date='1942-06-12 10:28:45', end_date='7942-06-12 10:28:45')
Sli's avatar
Sli committed
353 354 355
            el.save()
            resp = Responsability(election=el, title="Co Respo Info", description="Ghetto++")
            resp.save()
Sli's avatar
Sli committed
356
            cand = Candidate(responsability=resp, user=skia)
Sli's avatar
Sli committed
357
            cand.save()
Krophil's avatar
Krophil committed
358