Enhancement: Update dashboard layout, add 'other' expense type, and fix translations

This commit is contained in:
cerenX9
2026-07-22 16:54:04 +03:00
parent b164e9d5f3
commit 2f250d9560
14 changed files with 1208 additions and 2627 deletions

View File

@@ -6,7 +6,7 @@
'description': 'MyMach Fleet Intelligence - Faz 1 (Sözleşme Yönetimi)',
'author': 'MyMach',
'category': 'Human Resources/Fleet',
'depends': ['base', 'fleet', 'hr', 'web', 'crm', 'project', 'product'],
'depends': ['base', 'fleet', 'hr', 'hr_fleet', 'web', 'crm', 'project', 'product'],
'data': [
'security/security_groups.xml',
'security/ir.model.access.csv',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -36,13 +36,13 @@ class MymachFleetContract(models.Model):
('unlimited', 'Sınırsız (Limitsiz) Şahsi Kullanım'),
('rental', 'Kiralık (Kira Bedelli) Tahsis'),
('forbidden', 'Yasaklı (Şahsi Kullanım Dışı)')
], string="Şahsi Kullanım Politikası", required=True, default='forbidden')
], string="Personal Use Policy", required=True, default='forbidden')
# Maksimum KM Limiti (Sadece "allowed" veya "limit" seçildiğinde arayüzde görünür olacak)
max_km_limit = fields.Float(string="Maximum KM Limit", help="Monthly kilometer limit determined for personal use.")
# Kişisel Kullanılan KM
personal_km_used = fields.Float(string="Kişisel Kullanım KM (Bu Ay)", default=0.0)
personal_km_used = fields.Float(string="Personal KM Used (This Month)", default=0.0)
# Eve Git/Gel İzni
commute_allowed = fields.Selection([

View File

@@ -21,8 +21,10 @@ class MymachFleetFine(models.Model):
('rental', 'Kira Masrafı'),
('hgs', 'HGS / Otoyol Geçiş Ücreti'),
('fine', 'Trafik Cezası'),
('parking', 'Otopark Ücreti')
], string="Masraf Türü", required=True, default='hgs', tracking=True)
('parking', 'Otopark Ücreti'),
('other', 'Diğer')
], string="Expense Type", required=True, default='hgs', tracking=True)
other_charge_type_name = fields.Char(string="Diğer Gider Açıklaması", tracking=True)
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", required=True, tracking=True)
driver_id = fields.Many2one('res.partner', string="Driver", related='vehicle_id.driver_id', store=True)

View File

