"use client"; import Image from "next/image"; import PackageCamera from "./lib/camera/component/pakageCamera"; import BarcodeScanner from "./lib/camera/component/scannerBarcode"; import SjCamera from "./lib/camera/component/sjCamera"; import DispatchCamera from "./lib/camera/component/dispatchCamera"; import useCameraStore from "./lib/camera/hooks/useCameraStore"; import Header from "./lib/camera/component/hedear"; import { Button } from "@mui/material"; import { SaveAsOutlined } from "@mui/icons-material"; import axios from "axios"; import odooApi from "./lib/api/odooApi"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { getAuth } from "./lib/api/auth"; import { getCookie } from "cookies-next"; type Role = "driver" | "dispatch"; export default function Home() { const [isLogin, setIsLogin] = useState(true); const [isDriver, setIsDriver] = useState(false); const [isDispatch, setIsDispatch] = useState(false); const { barcode, imageSj, imagePackage, imageDispatch, setBarcode, setImageSj, setImagePackage, setImageDispatch, } = useCameraStore(); const [isLoading, setIsLoading] = useState(false); const router = useRouter(); useEffect(() => { const auth = getAuth(); if (!auth) { router.push("/login"); return; } // baca role dari cookie yang diset saat login const roleCookie = (getCookie("web_role") as string | undefined)?.toLowerCase() as Role | undefined; const role: Role | null = roleCookie === "driver" || roleCookie === "dispatch" ? roleCookie : null; setIsLogin(true); setIsDriver(role === "driver"); setIsDispatch(role === "dispatch"); }, [router]); const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); setIsLoading(true); if (!barcode) { alert("Barcode harus diisi."); setIsLoading(false); return; } // Validasi sesuai role yang dipilih di login if (isDispatch) { // Dispatch: dispatch wajib, SJ opsional if (!imageDispatch) { alert("Foto Dispatch Wajib Diisi"); setIsLoading(false); return; } } else { // Driver (atau non-dispatch): SJ & Penerima wajib if (!imageSj || !imagePackage) { alert("Barcode, Foto SJ, dan Foto Penerima harus tersedia."); setIsLoading(false); return; } } try { // siapkan base64 tanpa prefix, kalau kosong biarkan undefined const newSjImage = imageSj ? imageSj.replace(/^.*?,/, "") : undefined; const newPackageImage = imagePackage ? imagePackage.replace(/^.*?,/, "") : undefined; const newDispatchImage = imageDispatch && imageDispatch.startsWith("data:") ? imageDispatch.replace(/^.*?,/, "") : imageDispatch || undefined; // hanya kirim field yang ada const submittedSj = !!newSjImage; const submittedPackage = !!newPackageImage; const submittedDispatch = !!newDispatchImage && !isDriver; // dispatch hanya untuk non-driver const data: Record = {}; if (submittedSj) data.sj_document = newSjImage!; if (submittedPackage) data.paket_document = newPackageImage!; if (submittedDispatch) data.dispatch_document = newDispatchImage!; const response = (await odooApi( "PUT", `/api/v1/stock-picking/${barcode}/documentation`, data )) as { status?: { code?: number } }; if (response?.status?.code === 200) { alert("Berhasil Submit Data"); setBarcode(""); if (submittedSj) setImageSj(""); if (submittedPackage) setImagePackage(""); if (submittedDispatch) setImageDispatch(""); } else if (response?.status?.code === 404) { alert("Gagal Submit Data, Picking Code Tidak Ditemukan"); } else { alert("Gagal Submit Data, Silahkan Coba Lagi"); } } catch (error) { if (axios.isAxiosError(error)) { console.error("Error:", error.response?.data); } else if (error instanceof Error) { console.error("Error mengirim data:", error.message); } else { console.error("Unknown error:", error); } } finally { setIsLoading(false); } }; return (
{isLogin && (
{/* SJ: driver wajib, dispatch opsional → tampil untuk semua */} {/* Penerima: tidak diperlukan dispatch → sembunyikan saat dispatch */} {!isDispatch && } {/* Dispatch: wajib untuk dispatch; non-driver boleh tampil */} {!isDriver && }
{imageSj && ( <>
Captured
)}
{imagePackage && ( <>
Captured
)}
{!isDriver && imageDispatch && ( <>
Captured
)}
)} {!isLogin && (

Loading...

)}
); }