populate.py 13.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
Skia's avatar
Skia committed
9
10


Skia's avatar
Skia committed
11
from core.models import Group, User, Page, PageRev, SithFile
Skia's avatar
Skia committed
12
from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, Company
Skia's avatar
Skia committed
13
from club.models import Club, Membership
Skia's avatar
Skia committed
14
from subscription.models import Subscription, Subscriber
Skia's avatar
Skia committed
15
from counter.models import Customer, ProductType, Product, Counter
Skia's avatar
Skia committed
16
17
18
19
20
21
22

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

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

23
24
25
26
27
28
    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
29
    def handle(self, *args, **options):
Skia's avatar
Skia committed
30
        os.environ['DJANGO_COLORS'] = 'nocolor'
Skia's avatar
Skia committed
31
        root_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
Skia's avatar
Skia committed
32
33
        for g in settings.SITH_GROUPS.values():
            Group(id=g['id'], name=g['name']).save()
34
        self.reset_index("core", "auth")
Skia's avatar
Skia committed
35
        root = User(username='root', last_name="", first_name="Bibou",
Skia's avatar
Skia committed
36
37
38
                 email="ae.info@utbm.fr",
                 date_of_birth="1942-06-12",
                 is_superuser=True, is_staff=True)
Skia's avatar
Skia committed
39
40
        root.set_password("plop")
        root.save()
41
        SithFile(parent=None, name="profiles", is_folder=True, owner=root).save()
Skia's avatar
Skia committed
42
43
44
45
        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()
46
        main_club = Club(name=settings.SITH_MAIN_CLUB['name'], unix_name=settings.SITH_MAIN_CLUB['unix_name'],
Skia's avatar
Skia committed
47
                address=settings.SITH_MAIN_CLUB['address'])
48
49
50
51
        main_club.save()
        bar_club = Club(name=settings.SITH_BAR_MANAGER['name'], unix_name=settings.SITH_BAR_MANAGER['unix_name'],
                address=settings.SITH_BAR_MANAGER['address'])
        bar_club.save()
52
53
54
55
        launderette_club = Club(name=settings.SITH_LAUNDERETTE_MANAGER['name'],
                unix_name=settings.SITH_LAUNDERETTE_MANAGER['unix_name'],
                address=settings.SITH_LAUNDERETTE_MANAGER['address'])
        launderette_club.save()
56
57
58
59
60
61
62
63
        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
64
        Counter(name="Eboutic", club=main_club, type='EBOUTIC').save()
Skia's avatar
Skia committed
65
66
67
68
69
70

        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
71
72
73
        p = Page(name='Index')
        p.set_lock(root)
        p.save()
Skia's avatar
Skia committed
74
        p.view_groups=[settings.SITH_GROUPS['public']['id']]
Skia's avatar
Skia committed
75
76
77
78
79
        p.set_lock(root)
        p.save()
        PageRev(page=p, title="Wiki index", author=root, content="""
Welcome to the wiki page!
""").save()
Skia's avatar
Skia committed
80

81
82
83
84
        p = Page(name="launderette")
        p.set_lock(root)
        p.save()
        p.set_lock(root)
85
        PageRev(page=p, title="Laverie", author=root, content="Fonctionnement de la laverie").save()
86

Skia's avatar
Skia committed
87
88
89
        # 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
90
            skia = User(username='skia', last_name="Kia", first_name="S'",
Skia's avatar
Skia committed
91
92
                     email="skia@git.an",
                     date_of_birth="1942-06-12")
Skia's avatar
Skia committed
93
94
95
96
            skia.set_password("plop")
            skia.save()
            skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
            skia.save()
Skia's avatar
Skia committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
            # 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()
115
116
117
118
119
120
121
122
123
124
            # 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]
            counter.groups=[Group.objects.filter(name=settings.SITH_GROUPS['counter-admin']['name']).first().id]
            counter.save()
Skia's avatar
Skia committed
125
126
127
128
129
130
131
132
133
134
            # 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]
            comptable.groups=[Group.objects.filter(name=settings.SITH_GROUPS['accounting-admin']['name']).first().id]
            comptable.save()
Skia's avatar
Skia committed
135
136
137
138
139
140
141
            # 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
142
            u.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
143
            u.save()
Skia's avatar
Skia committed
144
145
146
147
148
149
            # 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
150
            r.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
Skia's avatar
Skia committed
151
            r.save()
Skia's avatar
Skia committed
152
153
154
            # Adding syntax help page
            p = Page(name='Aide_sur_la_syntaxe')
            p.save()
Skia's avatar
Skia committed
155
            PageRev(page=p, title="Aide sur la syntaxe", author=skia, content="""
Skia's avatar
Skia committed
156
Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
Skia's avatar
Skia committed
157
158
159
160
161
162
163
164
165
166
167
168
""").save()
            p = Page(name='Services')
            p.save()
            p.set_lock(skia)
            p.view_groups=[settings.SITH_GROUPS['public']['id']]
            p.save()
            PageRev(page=p, title="Services", author=skia, content="""
|   |   |   |
| :---: | :---: | :---: |
| [Eboutic](/eboutic) | [Laverie](/launderette) | Matmat |
| SAS | Weekmail | Forum|

Skia's avatar
Skia committed
169
170
171
172
""").save()
            # Adding README
            p = Page(name='README')
            p.save()
