Skip to content

Commit 85643fe

Browse files
authored
Merge pull request #3 from Pemrograman-Fasilkom-Unej/develop
Develop
2 parents 42d059b + 8a8c00a commit 85643fe

File tree

30 files changed

+1723
-486
lines changed

30 files changed

+1723
-486
lines changed

.idea/Assistant-Manager.iml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/php.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 452 additions & 246 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/Exports/ClassExport.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Exports;
4+
5+
use App\Classes;
6+
use Illuminate\Contracts\View\View;
7+
use Maatwebsite\Excel\Concerns\FromCollection;
8+
use Maatwebsite\Excel\Concerns\FromView;
9+
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
10+
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
11+
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
12+
13+
class ClassExport implements FromView, WithColumnFormatting, ShouldAutoSize
14+
{
15+
private $class;
16+
public function __construct($class_id)
17+
{
18+
$this->class = Classes::with('students.student', 'tasks.submissions.student')->find($class_id);
19+
}
20+
21+
/**
22+
* @return View
23+
*/
24+
public function view(): View
25+
{
26+
return \view('excel.class-recap', ['class' => $this->class]);
27+
}
28+
29+
/**
30+
* @return array
31+
*/
32+
public function columnFormats(): array
33+
{
34+
return [
35+
'B' => '@'
36+
];
37+
}
38+
}

