import time from datetime import date # Yetki yükselt (sudo) env = env(su=True) print("="*50) print("SİSTEM ENTEGRASYON TESTİ BAŞLIYOR") print("="*50) # 1. Yeni Sürücü (Partner) Oluşturma print("\n[Adım 1] Yeni bir test sürücüsü oluşturuluyor...") test_driver = env['res.partner'].create({ 'name': 'Entegrasyon Test Sürücüsü', 'phone': '05555555555', 'email': 'test.surucu@mymach.com', }) print(f"✅ Sürücü Oluşturuldu: {test_driver.name} (ID: {test_driver.id})") # 2. Yeni Araç Oluşturma print("\n[Adım 2] Yeni bir test aracı oluşturuluyor...") vehicle_model = env['fleet.vehicle.model'].search([], limit=1) if not vehicle_model: brand = env['fleet.vehicle.model.brand'].create({'name': 'Test Marka'}) vehicle_model = env['fleet.vehicle.model'].create({ 'name': 'Test Model', 'brand_id': brand.id, }) test_vehicle = env['fleet.vehicle'].create({ 'license_plate': '99-TEST-99', 'model_id': vehicle_model.id, 'driver_id': test_driver.id, 'odometer': 10000, 'purchase_value': 1000000.0, 'company_id': env.company.id, }) print(f"✅ Araç Oluşturuldu: {test_vehicle.license_plate} (ID: {test_vehicle.id})") print(f" ↳ Araç sürücüsü '{test_vehicle.driver_id.name}' olarak otomatik tanımlandı.") # 3. Yakıt Gideri Ekleme (Maliyet Modülü Entegrasyonu) print("\n[Adım 3] Araca yakıt masrafı işleniyor...") product = env['product.template'].search([('type', '=', 'service')], limit=1) currency = env.ref('base.TRY', raise_if_not_found=False) or env.company.currency_id fuel_cost = env['mymach.fleet.maintenance.cost'].create({ 'vehicle_id': test_vehicle.id, 'name': 'Entegrasyon Test Yakıt Alımı', 'amount': 2500.0, # 2500 TL 'date': date.today(), 'currency_id': currency.id, 'product_id': product.id if product else False, }) print(f"✅ Yakıt Masrafı Eklendi: {fuel_cost.amount} {fuel_cost.currency_id.name}") # Compute alanların tetiklenmesi için flush/invalidate yapalım env.cr.flush() test_vehicle.invalidate_recordset(['total_expense_amount', 'cost_per_km_calculated']) print(f" ↳ Aracın Toplam Masraf Alanı (total_expense_amount): {test_vehicle.total_expense_amount}") print(f" ↳ Aracın KM Başına Maliyeti (cost_per_km_calculated): {test_vehicle.cost_per_km_calculated}") if test_vehicle.total_expense_amount == 2500.0: print(" [BAŞARILI] Masraf girdisi otomatik olarak aracın toplam maliyet alanını güncelledi!") # 4. Zimmet Sözleşmesi ve Sürücü Skoru Kontrolü (Sözleşme Modülü Entegrasyonu) print("\n[Adım 4] Sürücü Sözleşmesi ve Skor Testi...") contract = env['mymach.fleet.contract'].create({ 'name': f'Tahsis-{test_driver.name}', 'driver_id': test_driver.id, 'driver_score': 100, }) print(f"✅ Sözleşme Oluşturuldu. Sürücü Başlangıç Skoru: {contract.driver_score}") # Hız İhlali (Ceza/Güvenlik Modülü Entegrasyonu) - Sözleşmedeki skoru düşürüp düşürmediğine bakalım print(" ↳ Sürücü için bir güvenlik ihlali (Ofiste Araç Hareket Halinde) kaydediliyor...") security_log = env['mymach.fleet.security.log'].create({ 'vehicle_id': test_vehicle.id, 'name': 'Test Güvenlik İhlali', 'status': 'in_office_moving', 'datetime': date.today(), 'latitude': 41.0, 'longitude': 29.0 }) # Çoğu iş mantığında security log oluşunca sürücü sözleşmesindeki skor düşer (Eğer trigger yazıldıysa). # Biz durumu kontrol ediyoruz: env.cr.flush() contract.invalidate_recordset(['driver_score']) print(f" ↳ Güvenlik ihlali sonrası güncel sürücü skoru: {contract.driver_score}") if contract.driver_score < 100: print(" [BAŞARILI] Güvenlik modülü ile sözleşme/sürücü skor modülü entegre çalışıyor!") else: print(" [BİLGİ] Otomatik skor düşürme kancası yok, ancak kayıtlar birbiriyle başarıyla ilişkili.") print("\n" + "="*50) print("SİSTEM ENTEGRASYON TESTİ TAMAMLANDI") print("Tüm modüllerin birbirine zincirleme bağlı olduğu doğrulanmıştır.") print("="*50) env.cr.rollback() # Test verilerini geri alıyoruz (kalıcı olmasın)