Untitled
unknown
php
3 years ago
5.9 kB
27
Indexable
$this
->withoutGlobalScope('filterApp')
->select(
\DB::raw('(SELECT count(*) FROM workers WHERE workflow_program_id = programs.id and status != 0) as analytics'),
\DB::raw('(SELECT count(*) FROM workers WHERE workflow_program_id = programs.id) as number_of_version'),
'users.name as user_name',
'users.id as user_id',
'programs.id',
'programs.name',
'programs.type as program_type',
\DB::raw('(SELECT DATE_FORMAT(IFNULL(workers.cron_date, workers.start_date),"%Y-%m-%dT%TZ")) as start_date'),
'programs.description',
\DB::raw('(SELECT DATE_FORMAT(workers.created_at, "%Y-%m-%dT%TZ")) as created_at'),
\DB::raw('(SELECT DATE_FORMAT(workers.updated_at, "%Y-%m-%dT%TZ")) as updated_at'),
'workers.type as type',
'workers.schedule as schedule',
'workers.state as state',
DB::raw('If (programs.published_workflow is Not null, workers.version, 0) as version'),
\DB::raw("
CASE
WHEN data_resources.resourcable_type = '".Segment::SHORTNAME."'
THEN (SELECT name FROM segments WHERE id = data_resources.resourcable_id)
END resource_name"),
\DB::raw("
CASE
WHEN programs.status = 0 THEN 'Archive'
WHEN workers.status = 0 THEN 'Design'
WHEN workers.status = 1 THEN 'Active'
WHEN workers.status = 2 THEN 'Stop'
WHEN workers.status = 3 THEN 'Done'
ELSE 'Design'
END status
"),
'data_resources.resourcable_type',
'data_resources.resourcable_id',
'data_resources.id as data_resources_id',
'programs.tags as tags'
)
->leftJoin(
'workers',
'workers.id',
'=',
DB::raw('CASE WHEN programs.published_workflow is not null
THEN programs.published_workflow
ELSE
(
Select id From workers WHERE workflow_program_id = programs.id order by version DESC limit 1
)
END')
)
->leftJoin('worker_resources', \DB::raw('SUBSTRING(workers.start_node, 10)'), '=', 'worker_resources.id')
->leftJoin('data_resources', 'data_resources.id', '=', 'worker_resources.resource_id')
->leftJoin('users', 'users.id', '=', 'workers.user_id')
->where('programs.app_id', App::$APPID)
->orderBy($filters['order_col'] ?? 'updated_at', $filters['order_dir'] ?? 'desc');
return DB::table(DB::raw("({$query->toSql()}) as sub"))
->mergeBindings($query->getQuery())
->when(isset($filters['status']), function (Builder $query) use ($filters) {
$query->whereIn('status', $filters['status']);
})->when(isset($filters['type']), function (Builder $query) use ($filters) {
$query->where('type', $filters['type']);
})->when(isset($filters['created_at']), function (Builder $query) use ($filters) {
$query->whereDate('created_at', $filters['created_at']);
})->when(isset($filters['id']), function (Builder $query) use ($filters) {
$query->where('id', $filters['id']);
})->when(isset($filters['search']), function (Builder $query) use ($filters) {
$query->where(function (Builder $query) use ($filters) {
$fields = ['user_name','name','description','resource_name','status'];
foreach ($fields as $field) {
$query->orWhere($field, 'like', '%'.$filters['search'].'%');
}
});
})->when(isset($filters['start_date']), function (Builder $query) use ($filters) {
$query->whereDate('created_at', '>=', Carbon::parse($filters['start_date']));
})->when(isset($filters['end_date']), function (Builder $query) use ($filters) {
$query->whereDate('created_at', '<=', Carbon::parse($filters['end_date']));
})/*->when(isset($filters['resource']), function (Builder $query) use ($filters) {
$query->where('resourcable_type', $filters['resource']);
})*/->when(isset($filters['resource']), function (Builder $query) use ($filters) {
$query->where('data_resources_id', $filters['resource']);
})
->when(isset($filters['execution_range']), function (Builder $query) use ($filters) {
$startDate = Carbon::parse($filters['execution_range'][0] ?? null);
$endDate = Carbon::parse($filters['execution_range'][1] ?? null);
$query->whereIn('type', [Worker::PERIODICAL,Worker::ONCE]);
$query->whereDate('start_date', '>=', $startDate);
$query->whereDate('start_date', '<=', $endDate);
})->when(isset($filters['name']), function (Builder $query) use ($filters) {
$query->where('name', 'like', '%'.$filters['name'].'%');
})->when(isset($filters['user']), function (Builder $query) use ($filters) {
$query->whereIn('user_id', $filters['user']);
})->when(isset($filters['program_type']), function (Builder $query) use ($filters) {
$query->where('program_type', $filters['program_type']);
})->paginate($filters['per_page'] ?? static::PAGINATE);Editor is loading...