import { PasswordUtil } from '@/common/utils/password.util' import { generateTrackingCode } from '@/common/utils/tracking-code-generator.util' import { GoodPricingModel, POSType, UnitType } from '@/generated/prisma/enums' import { GoodCreateInput, GoodCreateManyInput } from '@/generated/prisma/models' import { prisma } from '../src/lib/prisma' async function main() { const password = await PasswordUtil.hash('123456') const adminUser = await prisma.admin.upsert({ where: { mobile_number: '09120258156', }, update: {}, create: { first_name: 'عباس', last_name: 'حسنی', national_code: '0016022289', mobile_number: '09120258156', adminAccounts: { create: { account: { create: { username: 'superAdmin', password, type: 'ADMIN', status: 'ACTIVE', }, }, }, }, }, }) // ****************** GUILD Start ****************** // const guilds = await prisma.guild.findMany() if (!guilds.length) { await prisma.guild.createMany({ data: [ { name: 'طلا', code: 'Gold', }, { name: 'میوه و تره‌بار', code: 'Fruit', }, ], }) } // ****************** GUILD Good Categories Start ****************** // const goldGuild = await prisma.guild.findFirst({ where: { name: 'طلا', }, }) const goldGuildId = goldGuild?.id const goldGuildGoodCategories = await prisma.goodCategory.findMany({ where: { guild_id: goldGuildId, is_default_guild_good: true, }, }) if (!goldGuildGoodCategories?.length) { const categoryFactory = (name: string) => ({ name, guild_id: goldGuildId, is_default_guild_good: true, }) await prisma.goodCategory.createMany({ data: [ categoryFactory('زیورآلات'), categoryFactory('طلا'), categoryFactory('سایر'), categoryFactory('سکه'), categoryFactory('شمش'), categoryFactory('شمش'), ], }) } // ****************** GUILD Good Start ****************** // const goodFactory = ( name: string, categoryId: string, pricingModel: GoodPricingModel, unitType: UnitType, ): GoodCreateManyInput => ({ name, category_id: categoryId, pricing_model: pricingModel, sku: '', unit_type: unitType, is_default_guild_good: true, }) const zivarCategory = await prisma.goodCategory.findFirst({ where: { name: 'زیورآلات', }, }) if (zivarCategory) { const zivarGoods = await prisma.good.count({ where: { category_id: zivarCategory?.id, }, }) if (!zivarGoods) { const goodItems: GoodCreateManyInput[] = [] goodItems.push( ...[ goodFactory( 'آویز گردنبند طلا', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM, ), goodFactory('النگو', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), goodFactory('انگشتر', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), goodFactory('دست‌بند', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), goodFactory('زنجیر', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), goodFactory('سرویس', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), goodFactory('گوشواره', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM), ], ) await prisma.good.createMany({ data: goodItems }) } } const goldCategory = await prisma.goodCategory.findFirst({ where: { name: 'طلا', }, }) if (goldCategory) { const goldGoods = await prisma.good.count({ where: { category_id: goldCategory?.id, }, }) if (!goldGoods) { const goodItems: GoodCreateInput[] = [] goodItems.push( ...[ goodFactory( 'طلای آب شده', goldCategory.id, GoodPricingModel.GOLD, UnitType.GRAM, ), goodFactory( 'طلای شکسته', goldCategory.id, GoodPricingModel.GOLD, UnitType.GRAM, ), goodFactory( 'طلای مستعمل', goldCategory.id, GoodPricingModel.GOLD, UnitType.GRAM, ), ], ) await prisma.good.createMany({ data: goodItems }) } } const coinCategory = await prisma.goodCategory.findFirst({ where: { name: 'سکه', }, }) if (coinCategory) { const coinGoods = await prisma.good.count({ where: { category_id: coinCategory?.id, }, }) if (!coinGoods) { const goodItems: GoodCreateInput[] = [] goodItems.push( ...[ goodFactory( 'مسکوکات خارجی', coinCategory.id, GoodPricingModel.STANDARD, UnitType.COUNT, ), goodFactory( 'مسکوکات داخلی (پارسیان)', coinCategory.id, GoodPricingModel.STANDARD, UnitType.COUNT, ), goodFactory( 'تمام بهار آزادی (طرح جدید)', coinCategory.id, GoodPricingModel.STANDARD, UnitType.COUNT, ), goodFactory( 'تمام بهار آزادی (طرح قدیم)', coinCategory.id, GoodPricingModel.STANDARD, UnitType.COUNT, ), ], ) await prisma.good.createMany({ data: goodItems }) } } const shemshCategory = await prisma.goodCategory.findFirst({ where: { name: 'شمش', }, }) if (shemshCategory) { const shemshGoods = await prisma.good.count({ where: { category_id: shemshCategory?.id, }, }) if (!shemshGoods) { await prisma.good.create({ data: goodFactory( 'شمش استاندارد', shemshCategory.id, GoodPricingModel.GOLD, UnitType.GRAM, ), }) } } // ****************** partner Start ****************** // let partner = await prisma.partner.findFirst() let license = await prisma.license.findFirst() if (!partner) { partner = await prisma.partner.create({ data: { name: 'تیس', code: 'TIS', status: 'ACTIVE', partner_accounts: { create: { role: 'OWNER', account: { create: { username: 'tis', password: await PasswordUtil.hash('123456'), status: 'ACTIVE', type: 'PARTNER', }, }, }, }, }, }) } if (partner && !license) { await prisma.$transaction(async tx => { const startOfToday = new Date() startOfToday.setHours(0, 0, 0, 0) const month = startOfToday.getMonth() let year = startOfToday.getFullYear() let expMonth = month + 3 if (expMonth > 11) { expMonth = expMonth - 11 year = year + 1 } startOfToday.setFullYear(year) startOfToday.setMonth(expMonth) const transaction = await tx.licenseChargeTransaction.create({ data: { activation_expires_at: startOfToday, purchased_count: 1, tracking_code: generateTrackingCode('LIC', 6), partner: { connect: { id: partner.id, }, }, }, select: { id: true, }, }) if (transaction) license = await tx.license.create({ data: { charge_transaction: { connect: { id: transaction.id, }, }, }, }) }) } // ****************** BA Start ****************** // const ba = await prisma.businessActivity.count() if (!ba && license) { const startOfToday = new Date() startOfToday.setHours(0, 0, 0, 0) let year = startOfToday.getFullYear() let expYear = year + 1 // if (expMonth > 11) { // expMonth = expMonth - 11 // year = year + 1 // } startOfToday.setFullYear(expYear) await prisma.businessActivity.create({ data: { name: 'طلا فروشی', economic_code: '0111111111', license_activation: { create: { expires_at: startOfToday, starts_at: new Date(), license: { connect: { id: license.id, }, }, }, }, consumer: { create: { first_name: 'محمد', last_name: 'زرگر', mobile_number: '09120258155', national_code: '1234567890', consumer_accounts: { create: { role: 'OWNER', account: { create: { username: 'zargar', password: await PasswordUtil.hash('123456'), status: 'ACTIVE', type: 'CONSUMER', }, }, }, }, partner: { connect: { id: partner.id, }, }, }, }, guild: { connect: { id: guilds[0].id, }, }, complexes: { create: { name: 'فروشگاه طلای مرکزی', address: 'تهران، خیابان جمهوری', branch_code: '12332', pos_list: { create: { name: 'لاین ۱', pos_type: POSType.WEB, serial: '12312312', status: 'ACTIVE', }, }, }, }, }, }) } // ****************** BA Start ****************** // // ****************** provider Start ****************** // const provider = await prisma.provider.count() if (!provider) { await prisma.provider.create({ data: { name: 'توسن', code: 'Tosan', status: 'ACTIVE', provider_accounts: { create: { role: 'OWNER', account: { create: { username: 'tosan', password: await PasswordUtil.hash('123456'), status: 'ACTIVE', type: 'PROVIDER', }, }, }, }, }, }) } } main() .then(async () => { await prisma.$disconnect() }) .catch(async e => { console.error(e) await prisma.$disconnect() process.exit(1) })