Kaynağa Gözat

Merge branch 'MergeProblem1' of https://git.2fi-solutions.com/derek/FPSMS-frontend into MergeProblem1

stable1
kelvin.yau 2 hafta önce
ebeveyn
işleme
3632421474
3 değiştirilmiş dosya ile 75 ekleme ve 14 silme
  1. +1
    -1
      src/app/(main)/stockOutIssueRecord/page.tsx
  2. +14
    -2
      src/app/api/stockIssue/actions.ts
  3. +60
    -11
      src/components/StockIssue/SearchPage.tsx

+ 1
- 1
src/app/(main)/stockOutIssueRecord/page.tsx Dosyayı Görüntüle

@@ -13,7 +13,7 @@ export const metadata: Metadata = {
const PickOrder: React.FC = async () => {
const { t } = await getServerI18n("pickOrder");

PreloadPickOrder();
// PreloadPickOrder();

return (
<>


+ 14
- 2
src/app/api/stockIssue/actions.ts Dosyayı Görüntüle

@@ -69,9 +69,21 @@ export const fetchBadItemList = cache(async (issueCategory: string = "lot_issue"
});


export const fetchExpiryItemList = cache(async () => {
export interface ExpiryItemFilter {
expiryDate?: string;
itemCode?: string;
itemName?: string;
}

export const fetchExpiryItemList = cache(async (filters?: ExpiryItemFilter) => {
const params = new URLSearchParams();
if (filters?.expiryDate) params.set("expiryDate", filters.expiryDate);
if (filters?.itemCode) params.set("itemCode", filters.itemCode);
if (filters?.itemName) params.set("itemName", filters.itemName);
const queryString = params.toString();
const url = `${BASE_API_URL}/pickExecution/issues/expiryItem${queryString ? `?${queryString}` : ""}`;
return serverFetchJson<ExpiryItemResult[]>(
`${BASE_API_URL}/pickExecution/issues/expiryItem`,
url,
{
next: { tags: ["Expiry Item List"] },
},


+ 60
- 11
src/components/StockIssue/SearchPage.tsx Dosyayı Görüntüle

@@ -11,6 +11,7 @@ import {
batchSubmitExpiryItem,
batchSubmitMissItem,
ExpiryItemResult,
fetchExpiryItemList,
StockIssueLists,
StockIssueResult,
submitBadItem,
@@ -27,6 +28,9 @@ interface Props {

type SearchQuery = {
lotNo: string;
itemCode: string;
itemName: string;
expiryDate: string;
};
type SearchParamNames = keyof SearchQuery;

@@ -34,7 +38,12 @@ const SearchPage: React.FC<Props> = ({ dataList }) => {
const BATCH_CHUNK_SIZE = 20;
const { t } = useTranslation("inventory");
const [tab, setTab] = useState<"miss" | "bad" | "expiry">("miss");
const [search, setSearch] = useState<SearchQuery>({ lotNo: "" });
const [search, setSearch] = useState<SearchQuery>({
lotNo: "",
itemCode: "",
itemName: "",
expiryDate: "",
});
const { data: session } = useSession() as { data: SessionWithTokens | null };
const currentUserId = session?.id ? parseInt(session.id) : undefined;
const [formOpen, setFormOpen] = useState(false);
@@ -57,14 +66,36 @@ const SearchPage: React.FC<Props> = ({ dataList }) => {
const [batchProgress, setBatchProgress] = useState<{ done: number; total: number } | null>(null);
const [paging, setPaging] = useState({ pageNum: 1, pageSize: 10 });
const searchCriteria: Criterion<SearchParamNames>[] = useMemo(
() => [
{
label: t("Lot No."),
paramName: "lotNo",
type: "text",
},
],
[t],
() => {
if (tab === "expiry") {
return [
{
label: t("Item Code"),
paramName: "itemCode",
type: "text",
},
{
label: t("Item"),
paramName: "itemName",
type: "text",
},
{
label: t("Expiry Date"),
paramName: "expiryDate",
type: "date",
},
];
}

return [
{
label: t("Lot No."),
paramName: "lotNo",
type: "text",
},
];
},
[t, tab],
);

const filterBySearch = useCallback(
@@ -317,9 +348,27 @@ const SearchPage: React.FC<Props> = ({ dataList }) => {
[t, handleSubmitSingle, submittingIds, currentUserId],
);

const handleSearch = useCallback((query: Record<SearchParamNames, string>) => {
const handleSearch = useCallback(async (query: Record<SearchParamNames, string>) => {
setSearch(query);
}, []);
setPaging((prev) => ({ ...prev, pageNum: 1 }));

if (tab !== "expiry") {
return;
}

try {
const result = await fetchExpiryItemList({
itemCode: query.itemCode?.trim() || undefined,
itemName: query.itemName?.trim() || undefined,
expiryDate: query.expiryDate || undefined,
});
setExpiryItems(result);
setSelectedIds([]);
} catch (error) {
console.error("Failed to search expiry items:", error);
alert(t("Failed to load expiry items"));
}
}, [tab, t]);

const handleTabChange = useCallback(
(_: React.SyntheticEvent, value: string) => {


Yükleniyor…
İptal
Kaydet