diff --git a/app/Http/Controllers/API/Contact/ContactApiController.php b/app/Http/Controllers/API/Contact/ContactApiController.php
index 0d35cce..75e63ee 100644
--- a/app/Http/Controllers/API/Contact/ContactApiController.php
+++ b/app/Http/Controllers/API/Contact/ContactApiController.php
@@ -17,8 +17,6 @@ class ContactApiController extends Controller
{
public function getListContact(Request $request)
{
- // $token = JWTAuth::getToken();
- // $user = JWTAuth::user($token);
$data = DB::table('contacts')
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
diff --git a/app/Http/Controllers/API/Notification/NotificationApiController.php b/app/Http/Controllers/API/Notification/NotificationApiController.php
new file mode 100644
index 0000000..62fda62
--- /dev/null
+++ b/app/Http/Controllers/API/Notification/NotificationApiController.php
@@ -0,0 +1,44 @@
+input('id'))->get();
+
+ return response()->json([
+ 'data' => $notification
+ ]);
+ }
+
+ public function markAllAsRead(){
+ $result = NotificationReceiver::where('receiver', auth()->user()->email)->update([
+ 'status' => 'read'
+ ]);
+
+ if($result){
+ return response()->json([
+ 'status' => true,
+ 'message' => 'Berhasil'
+ ]);
+ }else{
+ return response()->json([
+ 'status' => false,
+ 'message' => 'Gagal'
+ ]);
+
+ Log::error($result);
+ }
+ }
+}
diff --git a/app/Http/Controllers/Admin/Dashboard/AdminDashboardController.php b/app/Http/Controllers/Admin/Dashboard/AdminDashboardController.php
index d8cd92a..5631210 100644
--- a/app/Http/Controllers/Admin/Dashboard/AdminDashboardController.php
+++ b/app/Http/Controllers/Admin/Dashboard/AdminDashboardController.php
@@ -8,76 +8,369 @@ use Carbon\Carbon;
use App\Models\Transaction;
use App\Models\Refund;
use App\Models\User;
+use DateInterval;
+use DateTime;
use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
class AdminDashboardController extends Controller
{
public function index()
{
- $currentMonth = Carbon::now()->month;
- $currentYear = Carbon::now()->year;
+ $today = new DateTime();
+ $todayDate = $today->format('Y-m-d');
+ $pickDate = new DateTime();
+ $interval = new DateInterval('P29D');
+ $start = $pickDate->sub($interval);
+ $startDate = $start->format('Y-m-d');
- $countSuccess = Transaction::where('status_pembayaran', 'settlement')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
+ $intervalBefore = new DateInterval('P1D');
+ $intervalBeforeStart = new DateInterval('P29D');
+ $endBefore = $pickDate->sub($intervalBefore);
+ $endBeforeDate = $endBefore->format('Y-m-d');
+ $startBefore = $pickDate->sub($intervalBeforeStart);
+ $startBeforeDate = $startBefore->format('Y-m-d');
+
+ $countSuccess = Transaction::whereIn('status_transaksi', ['done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // selesai
+
+ $countProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent', 'success', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // diproses
+
+ $countCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); //gagal
+
+ $countIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // terindikasi
+
+ $countWaiting = Transaction::where('status_transaksi', 'created_at')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // terindikasi
+
+ $totalTransaction = Transaction::whereNotIn('status_transaksi', ['refund'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // transaksi
+
+ $totalTransactionSebelum = Transaction::whereNotIn('status_transaksi', ['refund', 'created'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count(); // transaksi sebelum
+
+ $rateTransaction = floatval((floatval($totalTransaction)-floatval($totalTransactionSebelum))*100)/ ($totalTransactionSebelum == 0 ? 1 : floatval($totalTransactionSebelum));
+
+ $countPending = Refund::where('status', 'pending')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); //ajuan
+
+ $countApprove = Refund::where('status', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // disetujui
+
+ $countDeny = Refund::where('status', 'deny')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // ditolak
+
+ $totalRefund = Refund::whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->count(); // refund
+
+ $totalRefundSebelum = Refund::whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count(); // refund sebelum
+
+ $rateRefund = floatval((floatval($totalRefund)-floatval($totalRefundSebelum))*100)/ ($totalRefundSebelum == 0 ? 1 : floatval($totalRefundSebelum));
+
+ $totalUser = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
->count();
- $countPending = Transaction::where('status_pembayaran', 'pending')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->count();
+ $totalUserSebelum = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count();
- $countCancelled = Transaction::where('status_pembayaran', 'cancel')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->count();
+ $rateUser = floatval((floatval($totalUser)-floatval($totalUserSebelum))*100)/ ($totalUserSebelum == 0 ? 1 : floatval($totalUserSebelum));
- $countRefund = Transaction::where('status_pembayaran', 'refund')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->count();
+ $totalProfit = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->sum('total_keuntungan');
- $totalTransaction = Transaction::whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->count();
+ $totalProfitSebelum = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->sum('total_keuntungan');
+
+ $rateProfit = floatval((floatval($totalProfit)-floatval($totalProfitSebelum))*100)/ ($totalProfitSebelum == 0 ? 1 : floatval($totalProfitSebelum));
$dataChartTransaction = [];
$dataChartRefund = [];
+ $dataChartUser = [];
+ $dataLabel = [];
- $totalRefund = Transaction::where('status_pembayaran', 'refund')->count();
- $dataChartTotalRefund = [];
+ $startDate = $start;
+ $intervalDate = new DateInterval('P1D');
+ $todayDate = $today;
+ $endDate = $todayDate->add($intervalDate);
- $totalUser = User::where('status', 'Finished')->count();
- $dataChartTotalUser = [];
+ for ($date = clone $startDate; $date <= $endDate; $date->modify('+1 day')) {
+ $transaction = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_keuntungan');
- for ($bulan = 1; $bulan <= 12; $bulan++) {
- $transaction = Transaction::whereMonth('updated_at', $bulan)
- ->whereYear('updated_at', $currentYear)
- ->where('status_pembayaran', 'settlement')
- ->sum('total_bayar')/100;
+ $refund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_keuntungan');
- $refund = Transaction::whereMonth('updated_at', $bulan)
- ->whereYear('updated_at', $currentYear)
- ->where('status_pembayaran', 'refund')
- ->sum('total_harga')/100;
+ $user = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->count();
- $dataChartTransaction[] = intval($transaction);
- $dataChartRefund[] = intval($refund);
+ $dataChartTransaction[] = floatval($transaction) / 1000;
+ $dataChartRefund[] = floatval($refund) / 1000;
+ $dataChartUser[] = intval($user);
+ $dataLabel[] = $date->format('d/m/Y');
}
- $transactions = Transaction::latest()
- ->get();
+ $dataTopUsers = Transaction::selectRaw(
+ "
+ CONCAT(users.nama_depan,' ',users.nama_belakang) AS nama_lengkap,
+ COUNT(CASE WHEN transactions.status_transaksi = 'done' OR refunds.status = 'refund' THEN 1 ELSE NULL END) AS jumlah_transaksi,
+ COUNT(CASE WHEN transactions.status_transaksi = 'done' THEN 1 ELSE NULL END) AS jumlah_transaksi_berhasil,
+ COUNT(CASE WHEN refunds.status = 'refund' THEN 1 ELSE NULL END) AS jumlah_refund_berhasil,
+ SUM(CASE WHEN refunds.status = 'refund' THEN refunds.total ELSE 0 END) AS total_refund_berhasil,
+ SUM(CASE WHEN transactions.status_transaksi = 'done' THEN transactions.total_harga ELSE 0 END) AS total_transaksi_berhasil,
+ users.foto_profile
+ ",
+ )
+ ->leftJoin('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->leftJoin('users', 'users.email', '=', 'transactions.pembeli')
+ ->groupBy('nama_lengkap', 'users.foto_profile')
+ ->orderBy('total_transaksi_berhasil', 'DESC')
+ ->orderBy('total_refund_berhasil', 'ASC')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->limit(5)
+ ->get();
- return view('admin.index', compact('transactions', 'countSuccess', 'countPending', 'countCancelled', 'countRefund', 'totalRefund', 'totalUser', 'totalTransaction', 'dataChartTransaction', 'dataChartRefund', 'dataChartTotalUser', 'dataChartTotalRefund', 'transactions'));
+ return view('admin.index', compact(
+ 'countSuccess',
+ 'countProcessed',
+ 'countCancelled',
+ 'countIndicated',
+ 'countWaiting',
+ 'totalTransaction',
+ 'rateTransaction',
+ 'countPending',
+ 'countApprove',
+ 'countDeny',
+ 'totalRefund',
+ 'rateRefund',
+ 'totalUser',
+ 'rateUser',
+ 'rateProfit',
+ 'dataChartTransaction',
+ 'dataChartRefund',
+ 'dataChartUser',
+ 'dataLabel',
+ 'dataTopUsers'
+ ));
}
- public function getSelectedChart()
+ public function getDataBySearch(Request $request)
{
- $dataChartLaporan = [];
- $tahun = Carbon::now()->year;
- }
+ $startDate = $request->startDate; // 0
+ $endDate = $request->endDate; // 29
+ $pickDate = new DateTime($request->startDate);
+ $startDateTime = new DateTime($request->startDate);
+ $endDateTime = new DateTime($request->endDate);
+ $interval = $startDateTime->diff($endDateTime);
- public function getCharByYear()
- {
+ $intervalBefore = new DateInterval('P1D');
+ $intervalBeforeStart = new DateInterval('P'.$interval->format('%a').'D');
+ $endBefore = $pickDate->sub($intervalBefore);
+ $endBeforeDate = $endBefore->format('Y-m-d'); // -1
+ $startBefore = $pickDate->sub($intervalBeforeStart);
+ $startBeforeDate = $startBefore->format('Y-m-d'); // -29
+
+ $countSuccess = Transaction::whereIn('status_transaksi', ['done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // selesai
+
+ $countProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent', 'success', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // diproses
+
+ $countCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); //gagal
+
+ $countIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // terindikasi
+
+ $countWaiting = Transaction::where('status_transaksi', 'created')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // terindikasi
+
+ $totalTransaction = Transaction::whereNotIn('status_transaksi', ['refund'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // transaksi
+
+ $totalTransactionSebelum = Transaction::whereNotIn('status_transaksi', ['refund'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count(); // transaksi
+
+ $rateTransaction = floatval((floatval($totalTransaction)-floatval($totalTransactionSebelum))*100)/ ($totalTransactionSebelum == 0 ? 1 : floatval($totalTransactionSebelum));
+
+ $countPending = Refund::where('status', 'pending')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); //ajuan
+
+ $countApprove = Refund::where('status', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // disetujui
+
+ $countDeny = Refund::where('status', 'deny')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // ditolak
+
+ $totalRefund = Refund::whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count(); // refund
+
+ $totalRefundSebelum = Refund::whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count();
+
+ $rateRefund = floatval((floatval($totalRefund)-floatval($totalRefundSebelum))*100)/ ($totalRefundSebelum == 0 ? 1 : floatval($totalRefundSebelum));
+
+ $totalUser = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->count();
+
+ $totalUserSebelum = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->count();
+
+ $rateUser = floatval((floatval($totalUser)-floatval($totalUserSebelum))*100)/ ($totalUserSebelum == 0 ? 1 : floatval($totalUserSebelum));
+
+ $totalProfit = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $endDate)
+ ->sum('total_keuntungan');
+
+ $totalProfitSebelum = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->sum('total_keuntungan');
+
+ $rateProfit = floatval((floatval($totalProfit)-floatval($totalProfitSebelum))*100)/ ($totalProfitSebelum == 0 ? 1 : floatval($totalProfitSebelum));
+
+ $dataChartTransaction = [];
+ $dataChartRefund = [];
+ $dataChartUser = [];
+ $dataLabel = [];
+
+ $first = $startDateTime;
+ $intervalDate = new DateInterval('P1D');
+ $endPlus1 = $endDateTime;
+ $last = $endPlus1->add($intervalDate);
+
+ for ($date = clone $first; $date <= $last; $date->modify('+1 day')) {
+ $transaction = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_keuntungan');
+
+ $refund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_keuntungan');
+
+ $user = User::where('role', 'User')
+ ->where('status', 'Finished')
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->count();
+
+ $dataChartTransaction[] = floatval($transaction);
+ $dataChartRefund[] = floatval($refund);
+ $dataChartUser[] = intval($user);
+ $dataLabel[] = $date->format('d/m/Y');
+ }
+
+ $dataTopUsers = Transaction::selectRaw(
+ "
+ CONCAT(users.nama_depan,' ',users.nama_belakang) AS nama_lengkap,
+ COUNT(CASE WHEN transactions.status_transaksi = 'done' OR refunds.status = 'refund' THEN 1 ELSE NULL END) AS jumlah_transaksi,
+ COUNT(CASE WHEN transactions.status_transaksi = 'done' THEN 1 ELSE NULL END) AS jumlah_transaksi_berhasil,
+ COUNT(CASE WHEN refunds.status = 'refund' THEN 1 ELSE NULL END) AS jumlah_refund_berhasil,
+ SUM(CASE WHEN refunds.status = 'refund' THEN refunds.total ELSE 0 END) AS total_refund_berhasil,
+ SUM(CASE WHEN transactions.status_transaksi = 'done' THEN transactions.total_harga ELSE 0 END) AS total_transaksi_berhasil,
+ users.foto_profile
+ ",
+ )
+ ->leftJoin('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->leftJoin('users', 'users.email', 'transactions.pembeli')
+ ->groupBy('nama_lengkap', 'users.foto_profile')
+ ->orderBy('total_transaksi_berhasil', 'DESC')
+ ->orderBy('total_refund_berhasil', 'ASC')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $endDate)
+ ->limit(5)
+ ->get();
+
+ return response()->json([
+ 'countSuccess' => $countSuccess,
+ 'countProcessed' => $countProcessed,
+ 'countCancelled' => $countCancelled,
+ 'countIndicated' => $countIndicated,
+ 'countWaiting' => $countWaiting,
+ 'totalTransaction' => $totalTransaction,
+ 'rateTransaction' => $rateTransaction,
+ 'countPending' => $countPending,
+ 'countApprove' => $countApprove,
+ 'countDeny' => $countDeny,
+ 'totalRefund' => $totalRefund,
+ 'rateRefund' => $rateRefund,
+ 'totalUser' => $totalUser,
+ 'rateUser' => $rateUser,
+ 'rateProfit' => $rateProfit,
+ 'dataChartTransaction' => $dataChartTransaction,
+ 'dataChartRefund' => $dataChartRefund,
+ 'dataChartUser' => $dataChartUser,
+ 'dataLabel' => $dataLabel,
+ 'dataTopUser' => $dataTopUsers,
+ 'endDate' => $request->endDate,
+ ]);
}
}
diff --git a/app/Http/Controllers/Admin/Notification/AdminNotification.php b/app/Http/Controllers/Admin/Notification/AdminNotification.php
index c5a8983..3bf6ad6 100644
--- a/app/Http/Controllers/Admin/Notification/AdminNotification.php
+++ b/app/Http/Controllers/Admin/Notification/AdminNotification.php
@@ -46,7 +46,7 @@ class AdminNotification extends Controller
public function listNotification(Request $request)
{
try {
- $subQuery = Notification::latest()->select('notifications.id', 'notifications.title', 'notifications.teaser', 'notifications.created_at');
+ $subQuery = Notification::latest('notifications.updated_at')->select('notifications.id', 'notifications.title', 'notifications.teaser', 'notifications.created_at');
if ($request->has('search') && !empty($request->search['value'])) {
$searchNotif = $request->search['value'];
@@ -266,6 +266,7 @@ class AdminNotification extends Controller
$email = NotificationReceiver::where('notification_id', $request->id)
->pluck('receiver')
->toArray();
+
return view('admin.notification.edit', compact('notification', 'email'));
}
diff --git a/app/Http/Controllers/Admin/Refund/AdminRefundController.php b/app/Http/Controllers/Admin/Refund/AdminRefundController.php
index 16e669d..17cb517 100644
--- a/app/Http/Controllers/Admin/Refund/AdminRefundController.php
+++ b/app/Http/Controllers/Admin/Refund/AdminRefundController.php
@@ -11,6 +11,8 @@ use App\Models\RefundDescription;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
+use App\Models\Notification;
+use App\Models\NotificationReceiver;
use App\Models\TransactionDescription;
use Carbon\Carbon;
use Illuminate\Support\Facades\Http;
@@ -44,6 +46,7 @@ class AdminRefundController extends Controller
public function approveRefund(Request $request)
{
$refund = Refund::where('id', $request->id)->first();
+ $transactionDetail = Transaction::where('id', $refund->transaction_id)->first();
$params = [
'refund_key' => $request->id . '-ref1',
@@ -60,7 +63,7 @@ class AdminRefundController extends Controller
'Content-Type' => 'application/json',
'Authorization' => "Basic $auth",
])
- ->post('https://api.sandbox.midtrans.com/v2/'.$request->id.'/refund', $params);
+ ->post('https://api.sandbox.midtrans.com/v2/'.$refund->transaction_id.'/refund', $params);
$result = json_decode($response->body(), true);
$code = $result['status_code'];
@@ -85,11 +88,31 @@ class AdminRefundController extends Controller
'deskripsi' => 'Admin telah menyetujui refund.',
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Refund Diterima',
+ 'content' => 'Refund telah diterima dan uang akan dikembalikan ke pembeli. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => 'Refund telah diterima...',
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => [
+ $transactionDetail->pembeli,
+ $transactionDetail->penjual
+ ],
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Refund berhasil dilakukan. Uang akan dikembalikan ke pembeli.',
+ 'receivers' => [
+ $transactionDetail->pembeli,
+ $transactionDetail->penjual
+ ]
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -98,7 +121,7 @@ class AdminRefundController extends Controller
return response()->json([
'status' => false,
- 'message' => 'Refund gagal dilakukan',
+ 'message' => 'Refund gagal dilakukan'
]);
}
}else{
@@ -116,6 +139,7 @@ class AdminRefundController extends Controller
public function denyRefund(Request $request)
{
$refund = Refund::where('id', $request->id)->first();
+ $transactionDetail = Transaction::where('id', $refund->transaction_id)->first();
try {
Transaction::where('id', $refund->transaction_id)->update([
@@ -136,11 +160,31 @@ class AdminRefundController extends Controller
'deskripsi' => 'Admin telah menolak refund. Transaksi akan diteruskan ke penjual. Alasan: '.$request->complaint,
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Refund Diterima',
+ 'content' => 'Refund ditolak dan transaksi akan diteruskan ke penjual. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => 'Refund ditolak...',
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => [
+ $transactionDetail->pembeli,
+ $transactionDetail->penjual
+ ],
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Refund berhasil ditolak. Transaksi diselesaikan dan uang disampaikan ke penjual.',
+ 'receivers' => [
+ $transactionDetail->pembeli,
+ $transactionDetail->penjual
+ ]
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -160,7 +204,7 @@ class AdminRefundController extends Controller
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
->join('users as b', 'transactions.pembeli', '=', 'b.email')
->join('users as s', 'transactions.penjual', '=', 's.email')
- ->latest()
+ ->latest('refunds.updated_at')
->select('refunds.id as id', DB::raw("CONCAT(b.nama_depan,' ', b.nama_belakang) as pembeli"), DB::raw("CONCAT(s.nama_depan,' ', s.nama_belakang) as penjual"), 'transactions.nama_barang as nama_barang', 'refunds.total as total', 'refunds.created_at', 'refunds.due_date', 'refunds.status');
if ($request->has('search') && !empty($request->search['value'])) {
diff --git a/app/Http/Controllers/Admin/Setting/AdminSettingController.php b/app/Http/Controllers/Admin/Setting/AdminSettingController.php
index d182fdc..74050b3 100644
--- a/app/Http/Controllers/Admin/Setting/AdminSettingController.php
+++ b/app/Http/Controllers/Admin/Setting/AdminSettingController.php
@@ -86,7 +86,7 @@ class AdminSettingController extends Controller
public function listSetting(Request $request){
try{
- $subQuery = Setting::latest()->select('id','bulan','tahun','persentase','status');
+ $subQuery = Setting::select('id','bulan','tahun','persentase','status')->orderBy('tahun', 'DESC')->orderBy('bulan', 'DESC');
if($request->has('search') && !empty($request->search['value'])){
$searchSetting = $request->search['value'];
diff --git a/app/Http/Controllers/Admin/Transaction/AdminTransactionController.php b/app/Http/Controllers/Admin/Transaction/AdminTransactionController.php
index ddbb842..29d6904 100644
--- a/app/Http/Controllers/Admin/Transaction/AdminTransactionController.php
+++ b/app/Http/Controllers/Admin/Transaction/AdminTransactionController.php
@@ -4,6 +4,8 @@ namespace App\Http\Controllers\Admin\Transaction;
use App\Models\Transaction;
use App\Http\Controllers\Controller;
+use App\Models\Notification;
+use App\Models\NotificationReceiver;
use App\Models\TransactionDescription;
use App\Models\TransactionUser;
use Illuminate\Http\Request;
@@ -52,6 +54,8 @@ class AdminTransactionController extends Controller
$result = json_decode($response->body(), true);
$code = $result['status_code'];
+ $transactionDetail = Transaction::where('id', $request->id)->first();
+
if($code == '200'){
try {
DB::beginTransaction();
@@ -71,11 +75,33 @@ class AdminTransactionController extends Controller
'deskripsi' => 'Admin telah menerima pembayaran transaksi dan dilanjutkan ke penjual.',
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Diterima',
+ 'content' => 'Transaksi telah diterima dan akan dilanjutkan. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => 'Transaksi telah diterima...',
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->penjual,
+ 'notification_id' => $notif->id
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->pembeli,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
- 'message' => 'Transaksi telah diterima.'
+ 'message' => 'Transaksi telah diterima.',
+ 'receivers' => [
+ $transactionDetail->penjual,
+ $transactionDetail->pembeli
+ ]
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -111,6 +137,8 @@ class AdminTransactionController extends Controller
$result = json_decode($response->body(), true);
$code = $result['status_code'];
+ $transactionDetail = Transaction::where('id', $request->id)->first();
+
if($code == '200'){
try {
DB::beginTransaction();
@@ -130,11 +158,26 @@ class AdminTransactionController extends Controller
'deskripsi' => 'Admin telah menolak pembayaran. Alasan: '.$request->compaint,
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Ditolak',
+ 'content' => 'Transaksi anda ditolak oleh Admin. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => 'Transaksi anda ditolak...',
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->pembeli,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
- 'message' => 'Transaksi telah ditolak.'
+ 'message' => 'Transaksi telah ditolak.',
+ 'receivers' => $transactionDetail->pembeli
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -159,7 +202,7 @@ class AdminTransactionController extends Controller
try {
$subQuery = Transaction::join('users as b', 'transactions.pembeli', '=', 'b.email')
->join('users as s', 'transactions.penjual', '=', 's.email')
- ->latest()
+ ->latest('transactions.updated_at')
->select('transactions.id', 'transactions.nama_barang', DB::raw("CONCAT(b.nama_depan,' ',b.nama_belakang) as nama_pembeli"), DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"), 'transactions.total_harga', 'transactions.created_at', 'transactions.status_transaksi');
if ($request->has('search') && !empty($request->search['value'])) {
diff --git a/app/Http/Controllers/Admin/User/AdminUserController.php b/app/Http/Controllers/Admin/User/AdminUserController.php
index bf4974e..d76cbb4 100644
--- a/app/Http/Controllers/Admin/User/AdminUserController.php
+++ b/app/Http/Controllers/Admin/User/AdminUserController.php
@@ -4,9 +4,12 @@ namespace App\Http\Controllers\Admin\User;
use App\Models\User;
use App\Http\Controllers\Controller;
+use App\Mail\approveUser;
+use App\Mail\denyUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Mail;
use Yajra\DataTables\DataTables;
use Throwable;
@@ -59,6 +62,13 @@ class AdminUserController extends Controller
public function approveUser(Request $request)
{
+ $user = User::where('id', $request->id)->first();
+ $email = $user->email;
+
+ $content = [
+ 'email' => $email,
+ ];
+
try {
DB::beginTransaction();
@@ -66,6 +76,8 @@ class AdminUserController extends Controller
'status' => 'Finished',
]);
+ Mail::to($email)->send(new approveUser($content));
+
DB::commit();
return response()->json([
@@ -81,6 +93,15 @@ class AdminUserController extends Controller
public function denyUser(Request $request)
{
+ $user = User::where('id', $request->id)->first();
+ $email = $user->email;
+ $keterangan = $request->keterangan;
+
+ $content = [
+ 'keterangan' => $keterangan,
+ 'email' => $email,
+ ];
+
try {
DB::beginTransaction();
@@ -89,6 +110,8 @@ class AdminUserController extends Controller
'keterangan' => $request->keterangan,
]);
+ Mail::to($email)->send(new denyUser($content));
+
DB::commit();
return response()->json([
@@ -107,7 +130,7 @@ class AdminUserController extends Controller
try {
$subQuery = User::where('role', 'User')
->orderByRaw("CASE WHEN status = 'Progress' THEN 1 WHEN status = 'Finished' THEN 2 WHEN status = 'Rejected' THEN 3 ELSE 4 END ASC")
- ->latest()
+ ->latest('transactions.updated_at')
->select('users.id', DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"), 'users.email', 'users.foto_profile', 'users.status', 'users.created_at as tanggal_daftar');
if ($request->has('search') && !empty($request->search['value'])) {
@@ -146,6 +169,17 @@ class AdminUserController extends Controller
$url .
'">Detail
+ ';
+ if($row->status == 'Rejected'){
+ $html_code .= '
+
Hapus
+
+ ';
+ }
+ $html_code .= '
';
return $html_code;
diff --git a/app/Http/Controllers/Login/LoginController.php b/app/Http/Controllers/Login/LoginController.php
index c4f2fdf..651e0a0 100644
--- a/app/Http/Controllers/Login/LoginController.php
+++ b/app/Http/Controllers/Login/LoginController.php
@@ -23,6 +23,7 @@ use Laravolt\Indonesia\Models\City;
use Laravolt\Indonesia\Models\District;
use Laravolt\Indonesia\Models\Province;
use Laravolt\Indonesia\Models\Village;
+use Pusher\Pusher;
use Ramsey\Uuid\Uuid;
class LoginController extends Controller
@@ -263,6 +264,19 @@ class LoginController extends Controller
DB::commit();
+ $options = [
+ 'cluster' => 'ap1',
+ 'useTLS' => true,
+ ];
+
+ $pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
+
+ $payload = [
+ 'service' => 'User'
+ ];
+
+ $pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload);
+
return response()->json([
'status' => true,
'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja',
diff --git a/app/Http/Controllers/User/Contact/UserContactController.php b/app/Http/Controllers/User/Contact/UserContactController.php
index 1311a97..f6c3fba 100644
--- a/app/Http/Controllers/User/Contact/UserContactController.php
+++ b/app/Http/Controllers/User/Contact/UserContactController.php
@@ -26,15 +26,15 @@ class UserContactController extends Controller
{
if($request->input == '' || $request->input == null){
$data = DB::table('contacts')
- ->join('users', 'contacts.relasi_kontak', '=', 'users.email')
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang')
- ->where('contacts.pemilik_kontak', '=', Auth::user()->email)
+ ->join('users', 'contacts.relasi_kontak', '=', 'users.email')
+ ->where('contacts.pemilik_kontak', '=', auth()->user()->email)
->paginate(10);
}else{
$data = DB::table('contacts')
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang')
- ->where('contacts.pemilik_kontak', '=', Auth::user()->email)
+ ->where('contacts.pemilik_kontak', '=', auth()->user()->email)
->whereRaw(DB::raw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($request->input).'%']))
->paginate(10);
}
@@ -143,7 +143,8 @@ class UserContactController extends Controller
->select(
'contacts.id',
DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),
- );
+ )
+ ->orderBy('nama_lengkap');
if($request->has('search') && !empty($request->search['value'])){
$searchContact = $request->search['value'];
diff --git a/app/Http/Controllers/User/Dashboard/UserDashboardController.php b/app/Http/Controllers/User/Dashboard/UserDashboardController.php
index 28b5067..27bf535 100644
--- a/app/Http/Controllers/User/Dashboard/UserDashboardController.php
+++ b/app/Http/Controllers/User/Dashboard/UserDashboardController.php
@@ -4,56 +4,646 @@ namespace App\Http\Controllers\User\Dashboard;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
-use App\Models\RefundUser;
use App\Models\Transaction;
use Carbon\Carbon;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Log;
-use Throwable;
+use DateInterval;
+use DateTime;
class UserDashboardController extends Controller
{
public function index()
{
- $currentMonth = Carbon::now()->month;
- $currentYear = Carbon::now()->year;
- $currentRole = 'Pembeli';
+ $today = new DateTime();
+ $todayDate = $today->format('Y-m-d');
+ $pickDate = new DateTime();
+ $interval = new DateInterval('P29D');
+ $start = $pickDate->sub($interval);
+ $startDate = $start->format('Y-m-d');
- $countCreated = Transaction::where('status_transaksi', 'created')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->where('pembeli', auth()->user()->email)
- ->count();
+ $intervalBefore = new DateInterval('P1D');
+ $intervalBeforeStart = new DateInterval('P29D');
+ $endBefore = $pickDate->sub($intervalBefore);
+ $endBeforeDate = $endBefore->format('Y-m-d');
+ $startBefore = $pickDate->sub($intervalBeforeStart);
+ $startBeforeDate = $startBefore->format('Y-m-d');
- $countPending = Transaction::where('status_pembayaran', 'pending')
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->where('pembeli', auth()->user()->email)
- ->count();
+ // Semua
+ $countAllFinished = Transaction::whereIn('status_transaksi', ['finished', 'done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
- $countFailure = Transaction::whereIn('status_pembayaran', ['cancel', 'expire', 'failure'])
- ->whereMonth('updated_at', $currentMonth)
- ->whereYear('updated_at', $currentYear)
- ->where('pembeli', auth()->user()->email)
- ->count();
+ $countAllPending = Transaction::where('status_transaksi', 'created')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
- $sumRefund = '';
+ $countAllProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
- $sumTransaksi = '';
+ $countAllCanceled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
- return view('user.index');
+ $countAllRefund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $countAllIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ // Pembeli
+ $countBuyerFinished = Transaction::whereIn('status_transaksi', ['finished', 'done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerPaid = Transaction::where('status_transaksi', 'success')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerPending = Transaction::where('status_transaksi', 'created')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundPending = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'pending')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundApproved = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'refund')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundDenied = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'deny')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ // Penjual
+ $countSellerPending = Transaction::where('status_transaksi', 'success')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerFinished = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerProcessed = Transaction::where('status_transaksi', 'process')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerSending = Transaction::where('status_transaksi', 'sending')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerSent = Transaction::where('status_transaksi', 'sent')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerRefund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $totalTransaction = Transaction::whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $totalTransactionSebelum = Transaction::whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $rateTransaction = floatval((floatval($totalTransaction) - floatval($totalTransactionSebelum)) * 100) / ($totalTransactionSebelum == 0 ? 1 : floatval($totalTransactionSebelum));
+
+ $totalPemasukan = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->sum('total_harga');
+
+ $totalPemasukanSebelum = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where('penjual', auth()->user()->email)
+ ->sum('total_harga');
+
+ $ratePemasukan = floatval((floatval($totalPemasukan) - floatval($totalPemasukanSebelum)) * 100) / ($totalPemasukanSebelum == 0 ? 1 : floatval($totalPemasukanSebelum));
+
+ $totalPengeluaran = Transaction::whereIn('status_transaksi', ['finished','done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->sum('total_harga');
+
+ $totalPengeluaranSebelum = Transaction::whereIn('status_transaksi', ['finished','done'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where('pembeli', auth()->user()->email)
+ ->sum('total_harga');
+
+ $ratePengeluaran = floatval(((floatval($totalPengeluaran) - floatval($totalPengeluaranSebelum)) * 100) / ($totalPengeluaranSebelum == 0 ? 1 : floatval($totalPengeluaranSebelum)));
+
+ $totalProfit = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_harga');
+
+ $totalProfitSebelum = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_harga');
+
+ $rateProfit = floatval(((floatval($totalProfit) - floatval($totalProfitSebelum))*100)/($totalProfitSebelum == 0 ? 1 : floatval($totalProfitSebelum)));
+
+ $dataLabel = [];
+ $dataChartTransaction = [];
+ $dataChartRefund = [];
+ $dataChartPemasukan = [];
+ $dataChartPengeluaran = [];
+
+ $startDate = $start;
+ $intervalDate = new DateInterval('P1D');
+ $todayDate = $today;
+ $endDate = $todayDate->add($intervalDate);
+
+ for ($date = clone $startDate; $date <= $endDate; $date->modify('+1 day')) {
+ $transaction = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_keuntungan');
+
+ $refund = Transaction::join('refunds','refunds.transaction_id','=','transactions.id')
+ ->where('status_transaksi', 'refund')
+ ->where('status','refund')
+ ->whereDate('transactions.created_at', $date->format('Y-m-d'))
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_keuntungan');
+
+ $pemasukan = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->where('penjual', auth()->user()->email)
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_harga');
+
+ $pengeluaran = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->where('pembeli', auth()->user()->email)
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_harga');
+
+ $dataChartTransaction[] = floatval($transaction);
+ $dataChartRefund[] = floatval($refund);
+ $dataChartPemasukan[] = floatval($pemasukan);
+ $dataChartPengeluaran[] = floatval($pengeluaran);
+ $dataLabel[] = $date->format('d/m/Y');
+ }
+
+ return view('user.index', compact(
+ 'countAllFinished',
+ 'countAllPending',
+ 'countAllProcessed',
+ 'countAllCanceled',
+ 'countAllRefund',
+ 'countAllIndicated',
+ 'countBuyerFinished',
+ 'countBuyerPaid',
+ 'countBuyerPending',
+ 'countBuyerProcessed',
+ 'countBuyerCancelled',
+ 'countBuyerRefundPending',
+ 'countBuyerRefundApproved',
+ 'countBuyerRefundDenied',
+ 'countBuyerIndicated',
+ 'countSellerPending',
+ 'countSellerFinished',
+ 'countSellerProcessed',
+ 'countSellerSending',
+ 'countSellerSent',
+ 'countSellerCancelled',
+ 'countSellerRefund',
+ 'countSellerIndicated',
+ 'totalTransaction',
+ 'rateTransaction',
+ 'totalPemasukan',
+ 'ratePemasukan',
+ 'totalPengeluaran',
+ 'ratePengeluaran',
+ 'rateProfit',
+ 'dataLabel',
+ 'dataChartTransaction',
+ 'dataChartRefund',
+ 'dataChartPemasukan',
+ 'dataChartPengeluaran'
+ ));
}
- public function getSelectedChart(){
- $currentMonth = Carbon::now()->month;
- $currentYear = Carbon::now()->year;
- $currentRole = 'Pembeli';
+ public function getDataBySearch(Request $request)
+ {
+ $startDate = $request->startDate;
+ $todayDate = $request->endDate;
+ $pickDate = new DateTime($startDate);
+ $start = new DateTime($startDate);
+ $today = new DateTime($todayDate);
+ $interval = $start->diff($today);
- if($currentRole == 'Pembeli'){
+ $intervalBefore = new DateInterval('P1D');
+ $intervalBeforeStart = new DateInterval('P'.$interval->format('%a').'D');
+ $endBefore = $pickDate->sub($intervalBefore);
+ $endBeforeDate = $endBefore->format('Y-m-d');
+ $startBefore = $pickDate->sub($intervalBeforeStart);
+ $startBeforeDate = $startBefore->format('Y-m-d');
- }else{
+ // Semua
+ $countAllFinished = Transaction::where('status_transaksi', 'Finished')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+ $countAllPending = Transaction::where('status_transaksi', 'created')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $countAllProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $countAllCanceled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $countAllRefund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $countAllIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ // Pembeli
+ $countBuyerFinished = Transaction::where('status_transaksi', 'finished')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerPaid = Transaction::where('status_transaksi', 'success')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerPending = Transaction::where('status_transaksi', 'created')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerProcessed = Transaction::whereIn('status_transaksi', ['process', 'sending', 'sent'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundPending = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'pending')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundApproved = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'refund')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerRefundDenied = Transaction::join('refunds', 'refunds.transaction_id', '=', 'transactions.id')
+ ->where('refunds.status', 'deny')
+ ->whereDate('transactions.created_at', '>=', $startDate)
+ ->whereDate('transactions.created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ $countBuyerIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->count();
+
+ // Penjual
+ $countSellerPending = Transaction::where('status_transaksi', 'success')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerFinished = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerProcessed = Transaction::where('status_transaksi', 'process')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerSending = Transaction::where('status_transaksi', 'sending')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerSent = Transaction::where('status_transaksi', 'sent')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerCancelled = Transaction::where('status_transaksi', 'failure')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerRefund = Transaction::where('status_transaksi', 'refund')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $countSellerIndicated = Transaction::where('status_transaksi', 'challenge')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->count();
+
+ $totalTransaction = Transaction::whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $totalTransactionSebelum = Transaction::whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->count();
+
+ $rateTransaction = floatval((floatval($totalTransaction) - floatval($totalTransactionSebelum)) * 100) / ($totalTransactionSebelum == 0 ? 1 : floatval($totalTransactionSebelum));
+
+ $totalPemasukan = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('penjual', auth()->user()->email)
+ ->sum('total_harga');
+
+ $totalPemasukanSebelum = Transaction::where('status_transaksi', 'done')
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where('penjual', auth()->user()->email)
+ ->sum('total_harga');
+
+ $ratePemasukan = floatval((floatval($totalPemasukan) - floatval($totalPemasukanSebelum)) * 100) / ($totalPemasukanSebelum == 0 ? 1 : floatval($totalPemasukanSebelum));
+
+ $totalPengeluaran = Transaction::whereIn('status_transaksi', ['finished','done'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where('pembeli', auth()->user()->email)
+ ->sum('total_harga');
+
+ $totalPengeluaranSebelum = Transaction::whereIn('status_transaksi', ['finished','done'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where('pembeli', auth()->user()->email)
+ ->sum('total_harga');
+
+ $ratePengeluaran = floatval(((floatval($totalPengeluaran) - floatval($totalPengeluaranSebelum)) * 100) / ($totalPengeluaranSebelum == 0 ? 1 : floatval($totalPengeluaranSebelum)));
+
+ $totalProfit = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startDate)
+ ->whereDate('created_at', '<=', $todayDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_harga');
+
+ $totalProfitSebelum = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', '>=', $startBeforeDate)
+ ->whereDate('created_at', '<=', $endBeforeDate)
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_harga');
+
+ $rateProfit = floatval(((floatval($totalProfit) - floatval($totalProfitSebelum))*100)/($totalProfitSebelum == 0 ? 1 : floatval($totalProfitSebelum)));
+
+ $dataLabel = [];
+ $dataChartTransaction = [];
+ $dataChartRefund = [];
+ $dataChartPemasukan = [];
+ $dataChartPengeluaran = [];
+
+ $first = $start;
+ $intervalDate = new DateInterval('P1D');
+ $lastDate = $today;
+ $last = $lastDate->add($intervalDate);
+
+ for ($date = clone $first; $date <= $last; $date->modify('+1 day')) {
+ $transaction = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_keuntungan');
+
+ $refund = Transaction::join('refunds','refunds.transaction_id','=','transactions.id')
+ ->where('status_transaksi', 'refund')
+ ->where('status','refund')
+ ->whereDate('transactions.created_at', $date->format('Y-m-d'))
+ ->where(function ($a) {
+ $a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
+ })
+ ->sum('total_keuntungan');
+
+ $pemasukan = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->where('penjual', auth()->user()->email)
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_harga');
+
+ $pengeluaran = Transaction::whereIn('status_transaksi', ['done', 'finished'])
+ ->where('pembeli', auth()->user()->email)
+ ->whereDate('created_at', $date->format('Y-m-d'))
+ ->sum('total_harga');
+
+ $dataChartTransaction[] = floatval($transaction);
+ $dataChartRefund[] = floatval($refund);
+ $dataChartPemasukan[] = floatval($pemasukan);
+ $dataChartPengeluaran[] = floatval($pengeluaran);
+ $dataLabel[] = $date->format('d/m/Y');
}
+
+ return response()->json([
+ 'countAllFinished' => $countAllFinished,
+ 'countAllPending' => $countAllPending,
+ 'countAllProcessed' => $countAllProcessed,
+ 'countAllCanceled' => $countAllCanceled,
+ 'countAllRefund' => $countAllRefund,
+ 'countAllIndicated' => $countAllIndicated,
+ 'countBuyerFinished' => $countBuyerFinished,
+ 'countBuyerPaid' => $countBuyerPaid,
+ 'countBuyerPending' => $countBuyerPending,
+ 'countBuyerProcessed' => $countBuyerProcessed,
+ 'countBuyerCancelled' => $countBuyerCancelled,
+ 'countBuyerRefundPending' => $countBuyerRefundPending,
+ 'countBuyerRefundApproved' => $countBuyerRefundApproved,
+ 'countBuyerRefundDenied' => $countBuyerRefundDenied,
+ 'countBuyerIndicated' => $countBuyerIndicated,
+ 'countSellerPending' => $countSellerPending,
+ 'countSellerFinished' => $countSellerFinished,
+ 'countSellerProcessed' => $countSellerProcessed,
+ 'countSellerSending' => $countSellerSending,
+ 'countSellerSent' => $countSellerSent,
+ 'countSellerCancelled' => $countSellerCancelled,
+ 'countSellerRefund' => $countSellerRefund,
+ 'countSellerIndicated' => $countSellerIndicated,
+ 'totalTransaction' => $totalTransaction,
+ 'rateTransaction' => $rateTransaction,
+ 'totalPemasukan' => $totalPemasukan,
+ 'ratePemasukan' => $ratePemasukan,
+ 'totalPengeluaran' => $totalPengeluaran,
+ 'ratePengeluaran' => $ratePengeluaran,
+ 'rateProfit' => $rateProfit,
+ 'dataLabel' => $dataLabel,
+ 'dataChartTransaction' => $dataChartTransaction,
+ 'dataChartRefund' => $dataChartRefund,
+ 'dataChartPemasukan' => $dataChartPemasukan,
+ 'dataChartPengeluaran' => $dataChartPengeluaran
+ ]);
}
}
diff --git a/app/Http/Controllers/User/Notification/UserNotification.php b/app/Http/Controllers/User/Notification/UserNotification.php
index 5d9688b..5bf1eb1 100644
--- a/app/Http/Controllers/User/Notification/UserNotification.php
+++ b/app/Http/Controllers/User/Notification/UserNotification.php
@@ -8,6 +8,7 @@ use App\Models\NotificationReceiver;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
+use Pusher\Pusher;
use Throwable;
use Yajra\DataTables\Facades\DataTables;
@@ -23,7 +24,7 @@ class UserNotification extends Controller
try {
$subQuery = Notification::join('notification_receivers','notifications.id','=','notification_receivers.notification_id')
->where('notification_receivers.receiver','=',auth()->user()->email)
- ->latest()
+ ->latest('notification_receivers.updated_at')
->select('notifications.id', 'notifications.title', 'notifications.teaser', 'notification_receivers.created_at', 'notification_receivers.status');
if ($request->has('search') && !empty($request->search['value'])) {
@@ -114,13 +115,53 @@ class UserNotification extends Controller
public function markAllAsRead()
{
- NotificationReceiver::where('receiver', auth()->user()->email)->update([
+ $result = NotificationReceiver::where('receiver', auth()->user()->email)->update([
'status' => 'read',
]);
- return response()->json([
- 'status' => true,
- 'message' => 'Berhasil',
- ]);
+ if($result){
+ return response()->json([
+ 'status' => true,
+ 'message' => 'Berhasil',
+ ]);
+ }else{
+ return response()->json([
+ 'status' => false,
+ 'message' => 'Gagal',
+ ]);
+ Log::error($result);
+ }
+ }
+
+ public function updateNewNotification(Request $request)
+ {
+ $options = [
+ 'cluster' => 'ap1',
+ 'useTLS' => true,
+ ];
+
+ $pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
+
+ $payload = [
+ 'receivers' => $request->receiver,
+ ];
+
+ $pusher->trigger('chanel-update-notifikasi', 'event-update-notifikasi', $payload);
+ }
+
+ public function updateNotificationToAdmin(Request $request)
+ {
+ $options = [
+ 'cluster' => 'ap1',
+ 'useTLS' => true,
+ ];
+
+ $pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
+
+ $payload = [
+ 'service' => $request->service
+ ];
+
+ $pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload);
}
}
diff --git a/app/Http/Controllers/User/Pembeli/PembeliController.php b/app/Http/Controllers/User/Pembeli/PembeliController.php
index d65ec84..0429467 100644
--- a/app/Http/Controllers/User/Pembeli/PembeliController.php
+++ b/app/Http/Controllers/User/Pembeli/PembeliController.php
@@ -4,6 +4,8 @@ namespace App\Http\Controllers\User\Pembeli;
use App\Http\Controllers\Controller;
use App\Models\Contact;
+use App\Models\Notification;
+use App\Models\NotificationReceiver;
use App\Models\Refund;
use App\Models\Setting;
use App\Models\Transaction;
@@ -15,6 +17,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
+use Pusher\Pusher;
use Throwable;
use Yajra\DataTables\DataTables;
@@ -84,7 +87,6 @@ class PembeliController extends Controller
$batas_pembayaran = $now->addDays(1)->toTimeString();
$batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString();
- $batas_pengiriman_barang_awal = $now->addDays(3)->toDateTimeString();
$batas_pengiriman_barang_akhir = $now->addDays(4)->toDateTimeString();
$status = 'created';
@@ -109,7 +111,6 @@ class PembeliController extends Controller
'status_transaksi' => $status,
'batas_pembayaran' => $batas_pembayaran,
'batas_konfirmasi_transaksi' => $batas_konfirmasi_transaksi,
- 'batas_pengiriman_barang_awal' => $batas_pengiriman_barang_awal,
'batas_pengiriman_barang_akhir' => $batas_pengiriman_barang_akhir,
]);
@@ -214,6 +215,8 @@ class PembeliController extends Controller
public function finishTransaction(Request $request)
{
+ $transactionDetail = Transaction::where('id', $request->id)->first();
+
try {
DB::beginTransaction();
@@ -231,11 +234,23 @@ class PembeliController extends Controller
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '. Uang akan dikirim ke penjual.',
]);
+ $notif = Notification::create([
+ 'title' => 'Transaksi Selesai',
+ 'content' => auth()->user()->nama_depan.' telah menyelesaikan transaksi. Silahkan terima uang anda.',
+ 'teaser' => auth()->user()->nama_depan.' telah...'
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->penjual,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Pesanan anda selesai dan uang akan dikirim ke penjual. Terima kasih telah menggunakan Rekber.',
+ 'receiver' => $transactionDetail->penjual
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -253,6 +268,8 @@ class PembeliController extends Controller
{
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
+ $transactionDetail = Transaction::where('id', $request->id)->first();
+
$response = Http::withOptions([
'verify' => false,
])
@@ -307,11 +324,25 @@ class PembeliController extends Controller
'user' => auth()->user()->email,
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Pembayaran Sukses',
+ 'content' => auth()->user()->nama_depan.' telah membayar transaksi. Silahkan proses transaksi ini jika memang dituju kepada anda. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => auth()->user()->nama_depan.' telah...'
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->penjual,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Pembayaran sukses',
+ 'receiver' => $transactionDetail->penjual
]);
} elseif ($transaction == 'challenge') {
TransactionDescription::create([
@@ -324,6 +355,19 @@ class PembeliController extends Controller
'keterangan' => $result['status_message'],
]);
+ $options = [
+ 'cluster' => 'ap1',
+ 'useTLS' => true,
+ ];
+
+ $pusher = new Pusher('3e5bdc20dddd7fbc655e', 'f2274c37c616d29ff590', '1659859', $options);
+
+ $payload = [
+ 'service' => 'Transaksi'
+ ];
+
+ $pusher->trigger('chanel-update-notifikasi-untuk-admin', 'event-update-notifikasi-untuk-admin', $payload);
+
DB::commit();
return response()->json([
@@ -471,11 +515,25 @@ class PembeliController extends Controller
'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->complaint,
]);
+ $url = route('user-transaction.show', ['id' => $transaction->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Dibatalkan',
+ 'content' => auth()->user()->nama_depan.' telah membatalkan transaksi. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => auth()->user()->nama_depan.' telah...'
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transaction->penjual,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Transaksi telah dibatalkan.',
+ 'receiver' => $transaction->penjual
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -740,7 +798,8 @@ class PembeliController extends Controller
'transactions.created_at',
'transactions.status_transaksi',
'transactions.token'
- );
+ )
+ ->latest('transactions.updated_at');
if($request->has('search') && !empty($request->search['value'])){
$searchPembeli = $request->search['value'];
diff --git a/app/Http/Controllers/User/Penjual/PenjualController.php b/app/Http/Controllers/User/Penjual/PenjualController.php
index ade1002..4fffa99 100644
--- a/app/Http/Controllers/User/Penjual/PenjualController.php
+++ b/app/Http/Controllers/User/Penjual/PenjualController.php
@@ -3,6 +3,8 @@
namespace App\Http\Controllers\User\Penjual;
use App\Http\Controllers\Controller;
+use App\Models\Notification;
+use App\Models\NotificationReceiver;
use App\Models\Refund;
use App\Models\Transaction;
use App\Models\TransactionDescription;
@@ -26,7 +28,8 @@ class PenjualController extends Controller
try {
$subQuery = Transaction::join('users', 'transactions.pembeli', '=', 'users.email')
->where('transactions.penjual', auth()->user()->email)
- ->select('transactions.id', DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_pembeli"), 'transactions.nama_barang', 'transactions.total_harga', 'transactions.created_at', 'transactions.status_transaksi');
+ ->select('transactions.id', DB::raw("CONCAT(users.nama_depan,' ',users.nama_belakang) as nama_pembeli"), 'transactions.nama_barang', 'transactions.total_harga', 'transactions.created_at', 'transactions.status_transaksi')
+ ->latest('transactions.updated_at');
if ($request->has('search') && !empty($request->search['value'])) {
$searchPenjual = $request->search['value'];
@@ -103,7 +106,7 @@ class PenjualController extends Controller
';
}
- if ($row->status_transaksi == 'progress') {
+ if ($row->status_transaksi == 'process') {
$html_code .=
'
id)->first();
+
try {
DB::beginTransaction();
@@ -172,11 +177,25 @@ class PenjualController extends Controller
'deskripsi' => 'Transaksi telah diterima oleh ' . auth()->user()->nama_depan,
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Diproses',
+ 'content' => auth()->user()->nama_depan.' telah menerima dan memproses transaksi. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => auth()->user()->nama_depan.' telah...'
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->pembeli,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
+ 'receiver' => $transactionDetail->pembeli
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -241,11 +260,25 @@ class PenjualController extends Controller
'deskripsi' => 'Transaksi ditolak ' . auth()->user()->nama_depan . ', uang akan dikembalikan ke pembeli. Alasan : ' . $request->complaint,
]);
+ $url = route('user-transaction.show', ['id' => $transaction->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Diproses',
+ 'content' => auth()->user()->nama_depan.' telah menolak transaksi.Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => auth()->user()->nama_depan.' telah...'
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transaction->pembeli,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
+ 'receiver' => $transaction->pembeli
]);
} catch (Throwable $e) {
DB::rollBack();
@@ -305,6 +338,8 @@ class PenjualController extends Controller
public function sentOrder(Request $request)
{
+ $transactionDetail = Transaction::where('id', $request->transaction_id)->first();
+
try {
DB::beginTransaction();
@@ -332,11 +367,25 @@ class PenjualController extends Controller
'bukti_foto' => $bukti_foto,
]);
+ $url = route('user-transaction.show', ['id' => $transactionDetail->id]);
+
+ $notif = Notification::create([
+ 'title' => 'Transaksi Sudah Tiba',
+ 'content' => 'Transaksi sudah tiba dan silahkan periksa terlebih dahulu sebelum menyelesaikan transaksi atau mengajukan refund. Klik disini untuk langsung ke detail transaksi.',
+ 'teaser' => 'Transaksi sudah tiba dan silahkan per...',
+ ]);
+
+ NotificationReceiver::create([
+ 'receiver' => $transactionDetail->pembeli,
+ 'notification_id' => $notif->id
+ ]);
+
DB::commit();
return response()->json([
'status' => true,
'message' => 'Pesanan telah sampai di tempat pembeli.',
+ 'receiver' => $transactionDetail->pembeli
]);
} catch (Throwable $e) {
DB::rollBack();
diff --git a/app/Http/Controllers/User/Refund/UserRefundController.php b/app/Http/Controllers/User/Refund/UserRefundController.php
index 317e4c4..a94b207 100644
--- a/app/Http/Controllers/User/Refund/UserRefundController.php
+++ b/app/Http/Controllers/User/Refund/UserRefundController.php
@@ -83,6 +83,7 @@ class UserRefundController extends Controller
return response()->json([
'status' => true,
'message' => 'Permintaan refund anda telah dikirim ke admin untuk direview. Mohon tunggu maksimal 2 hari.',
+ 'service' => 'Refund'
]);
}catch(Throwable $e){
DB::rollback();
@@ -115,7 +116,8 @@ class UserRefundController extends Controller
'refunds.status',
'transactions.nama_barang',
DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"),
- );
+ )
+ ->latest('refunds.updated_at');
if($request->has('search') && !empty($request->search['value'])){
$searchRefund = $request->search['value'];
diff --git a/app/Mail/approveUser.php b/app/Mail/approveUser.php
new file mode 100644
index 0000000..4fe6325
--- /dev/null
+++ b/app/Mail/approveUser.php
@@ -0,0 +1,59 @@
+content = $content;
+ }
+
+ /**
+ * Get the message envelope.
+ */
+ // public function envelope(): Envelope
+ // {
+ // return new Envelope(
+ // subject: 'Approve User',
+ // );
+ // }
+
+ /**
+ * Get the message content definition.
+ */
+ // public function content(): Content
+ // {
+ // return new Content(
+ // view: 'view.name',
+ // );
+ // }
+
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ // public function attachments(): array
+ // {
+ // return [];
+ // }
+
+ public function build(){
+ return $this->subject('Pendaftaran Akun Sukses')->view('email.approve-user-email');
+ }
+}
diff --git a/app/Mail/denyUser.php b/app/Mail/denyUser.php
new file mode 100644
index 0000000..1c8ec4a
--- /dev/null
+++ b/app/Mail/denyUser.php
@@ -0,0 +1,59 @@
+content = $content;
+ }
+
+ /**
+ * Get the message envelope.
+ */
+ // public function envelope(): Envelope
+ // {
+ // return new Envelope(
+ // subject: 'Deny User',
+ // );
+ // }
+
+ /**
+ * Get the message content definition.
+ */
+ // public function content(): Content
+ // {
+ // return new Content(
+ // view: 'view.name',
+ // );
+ // }
+
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ // public function attachments(): array
+ // {
+ // return [];
+ // }
+
+ public function build(){
+ return $this->subject('Pendaftaran Akun Gagal')->view('email.deny-user-email');
+ }
+}
diff --git a/app/Models/transaction.php b/app/Models/transaction.php
index 2472671..ff02bb3 100644
--- a/app/Models/transaction.php
+++ b/app/Models/transaction.php
@@ -30,7 +30,6 @@ class Transaction extends Model
'status_transaksi',
'status_pembayaran',
'batas_pembayaran',
- 'batas_pengiriman_barang_awal',
'batas_pengiriman_barang_akhir',
'nama_bank_penjual',
'no_rek_penjual'
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index a324d5b..a915de8 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -34,7 +34,8 @@ class UserFactory extends Factory
'status'=> $this->faker->randomElement(['Progress', 'Finished', 'Rejected']),
'gender' => $this->faker->randomElement(['Laki-laki', 'Perempuan']),
'kode_kelurahan' => '1101012002',
- 'keterangan' => $this->faker->sentence
+ 'keterangan' => $this->faker->sentence,
+ 'foto_profile' => 'face'.random_int(1,10).'.jpg'
];
}
diff --git a/database/migrations/2023_08_01_073859_create_transactions_table.php b/database/migrations/2023_08_01_073859_create_transactions_table.php
index e1c9da9..6df18e4 100644
--- a/database/migrations/2023_08_01_073859_create_transactions_table.php
+++ b/database/migrations/2023_08_01_073859_create_transactions_table.php
@@ -33,7 +33,6 @@ return new class extends Migration
$table->enum('status_pembayaran',['settlement','capture','pending','expire','failure','cancel','refund'])->nullable(); // status transaksi dari midtrans
$table->timestamp('batas_pembayaran')->nullable();
$table->timestamp('batas_konfirmasi_transaksi')->nullable();
- $table->timestamp('batas_pengiriman_barang_awal');
$table->timestamp('batas_pengiriman_barang_akhir');
$table->timestamp('tanggal_transaksi')->nullable();
$table->string('nama_bank_penjual');
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index be654e3..62f7879 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -50,6 +50,7 @@ class DatabaseSeeder extends Seeder
'persentase_kemiripan' => 100,
'gender' => $faker->randomElement(['Laki-laki', 'Perempuan']),
'kode_kelurahan' => '1101012002',
+ 'foto_profile' => 'face1.jpg'
]);
$user1 = User::factory()->create([
@@ -71,7 +72,8 @@ class DatabaseSeeder extends Seeder
'kode_kelurahan' => '1101012002',
'nama_bank' => 'mandiri',
'no_rek' => '019809210873',
- 'keterangan' => $faker->sentence()
+ 'keterangan' => $faker->sentence(),
+ 'foto_profile' => 'face2.jpg'
]);
$user2 = User::factory()->create([
@@ -93,7 +95,8 @@ class DatabaseSeeder extends Seeder
'kode_kelurahan' => '1101012002',
'nama_bank' => 'bca',
'no_rek' => '01980921',
- 'keterangan' => $faker->sentence()
+ 'keterangan' => $faker->sentence(),
+ 'foto_profile' => 'face3.jpg'
]);
User::factory(100)->create();
@@ -125,7 +128,6 @@ class DatabaseSeeder extends Seeder
'token' => 'asda',
'status_transaksi' => 'created',
'batas_pembayaran' => now(),
- 'batas_pengiriman_barang_awal' => now(),
'batas_pengiriman_barang_akhir' => now(),
'nama_bank_penjual' => $user2->nama_bank,
'no_rek_penjual' => $user2->no_rek,
@@ -140,6 +142,36 @@ class DatabaseSeeder extends Seeder
'deskripsi' => $user1->nama_depan . ' telah membuat transaksi baru dengan ' . $user2->nama_depan,
]);
+ $transaction = Transaction::create([
+ 'id' => Str::uuid(),
+ 'pembeli' => $user2->email,
+ 'penjual' => $user1->email,
+ 'nama_barang' => 'hah',
+ 'deskripsi_transaksi' => null,
+ 'satuan_barang' => 'barang',
+ 'harga_barang' => 2000,
+ 'jumlah_barang' => 2,
+ 'persentase_keuntungan' => 2,
+ 'total_keuntungan' => 2,
+ 'total_harga' => 2,
+ 'total_bayar' => 2,
+ 'token' => 'asda',
+ 'status_transaksi' => 'created',
+ 'batas_pembayaran' => now(),
+ 'batas_pengiriman_barang_akhir' => now(),
+ 'nama_bank_penjual' => $user1->nama_bank,
+ 'no_rek_penjual' => $user1->no_rek,
+ ]);
+
+ TransactionDescription::create([
+ 'transaction_id' => $transaction->id,
+ 'status' => 'pending',
+ 'user' => $user2->email,
+ 'judul' => 'fa fa-plus',
+ 'background' => 'bg-buyer',
+ 'deskripsi' => $user2->nama_depan . ' telah membuat transaksi baru dengan ' . $user1->nama_depan,
+ ]);
+
$transactionRefund = Transaction::create([
'id' => Str::uuid(),
'pembeli' => $user1->email,
@@ -157,7 +189,6 @@ class DatabaseSeeder extends Seeder
'status_transaksi' => 'success',
'status_pembayaran' => 'refund',
'batas_pembayaran' => now(),
- 'batas_pengiriman_barang_awal' => now(),
'batas_pengiriman_barang_akhir' => now(),
'nama_bank_penjual' => $user2->nama_bank,
'no_rek_penjual' => $user2->no_rek,
diff --git a/public/assets/css/style.css b/public/assets/css/style.css
index daad49a..37ab2c8 100644
--- a/public/assets/css/style.css
+++ b/public/assets/css/style.css
@@ -1271,9 +1271,9 @@ select.form-control:not([size]):not([multiple]) {
margin-bottom: -15px;
}
-.card.card-statistic-2 .card-chart canvas {
+/* .card.card-statistic-2 .card-chart canvas {
height: 90px !important;
-}
+} */
.card .card-stats {
width: 100%;
diff --git a/resources/views/Admin/index.blade.php b/resources/views/Admin/index.blade.php
index a33e1b2..4ae5cdd 100644
--- a/resources/views/Admin/index.blade.php
+++ b/resources/views/Admin/index.blade.php
@@ -4,109 +4,123 @@
-
+
-
List Transaction -
-
-
August
-
+
+
Transaksi
+
+
+
+
{{ $countSuccess }}
+
Selesai
+
+
+
{{ $countCancelled }}
+
Gagal
+
+
+
{{ $countProcessed }}
+
Diproses
+
+
+
{{ $countIndicated }}
+
Diterindikasi
+
+
+
{{ $countWaiting }}
+
Menunggu
-
-
-
{{ $countSuccess }}
-
Success
-
-
-
{{ $countPending }}
-
Pending
-
-
-
{{ $countCancelled }}
-
Canceled
-
-
-
{{ $countRefund }}
-
Refund
-
-
-
-
-
-
- {{ $totalTransaction }}
+
+
+
+
+ {{ $totalTransaction }} Transaksi
-
-
- 1.08%
- Since last week
+
+
+ {{ abs($rateTransaction) }}%
+ Dibandingkan sebelumnya
-
+
-
-
-
-
-
+
+
+
Refund
+
+
+
+
{{ $countPending }}
+
Menunggu
+
+
+
{{ $countApprove }}
+
Disetujui
+
+
+
{{ $countDeny }}
+
Ditolak
+
+
-
- {{ $totalRefund }}
+
+
+
+
+ {{ $totalRefund }} Pengajuan
-
-
- 5.27%
- Since last month
+
+
+ {{ abs($rateRefund) }}%
+ Dibandingkan sebelumnya
-
+
-
-
+
-
-
+
+
+
+
+
+
+ {{ $totalUser }} Pengguna
-
- {{ $totalUser }}
-
-
- 1.08%
- Since previous week
+
+
+ {{ abs($rateUser) }}%
+ Dibandingkan sebelumnya
@@ -115,18 +129,17 @@
-
- Pendapatan Hari Ini meningkat
- 5.27%
+
+
+ Pendapatan {{ $rateProfit == 0 ? 'sama' : ($rateProfit > 0 ? 'meningkat' : 'menurun') }}
+
+ {{ $rateProfit }}%
+
@@ -136,137 +149,60 @@
-
+
-
- -
-
-
-
-
Jilhan Haura
-
-
-
-
$68,714
+
+ @forelse ($dataTopUsers as $user)
+ -
+
+
+
+
+ {{ $user->jumlah_transaksi }} transaksi
+
-
-
-
$38,700
+
{{ $user->nama_lengkap }}
+
+
+
+
+
Rp
+ {{ number_format($user->total_transaksi_berhasil, 2, ',', '.') }}
+
+
+
+
+
+
Rp
+ {{ number_format($user->total_refund_berhasil, 2, ',', '.') }}
+
+
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
+
+ @empty
+ @endforelse
-
@@ -275,61 +211,15 @@
@include('admin.transaction.modal-tracking')
+@endsection
+@section('tambahan-js')
+
@endsection
diff --git a/resources/views/Admin/notification/create.blade.php b/resources/views/Admin/notification/create.blade.php
index aae1c32..7286fb8 100644
--- a/resources/views/Admin/notification/create.blade.php
+++ b/resources/views/Admin/notification/create.blade.php
@@ -1,5 +1,5 @@
@extends('layouts.main')
-@section('content')
+@section('tambahan-js')
+@endsection
+@section('content')
@include('user.contact.modal-detail-contact')
@include('user.contact.modal-add-contact')
+@endsection
+@section('tambahan-js')
+
@endsection
diff --git a/resources/views/User/notification/detail-notification.blade.php b/resources/views/User/notification/detail-notification.blade.php
index 3425642..cc08592 100644
--- a/resources/views/User/notification/detail-notification.blade.php
+++ b/resources/views/User/notification/detail-notification.blade.php
@@ -18,7 +18,7 @@
- {{ $notification->content }}
+ {!! $notification->content !!}
diff --git a/resources/views/User/notification/index.blade.php b/resources/views/User/notification/index.blade.php
index b80f5ed..4dbe768 100644
--- a/resources/views/User/notification/index.blade.php
+++ b/resources/views/User/notification/index.blade.php
@@ -1,12 +1,5 @@
@extends('layouts.main')
-@section('content')
-
+@section('tambahan-js')
+@endsection
+@section('content')
+
@include('user.refund.modal-keterangan-status')
+@endsection
+@section('tambahan-js')
+
@if (Session::has('message'))
+
+@endsection
diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php
index 8477d7f..b62dec6 100644
--- a/resources/views/layouts/main.blade.php
+++ b/resources/views/layouts/main.blade.php
@@ -9,6 +9,8 @@
@include('layouts.css')
+ @yield('css-tambahan')
+
@include('layouts.js')
@@ -29,8 +31,16 @@
@include('layouts.footer')
+ @yield('js-khusus')
+
@include('layouts.js-bawah')
+ @yield('js-header')
+
+ @yield('js-sidebar')
+
+ @yield('tambahan-js')
+