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