From b7a880d66a4e7c6a2cb504471fcc5111923a963c Mon Sep 17 00:00:00 2001 From: Daniel Stock Date: Thu, 4 Dec 2025 22:37:16 +0100 Subject: [PATCH] Various fixes for DB seeding --- README.md | 18 ++++--- app/Http/Controllers/CustomerController.php | 2 +- app/Providers/EventServiceProvider.php | 10 ++-- database/factories/ContactFactory.php | 48 +++++++++++-------- database/factories/LineItemFactory.php | 4 +- ...9_17_000001_create_payment_terms_table.php | 28 ----------- .../2025_11_21_081606_create_notes_table.php | 2 - .../2025_11_25_153801_create_units_table.php | 8 ---- database/seeders/DatabaseSeeder.php | 4 +- database/seeders/PaymentTermsSeeder.php | 3 +- database/seeders/UnitSeeder.php | 17 +++++++ package-lock.json | 2 +- 12 files changed, 71 insertions(+), 75 deletions(-) create mode 100644 database/seeders/UnitSeeder.php diff --git a/README.md b/README.md index d4e3547..6476cdd 100644 --- a/README.md +++ b/README.md @@ -40,28 +40,32 @@ ### Prerequisites ### Steps 1. Clone the repository: ```bash - git lfs clone https://code.tooloop.de/Tooloop/Caramel-CRM.git + git clone http://code.tooloop.de/Tooloop/Caramel-CRM.git cd Caramel-CRM - ```` -2. Install dependencies: + ``` +2. Create empty database: + ```bash + touch database/database.sqlite + ``` +3. Install dependencies: ```bash composer install npm install ``` -3. Set up the environment: +4. Set up the environment: ```bash cp .env.example .env php artisan key\:generate ``` -4. Run migrations and seeders: +5. Run migrations and seeders: ```bash php artisan migrate --seed ``` -5. Build frontend assets: +6. Build frontend assets: ```bash npm run dev ``` -6. Start the development server: +7. Start the development server: ```bash php artisan serve ``` diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index a91b9c7..c9aead4 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -56,7 +56,7 @@ public static function generateCustomerNumber() // DATEV standard $randomNumber = rand(10000, 69999); $customer = Customer::firstWhere('customer_nr', $randomNumber); - if ($customer) { + if ($customer || Customer::count() === 0) { return $randomNumber; } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index a60433f..f223e48 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -3,9 +3,9 @@ namespace App\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Schedule; use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\Schema; use Illuminate\Routing\Events\RouteMatched; use App\Models\Setting; use App\Listeners\ScheduleListener; @@ -22,9 +22,11 @@ public function boot(): void { parent::boot(); - $method = Setting::where('key', 'app.schedule_method')->value('value') ?? 'internal'; - if ($method === 'internal') { - Event::listen(RouteMatched::class, [ScheduleListener::class, 'handle']); + if (Schema::hasTable('settings')) { + $method = Setting::where('key', 'app.schedule_method')->value('value') ?? 'internal'; + if ($method === 'internal') { + Event::listen(RouteMatched::class, [ScheduleListener::class, 'handle']); + } } // TODO: read where to put these diff --git a/database/factories/ContactFactory.php b/database/factories/ContactFactory.php index 4f3455f..90536a2 100644 --- a/database/factories/ContactFactory.php +++ b/database/factories/ContactFactory.php @@ -26,7 +26,31 @@ public function definition() $hasMatrix = rand(0, 9) >= 7; $hasGithub = rand(0, 9) >= 7; - $contact = [ + $onlineAccounts = []; + + if ($hasLinkedIn) { + $onlineAccounts[] = [ + 'platform' => 'linkedin', + 'user_name' => $userName, + 'url' => 'https://www.linkedin.com/in/' . $userName + ]; + } + if ($hasMatrix) { + $onlineAccounts[] = [ + 'platform' => 'matrix', + 'user_name' => $userName, + 'url' => '@' . $userName . ':matrix.org' + ]; + } + if ($hasGithub) { + $onlineAccounts[] = [ + 'platform' => 'github', + 'user_name' => $userName, + 'url' => 'https://www.github.com/' . $userName + ]; + } + + return [ 'is_primary' => $this->faker->boolean(30), 'salutation' => $this->faker->title($gender), 'first_name' => $this->faker->firstName($gender), @@ -36,25 +60,7 @@ public function definition() 'phone' => $this->faker->phoneNumber(), 'mobile_phone' => $this->faker->phoneNumber(), 'avatar' => $avatar, - 'online_accounts' => [] + 'online_accounts' => $onlineAccounts ]; - - if ($hasLinkedIn) $contact[] = [ - 'platform' => 'linkedin', - 'user_name' => $userName, - 'url' => 'https://www.linkedin.com/in/' . $userName - ]; - if ($hasMatrix) $contact[] = [ - 'platform' => 'matrix', - 'user_name' => $userName, - 'url' => '@' . $userName . ':matrix.org' - ]; - if ($hasGithub) $contact[] = [ - 'platform' => 'github', - 'user_name' => $userName, - 'url' => 'https://www.github.com/' . $userName - ]; - - return $contact; } -} +} \ No newline at end of file diff --git a/database/factories/LineItemFactory.php b/database/factories/LineItemFactory.php index c2cd1ff..63ee9d2 100644 --- a/database/factories/LineItemFactory.php +++ b/database/factories/LineItemFactory.php @@ -11,13 +11,15 @@ public function definition(): array { $isSection = rand(0, 10) > 7; + $unit = Unit::where('name', $this->faker->randomElement(['Stück', 'Stunden', 'Tage', 'pauschal']))->first(); + return [ 'position' => $this->faker->numberBetween(1, 10) + ($isSection ? 0.5 : 0), 'is_section' => $isSection, 'title' => $this->faker->words(3, true), 'description' => $this->faker->sentence(), 'quantity' => $this->faker->numberBetween(1, 10), - 'unit_id' => Unit::factory(), + 'unit_id' => $unit ? $unit->id : null, 'price' => $this->faker->randomFloat(2, 10, 500), ]; } diff --git a/database/migrations/2025_09_17_000001_create_payment_terms_table.php b/database/migrations/2025_09_17_000001_create_payment_terms_table.php index 8f56533..d01e39c 100644 --- a/database/migrations/2025_09_17_000001_create_payment_terms_table.php +++ b/database/migrations/2025_09_17_000001_create_payment_terms_table.php @@ -15,34 +15,6 @@ public function up() $table->integer('days')->nullable(); $table->timestamps(); }); - - // Fügen Sie Standard-Zahlungsziele hinzu - DB::table('payment_terms')->insert([ - [ - 'name' => 'prepaid', - 'description' => 'Vorkasse', - 'is_fixed' => true, - 'days' => null, - 'created_at' => now(), - 'updated_at' => now() - ], - [ - 'name' => 'onReceipt', - 'description' => 'Bei Rechnungserhalt', - 'is_fixed' => true, - 'days' => null, - 'created_at' => now(), - 'updated_at' => now() - ], - [ - 'name' => 'daysAfterInvoice', - 'description' => 'Zahlungsziel in Tagen', - 'is_fixed' => false, - 'days' => 14, - 'created_at' => now(), - 'updated_at' => now() - ] - ]); } public function down() diff --git a/database/migrations/2025_11_21_081606_create_notes_table.php b/database/migrations/2025_11_21_081606_create_notes_table.php index e363873..6564028 100644 --- a/database/migrations/2025_11_21_081606_create_notes_table.php +++ b/database/migrations/2025_11_21_081606_create_notes_table.php @@ -15,8 +15,6 @@ public function up(): void $table->id(); $table->foreignId('user_id')->constrained()->nullOnDelete(); $table->text('text'); - - // Polymorphische Beziehung $table->unsignedBigInteger('notable_id'); $table->string('notable_type'); diff --git a/database/migrations/2025_11_25_153801_create_units_table.php b/database/migrations/2025_11_25_153801_create_units_table.php index 2c7f0c9..25a7a69 100644 --- a/database/migrations/2025_11_25_153801_create_units_table.php +++ b/database/migrations/2025_11_25_153801_create_units_table.php @@ -15,14 +15,6 @@ public function up(): void $table->string('symbol', 10)->nullable(); $table->timestamps(); }); - - // Füge Standard-Einheiten hinzu - DB::table('units')->insert([ - ['name' => 'Stück', 'symbol' => 'Stk'], - ['name' => 'Stunden', 'symbol' => 'h'], - ['name' => 'Tage', 'symbol' => 'd'], - ['name' => 'pauschal', 'symbol' => 'p'], - ]); } public function down(): void diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2a191f4..b3a6fbe 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -21,6 +21,7 @@ public function run(): void PaymentTermsSeeder::class, SettingsTableSeeder::class, TodoTypeSeeder::class, + UnitSeeder::class, ]); $user = User::factory()->create([ @@ -46,7 +47,8 @@ public function run(): void // Create some notes for each customer Note::factory(rand(0, 5))->create([ 'user_id' => $user->id, - 'customer_id' => $customer->id, + 'notable_id' => $customer->id, + 'notable_type' => Customer::class, ]); }); diff --git a/database/seeders/PaymentTermsSeeder.php b/database/seeders/PaymentTermsSeeder.php index 49d3dd4..6190583 100644 --- a/database/seeders/PaymentTermsSeeder.php +++ b/database/seeders/PaymentTermsSeeder.php @@ -15,9 +15,10 @@ public function run(): void 'is_fixed' => true, 'days' => null ]); - + PaymentTerms::create([ 'name' => 'onReceipt', + 'description' => 'Bei Rechnungserhalt', 'is_fixed' => true, 'days' => null ]); diff --git a/database/seeders/UnitSeeder.php b/database/seeders/UnitSeeder.php new file mode 100644 index 0000000..94ae58b --- /dev/null +++ b/database/seeders/UnitSeeder.php @@ -0,0 +1,17 @@ + 'Stück', 'symbol' => 'Stk']); + Unit::create(['name' => 'Stunden', 'symbol' => 'h']); + Unit::create(['name' => 'Tage', 'symbol' => 'd']); + Unit::create(['name' => 'pauschal', 'symbol' => 'p']); + } +} diff --git a/package-lock.json b/package-lock.json index 8e071b3..138b3cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "Software", + "name": "Caramel-CRM", "lockfileVersion": 3, "requires": true, "packages": {