@@ -20,7 +20,7 @@ class MymachFleetReservation(models.Model):
end_datetime = fields.Datetime(string="End Datetime", required=True, tracking=True)
purpose = fields.Text(string="Purpose / Justification", required=True)
destination_location = fields.Char(string="Hedef Görev Konumu / Proje Sahası", help="Personelin seçeceği görev konumu")
destination_location = fields.Char(string="Destination Location / Project Site", help="Personelin seçeceği görev konumu")
state = fields.Selection([
('draft', 'Draft'),

View File

@@ -17,58 +17,58 @@ class FleetVehicle(models.Model):
default=lambda self: self.env.ref('base.TRY').id if self.env.ref('base.TRY', raise_if_not_found=False) else False)
# 3 Para Birimli Amortisman Maliyet Alanları ve Ortalama Değer
depreciation_cost_try = fields.Float(string="Amortisman Bedeli (TRY)", default=0.0)
depreciation_cost_usd = fields.Float(string="Amortisman Bedeli (USD)", default=0.0)
depreciation_cost_eur = fields.Float(string="Amortisman Bedeli (EUR)", default=0.0)
depreciation_cost_avg = fields.Float(string="Ortalama Amortisman (TRY)", compute='_compute_depreciation_avg', store=True)
depreciation_cost_try = fields.Float(string="Depreciation Cost (TRY)", default=0.0)
depreciation_cost_usd = fields.Float(string="Depreciation Cost (USD)", default=0.0)
depreciation_cost_eur = fields.Float(string="Depreciation Cost (EUR)", default=0.0)
depreciation_cost_avg = fields.Float(string="Average Depreciation (TRY)", compute='_compute_depreciation_avg', store=True)
# Son Bakım Kilometresi ve Tarihi
last_maintenance_odometer = fields.Float(string="Son Bakım Kilometresi (KM)", default=0.0)
last_maintenance_date = fields.Date(string="Son Bakım Tarihi")
last_maintenance_odometer = fields.Float(string="Last Maintenance Odometer (KM)", default=0.0)
last_maintenance_date = fields.Date(string="Last Maintenance Date")
# KM Maliyeti
km_cost = fields.Float(string="Kilometre Başına Maliyet (TRY)", default=5.0)
km_cost = fields.Float(string="Cost Per KM (TRY)", default=5.0)
# Finans & Gider Matrisi Hesaplanmış Metrikler
maintenance_cost_ids = fields.One2many('mymach.fleet.maintenance.cost', 'vehicle_id', string="Gider Kalemleri")
total_expense_amount = fields.Float(string="Toplam Gider Tutarı (TRY)", compute="_compute_financial_metrics", store=True)
total_driven_odometer = fields.Float(string="Toplam Kat Edilen Yol (KM)", compute="_compute_financial_metrics", store=True)
cost_per_km_calculated = fields.Float(string="KM Başına Maliyet (TRY/KM)", compute="_compute_financial_metrics", store=True)
annual_total_cost_calculated = fields.Float(string="Yıllık Toplam Maliyet (TRY/Yıl)", compute="_compute_financial_metrics", store=True)
monthly_avg_cost_calculated = fields.Float(string="Aylık Ortalama Maliyet (TRY/Ay)", compute="_compute_financial_metrics", store=True)
maintenance_cost_ids = fields.One2many('mymach.fleet.maintenance.cost', 'vehicle_id', string="Expense Items")
total_expense_amount = fields.Float(string="Total Expense Amount (TRY)", compute="_compute_financial_metrics", store=True)
total_driven_odometer = fields.Float(string="Total Distance Traveled (KM)", compute="_compute_financial_metrics", store=True)
cost_per_km_calculated = fields.Float(string="Cost Per KM (TRY/KM)", compute="_compute_financial_metrics", store=True)
annual_total_cost_calculated = fields.Float(string="Total Annual Cost (TRY/Year)", compute="_compute_financial_metrics", store=True)
monthly_avg_cost_calculated = fields.Float(string="Average Monthly Cost (TRY/Month)", compute="_compute_financial_metrics", store=True)
# Çoklu Para Birimi ve Listbox Seçimleri (TL Ana Para Birimi + 2 Seçilebilir Döviz + 3'lü Ortalama)
try_currency_id = fields.Many2one('res.currency', string="TRY Para Birimi", default=lambda self: self.env.ref('base.TRY', raise_if_not_found=False) or self.env.company.currency_id)
cost_curr1_id = fields.Many2one('res.currency', string="Seçilen 2. Para Birimi (Döviz 1)", default=lambda self: self.env.ref('base.USD', raise_if_not_found=False))
cost_curr2_id = fields.Many2one('res.currency', string="Seçilen 3. Para Birimi (Döviz 2)", default=lambda self: self.env.ref('base.EUR', raise_if_not_found=False))
active_display_currency_id = fields.Many2one('res.currency', string="Aktif Gösterim Para Birimi", compute="_compute_financial_metrics")
try_currency_id = fields.Many2one('res.currency', string="TRY Currency", default=lambda self: self.env.ref('base.TRY', raise_if_not_found=False) or self.env.company.currency_id)
cost_curr1_id = fields.Many2one('res.currency', string="Selected 2nd Currency (FX 1)", default=lambda self: self.env.ref('base.USD', raise_if_not_found=False))
cost_curr2_id = fields.Many2one('res.currency', string="Selected 3rd Currency (FX 2)", default=lambda self: self.env.ref('base.EUR', raise_if_not_found=False))
active_display_currency_id = fields.Many2one('res.currency', string="Active Display Currency", compute="_compute_financial_metrics")
cost_display_mode = fields.Selection([
('try', '🇹🇷 Ana Para Birimi (TL)'),
('curr1', '💵 2. Para Birimi (Döviz 1)'),
('curr2', '💶 3. Para Birimi (Döviz 2)'),
('average', '📊 3 Para Birimli Ortalama Tahminî Değer (TL)')
], string="Para Birimi Gösterim Modu (Listbox)", default='average')
], string="Currency Display Mode (Listbox)", default='average')
cost_per_km_avg_display = fields.Float(string="KM Başına Ortalama Tahminî Değer", compute="_compute_financial_metrics")
annual_cost_avg_display = fields.Float(string="Yıllık Ortalama Tahminî Değer", compute="_compute_financial_metrics")
monthly_cost_avg_display = fields.Float(string="Aylık Ortalama Tahminî Değer", compute="_compute_financial_metrics")
cost_per_km_avg_display = fields.Float(string="Average Estimated Value Per KM", compute="_compute_financial_metrics")
annual_cost_avg_display = fields.Float(string="Average Annual Estimated Value", compute="_compute_financial_metrics")
monthly_cost_avg_display = fields.Float(string="Average Monthly Estimated Value", compute="_compute_financial_metrics")
# Çoklu Para Birimi Karşılaştırması & 3 Dövizli Ortalama Tahmini Değer Alanları
cost_per_km_try = fields.Monetary(string="KM Başına (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
annual_cost_try = fields.Monetary(string="Yıllık (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
monthly_cost_try = fields.Monetary(string="Aylık (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
cost_per_km_try = fields.Monetary(string="Per KM (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
annual_cost_try = fields.Monetary(string="Annual (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
monthly_cost_try = fields.Monetary(string="Monthly (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
cost_per_km_c1 = fields.Monetary(string="KM Başına (Döviz 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
annual_cost_c1 = fields.Monetary(string="Yıllık (Döviz 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
monthly_cost_c1 = fields.Monetary(string="Aylık (Döviz 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
cost_per_km_c1 = fields.Monetary(string="Per KM (FX 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
annual_cost_c1 = fields.Monetary(string="Annual (FX 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
monthly_cost_c1 = fields.Monetary(string="Monthly (FX 1)", compute='_compute_financial_metrics', currency_field='cost_curr1_id')
cost_per_km_c2 = fields.Monetary(string="KM Başına (Döviz 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
annual_cost_c2 = fields.Monetary(string="Yıllık (Döviz 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
monthly_cost_c2 = fields.Monetary(string="Aylık (Döviz 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
cost_per_km_c2 = fields.Monetary(string="Per KM (FX 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
annual_cost_c2 = fields.Monetary(string="Annual (FX 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
monthly_cost_c2 = fields.Monetary(string="Monthly (FX 2)", compute='_compute_financial_metrics', currency_field='cost_curr2_id')
cost_per_km_avg = fields.Monetary(string="KM Başına Ortalama (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
annual_cost_avg = fields.Monetary(string="Yıllık Ortalama (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
monthly_cost_avg = fields.Monetary(string="Aylık Ortalama (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
cost_per_km_avg = fields.Monetary(string="Average Per KM (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
annual_cost_avg = fields.Monetary(string="Average Annual (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
monthly_cost_avg = fields.Monetary(string="Average Monthly (TL)", compute='_compute_financial_metrics', currency_field='try_currency_id')
# Yakıt Türü Seçenekleri Özelleştirme (Benzin / LPG Dahil)
@@ -80,7 +80,7 @@ class FleetVehicle(models.Model):
('gasoline_lpg', 'Benzin / LPG'),
('hybrid_gasoline', 'Hibrit (Elektrik / Benzin)'),
('hybrid_diesel', 'Hibrit (Elektrik / Dizel)')
], string="Yakıt Türü", default='diesel')
], string="Fuel Type", default='diesel')
# Faz 8: Akaryakıt API ve Prediktif Bakım
tank_capacity = fields.Float(string="Fuel Tank Capacity (Liters)", default=50.0)
@@ -316,6 +316,6 @@ class FleetVehicleLogServices(models.Model):
('manual', 'Manuel Giriş'),
('mymach_ocr', 'MyMach Akıllı Fiş İşleme Motoru'),
('hr_expense', 'Odoo Masraf Modülü')
], string="Yakıt Giriş Yöntemi", default='manual', required=True,
], string="Fuel Entry Method", default='manual', required=True,
help="Eğer harici modüller (OCR veya hr_expense) kurulu değilse 'manual' mod varsayılan olarak kullanılır.")

View File

@@ -12,20 +12,20 @@ class MymachFleetFuelIndex(models.Model):
_description = 'Akaryakıt Fiyat Endeksi'
_order = 'date desc, id desc'
name = fields.Char(string="Endeks Ref", compute="_compute_name", store=True)
date = fields.Date(string="Tarih", required=True, default=fields.Date.context_today)
name = fields.Char(string="Index Ref", compute="_compute_name", store=True)
date = fields.Date(string="Date", required=True, default=fields.Date.context_today)
fuel_type = fields.Selection([
('gasoline', 'Benzinli'),
('diesel', 'Dizel'),
('lpg', 'LPG')
], string="Yakıt Türü", required=True, default='gasoline')
], string="Fuel Type", required=True, default='gasoline')
unit_price = fields.Float(string="Birim Fiyatı (TL)", required=True, digits=(10, 2))
unit_price = fields.Float(string="Unit Price (TL)", required=True, digits=(10, 2))
mom_change_perc = fields.Float(string="Aylık Değişim (Enflasyon) %", compute="_compute_inflation", store=True)
yoy_change_perc = fields.Float(string="Yıllık Değişim (Enflasyon) %", compute="_compute_inflation", store=True)
mom_change_perc = fields.Float(string="Monthly Change (Inflation) %", compute="_compute_inflation", store=True)
yoy_change_perc = fields.Float(string="Annual Change (Inflation) %", compute="_compute_inflation", store=True)
source = fields.Char(string="Veri Kaynağı", default="Manuel Giriş")
source = fields.Char(string="Data Source", default="Manuel Giriş")
@api.depends('date', 'fuel_type')
def _compute_name(self):

View File

@@ -10,14 +10,14 @@ class MymachFleetHome(models.Model):
_name = 'mymach.fleet.home'
_description = 'MyMach Filo Zekası Ana Pano'
name = fields.Char(default="Ana Sayfa", string="Başlık")
name = fields.Char(default="Ana Sayfa", string="Title")
display_title = fields.Char(compute='_compute_display_title')
upcoming_maintenance_html = fields.Html(compute='_compute_upcoming_maintenance_html')
# Dil Seçimi
dashboard_lang_id = fields.Many2one(
'res.lang',
string="Dil / Language",
string="Language",
compute='_compute_dashboard_lang',
inverse='_inverse_dashboard_lang',
domain=[('active', '=', True)]
@@ -42,29 +42,29 @@ class MymachFleetHome(models.Model):
}
# Grafik Filtreleri ve HTML Tuvali
selected_vehicle_id = fields.Many2one('fleet.vehicle', string="Seçilen Araç")
selected_vehicle_id = fields.Many2one('fleet.vehicle', string="Selected Vehicle")
time_range = fields.Selection([
('week', 'Son 7 Gün (Haftalık)'),
('month', 'Son 30 Gün (Aylık)'),
('year', 'Son 12 Ay (Yıllık)')
], string="Zaman Aralığı", default='month', required=True)
chart_html = fields.Html(compute='_compute_chart_html', string="Yakıt & KM Grafiği", sanitize=False)
], string="Time Range", default='month', required=True)
chart_html = fields.Html(compute='_compute_chart_html', string="Fuel & KM Chart", sanitize=False)
chart_metric = fields.Selection([
('combined', 'Birleşik Analiz (KM & Yakıt Hacmi)'),
('km', 'Kilometre Analizi (KM)'),
('fuel_liters', 'Yakıt Tüketimi (Litre)'),
('fuel_cost', 'Yakıt Maliyeti (TL / Gider)')
], string="Grafik Modu", default='combined', required=True)
], string="Chart Mode", default='combined', required=True)
# Rota Planlama ve Sapma Kontrolü Alanları
route_destination = fields.Char(string="Hedef Konum", default="İstanbul Havalimanı")
route_destination = fields.Char(string="Destination Location", default="İstanbul Havalimanı")
route_selected = fields.Selection([
('route_a', 'Rota A (En Kısa - 15.2 KM)'),
('route_b', 'Rota B (Ekonomik - 16.5 KM)'),
('route_c', 'Rota C (Alternatif - 18.0 KM)')
], string="Seçilen Rota", default='route_a')
route_simulated_distance = fields.Float(string="Simüle Edilen Yolculuk Mesafesi (KM)", default=15.2)
route_results_html = fields.Html(string="Alternatif Rotalar Sonucu", sanitize=False)
], string="Selected Route", default='route_a')
route_simulated_distance = fields.Float(string="Simulated Travel Distance (KM)", default=15.2)
route_results_html = fields.Html(string="Alternative Routes Result", sanitize=False)

View File

@@ -12,31 +12,31 @@ class MymachFleetPeriodicMaintenance(models.Model):
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'target_odometer asc, target_date asc'
name = fields.Char(string="Bakım Referansı", compute="_compute_name", store=True, tracking=True)
vehicle_id = fields.Many2one('fleet.vehicle', string="Araç", required=True, ondelete='cascade', tracking=True)
fuel_type = fields.Selection(related='vehicle_id.fuel_type', string="Yakıt Türü", readonly=True)
odometer = fields.Float(related='vehicle_id.odometer', string="Mevcut Kilometre (KM)", readonly=True)
name = fields.Char(string="Maintenance Reference", compute="_compute_name", store=True, tracking=True)
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle", required=True, ondelete='cascade', tracking=True)
fuel_type = fields.Selection(related='vehicle_id.fuel_type', string="Fuel Type", readonly=True)
odometer = fields.Float(related='vehicle_id.odometer', string="Current Odometer (KM)", readonly=True)
maintenance_type = fields.Selection([
('small', 'Küçük Bakım (10k-15k KM)'),
('medium', 'Orta Bakım (30k-45k KM)'),
('heavy', 'ır Bakım (60k-90k KM)'),
('annual', 'Yıllık Periyodik Bakım')
], string="Bakım Türü", required=True, default='small', tracking=True)
], string="Maintenance Type", required=True, default='small', tracking=True)
last_odometer = fields.Float(string="Son Bakım Kilometresi (KM)", default=0.0)
target_odometer = fields.Float(string="Hedef Kilometre (KM)", required=True, tracking=True)
target_date = fields.Date(string="Hedef Tarih (Yıllık)", required=True, tracking=True)
last_odometer = fields.Float(string="Last Maintenance Odometer (KM)", default=0.0)
target_odometer = fields.Float(string="Target Odometer (KM)", required=True, tracking=True)
target_date = fields.Date(string="Target Date (Annual)", required=True, tracking=True)
state = fields.Selection([
('pending', 'Bekliyor'),
('overdue', 'Süresi/KM Geçti'),
('done', 'Tamamlandı')
], string="Durum", default='pending', tracking=True, compute='_compute_state', store=True)
], string="Status", default='pending', tracking=True, compute='_compute_state', store=True)
description = fields.Text(string="Yapılacak Standart İşlemler", compute='_compute_description', store=True)
date_completed = fields.Date(string="Tamamlanma Tarihi", tracking=True)
odometer_completed = fields.Float(string="Tamamlanma Kilometresi", tracking=True)
description = fields.Text(string="Standard Operations to be Performed", compute='_compute_description', store=True)
date_completed = fields.Date(string="Completion Date", tracking=True)
odometer_completed = fields.Float(string="Completion Odometer", tracking=True)
@api.depends('maintenance_type', 'vehicle_id.license_plate')
def _compute_name(self):

View File

@@ -18,13 +18,13 @@ class MymachFleetRouteExceptionWizard(models.TransientModel):
('project', 'Proje Görevi / Maliyet Yansıtma'),
('personal', 'Kişisel / Bireysel Kullanım'),
('other', 'Diğer Gerekçeler')
], string="Rota Gerekçesi", required=True, default='crm')
], string="Route Justification", required=True, default='crm')
partner_id = fields.Many2one('res.partner', string="Ziyaret Edilen Kontak")
project_id = fields.Many2one('project.project', string="İlişkili Proje")
distance = fields.Float(string="Yolculuk Mesafesi (KM)", default=0.0)
estimated_cost = fields.Float(string="Tahmini Yolculuk Maliyeti (TRY)", default=0.0)
description = fields.Text(string="ıklama / Görüşme Notları", required=True)
partner_id = fields.Many2one('res.partner', string="Visited Contact")
project_id = fields.Many2one('project.project', string="Related Project")
distance = fields.Float(string="Travel Distance (KM)", default=0.0)
estimated_cost = fields.Float(string="Estimated Travel Cost (TRY)", default=0.0)
description = fields.Text(string="Description / Meeting Notes", required=True)
def action_confirm(self):
self.ensure_one()

