Yakıt Fişi Oluşturma ekranındaki sorun giderildi.
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user