diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-11-23 16:38:42 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-11-23 16:38:42 +0700 |
| commit | bb01aa8c2423b19247d9e3530ae1a3256d884861 (patch) | |
| tree | 5a381a2206c6ec68b86dd17a69d7a7c199d0bd73 /src | |
| parent | a39c95d20739bc564f49e115b4fdafc1f6f56b10 (diff) | |
Update export data result
Diffstat (limited to 'src')
| -rw-r--r-- | src/app/(mobile-screen)/page.tsx | 4 | ||||
| -rw-r--r-- | src/app/api/stock-opname/export/route.tsx | 80 | ||||
| -rw-r--r-- | src/app/api/stock-opname/route.tsx | 6 | ||||
| -rw-r--r-- | src/modules/stock-opname/index.tsx | 8 |
4 files changed, 60 insertions, 38 deletions
diff --git a/src/app/(mobile-screen)/page.tsx b/src/app/(mobile-screen)/page.tsx index 430a195..08b9dc9 100644 --- a/src/app/(mobile-screen)/page.tsx +++ b/src/app/(mobile-screen)/page.tsx @@ -7,9 +7,9 @@ export default function HomePage() { return ( <Authenticated> <main className="px-4 pt-10"> - <ProfileCard /> - <Spacer y={6} /> <StockOpname /> + <Spacer y={6} /> + <ProfileCard /> </main> </Authenticated> ) diff --git a/src/app/api/stock-opname/export/route.tsx b/src/app/api/stock-opname/export/route.tsx index 1595f20..27f99fe 100644 --- a/src/app/api/stock-opname/export/route.tsx +++ b/src/app/api/stock-opname/export/route.tsx @@ -14,45 +14,69 @@ export async function GET(request: NextRequest) { const companyId = parseInt(paramCompanyId) - const stockOpnames = await prisma.stockOpname.groupBy({ - by: ['productId'], - where: { companyId } - }) - - type SOLocationProduct = (StockOpnameLocationRes & { product: Product | null }) + let page = 1; + let totalPage = 1; + const stockOpnames = [] + do { + const requestParams = new URLSearchParams({ + page: page.toString(), + companyId: companyId.toString() + }) + const stockOpnamesFetch = await fetch(`${SELF_HOST}/api/stock-opname?${requestParams}`) + const stockOpnamesJson = await stockOpnamesFetch.json() + stockOpnames.push(...stockOpnamesJson.result) - const datas: SOLocationProduct[] = [] + page++ + totalPage = stockOpnamesJson.totalPage + } while (page <= totalPage); for (const opname of stockOpnames) { const requestParams = new URLSearchParams({ - productId: opname.productId.toString(), + productId: opname.id.toString(), companyId: companyId.toString() }) const detailsFetch = await fetch(`${SELF_HOST}/api/stock-opname/location?${requestParams}`) const details: StockOpnameLocationRes[] = await detailsFetch.json() - const product = await prisma.product.findFirst({ where: { id: opname.productId } }) - const mappedData: SOLocationProduct[] = details.map((data) => ({ - ...data, - product - })) - - datas.push(...mappedData) + opname['details'] = details } - const dataSheet = datas.map((data) => ({ - location: data.name, - name: data.product?.name, - itemCode: data.product?.itemCode, - barcode: data.product?.barcode, - onhandQty: data.product?.onhandQty, - differenceQty: data.product?.differenceQty, - count1: data.COUNT1.quantity, - count2: data.COUNT2.quantity, - count3: data.COUNT3.quantity, - verification: data.VERIFICATION.quantity, - isDifferent: data.product?.isDifferent - })) + + const dataSheet = [] + + for (const opname of stockOpnames) { + const defaultItems = { + itemCode: opname?.itemCode, + barcode: opname?.barcode, + name: opname.name, + } + + dataSheet.push({ + ...defaultItems, + location: '', + count1: opname.quantity.COUNT1, + count2: opname.quantity.COUNT2, + count3: opname.quantity.COUNT3, + verification: opname.quantity.VERIFICATION, + onhandQty: opname.onhandQty, + differenceQty: opname.differenceQty, + isDifferent: opname.isDifferent + }) + + for (const detail of opname['details']) { + dataSheet.push({ + ...defaultItems, + location: detail.name, + count1: detail.COUNT1.quantity, + count2: detail.COUNT2.quantity, + count3: detail.COUNT3.quantity, + verification: detail.VERIFICATION.quantity, + onhandQty: '', + differenceQty: '', + isDifferent: '' + }) + } + } const worksheet = XLSX.utils.json_to_sheet(dataSheet) const workbook = XLSX.utils.book_new() diff --git a/src/app/api/stock-opname/route.tsx b/src/app/api/stock-opname/route.tsx index 0515238..ba54524 100644 --- a/src/app/api/stock-opname/route.tsx +++ b/src/app/api/stock-opname/route.tsx @@ -164,12 +164,6 @@ const computeIsDifferent = async ({ const stockOpnamesFetch = await fetch(`${SELF_HOST}/api/stock-opname/location?${searchParams}`) const stockOpnames: StockOpnameLocationRes[] = await stockOpnamesFetch.json() - const count2Count = await prisma.stockOpname.count({ - where: { companyId, productId, team: 'COUNT2' } - }) - - const isCount2Counted: boolean = count2Count > 0 - let isDifferent: boolean = false for (const opname of stockOpnames) { diff --git a/src/modules/stock-opname/index.tsx b/src/modules/stock-opname/index.tsx index eb8b796..c2a889a 100644 --- a/src/modules/stock-opname/index.tsx +++ b/src/modules/stock-opname/index.tsx @@ -70,11 +70,13 @@ const StockOpname = () => { } const [activeScanner, setActiveScanner] = useState<ActiveScanner>(null) + const [scannerVal, setScannerVal] = useState('') const [scannerOptions, setScannerOptions] = useState<ScannerOption[]>() const [scannerOptionLoading, setScannerOptionLoading] = useState<boolean>(false) const handleOnScan = async (data: string) => { if (!activeScanner) return + setScannerVal(data) const loadFunc = activeScanner === 'product' ? loadProduct : loadLocation setScannerOptionLoading(true) const response = await loadFunc(data) @@ -204,9 +206,11 @@ const StockOpname = () => { ))} </div> {scannerOptions.length === 0 && ( - <div className="flex flex-col justify-center items-center gap-y-4 text-default-700"> + <div className="flex flex-col justify-center items-center gap-y-4 text-default-700 text-center"> <AlertCircleIcon size={36} /> - Tidak ada opsi untuk ditampilkan + <span> + Tidak ada opsi untuk ditampilkan dari <span className="font-medium">{scannerVal}</span> + </span> </div> )} <Spacer y={2} /> |
