Explorar el Código

update pick order efficient

stable1
CANCERYS\kw093 hace 2 semanas
padre
commit
53b3d97097
Se han modificado 3 ficheros con 25 adiciones y 177 borrados
  1. +1
    -1
      src/app/(main)/pickOrder/page.tsx
  2. +18
    -173
      src/components/PickOrderSearch/PickOrderSearch.tsx
  3. +6
    -3
      src/components/PickOrderSearch/PickOrderSearchWrapper.tsx

+ 1
- 1
src/app/(main)/pickOrder/page.tsx Ver fichero

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

PreloadPickOrder();
//PreloadPickOrder();

return (
<>


+ 18
- 173
src/components/PickOrderSearch/PickOrderSearch.tsx Ver fichero

@@ -1,52 +1,25 @@
"use client";
import { PickOrderResult } from "@/app/api/pickOrder";
import { useCallback, useEffect, useMemo, useState } from "react";
import { useCallback, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import SearchBox, { Criterion } from "../SearchBox";
import {
flatten,
intersectionWith,
isEmpty,
sortBy,
uniqBy,
upperCase,
upperFirst,
} from "lodash";
import {
arrayToDayjs,
} from "@/app/utils/formatUtil";
import { Button, Grid, Stack, Tab, Tabs, TabsProps, Typography, Box } from "@mui/material";
import PickOrders from "./PickOrders";
import ConsolidatedPickOrders from "./ConsolidatedPickOrders";
import { Grid, Stack, Tab, Tabs, TabsProps, Typography, Box } from "@mui/material";
import PickExecution from "./PickExecution";
import CreatePickOrderModal from "./CreatePickOrderModal";
import NewCreateItem from "./newcreatitem";
import AssignAndRelease from "./AssignAndRelease";
import AssignTo from "./assignTo";
import { fetchAllItemsInClient, ItemCombo } from "@/app/api/settings/item/actions";
import { fetchPickOrderClient } from "@/app/api/pickOrder/actions";
import Jobcreatitem from "./Jobcreatitem";

interface Props {
pickOrders: PickOrderResult[];
// Intentionally empty: data is loaded per-tab now.
}

type SearchQuery = Partial<
Omit<PickOrderResult, "id" | "consoCode" | "completeDate">
>;

type SearchParamNames = keyof SearchQuery;

const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
const PickOrderSearch: React.FC<Props> = () => {
const { t } = useTranslation("pickOrder");

const [isOpenCreateModal, setIsOpenCreateModal] = useState(false)
const [items, setItems] = useState<ItemCombo[]>([])
const [filteredPickOrders, setFilteredPickOrders] = useState(pickOrders);
const [isOpenCreateModal, setIsOpenCreateModal] = useState(false);
const [items, setItems] = useState<ItemCombo[]>([]);
const [filterArgs, setFilterArgs] = useState<Record<string, any>>({});
const [searchQuery, setSearchQuery] = useState<Record<string, any>>({});
const [tabIndex, setTabIndex] = useState(0);
const [totalCount, setTotalCount] = useState<number>();

const handleTabChange = useCallback<NonNullable<TabsProps["onChange"]>>(
(_e, newValue) => {
@@ -56,16 +29,16 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
);
const openCreateModal = useCallback(async () => {
console.log("testing")
const res = await fetchAllItemsInClient()
console.log(res)
setItems(res)
setIsOpenCreateModal(true)
}, [])
console.log("testing");
const res = await fetchAllItemsInClient();
console.log(res);
setItems(res);
setIsOpenCreateModal(true);
}, []);

const closeCreateModal = useCallback(() => {
setIsOpenCreateModal(false)
}, [])
setIsOpenCreateModal(false);
}, []);

useEffect(() => {
@@ -88,142 +61,14 @@ const PickOrderSearch: React.FC<Props> = ({ pickOrders }) => {
}
}, [tabIndex, items.length]);

