Enhancement: Update dashboard layout, add 'other' expense type, and fix translations
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
'description': 'MyMach Fleet Intelligence - Faz 1 (Sözleşme Yönetimi)',
|
'description': 'MyMach Fleet Intelligence - Faz 1 (Sözleşme Yönetimi)',
|
||||||
'author': 'MyMach',
|
'author': 'MyMach',
|
||||||
'category': 'Human Resources/Fleet',
|
'category': 'Human Resources/Fleet',
|
||||||
'depends': ['base', 'fleet', 'hr', 'web', 'crm', 'project', 'product'],
|
'depends': ['base', 'fleet', 'hr', 'hr_fleet', 'web', 'crm', 'project', 'product'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/security_groups.xml',
|
'security/security_groups.xml',
|
||||||
'security/ir.model.access.csv',
|
'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
@@ -36,13 +36,13 @@ class MymachFleetContract(models.Model):
|
|||||||
('unlimited', 'Sınırsız (Limitsiz) Şahsi Kullanım'),
|
('unlimited', 'Sınırsız (Limitsiz) Şahsi Kullanım'),
|
||||||
('rental', 'Kiralık (Kira Bedelli) Tahsis'),
|
('rental', 'Kiralık (Kira Bedelli) Tahsis'),
|
||||||
('forbidden', 'Yasaklı (Şahsi Kullanım Dışı)')
|
('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)
|
# 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.")
|
max_km_limit = fields.Float(string="Maximum KM Limit", help="Monthly kilometer limit determined for personal use.")
|
||||||
|
|
||||||
# Kişisel Kullanılan KM
|
# 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
|
# Eve Git/Gel İzni
|
||||||
commute_allowed = fields.Selection([
|
commute_allowed = fields.Selection([
|
||||||
|
|||||||
@@ -21,8 +21,10 @@ class MymachFleetFine(models.Model):
|
|||||||
('rental', 'Kira Masrafı'),
|
('rental', 'Kira Masrafı'),
|
||||||
('hgs', 'HGS / Otoyol Geçiş Ücreti'),
|
('hgs', 'HGS / Otoyol Geçiş Ücreti'),
|
||||||
('fine', 'Trafik Cezası'),
|
('fine', 'Trafik Cezası'),
|
||||||
('parking', 'Otopark Ücreti')
|
('parking', 'Otopark Ücreti'),
|
||||||
], string="Masraf Türü", required=True, default='hgs', tracking=True)
|
('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)
|
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)
|
driver_id = fields.Many2one('res.partner', string="Driver", related='vehicle_id.driver_id', store=True)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class MymachFleetReservation(models.Model):
|
|||||||
end_datetime = fields.Datetime(string="End Datetime", required=True, tracking=True)
|
end_datetime = fields.Datetime(string="End Datetime", required=True, tracking=True)
|
||||||
|
|
||||||
purpose = fields.Text(string="Purpose / Justification", required=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([
|
state = fields.Selection([
|
||||||
('draft', 'Draft'),
|
('draft', 'Draft'),
|
||||||
|
|||||||
@@ -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)
|
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
|
# 3 Para Birimli Amortisman Maliyet Alanları ve Ortalama Değer
|
||||||
depreciation_cost_try = fields.Float(string="Amortisman Bedeli (TRY)", default=0.0)
|
depreciation_cost_try = fields.Float(string="Depreciation Cost (TRY)", default=0.0)
|
||||||
depreciation_cost_usd = fields.Float(string="Amortisman Bedeli (USD)", default=0.0)
|
depreciation_cost_usd = fields.Float(string="Depreciation Cost (USD)", default=0.0)
|
||||||
depreciation_cost_eur = fields.Float(string="Amortisman Bedeli (EUR)", default=0.0)
|
depreciation_cost_eur = fields.Float(string="Depreciation Cost (EUR)", default=0.0)
|
||||||
depreciation_cost_avg = fields.Float(string="Ortalama Amortisman (TRY)", compute='_compute_depreciation_avg', store=True)
|
depreciation_cost_avg = fields.Float(string="Average Depreciation (TRY)", compute='_compute_depreciation_avg', store=True)
|
||||||
|
|
||||||
# Son Bakım Kilometresi ve Tarihi
|
# Son Bakım Kilometresi ve Tarihi
|
||||||
last_maintenance_odometer = fields.Float(string="Son Bakım Kilometresi (KM)", default=0.0)
|
last_maintenance_odometer = fields.Float(string="Last Maintenance Odometer (KM)", default=0.0)
|
||||||
last_maintenance_date = fields.Date(string="Son Bakım Tarihi")
|
last_maintenance_date = fields.Date(string="Last Maintenance Date")
|
||||||
|
|
||||||
# KM Maliyeti
|
# 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
|
# Finans & Gider Matrisi Hesaplanmış Metrikler
|
||||||
maintenance_cost_ids = fields.One2many('mymach.fleet.maintenance.cost', 'vehicle_id', string="Gider Kalemleri")
|
maintenance_cost_ids = fields.One2many('mymach.fleet.maintenance.cost', 'vehicle_id', string="Expense Items")
|
||||||
total_expense_amount = fields.Float(string="Toplam Gider Tutarı (TRY)", compute="_compute_financial_metrics", store=True)
|
total_expense_amount = fields.Float(string="Total Expense Amount (TRY)", compute="_compute_financial_metrics", store=True)
|
||||||
total_driven_odometer = fields.Float(string="Toplam Kat Edilen Yol (KM)", 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="KM Başına Maliyet (TRY/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="Yıllık Toplam Maliyet (TRY/Yıl)", 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="Aylık Ortalama Maliyet (TRY/Ay)", 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)
|
# Ç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)
|
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="Seçilen 2. Para Birimi (Döviz 1)", default=lambda self: self.env.ref('base.USD', raise_if_not_found=False))
|
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="Seçilen 3. Para Birimi (Döviz 2)", default=lambda self: self.env.ref('base.EUR', 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="Aktif Gösterim Para Birimi", compute="_compute_financial_metrics")
|
active_display_currency_id = fields.Many2one('res.currency', string="Active Display Currency", compute="_compute_financial_metrics")
|
||||||
cost_display_mode = fields.Selection([
|
cost_display_mode = fields.Selection([
|
||||||
('try', '🇹🇷 Ana Para Birimi (TL)'),
|
('try', '🇹🇷 Ana Para Birimi (TL)'),
|
||||||
('curr1', '💵 2. Para Birimi (Döviz 1)'),
|
('curr1', '💵 2. Para Birimi (Döviz 1)'),
|
||||||
('curr2', '💶 3. Para Birimi (Döviz 2)'),
|
('curr2', '💶 3. Para Birimi (Döviz 2)'),
|
||||||
('average', '📊 3 Para Birimli Ortalama Tahminî Değer (TL)')
|
('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")
|
cost_per_km_avg_display = fields.Float(string="Average Estimated Value Per KM", compute="_compute_financial_metrics")
|
||||||
annual_cost_avg_display = fields.Float(string="Yıllık Ortalama Tahminî Değer", 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="Aylık Ortalama Tahminî Değer", 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ı
|
# Ç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')
|
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="Yıllık (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="Aylık (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')
|
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="Yıllık (Döviz 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="Aylık (Döviz 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')
|
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="Yıllık (Döviz 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="Aylık (Döviz 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')
|
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="Yıllık Ortalama (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="Aylık Ortalama (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)
|
# Yakıt Türü Seçenekleri Özelleştirme (Benzin / LPG Dahil)
|
||||||
@@ -80,7 +80,7 @@ class FleetVehicle(models.Model):
|
|||||||
('gasoline_lpg', 'Benzin / LPG'),
|
('gasoline_lpg', 'Benzin / LPG'),
|
||||||
('hybrid_gasoline', 'Hibrit (Elektrik / Benzin)'),
|
('hybrid_gasoline', 'Hibrit (Elektrik / Benzin)'),
|
||||||
('hybrid_diesel', 'Hibrit (Elektrik / Dizel)')
|
('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
|
# Faz 8: Akaryakıt API ve Prediktif Bakım
|
||||||
tank_capacity = fields.Float(string="Fuel Tank Capacity (Liters)", default=50.0)
|
tank_capacity = fields.Float(string="Fuel Tank Capacity (Liters)", default=50.0)
|
||||||
@@ -316,6 +316,6 @@ class FleetVehicleLogServices(models.Model):
|
|||||||
('manual', 'Manuel Giriş'),
|
('manual', 'Manuel Giriş'),
|
||||||
('mymach_ocr', 'MyMach Akıllı Fiş İşleme Motoru'),
|
('mymach_ocr', 'MyMach Akıllı Fiş İşleme Motoru'),
|
||||||
('hr_expense', 'Odoo Masraf Modülü')
|
('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.")
|
help="Eğer harici modüller (OCR veya hr_expense) kurulu değilse 'manual' mod varsayılan olarak kullanılır.")
|
||||||
|
|
||||||
|
|||||||
@@ -12,20 +12,20 @@ class MymachFleetFuelIndex(models.Model):
|
|||||||
_description = 'Akaryakıt Fiyat Endeksi'
|
_description = 'Akaryakıt Fiyat Endeksi'
|
||||||
_order = 'date desc, id desc'
|
_order = 'date desc, id desc'
|
||||||
|
|
||||||
name = fields.Char(string="Endeks Ref", compute="_compute_name", store=True)
|
name = fields.Char(string="Index Ref", compute="_compute_name", store=True)
|
||||||
date = fields.Date(string="Tarih", required=True, default=fields.Date.context_today)
|
date = fields.Date(string="Date", required=True, default=fields.Date.context_today)
|
||||||
fuel_type = fields.Selection([
|
fuel_type = fields.Selection([
|
||||||
('gasoline', 'Benzinli'),
|
('gasoline', 'Benzinli'),
|
||||||
('diesel', 'Dizel'),
|
('diesel', 'Dizel'),
|
||||||
('lpg', 'LPG')
|
('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)
|
mom_change_perc = fields.Float(string="Monthly Change (Inflation) %", compute="_compute_inflation", store=True)
|
||||||
yoy_change_perc = fields.Float(string="Yıllık Değişim (Enflasyon) %", 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')
|
@api.depends('date', 'fuel_type')
|
||||||
def _compute_name(self):
|
def _compute_name(self):
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ class MymachFleetHome(models.Model):
|
|||||||
_name = 'mymach.fleet.home'
|
_name = 'mymach.fleet.home'
|
||||||
_description = 'MyMach Filo Zekası Ana Pano'
|
_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')
|
display_title = fields.Char(compute='_compute_display_title')
|
||||||
upcoming_maintenance_html = fields.Html(compute='_compute_upcoming_maintenance_html')
|
upcoming_maintenance_html = fields.Html(compute='_compute_upcoming_maintenance_html')
|
||||||
|
|
||||||
# Dil Seçimi
|
# Dil Seçimi
|
||||||
dashboard_lang_id = fields.Many2one(
|
dashboard_lang_id = fields.Many2one(
|
||||||
'res.lang',
|
'res.lang',
|
||||||
string="Dil / Language",
|
string="Language",
|
||||||
compute='_compute_dashboard_lang',
|
compute='_compute_dashboard_lang',
|
||||||
inverse='_inverse_dashboard_lang',
|
inverse='_inverse_dashboard_lang',
|
||||||
domain=[('active', '=', True)]
|
domain=[('active', '=', True)]
|
||||||
@@ -42,29 +42,29 @@ class MymachFleetHome(models.Model):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Grafik Filtreleri ve HTML Tuvali
|
# 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([
|
time_range = fields.Selection([
|
||||||
('week', 'Son 7 Gün (Haftalık)'),
|
('week', 'Son 7 Gün (Haftalık)'),
|
||||||
('month', 'Son 30 Gün (Aylık)'),
|
('month', 'Son 30 Gün (Aylık)'),
|
||||||
('year', 'Son 12 Ay (Yıllık)')
|
('year', 'Son 12 Ay (Yıllık)')
|
||||||
], string="Zaman Aralığı", default='month', required=True)
|
], string="Time Range", default='month', required=True)
|
||||||
chart_html = fields.Html(compute='_compute_chart_html', string="Yakıt & KM Grafiği", sanitize=False)
|
chart_html = fields.Html(compute='_compute_chart_html', string="Fuel & KM Chart", sanitize=False)
|
||||||
chart_metric = fields.Selection([
|
chart_metric = fields.Selection([
|
||||||
('combined', 'Birleşik Analiz (KM & Yakıt Hacmi)'),
|
('combined', 'Birleşik Analiz (KM & Yakıt Hacmi)'),
|
||||||
('km', 'Kilometre Analizi (KM)'),
|
('km', 'Kilometre Analizi (KM)'),
|
||||||
('fuel_liters', 'Yakıt Tüketimi (Litre)'),
|
('fuel_liters', 'Yakıt Tüketimi (Litre)'),
|
||||||
('fuel_cost', 'Yakıt Maliyeti (TL / Gider)')
|
('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ı
|
# 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_selected = fields.Selection([
|
||||||
('route_a', 'Rota A (En Kısa - 15.2 KM)'),
|
('route_a', 'Rota A (En Kısa - 15.2 KM)'),
|
||||||
('route_b', 'Rota B (Ekonomik - 16.5 KM)'),
|
('route_b', 'Rota B (Ekonomik - 16.5 KM)'),
|
||||||
('route_c', 'Rota C (Alternatif - 18.0 KM)')
|
('route_c', 'Rota C (Alternatif - 18.0 KM)')
|
||||||
], string="Seçilen Rota", default='route_a')
|
], string="Selected Route", default='route_a')
|
||||||
route_simulated_distance = fields.Float(string="Simüle Edilen Yolculuk Mesafesi (KM)", default=15.2)
|
route_simulated_distance = fields.Float(string="Simulated Travel Distance (KM)", default=15.2)
|
||||||
route_results_html = fields.Html(string="Alternatif Rotalar Sonucu", sanitize=False)
|
route_results_html = fields.Html(string="Alternative Routes Result", sanitize=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,31 +12,31 @@ class MymachFleetPeriodicMaintenance(models.Model):
|
|||||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||||
_order = 'target_odometer asc, target_date asc'
|
_order = 'target_odometer asc, target_date asc'
|
||||||
|
|
||||||
name = fields.Char(string="Bakım Referansı", compute="_compute_name", store=True, tracking=True)
|
name = fields.Char(string="Maintenance Reference", compute="_compute_name", store=True, tracking=True)
|
||||||
vehicle_id = fields.Many2one('fleet.vehicle', string="Araç", required=True, ondelete='cascade', 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="Yakıt Türü", readonly=True)
|
fuel_type = fields.Selection(related='vehicle_id.fuel_type', string="Fuel Type", readonly=True)
|
||||||
odometer = fields.Float(related='vehicle_id.odometer', string="Mevcut Kilometre (KM)", readonly=True)
|
odometer = fields.Float(related='vehicle_id.odometer', string="Current Odometer (KM)", readonly=True)
|
||||||
|
|
||||||
maintenance_type = fields.Selection([
|
maintenance_type = fields.Selection([
|
||||||
('small', 'Küçük Bakım (10k-15k KM)'),
|
('small', 'Küçük Bakım (10k-15k KM)'),
|
||||||
('medium', 'Orta Bakım (30k-45k KM)'),
|
('medium', 'Orta Bakım (30k-45k KM)'),
|
||||||
('heavy', 'Ağır Bakım (60k-90k KM)'),
|
('heavy', 'Ağır Bakım (60k-90k KM)'),
|
||||||
('annual', 'Yıllık Periyodik Bakım')
|
('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)
|
last_odometer = fields.Float(string="Last Maintenance Odometer (KM)", default=0.0)
|
||||||
target_odometer = fields.Float(string="Hedef Kilometre (KM)", required=True, tracking=True)
|
target_odometer = fields.Float(string="Target Odometer (KM)", required=True, tracking=True)
|
||||||
target_date = fields.Date(string="Hedef Tarih (Yıllık)", required=True, tracking=True)
|
target_date = fields.Date(string="Target Date (Annual)", required=True, tracking=True)
|
||||||
|
|
||||||
state = fields.Selection([
|
state = fields.Selection([
|
||||||
('pending', 'Bekliyor'),
|
('pending', 'Bekliyor'),
|
||||||
('overdue', 'Süresi/KM Geçti'),
|
('overdue', 'Süresi/KM Geçti'),
|
||||||
('done', 'Tamamlandı')
|
('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)
|
description = fields.Text(string="Standard Operations to be Performed", compute='_compute_description', store=True)
|
||||||
date_completed = fields.Date(string="Tamamlanma Tarihi", tracking=True)
|
date_completed = fields.Date(string="Completion Date", tracking=True)
|
||||||
odometer_completed = fields.Float(string="Tamamlanma Kilometresi", tracking=True)
|
odometer_completed = fields.Float(string="Completion Odometer", tracking=True)
|
||||||
|
|
||||||
@api.depends('maintenance_type', 'vehicle_id.license_plate')
|
@api.depends('maintenance_type', 'vehicle_id.license_plate')
|
||||||
def _compute_name(self):
|
def _compute_name(self):
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ class MymachFleetRouteExceptionWizard(models.TransientModel):
|
|||||||
('project', 'Proje Görevi / Maliyet Yansıtma'),
|
('project', 'Proje Görevi / Maliyet Yansıtma'),
|
||||||
('personal', 'Kişisel / Bireysel Kullanım'),
|
('personal', 'Kişisel / Bireysel Kullanım'),
|
||||||
('other', 'Diğer Gerekçeler')
|
('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")
|
partner_id = fields.Many2one('res.partner', string="Visited Contact")
|
||||||
project_id = fields.Many2one('project.project', string="İlişkili Proje")
|
project_id = fields.Many2one('project.project', string="Related Project")
|
||||||
distance = fields.Float(string="Yolculuk Mesafesi (KM)", default=0.0)
|
distance = fields.Float(string="Travel Distance (KM)", default=0.0)
|
||||||
estimated_cost = fields.Float(string="Tahmini Yolculuk Maliyeti (TRY)", default=0.0)
|
estimated_cost = fields.Float(string="Estimated Travel Cost (TRY)", default=0.0)
|
||||||
description = fields.Text(string="Açıklama / Görüşme Notları", required=True)
|
description = fields.Text(string="Description / Meeting Notes", required=True)
|
||||||
|
|
||||||
def action_confirm(self):
|
def action_confirm(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ class MymachFleetSecurityLog(models.Model):
|
|||||||
currency_id = fields.Many2one('res.currency', string="Currency", related='vehicle_id.currency_id')
|
currency_id = fields.Many2one('res.currency', string="Currency", related='vehicle_id.currency_id')
|
||||||
|
|
||||||
# Yolculuk mesafesi ve B noktasındaki kontak tespiti
|
# Yolculuk mesafesi ve B noktasındaki kontak tespiti
|
||||||
distance = fields.Float(string="Yolculuk Mesafesi (KM)", default=0.0)
|
distance = fields.Float(string="Travel Distance (KM)", default=0.0)
|
||||||
partner_id = fields.Many2one('res.partner', string="Ziyaret Edilen Kontak")
|
partner_id = fields.Many2one('res.partner', string="Visited Contact")
|
||||||
|
|
||||||
def _calculate_haversine_distance(self, lat1, lon1, lat2, lon2):
|
def _calculate_haversine_distance(self, lat1, lon1, lat2, lon2):
|
||||||
""" Calculates straight-line distance in km """
|
""" Calculates straight-line distance in km """
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<list string="Giderler ve Cezalar">
|
<list string="Giderler ve Cezalar">
|
||||||
<field name="name"/>
|
<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="vehicle_id"/>
|
||||||
<field name="driver_id"/>
|
<field name="driver_id"/>
|
||||||
<field name="amount"/>
|
<field name="amount"/>
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
<group>
|
<group>
|
||||||
<group string="Detaylar">
|
<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="vehicle_id"/>
|
||||||
<field name="driver_id"/>
|
<field name="driver_id"/>
|
||||||
</group>
|
</group>
|
||||||
|
|||||||
@@ -51,9 +51,7 @@ action = {
|
|||||||
<field name="model">mymach.fleet.home</field>
|
<field name="model">mymach.fleet.home</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="MyMach Filo Zekası" class="mymach_zara_form" create="false" delete="false">
|
<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>
|
<sheet>
|
||||||
<div class="mymach_zara_container">
|
<div class="mymach_zara_container">
|
||||||
<!-- Dark Blurred Background Overlay -->
|
<!-- Dark Blurred Background Overlay -->
|
||||||
@@ -107,7 +105,7 @@ action = {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Grup Sürücü: Sürücü Hızlı İşlemler (Sadece sürücülere görünür veya herkese) -->
|
<!-- 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>
|
<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="row text-center">
|
||||||
<div class="col-md mb-2">
|
<div class="col-md mb-2">
|
||||||
@@ -231,9 +229,7 @@ action = {
|
|||||||
<field name="model">mymach.fleet.home</field>
|
<field name="model">mymach.fleet.home</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Kilometre & Yakıt Analizi" class="mymach_zara_form" create="false" delete="false">
|
<form string="Kilometre & 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>
|
<sheet>
|
||||||
<div class="mymach_zara_container">
|
<div class="mymach_zara_container">
|
||||||
<!-- Dark Blurred Background Overlay -->
|
<!-- Dark Blurred Background Overlay -->
|
||||||
@@ -309,5 +305,6 @@ action = {
|
|||||||
name="Canlı Harita Analizi"
|
name="Canlı Harita Analizi"
|
||||||
parent="menu_mymach_fleet_intelligence_root"
|
parent="menu_mymach_fleet_intelligence_root"
|
||||||
action="action_mymach_fleet_home_chart_server"
|
action="action_mymach_fleet_home_chart_server"
|
||||||
|
groups="mymach_fleet_intelligence.group_mymach_fleet_manager"
|
||||||
sequence="5"/>
|
sequence="5"/>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
Reference in New Issue
Block a user