app/Http/Controllers/Admin/TaskController.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
class TaskController extends Controller
2020
{
2121
use MinioHelper;
22-
private $datatypes = ['zip', 'pdf', 'docx', 'rar', 'txt'];
22+
private $datatypes = ['zip', 'pdf', 'docx', 'rar', 'txt', 'jpg', 'png', 'jpeg', 'doc'];
2323

2424
public function __construct()
2525
{
@@ -131,6 +131,7 @@ public function update(Request $request, Task $task)
131131
$this->validate($request, [
132132
'description' => 'required|min:3',
133133
'datatypes' => 'required',
134+
'deadline' => 'required'
134135
]);
135136

136137
foreach ($request->datatypes as $datatype) {
@@ -142,7 +143,8 @@ public function update(Request $request, Task $task)
142143

143144
$task->update([
144145
'description' => $request->description,
145-
'data_types' => implode("|", $request->datatypes)
146+
'data_types' => implode("|", $request->datatypes),
147+
'due_time' => Carbon::parse($request->deadline)
146148
]);
147149

148150
return \redirect()->route('admin.task.show', $task)->with('success', "Tugas berhasil diubah");

app/Http/Controllers/Ajax/AdminController.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,78 @@ public function getTickets(){
146146
public function uploadFile(Request $request){
147147
return $request;
148148
}
149+
150+
public function getStudentTaskSubmissions($id)
151+
{
152+
$task = Task::with('submissions.student')->find($id);
153+
if (Auth::user()->can('view', $task)) {
154+
return DataTables::of($task->submissions)
155+
->addColumn('_status', function ($submission) {
156+
if (!is_null($submission->score)) {
157+
return '<span class="badge badge-light-success">Done</span>';
158+
} else {
159+
return '<span class="badge badge-light-warning">Pending</span>';
160+
}
161+
})
162+
->addColumn('_status_order', function ($submission) {
163+
return !is_null($submission->score) ? 1 : 0;
164+
})
165+
->addColumn('_nim', function ($submission) {
166+
return '<div class="d-inline-block align-middle">
167+
<div class="d-inline-block">
168+
<h6 class="m-b-0">'. $submission->student->nim .'</h6>
169+
</div>
170+
</div>';
171+
})
172+
->addColumn('_name', function($submission){
173+
return
174+
'<div class="d-inline-block align-middle">
175+
<div class="d-inline-block">
176+
<h6 class="m-b-0">'. $submission->student->name .'</h6>
177+
</div>
178+
</div>';
179+
})
180+
->addColumn('_file', function($submission){
181+
if(!is_null($submission->files)){
182+
return
183+
'<div class="overlay-edit">
184+
<a href="'. route('assistant.task.submission.download', $submission) .'" target="_blank"
185+
class="btn btn-sm btn-icon btn-success">
186+
<i class="feather icon-download"></i>
187+
</a>
188+
</div>';
189+
}
190+
})
191+
->addColumn('_comment', function($submission){
192+
return $submission->comment ?? 'No comment';
193+
})
194+
->addColumn('_date', function($submission){
195+
return $submission->created_at->format('F d Y');
196+
})
197+
->addColumn('_score', function($submission){
198+
return $submission->score ?? ' - ';
199+
})
200+
->addColumn('_action', function($submission){
201+
if(is_null($submission->score)){
202+
return
203+
'<div class="overlay-edit">
204+
<button type="button" class="btn btn-sm btn-icon btn-success add-score-btn" data-toggle="modal"
205+
data-id="'. $submission->id .'" data-target="#score-modal">
206+
<i class="feather icon-check-circle"></i>
207+
</button>
208+
</div>';
209+
} else {
210+
return
211+
'<div class="overlay-edit">
212+
<button type="button" class="btn btn-sm btn-icon btn-primary edit-score-btn" data-toggle="modal"
213+
data-id="'. $submission->id .'" data-target="#score-modal">
214+
<i class="feather icon-edit"></i>
215+
</button>
216+
</div>';
217+
}
218+
})
219+
->rawColumns(['_status', '_nim', '_name', '_file', '_action'])
220+
->make(true);
221+
}
222+
}
149223
}

app/Http/Controllers/Ajax/AssistantController.php

Lines changed: 90 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class AssistantController extends Controller
1414
{
1515
public function getClasses(Request $request)
1616
{
17-
$classes = Auth::user()->classes->map(function($class, $index){
17+
$classes = Auth::user()->classes->map(function ($class, $index) {
1818
$class->classes->no = $index + 1;
1919
return $class->classes;
2020
});
@@ -24,47 +24,123 @@ public function getClasses(Request $request)
2424
}
2525

2626
return DataTables::of($classes)
27-
->addColumn('_year', function($q){
27+
->addColumn('_year', function ($q) {
2828
return $q->year . ($q->semester == 1 ? ' / Ganjil' : ' / Genap');
2929
})
30-
->addColumn('_student_count', function($q){
30+
->addColumn('_student_count', function ($q) {
3131
return $q->students->count();
3232
})
33-
->addColumn('_task_count', function($q){
33+
->addColumn('_task_count', function ($q) {
3434
return $q->tasks->count();
3535
})
36-
->addColumn('action', function($q){
36+
->addColumn('action', function ($q) {
3737
return "
38-
<a class='btn btn-primary btn-sm has-ripple' href='". route('assistant.class.show', $q) ."'>Detail</a>
38+
<a class='btn btn-primary btn-sm has-ripple' href='" . route('assistant.class.show', $q) . "'>Detail</a>
3939
";
4040
})
4141
->make(true);
4242
}
4343

44-
public function getTasks(Request $request){
44+
public function getTasks(Request $request)
45+
{
4546
$my_classes = Auth::user()->classes->pluck('class_id')->toArray();
46-
$tasks = Task::whereIn('class_id', $my_classes)->get()->map(function($q, $i){
47+
$tasks = Task::whereIn('class_id', $my_classes)->get()->map(function ($q, $i) {
4748
$q->no = $i + 1;
4849
return $q;
4950
});
5051
return DataTables::of($tasks)
51-
->addColumn('_class', function($q){
52+
->addColumn('_class', function ($q) {
5253
return $q->classes->title;
5354
})
54-
->addColumn('_deadline', function($q){
55+
->addColumn('_deadline', function ($q) {
5556
return $q->due_time->format('d M Y - h:i');
5657
})
57-
->addColumn('_url', function($q){
58+
->addColumn('_url', function ($q) {
5859
return "<a href='$q->url' target='_blank'>$q->url</a>";
5960
})
60-
->addColumn('action', function($q){
61-
return "<a class='btn btn-primary btn-sm has-ripple' href='". route('assistant.task.show', $q) ."'>Detail</a>";
61+
->addColumn('action', function ($q) {
62+
return "<a class='btn btn-primary btn-sm has-ripple' href='" . route('assistant.task.show', $q) . "'>Detail</a>";
6263
})
6364
->rawColumns(['_url', 'action'])
6465
->make(true);
6566
}
6667

67-
public function getStudentInfo($id){
68+
public function getStudentInfo($id)
69+
{
6870
return TaskSubmission::with('student')->find($id);
6971
}
72+
73+
public function getStudentTaskSubmissions($id)
74+
{
75+
$task = Task::with('submissions.student')->find($id);
76+
if (Auth::user()->can('view', $task)) {
77+
return DataTables::of($task->submissions)
78+
->addColumn('_status', function ($submission) {
79+
if (!is_null($submission->score)) {
80+
return '<span class="badge badge-light-success">Done</span>';
81+
} else {
82+
return '<span class="badge badge-light-warning">Pending</span>';
83+
}
84+
})
85+
->addColumn('_status_order', function ($submission) {
86+
return !is_null($submission->score) ? 1 : 0;
87+
})
88+
->addColumn('_nim', function ($submission) {
89+
return '<div class="d-inline-block align-middle">
90+
<div class="d-inline-block">
91+
<h6 class="m-b-0">'. $submission->student->nim .'</h6>
92+
</div>
93+
</div>';
94+
})
95+
->addColumn('_name', function($submission){
96+
return
97+
'<div class="d-inline-block align-middle">
98+
<div class="d-inline-block">
99+
<h6 class="m-b-0">'. $submission->student->name .'</h6>
100+
</div>
101+
</div>';
102+
})
103+
->addColumn('_file', function($submission){
104+
if(!is_null($submission->files)){
105+
return
106+
'<div class="overlay-edit">
107+
<a href="'. route('assistant.task.submission.download', $submission) .'" target="_blank"
108+
class="btn btn-sm btn-icon btn-success">
109+
<i class="feather icon-download"></i>
110+
</a>
111+
</div>';
112+
}
113+
})
114+
->addColumn('_comment', function($submission){
115+
return $submission->comment ?? 'No comment';
116+
})
117+
->addColumn('_date', function($submission){
118+
return $submission->created_at->format('F d Y');
119+
})
120+
->addColumn('_score', function($submission){
121+
return $submission->score ?? ' - ';
122+
})
123+
->addColumn('_action', function($submission){
124+
if(is_null($submission->score)){
125+
return
126+
'<div class="overlay-edit">
127+
<button type="button" class="btn btn-sm btn-icon btn-success add-score-btn" data-toggle="modal"
128+
data-id="'. $submission->id .'" data-target="#score-modal">
129+
<i class="feather icon-check-circle"></i>
130+
</button>
131+
</div>';
132+
} else {
133+
return
134+
'<div class="overlay-edit">
135+
<button type="button" class="btn btn-sm btn-icon btn-primary edit-score-btn" data-toggle="modal"
136+
data-id="'. $submission->id .'" data-target="#score-modal">
137+
<i class="feather icon-edit"></i>
138+
</button>
139+
</div>';
140+
}
141+
})
142+
->rawColumns(['_status', '_nim', '_name', '_file', '_action'])
143+
->make(true);
144+
}
145+
}
70146
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Assistant;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Auth;
8+
9+
class ProfileController extends Controller
10+
{
11+
public function index(){
12+
$assistant = Auth::user();
13+
return view('dashboard.assistant.profile.index', compact('assistant'));
14+
}
15+
16+
public function update(Request $request){
17+
$assistant = Auth::user();
18+
$this->validate($request, [
19+
'name' => 'required|min:3|max:32',
20+
'nim' => 'required|max:15',
21+
'_avatar' => 'image'
22+
]);
23+
24+
$assistant->update([
25+
'name' => $request->name,
26+
'nim' => $request->nim,
27+
]);
28+
29+
if($request->has('_avatar')){
30+
Storage::disk('public')->delete($assistant->avatar);
31+
$file = $request->file('_avatar');
32+
$avatar = Storage::disk('public')->put("assets/assistants", $file);
33+
$assistant->update([
34+
'avatar' => 'storage/' . $avatar
35+
]);
36+
}
37+
38+
if(!is_null($request->new_password)){
39+
$assistant->update([
40+
'password' => Hash::make($request->new_password)
41+
]);
42+
}
43+
44+
toastr()->success('Profil berhasil diupdate');
45+
return redirect()->back();
46+
}
47+
}

0 commit comments

Comments
 (0)