Skia's avatar
Skia committed
173
            p.view_groups=[settings.SITH_GROUPS['public']['id']]
Skia's avatar
Skia committed
174
            p.set_lock(skia)
Skia's avatar
Skia committed
175
176
            p.save()
            with open(os.path.join(root_path)+'/README.md', 'r') as rm:
177
                PageRev(page=p, title="README", author=skia, content=rm.read()).save()
Skia's avatar
Skia committed
178
179

            # Subscription
Skia's avatar
Skia committed
180
            ## Skia
Skia's avatar
Skia committed
181
182
183
184
185
186
187
            s = Subscription(member=Subscriber.objects.filter(pk=skia.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
188
            ## Comptable
Skia's avatar
Skia committed
189
190
191
192
193
194
195
            s = Subscription(member=Subscriber.objects.filter(pk=comptable.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
196
            ## Richard
Skia's avatar
Skia committed
197
198
199
200
201
202
203
            s = Subscription(member=Subscriber.objects.filter(pk=r.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
204
            ## Subscriber
Skia's avatar
Skia committed
205
206
207
208
209
210
211
            s = Subscription(member=Subscriber.objects.filter(pk=subscriber.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
212
213
214

            # Clubs
            Club(name="Bibo'UT", unix_name="bibout",
215
                    address="46 de la Boustifaille", parent=main_club).save()
Skia's avatar
Skia committed
216
            guyut = Club(name="Guy'UT", unix_name="guyut",
217
                    address="42 de la Boustifaille", parent=main_club)
Skia's avatar
Skia committed
218
219
220
            guyut.save()
            Club(name="Woenzel'UT", unix_name="woenzel",
                    address="Woenzel", parent=guyut).save()
221
            Membership(user=skia, club=main_club, role=3, description="").save()
Skia's avatar
Skia committed
222
            troll = Club(name="Troll Penché", unix_name="troll",
223
                    address="Terre Du Milieu", parent=main_club)
Skia's avatar
Skia committed
224
            troll.save()
Skia's avatar
Skia committed
225

Skia's avatar
Skia committed
226
227
            # Counters
            Customer(user=skia, account_id="6568j", amount=0).save()
228
            Customer(user=r, account_id="4000", amount=0).save()
Skia's avatar
Skia committed
229
230
            p = ProductType(name="Bières bouteilles")
            p.save()
Skia's avatar
Skia committed
231
            barb = Product(name="Barbar", code="BARB", product_type=p, purchase_price="1.50", selling_price="1.7",
232
                    special_selling_price="1.6", club=main_club)
Skia's avatar
Skia committed
233
234
            barb.save()
            cble = Product(name="Chimay Bleue", code="CBLE", product_type=p, purchase_price="1.50", selling_price="1.7",
235
                    special_selling_price="1.6", club=main_club)
Skia's avatar
Skia committed
236
            cble.save()
Skia's avatar
Skia committed
237
            Product(name="Corsendonk", code="CORS", product_type=p, purchase_price="1.50", selling_price="1.7",
238
                    special_selling_price="1.6", club=main_club).save()
Skia's avatar
Skia committed
239
            Product(name="Carolus", code="CARO", product_type=p, purchase_price="1.50", selling_price="1.7",
240
241
                    special_selling_price="1.6", club=main_club).save()
            mde = Counter.objects.filter(name="MDE").first()
Skia's avatar
Skia committed
242
243
244
245
246
            mde.products.add(barb)
            mde.products.add(cble)
            mde.save()

            # Accounting test values:
247
248
249
            BankAccount(name="AE TG", club=main_club).save()
            BankAccount(name="Carte AE", club=main_club).save()
            ba = BankAccount(name="AE TI", club=main_club)
250
251
252
            ba.save()
            ca = ClubAccount(name="Troll Penché", bank_account=ba, club=troll)
            ca.save()
Skia's avatar
Skia committed
253
254
255
256
257
258
259
260
261
262
263
264
265
266
            gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
            gj.save()
            credit = AccountingType(code=74, label="Someone gave us money", movement_type='credit')
            credit.save()
            debit = AccountingType(code=607, label="Had to pay a beer", movement_type='debit')
            debit.save()
            Operation(journal=gj, date=date.today(), amount=666.42, label="Satanic answer",
                    remark="An answer to life...", mode="CASH", done=True, accounting_type=credit, target_type="USER",
                    target_id=skia.id).save()
            Operation(journal=gj, date=date.today(), amount=42, label="Answer",
                    remark="An answer to life...", mode="CASH", done=False, accounting_type=debit, target_type="CLUB",
                    target_id=bar_club.id).save()
            woenzco = Company(name="Woenzel & co")
            woenzco.save()
Skia's avatar
Skia committed
267