| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\SoftDeletes;
- /**
- * @property int $id
- * @property int|null $unit_id
- * @property string $title
- * @property string|null $description
- * @property \Illuminate\Support\Carbon|null $created_at
- * @property \Illuminate\Support\Carbon|null $updated_at
- * @property \Illuminate\Support\Carbon|null $deleted_at
- * @property string $phase
- * @property string $priority
- * @property string $origin
- * @property string $scope
- * @property string|null $sector
- * @property \Illuminate\Support\Carbon|null $due_date
- * @property int|null $responsible_user_id
- * @property int|null $created_by_user_id
- * @property int|null $target_unit_id
- * @property int $order
- * @property-read \App\Models\Unit|null $applicantUnit
- * @property-read \App\Models\User|null $createdByUser
- * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\KanbanReply> $replies
- * @property-read int|null $replies_count
- * @property-read \App\Models\User|null $responsibleUser
- * @property-read \App\Models\Unit|null $targetUnit
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban newModelQuery()
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban newQuery()
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban onlyTrashed()
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban query()
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban visibleToUnit(int $unitId)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereCreatedAt($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereCreatedByUserId($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereDeletedAt($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereDescription($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereDueDate($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereId($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereOrder($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereOrigin($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban wherePhase($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban wherePriority($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereResponsibleUserId($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereScope($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereSector($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereTargetUnitId($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereTitle($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereUnitId($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban whereUpdatedAt($value)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban withTrashed(bool $withTrashed = true)
- * @method static \Illuminate\Database\Eloquent\Builder<static>|Kanban withoutTrashed()
- * @mixin \Eloquent
- */
- class Kanban extends Model
- {
- use HasFactory, SoftDeletes;
- protected $table = 'kanbans';
- protected $guarded = ['id'];
- protected $casts = [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'due_date' => 'date',
- ];
- // Relationships
- public function applicantUnit()
- {
- return $this->belongsTo(Unit::class, 'unit_id');
- }
- public function targetUnit()
- {
- return $this->belongsTo(Unit::class, 'target_unit_id');
- }
- public function responsibleUser()
- {
- return $this->belongsTo(User::class, 'responsible_user_id');
- }
- public function createdByUser()
- {
- return $this->belongsTo(User::class, 'created_by_user_id');
- }
- public function replies()
- {
- return $this->hasMany(KanbanReply::class, 'kanban_id');
- }
- // Query Scopes
- public function scopeVisibleToUnit($query, int $unitId)
- {
- return $query->where(function ($q) use ($unitId) {
- // Cards created by this unit (origin = unit)
- $q->where('unit_id', $unitId)
- // Cards explicitly targeted at this unit (specific or broadcast-per-unit)
- ->orWhere('target_unit_id', $unitId);
- // Note: scope='all' is NOT used here — when broadcasting the controller
- // already creates one card per unit each with its own target_unit_id,
- // so filtering by target_unit_id is sufficient and correct.
- });
- }
- }
|