This commit is contained in:
2026-05-22 06:08:51 +00:00
parent c078a257e9
commit bafec754d1
131 changed files with 2346 additions and 893 deletions

View File

@@ -1,11 +1,12 @@
import random
from django.core.management.base import BaseCommand
from django.core.exceptions import ValidationError
from django.db import IntegrityError
from faker import Faker
from fleet.models import Vozilo
class Command(BaseCommand):
help = 'Popunjava bazu podataka s gospodarskim vozilima koristeći Faker'
help = 'Popunjava bazu podataka s gospodarskim vozilima sinkronizirano s Astro logistikom'
def add_arguments(self, parser):
parser.add_argument(
@@ -19,7 +20,7 @@ class Command(BaseCommand):
total = kwargs['total']
fake = Faker(['hr_HR'])
# Modeli koji se pojavljuju u tvom radnom nalogu (CSV)
# Modeli koji odgovaraju tvom voznom parku za mobilne servisne timove
modeli_podaci = [
'VW Transporter T6',
'Mercedes-Benz Vito',
@@ -30,42 +31,56 @@ class Command(BaseCommand):
'Opel Vivaro',
]
self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} vozila u flotu...'))
self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} servisnih vozila u flotu...'))
brojac = 0
while brojac < total:
maksimalni_pokusaji = total * 5
pokusaji = 0
while brojac < total and pokusaji < maksimalni_pokusaji:
pokusaji += 1
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']
# Generiranje realistične registracije u formatu: ZG 1234-AB
gradovi = ['ZG', 'KR', 'KA', 'ST', 'RI', 'OS', 'VZ', 'PU']
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)
reg_broj = fake.numerify(text=random.choice(['###', '####']))
reg_slova = fake.bothify(text=random.choice(['?', '??']), letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ')
registracija = f"{grad} {reg_broj}-{reg_slova}"
# Kilometraža: Trenutni kilometri moraju pratiti povijest korištenja vozila
pocetni = random.randint(10000, 220000)
dodatni = random.randint(1500, 45000)
trenutni = pocetni + dodatni
# POPRAVLJENO: Koristimo mala slova sukladno tvojim Choice ograničenjima u modelu
status_izbor = random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan'])
try:
# Koristimo registraciju u nazivu radi lakšeg prepoznavanja u Astro frontendu
# Provjeravamo postoji li već ova registracija u bazi unaprijed
if Vozilo.objects.filter(registracija=registracija).exists():
continue
vozilo = Vozilo.objects.create(
naziv=f"{model_naziv} ({grad})",
naziv=model_naziv,
registracija=registracija,
pocetni_kilometri=pocetni,
trenutni_kilometri=trenutni,
status=random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan'])
status=status_izbor
)
brojac += 1
self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}]")
self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}] | Status: {status_izbor} ({brojac}/{total})")
except ValidationError:
# Ako Faker pogodi postojeću registraciju, samo nastavi dalje
except IntegrityError:
# Ako baza ipak prijavi duplikat registracije unutar transakcije, samo idemo dalje
continue
except ValidationError as ve:
# Ako se pojavi neka druga validacijska greška, ispiši je da znamo o čemu se radi
self.stderr.write(f" ⚠️ Validacijska greška za {model_naziv}: {ve}")
continue
except Exception as e:
self.stderr.write(f"Greška: {e}")
self.stderr.write(f"Kritična greška pri upisu vozila: {e}")
break
self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} vozila u flotu.'))
self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} servisnih vozila u bazu flote.'))