Yakıt Fişi Oluşturma ekranındaki sorun giderildi.

This commit is contained in:
2025-11-08 20:55:16 +03:00
parent 2514dfcde3
commit 6f2b18dce2
2 changed files with 168 additions and 43 deletions

View File

@@ -48,6 +48,7 @@
let personnel = [];
let goodsManagers = [];
let filteredGoodsManagers = [];
let filteredVehicles = [];
let formError = "";
let formSuccess = "";
let isSubmitting = false;
@@ -65,6 +66,13 @@
notes: ""
};
function setFormField(field, value) {
if (formData[field] === value) {
return;
}
formData = { ...formData, [field]: value };
}
$: displayPendingSlips = pendingSlips;
$: displayHistorySlips = approvedRejectedSlips;
@@ -167,6 +175,7 @@
if (vehiclesRes.ok) {
const vehiclesData = await vehiclesRes.json();
vehicles = vehiclesData.vehicles || [];
await syncVehicleSelection(formData.unit_id);
}
if (unitsRes.ok) {
@@ -208,6 +217,7 @@
notes: ""
};
syncGoodsManagerSelection("");
syncVehicleSelection("");
}
function getGoodsManagersByUnit(unitId) {
@@ -221,7 +231,7 @@
filteredGoodsManagers = candidates;
if (!unitId || candidates.length === 0) {
formData.goods_manager_id = "";
setFormField("goods_manager_id", "");
return;
}
@@ -231,13 +241,56 @@
);
if (!hasCurrent) {
formData.goods_manager_id = candidates[0].id.toString();
setFormField("goods_manager_id", candidates[0].id.toString());
}
}
function handleUnitChange(event) {
formData.unit_id = event.target.value;
syncGoodsManagerSelection(formData.unit_id);
function getVehiclesByUnit(unitId) {
if (!unitId) {
return [];
}
const normalized = parseInt(unitId);
return vehicles.filter((vehicle) => vehicle.unit_id === normalized);
}
async function syncVehicleSelection(unitId = formData.unit_id) {
const candidates = getVehiclesByUnit(unitId);
filteredVehicles = candidates;
await tick();
if (!unitId || candidates.length === 0) {
setFormField("vehicle_id", "");
return;
}
const hasVehicle = candidates.some(
(vehicle) =>
vehicle.id.toString() === (formData.vehicle_id ?? "").toString()
);
if (!hasVehicle) {
setFormField("vehicle_id", candidates[0].id.toString());
}
}
$: if (formData.unit_id && filteredVehicles.length > 0) {
const hasVehicle = filteredVehicles.some(
(vehicle) =>
vehicle.id.toString() === (formData.vehicle_id ?? "").toString()
);
if (!hasVehicle) {
setFormField("vehicle_id", filteredVehicles[0].id.toString());
}
}
async function handleUnitChange(event) {
const value = event.target.value;
setFormField("unit_id", value);
syncGoodsManagerSelection(value);
await syncVehicleSelection(value);
}
async function handleCreateSlip() {
@@ -1252,14 +1305,19 @@
id="vehicle_id"
class="form-select"
bind:value={formData.vehicle_id}
disabled={!formData.unit_id || filteredVehicles.length === 0}
required
>
<option value="">Araç Seçin</option>
{#each vehicles as vehicle}
<option value={vehicle.id}
>{vehicle.brand}
{vehicle.model} ({vehicle.plate})</option
>
<option value="" class="s-jZJiUkwef1J0">Araç Seçin</option>
{#if !formData.unit_id}
<option value="">Önce birlik seçin</option>
{:else if filteredVehicles.length === 0}
<option value="">Bu birliğe kayıtlı araç yok</option>
{/if}
{#each filteredVehicles as vehicle}
<option value={vehicle.id.toString()}>
{vehicle.brand} {vehicle.model} ({vehicle.plate})
</option>
{/each}
</select>
</div>
@@ -1310,9 +1368,9 @@
>
<option value="">Personel Seçin</option>
{#each personnel as person}
<option value={person.id}
>{person.rank} {person.full_name}</option
>
<option value={person.id.toString()}>
{person.rank} {person.full_name}
</option>
{/each}
</select>
</div>

View File

@@ -7,18 +7,19 @@
</svelte:head>
<script>
import { onMount, onDestroy } from 'svelte';
import { onMount, onDestroy, tick } from 'svelte';
import { goto } from '$app/navigation';
import { io } from 'socket.io-client';
let user = null;
let vehicles = [];
let units = [];
let personnel = [];
let fuelSlips = [];
let approvedRejectedSlips = [];
let vehicles = [];
let units = [];
let personnel = [];
let fuelSlips = [];
let approvedRejectedSlips = [];
let receivingPersonnel = [];
let filteredReceivingPersonnel = [];
let filteredVehicles = [];
let loading = true;
let error = '';
let showCreateModal = false;
@@ -30,18 +31,25 @@ let filteredReceivingPersonnel = [];
// Form değişkenleri
let formData = {
date: new Date().toISOString().split('T')[0],
force_command: '',
unit_id: '',
vehicle_id: '',
date: new Date().toISOString().split('T')[0],
force_command: '',
unit_id: '',
vehicle_id: '',
fuel_type: 'benzin',
liters: '',
km: '',
personnel_id: '',
goods_manager_id: '',
notes: ''
goods_manager_id: '',
notes: ''
};
function setFormField(field, value) {
if (formData[field] === value) {
return;
}
formData = { ...formData, [field]: value };
}
onMount(async () => {
const userData = localStorage.getItem('user');
if (!userData || JSON.parse(userData).role !== 'fuel_manager') {
@@ -89,6 +97,7 @@ let filteredReceivingPersonnel = [];
if (vehiclesRes.ok) {
const vehiclesData = await vehiclesRes.json();
vehicles = vehiclesData.vehicles || [];
await syncVehicleSelection(formData.unit_id);
}
if (unitsRes.ok) {
@@ -141,30 +150,76 @@ let filteredReceivingPersonnel = [];
return receivingPersonnel.filter(person => person.unit_id === normalizedUnit);
}
function syncReceiverSelection(unitId = formData.unit_id) {
function syncReceiverSelection(unitId = formData.unit_id) {
const candidates = getUnitPersonnelByUnit(unitId);
filteredReceivingPersonnel = candidates;
if (!unitId) {
formData.goods_manager_id = '';
setFormField('goods_manager_id', '');
return;
}
if (candidates.length === 0) {
formData.goods_manager_id = '';
setFormField('goods_manager_id', '');
return;
}
const hasCurrent = candidates.some(person => person.id.toString() === formData.goods_manager_id?.toString());
if (!hasCurrent) {
formData.goods_manager_id = candidates[0].id.toString();
setFormField('goods_manager_id', candidates[0].id.toString());
}
}
function handleUnitChange(event) {
function getVehiclesByUnit(unitId) {
if (!unitId) {
return [];
}
const normalized = parseInt(unitId);
return vehicles.filter((vehicle) => vehicle.unit_id === normalized);
}
async function syncVehicleSelection(unitId = formData.unit_id) {
if (!unitId) {
filteredVehicles = [];
setFormField('vehicle_id', '');
return;
}
const candidates = getVehiclesByUnit(unitId);
filteredVehicles = candidates;
await tick();
if (candidates.length === 0) {
setFormField('vehicle_id', '');
return;
}
const hasVehicle = candidates.some(
(vehicle) => vehicle.id.toString() === formData.vehicle_id?.toString()
);
if (!hasVehicle) {
setFormField('vehicle_id', candidates[0].id.toString());
}
}
$: if (formData.unit_id && filteredVehicles.length > 0) {
const hasVehicle = filteredVehicles.some(
(vehicle) => vehicle.id.toString() === formData.vehicle_id?.toString()
);
if (!hasVehicle) {
setFormField('vehicle_id', filteredVehicles[0].id.toString());
}
}
async function handleUnitChange(event) {
const value = event.target.value;
formData.unit_id = value;
setFormField('unit_id', value);
syncReceiverSelection(value);
await syncVehicleSelection(value);
}
function resetForm() {
@@ -181,6 +236,7 @@ let filteredReceivingPersonnel = [];
notes: ''
};
syncReceiverSelection('');
syncVehicleSelection('');
}
function openCreateModal() {
@@ -424,17 +480,28 @@ let filteredReceivingPersonnel = [];
required
>
<option value="">Birlik Seçin</option>
{#each units as unit}
<option value={unit.id}>{unit.name}</option>
{/each}
{#each units as unit}
<option value={unit.id.toString()}>{unit.name}</option>
{/each}
</select>
</div>
<div class="form-group">
<label for="vehicle_id">Araç</label>
<select id="vehicle_id" class="form-select" bind:value={formData.vehicle_id} required>
<option value="">Araç Seçin</option>
{#each vehicles as vehicle}
<option value={vehicle.id}>{vehicle.brand} {vehicle.model} ({vehicle.plate})</option>
<select
id="vehicle_id"
class="form-select"
bind:value={formData.vehicle_id}
disabled={!formData.unit_id || filteredVehicles.length === 0}
required
>
<option value="" class="s-jZJiUkwef1J0">Araç Seçin</option>
{#if !formData.unit_id}
<option value="">Önce birlik seçin</option>
{:else if filteredVehicles.length === 0}
<option value="">Bu birliğe kayıtlı araç yok</option>
{/if}
{#each filteredVehicles as vehicle}
<option value={vehicle.id.toString()}>{vehicle.brand} {vehicle.model} ({vehicle.plate})</option>
{/each}
</select>
</div>
@@ -474,9 +541,9 @@ let filteredReceivingPersonnel = [];
<label for="personnel_id">Teslim Eden</label>
<select id="personnel_id" class="form-select" bind:value={formData.personnel_id} required>
<option value="">Personel Seçin</option>
{#each personnel as person}
<option value={person.id}>{person.rank} {person.full_name}</option>
{/each}
{#each personnel as person}
<option value={person.id.toString()}>{person.rank} {person.full_name}</option>
{/each}
</select>
</div>
<div class="form-group">
@@ -494,7 +561,7 @@ let filteredReceivingPersonnel = [];
<option value="">Bu birliğe kayıtlı personel yok</option>
{/if}
{#each filteredReceivingPersonnel as person}
<option value={person.id}>{person.rank} {person.full_name}</option>
<option value={person.id.toString()}>{person.rank} {person.full_name}</option>
{/each}
</select>
</div>