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
Skia's avatar
Skia committed
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()

Skia's avatar
Skia committed
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