diff --git a/README.md b/README.md
index 54e6b1b..b5e8f35 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Yakıt Takip Modülü
+# Yakıt Takip Uygulaması
Akaryakıt istasyonu için geliştirilmiş modern ve kullanıcı dostu yönetim sistemi.
@@ -206,4 +206,4 @@ Proje hakkında sorularınız için lütfen iletişime geçin.
---
-**Yakıt Takip Modülü** - Modern Akaryakıt İstasyonu Yönetim Sistemi
\ No newline at end of file
+**Yakıt Takip Uygulaması** - Modern Akaryakıt İstasyonu Yönetim Sistemi
\ No newline at end of file
diff --git a/docs/PROJECT_PROCESSES.md b/docs/PROJECT_PROCESSES.md
index 60ff4d3..16ba9da 100644
--- a/docs/PROJECT_PROCESSES.md
+++ b/docs/PROJECT_PROCESSES.md
@@ -1,4 +1,4 @@
-# Yakıt Takip Modülü - Kapsamlı Proje Dokümantasyonu
+# Yakıt Takip Uygulaması - Kapsamlı Proje Dokümantasyonu
## 📋 İçerik Tablosu
1. [Proje Genel Bakış](#proje-genel-bakış)
@@ -18,7 +18,7 @@
## 🎯 Proje Genel Bakış
-Yakıt Takip Modülü, akaryakıt istasyonları için geliştirilmiş, modern ve kullanıcı dostu bir yönetim sistemidir. Sistem, yakıt ikmal süreçlerini dijitalleştirerek verimliliği artırmayı ve süreç takibini kolaylaştırmayı hedefler.
+Yakıt Takip Uygulaması, akaryakıt istasyonları için geliştirilmiş, modern ve kullanıcı dostu bir yönetim sistemidir. Sistem, yakıt ikmal süreçlerini dijitalleştirerek verimliliği artırmayı ve süreç takibini kolaylaştırmayı hedefler.
### Ana Hedefler
- **Dijital Dönüşüm**: Kağıt bazlı süreçlerin dijitalleştirilmesi
@@ -1732,6 +1732,6 @@ echo "Recovery completed. Services restarting..."
---
-**Bu dokümantasyon Yakıt Takip Modülü projesinin kapsamlı süreçlerini ve teknik detaylarını içermektedir. Güncel kalmak için düzenli olarak gözden geçirilmeli ve güncellenmelidir.**
+**Bu dokümantasyon Yakıt Takip Uygulaması projesinin kapsamlı süreçlerini ve teknik detaylarını içermektedir. Güncel kalmak için düzenli olarak gözden geçirilmeli ve güncellenmelidir.**
*Son güncelleme: 2024-11-05*
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
index 9b88394..251f9b0 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,6 +1,6 @@
-# Yakıt Takip Modülü - Dokümantasyon
+# Yakıt Takip Uygulaması - Dokümantasyon
-Bu klasörde Yakıt Takip Modülü'nün tüm dokümantasyon dosyaları bulunmaktadır.
+Bu klasörde Yakıt Takip Uygulaması'nın tüm dokümantasyon dosyaları bulunmaktadır.
## 📚 Dokümantasyon Dosyaları
diff --git a/src/app.html b/src/app.html
index c883c41..d5d3b5e 100644
--- a/src/app.html
+++ b/src/app.html
@@ -4,7 +4,7 @@
-
Yakıt Takip Modülü
+ Yakıt Takip Uygulaması
%sveltekit.head%
diff --git a/src/lib/components/GoodsManagersContent.svelte b/src/lib/components/GoodsManagersContent.svelte
index c1e33a4..046af9e 100644
--- a/src/lib/components/GoodsManagersContent.svelte
+++ b/src/lib/components/GoodsManagersContent.svelte
@@ -2,8 +2,8 @@
import { onMount } from 'svelte';
export let user = null;
- let personnel = [];
- let units = [];
+let personnel = [];
+let units = [];
let loading = true;
let error = '';
let showAddModal = false;
@@ -11,15 +11,15 @@
let selectedPersonnel = null;
// Form değişkenleri
- let formData = {
- full_name: '',
- rank: '',
- registration_number: '',
- tc_kimlik: '',
- phone: '',
- unit_id: '',
- is_active: true
- };
+let formData = {
+ full_name: '',
+ rank: '',
+ registration_number: '',
+ tc_kimlik: '',
+ phone: '',
+ unit_id: '',
+ is_active: true
+};
onMount(async () => {
const userData = localStorage.getItem('user');
@@ -36,10 +36,10 @@
async function loadPersonnel() {
try {
- const response = await fetch('/api/fuel-personnel');
+ const response = await fetch('/api/unit-personnel');
if (response.ok) {
const data = await response.json();
- personnel = data.fuelPersonnel || [];
+ personnel = data.goodsManagers || [];
} else {
error = 'Personel bilgileri yüklenemedi.';
}
@@ -68,18 +68,18 @@
return units.find((unit) => unit.id === id)?.name || 'Belirtilmemiş';
}
- function resetForm() {
- formData = {
- full_name: '',
- rank: '',
- registration_number: '',
- tc_kimlik: '',
- phone: '',
- unit_id: '',
- is_active: true
- };
- selectedPersonnel = null;
- }
+function resetForm() {
+formData = {
+ full_name: '',
+ rank: '',
+ registration_number: '',
+ tc_kimlik: '',
+ phone: '',
+ unit_id: '',
+ is_active: true
+};
+ selectedPersonnel = null;
+}
function openAddModal() {
resetForm();
@@ -88,15 +88,15 @@
function openEditModal(person) {
selectedPersonnel = person;
- formData = {
- full_name: person.full_name,
- rank: person.rank,
- registration_number: person.registration_number,
- tc_kimlik: person.tc_kimlik,
- phone: person.phone,
- unit_id: person.unit_id || '',
- is_active: person.is_active
- };
+formData = {
+ full_name: person.full_name,
+ rank: person.rank,
+ registration_number: person.registration_number,
+ tc_kimlik: person.tc_kimlik,
+ phone: person.phone,
+ unit_id: person.unit_id || '',
+ is_active: person.is_active
+};
showEditModal = true;
}
@@ -107,10 +107,10 @@
}
async function handleAddPersonnel() {
- if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
- error = 'Tüm alanlar zorunludur.';
- return;
- }
+ if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
+ error = 'Tüm alanlar zorunludur.';
+ return;
+ }
if (!/^[0-9]{11}$/.test(formData.tc_kimlik)) {
error = 'TC Kimlik numarası 11 haneli olmalıdır.';
@@ -118,7 +118,7 @@
}
try {
- const response = await fetch('/api/fuel-personnel', {
+ const response = await fetch('/api/unit-personnel', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
@@ -142,10 +142,10 @@
}
async function handleUpdatePersonnel() {
- if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
- error = 'Tüm alanlar zorunludur.';
- return;
- }
+ if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
+ error = 'Tüm alanlar zorunludur.';
+ return;
+ }
if (!/^[0-9]{11}$/.test(formData.tc_kimlik)) {
error = 'TC Kimlik numarası 11 haneli olmalıdır.';
@@ -153,7 +153,7 @@
}
try {
- const response = await fetch('/api/fuel-personnel', {
+ const response = await fetch('/api/unit-personnel', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
@@ -185,7 +185,7 @@
}
try {
- const response = await fetch('/api/fuel-personnel', {
+ const response = await fetch('/api/unit-personnel', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
@@ -209,7 +209,7 @@
async function togglePersonnelStatus(person) {
try {
- const response = await fetch('/api/fuel-personnel', {
+ const response = await fetch('/api/unit-personnel', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
diff --git a/src/lib/components/PersonnelContent.svelte b/src/lib/components/PersonnelContent.svelte
index d940834..073e97b 100644
--- a/src/lib/components/PersonnelContent.svelte
+++ b/src/lib/components/PersonnelContent.svelte
@@ -5,7 +5,6 @@
export let user = null;
let personnel = [];
-let units = [];
let loading = true;
let error = '';
let showAddModal = false;
@@ -19,27 +18,13 @@ let formData = {
registration_number: '',
tc_kimlik: '',
phone: '',
- unit_id: '',
is_active: true
};
onMount(async () => {
- await loadUnits();
await loadPersonnel();
});
-async function loadUnits() {
- try {
- const response = await fetch('/api/units');
- if (response.ok) {
- const data = await response.json();
- units = data.units || [];
- }
- } catch (err) {
- console.error('Load units error:', err);
- }
-}
-
async function loadPersonnel() {
try {
const response = await fetch('/api/fuel-personnel');
@@ -64,7 +49,6 @@ function resetForm() {
registration_number: '',
tc_kimlik: '',
phone: '',
- unit_id: '',
is_active: true
};
selectedPersonnel = null;
@@ -83,7 +67,6 @@ function openEditModal(person) {
registration_number: person.registration_number,
tc_kimlik: person.tc_kimlik,
phone: person.phone,
- unit_id: person.unit_id || '',
is_active: person.is_active
};
showEditModal = true;
@@ -96,7 +79,7 @@ function openEditModal(person) {
}
async function handleAddPersonnel() {
- if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
+ if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone) {
error = 'Tüm alanlar zorunludur.';
return;
}
@@ -131,7 +114,7 @@ function openEditModal(person) {
}
async function handleUpdatePersonnel() {
- if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone || !formData.unit_id) {
+ if (!formData.full_name || !formData.rank || !formData.registration_number || !formData.tc_kimlik || !formData.phone) {
error = 'Tüm alanlar zorunludur.';
return;
}
@@ -295,16 +278,25 @@ function openEditModal(person) {
{person.tc_kimlik}
-
-
-
-
-
- İrtibat:
- {person.phone}
-
-
-
+
+
+
+
+
+ İrtibat:
+ {person.phone}
+
+
+
+
+
+
+
+ Görev Yeri:
+ Fuel Station
+
+
+
openEditModal(person)}>
@@ -399,20 +391,6 @@ function openEditModal(person) {
required
/>
-
- Birlik
-
- Birlik Seçin
- {#each units as unit}
- {unit.name}
- {/each}
-
-
İptal
Kaydet
@@ -487,20 +465,6 @@ function openEditModal(person) {
required
/>
-
- Birlik
-
- Birlik Seçin
- {#each units as unit}
- {unit.name}
- {/each}
-
-
{
- await loadVehicles();
- });
+onMount(async () => {
+ await loadUnits();
+ await loadVehicles();
+});
+
+async function loadUnits() {
+ try {
+ const response = await fetch('/api/units');
+ if (response.ok) {
+ const data = await response.json();
+ units = data.units || [];
+ }
+ } catch (err) {
+ console.error('Load units error:', err);
+ }
+}
async function loadVehicles() {
try {
@@ -45,18 +60,19 @@
}
}
- function resetForm() {
- formData = {
- brand: '',
- model: '',
- year: new Date().getFullYear(),
- plate: '',
- fuel_type: 'Benzin',
- fuel_capacity: 50,
- current_fuel: 0,
- yazlik_mukannen: 0,
- kislik_mukannen: 0
- };
+function resetForm() {
+ formData = {
+ brand: '',
+ model: '',
+ year: new Date().getFullYear(),
+ plate: '',
+ unit_id: '',
+ fuel_type: 'Benzin',
+ fuel_capacity: 50,
+ current_fuel: 0,
+ yazlik_mukannen: 0,
+ kislik_mukannen: 0
+ };
selectedVehicle = null;
}
@@ -65,19 +81,20 @@
showAddModal = true;
}
- function openEditModal(vehicle) {
- selectedVehicle = vehicle;
- formData = {
- brand: vehicle.brand,
- model: vehicle.model,
- year: vehicle.year,
- plate: vehicle.plate,
- fuel_type: vehicle.fuel_type || 'Benzin',
- fuel_capacity: vehicle.fuel_capacity || 50,
- current_fuel: vehicle.current_fuel || 0,
- yazlik_mukannen: vehicle.yazlik_mukannen || 0,
- kislik_mukannen: vehicle.kislik_mukannen || 0
- };
+function openEditModal(vehicle) {
+ selectedVehicle = vehicle;
+ formData = {
+ brand: vehicle.brand,
+ model: vehicle.model,
+ year: vehicle.year,
+ plate: vehicle.plate,
+ unit_id: vehicle.unit_id ? vehicle.unit_id.toString() : '',
+ fuel_type: vehicle.fuel_type || 'Benzin',
+ fuel_capacity: vehicle.fuel_capacity || 50,
+ current_fuel: vehicle.current_fuel || 0,
+ yazlik_mukannen: vehicle.yazlik_mukannen || 0,
+ kislik_mukannen: vehicle.kislik_mukannen || 0
+ };
showEditModal = true;
}
@@ -87,30 +104,43 @@
resetForm();
}
- function validateMukannen(value) {
- // Sadece pozitif tam sayı kabul et
- return /^[0-9]*$/.test(value) && value >= 0;
+function validateMukannen(value) {
+ if (value === '' || value === null || value === undefined) {
+ return true;
}
+ const normalizedValue = typeof value === 'number' ? value : parseFloat(value.toString().replace(',', '.'));
+ return !isNaN(normalizedValue) && normalizedValue >= 0;
+}
+
+function getUnitName(unitId, unitList = units) {
+ const id = parseInt(unitId);
+ return unitList.find((unit) => unit.id === id)?.name || 'Belirtilmemiş';
+}
+
async function handleAddVehicle() {
- if (!formData.brand || !formData.model || !formData.year || !formData.plate || !formData.fuel_type || !formData.fuel_capacity) {
+ if (!formData.brand || !formData.model || !formData.year || !formData.plate || !formData.unit_id || !formData.fuel_type || !formData.fuel_capacity) {
error = 'Tüm zorunlu alanları doldurun.';
return;
}
if (!validateMukannen(formData.yazlik_mukannen) || !validateMukannen(formData.kislik_mukannen)) {
- error = 'Mukannen değerleri sadece rakam içermelidir.';
+ error = 'Mukannen değerleri sayısal olmalı ve negatif olamaz.';
return;
}
- try {
- const response = await fetch('/api/vehicles', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify(formData),
- });
+ try {
+ const payload = {
+ ...formData,
+ unit_id: parseInt(formData.unit_id)
+ };
+ const response = await fetch('/api/vehicles', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(payload),
+ });
const data = await response.json();
@@ -128,27 +158,29 @@
}
async function handleUpdateVehicle() {
- if (!formData.brand || !formData.model || !formData.year || !formData.plate || !formData.fuel_type || !formData.fuel_capacity) {
+ if (!formData.brand || !formData.model || !formData.year || !formData.plate || !formData.unit_id || !formData.fuel_type || !formData.fuel_capacity) {
error = 'Tüm zorunlu alanları doldurun.';
return;
}
if (!validateMukannen(formData.yazlik_mukannen) || !validateMukannen(formData.kislik_mukannen)) {
- error = 'Mukannen değerleri sadece rakam içermelidir.';
+ error = 'Mukannen değerleri sayısal olmalı ve negatif olamaz.';
return;
}
- try {
- const response = await fetch('/api/vehicles', {
- method: 'PUT',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- id: selectedVehicle.id,
- ...formData
- }),
- });
+ try {
+ const payload = {
+ id: selectedVehicle.id,
+ ...formData,
+ unit_id: parseInt(formData.unit_id)
+ };
+ const response = await fetch('/api/vehicles', {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(payload),
+ });
const data = await response.json();
@@ -253,6 +285,9 @@
{vehicle.plate}
+
+ {vehicle.unit_name || getUnitName(vehicle.unit_id, units)}
+
openEditModal(vehicle)}>
@@ -318,17 +353,31 @@
required
/>
-
- Plaka
-
-
+
+ Plaka
+
+
+
+ Birlik
+
+ Birlik Seçin
+ {#each units as unit}
+ {unit.name}
+ {/each}
+
+
Yakıt Tipi
@@ -393,10 +441,9 @@
class="form-input"
bind:value={formData.kislik_mukannen}
min="0"
- step="1"
+ step="0.01"
placeholder="0"
- pattern="[0-9]*"
- inputmode="numeric"
+ inputmode="decimal"
/>
@@ -451,17 +498,31 @@
required
/>
-
- Plaka
-
-
+
+ Plaka
+
+
+
+ Birlik
+
+ Birlik Seçin
+ {#each units as unit}
+ {unit.name}
+ {/each}
+
+
Yakıt Tipi
@@ -526,10 +586,9 @@
class="form-input"
bind:value={formData.kislik_mukannen}
min="0"
- step="1"
+ step="0.01"
placeholder="0"
- pattern="[0-9]*"
- inputmode="numeric"
+ inputmode="decimal"
/>
@@ -664,6 +723,15 @@
margin-bottom: 1rem;
}
+ .vehicle-unit {
+ margin: 0 0 1rem;
+ color: var(--text-secondary);
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+ }
+
.vehicle-info h3 {
font-size: 1.2rem;
font-weight: 600;
@@ -826,4 +894,4 @@
flex-direction: column;
}
}
-
\ No newline at end of file
+
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 0d0a6da..777d92a 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -44,7 +44,7 @@
- Yakıt Takip Modülü
+ Yakıt Takip Uygulaması
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 0ba9e70..db59fa7 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -83,7 +83,7 @@
Giriş
- Yakıt Takip Modülü
+ Yakıt Takip Uygulaması