prije gemini provjere
This commit is contained in:
86
001.BACKEND/fleet/management/commands/populate_vozila.py
Normal file
86
001.BACKEND/fleet/management/commands/populate_vozila.py
Normal file
@@ -0,0 +1,86 @@
|
||||
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 sinkronizirano s Astro logistikom'
|
||||
|
||||
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 odgovaraju tvom voznom parku za mobilne servisne timove
|
||||
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} servisnih vozila u flotu...'))
|
||||
|
||||
brojac = 0
|
||||
maksimalni_pokusaji = total * 5
|
||||
pokusaji = 0
|
||||
|
||||
while brojac < total and pokusaji < maksimalni_pokusaji:
|
||||
pokusaji += 1
|
||||
model_naziv = random.choice(modeli_podaci)
|
||||
|
||||
# Generiranje realistične registracije u formatu: ZG 1234-AB
|
||||
gradovi = ['ZG', 'KR', 'KA', 'ST', 'RI', 'OS', 'VZ', 'PU']
|
||||
grad = random.choice(gradovi)
|
||||
|
||||
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:
|
||||
# Provjeravamo postoji li već ova registracija u bazi unaprijed
|
||||
if Vozilo.objects.filter(registracija=registracija).exists():
|
||||
continue
|
||||
|
||||
vozilo = Vozilo.objects.create(
|
||||
naziv=model_naziv,
|
||||
registracija=registracija,
|
||||
pocetni_kilometri=pocetni,
|
||||
trenutni_kilometri=trenutni,
|
||||
status=status_izbor
|
||||
)
|
||||
brojac += 1
|
||||
self.stdout.write(f" ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}] | Status: {status_izbor} ({brojac}/{total})")
|
||||
|
||||
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" ❌ Kritična greška pri upisu vozila: {e}")
|
||||
break
|
||||
|
||||
self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} servisnih vozila u bazu flote.'))
|
||||
Reference in New Issue
Block a user