summaryrefslogtreecommitdiff
path: root/src/app/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/api')
-rw-r--r--src/app/api/company/[companyId]/product/[productId]/compute-different/route.tsx83
-rw-r--r--src/app/api/stock-opname/route.tsx34
2 files changed, 99 insertions, 18 deletions
diff --git a/src/app/api/company/[companyId]/product/[productId]/compute-different/route.tsx b/src/app/api/company/[companyId]/product/[productId]/compute-different/route.tsx
new file mode 100644
index 0000000..2141c27
--- /dev/null
+++ b/src/app/api/company/[companyId]/product/[productId]/compute-different/route.tsx
@@ -0,0 +1,83 @@
+import { StockOpnameLocationRes } from "@/common/types/stockOpname"
+import { NextRequest, NextResponse } from "next/server"
+import { prisma } from "prisma/client"
+import { Team } from "prisma/generated/client"
+import _ from "lodash"
+
+type PostParams = { params: { companyId: string, productId: string } }
+
+const SELF_HOST = process.env.SELF_HOST as string
+
+export async function POST(request: NextRequest, { params }: PostParams) {
+ const totalQty: { [key in keyof typeof Team]: number | null } = {
+ COUNT1: null,
+ COUNT2: null,
+ COUNT3: null,
+ VERIFICATION: null
+ }
+
+ const searchParams = new URLSearchParams({
+ companyId: params.companyId.toString(),
+ productId: params.productId.toString()
+ })
+
+ const stockOpnamesFetch = await fetch(`${SELF_HOST}/api/stock-opname/location?${searchParams}`)
+ const stockOpnames: StockOpnameLocationRes[] = await stockOpnamesFetch.json()
+
+ let isDifferent: boolean = false
+ let verificationCounter: number = 0
+
+ for (const opname of stockOpnames) {
+ let { COUNT1, COUNT2, COUNT3, VERIFICATION } = opname
+
+ if (totalQty['COUNT1'] === null && _.isNumber(COUNT1.quantity)) totalQty['COUNT1'] = 0
+ if (totalQty['COUNT2'] === null && _.isNumber(COUNT2.quantity)) totalQty['COUNT2'] = 0
+ if (totalQty['COUNT3'] === null && _.isNumber(COUNT3.quantity)) totalQty['COUNT3'] = 0
+ if (totalQty['VERIFICATION'] === null && _.isNumber(VERIFICATION.quantity)) totalQty['VERIFICATION'] = 0
+
+ if (_.isNumber(totalQty['COUNT1']) && _.isNumber(COUNT1.quantity)) totalQty['COUNT1'] += COUNT1.quantity
+ if (_.isNumber(totalQty['COUNT2']) && _.isNumber(COUNT2.quantity)) totalQty['COUNT2'] += COUNT2.quantity
+ if (_.isNumber(totalQty['COUNT3']) && _.isNumber(COUNT3.quantity)) totalQty['COUNT3'] += COUNT3.quantity
+ if (_.isNumber(totalQty['VERIFICATION']) && _.isNumber(VERIFICATION.quantity)) totalQty['VERIFICATION'] += VERIFICATION.quantity
+
+ if (_.isNumber(COUNT1.quantity) && _.isNumber(COUNT2.quantity) && COUNT1.quantity !== COUNT2.quantity) isDifferent = true
+ if (_.isNumber(COUNT1.quantity) && _.isNumber(COUNT3.quantity) && COUNT1.quantity !== COUNT3.quantity) isDifferent = true
+ if (_.isNumber(COUNT2.quantity) && _.isNumber(COUNT3.quantity) && COUNT2.quantity !== COUNT3.quantity) isDifferent = true
+
+ if (_.isNumber(VERIFICATION.quantity)) verificationCounter++
+ }
+
+ const product = await prisma.product.findFirst({ where: { id: parseInt(params.productId) } })
+ if (!product) return
+
+ const onhandQty = product.onhandQty
+ const differenceQty = product.differenceQty
+ const allQty = onhandQty + differenceQty
+
+ const conditional = {
+ verificationCheckAll: verificationCounter > 0 && verificationCounter === stockOpnames.length,
+ anyCountEqWithOnhand: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(onhandQty),
+ anyCountEqWithAllQty: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(allQty),
+ count1EqWithCount2: totalQty['COUNT1'] !== null && totalQty['COUNT2'] !== null && totalQty['COUNT1'] === totalQty['COUNT2'],
+ count1EqWithCount3: totalQty['COUNT1'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT1'] === totalQty['COUNT3'],
+ count2EqWithCount3: totalQty['COUNT2'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT2'] === totalQty['COUNT3'],
+ }
+
+ isDifferent = !(
+ conditional.verificationCheckAll ||
+ conditional.anyCountEqWithOnhand ||
+ conditional.anyCountEqWithAllQty ||
+ conditional.count1EqWithCount2 ||
+ conditional.count1EqWithCount3 ||
+ conditional.count2EqWithCount3
+ )
+
+ const payload = {
+ where: { id: product.id },
+ data: { isDifferent }
+ }
+
+ await prisma.product.update(payload)
+
+ return NextResponse.json(payload)
+} \ No newline at end of file
diff --git a/src/app/api/stock-opname/route.tsx b/src/app/api/stock-opname/route.tsx
index cba16e2..4c2dee4 100644
--- a/src/app/api/stock-opname/route.tsx
+++ b/src/app/api/stock-opname/route.tsx
@@ -183,26 +183,24 @@ const computeIsDifferent = async ({
const differenceQty = product.differenceQty
const allQty = onhandQty + differenceQty
- if (!isDifferent) {
- const conditional = {
- verificationCheckAll: verificationCounter > 0 && verificationCounter === stockOpnames.length,
- anyCountEqWithOnhand: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(onhandQty),
- anyCountEqWithAllQty: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(allQty),
- count1EqWithCount2: totalQty['COUNT1'] !== null && totalQty['COUNT2'] !== null && totalQty['COUNT1'] === totalQty['COUNT2'],
- count1EqWithCount3: totalQty['COUNT1'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT1'] === totalQty['COUNT3'],
- count2EqWithCount3: totalQty['COUNT2'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT2'] === totalQty['COUNT3'],
- }
-
- isDifferent = !(
- conditional.verificationCheckAll ||
- conditional.anyCountEqWithOnhand ||
- conditional.anyCountEqWithAllQty ||
- conditional.count1EqWithCount2 ||
- conditional.count1EqWithCount3 ||
- conditional.count2EqWithCount3
- )
+ const conditional = {
+ verificationCheckAll: verificationCounter > 0 && verificationCounter === stockOpnames.length,
+ anyCountEqWithOnhand: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(onhandQty),
+ anyCountEqWithAllQty: [totalQty['COUNT1'], totalQty['COUNT2'], totalQty['COUNT3']].includes(allQty),
+ count1EqWithCount2: totalQty['COUNT1'] !== null && totalQty['COUNT2'] !== null && totalQty['COUNT1'] === totalQty['COUNT2'],
+ count1EqWithCount3: totalQty['COUNT1'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT1'] === totalQty['COUNT3'],
+ count2EqWithCount3: totalQty['COUNT2'] !== null && totalQty['COUNT3'] !== null && totalQty['COUNT2'] === totalQty['COUNT3'],
}
+ isDifferent = !(
+ conditional.verificationCheckAll ||
+ conditional.anyCountEqWithOnhand ||
+ conditional.anyCountEqWithAllQty ||
+ conditional.count1EqWithCount2 ||
+ conditional.count1EqWithCount3 ||
+ conditional.count2EqWithCount3
+ )
+
await prisma.product.update({
where: { id: product.id },
data: { isDifferent }