101 lines
4.1 KiB
Python
101 lines
4.1 KiB
Python
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)
|