61 lines
2.0 KiB
PHP
61 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Reports;
|
|
|
|
use App\Models\FieldJob;
|
|
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
|
|
|
class FieldJobsCompletedReport extends BaseEloquentReport
|
|
{
|
|
public function slug(): string
|
|
{
|
|
return 'field-jobs-completed';
|
|
}
|
|
|
|
public function name(): string
|
|
{
|
|
return 'Zaključeni tereni';
|
|
}
|
|
|
|
public function description(): ?string
|
|
{
|
|
return 'Pregled zaključenih terenov po datumu in uporabniku.';
|
|
}
|
|
|
|
public function inputs(): array
|
|
{
|
|
return [
|
|
['key' => 'from', 'type' => 'date', 'label' => 'Od', 'default' => now()->startOfMonth()->toDateString()],
|
|
['key' => 'to', 'type' => 'date', 'label' => 'Do', 'default' => now()->toDateString()],
|
|
['key' => 'user_id', 'type' => 'select:user', 'label' => 'Uporabnik', 'default' => null],
|
|
];
|
|
}
|
|
|
|
public function columns(): array
|
|
{
|
|
return [
|
|
['key' => 'id', 'label' => '#'],
|
|
['key' => 'contract_reference', 'label' => 'Pogodba'],
|
|
['key' => 'assigned_user_name', 'label' => 'Terenski'],
|
|
['key' => 'completed_at', 'label' => 'Zaključeno'],
|
|
['key' => 'notes', 'label' => 'Opombe'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $filters
|
|
*/
|
|
public function query(array $filters): EloquentBuilder
|
|
{
|
|
$from = isset($filters['from']) ? now()->parse($filters['from'])->startOfDay() : now()->startOfMonth();
|
|
$to = isset($filters['to']) ? now()->parse($filters['to'])->endOfDay() : now()->endOfDay();
|
|
|
|
return FieldJob::query()
|
|
->whereNull('cancelled_at')
|
|
->whereBetween('completed_at', [$from, $to])
|
|
->when(! empty($filters['user_id']), fn ($q) => $q->where('assigned_user_id', $filters['user_id']))
|
|
->with(['assignedUser:id,name', 'contract:id,reference'])
|
|
->select(['id', 'assigned_user_id', 'contract_id', 'completed_at', 'notes']);
|
|
}
|
|
}
|