38 lines
1.1 KiB
PHP
38 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Carbon\CarbonImmutable;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
/**
|
|
* @property string|null $lead_id
|
|
* @property CarbonImmutable|null $due_at
|
|
*/
|
|
class CrmTask extends CrmRecord
|
|
{
|
|
protected $table = 'tasks';
|
|
|
|
protected $casts = ['due_at' => 'immutable_datetime'];
|
|
|
|
/**
|
|
* @param Builder<CrmTask> $query
|
|
* @return Builder<CrmTask>
|
|
*/
|
|
public function scopeAvailableForWork(Builder $query): Builder
|
|
{
|
|
$query->whereNull('tasks.deleted_at')->whereIn('tasks.status', ['open', 'in_progress']);
|
|
if (Schema::hasColumn('tasks', 'desk_case_id')) {
|
|
if (Schema::hasColumn('desk_cases', 'closed_at')) {
|
|
$query->where(fn ($q) => $q->whereNull('tasks.desk_case_id')->orWhereExists(fn ($desk) => $desk->selectRaw('1')->from('desk_cases')
|
|
->whereColumn('desk_cases.id', 'tasks.desk_case_id')->whereNull('desk_cases.closed_at')));
|
|
} else {
|
|
$query->whereNull('tasks.desk_case_id');
|
|
}
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
}
|