21.07v
This commit is contained in:
@@ -2151,3 +2151,125 @@ msgstr "🚨 غير متوافق (%(dev)s كيلومتر، الاستخدام ا
|
||||
#: code:addons/mymach_fleet_intelligence/controllers/main.py:0
|
||||
msgid "🚨 UYUMSUZ ROTA (YÖNETİCİYE ALARM BİLDİRİLDİ)"
|
||||
msgstr "🚨 طريق غير متوافق (تم إبلاغ المدير بالإنذار)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "YÖNETİCİ PORTALI / MANAGEMENT PANEL"
|
||||
msgstr "بوابة الإدارة / لوحة الإدارة"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "PERSONEL PORTALI / DRIVER DASHBOARD"
|
||||
msgstr "بوابة الموظفين / لوحة القيادة للسائق"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Grafik gösterimi için sistemde kayıtlı aktif bir araç bulunamadı."
|
||||
msgstr "لم يتم العثور على أداة نشطة مسجلة في النظام للعرض الرسومي."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Kat Edilen Kilometre (KM)"
|
||||
msgstr "الكيلومترات المقطوعة (KM)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Harcanan Yakıt (Litre)"
|
||||
msgstr "الوقود المستهلك (لتر)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Yakıt Gideri (TL)"
|
||||
msgstr "نفقات الوقود (ليرة تركية)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Telemetri Analizi & Finansal Gider Analitiği"
|
||||
msgstr "تحليل القياس عن بعد وتحليلات النفقات المالية"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Sistem Başarıyla Güncellendi"
|
||||
msgstr "تم تحديث النظام بنجاح"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Yaptığınız tüm değişiklikler ve seçimler veri tabanına kalıcı olarak "
|
||||
"kaydedilmiştir."
|
||||
msgstr ""
|
||||
"يتم حفظ جميع التغييرات والاختيارات التي تجريها بشكل دائم في قاعدة البيانات."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "İstanbul Havalimanı"
|
||||
msgstr "مطار اسطنبول"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Konumu İçin Alternatif 3 Rota Belirlendi"
|
||||
msgstr "وتم تحديد 3 طرق بديلة لموقعها"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA A (En Kısa)"
|
||||
msgstr "الطريق أ (الأقصر)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA B (Ekonomik)"
|
||||
msgstr "الطريق ب (الاقتصادي)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA C (Alternatif)"
|
||||
msgstr "الطريق ج (بديل)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 1.1 L (Otoyol)"
|
||||
msgstr "الوقود المقدر: 1.1 لتر (الطريق السريع)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 0.9 L (Şehir İçi)"
|
||||
msgstr "الوقود المقدر: 0.9 لتر (حضري)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 1.3 L (Akıcı)"
|
||||
msgstr "الوقود المقدر: 1.3 لتر (بطلاقة)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Hata"
|
||||
msgstr "خطأ"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Simülasyon için geçerli bir araç seçilmelidir."
|
||||
msgstr "يجب تحديد أداة صالحة للمحاكاة."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Belirsiz"
|
||||
msgstr "غير مؤكد"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"ROTA SAPMA İHLALİ: Sürücü ({0}), {1} konumuna gitmek için seçilen rotadan "
|
||||
"{2:.1f} KM sapmıştır (Tolerans: 1.0 KM)."
|
||||
msgstr ""
|
||||
"انتهاك انحراف المسار: انحرف السائق ({0}) بمقدار {2:.1f} كيلومتر عن المسار "
|
||||
"المحدد للذهاب إلى {1} (التسامح: 1.0 كيلومتر)."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"🚨 <b>ROTA SAPMA ALARMI (YÖNETİCİ UYARISI):</b> Sürücü ({0}), {1} rotasından "
|
||||
"{2:.1f} KM sapmıştır. Sözleşmesinde serbest kullanım hakkı bulunmadığı için "
|
||||
"yöneticiye ihlal uyarısı iletilmiştir."
|
||||
msgstr ""
|
||||
"🚨 <b>إنذار انحراف المسار (تحذير المشرف):</b> انحرف السائق ({0}) بمقدار "
|
||||
"{2:.1f} كيلومتر عن المسار {1}. نظرًا لعدم وجود حق استخدام مجاني في العقد، تم"
|
||||
" إرسال تحذير بالمخالفة إلى المدير."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "🚨 ROTA SAPMA UYARISI!"
|
||||
msgstr "🚨 تحذير من انحراف المسار!"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Sürücü rotasından {0:.1f} KM sapmıştır! Yöneticiye uyarı iletildi ve ihlal "
|
||||
"logu kaydedildi."
|
||||
msgstr ""
|
||||
"لقد انحرف السائق بمقدار {0:.1f} كيلومتر عن طريقه! تم إرسال إنذار للمسؤول وتم"
|
||||
" تسجيل سجل المخالفات."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Sürüş Tamamlandı"
|
||||
msgstr "اكتملت الرحلة"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Yolculuk başarıyla tamamlandı. Herhangi bir sapma uyarısı tetiklenmedi."
|
||||
msgstr "وتمت الرحلة بنجاح. لم يتم تشغيل أي تنبيهات انحراف."
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2181,3 +2181,130 @@ msgstr "🚨 INCOMPATIBLE (%(dev)s km Prohibido Uso Personal)"
|
||||
#: code:addons/mymach_fleet_intelligence/controllers/main.py:0
|
||||
msgid "🚨 UYUMSUZ ROTA (YÖNETİCİYE ALARM BİLDİRİLDİ)"
|
||||
msgstr "🚨 RUTA INCOMPATIBLE (ALARMA REPORTADA AL ADMINISTRADOR)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "YÖNETİCİ PORTALI / MANAGEMENT PANEL"
|
||||
msgstr "PORTAL DE ADMINISTRACIÓN / PANEL DE GESTIÓN"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "PERSONEL PORTALI / DRIVER DASHBOARD"
|
||||
msgstr "PORTAL DE PERSONAL / TABLERO DEL CONDUCTOR"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Grafik gösterimi için sistemde kayıtlı aktif bir araç bulunamadı."
|
||||
msgstr ""
|
||||
"No se encontró ninguna herramienta activa registrada en el sistema para "
|
||||
"visualización gráfica."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Kat Edilen Kilometre (KM)"
|
||||
msgstr "Kilómetros recorridos (KM)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Harcanan Yakıt (Litre)"
|
||||
msgstr "Combustible gastado (litros)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Yakıt Gideri (TL)"
|
||||
msgstr "Gasto de combustible (TL)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Telemetri Analizi & Finansal Gider Analitiği"
|
||||
msgstr "Análisis de telemetría y análisis de gastos financieros"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Sistem Başarıyla Güncellendi"
|
||||
msgstr "Sistema actualizado exitosamente"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Yaptığınız tüm değişiklikler ve seçimler veri tabanına kalıcı olarak "
|
||||
"kaydedilmiştir."
|
||||
msgstr ""
|
||||
"Todos los cambios y selecciones que realice se guardan permanentemente en la"
|
||||
" base de datos."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "İstanbul Havalimanı"
|
||||
msgstr "Aeropuerto de Estambul"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Konumu İçin Alternatif 3 Rota Belirlendi"
|
||||
msgstr "Se han determinado 3 rutas alternativas para su ubicación"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA A (En Kısa)"
|
||||
msgstr "RUTA A (La más corta)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA B (Ekonomik)"
|
||||
msgstr "RUTA B (Económica)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "ROTA C (Alternatif)"
|
||||
msgstr "RUTA C (Alternativa)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 1.1 L (Otoyol)"
|
||||
msgstr "Combustible estimado: 1,1 L (carretera)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 0.9 L (Şehir İçi)"
|
||||
msgstr "Combustible estimado: 0,9 L (urbano)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Tahmini Yakıt: 1.3 L (Akıcı)"
|
||||
msgstr "Combustible estimado: 1,3 L (fluido)"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Hata"
|
||||
msgstr "Error"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Simülasyon için geçerli bir araç seçilmelidir."
|
||||
msgstr "Se debe seleccionar una herramienta válida para la simulación."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Belirsiz"
|
||||
msgstr "Incierto"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"ROTA SAPMA İHLALİ: Sürücü ({0}), {1} konumuna gitmek için seçilen rotadan "
|
||||
"{2:.1f} KM sapmıştır (Tolerans: 1.0 KM)."
|
||||
msgstr ""
|
||||
"VIOLACIÓN DE DESVIACIÓN DE RUTA: El conductor ({0}) se desvió {2:.1f} KM de "
|
||||
"la ruta seleccionada para ir a {1} (Tolerancia: 1.0 KM)."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"🚨 <b>ROTA SAPMA ALARMI (YÖNETİCİ UYARISI):</b> Sürücü ({0}), {1} rotasından "
|
||||
"{2:.1f} KM sapmıştır. Sözleşmesinde serbest kullanım hakkı bulunmadığı için "
|
||||
"yöneticiye ihlal uyarısı iletilmiştir."
|
||||
msgstr ""
|
||||
"🚨 <b>ALARMA DE DESVIACIÓN DE RUTA (ADVERTENCIA ADMINISTRATIVA):</b> El "
|
||||
"conductor ({0}) se ha desviado {2:.1f} KM de la ruta {1}. Como en el "
|
||||
"contrato no figuraba ningún derecho de uso gratuito, se envió al "
|
||||
"administrador una advertencia de infracción."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "🚨 ROTA SAPMA UYARISI!"
|
||||
msgstr "🚨 ¡ADVERTENCIA DE DESVIACIÓN DE RUTA!"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Sürücü rotasından {0:.1f} KM sapmıştır! Yöneticiye uyarı iletildi ve ihlal "
|
||||
"logu kaydedildi."
|
||||
msgstr ""
|
||||
"¡El conductor se ha desviado {0:.1f} KM de su ruta! Se envió una advertencia"
|
||||
" al administrador y se registró el registro de infracciones."
|
||||
|
||||
#: models/home.py:0
|
||||
msgid "Sürüş Tamamlandı"
|
||||
msgstr "Viaje completado"
|
||||
|
||||
#: models/home.py:0
|
||||
msgid ""
|
||||
"Yolculuk başarıyla tamamlandı. Herhangi bir sapma uyarısı tetiklenmedi."
|
||||
msgstr ""
|
||||
"El viaje se completó con éxito. No se activaron alertas de desviación."
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
71
addons/mymach_fleet_intelligence/i18n/translate_fast.py
Normal file
71
addons/mymach_fleet_intelligence/i18n/translate_fast.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import polib
|
||||
from deep_translator import GoogleTranslator
|
||||
import os
|
||||
|
||||
base_dir = "/mnt/extra-addons/mymach_fleet_intelligence/i18n"
|
||||
|
||||
new_strings = [
|
||||
"YÖNETİCİ PORTALI / MANAGEMENT PANEL",
|
||||
"PERSONEL PORTALI / DRIVER DASHBOARD",
|
||||
"Grafik gösterimi için sistemde kayıtlı aktif bir araç bulunamadı.",
|
||||
"Kat Edilen Kilometre (KM)",
|
||||
"Harcanan Yakıt (Litre)",
|
||||
"Yakıt Gideri (TL)",
|
||||
"Telemetri Analizi & Finansal Gider Analitiği",
|
||||
"Sistem Başarıyla Güncellendi",
|
||||
"Yaptığınız tüm değişiklikler ve seçimler veri tabanına kalıcı olarak kaydedilmiştir.",
|
||||
"İstanbul Havalimanı",
|
||||
"Konumu İçin Alternatif 3 Rota Belirlendi",
|
||||
"ROTA A (En Kısa)",
|
||||
"ROTA B (Ekonomik)",
|
||||
"ROTA C (Alternatif)",
|
||||
"Tahmini Yakıt: 1.1 L (Otoyol)",
|
||||
"Tahmini Yakıt: 0.9 L (Şehir İçi)",
|
||||
"Tahmini Yakıt: 1.3 L (Akıcı)",
|
||||
"Hata",
|
||||
"Simülasyon için geçerli bir araç seçilmelidir.",
|
||||
"Belirsiz",
|
||||
"ROTA SAPMA İHLALİ: Sürücü ({0}), {1} konumuna gitmek için seçilen rotadan {2:.1f} KM sapmıştır (Tolerans: 1.0 KM).",
|
||||
"🚨 <b>ROTA SAPMA ALARMI (YÖNETİCİ UYARISI):</b> Sürücü ({0}), {1} rotasından {2:.1f} KM sapmıştır. Sözleşmesinde serbest kullanım hakkı bulunmadığı için yöneticiye ihlal uyarısı iletilmiştir.",
|
||||
"🚨 ROTA SAPMA UYARISI!",
|
||||
"Sürücü rotasından {0:.1f} KM sapmıştır! Yöneticiye uyarı iletildi ve ihlal logu kaydedildi.",
|
||||
"Sürüş Tamamlandı",
|
||||
"Yolculuk başarıyla tamamlandı. Herhangi bir sapma uyarısı tetiklenmedi."
|
||||
]
|
||||
|
||||
target_langs = {
|
||||
'fr_FR': 'fr',
|
||||
'de_DE': 'de',
|
||||
'es_ES': 'es',
|
||||
'ar_001': 'ar',
|
||||
'en_US': 'en'
|
||||
}
|
||||
|
||||
for odoo_lang, glang in target_langs.items():
|
||||
print(f"Translating for {odoo_lang}...")
|
||||
po_path = os.path.join(base_dir, f"{odoo_lang}.po")
|
||||
if not os.path.exists(po_path):
|
||||
continue
|
||||
|
||||
po = polib.pofile(po_path, encoding='utf-8')
|
||||
existing_msgids = [entry.msgid for entry in po]
|
||||
|
||||
translator = GoogleTranslator(source='tr', target=glang)
|
||||
|
||||
for string in new_strings:
|
||||
if string not in existing_msgids:
|
||||
try:
|
||||
translated = translator.translate(string)
|
||||
new_entry = polib.POEntry(
|
||||
msgid=string,
|
||||
msgstr=translated,
|
||||
occurrences=[('models/home.py', '0')]
|
||||
)
|
||||
po.append(new_entry)
|
||||
except Exception as e:
|
||||
print(f"Error translating {string}: {e}")
|
||||
|
||||
po.save(po_path)
|
||||
print(f"Saved {po_path}")
|
||||
|
||||
print("Done fast translations!")
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, fields, api
|
||||
from odoo import models, fields, api, _
|
||||
|
||||
class MymachFleetHome(models.Model):
|
||||
"""
|
||||
@@ -71,9 +71,9 @@ class MymachFleetHome(models.Model):
|
||||
def _compute_display_title(self):
|
||||
for record in self:
|
||||
if self.env.user.has_group('mymach_fleet_intelligence.group_mymach_fleet_manager'):
|
||||
record.display_title = 'YÖNETİCİ PORTALI / MANAGEMENT PANEL'
|
||||
record.display_title = _('YÖNETİCİ PORTALI / MANAGEMENT PANEL')
|
||||
else:
|
||||
record.display_title = 'PERSONEL PORTALI / DRIVER DASHBOARD'
|
||||
record.display_title = _('PERSONEL PORTALI / DRIVER DASHBOARD')
|
||||
|
||||
def _compute_upcoming_maintenance_html(self):
|
||||
# Yaklaşan veya Süresi/KM'si geçmiş tüm bakımları tarihe ve KM hedefine göre sırala
|
||||
@@ -147,10 +147,11 @@ class MymachFleetHome(models.Model):
|
||||
for record in self:
|
||||
vehicle = record.selected_vehicle_id or self.env['fleet.vehicle'].search([], limit=1)
|
||||
if not vehicle:
|
||||
record.chart_html = """
|
||||
msg = _("Grafik gösterimi için sistemde kayıtlı aktif bir araç bulunamadı.")
|
||||
record.chart_html = f"""
|
||||
<div style="text-align: center; color: #94a3b8; padding: 30px; font-size: 14px; border: 1px dashed rgba(255,255,255,0.15); border-radius: 12px; background: rgba(15, 23, 42, 0.4);">
|
||||
<i class="fa fa-info-circle" style="font-size: 28px; color: #38bdf8; margin-bottom: 10px; display: block;"></i>
|
||||
Grafik gösterimi için sistemde kayıtlı aktif bir araç bulunamadı.
|
||||
{msg}
|
||||
</div>
|
||||
"""
|
||||
continue
|
||||
@@ -299,7 +300,7 @@ class MymachFleetHome(models.Model):
|
||||
# KM Serisi
|
||||
if metric in ('combined', 'km'):
|
||||
raw_datasets.append({
|
||||
'label': 'Kat Edilen Kilometre (KM)',
|
||||
'label': _('Kat Edilen Kilometre (KM)'),
|
||||
'data': km_data,
|
||||
'borderColor': '#38bdf8',
|
||||
'backgroundColor': 'rgba(56, 189, 248, 0.04)',
|
||||
@@ -312,7 +313,7 @@ class MymachFleetHome(models.Model):
|
||||
# Yakıt Hacmi Serisi
|
||||
if metric in ('combined', 'fuel_liters'):
|
||||
raw_datasets.append({
|
||||
'label': 'Harcanan Yakıt (Litre)',
|
||||
'label': _('Harcanan Yakıt (Litre)'),
|
||||
'data': fuel_data,
|
||||
'borderColor': '#fb923c',
|
||||
'backgroundColor': 'rgba(251, 146, 60, 0.04)',
|
||||
@@ -325,7 +326,7 @@ class MymachFleetHome(models.Model):
|
||||
# Yakıt Gideri Serisi
|
||||
if metric in ('combined', 'fuel_cost'):
|
||||
raw_datasets.append({
|
||||
'label': 'Yakıt Gideri (TL)',
|
||||
'label': _('Yakıt Gideri (TL)'),
|
||||
'data': fuel_cost_data,
|
||||
'borderColor': '#10b981',
|
||||
'backgroundColor': 'rgba(16, 185, 129, 0.04)',
|
||||
@@ -374,7 +375,7 @@ class MymachFleetHome(models.Model):
|
||||
</head>
|
||||
<body>
|
||||
<div class="chart-box">
|
||||
<h3>📈 {vehicle.license_plate or ""} Telemetri Analizi & Finansal Gider Analitiği</h3>
|
||||
<h3>📈 {vehicle.license_plate or ""} {_("Telemetri Analizi & Finansal Gider Analitiği")}</h3>
|
||||
<div style="position: relative; height: 210px; width: 100%;">
|
||||
<canvas id="canvasChart"></canvas>
|
||||
</div>
|
||||
@@ -505,8 +506,8 @@ class MymachFleetHome(models.Model):
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'title': 'Sistem Başarıyla Güncellendi',
|
||||
'message': 'Yaptığınız tüm değişiklikler ve seçimler veri tabanına kalıcı olarak kaydedilmiştir.',
|
||||
'title': _('Sistem Başarıyla Güncellendi'),
|
||||
'message': _('Yaptığınız tüm değişiklikler ve seçimler veri tabanına kalıcı olarak kaydedilmiştir.'),
|
||||
'sticky': False,
|
||||
'type': 'success',
|
||||
'next': {'type': 'ir.actions.client', 'tag': 'soft_reload'}
|
||||
@@ -515,30 +516,38 @@ class MymachFleetHome(models.Model):
|
||||
|
||||
def action_calculate_routes(self):
|
||||
for record in self:
|
||||
dest = record.route_destination or "İstanbul Havalimanı"
|
||||
dest = record.route_destination or _("İstanbul Havalimanı")
|
||||
title_text = _("Konumu İçin Alternatif 3 Rota Belirlendi")
|
||||
route_a = _("ROTA A (En Kısa)")
|
||||
route_b = _("ROTA B (Ekonomik)")
|
||||
route_c = _("ROTA C (Alternatif)")
|
||||
est_fuel_a = _("Tahmini Yakıt: 1.1 L (Otoyol)")
|
||||
est_fuel_b = _("Tahmini Yakıt: 0.9 L (Şehir İçi)")
|
||||
est_fuel_c = _("Tahmini Yakıt: 1.3 L (Akıcı)")
|
||||
|
||||
record.route_results_html = f"""
|
||||
<div style="margin-top: 15px; padding: 20px; background: rgba(15, 23, 42, 0.4); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px;">
|
||||
<h4 style="color: #fbbf24; margin-top: 0; margin-bottom: 15px; font-weight: 600; font-size: 14px; text-align: center;">🗺️ {dest} Konumu İçin Alternatif 3 Rota Belirlendi</h4>
|
||||
<h4 style="color: #fbbf24; margin-top: 0; margin-bottom: 15px; font-weight: 600; font-size: 14px; text-align: center;">🗺️ {dest} {title_text}</h4>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-3">
|
||||
<div style="background: rgba(56, 189, 248, 0.05); border: 1px solid rgba(56, 189, 248, 0.15); border-radius: 8px; padding: 15px; text-align: center;">
|
||||
<span style="color: #38bdf8; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">ROTA A (En Kısa)</span>
|
||||
<span style="color: #38bdf8; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">{route_a}</span>
|
||||
<h2 style="color: white; margin: 5px 0; font-size: 22px; font-weight: 700;">15.2 <span style="font-size: 13px; color: #94a3b8; font-weight: normal;">KM</span></h2>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">Tahmini Yakıt: 1.1 L (Otoyol)</p>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">{est_fuel_a}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<div style="background: rgba(16, 185, 129, 0.05); border: 1px solid rgba(16, 185, 129, 0.15); border-radius: 8px; padding: 15px; text-align: center;">
|
||||
<span style="color: #10b981; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">ROTA B (Ekonomik)</span>
|
||||
<span style="color: #10b981; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">{route_b}</span>
|
||||
<h2 style="color: white; margin: 5px 0; font-size: 22px; font-weight: 700;">16.5 <span style="font-size: 13px; color: #94a3b8; font-weight: normal;">KM</span></h2>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">Tahmini Yakıt: 0.9 L (Şehir İçi)</p>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">{est_fuel_b}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<div style="background: rgba(251, 146, 60, 0.05); border: 1px solid rgba(251, 146, 60, 0.15); border-radius: 8px; padding: 15px; text-align: center;">
|
||||
<span style="color: #fb923c; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">ROTA C (Alternatif)</span>
|
||||
<span style="color: #fb923c; font-weight: bold; font-size: 13px; display: block; margin-bottom: 5px;">{route_c}</span>
|
||||
<h2 style="color: white; margin: 5px 0; font-size: 22px; font-weight: 700;">18.0 <span style="font-size: 13px; color: #94a3b8; font-weight: normal;">KM</span></h2>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">Tahmini Yakıt: 1.3 L (Akıcı)</p>
|
||||
<p style="color: #94a3b8; margin: 0; font-size: 11px;">{est_fuel_c}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -554,8 +563,8 @@ class MymachFleetHome(models.Model):
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'title': 'Hata',
|
||||
'message': 'Simülasyon için geçerli bir araç seçilmelidir.',
|
||||
'title': _('Hata'),
|
||||
'message': _('Simülasyon için geçerli bir araç seçilmelidir.'),
|
||||
'type': 'danger',
|
||||
}
|
||||
}
|
||||
@@ -586,22 +595,26 @@ class MymachFleetHome(models.Model):
|
||||
has_free_use = False
|
||||
|
||||
if not has_free_use:
|
||||
d_name = driver.name if driver else _('Belirsiz')
|
||||
log_name = _("ROTA SAPMA İHLALİ: Sürücü ({0}), {1} konumuna gitmek için seçilen rotadan {2:.1f} KM sapmıştır (Tolerans: 1.0 KM).").format(d_name, self.route_destination, deviation)
|
||||
# Güvenlik Logu (İhlal) kaydet
|
||||
self.env['mymach.fleet.security.log'].create({
|
||||
'vehicle_id': vehicle.id,
|
||||
'status': 'exception',
|
||||
'name': f"ROTA SAPMA İHLALİ: Sürücü ({driver.name if driver else 'Belirsiz'}), {self.route_destination} konumuna gitmek için seçilen rotadan {deviation:.1f} KM sapmıştır (Tolerans: 1.0 KM).",
|
||||
'name': log_name,
|
||||
'is_resolved': False
|
||||
})
|
||||
|
||||
msg_body = _("🚨 <b>ROTA SAPMA ALARMI (YÖNETİCİ UYARISI):</b> Sürücü ({0}), {1} rotasından {2:.1f} KM sapmıştır. Sözleşmesinde serbest kullanım hakkı bulunmadığı için yöneticiye ihlal uyarısı iletilmiştir.").format(d_name, self.route_destination, deviation)
|
||||
# Araç chatter'ına uyarısı postala
|
||||
vehicle.message_post(body=f"🚨 <b>ROTA SAPMA ALARMI (YÖNETİCİ UYARISI):</b> Sürücü ({driver.name if driver else 'Belirsiz'}), {self.route_destination} rotasından {deviation:.1f} KM sapmıştır. Sözleşmesinde serbest kullanım hakkı bulunmadığı için yöneticiye ihlal uyarısı iletilmiştir.")
|
||||
vehicle.message_post(body=msg_body)
|
||||
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'title': '🚨 ROTA SAPMA UYARISI!',
|
||||
'message': f"Sürücü rotasından {deviation:.1f} KM sapmıştır! Yöneticiye uyarı iletildi ve ihlal logu kaydedildi.",
|
||||
'title': _('🚨 ROTA SAPMA UYARISI!'),
|
||||
'message': _("Sürücü rotasından {0:.1f} KM sapmıştır! Yöneticiye uyarı iletildi ve ihlal logu kaydedildi.").format(deviation),
|
||||
'type': 'danger',
|
||||
'sticky': True,
|
||||
}
|
||||
@@ -611,8 +624,8 @@ class MymachFleetHome(models.Model):
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'title': 'Sürüş Tamamlandı',
|
||||
'message': 'Yolculuk başarıyla tamamlandı. Herhangi bir sapma uyarısı tetiklenmedi.',
|
||||
'title': _('Sürüş Tamamlandı'),
|
||||
'message': _('Yolculuk başarıyla tamamlandı. Herhangi bir sapma uyarısı tetiklenmedi.'),
|
||||
'type': 'success',
|
||||
'sticky': False,
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_mymach_fleet_contract_user,contract_user,model_mymach_fleet_contract,group_mymach_fleet_user,1,0,0,0
|
||||
access_mymach_fleet_contract_manager,contract_manager,model_mymach_fleet_contract,group_mymach_fleet_manager,1,1,1,1
|
||||
access_mymach_fleet_maintenance_cost_manager,maintenance_cost_manager,model_mymach_fleet_maintenance_cost,group_mymach_fleet_manager,1,1,1,1
|
||||
access_mymach_fleet_security_log_user,log_user,model_mymach_fleet_security_log,group_mymach_fleet_user,1,1,0,0
|
||||
access_mymach_fleet_security_log_manager,log_manager,model_mymach_fleet_security_log,group_mymach_fleet_manager,1,1,1,1
|
||||
access_mymach_fleet_route_wizard_user,route_wizard_user,model_mymach_fleet_route_exception_wizard,group_mymach_fleet_user,1,1,1,1
|
||||
access_mymach_fleet_reservation_user,reservation_user,model_mymach_fleet_reservation,group_mymach_fleet_user,1,1,1,0
|
||||
|
||||
|
@@ -55,5 +55,19 @@
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- RECORD RULES (Güvenlik / Rota Sapma Logları) -->
|
||||
<record id="rule_mymach_fleet_security_log_user" model="ir.rule">
|
||||
<field name="name">Sürücüler kendi rota sapma uyarılarını görür</field>
|
||||
<field name="model_id" ref="model_mymach_fleet_security_log"/>
|
||||
<field name="domain_force">[('vehicle_id.driver_id', '=', user.partner_id.id)]</field>
|
||||
<field name="groups" eval="[(4, ref('group_mymach_fleet_user'))]"/>
|
||||
</record>
|
||||
<record id="rule_mymach_fleet_security_log_manager" model="ir.rule">
|
||||
<field name="name">Yöneticiler tüm güvenlik ihlallerini görür</field>
|
||||
<field name="model_id" ref="model_mymach_fleet_security_log"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -15,6 +15,13 @@
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('is_maintenance_critical', '=', True)]</field>
|
||||
</record>
|
||||
<!-- Sürücülerin kendi bekleyen rota ihlallerini görmesi için aksiyon -->
|
||||
<record id="action_driver_route_exceptions" model="ir.actions.act_window">
|
||||
<field name="name">Bekleyen Rota Uyarılarım</field>
|
||||
<field name="res_model">mymach.fleet.security.log</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('is_resolved', '=', False)]</field>
|
||||
</record>
|
||||
|
||||
<!-- Sunucu Aksiyonu: Sadece Canlı Haritayı Gösteren Görünüm İçin -->
|
||||
<record id="action_mymach_fleet_home_chart_server" model="ir.actions.server">
|
||||
@@ -72,7 +79,7 @@ action = {
|
||||
<h3 class="mymach_zara_group_title" style="color: #38bdf8; border-color: rgba(56, 189, 248, 0.25);">Temel Operasyonlar</h3>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(fleet.fleet_vehicle_action)d" type="action" class="btn mymach_zara_btn" style="width: 100%;">
|
||||
<button name="%(fleet.fleet_vehicle_action)d" type="action" class="btn mymach_zara_btn" style="width: 100%;" groups="mymach_fleet_intelligence.group_mymach_fleet_manager">
|
||||
<i class="fa fa-car mb-2"></i><br/> Akıllı Araç Yönetimi
|
||||
</button>
|
||||
</div>
|
||||
@@ -92,15 +99,42 @@ action = {
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(hr.open_view_employee_list_my)d" type="action" class="btn mymach_zara_btn" style="width: 100%;">
|
||||
<button name="%(hr.open_view_employee_list_my)d" type="action" class="btn mymach_zara_btn" style="width: 100%;" groups="mymach_fleet_intelligence.group_mymach_fleet_manager">
|
||||
<i class="fa fa-users mb-2"></i><br/> Personel Kartları
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Grup 2: Güvenlik & Rota Motoru -->
|
||||
<div style="margin-top: 15px;">
|
||||
<!-- Grup Sürücü: Sürücü Hızlı İşlemler (Sadece sürücülere görünür veya herkese) -->
|
||||
<div style="margin-top: 15px;" groups="base.group_user">
|
||||
<h3 class="mymach_zara_group_title" style="color: #fbbf24; border-color: rgba(251, 191, 36, 0.25);">Sürücü Hızlı İşlemler</h3>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(mymach_fleet_intelligence.action_mymach_fleet_contract)d" type="action" class="btn mymach_zara_btn" style="width: 100%;">
|
||||
<i class="fa fa-file-text-o mb-2"></i><br/> Tahsis Sözleşmem
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(fleet.fleet_vehicle_log_services_action)d" type="action" class="btn mymach_zara_btn" style="width: 100%;">
|
||||
<i class="fa fa-wrench mb-2"></i><br/> Yakıt & Servis Fişi Ekle
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(mymach_fleet_intelligence.action_mymach_fleet_fine)d" type="action" class="btn mymach_zara_btn" style="width: 100%;">
|
||||
<i class="fa fa-ticket mb-2"></i><br/> Trafik Cezalarım
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<button name="%(mymach_fleet_intelligence.action_driver_route_exceptions)d" type="action" class="btn mymach_zara_btn mymach_zara_btn_warning" style="width: 100%; border-color: #ef4444; color: #ef4444;">
|
||||
<i class="fa fa-bell-o mb-2"></i><br/> Bekleyen Rota Uyarılarım
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Grup 2: Güvenlik & Rota Uyum Motoru -->
|
||||
<div style="margin-top: 15px;" groups="mymach_fleet_intelligence.group_mymach_fleet_manager">
|
||||
<h3 class="mymach_zara_group_title" style="color: #f43f5e; border-color: rgba(244, 63, 94, 0.25);">Güvenlik & Rota Uyum Motoru</h3>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-3 mb-3">
|
||||
@@ -235,7 +269,7 @@ action = {
|
||||
</div>
|
||||
|
||||
<!-- Otonom Rota Planlama & Sapma Denetimi Bölümü -->
|
||||
<div style="margin-top: 20px; background: rgba(15, 23, 42, 0.4); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 20px;">
|
||||
<div style="margin-top: 20px; background: rgba(15, 23, 42, 0.4); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 20px;" groups="mymach_fleet_intelligence.group_mymach_fleet_manager">
|
||||
<h3 style="color: #38bdf8; font-size: 15px; font-weight: 600; margin-top: 0; margin-bottom: 15px; display: flex; align-items: center; gap: 8px;">
|
||||
🗺️ OTONOM ROTA PLANLAMA VE SAPMA DENETİMİ (1 KM TOLERANS)
|
||||
</h3>
|
||||
|
||||
Reference in New Issue
Block a user