import { prisma } from '../src/lib/prisma' async function main() { if ((await prisma.role.count()) === 0) { await prisma.role.upsert({ where: { id: 0, name: 'Admin' }, update: {}, create: { name: 'Admin', }, }) } if ((await prisma.user.count()) === 0) { const adminRole = await prisma.role.findUnique({ where: { name: 'Admin' } }) if (!adminRole) { return } await prisma.user.upsert({ where: { id: 1, firstName: 'عباس', lastName: 'حسنی' }, update: {}, create: { firstName: 'عباس', lastName: 'حسنی', roleId: adminRole.id, mobileNumber: '09120258156', password: '12345678', }, }) } if ((await prisma.inventory.count()) === 0) { await prisma.inventory.createMany({ data: [ { name: 'انبار مرکزی', location: 'تهران', isPointOfSale: false, isActive: true }, { name: 'فروشگاه حضوری', location: 'مرکز شهر', isPointOfSale: true, isActive: true, }, { name: 'فروشگاه اینترنتی', location: 'مرکز شهر', isPointOfSale: true, isActive: true, }, ], }) } 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) => ({ firstName: 'تامین‌', lastName: `کننده ${i + 1}`, mobileNumber: `0912000000${i + 1}`, email: `supplier${i + 1}@example.com`, })), }) } if ((await prisma.customer.count()) === 0) { await prisma.customer.createMany({ data: Array.from({ length: 5 }, (_, i) => ({ firstName: 'مشتری', lastName: `${i + 1}`, mobileNumber: `0913000000${i + 1}`, email: `customer${i + 1}@example.com`, })), }) } 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: 20 }, (_, i) => ({ name: `کالای ${i + 1}`, sku: `SKU-${1000 + i + 1}`, salePrice: parseInt((Math.random() * (100 - 10) + 10).toString()) * 10000, categoryId: categories[i % categories.length].id, brandId: brands[i % brands.length].id, })), }) } if ((await prisma.bank.count()) === 0) { await prisma.bank.createMany({ data: [ { name: 'آینده', shortName: 'ain', }, { name: 'ایران زمین', shortName: 'irz', }, { name: 'اقتصاد نوین', shortName: 'eqn', }, { name: 'انصار', shortName: 'ans', }, { name: 'پاسارگاد', shortName: 'pas', }, { name: 'پارسیان', shortName: 'prs', }, { name: 'پست‌ بانک ایران', shortName: 'pbi', }, { name: 'تجارت', shortName: 'tej', }, { name: 'توسعه تعاون', shortName: 'tav', }, { name: 'توسعه صادرات', shortName: 'tes', }, { name: 'حکمت ایرانیان', shortName: 'hek', }, { name: 'رفاه کارگران', shortName: 'ref', }, { name: 'قرض‌الحسنه رسالت', shortName: 'res', }, { name: 'قرض‌الحسنه مهر ایران', shortName: 'meh', }, { name: 'قوامین', shortName: 'qva', }, { name: 'کشاورزی', shortName: 'kes', }, { name: 'کوثر', shortName: 'kos', }, { name: 'دی', shortName: 'diy', }, { name: 'صنعت و معدن', shortName: 'san', }, { name: 'سینا', shortName: 'sin', }, { name: 'سرمایه', shortName: 'sar', }, { name: 'سپه', shortName: 'sep', }, { name: 'شهر', shortName: 'shr', }, { name: 'صادرات ایران', shortName: 'sir', }, { name: 'سامان', shortName: 'sam', }, { name: 'مرکزی', shortName: 'mar', }, { name: 'مسکن', shortName: 'mas', }, { name: 'ملت', shortName: 'mel', }, { name: 'ملی ایران', shortName: 'mli', }, { name: 'مهر اقتصاد', shortName: 'meg', }, { name: 'کارآفرین', shortName: 'kar', }, { name: 'تات', shortName: 'tat', }, ], }) } if ((await prisma.bankBranch.count()) === 0) { await prisma.bankBranch.createMany({ data: [ { bankId: 1, name: 'شعبه مرکزی', code: '001', }, { bankId: 2, name: 'شعبه مرکزی', code: '002', }, { bankId: 1, name: 'شعبه ونک', code: '003', }, ], }) } if ((await prisma.bankAccount.count()) === 0) { await prisma.bankAccount.createMany({ data: [ { branchId: 1, accountNumber: '1234567890', name: 'حساب اصلی آینده', iban: 'IR000123456789012345678901', }, { branchId: 2, accountNumber: '0987654321', name: 'حساب اصلی ایران زمین', iban: 'IR000987654321098765432109', }, { branchId: 3, accountNumber: '1122334455', name: 'حساب ونک آینده', iban: 'IR000112233445566778899001', }, ], }) } 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 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 // const supplier = await prisma.supplier.findFirst() // const customers = await prisma.customer.findMany({ take: 2 }) // if (supplier && customers.length > 0) { // PurchaseReceiptsService.prototype.create({ // code: '123123', // inventoryId: inventories[0].id, // supplierId: supplier.id, // paidAmount: 0, // totalAmount: products.reduce((acc, a) => (acc += Number(a.salePrice) * 10), 0), // items: products.map(product => ({ // productId: product.id, // count: 10, // unitPrice: Number(product.salePrice), // total: 10 * Number(product.salePrice), // })), // }) // } } main() .then(async () => { await prisma.$disconnect() }) .catch(async e => { console.error(e) await prisma.$disconnect() process.exit(1) })