Your IP : 216.73.216.130


Current Path : /home/forge/stage.sksb.smartcon-survey.com/app/Livewire/
Upload File :
Current File : /home/forge/stage.sksb.smartcon-survey.com/app/Livewire/TopicDetail.php

<?php

namespace App\Livewire;

use App\Filters\InterviewFilter;
use App\Helpers\SurveyJSHelper;
use App\Livewire\Filter\QuarterFilter;
use App\Models\Department;
use App\Models\Interview;
use App\Models\Topic;
use Livewire\Component;

class TopicDetail extends Component
{
    public $topicId;

    public $currentTopic;

    public $interviews;

    public $results;

    public $departments;

    public $quarters;

    public $open = false;

    // Selected filters
    public $selectedDepartments = [];

    public $selectedAges = [];

    public $leadingPosition;

    public $selectedGender;

    public $selectedQuarters = [];

    public $allSelectedFilters = [];

    public $colors = [0 => '#4CAF50', 1 => '#8AC249', 2 => '#FFEB3B', 3 => '#FFC107', 4 => '#F44336', 98 => 'rgb(229, 231, 235)'];

    public $reversedColors =
        [0 => '#4CAF50', 1 => '#8AC249', 2 => '#FFEB3B', 3 => '#FFC107', 4 => '#F44336', 98 => 'rgb(229, 231, 235)'];

    public $indexLabels = ['sehr zufrieden', 'zufrieden', 'teils/teils', 'unzufrieden', 'sehr unzufrieden'];

    protected $queryString = [
        'topicId',
    ];

    public function changeOpen()
    {
        $this->open = ! $this->open;
    }

    public function mount()
    {
        $this->currentTopic = Topic::where('id', $this->topicId)->first();
        $this->quarters = (new QuarterFilter)->quarters();
        $this->interviews = Interview::where([
            ['topic_id', $this->topicId],
            ['is_test', 0],
        ])->get();

        // Different filters depending on company (admiral/löwen)
        // We don't use the deparments from the db, but instead we use groups
        $this->departments = Department::all();

        $sh = new SurveyJSHelper;
        $sh->setResults($this->currentTopic, $this->interviews)->addAverage();
        $this->results = $sh->getResults();
    }

    public static function baseFilter($topicId): array
    {
        return [['is_test', '=', 0], ['topic_id', '=', $topicId]];
    }

    public function updatedInterviews($value)
    {
        $sh = new SurveyJSHelper;
        $sh->setResults($this->currentTopic, $this->interviews)->addAverage();
        $this->results = $sh->getResults();
    }

    public function clearFilter()
    {
        $this->selectedDepartments = [];
        $this->selectedAges = [];
        $this->leadingPosition = null;
        $this->selectedGender = null;
        $this->selectedQuarters = [];
        $this->filter();
    }

    public function filter()
    {
        $filters = new InterviewFilter($this->allFilters());
        $this->interviews = Interview::where('topic_id', $this->topicId)->filter($filters)->get();
        $sh = new SurveyJSHelper;
        $sh->setResults($this->currentTopic, $this->interviews)->addAverage();
        $this->results = $sh->getResults();
    }

    public function allFilters()
    {
        $all = [
            'departments' => $this->selectedDepartments,
            'ages' => $this->selectedAges,
            'quarter' => $this->selectedQuarters,
            'leadingPosition' => $this->leadingPosition,
        ];

        $all = array_map(fn ($item) => ! empty($item) || $item == '0' ? $item : null, $all);

        return array_filter($all, fn ($item) => $item !== null);
    }

    public function render()
    {
        return view('livewire.topic-detail');
    }
}