|
@@ -10,10 +10,13 @@ class AbsenceReport extends Component
|
|
|
|
|
|
|
|
public $records;
|
|
public $records;
|
|
|
public $record_assenze;
|
|
public $record_assenze;
|
|
|
|
|
+ public $original_record_assenze;
|
|
|
|
|
|
|
|
public $fiscalStartMonth = 9;
|
|
public $fiscalStartMonth = 9;
|
|
|
public $year;
|
|
public $year;
|
|
|
|
|
|
|
|
|
|
+ public $search;
|
|
|
|
|
+
|
|
|
public function mount()
|
|
public function mount()
|
|
|
{
|
|
{
|
|
|
setlocale(LC_ALL, 'it_IT');
|
|
setlocale(LC_ALL, 'it_IT');
|
|
@@ -81,13 +84,20 @@ class AbsenceReport extends Component
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$this->record_assenze[$course->id] = [
|
|
$this->record_assenze[$course->id] = [
|
|
|
- 'course' => $course,
|
|
|
|
|
|
|
+ 'course' => [
|
|
|
|
|
+ 'id' => $course->id,
|
|
|
|
|
+ 'name' => $course->getDetailsName(),
|
|
|
|
|
+ ],
|
|
|
'members' => [],
|
|
'members' => [],
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
foreach ($course_members as $course_member) {
|
|
foreach ($course_members as $course_member) {
|
|
|
$this->record_assenze[$course->id]['members'][$course_member->id] = [
|
|
$this->record_assenze[$course->id]['members'][$course_member->id] = [
|
|
|
- 'member' => $course_member->member,
|
|
|
|
|
|
|
+ 'member' => [
|
|
|
|
|
+ 'id' => $course_member->member->id,
|
|
|
|
|
+ 'first_name' => $course_member->member->first_name,
|
|
|
|
|
+ 'last_name' => $course_member->member->last_name,
|
|
|
|
|
+ ],
|
|
|
'count' => 0,
|
|
'count' => 0,
|
|
|
'dates' => [],
|
|
'dates' => [],
|
|
|
];
|
|
];
|
|
@@ -155,19 +165,23 @@ class AbsenceReport extends Component
|
|
|
return $b['count'] <=> $a['count'];
|
|
return $b['count'] <=> $a['count'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $last = strcmp($a['member']->last_name, $b['member']->last_name);
|
|
|
|
|
|
|
+ $last = strcmp($a['member']['last_name'], $b['member']['last_name']);
|
|
|
if ($last !== 0) {
|
|
if ($last !== 0) {
|
|
|
return $last;
|
|
return $last;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return strcmp($a['member']->first_name, $b['member']->first_name);
|
|
|
|
|
|
|
+ return strcmp($a['member']['first_name'], $b['member']['first_name']);
|
|
|
});
|
|
});
|
|
|
$this->record_assenze[$course->id]['members'] = $members;
|
|
$this->record_assenze[$course->id]['members'] = $members;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ usort($this->record_assenze, fn($a, $b) => $a['course']['name'] <=> $b['course']['name']);
|
|
|
} catch (\Throwable $e) {
|
|
} catch (\Throwable $e) {
|
|
|
dd($e->getMessage());
|
|
dd($e->getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ $this->original_record_assenze = $this->record_assenze;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function render()
|
|
public function render()
|
|
@@ -239,6 +253,41 @@ class AbsenceReport extends Component
|
|
|
return view('livewire.absence_report');
|
|
return view('livewire.absence_report');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function applySearch()
|
|
|
|
|
+ {
|
|
|
|
|
+ $this->search = trim($this->search);
|
|
|
|
|
+ $this->filter();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function resetSearch()
|
|
|
|
|
+ {
|
|
|
|
|
+ $this->search = '';
|
|
|
|
|
+ $this->record_assenze = $this->original_record_assenze;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected function filter()
|
|
|
|
|
+ {
|
|
|
|
|
+ $this->record_assenze = $this->original_record_assenze;
|
|
|
|
|
+
|
|
|
|
|
+ if ($this->search === '') return;
|
|
|
|
|
+
|
|
|
|
|
+ $needle = mb_strtolower($this->search);
|
|
|
|
|
+
|
|
|
|
|
+ foreach ($this->record_assenze as $courseId => $courseData) {
|
|
|
|
|
+ $courseData['members'] = array_values(array_filter($courseData['members'], function ($m) use ($needle) {
|
|
|
|
|
+ $full = mb_strtolower((trim($m['member']['last_name']) ?? '') . ' ' . (trim($m['member']['first_name']) ?? ''));
|
|
|
|
|
+ $full2 = mb_strtolower((trim($m['member']['first_name']) ?? '') . ' ' . (trim($m['member']['last_name']) ?? ''));
|
|
|
|
|
+ return str_contains($full, $needle) || str_contains($full2, $needle);
|
|
|
|
|
+ }));
|
|
|
|
|
+
|
|
|
|
|
+ if (empty($courseData['members'])) {
|
|
|
|
|
+ unset($this->record_assenze[$courseId]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $this->record_assenze[$courseId] = $courseData;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
protected function generateFiscalDateRanges($months, $days, $dayMap, $fromTime, $toTime)
|
|
protected function generateFiscalDateRanges($months, $days, $dayMap, $fromTime, $toTime)
|
|
|
{
|
|
{
|
|
|
$limit = now()->endOfDay();
|
|
$limit = now()->endOfDay();
|