add from v002
This commit is contained in:
86
001.BACKEND/fleet/management/commands/populate_stroj.py
Normal file
86
001.BACKEND/fleet/management/commands/populate_stroj.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import random
|
||||
from datetime import date, timedelta
|
||||
from django.core.management.base import BaseCommand
|
||||
from faker import Faker
|
||||
from fleet.models import Stroj
|
||||
from kupci.models import Kupac
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Popunjava bazu podataka isključivo Liebherr strojevima koristeći Faker'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'total',
|
||||
type=int,
|
||||
help='Broj Liebherr strojeva koje želiš kreirati',
|
||||
default=10
|
||||
)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
total = kwargs['total']
|
||||
fake = Faker(['hr_HR']) # Koristimo hrvatski lokalitet
|
||||
kupci = list(Kupac.objects.all())
|
||||
|
||||
if not kupci:
|
||||
self.stdout.write(self.style.ERROR("Greška: Nema kupaca u bazi. Prvo pokreni populate_kupci!"))
|
||||
return
|
||||
|
||||
# Katalog usklađen s tvojim TIP_STROJA choices
|
||||
liebherr_katalog = {
|
||||
'dizalica_toranj': [
|
||||
'132 EC-H 8 Litronic',
|
||||
'280 EC-H 12',
|
||||
'81 K.1',
|
||||
'172 EC-B 8'
|
||||
],
|
||||
'dizalica_auto': [
|
||||
'LTM 1030-2.1',
|
||||
'LTM 1050-3.1',
|
||||
'LTM 1060-3.1',
|
||||
'LTM 1120-4.1',
|
||||
'LTC 1050-3.1'
|
||||
]
|
||||
}
|
||||
|
||||
self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Generiram {total} Liebherr strojeva...'))
|
||||
|
||||
created_count = 0
|
||||
for _ in range(total):
|
||||
# Odabir tipa (usklađeno s tvojim modelom)
|
||||
tip = random.choice(['dizalica_toranj', 'dizalica_auto'])
|
||||
model_naziv = random.choice(liebherr_katalog[tip])
|
||||
|
||||
# Faker za generiranje serijskog broja i registracije
|
||||
serijski = f"LE-{fake.bothify(text='######')}" # npr. LE-482931
|
||||
|
||||
# Registracija samo za autodizalice (Faker format)
|
||||
reg = None
|
||||
if tip == 'dizalica_auto':
|
||||
# Generira format sličan ZG-1234-LH
|
||||
reg = f"ZG-{fake.numerify('####')}-LH"
|
||||
|
||||
# Radni sati
|
||||
sati = random.uniform(500.0, 12000.0) if tip == 'dizalica_toranj' else random.uniform(100.0, 5000.0)
|
||||
|
||||
# Faker za datume (unutar zadnjih godinu dana)
|
||||
datum_atesta = fake.date_between(start_date='-1y', end_date='today')
|
||||
|
||||
try:
|
||||
Stroj.objects.create(
|
||||
vlasnik=random.choice(kupci),
|
||||
naziv=f"Liebherr {model_naziv}",
|
||||
serijski_broj=serijski,
|
||||
marka='Liebherr',
|
||||
model_stroja=model_naziv,
|
||||
godina_proizvodnje=random.randint(2015, 2024),
|
||||
tip=tip,
|
||||
radni_sati=round(sati, 2),
|
||||
registracija=reg,
|
||||
datum_zadnjeg_atesta=datum_atesta
|
||||
)
|
||||
created_count += 1
|
||||
except Exception as e:
|
||||
self.stderr.write(f"Greška kod S/N {serijski}: {e}")
|
||||
continue
|
||||
|
||||
self.stdout.write(self.style.SUCCESS(f'✅ Uspješno dodano {created_count} Liebherr strojeva!'))
|
||||
71
001.BACKEND/fleet/management/commands/populate_vozila.py
Normal file
71
001.BACKEND/fleet/management/commands/populate_vozila.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import random
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.core.exceptions import ValidationError
|
||||
from faker import Faker
|
||||
from fleet.models import Vozilo
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Popunjava bazu podataka s gospodarskim vozilima koristeći Faker'
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'total',
|
||||
type=int,
|
||||
help='Broj vozila koje želiš kreirati',
|
||||
default=5
|
||||
)
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
total = kwargs['total']
|
||||
fake = Faker(['hr_HR'])
|
||||
|
||||
# Modeli koji se pojavljuju u tvom radnom nalogu (CSV)
|
||||
modeli_podaci = [
|
||||
'VW Transporter T6',
|
||||
'Mercedes-Benz Vito',
|
||||
'Citroen Jumper',
|
||||
'Ford Transit Custom',
|
||||
'Renault Kangoo Maxi',
|
||||
'Peugeot Boxer',
|
||||
'Opel Vivaro',
|
||||
]
|
||||
|
||||
self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} vozila u flotu...'))
|
||||
|
||||
brojac = 0
|
||||
while brojac < total:
|
||||
model_naziv = random.choice(modeli_podaci)
|
||||
|
||||
# Generiranje registracije koristeći Faker numerify/bothify
|
||||
# Format: ZG 1234 AB
|
||||
gradovi = ['ZG', 'ST', 'RI', 'OS', 'VZ', 'PU', 'KA', 'KC']
|
||||
grad = random.choice(gradovi)
|
||||
reg_oznaka = fake.numerify(text='####') # npr. 6732
|
||||
reg_slova = fake.bothify(text='??', letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ') # npr. II
|
||||
registracija = f"{grad}{reg_oznaka}{reg_slova}"
|
||||
|
||||
# Kilometri: Koristimo tvoju logiku da trenutni budu veći od početnih
|
||||
pocetni = random.randint(0, 150000)
|
||||
dodatni = random.randint(500, 20000)
|
||||
trenutni = pocetni + dodatni
|
||||
|
||||
try:
|
||||
# Koristimo registraciju u nazivu radi lakšeg prepoznavanja u Astro frontendu
|
||||
vozilo = Vozilo.objects.create(
|
||||
naziv=f"{model_naziv} ({grad})",
|
||||
registracija=registracija,
|
||||
pocetni_kilometri=pocetni,
|
||||
trenutni_kilometri=trenutni,
|
||||
status=random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan'])
|
||||
)
|
||||
brojac += 1
|
||||
self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}]")
|
||||
|
||||
except ValidationError:
|
||||
# Ako Faker pogodi postojeću registraciju, samo nastavi dalje
|
||||
continue
|
||||
except Exception as e:
|
||||
self.stderr.write(f" ❌ Greška: {e}")
|
||||
break
|
||||
|
||||
self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} vozila u flotu.'))
|
||||
Reference in New Issue
Block a user