aboutsummaryrefslogtreecommitdiff
path: root/app/dispatch/management/commands/insert_fake_data.py
blob: 9e8793e12f438744b73f4e31ebda031ef0d93b37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth import get_user_model
from dispatch.models import Company, Load
from faker import Faker
from datetime import date, timedelta
import random

# import yaml

User = get_user_model()

class Command(BaseCommand):
    help = """Generate fake data.\n
    Example usage: \n
   ./manage.py insert_fake_data --companies 4 --users 3 --loads 800 --start-date='-16w' --end-date '+16w' 
    """

    fake = Faker()
    end_date=""
    start_date=""

    def add_arguments(self, parser):
        # parser.add_argument('--file', type=str, dest='filename')
        parser.add_argument('--companies', type=int, dest='companies', default='0')
        parser.add_argument('--users', type=int, dest='users', default='0')
        parser.add_argument('--loads', type=int, dest='loads', default='0')
        parser.add_argument('--start-date', type=str, dest='startdate', default='-2w')
        parser.add_argument('--end-date', type=str, dest='enddate', default='+2w')


    def handle(self, *args, **options):

        # Create the Fake drivers and their loads
        # for i in range(0, options['companies']):
        #     co = self.fake_company()
        #     for i in range(0, options['users']):
        #         u = self.fake_user()
        #         for i in range(0, options['loads']):
        #             l = self.fake_load(u, co)

        self.end_date=options['enddate']
        self.start_date=options['startdate']

        company_ids = []
        user_ids = []

        for i in range(0, options['companies']):
            co = self.fake_company()

            # We're going to hold the model IDs in memory to access randomly
            # later on
            company_ids.append(co.pk)

        for i in range(0, options['users']):
            u = self.fake_user()

            user_ids.append(u.pk)

        for i in range(0, options['loads']):
            co_id = company_ids[random.randint(0, len(company_ids)-1)]
            co = Company.objects.get(pk=co_id)

            u_id = user_ids[random.randint(0, len(user_ids)-1)]
            u = User.objects.get(pk=u_id)

            l = self.fake_load(u, co)


    def fake_company(self):
        new_company = Company(
                name = self.fake.company(),
                address = self.fake.address(),
                phone_number = self.fake.msisdn(),
                email_address = self.fake.company_email(),
                contact_name = self.fake.name(),
            )
        new_company.save()
        return new_company

    def fake_load(self, usr, co):
        new_load = Load(
            user=usr,
            # Because that's going to be random enough
            load_number=self.fake.license_plate(),
            description=self.fake.sentence(nb_words=6),
            company=co,
            amount=random.randint(150,2500)
        )
        # Set the date to something random between last week and next week
        new_load.date=self.fake.date_between(start_date=self.start_date, end_date=self.end_date)
        new_load.save()
        return new_load


    def fake_user(self):
        new_user = User(
            first_name=self.fake.first_name(),
            last_name=self.fake.last_name(),
            email=self.fake.email(),
            username=self.fake.user_name(),
            is_active=True
        )
        new_user.save()
        return new_user