Completed
Push — master ( 0984d0...c9941e )
by Shawn
02:33
created

DutyGroups::htmlOutput()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 0
1
<?php
2
3
namespace SET\Handlers\Duty;
4
5
use Carbon\Carbon;
6
use Illuminate\Database\Eloquent\Collection;
7
use Illuminate\Support\Facades\Gate;
8
use SET\Duty;
9
use SET\DutySwap;
10
11
class DutyGroups extends DutyHelper
12
{
13
    public function __construct(Duty $duty)
14
    {
15
        parent::__construct($duty);
16
    }
17
18
    public function htmlOutput()
19
    {
20
        $newCollection = new Collection();
21
22
        foreach ($this->list as $entry) {
23
            $row = $this->buildHTMLUserRow($entry);
24
25
            $newCollection->push([
26
                'row'  => $row,
27
                'id'   => $entry['id'],
28
                'date' => $entry['date'],
29
            ]);
30
        }
31
32
        return $newCollection;
33
    }
34
35
    public function emailOutput()
36
    {
37
        $collection = $this->list->map(function ($value) {
38
            return [
39
                'users' => $value['group'],
40
                'date'  => $value['date'],
41
            ];
42
        });
43
44
        return $collection;
45
    }
46
47 View Code Duplication
    public function recordNextEntry()
48
    {
49
        if ($this->list->count() < 2) {
50
            return;
51
        }
52
53
        $nextGroupID = $this->list->toArray()[1]['id'];
54
        $this->duty->groups()->updateExistingPivot($nextGroupID, ['last_worked' => Carbon::today()]);
55
    }
56
57
    public function getLastWorked()
58
    {
59
        $this->lastWorkedUser = $this->duty->groups()->orderBy('duty_group.last_worked', 'DESC')->first();
60
61
        return $this;
62
    }
63
64
    public function queryList()
65
    {
66
        $this->list = $this->duty->groups()->orderBy('name')->get();
67
68
        return $this;
69
    }
70
71
    public function combineListWithDates()
72
    {
73
        $dates = (new DutyDates($this->duty))->getDates();
74
        $newList = new Collection();
75
        $count = $this->list->count();
76
77
        for ($i = 0; $i < $count; $i++) {
78
            $newList->push([
79
                'date'  => $dates[$i],
80
                'group' => $this->list[$i]->users()->get(),
81
                'id'    => $this->list[$i]->id,
82
            ]);
83
        }
84
85
        $this->list = $newList;
86
87
        return $this;
88
    }
89
90
    public function insertFromDutySwap()
91
    {
92
        $dutySwaps = DutySwap::where('duty_id', $this->duty->id)
93
            ->where('imageable_type', 'SET\Group')
94
            ->where('date', '>=', Carbon::now()->subMonth()) //Omit really old records.
95
            ->orderBy('date', 'ASC')
96
            ->get();
97
98
        foreach ($dutySwaps as $swap) {
99
            foreach ($this->list as $key => $entry) {
100
                if ($swap->date == $entry['date']) {
101
                    $this->list[$key] = [
102
                        'group' => $swap->imageable()->first()->users()->get(),
103
                        'id'    => $swap->imageable()->first()->id,
104
                        'date'  => $entry['date'],
105
                    ];
106
                }
107
            }
108
        }
109
    }
110
111
    /**
112
     * @param $entry
113
     *
114
     * @return string
115
     */
116
    private function buildHTMLUserRow($entry)
117
    {
118
        $row = '';
119
        foreach ($entry['group'] as $user) {
120
            if (Gate::allows('view')) {
121
                $row .= "<a href='".url('user', $user->id)."'>".$user->userFullName.'</a> & ';
122
            } else {
123
                $row .= $user->userFullName.' & ';
124
            }
125
        }
126
        $row = rtrim($row, '& ');
127
128
        return $row;
129
    }
130
}
131