141 lines
6.2 KiB
PHP
141 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Workdo\DoubleEntry\Entities\JournalEntry;
|
|
use Workdo\DoubleEntry\Entities\JournalItem;
|
|
use Workdo\Account\Models\ChartOfAccount;
|
|
use Carbon\Carbon;
|
|
|
|
class DemoDoubleEntrySeeder extends Seeder
|
|
{
|
|
public function run(DemoContext $ctx): void
|
|
{
|
|
if (JournalEntry::where('created_by', $ctx->userId)->exists()) {
|
|
return;
|
|
}
|
|
|
|
// Get chart of accounts by type
|
|
$accounts = ChartOfAccount::where('created_by', $ctx->userId)
|
|
->where('is_active', true)->get();
|
|
|
|
if ($accounts->isEmpty()) return;
|
|
|
|
$accountIds = $accounts->pluck('id')->toArray();
|
|
|
|
// Use first few accounts for different categories
|
|
// We'll use sequential IDs since CoA structure varies
|
|
$getAccountId = fn(int $offset) => $accountIds[$offset % count($accountIds)];
|
|
|
|
$journals = [
|
|
[
|
|
'days_ago' => 150,
|
|
'reference' => 'SI-REVENUE',
|
|
'description' => 'Sales Revenue Recognition - Invoice batch Q3',
|
|
'entries' => [
|
|
['account_offset' => 0, 'debit' => 125000, 'credit' => 0, 'desc' => 'Accounts Receivable'],
|
|
['account_offset' => 1, 'debit' => 0, 'credit' => 111607.14, 'desc' => 'Sales Revenue'],
|
|
['account_offset' => 2, 'debit' => 0, 'credit' => 13392.86, 'desc' => 'VAT Output'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 130,
|
|
'reference' => 'PI-EXPENSE',
|
|
'description' => 'Purchase Expense Recording - Vendor batch Q3',
|
|
'entries' => [
|
|
['account_offset' => 3, 'debit' => 85000, 'credit' => 0, 'desc' => 'Inventory / Purchases'],
|
|
['account_offset' => 4, 'debit' => 10200, 'credit' => 0, 'desc' => 'VAT Input'],
|
|
['account_offset' => 5, 'debit' => 0, 'credit' => 95200, 'desc' => 'Accounts Payable'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 110,
|
|
'reference' => 'PMT-RECEIVED',
|
|
'description' => 'Customer Payment Received - Sarah Johnson',
|
|
'entries' => [
|
|
['account_offset' => 6, 'debit' => 45000, 'credit' => 0, 'desc' => 'Cash / Bank'],
|
|
['account_offset' => 0, 'debit' => 0, 'credit' => 45000, 'desc' => 'Accounts Receivable'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 90,
|
|
'reference' => 'PMT-MADE',
|
|
'description' => 'Vendor Payment Made - Tech Solutions Inc',
|
|
'entries' => [
|
|
['account_offset' => 5, 'debit' => 35000, 'credit' => 0, 'desc' => 'Accounts Payable'],
|
|
['account_offset' => 6, 'debit' => 0, 'credit' => 35000, 'desc' => 'Cash / Bank'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 70,
|
|
'reference' => 'PAYROLL',
|
|
'description' => 'Payroll Processing - Monthly salary February',
|
|
'entries' => [
|
|
['account_offset' => 7, 'debit' => 180000, 'credit' => 0, 'desc' => 'Salary Expense'],
|
|
['account_offset' => 8, 'debit' => 0, 'credit' => 15000, 'desc' => 'SSS Payable'],
|
|
['account_offset' => 9, 'debit' => 0, 'credit' => 8000, 'desc' => 'PhilHealth Payable'],
|
|
['account_offset' => 6, 'debit' => 0, 'credit' => 157000, 'desc' => 'Cash / Bank'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 45,
|
|
'reference' => 'SI-REVENUE-Q4',
|
|
'description' => 'Sales Revenue Recognition - Invoice batch Q4',
|
|
'entries' => [
|
|
['account_offset' => 0, 'debit' => 200000, 'credit' => 0, 'desc' => 'Accounts Receivable'],
|
|
['account_offset' => 1, 'debit' => 0, 'credit' => 178571.43, 'desc' => 'Sales Revenue'],
|
|
['account_offset' => 2, 'debit' => 0, 'credit' => 21428.57, 'desc' => 'VAT Output'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 20,
|
|
'reference' => 'SR-RETURN',
|
|
'description' => 'Sales Return - Credit Note applied for defective goods',
|
|
'entries' => [
|
|
['account_offset' => 1, 'debit' => 15000, 'credit' => 0, 'desc' => 'Sales Returns & Allowances'],
|
|
['account_offset' => 0, 'debit' => 0, 'credit' => 15000, 'desc' => 'Accounts Receivable'],
|
|
],
|
|
],
|
|
[
|
|
'days_ago' => 5,
|
|
'reference' => 'UTILITIES',
|
|
'description' => 'Monthly Office Utilities - Electricity, Water, Internet',
|
|
'entries' => [
|
|
['account_offset' => 10 % count($accountIds), 'debit' => 12500, 'credit' => 0, 'desc' => 'Utilities Expense'],
|
|
['account_offset' => 6, 'debit' => 0, 'credit' => 12500, 'desc' => 'Cash / Bank'],
|
|
],
|
|
],
|
|
];
|
|
|
|
foreach ($journals as $index => $journal) {
|
|
$date = Carbon::now()->subDays($journal['days_ago']);
|
|
|
|
$entry = JournalEntry::create([
|
|
'date' => $date->toDateString(),
|
|
'reference' => $journal['reference'],
|
|
'description' => $journal['description'],
|
|
'journal_id' => $index + 1,
|
|
'workspace' => $ctx->userId,
|
|
'created_by' => $ctx->userId,
|
|
'created_at' => $date,
|
|
'updated_at' => $date,
|
|
]);
|
|
|
|
foreach ($journal['entries'] as $item) {
|
|
JournalItem::create([
|
|
'journal' => $entry->id,
|
|
'account' => $getAccountId($item['account_offset']),
|
|
'description' => $item['desc'],
|
|
'debit' => $item['debit'],
|
|
'credit' => $item['credit'],
|
|
'workspace' => $ctx->userId,
|
|
'created_by' => $ctx->userId,
|
|
'created_at' => $date,
|
|
'updated_at' => $date,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|