*/ public function template(): array { return [ ['gl_code' => '1', 'name' => 'دارایی‌ها', 'account_primary_type' => 'asset', 'children' => [ ['gl_code' => '11', 'name' => 'دارایی‌های جاری', 'account_primary_type' => 'asset', 'children' => [ ['gl_code' => '1101', 'name' => 'صندوق', 'account_primary_type' => 'asset'], ['gl_code' => '1102', 'name' => 'بانک', 'account_primary_type' => 'asset'], ['gl_code' => '1103', 'name' => 'حساب‌های دریافتنی', 'account_primary_type' => 'asset'], ['gl_code' => '1104', 'name' => 'اسناد دریافتنی', 'account_primary_type' => 'asset'], ['gl_code' => '1105', 'name' => 'موجودی کالا', 'account_primary_type' => 'asset'], ]], ['gl_code' => '12', 'name' => 'دارایی‌های غیرجاری', 'account_primary_type' => 'asset', 'children' => [ ['gl_code' => '1201', 'name' => 'دارایی ثابت', 'account_primary_type' => 'asset'], ['gl_code' => '1202', 'name' => 'استهلاک انباشته', 'account_primary_type' => 'asset'], ]], ]], ['gl_code' => '2', 'name' => 'بدهی‌ها', 'account_primary_type' => 'liability', 'children' => [ ['gl_code' => '21', 'name' => 'بدهی‌های جاری', 'account_primary_type' => 'liability', 'children' => [ ['gl_code' => '2101', 'name' => 'حساب‌های پرداختنی', 'account_primary_type' => 'liability'], ['gl_code' => '2102', 'name' => 'اسناد پرداختنی', 'account_primary_type' => 'liability'], ['gl_code' => '2103', 'name' => 'مالیات پرداختنی', 'account_primary_type' => 'liability'], ['gl_code' => '2104', 'name' => 'وام‌های کوتاه‌مدت', 'account_primary_type' => 'liability'], ]], ]], ['gl_code' => '3', 'name' => 'حقوق صاحبان سهام', 'account_primary_type' => 'equity', 'children' => [ ['gl_code' => '31', 'name' => 'سرمایه', 'account_primary_type' => 'equity'], ['gl_code' => '32', 'name' => 'سود (زیان) انباشته', 'account_primary_type' => 'equity'], ]], ['gl_code' => '4', 'name' => 'درآمدها', 'account_primary_type' => 'income', 'children' => [ ['gl_code' => '41', 'name' => 'فروش کالا و خدمات', 'account_primary_type' => 'income'], ['gl_code' => '42', 'name' => 'درآمد متفرقه', 'account_primary_type' => 'income'], ]], ['gl_code' => '5', 'name' => 'هزینه‌ها', 'account_primary_type' => 'expenses', 'children' => [ ['gl_code' => '51', 'name' => 'بهای تمام‌شده کالای فروش‌رفته', 'account_primary_type' => 'expenses'], ['gl_code' => '52', 'name' => 'هزینه‌های اداری و عمومی', 'account_primary_type' => 'expenses'], ['gl_code' => '53', 'name' => 'هزینه حقوق و دستمزد', 'account_primary_type' => 'expenses'], ['gl_code' => '54', 'name' => 'هزینه استهلاک', 'account_primary_type' => 'expenses'], ]], ]; } public function seed(int $businessId, int $userId, bool $skipExisting = true): int { $created = 0; DB::transaction(function () use ($businessId, $userId, $skipExisting, &$created) { foreach ($this->template() as $node) { $created += $this->createNode($businessId, $userId, $node, null, $skipExisting); } }); return $created; } protected function createNode(int $businessId, int $userId, array $node, ?int $parentId, bool $skipExisting): int { $created = 0; if ($skipExisting && AccountingAccount::where('business_id', $businessId)->where('gl_code', $node['gl_code'])->exists()) { $accountId = AccountingAccount::where('business_id', $businessId)->where('gl_code', $node['gl_code'])->value('id'); } else { $account = AccountingAccount::create([ 'name' => $node['name'], 'gl_code' => $node['gl_code'], 'business_id' => $businessId, 'account_primary_type' => $node['account_primary_type'], 'parent_account_id' => $parentId, 'status' => 'active', 'created_by' => $userId, ]); $accountId = $account->id; $created++; } foreach ($node['children'] ?? [] as $child) { $created += $this->createNode($businessId, $userId, $child, $accountId, $skipExisting); } return $created; } }