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ẻ
@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ẻ
@endforeach