View File

@@ -31,8 +31,8 @@ class MymachFleetSecurityLog(models.Model):
currency_id = fields.Many2one('res.currency', string="Currency", related='vehicle_id.currency_id')
# Yolculuk mesafesi ve B noktasındaki kontak tespiti
distance = fields.Float(string="Yolculuk Mesafesi (KM)", default=0.0)
partner_id = fields.Many2one('res.partner', string="Ziyaret Edilen Kontak")
distance = fields.Float(string="Travel Distance (KM)", default=0.0)
partner_id = fields.Many2one('res.partner', string="Visited Contact")
def _calculate_haversine_distance(self, lat1, lon1, lat2, lon2):
""" Calculates straight-line distance in km """

View File

@@ -7,7 +7,8 @@
<field name="arch" type="xml">
<list string="Giderler ve Cezalar">
<field name="name"/>
<field name="charge_type"/>
<field name="charge_type"/>
<field name="other_charge_type_name" invisible="charge_type != 'other'" required="charge_type == 'other'"/>
<field name="vehicle_id"/>
<field name="driver_id"/>
<field name="amount"/>
@@ -37,7 +38,8 @@
</div>
<group>
<group string="Detaylar">
<field name="charge_type"/>
<field name="charge_type"/>
<field name="other_charge_type_name" invisible="charge_type != 'other'" required="charge_type == 'other'"/>
<field name="vehicle_id"/>
<field name="driver_id"/>
</group>

