From 18a0d14fa89e18ffd0558281b81cf180f103a70f Mon Sep 17 00:00:00 2001 From: ncoronel Date: Mon, 14 Sep 2026 14:13:39 -0300 Subject: [PATCH] feat(event): add date reschedule history --- app/Domains/Event/Models/EventDate.php | 12 ++++ .../Event/Models/EventDateReschedule.php | 58 +++++++++++++++++++ ...00_create_event_date_reschedules_table.php | 34 +++++++++++ 3 files changed, 104 insertions(+) create mode 100644 app/Domains/Event/Models/EventDateReschedule.php create mode 100644 database/migrations/2026_09_14_020000_create_event_date_reschedules_table.php diff --git a/app/Domains/Event/Models/EventDate.php b/app/Domains/Event/Models/EventDate.php index 2dc3309..6833987 100644 --- a/app/Domains/Event/Models/EventDate.php +++ b/app/Domains/Event/Models/EventDate.php @@ -86,6 +86,18 @@ class EventDate extends Model return $this->hasMany(self::class, 'rescheduled_to_event_date_id'); } + /** @return HasMany */ + public function rescheduleHistory(): HasMany + { + return $this->hasMany(EventDateReschedule::class, 'source_event_date_id'); + } + + /** @return HasMany */ + public function destinationRescheduleHistory(): HasMany + { + return $this->hasMany(EventDateReschedule::class, 'destination_event_date_id'); + } + /** @return HasMany */ public function variants(): HasMany { diff --git a/app/Domains/Event/Models/EventDateReschedule.php b/app/Domains/Event/Models/EventDateReschedule.php new file mode 100644 index 0000000..89291be --- /dev/null +++ b/app/Domains/Event/Models/EventDateReschedule.php @@ -0,0 +1,58 @@ + 'integer', + 'destination_event_date_id' => 'integer', + 'created_by_user_id' => 'integer', + 'previous_date' => 'date:Y-m-d', + 'new_date' => 'date:Y-m-d', + 'created_at' => 'datetime', + ]; + } + + /** @return BelongsTo */ + public function tenant(): BelongsTo + { + return $this->belongsTo(Tenant::class, 'tenant_code', 'codigo'); + } + + /** @return BelongsTo */ + public function sourceEventDate(): BelongsTo + { + return $this->belongsTo(EventDate::class, 'source_event_date_id'); + } + + /** @return BelongsTo */ + public function destinationEventDate(): BelongsTo + { + return $this->belongsTo(EventDate::class, 'destination_event_date_id'); + } + + /** @return BelongsTo */ + public function createdBy(): BelongsTo + { + return $this->belongsTo(User::class, 'created_by_user_id')->withTrashed(); + } +} diff --git a/database/migrations/2026_09_14_020000_create_event_date_reschedules_table.php b/database/migrations/2026_09_14_020000_create_event_date_reschedules_table.php new file mode 100644 index 0000000..b01dd6e --- /dev/null +++ b/database/migrations/2026_09_14_020000_create_event_date_reschedules_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('tenant_code'); + $table->foreignId('source_event_date_id')->nullable()->constrained('event_dates')->nullOnDelete(); + $table->foreignId('destination_event_date_id')->nullable()->constrained('event_dates')->nullOnDelete(); + $table->foreignId('created_by_user_id')->nullable()->constrained('users')->nullOnDelete(); + $table->date('previous_date'); + $table->date('new_date'); + $table->timestamp('created_at')->useCurrent(); + + $table->foreign('tenant_code') + ->references('codigo') + ->on('tenants') + ->cascadeOnUpdate() + ->cascadeOnDelete(); + $table->index(['tenant_code', 'created_at']); + }); + } + + public function down(): void + { + Schema::dropIfExists('event_date_reschedules'); + } +};