Highlights: - Warehouse module: receipts, issues, reservations, inventory, reports, dashboard, master data (categories, suppliers, locations), FIFO service, integration tests - Docházka: mzda PDF counting model (Odpracováno / Vč. svátků / Přesčas / Svátek / So/Ne / Noc) with Czech weekday names and decimal hours - AttendanceAdmin/AttendanceHistory KPI cards unified to mzda formula with fund bar colored by delta, badges for Práce/Dov/Nem/Sv/Nep - Remove leave_type=holiday entirely (auto-computed from Czech public holidays) - Allow multiple work shifts per day (overlap detection only) - Pre-flight refresh in api.ts eliminates spurious 401s on fresh page loads - Prisma: company_settings gets 6 nullable columns for warehouse numbering (PRI/VYD/INV prefixes, default patterns); migration seeds defaults
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { warehouseReservationListOptions } from "../../lib/queries/warehouse";
|
|
|
|
interface ReservationPickerProps {
|
|
itemId: number | null;
|
|
projectId: number | null;
|
|
value: number | null;
|
|
onChange: (reservationId: number | null, remainingQty: number) => void;
|
|
}
|
|
|
|
export default function ReservationPicker({
|
|
itemId,
|
|
projectId,
|
|
value,
|
|
onChange,
|
|
}: ReservationPickerProps) {
|
|
const { data: result } = useQuery(
|
|
warehouseReservationListOptions({
|
|
item_id: itemId ?? undefined,
|
|
project_id: projectId ?? undefined,
|
|
status: "ACTIVE",
|
|
perPage: 100,
|
|
}),
|
|
);
|
|
|
|
const reservations = result?.data ?? [];
|
|
|
|
return (
|
|
<select
|
|
className="admin-form-select"
|
|
value={value ?? ""}
|
|
onChange={(e) => {
|
|
const val = e.target.value;
|
|
if (!val) {
|
|
onChange(null, 0);
|
|
return;
|
|
}
|
|
const reservationId = Number(val);
|
|
const reservation = reservations.find((r) => r.id === reservationId);
|
|
if (reservation) {
|
|
onChange(reservationId, Number(reservation.remaining_qty));
|
|
}
|
|
}}
|
|
>
|
|
<option value="">— žádná rezervace —</option>
|
|
{reservations.map((r) => (
|
|
<option key={r.id} value={r.id}>
|
|
R{r.id} — {r.project?.name ?? `Projekt #${r.project_id}`} — zbývá:{" "}
|
|
{Number(r.remaining_qty)} {r.item?.unit ?? "ks"}
|
|
</option>
|
|
))}
|
|
</select>
|
|
);
|
|
}
|