View File

@@ -51,9 +51,7 @@ action = {
<field name="model">mymach.fleet.home</field>
<field name="arch" type="xml">
<form string="MyMach Filo Zekası" class="mymach_zara_form" create="false" delete="false">
<header>
<button name="action_save_settings" string="DEĞİŞİKLİKLERİ KAYDET" type="object" class="btn-primary" style="background-color: #10b981 !important; border-color: #10b981 !important; font-weight: bold; padding: 8px 16px; border-radius: 6px;"/>
</header>
<sheet>
<div class="mymach_zara_container">
<!-- Dark Blurred Background Overlay -->
@@ -107,7 +105,7 @@ action = {
</div>
<!-- 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: 8px;" groups="base.group_user">
<div style="margin-top: 8px;" groups="base.group_user,!mymach_fleet_intelligence.group_mymach_fleet_manager">
<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 mb-2">
@@ -231,9 +229,7 @@ action = {
<field name="model">mymach.fleet.home</field>
<field name="arch" type="xml">
<form string="Kilometre &amp; Yakıt Analizi" class="mymach_zara_form" create="false" delete="false">
<header>
<button name="action_save_settings" string="DEĞİŞİKLİKLERİ KAYDET" type="object" class="btn-primary" style="background-color: #10b981 !important; border-color: #10b981 !important; font-weight: bold; padding: 8px 16px; border-radius: 6px;"/>
</header>
<sheet>
<div class="mymach_zara_container">
<!-- Dark Blurred Background Overlay -->
@@ -309,5 +305,6 @@ action = {
name="Canlı Harita Analizi"
parent="menu_mymach_fleet_intelligence_root"
action="action_mymach_fleet_home_chart_server"
groups="mymach_fleet_intelligence.group_mymach_fleet_manager"
sequence="5"/>
</odoo>