Skip to content

Commit af19edc

Browse files
committed
Better management of the dashboard
1 parent c00d3fc commit af19edc

File tree

4 files changed

+103
-83
lines changed

4 files changed

+103
-83
lines changed

app/Models/Category.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ class Category extends Model
2121

2222
protected $guarded = ['created_at', 'updated_at'];
2323

24-
public function matter()
24+
public function matters()
2525
{
26-
return $this->hasMany(Matter::class);
26+
return $this->hasMany(Matter::class, 'category_code', 'code');
2727
}
2828

2929
public function displayWithInfo()

app/Models/Matter.php

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -616,23 +616,32 @@ function ($q) use ($authUserId) {
616616
return $query;
617617
}
618618

619-
public static function getCategoryMatterCount($user = null)
619+
public static function getCategoryMatterCount()
620620
{
621-
$authUserRole = Auth::user()->default_role;
622-
$authUserId = Auth::user()->id;
623-
$query = Matter::leftJoin('matter_category as mc', 'mc.code', 'matter.category_code')
624-
->groupBy('category_code', 'category')
625-
->select('mc.category', 'category_code', DB::raw('count(*) as total'));
626-
if ($authUserRole == 'CLI' || empty($authUserRole)) {
627-
$query->join('matter_actor_lnk as cli', 'cli.matter_id', DB::raw('ifnull(matter.container_id, matter.id)'))
628-
->where([['cli.role', 'CLI'], ['cli.actor_id', $authUserId]]);
629-
} else {
630-
if ($user) {
631-
$query = $query->where('responsible', '=', $user);
621+
return Category::withCount(['matters as total' => function($query) {
622+
if (request()->input('what_tasks') == 1) {
623+
$query->where('responsible', Auth::user()->login);
632624
}
625+
if (request()->input('what_tasks') > 1) {
626+
$query->whereHas('client', function($aq) {
627+
$aq->where('actor_id', request()->input('what_tasks'));
628+
});
633629
}
634-
635-
return $query->get();
630+
if (Auth::user()->default_role == 'CLI' || empty(Auth::user()->default_role)) {
631+
$query->whereHas('client', function($aq) {
632+
$aq->where('actor_id', Auth::id());
633+
});
634+
}
635+
}])
636+
->when(Auth::user()->default_role == 'CLI' || empty(Auth::user()->default_role),
637+
function($query) {
638+
$query->whereHas('matters', function($q) {
639+
$q->whereHas('client', function($aq) {
640+
$aq->where('actor_id', Auth::id());
641+
});
642+
});
643+
})
644+
->get();
636645
}
637646

638647
public function getDescription($lang = 'en')

public/js/home.js

Lines changed: 74 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,85 @@
1-
var lastTasksFlag = 0;
1+
var lastTasksFlag = 0;
22

3-
window.onload = refreshTasks(0);
3+
window.onload = refreshTasks(0);
44

5-
function refreshTasks(flag) {
6-
var urlParams = new URLSearchParams(window.location.search);
7-
var user_dashboard_val = urlParams.get('user_dashboard');
8-
lastTasksFlag = flag;
9-
if (flag === '2') {
10-
flag = clientId.value;
11-
}
12-
var url = '/task?what_tasks=' + flag;
13-
if (user_dashboard_val != null) {
14-
url += '&user_dashboard=' + user_dashboard_val;
15-
}
16-
fetchInto(url, tasklist);
17-
url += '&isrenewals=1';
18-
fetchInto(url, renewallist);
5+
function refreshTasks(flag) {
6+
var urlParams = new URLSearchParams(window.location.search);
7+
var user_dashboard_val = urlParams.get('user_dashboard');
8+
lastTasksFlag = flag;
9+
if (flag === '2') {
10+
flag = clientId.value;
1911
}
20-
21-
filter.onchange = (e) => {
22-
if (e.target.name === 'what_tasks') {
23-
refreshTasks(e.target.value);
24-
}
12+
var url = '/task?what_tasks=' + flag;
13+
if (user_dashboard_val != null) {
14+
url += '&user_dashboard=' + user_dashboard_val;
2515
}
16+
fetchInto(url, tasklist);
17+
url += '&isrenewals=1';
18+
fetchInto(url, renewallist);
19+
20+
// Refresh both the categories panel and users tasks panel with the current task filter
21+
var homeUrl = '/home?what_tasks=' + flag;
22+
reloadPart(homeUrl, 'categoriesList');
23+
reloadPart(homeUrl, 'usersTasksPanel');
24+
}
2625

27-
filter.onclick = (e) => {
28-
if (e.target.matches('.page-link')) {
29-
e.preventDefault();
30-
fetchInto(e.target.href, e.target.closest('.card-body'));
31-
}
26+
// When client is selected via autocomplete, check the Client radio button and refresh
27+
document.querySelector('[data-actarget="client_id"]').addEventListener('acCompleted', () => {
28+
clientTasks.checked = true;
29+
refreshTasks('2');
30+
});
31+
32+
filter.onchange = (e) => {
33+
if (e.target.name === 'what_tasks') {
34+
refreshTasks(e.target.value);
3235
}
36+
}
3337

34-
clearRenewals.onclick = (e) => {
35-
let params = new URLSearchParams();
36-
let list = renewallist.querySelectorAll('input:checked');
37-
if (list.length === 0) {
38-
alert("No renewals selected for clearing!");
39-
return;
40-
}
41-
list.forEach((current) => {
42-
params.append('task_ids[]', current.id);
43-
});
44-
params.append('done_date', renewalcleardate.value);
45-
fetchREST('/matter/clear-tasks', 'POST', params)
46-
.then((response) => {
47-
if (response.errors === '') {
48-
refreshTasks(lastTasksFlag);
49-
} else {
50-
alert(response.errors.done_date);
51-
}
52-
});
38+
filter.onclick = (e) => {
39+
if (e.target.matches('.page-link')) {
40+
e.preventDefault();
41+
fetchInto(e.target.href, e.target.closest('.card-body'));
5342
}
43+
}
5444

55-
clearOpenTasks.onclick = (e) => {
56-
let params = new URLSearchParams();
57-
let list = tasklist.querySelectorAll('input:checked');
58-
if (list.length === 0) {
59-
alert("No tasks selected for clearing!");
60-
return;
61-
}
62-
list.forEach((current) => {
63-
params.append('task_ids[]', current.id);
45+
clearRenewals.onclick = (e) => {
46+
let params = new URLSearchParams();
47+
let list = renewallist.querySelectorAll('input:checked');
48+
if (list.length === 0) {
49+
alert("No renewals selected for clearing!");
50+
return;
51+
}
52+
list.forEach((current) => {
53+
params.append('task_ids[]', current.id);
54+
});
55+
params.append('done_date', renewalcleardate.value);
56+
fetchREST('/matter/clear-tasks', 'POST', params)
57+
.then((response) => {
58+
if (response.errors === '') {
59+
refreshTasks(lastTasksFlag);
60+
} else {
61+
alert(response.errors.done_date);
62+
}
6463
});
65-
params.append('done_date', taskcleardate.value);
66-
fetchREST('/matter/clear-tasks', 'POST', params)
67-
.then((response) => {
68-
if (response.errors === '') {
69-
refreshTasks(lastTasksFlag);
70-
} else {
71-
alert(response.errors.done_date);
72-
}
73-
});
64+
}
65+
66+
clearOpenTasks.onclick = (e) => {
67+
let params = new URLSearchParams();
68+
let list = tasklist.querySelectorAll('input:checked');
69+
if (list.length === 0) {
70+
alert("No tasks selected for clearing!");
71+
return;
7472
}
73+
list.forEach((current) => {
74+
params.append('task_ids[]', current.id);
75+
});
76+
params.append('done_date', taskcleardate.value);
77+
fetchREST('/matter/clear-tasks', 'POST', params)
78+
.then((response) => {
79+
if (response.errors === '') {
80+
refreshTasks(lastTasksFlag);
81+
} else {
82+
alert(response.errors.done_date);
83+
}
84+
});
85+
}

resources/views/home.blade.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<a href="/matter/create?operation=new" data-bs-target="#ajaxModal" data-bs-toggle="modal" data-size="modal-sm" class="btn btn-primary float-end" title="{{ __('Create Matter') }}">{{ __('Create matter') }}</a>
2222
@endcan
2323
</div>
24-
<div class="card-body pt-0">
24+
<div id="categoriesList" class="card-body pt-0">
2525
<table class="table table-striped table-sm">
2626
<tr>
2727
<th></th>
@@ -35,14 +35,14 @@
3535
@foreach ($categories as $group)
3636
<tr class="reveal-hidden">
3737
<td class="py-0">
38-
<a href="/matter?Cat={{ $group->category_code }}">{{ $group->category }}</a>
38+
<a href="/matter?Cat={{ $group->code }}">{{ $group->category }}</a>
3939
</td>
4040
<td class="py-0">
4141
{{ $group->total }}
4242
</td>
4343
<td class="py-0">
4444
@can('readwrite')
45-
<a class="hidden-action float-end" href="/matter/create?operation=new&category={{$group->category_code}}" data-bs-target="#ajaxModal" title="Create {{ $group->category }}" data-bs-toggle="modal" data-size="modal-sm">
45+
<a class="hidden-action float-end" href="/matter/create?operation=new&category={{$group->code}}" data-bs-target="#ajaxModal" title="Create {{ $group->category }}" data-bs-toggle="modal" data-size="modal-sm">
4646
<svg width="14" height="14" fill="currentColor" style="pointer-events: none"><use xlink:href="#plus-circle-fill"/></svg>
4747
</a>
4848
@endcan
@@ -52,7 +52,7 @@
5252
</table>
5353
</div>
5454
</div>
55-
<div class="card border-info mt-1">
55+
<div class="card border-info mt-1" id="usersTasksPanel">
5656
<div class="card-header text-white bg-info p-1">
5757
<span class="lead">{{ __('Users tasks') }}</span>
5858
@can('readwrite')

0 commit comments

Comments
 (0)