İlk versiyon: MyMach Fleet Intelligence ve yapılandırmalar

This commit is contained in:
cerenX9
2026-07-20 19:41:40 +03:00
commit f497805d08
85 changed files with 7071 additions and 0 deletions

102
test_suite.py Normal file
View File

@@ -0,0 +1,102 @@
import datetime
import urllib.request
import json
from odoo import fields
env = env(user=1)
print("\n" + "="*50)
print("MYMACH AKILLI FILO - KAPSAMLI FOTOĞRAFLI TESLİM & İADE TEST SUİTİ")
print("="*50)
# --- HAZIRLIK ---
print("\n[HAZIRLIK] Test Verileri Oluşturuluyor...")
partner = env['res.partner'].create({'name': 'TEST_Sürücü_Teslim'})
employee = env['hr.employee'].create({'name': 'TEST_Personel_Teslim', 'work_contact_id': partner.id})
contract = env['mymach.fleet.contract'].create({
'name': 'CON-HANDOVER-TEST',
'driver_id': partner.id,
'personal_use_policy': 'forbidden',
'commute_allowed': 'allowed',
'driver_score': 100
})
model_id = env['fleet.vehicle.model'].search([], limit=1)
vehicle = env['fleet.vehicle'].create({
'model_id': model_id.id,
'license_plate': '34 TESLIM 26',
'driver_id': partner.id,
'purchase_value': 50000,
'tank_capacity': 60.0,
'factory_avg_consumption': 6.0
})
print(f" -> Sözleşme oluşturuldu: {contract.name}")
print(f" -> Araç oluşturuldu: {vehicle.license_plate}")
# ---------------------------------------------------------
# BÖLÜM 1: ARAÇ TESLİM ALIM (GİRİŞ) İŞLEMİ
# ---------------------------------------------------------
print("\n[TEST 1] ARAÇ TESLİM ALIM (GİRİŞ) YAZILIM TESTİ")
# Sahte bir fotoğraf (Binary string)
dummy_photo = b"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
handover = env['mymach.fleet.handover'].create({
'vehicle_id': vehicle.id,
'driver_id': partner.id,
'start_odometer': 12000.0,
'start_fuel_level': 80.0, # %80 depo ile aldı
'start_photo': dummy_photo
})
print(f" -> Kayıt Oluşturuldu: {handover.name} (Durum: {handover.state})")
handover.action_take()
print(f" -> Teslim Alındı Sonrası Durum: {handover.state}")
print(f" -> Araç Depo Durumu (Litre): {vehicle.current_fuel_level} L (Kapasite: {vehicle.tank_capacity} L)")
# ---------------------------------------------------------
# BÖLÜM 2: ARAÇ TESLİM ETME (İADE) İŞLEMİ
# ---------------------------------------------------------
print("\n[TEST 2] ARAÇ İADE VE ODOMETER GÜNCELLEME TESTİ")
handover.write({
'end_odometer': 12350.0, # 350 KM yol yapmış
'end_fuel_level': 45.0, # %45 depo ile iade etti
'end_photo': dummy_photo
})
handover.action_return()
print(f" -> İade Edildi Sonrası Durum: {handover.state}")
print(f" -> Yapılan Yol (Hesaplanan): {handover.odometer_diff} KM")
print(f" -> Yakıt Değişimi: %{handover.fuel_diff}")
# En son odometer değerini kontrol edelim
last_odometer = env['fleet.vehicle.odometer'].search([('vehicle_id', '=', vehicle.id)], order='value desc', limit=1)
print(f" -> Araç Son Kilometresi (Odometer): {last_odometer.value} KM")
# ---------------------------------------------------------
# BÖLÜM 3: YÖNETİCİ DENETİM VE ONAYI
# ---------------------------------------------------------
print("\n[TEST 3] YÖNETİCİ KIYASLAMA VE ONAYLAMA")
handover.write({
'manager_note': 'Yakıt farkı makul seviyede, hasarsız teslim alındı.'
})
handover.action_compare()
print(f" -> Denetim Sonrası Durum: {handover.state} (Onaylandı mı?: {handover.is_approved})")
# ---------------------------------------------------------
# BÖLÜM 4: OTONOM FOTOĞRAF PURGE (CRON) TESTİ
# ---------------------------------------------------------
print("\n[TEST 4] 10 GÜNLÜK FOTOĞRAF OTONOM PURGE CRON TESTİ")
# İade tarihini 11 gün öncesine alalım
eleven_days_ago = fields.Datetime.now() - datetime.timedelta(days=11)
handover.write({'return_datetime': eleven_days_ago})
print(f" -> İade Tarihi Geriye Alındı: {handover.return_datetime}")
print(f" -> Temizlik Öncesi Fotoğraflar Mevcut mu?: (Alış: {bool(handover.start_photo)}, İade: {bool(handover.end_photo)})")
# Cron fonksiyonunu çalıştır
deleted_count = env['mymach.fleet.handover'].action_purge_expired_photos()
print(f" -> Cron Çalıştırıldı. Temizlenen Kayıt Sayısı: {deleted_count}")
print(f" -> Temizlik Sonrası Fotoğraflar Mevcut mu?: (Alış: {bool(handover.start_photo)}, İade: {bool(handover.end_photo)})")
print("\n" + "="*50)
print("FOTOĞRAFLI TESLİM/İADE VE CRON TESTLERİ BAŞARIYLA TAMAMLANDI!")
print("="*50 + "\n")