feat(statistics): implement top alert stocks, top last sales, top supplier debts, and top selling products endpoints with SQL queries
This commit is contained in:
+49
-61
@@ -10,7 +10,6 @@ async function main() {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.user.count()) === 0) {
|
||||
const adminRole = await prisma.role.findUnique({ where: { name: 'Admin' } })
|
||||
if (!adminRole) {
|
||||
@@ -28,7 +27,6 @@ async function main() {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.inventory.count()) === 0) {
|
||||
await prisma.inventory.createMany({
|
||||
data: [
|
||||
@@ -48,19 +46,16 @@ async function main() {
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.productCategory.count()) === 0) {
|
||||
await prisma.productCategory.createMany({
|
||||
data: Array.from({ length: 10 }, (_, i) => ({ name: `دستهی ${i + 1}` })),
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.productBrand.count()) === 0) {
|
||||
await prisma.productBrand.createMany({
|
||||
data: Array.from({ length: 10 }, (_, i) => ({ name: `برند ${i + 1}` })),
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.supplier.count()) === 0) {
|
||||
await prisma.supplier.createMany({
|
||||
data: Array.from({ length: 9 }, (_, i) => ({
|
||||
@@ -71,7 +66,6 @@ async function main() {
|
||||
})),
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.customer.count()) === 0) {
|
||||
await prisma.customer.createMany({
|
||||
data: Array.from({ length: 5 }, (_, i) => ({
|
||||
@@ -82,12 +76,11 @@ async function main() {
|
||||
})),
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.product.count()) === 0) {
|
||||
const categories = await prisma.productCategory.findMany()
|
||||
const brands = await prisma.productBrand.findMany()
|
||||
await prisma.product.createMany({
|
||||
data: Array.from({ length: 100 }, (_, i) => ({
|
||||
data: Array.from({ length: 20 }, (_, i) => ({
|
||||
name: `کالای ${i + 1}`,
|
||||
sku: `SKU-${1000 + i + 1}`,
|
||||
salePrice: parseInt((Math.random() * (100 - 10) + 10).toString()) * 10000,
|
||||
@@ -96,7 +89,6 @@ async function main() {
|
||||
})),
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.bank.count()) === 0) {
|
||||
await prisma.bank.createMany({
|
||||
data: [
|
||||
@@ -231,7 +223,6 @@ async function main() {
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.bankBranch.count()) === 0) {
|
||||
await prisma.bankBranch.createMany({
|
||||
data: [
|
||||
@@ -253,7 +244,6 @@ async function main() {
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
if ((await prisma.bankAccount.count()) === 0) {
|
||||
await prisma.bankAccount.createMany({
|
||||
data: [
|
||||
@@ -278,56 +268,54 @@ async function main() {
|
||||
],
|
||||
})
|
||||
}
|
||||
if ((await prisma.inventoryBankAccount.count()) === 0) {
|
||||
const inventories = await prisma.inventory.findMany()
|
||||
const bankAccounts = await prisma.bankAccount.findMany()
|
||||
if (inventories.length || bankAccounts.length) {
|
||||
// Assign bank accounts to inventories
|
||||
const inventoryBankAccounts = []
|
||||
for (let i = 0; i < inventories.length; i++) {
|
||||
const inventory = inventories[i]
|
||||
const bankAccount = bankAccounts[i % bankAccounts.length] // Cycle through bank accounts
|
||||
// @ts-ignore
|
||||
inventoryBankAccounts.push({
|
||||
inventoryId: inventory.id,
|
||||
bankAccountId: bankAccount.id,
|
||||
})
|
||||
}
|
||||
await prisma.inventoryBankAccount.createMany({
|
||||
data: inventoryBankAccounts,
|
||||
})
|
||||
}
|
||||
}
|
||||
if ((await prisma.posAccount.count()) === 0) {
|
||||
const inventories = await prisma.inventory.findMany({
|
||||
where: { isPointOfSale: true },
|
||||
})
|
||||
const inventoryBankAccounts = await prisma.inventoryBankAccount.findMany()
|
||||
const posAccounts = []
|
||||
for (let i = 0; i < inventories.length; i++) {
|
||||
const inventory = inventories[i]
|
||||
// Find a bank account assigned to this inventory
|
||||
const inventoryBankAccount = inventoryBankAccounts.find(
|
||||
iba => iba.inventoryId === inventory.id,
|
||||
)
|
||||
if (inventoryBankAccount) {
|
||||
// @ts-ignore
|
||||
|
||||
// if ((await prisma.inventoryBankAccount.count()) === 0) {
|
||||
// const inventories = await prisma.inventory.findMany()
|
||||
// const bankAccounts = await prisma.bankAccount.findMany()
|
||||
|
||||
// // Assign bank accounts to inventories
|
||||
// const inventoryBankAccounts = []
|
||||
// for (let i = 0; i < inventories.length; i++) {
|
||||
// const inventory = inventories[i]
|
||||
// const bankAccount = bankAccounts[i % bankAccounts.length] // Cycle through bank accounts
|
||||
// inventoryBankAccounts.push({
|
||||
// inventoryId: inventory.id,
|
||||
// bankAccountId: bankAccount.id,
|
||||
// })
|
||||
// }
|
||||
|
||||
// await prisma.inventoryBankAccount.createMany({
|
||||
// data: inventoryBankAccounts,
|
||||
// })
|
||||
// }
|
||||
|
||||
// if ((await prisma.posAccount.count()) === 0) {
|
||||
// const inventories = await prisma.inventory.findMany({
|
||||
// where: { isPointOfSale: true },
|
||||
// })
|
||||
// const inventoryBankAccounts = await prisma.inventoryBankAccount.findMany()
|
||||
|
||||
// const posAccounts = []
|
||||
// for (let i = 0; i < inventories.length; i++) {
|
||||
// const inventory = inventories[i]
|
||||
// // Find a bank account assigned to this inventory
|
||||
// const inventoryBankAccount = inventoryBankAccounts.find(
|
||||
// iba => iba.inventoryId === inventory.id,
|
||||
// )
|
||||
// if (inventoryBankAccount) {
|
||||
// posAccounts.push({
|
||||
// name: `پوز ${inventory.name}`,
|
||||
// code: `POS${(i + 1).toString().padStart(3, '0')}`,
|
||||
// description: `پوز فروشگاه ${inventory.name}`,
|
||||
// inventoryId: inventory.id,
|
||||
// bankAccountId: inventoryBankAccount.bankAccountId,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
// await prisma.posAccount.createMany({
|
||||
// data: posAccounts,
|
||||
// })
|
||||
// }
|
||||
|
||||
posAccounts.push({
|
||||
name: `پوز ${inventory.name}`,
|
||||
code: `POS${(i + 1).toString().padStart(3, '0')}`,
|
||||
description: `پوز فروشگاه ${inventory.name}`,
|
||||
inventoryId: inventory.id,
|
||||
bankAccountId: inventoryBankAccount.bankAccountId,
|
||||
})
|
||||
}
|
||||
}
|
||||
await prisma.posAccount.createMany({
|
||||
data: posAccounts,
|
||||
})
|
||||
}
|
||||
// Seed purchase, transfer, and sales transactions
|
||||
// const inventories = await prisma.inventory.findMany()
|
||||
// const products = await prisma.product.findMany({ take: 5 }) // select 5 products for demo
|
||||
@@ -343,7 +331,7 @@ async function main() {
|
||||
// items: products.map(product => ({
|
||||
// productId: product.id,
|
||||
// count: 10,
|
||||
// fee: Number(product.salePrice),
|
||||
// unitPrice: Number(product.salePrice),
|
||||
// total: 10 * Number(product.salePrice),
|
||||
// })),
|
||||
// })
|
||||
|
||||
Reference in New Issue
Block a user