prije gemini provjere

This commit is contained in:
mariomitte
2026-05-31 19:21:25 +02:00
commit 9aff9c5dc1
191 changed files with 17016 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
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 sinkronizirano s logistikom flote'
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'])
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
# Bogatiji katalog usklađen s tvorničkim Liebherr oznakama i tvojim TIP_STROJA choices
liebherr_katalog = {
'dizalica_toranj': [
'132 EC-H 8 Litronic',
'280 EC-H 12',
'81 K.1',
'172 EC-B 8',
'125 K'
],
'dizalica_auto': [
'LTM 1030-2.1',
'LTM 1050-3.1',
'LTM 1060-3.1',
'LTM 1120-4.1',
'LTM 1350-6.1', # Dodan LTM 1350 (sukladno planiranim modifikacijama ventila)
'LTC 1050-3.1'
]
}
self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Generiram {total} Liebherr strojeva u bazu...'))
created_count = 0
for _ in range(total):
tip = random.choice(['dizalica_toranj', 'dizalica_auto'])
model_naziv = random.choice(liebherr_katalog[tip])
# Odabiremo nasumičnog vlasnika za ovaj stroj
vlasnik_stroja = random.choice(kupci)
# Realistični Liebherr tvornički serijski brojevi (npr. LE-054321)
serijski = f"LE-{fake.numerify(text='0######')}"
# USKLAĐENO: Registracija za autodizalice sada ima ispravne razmake i crticu
# Koristimo reg. oznaku koja odgovara sjedištu vlasnika ili nasumični HR grad
reg = None
if tip == 'dizalica_auto':
gradovi = ['ZG', 'KA', 'RI', 'ST', 'OS', 'KR']
grad = random.choice(gradovi)
reg_broj = fake.numerify(text='####')
reg_slova = fake.bothify(text='??', letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ')
reg = f"{grad} {reg_broj}-{reg_slova}"
# Radni sati dizalice
sati = random.uniform(800.0, 15000.0) if tip == 'dizalica_toranj' else random.uniform(200.0, 6000.0)
# Atesti unutar zadnjih godinu dana
datum_atesta = fake.date_between(start_date='-1y', end_date='today')
# USKLAĐENO: Generiramo lokaciju. Ako klijent/vlasnik ima definiran grad,
# stroj se primarno nalazi na gradilištu u tom gradu (ili okolici), inače koristimo fake.city()
lokacija_stroja = vlasnik_stroja.grad if (vlasnik_stroja and hasattr(vlasnik_stroja, 'grad')) else fake.city()
# Nasumična simulacija aktivnih gradilišta u regiji
if random.random() > 0.6:
lokacija_stroja = f"Gradilište {lokacija_stroja}"
try:
Stroj.objects.create(
vlasnik=vlasnik_stroja,
naziv=f"Liebherr {model_naziv}",
serijski_broj=serijski,
marka='Liebherr',
model_stroja=model_naziv,
godina_proizvodnje=random.randint(2012, 2025),
tip=tip,
radni_sati=round(sati, 1), # Zaokružujemo na 1 decimalu sukladno formama
registracija=reg,
datum_zadnjeg_atesta=datum_atesta
)
created_count += 1
self.stdout.write(f" ✅ Kreiran: Liebherr {model_naziv} (Vlasnik: {vlasnik_stroja.naziv})")
except Exception as e:
self.stderr.write(f" ❌ Greška kod S/N {serijski}: {e}")
continue
self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {created_count} Liebherr strojeva u bazu.'))

View 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.'))