From 91a598a5f9c529812e17d25b098b3d87d31ed5c4 Mon Sep 17 00:00:00 2001 From: antv Date: Fri, 17 Jul 2026 13:42:00 +0700 Subject: [PATCH] m --- app/Services/User/UserService.php | 48 +++++++++++++++- database/seeders/MockDataSeeder.php | 55 +++++++++++++++++++ .../views/components/user-form.blade.php | 3 + resources/views/user/received.blade.php | 31 +++++++++-- resources/views/user/sent.blade.php | 31 +++++++++-- 5 files changed, 154 insertions(+), 14 deletions(-) diff --git a/app/Services/User/UserService.php b/app/Services/User/UserService.php index edcce26..03148d7 100644 --- a/app/Services/User/UserService.php +++ b/app/Services/User/UserService.php @@ -236,7 +236,8 @@ class UserService implements UserServiceInterface { $start = Carbon::parse($selectedMonth)->startOfMonth(); $end = Carbon::parse($selectedMonth)->endOfMonth(); - $cards = Administration::where('msnv', $user->msnv) + $cards = Administration::with('senderUser') + ->where('msnv', $user->msnv) ->whereBetween('date', [$start, $end]) ->where('received', '>', 0) ->orderBy('date', 'desc') @@ -249,7 +250,8 @@ class UserService implements UserServiceInterface { $start = Carbon::parse($selectedMonth)->startOfMonth(); $end = Carbon::parse($selectedMonth)->endOfMonth(); - $cards = Administration::where('msnv', $user->msnv) + $cards = Administration::with('receiverUser') + ->where('msnv', $user->msnv) ->whereBetween('date', [$start, $end]) ->where('sent', '>', 0) ->orderBy('date', 'desc') @@ -257,6 +259,48 @@ class UserService implements UserServiceInterface return ['cards' => $cards]; } + // Retrieve limited feed of received ThankCards for activity feed + public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array + { + $start = Carbon::parse($selectedMonth)->startOfMonth(); + $end = Carbon::parse($selectedMonth)->endOfMonth(); + $cards = Administration::with('senderUser') + ->where('msnv', $user->msnv) + ->whereBetween('date', [$start, $end]) + ->where('received', '>', 0) + ->orderBy('date', 'desc') + ->skip($offset) + ->take($limit) + ->get(); + $hasMore = Administration::where('msnv', $user->msnv) + ->whereBetween('date', [$start, $end]) + ->where('received', '>', 0) + ->skip($offset + $limit) + ->exists(); + return ['cards' => $cards, 'hasMore' => $hasMore]; + } + + // Retrieve limited feed of sent ThankCards for activity feed + public function getSentFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array + { + $start = Carbon::parse($selectedMonth)->startOfMonth(); + $end = Carbon::parse($selectedMonth)->endOfMonth(); + $cards = Administration::with('receiverUser') + ->where('msnv', $user->msnv) + ->whereBetween('date', [$start, $end]) + ->where('sent', '>', 0) + ->orderBy('date', 'desc') + ->skip($offset) + ->take($limit) + ->get(); + $hasMore = Administration::where('msnv', $user->msnv) + ->whereBetween('date', [$start, $end]) + ->where('sent', '>', 0) + ->skip($offset + $limit) + ->exists(); + return ['cards' => $cards, 'hasMore' => $hasMore]; + } + public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void { if (isset($data['name'])) { diff --git a/database/seeders/MockDataSeeder.php b/database/seeders/MockDataSeeder.php index 069f188..ca57a81 100644 --- a/database/seeders/MockDataSeeder.php +++ b/database/seeders/MockDataSeeder.php @@ -93,5 +93,60 @@ class MockDataSeeder extends Seeder 'flag_send' => config('constants.FLAG_SEND_DISABLED'), 'first_login' => config('constants.FIRST_LOGIN_FALSE'), ]); + + // 2. CREATE MOCK TRANSACTIONS + // Nguyễn Văn A (1001) receives 3 cards from Trần Thị Ngọc (1002) + Administration::create([ + 'msnv' => '1001', + 'received' => 3, + 'sender' => '1002', + 'sent' => 0, + 'receiver' => null, + 'date' => Carbon::now()->format('Y-m-d'), + ]); + Administration::create([ + 'msnv' => '1002', + 'received' => 0, + 'sender' => null, + 'sent' => 3, + 'receiver' => '1001', + 'date' => Carbon::now()->format('Y-m-d'), + ]); + + // Nguyễn Văn A (1001) receives 2 cards from Bản Giang (1005) + Administration::create([ + 'msnv' => '1001', + 'received' => 2, + 'sender' => '1005', + 'sent' => 0, + 'receiver' => null, + 'date' => Carbon::now()->subDays(2)->format('Y-m-d'), + ]); + Administration::create([ + 'msnv' => '1005', + 'received' => 0, + 'sender' => null, + 'sent' => 2, + 'receiver' => '1001', + 'date' => Carbon::now()->subDays(2)->format('Y-m-d'), + ]); + + // Nguyễn Văn A (1001) sends 4 cards to Trần Thị Ngọc (1002) + Administration::create([ + 'msnv' => '1001', + 'sent' => 4, + 'receiver' => '1002', + 'received' => 0, + 'sender' => null, + 'date' => Carbon::now()->subDays(1)->format('Y-m-d'), + ]); + Administration::create([ + 'msnv' => '1002', + 'sent' => 0, + 'receiver' => null, + 'received' => 4, + 'sender' => '1001', + 'date' => Carbon::now()->subDays(1)->format('Y-m-d'), + ]); } } diff --git a/resources/views/components/user-form.blade.php b/resources/views/components/user-form.blade.php index 074ab86..fddb920 100644 --- a/resources/views/components/user-form.blade.php +++ b/resources/views/components/user-form.blade.php @@ -66,6 +66,9 @@ Bạn có chắc chắn muốn cho nhân viên {{ $user->name }} (MSNV: {{ $user->msnv }}) nghỉ việc không? Tài khoản này sẽ không thể đăng nhập hoặc thực hiện các giao dịch thẻ sau khi xác nhận.

@else + + + diff --git a/resources/views/user/received.blade.php b/resources/views/user/received.blade.php index 07523e8..1885022 100644 --- a/resources/views/user/received.blade.php +++ b/resources/views/user/received.blade.php @@ -32,14 +32,33 @@ @if (!empty($cards) && $cards->count()) -
+
@foreach ($cards as $c) -
-
- Từ: {{ $c->sender ?? '---' }} - {{ \Carbon\Carbon::parse($c->date)->format('d/m/Y') }} +
+
+ @if($c->senderUser) + +
+

{{ $c->senderUser->name }}

+

MSNV: {{ $c->senderUser->msnv }}

+

{{ $c->senderUser->mail }}

+
+ @else +
+ {{ strtoupper(substr($c->sender ?? 'S', 0, 1)) }} +
+
+

Từ: {{ $c->sender ?? '---' }}

+

MSNV: {{ $c->sender ?? '---' }}

+
+ @endif +
+
+ {{ \Carbon\Carbon::parse($c->date)->format('d/m/Y') }} + + +{{ $c->received }} thẻ +
-

{{ $c->received }} thẻ

@endforeach
diff --git a/resources/views/user/sent.blade.php b/resources/views/user/sent.blade.php index 5f0a8d5..ee1f9f7 100644 --- a/resources/views/user/sent.blade.php +++ b/resources/views/user/sent.blade.php @@ -31,14 +31,33 @@ @if (!empty($cards) && $cards->count()) -
+
@foreach ($cards as $c) -
-
- Gửi tới: {{ $c->receiver ?? '---' }} - {{ \Carbon\Carbon::parse($c->date)->format('d/m/Y') }} +
+
+ @if($c->receiverUser) + +
+

{{ $c->receiverUser->name }}

+

MSNV: {{ $c->receiverUser->msnv }}

+

{{ $c->receiverUser->mail }}

+
+ @else +
+ {{ strtoupper(substr($c->receiver ?? 'R', 0, 1)) }} +
+
+

Tới: {{ $c->receiver ?? '---' }}

+

MSNV: {{ $c->receiver ?? '---' }}

+
+ @endif +
+
+ {{ \Carbon\Carbon::parse($c->date)->format('d/m/Y') }} + + -{{ $c->sent }} thẻ +
-

{{ $c->sent }} thẻ

@endforeach