const searchCriteria: Criterion<SearchParamNames>[] = useMemo(
() => {
const baseCriteria: Criterion<SearchParamNames>[] = [
{
label: tabIndex === 3 ? t("Item Code") : t("Code"),
paramName: "code",
type: "text"
},
{
label: t("Type"),
paramName: "type",
type: "autocomplete",
options: tabIndex === 3
?
[
{ value: "Consumable", label: t("Consumable") },
{ value: "Material", label: t("Material") },
{ value: "Product", label: t("Product") }
]
:
sortBy(
uniqBy(
pickOrders.map((po) => ({
value: po.type,
label: t(upperCase(po.type)),
})),
"value",
),
"label",
),
},
];
// Add Job Order search for Create Item tab (tabIndex === 3)
if (tabIndex === 3) {
baseCriteria.splice(1, 0, {
label: t("Job Order"),
paramName: "jobOrderCode" as any, // Type assertion for now
type: "text",
});
baseCriteria.splice(2, 0, {
label: t("Target Date"),
paramName: "targetDate",
type: "date",
});
} else {
baseCriteria.splice(1, 0, {
label: t("Target Date From"),
label2: t("Target Date To"),
paramName: "targetDate",
type: "dateRange",
});
}
// Add Items/Item Name criteria
baseCriteria.push({
label: tabIndex === 3 ? t("Item Name") : t("Items"),
paramName: "items",
type: tabIndex === 3 ? "text" : "autocomplete",
options: tabIndex === 3
? []
:
uniqBy(
flatten(
sortBy(
pickOrders.map((po) =>
po.items
? po.items.map((item) => ({
value: item.name,
label: item.name,
}))
: [],
),
"label",
),
),
"value",
),
});
// Add Status criteria for non-Create Item tabs
if (tabIndex !== 3) {
baseCriteria.push({
label: t("Status"),
paramName: "status",
type: "autocomplete",
options: sortBy(
uniqBy(
pickOrders.map((po) => ({
value: po.status,
label: t(upperFirst(po.status)),
})),
"value",
),
"label",
),
});
}
return baseCriteria;
},
[pickOrders, t, tabIndex, items],
);

const fetchNewPagePickOrder = useCallback(
async (
pagingController: Record<string, number>,
filterArgs: Record<string, number>,
) => {
const params = {
...pagingController,
...filterArgs,
};
const res = await fetchPickOrderClient(params);
if (res) {
console.log(res);
setFilteredPickOrders(res.records);
setTotalCount(res.total);
}
},
[],
);

const onReset = useCallback(() => {
setFilteredPickOrders(pickOrders);
}, [pickOrders]);

useEffect(() => {
if (!isOpenCreateModal) {
setTabIndex(1)
setTabIndex(1);
setTimeout(async () => {
setTabIndex(0)
}, 200)
setTabIndex(0);
}, 200);
}
}, [isOpenCreateModal])
}, [isOpenCreateModal]);
// 添加处理提料单创建成功的函数
const handlePickOrderCreated = useCallback(() => {


+ 6
- 3
src/components/PickOrderSearch/PickOrderSearchWrapper.tsx Ver fichero

@@ -1,4 +1,4 @@
import { fetchPickOrders } from "@/app/api/pickOrder";
//import { fetchPickOrders } from "@/app/api/pickOrder";
import GeneralLoading from "../General/GeneralLoading";
import PickOrderSearch from "./PickOrderSearch";

@@ -7,6 +7,7 @@ interface SubComponents {
}

const PickOrderSearchWrapper: React.FC & SubComponents = async () => {
/*
const [pickOrders] = await Promise.all([
fetchPickOrders({
code: undefined,
@@ -17,8 +18,10 @@ const PickOrderSearchWrapper: React.FC & SubComponents = async () => {
itemName: undefined,
}),
]);

return <PickOrderSearch pickOrders={pickOrders} />;
*/
//const pickOrders = [];
//return <PickOrderSearch pickOrders={pickOrders} />;
return <PickOrderSearch />;
};

PickOrderSearchWrapper.Loading = GeneralLoading;


Cargando…
Cancelar
Guardar