Notifikasi, email dan dashboard
This commit is contained in:
parent
d501cefc46
commit
fc7db3e110
@ -17,8 +17,6 @@ class ContactApiController extends Controller
|
|||||||
{
|
{
|
||||||
public function getListContact(Request $request)
|
public function getListContact(Request $request)
|
||||||
{
|
{
|
||||||
// $token = JWTAuth::getToken();
|
|
||||||
// $user = JWTAuth::user($token);
|
|
||||||
|
|
||||||
$data = DB::table('contacts')
|
$data = DB::table('contacts')
|
||||||
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
|
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\API\Notification;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class NotificationApiController extends Controller
|
||||||
|
{
|
||||||
|
public function listNotification(Request $request){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDetailNotification(Request $request){
|
||||||
|
$notification = Notification::where('id', $request->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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -8,76 +8,369 @@ use Carbon\Carbon;
|
|||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Models\Refund;
|
use App\Models\Refund;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use DateInterval;
|
||||||
|
use DateTime;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class AdminDashboardController extends Controller
|
class AdminDashboardController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$currentMonth = Carbon::now()->month;
|
$today = new DateTime();
|
||||||
$currentYear = Carbon::now()->year;
|
$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')
|
$intervalBefore = new DateInterval('P1D');
|
||||||
->whereMonth('updated_at', $currentMonth)
|
$intervalBeforeStart = new DateInterval('P29D');
|
||||||
->whereYear('updated_at', $currentYear)
|
$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();
|
->count();
|
||||||
|
|
||||||
$countPending = Transaction::where('status_pembayaran', 'pending')
|
$totalUserSebelum = User::where('role', 'User')
|
||||||
->whereMonth('updated_at', $currentMonth)
|
->where('status', 'Finished')
|
||||||
->whereYear('updated_at', $currentYear)
|
->whereDate('created_at', '>=', $startBeforeDate)
|
||||||
->count();
|
->whereDate('created_at', '<=', $endBeforeDate)
|
||||||
|
->count();
|
||||||
|
|
||||||
$countCancelled = Transaction::where('status_pembayaran', 'cancel')
|
$rateUser = floatval((floatval($totalUser)-floatval($totalUserSebelum))*100)/ ($totalUserSebelum == 0 ? 1 : floatval($totalUserSebelum));
|
||||||
->whereMonth('updated_at', $currentMonth)
|
|
||||||
->whereYear('updated_at', $currentYear)
|
|
||||||
->count();
|
|
||||||
|
|
||||||
$countRefund = Transaction::where('status_pembayaran', 'refund')
|
$totalProfit = Transaction::whereIn('status_transaksi', ['done', 'finished'])
|
||||||
->whereMonth('updated_at', $currentMonth)
|
->whereDate('created_at', '>=', $startDate)
|
||||||
->whereYear('updated_at', $currentYear)
|
->whereDate('created_at', '<=', $todayDate)
|
||||||
->count();
|
->sum('total_keuntungan');
|
||||||
|
|
||||||
$totalTransaction = Transaction::whereMonth('updated_at', $currentMonth)
|
$totalProfitSebelum = Transaction::whereIn('status_transaksi', ['done', 'finished'])
|
||||||
->whereYear('updated_at', $currentYear)
|
->whereDate('created_at', '>=', $startBeforeDate)
|
||||||
->count();
|
->whereDate('created_at', '<=', $endBeforeDate)
|
||||||
|
->sum('total_keuntungan');
|
||||||
|
|
||||||
|
$rateProfit = floatval((floatval($totalProfit)-floatval($totalProfitSebelum))*100)/ ($totalProfitSebelum == 0 ? 1 : floatval($totalProfitSebelum));
|
||||||
|
|
||||||
$dataChartTransaction = [];
|
$dataChartTransaction = [];
|
||||||
$dataChartRefund = [];
|
$dataChartRefund = [];
|
||||||
|
$dataChartUser = [];
|
||||||
|
$dataLabel = [];
|
||||||
|
|
||||||
$totalRefund = Transaction::where('status_pembayaran', 'refund')->count();
|
$startDate = $start;
|
||||||
$dataChartTotalRefund = [];
|
$intervalDate = new DateInterval('P1D');
|
||||||
|
$todayDate = $today;
|
||||||
|
$endDate = $todayDate->add($intervalDate);
|
||||||
|
|
||||||
$totalUser = User::where('status', 'Finished')->count();
|
for ($date = clone $startDate; $date <= $endDate; $date->modify('+1 day')) {
|
||||||
$dataChartTotalUser = [];
|
$transaction = Transaction::whereIn('status_transaksi', ['done', 'finished'])
|
||||||
|
->whereDate('created_at', $date->format('Y-m-d'))
|
||||||
|
->sum('total_keuntungan');
|
||||||
|
|
||||||
for ($bulan = 1; $bulan <= 12; $bulan++) {
|
$refund = Transaction::where('status_transaksi', 'refund')
|
||||||
$transaction = Transaction::whereMonth('updated_at', $bulan)
|
->whereDate('created_at', $date->format('Y-m-d'))
|
||||||
->whereYear('updated_at', $currentYear)
|
->sum('total_keuntungan');
|
||||||
->where('status_pembayaran', 'settlement')
|
|
||||||
->sum('total_bayar')/100;
|
|
||||||
|
|
||||||
$refund = Transaction::whereMonth('updated_at', $bulan)
|
$user = User::where('role', 'User')
|
||||||
->whereYear('updated_at', $currentYear)
|
->where('status', 'Finished')
|
||||||
->where('status_pembayaran', 'refund')
|
->whereDate('created_at', $date->format('Y-m-d'))
|
||||||
->sum('total_harga')/100;
|
->count();
|
||||||
|
|
||||||
$dataChartTransaction[] = intval($transaction);
|
$dataChartTransaction[] = floatval($transaction) / 1000;
|
||||||
$dataChartRefund[] = intval($refund);
|
$dataChartRefund[] = floatval($refund) / 1000;
|
||||||
|
$dataChartUser[] = intval($user);
|
||||||
|
$dataLabel[] = $date->format('d/m/Y');
|
||||||
}
|
}
|
||||||
|
|
||||||
$transactions = Transaction::latest()
|
$dataTopUsers = Transaction::selectRaw(
|
||||||
->get();
|
"
|
||||||
|
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 = [];
|
$startDate = $request->startDate; // 0
|
||||||
$tahun = Carbon::now()->year;
|
$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,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ class AdminNotification extends Controller
|
|||||||
public function listNotification(Request $request)
|
public function listNotification(Request $request)
|
||||||
{
|
{
|
||||||
try {
|
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'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
$searchNotif = $request->search['value'];
|
$searchNotif = $request->search['value'];
|
||||||
@ -266,6 +266,7 @@ class AdminNotification extends Controller
|
|||||||
$email = NotificationReceiver::where('notification_id', $request->id)
|
$email = NotificationReceiver::where('notification_id', $request->id)
|
||||||
->pluck('receiver')
|
->pluck('receiver')
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
return view('admin.notification.edit', compact('notification', 'email'));
|
return view('admin.notification.edit', compact('notification', 'email'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@ use App\Models\RefundDescription;
|
|||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
use App\Models\TransactionDescription;
|
use App\Models\TransactionDescription;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
@ -44,6 +46,7 @@ class AdminRefundController extends Controller
|
|||||||
public function approveRefund(Request $request)
|
public function approveRefund(Request $request)
|
||||||
{
|
{
|
||||||
$refund = Refund::where('id', $request->id)->first();
|
$refund = Refund::where('id', $request->id)->first();
|
||||||
|
$transactionDetail = Transaction::where('id', $refund->transaction_id)->first();
|
||||||
|
|
||||||
$params = [
|
$params = [
|
||||||
'refund_key' => $request->id . '-ref1',
|
'refund_key' => $request->id . '-ref1',
|
||||||
@ -60,7 +63,7 @@ class AdminRefundController extends Controller
|
|||||||
'Content-Type' => 'application/json',
|
'Content-Type' => 'application/json',
|
||||||
'Authorization' => "Basic $auth",
|
'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);
|
$result = json_decode($response->body(), true);
|
||||||
$code = $result['status_code'];
|
$code = $result['status_code'];
|
||||||
@ -85,11 +88,31 @@ class AdminRefundController extends Controller
|
|||||||
'deskripsi' => 'Admin telah menyetujui refund.',
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => 'Refund telah diterima...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => [
|
||||||
|
$transactionDetail->pembeli,
|
||||||
|
$transactionDetail->penjual
|
||||||
|
],
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Refund berhasil dilakukan. Uang akan dikembalikan ke pembeli.',
|
'message' => 'Refund berhasil dilakukan. Uang akan dikembalikan ke pembeli.',
|
||||||
|
'receivers' => [
|
||||||
|
$transactionDetail->pembeli,
|
||||||
|
$transactionDetail->penjual
|
||||||
|
]
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -98,7 +121,7 @@ class AdminRefundController extends Controller
|
|||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Refund gagal dilakukan',
|
'message' => 'Refund gagal dilakukan'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@ -116,6 +139,7 @@ class AdminRefundController extends Controller
|
|||||||
public function denyRefund(Request $request)
|
public function denyRefund(Request $request)
|
||||||
{
|
{
|
||||||
$refund = Refund::where('id', $request->id)->first();
|
$refund = Refund::where('id', $request->id)->first();
|
||||||
|
$transactionDetail = Transaction::where('id', $refund->transaction_id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Transaction::where('id', $refund->transaction_id)->update([
|
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,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => 'Refund ditolak...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => [
|
||||||
|
$transactionDetail->pembeli,
|
||||||
|
$transactionDetail->penjual
|
||||||
|
],
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Refund berhasil ditolak. Transaksi diselesaikan dan uang disampaikan ke penjual.',
|
'message' => 'Refund berhasil ditolak. Transaksi diselesaikan dan uang disampaikan ke penjual.',
|
||||||
|
'receivers' => [
|
||||||
|
$transactionDetail->pembeli,
|
||||||
|
$transactionDetail->penjual
|
||||||
|
]
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -160,7 +204,7 @@ class AdminRefundController extends Controller
|
|||||||
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
|
$subQuery = Refund::join('transactions', 'refunds.transaction_id', '=', 'transactions.id')
|
||||||
->join('users as b', 'transactions.pembeli', '=', 'b.email')
|
->join('users as b', 'transactions.pembeli', '=', 'b.email')
|
||||||
->join('users as s', 'transactions.penjual', '=', 's.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');
|
->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'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
|
@ -86,7 +86,7 @@ class AdminSettingController extends Controller
|
|||||||
|
|
||||||
public function listSetting(Request $request){
|
public function listSetting(Request $request){
|
||||||
try{
|
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'])){
|
if($request->has('search') && !empty($request->search['value'])){
|
||||||
$searchSetting = $request->search['value'];
|
$searchSetting = $request->search['value'];
|
||||||
|
@ -4,6 +4,8 @@ namespace App\Http\Controllers\Admin\Transaction;
|
|||||||
|
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
use App\Models\TransactionDescription;
|
use App\Models\TransactionDescription;
|
||||||
use App\Models\TransactionUser;
|
use App\Models\TransactionUser;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -52,6 +54,8 @@ class AdminTransactionController extends Controller
|
|||||||
$result = json_decode($response->body(), true);
|
$result = json_decode($response->body(), true);
|
||||||
$code = $result['status_code'];
|
$code = $result['status_code'];
|
||||||
|
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
if($code == '200'){
|
if($code == '200'){
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
@ -71,11 +75,33 @@ class AdminTransactionController extends Controller
|
|||||||
'deskripsi' => 'Admin telah menerima pembayaran transaksi dan dilanjutkan ke penjual.',
|
'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. <a href="'.$url.'">Klik disini</a> 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();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah diterima.'
|
'message' => 'Transaksi telah diterima.',
|
||||||
|
'receivers' => [
|
||||||
|
$transactionDetail->penjual,
|
||||||
|
$transactionDetail->pembeli
|
||||||
|
]
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -111,6 +137,8 @@ class AdminTransactionController extends Controller
|
|||||||
$result = json_decode($response->body(), true);
|
$result = json_decode($response->body(), true);
|
||||||
$code = $result['status_code'];
|
$code = $result['status_code'];
|
||||||
|
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
if($code == '200'){
|
if($code == '200'){
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
@ -130,11 +158,26 @@ class AdminTransactionController extends Controller
|
|||||||
'deskripsi' => 'Admin telah menolak pembayaran. Alasan: '.$request->compaint,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => 'Transaksi anda ditolak...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah ditolak.'
|
'message' => 'Transaksi telah ditolak.',
|
||||||
|
'receivers' => $transactionDetail->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -159,7 +202,7 @@ class AdminTransactionController extends Controller
|
|||||||
try {
|
try {
|
||||||
$subQuery = Transaction::join('users as b', 'transactions.pembeli', '=', 'b.email')
|
$subQuery = Transaction::join('users as b', 'transactions.pembeli', '=', 'b.email')
|
||||||
->join('users as s', 'transactions.penjual', '=', 's.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');
|
->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'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
|
@ -4,9 +4,12 @@ namespace App\Http\Controllers\Admin\User;
|
|||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Mail\approveUser;
|
||||||
|
use App\Mail\denyUser;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Yajra\DataTables\DataTables;
|
use Yajra\DataTables\DataTables;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
@ -59,6 +62,13 @@ class AdminUserController extends Controller
|
|||||||
|
|
||||||
public function approveUser(Request $request)
|
public function approveUser(Request $request)
|
||||||
{
|
{
|
||||||
|
$user = User::where('id', $request->id)->first();
|
||||||
|
$email = $user->email;
|
||||||
|
|
||||||
|
$content = [
|
||||||
|
'email' => $email,
|
||||||
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -66,6 +76,8 @@ class AdminUserController extends Controller
|
|||||||
'status' => 'Finished',
|
'status' => 'Finished',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Mail::to($email)->send(new approveUser($content));
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -81,6 +93,15 @@ class AdminUserController extends Controller
|
|||||||
|
|
||||||
public function denyUser(Request $request)
|
public function denyUser(Request $request)
|
||||||
{
|
{
|
||||||
|
$user = User::where('id', $request->id)->first();
|
||||||
|
$email = $user->email;
|
||||||
|
$keterangan = $request->keterangan;
|
||||||
|
|
||||||
|
$content = [
|
||||||
|
'keterangan' => $keterangan,
|
||||||
|
'email' => $email,
|
||||||
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -89,6 +110,8 @@ class AdminUserController extends Controller
|
|||||||
'keterangan' => $request->keterangan,
|
'keterangan' => $request->keterangan,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Mail::to($email)->send(new denyUser($content));
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -107,7 +130,7 @@ class AdminUserController extends Controller
|
|||||||
try {
|
try {
|
||||||
$subQuery = User::where('role', 'User')
|
$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")
|
->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');
|
->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'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
@ -146,6 +169,17 @@ class AdminUserController extends Controller
|
|||||||
$url .
|
$url .
|
||||||
'">Detail</a>
|
'">Detail</a>
|
||||||
</li>
|
</li>
|
||||||
|
';
|
||||||
|
if($row->status == 'Rejected'){
|
||||||
|
$html_code .= '
|
||||||
|
<li><a class="dropdown-item"
|
||||||
|
id="deleteUser"
|
||||||
|
href="javascript: void(0);"
|
||||||
|
data-id="'.$row->id.'">Hapus</a>
|
||||||
|
</li>
|
||||||
|
';
|
||||||
|
}
|
||||||
|
$html_code .= '
|
||||||
</ul>
|
</ul>
|
||||||
</div>';
|
</div>';
|
||||||
return $html_code;
|
return $html_code;
|
||||||
|
@ -23,6 +23,7 @@ use Laravolt\Indonesia\Models\City;
|
|||||||
use Laravolt\Indonesia\Models\District;
|
use Laravolt\Indonesia\Models\District;
|
||||||
use Laravolt\Indonesia\Models\Province;
|
use Laravolt\Indonesia\Models\Province;
|
||||||
use Laravolt\Indonesia\Models\Village;
|
use Laravolt\Indonesia\Models\Village;
|
||||||
|
use Pusher\Pusher;
|
||||||
use Ramsey\Uuid\Uuid;
|
use Ramsey\Uuid\Uuid;
|
||||||
|
|
||||||
class LoginController extends Controller
|
class LoginController extends Controller
|
||||||
@ -263,6 +264,19 @@ class LoginController extends Controller
|
|||||||
|
|
||||||
DB::commit();
|
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([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja',
|
'message' => 'Akun anda sudah terdaftar dan butuh verifikasi hingga maksimal 1 hari kerja',
|
||||||
|
@ -26,15 +26,15 @@ class UserContactController extends Controller
|
|||||||
{
|
{
|
||||||
if($request->input == '' || $request->input == null){
|
if($request->input == '' || $request->input == null){
|
||||||
$data = DB::table('contacts')
|
$data = DB::table('contacts')
|
||||||
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
|
|
||||||
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang')
|
->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);
|
->paginate(10);
|
||||||
}else{
|
}else{
|
||||||
$data = DB::table('contacts')
|
$data = DB::table('contacts')
|
||||||
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
|
->join('users', 'contacts.relasi_kontak', '=', 'users.email')
|
||||||
->select('contacts.relasi_kontak', 'users.nama_depan', 'users.nama_belakang')
|
->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).'%']))
|
->whereRaw(DB::raw("LOWER(CONCAT(users.nama_depan,' ',users.nama_belakang)) LIKE ?",['%'.strtolower($request->input).'%']))
|
||||||
->paginate(10);
|
->paginate(10);
|
||||||
}
|
}
|
||||||
@ -143,7 +143,8 @@ class UserContactController extends Controller
|
|||||||
->select(
|
->select(
|
||||||
'contacts.id',
|
'contacts.id',
|
||||||
DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),
|
DB::raw("CONCAT(users.nama_depan, ' ', users.nama_belakang) as nama_lengkap"),
|
||||||
);
|
)
|
||||||
|
->orderBy('nama_lengkap');
|
||||||
|
|
||||||
if($request->has('search') && !empty($request->search['value'])){
|
if($request->has('search') && !empty($request->search['value'])){
|
||||||
$searchContact = $request->search['value'];
|
$searchContact = $request->search['value'];
|
||||||
|
@ -4,56 +4,646 @@ namespace App\Http\Controllers\User\Dashboard;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Models\RefundUser;
|
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use DateInterval;
|
||||||
use Illuminate\Support\Facades\DB;
|
use DateTime;
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
use Throwable;
|
|
||||||
|
|
||||||
class UserDashboardController extends Controller
|
class UserDashboardController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$currentMonth = Carbon::now()->month;
|
$today = new DateTime();
|
||||||
$currentYear = Carbon::now()->year;
|
$todayDate = $today->format('Y-m-d');
|
||||||
$currentRole = 'Pembeli';
|
$pickDate = new DateTime();
|
||||||
|
$interval = new DateInterval('P29D');
|
||||||
|
$start = $pickDate->sub($interval);
|
||||||
|
$startDate = $start->format('Y-m-d');
|
||||||
|
|
||||||
$countCreated = Transaction::where('status_transaksi', 'created')
|
$intervalBefore = new DateInterval('P1D');
|
||||||
->whereMonth('updated_at', $currentMonth)
|
$intervalBeforeStart = new DateInterval('P29D');
|
||||||
->whereYear('updated_at', $currentYear)
|
$endBefore = $pickDate->sub($intervalBefore);
|
||||||
->where('pembeli', auth()->user()->email)
|
$endBeforeDate = $endBefore->format('Y-m-d');
|
||||||
->count();
|
$startBefore = $pickDate->sub($intervalBeforeStart);
|
||||||
|
$startBeforeDate = $startBefore->format('Y-m-d');
|
||||||
|
|
||||||
$countPending = Transaction::where('status_pembayaran', 'pending')
|
// Semua
|
||||||
->whereMonth('updated_at', $currentMonth)
|
$countAllFinished = Transaction::whereIn('status_transaksi', ['finished', 'done'])
|
||||||
->whereYear('updated_at', $currentYear)
|
->whereDate('created_at', '>=', $startDate)
|
||||||
->where('pembeli', auth()->user()->email)
|
->whereDate('created_at', '<=', $todayDate)
|
||||||
->count();
|
->where(function ($a) {
|
||||||
|
$a->where('pembeli', auth()->user()->email)->orWhere('penjual', auth()->user()->email);
|
||||||
|
})
|
||||||
|
->count();
|
||||||
|
|
||||||
$countFailure = Transaction::whereIn('status_pembayaran', ['cancel', 'expire', 'failure'])
|
$countAllPending = Transaction::where('status_transaksi', 'created')
|
||||||
->whereMonth('updated_at', $currentMonth)
|
->whereDate('created_at', '>=', $startDate)
|
||||||
->whereYear('updated_at', $currentYear)
|
->whereDate('created_at', '<=', $todayDate)
|
||||||
->where('pembeli', auth()->user()->email)
|
->where(function ($a) {
|
||||||
->count();
|
$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(){
|
public function getDataBySearch(Request $request)
|
||||||
$currentMonth = Carbon::now()->month;
|
{
|
||||||
$currentYear = Carbon::now()->year;
|
$startDate = $request->startDate;
|
||||||
$currentRole = 'Pembeli';
|
$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
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ use App\Models\NotificationReceiver;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Pusher\Pusher;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Yajra\DataTables\Facades\DataTables;
|
use Yajra\DataTables\Facades\DataTables;
|
||||||
|
|
||||||
@ -23,7 +24,7 @@ class UserNotification extends Controller
|
|||||||
try {
|
try {
|
||||||
$subQuery = Notification::join('notification_receivers','notifications.id','=','notification_receivers.notification_id')
|
$subQuery = Notification::join('notification_receivers','notifications.id','=','notification_receivers.notification_id')
|
||||||
->where('notification_receivers.receiver','=',auth()->user()->email)
|
->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');
|
->select('notifications.id', 'notifications.title', 'notifications.teaser', 'notification_receivers.created_at', 'notification_receivers.status');
|
||||||
|
|
||||||
if ($request->has('search') && !empty($request->search['value'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
@ -114,13 +115,53 @@ class UserNotification extends Controller
|
|||||||
|
|
||||||
public function markAllAsRead()
|
public function markAllAsRead()
|
||||||
{
|
{
|
||||||
NotificationReceiver::where('receiver', auth()->user()->email)->update([
|
$result = NotificationReceiver::where('receiver', auth()->user()->email)->update([
|
||||||
'status' => 'read',
|
'status' => 'read',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return response()->json([
|
if($result){
|
||||||
'status' => true,
|
return response()->json([
|
||||||
'message' => 'Berhasil',
|
'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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ namespace App\Http\Controllers\User\Pembeli;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\Contact;
|
use App\Models\Contact;
|
||||||
|
use App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
use App\Models\Refund;
|
use App\Models\Refund;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
@ -15,6 +17,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Pusher\Pusher;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Yajra\DataTables\DataTables;
|
use Yajra\DataTables\DataTables;
|
||||||
|
|
||||||
@ -84,7 +87,6 @@ class PembeliController extends Controller
|
|||||||
|
|
||||||
$batas_pembayaran = $now->addDays(1)->toTimeString();
|
$batas_pembayaran = $now->addDays(1)->toTimeString();
|
||||||
$batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString();
|
$batas_konfirmasi_transaksi = $now->addDays(2)->toDateTimeString();
|
||||||
$batas_pengiriman_barang_awal = $now->addDays(3)->toDateTimeString();
|
|
||||||
$batas_pengiriman_barang_akhir = $now->addDays(4)->toDateTimeString();
|
$batas_pengiriman_barang_akhir = $now->addDays(4)->toDateTimeString();
|
||||||
|
|
||||||
$status = 'created';
|
$status = 'created';
|
||||||
@ -109,7 +111,6 @@ class PembeliController extends Controller
|
|||||||
'status_transaksi' => $status,
|
'status_transaksi' => $status,
|
||||||
'batas_pembayaran' => $batas_pembayaran,
|
'batas_pembayaran' => $batas_pembayaran,
|
||||||
'batas_konfirmasi_transaksi' => $batas_konfirmasi_transaksi,
|
'batas_konfirmasi_transaksi' => $batas_konfirmasi_transaksi,
|
||||||
'batas_pengiriman_barang_awal' => $batas_pengiriman_barang_awal,
|
|
||||||
'batas_pengiriman_barang_akhir' => $batas_pengiriman_barang_akhir,
|
'batas_pengiriman_barang_akhir' => $batas_pengiriman_barang_akhir,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -214,6 +215,8 @@ class PembeliController extends Controller
|
|||||||
|
|
||||||
public function finishTransaction(Request $request)
|
public function finishTransaction(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -231,11 +234,23 @@ class PembeliController extends Controller
|
|||||||
'deskripsi' => 'Pesanan telah diselesaikan oleh ' . auth()->user()->nama_depan . '. Uang akan dikirim ke penjual.',
|
'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();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pesanan anda selesai dan uang akan dikirim ke penjual. Terima kasih telah menggunakan Rekber.',
|
'message' => 'Pesanan anda selesai dan uang akan dikirim ke penjual. Terima kasih telah menggunakan Rekber.',
|
||||||
|
'receiver' => $transactionDetail->penjual
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -253,6 +268,8 @@ class PembeliController extends Controller
|
|||||||
{
|
{
|
||||||
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
|
$auth = base64_encode(env('MIDTRANS_SERVER_KEY'));
|
||||||
|
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
$response = Http::withOptions([
|
$response = Http::withOptions([
|
||||||
'verify' => false,
|
'verify' => false,
|
||||||
])
|
])
|
||||||
@ -307,11 +324,25 @@ class PembeliController extends Controller
|
|||||||
'user' => auth()->user()->email,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->penjual,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pembayaran sukses',
|
'message' => 'Pembayaran sukses',
|
||||||
|
'receiver' => $transactionDetail->penjual
|
||||||
]);
|
]);
|
||||||
} elseif ($transaction == 'challenge') {
|
} elseif ($transaction == 'challenge') {
|
||||||
TransactionDescription::create([
|
TransactionDescription::create([
|
||||||
@ -324,6 +355,19 @@ class PembeliController extends Controller
|
|||||||
'keterangan' => $result['status_message'],
|
'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();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -471,11 +515,25 @@ class PembeliController extends Controller
|
|||||||
'deskripsi' => 'Transaksi dibatalkan oleh ' . auth()->user()->nama_depan . '. Alasan : ' . $request->complaint,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transaction->penjual,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah dibatalkan.',
|
'message' => 'Transaksi telah dibatalkan.',
|
||||||
|
'receiver' => $transaction->penjual
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -740,7 +798,8 @@ class PembeliController extends Controller
|
|||||||
'transactions.created_at',
|
'transactions.created_at',
|
||||||
'transactions.status_transaksi',
|
'transactions.status_transaksi',
|
||||||
'transactions.token'
|
'transactions.token'
|
||||||
);
|
)
|
||||||
|
->latest('transactions.updated_at');
|
||||||
|
|
||||||
if($request->has('search') && !empty($request->search['value'])){
|
if($request->has('search') && !empty($request->search['value'])){
|
||||||
$searchPembeli = $request->search['value'];
|
$searchPembeli = $request->search['value'];
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
namespace App\Http\Controllers\User\Penjual;
|
namespace App\Http\Controllers\User\Penjual;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Notification;
|
||||||
|
use App\Models\NotificationReceiver;
|
||||||
use App\Models\Refund;
|
use App\Models\Refund;
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Models\TransactionDescription;
|
use App\Models\TransactionDescription;
|
||||||
@ -26,7 +28,8 @@ class PenjualController extends Controller
|
|||||||
try {
|
try {
|
||||||
$subQuery = Transaction::join('users', 'transactions.pembeli', '=', 'users.email')
|
$subQuery = Transaction::join('users', 'transactions.pembeli', '=', 'users.email')
|
||||||
->where('transactions.penjual', auth()->user()->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'])) {
|
if ($request->has('search') && !empty($request->search['value'])) {
|
||||||
$searchPenjual = $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 .=
|
$html_code .=
|
||||||
'
|
'
|
||||||
<li><a class="dropdown-item" id="sendOrder"
|
<li><a class="dropdown-item" id="sendOrder"
|
||||||
@ -156,6 +159,8 @@ class PenjualController extends Controller
|
|||||||
|
|
||||||
public function acceptTransaction(Request $request)
|
public function acceptTransaction(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -172,11 +177,25 @@ class PenjualController extends Controller
|
|||||||
'deskripsi' => 'Transaksi telah diterima oleh ' . auth()->user()->nama_depan,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
|
'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
|
||||||
|
'receiver' => $transactionDetail->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
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,
|
'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.<a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => auth()->user()->nama_depan.' telah...'
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transaction->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
|
'message' => 'Transaksi telah ditolak. Uang akan dikirimkan ke pembeli.',
|
||||||
|
'receiver' => $transaction->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
@ -305,6 +338,8 @@ class PenjualController extends Controller
|
|||||||
|
|
||||||
public function sentOrder(Request $request)
|
public function sentOrder(Request $request)
|
||||||
{
|
{
|
||||||
|
$transactionDetail = Transaction::where('id', $request->transaction_id)->first();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
@ -332,11 +367,25 @@ class PenjualController extends Controller
|
|||||||
'bukti_foto' => $bukti_foto,
|
'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. <a href="'.$url.'">Klik disini</a> untuk langsung ke detail transaksi.',
|
||||||
|
'teaser' => 'Transaksi sudah tiba dan silahkan per...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
NotificationReceiver::create([
|
||||||
|
'receiver' => $transactionDetail->pembeli,
|
||||||
|
'notification_id' => $notif->id
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Pesanan telah sampai di tempat pembeli.',
|
'message' => 'Pesanan telah sampai di tempat pembeli.',
|
||||||
|
'receiver' => $transactionDetail->pembeli
|
||||||
]);
|
]);
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
|
@ -83,6 +83,7 @@ class UserRefundController extends Controller
|
|||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => true,
|
'status' => true,
|
||||||
'message' => 'Permintaan refund anda telah dikirim ke admin untuk direview. Mohon tunggu maksimal 2 hari.',
|
'message' => 'Permintaan refund anda telah dikirim ke admin untuk direview. Mohon tunggu maksimal 2 hari.',
|
||||||
|
'service' => 'Refund'
|
||||||
]);
|
]);
|
||||||
}catch(Throwable $e){
|
}catch(Throwable $e){
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
@ -115,7 +116,8 @@ class UserRefundController extends Controller
|
|||||||
'refunds.status',
|
'refunds.status',
|
||||||
'transactions.nama_barang',
|
'transactions.nama_barang',
|
||||||
DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"),
|
DB::raw("CONCAT(s.nama_depan,' ',s.nama_belakang) as nama_penjual"),
|
||||||
);
|
)
|
||||||
|
->latest('refunds.updated_at');
|
||||||
|
|
||||||
if($request->has('search') && !empty($request->search['value'])){
|
if($request->has('search') && !empty($request->search['value'])){
|
||||||
$searchRefund = $request->search['value'];
|
$searchRefund = $request->search['value'];
|
||||||
|
59
app/Mail/approveUser.php
Normal file
59
app/Mail/approveUser.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Mail\Mailables\Content;
|
||||||
|
use Illuminate\Mail\Mailables\Envelope;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class approveUser extends Mailable
|
||||||
|
{
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public $content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new message instance.
|
||||||
|
*/
|
||||||
|
public function __construct($content)
|
||||||
|
{
|
||||||
|
$this->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<int, \Illuminate\Mail\Mailables\Attachment>
|
||||||
|
*/
|
||||||
|
// public function attachments(): array
|
||||||
|
// {
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
|
||||||
|
public function build(){
|
||||||
|
return $this->subject('Pendaftaran Akun Sukses')->view('email.approve-user-email');
|
||||||
|
}
|
||||||
|
}
|
59
app/Mail/denyUser.php
Normal file
59
app/Mail/denyUser.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Mail\Mailables\Content;
|
||||||
|
use Illuminate\Mail\Mailables\Envelope;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class denyUser extends Mailable
|
||||||
|
{
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public $content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new message instance.
|
||||||
|
*/
|
||||||
|
public function __construct($content)
|
||||||
|
{
|
||||||
|
$this->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<int, \Illuminate\Mail\Mailables\Attachment>
|
||||||
|
*/
|
||||||
|
// public function attachments(): array
|
||||||
|
// {
|
||||||
|
// return [];
|
||||||
|
// }
|
||||||
|
|
||||||
|
public function build(){
|
||||||
|
return $this->subject('Pendaftaran Akun Gagal')->view('email.deny-user-email');
|
||||||
|
}
|
||||||
|
}
|
@ -30,7 +30,6 @@ class Transaction extends Model
|
|||||||
'status_transaksi',
|
'status_transaksi',
|
||||||
'status_pembayaran',
|
'status_pembayaran',
|
||||||
'batas_pembayaran',
|
'batas_pembayaran',
|
||||||
'batas_pengiriman_barang_awal',
|
|
||||||
'batas_pengiriman_barang_akhir',
|
'batas_pengiriman_barang_akhir',
|
||||||
'nama_bank_penjual',
|
'nama_bank_penjual',
|
||||||
'no_rek_penjual'
|
'no_rek_penjual'
|
||||||
|
@ -34,7 +34,8 @@ class UserFactory extends Factory
|
|||||||
'status'=> $this->faker->randomElement(['Progress', 'Finished', 'Rejected']),
|
'status'=> $this->faker->randomElement(['Progress', 'Finished', 'Rejected']),
|
||||||
'gender' => $this->faker->randomElement(['Laki-laki', 'Perempuan']),
|
'gender' => $this->faker->randomElement(['Laki-laki', 'Perempuan']),
|
||||||
'kode_kelurahan' => '1101012002',
|
'kode_kelurahan' => '1101012002',
|
||||||
'keterangan' => $this->faker->sentence
|
'keterangan' => $this->faker->sentence,
|
||||||
|
'foto_profile' => 'face'.random_int(1,10).'.jpg'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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->enum('status_pembayaran',['settlement','capture','pending','expire','failure','cancel','refund'])->nullable(); // status transaksi dari midtrans
|
||||||
$table->timestamp('batas_pembayaran')->nullable();
|
$table->timestamp('batas_pembayaran')->nullable();
|
||||||
$table->timestamp('batas_konfirmasi_transaksi')->nullable();
|
$table->timestamp('batas_konfirmasi_transaksi')->nullable();
|
||||||
$table->timestamp('batas_pengiriman_barang_awal');
|
|
||||||
$table->timestamp('batas_pengiriman_barang_akhir');
|
$table->timestamp('batas_pengiriman_barang_akhir');
|
||||||
$table->timestamp('tanggal_transaksi')->nullable();
|
$table->timestamp('tanggal_transaksi')->nullable();
|
||||||
$table->string('nama_bank_penjual');
|
$table->string('nama_bank_penjual');
|
||||||
|
@ -50,6 +50,7 @@ class DatabaseSeeder extends Seeder
|
|||||||
'persentase_kemiripan' => 100,
|
'persentase_kemiripan' => 100,
|
||||||
'gender' => $faker->randomElement(['Laki-laki', 'Perempuan']),
|
'gender' => $faker->randomElement(['Laki-laki', 'Perempuan']),
|
||||||
'kode_kelurahan' => '1101012002',
|
'kode_kelurahan' => '1101012002',
|
||||||
|
'foto_profile' => 'face1.jpg'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user1 = User::factory()->create([
|
$user1 = User::factory()->create([
|
||||||
@ -71,7 +72,8 @@ class DatabaseSeeder extends Seeder
|
|||||||
'kode_kelurahan' => '1101012002',
|
'kode_kelurahan' => '1101012002',
|
||||||
'nama_bank' => 'mandiri',
|
'nama_bank' => 'mandiri',
|
||||||
'no_rek' => '019809210873',
|
'no_rek' => '019809210873',
|
||||||
'keterangan' => $faker->sentence()
|
'keterangan' => $faker->sentence(),
|
||||||
|
'foto_profile' => 'face2.jpg'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user2 = User::factory()->create([
|
$user2 = User::factory()->create([
|
||||||
@ -93,7 +95,8 @@ class DatabaseSeeder extends Seeder
|
|||||||
'kode_kelurahan' => '1101012002',
|
'kode_kelurahan' => '1101012002',
|
||||||
'nama_bank' => 'bca',
|
'nama_bank' => 'bca',
|
||||||
'no_rek' => '01980921',
|
'no_rek' => '01980921',
|
||||||
'keterangan' => $faker->sentence()
|
'keterangan' => $faker->sentence(),
|
||||||
|
'foto_profile' => 'face3.jpg'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
User::factory(100)->create();
|
User::factory(100)->create();
|
||||||
@ -125,7 +128,6 @@ class DatabaseSeeder extends Seeder
|
|||||||
'token' => 'asda',
|
'token' => 'asda',
|
||||||
'status_transaksi' => 'created',
|
'status_transaksi' => 'created',
|
||||||
'batas_pembayaran' => now(),
|
'batas_pembayaran' => now(),
|
||||||
'batas_pengiriman_barang_awal' => now(),
|
|
||||||
'batas_pengiriman_barang_akhir' => now(),
|
'batas_pengiriman_barang_akhir' => now(),
|
||||||
'nama_bank_penjual' => $user2->nama_bank,
|
'nama_bank_penjual' => $user2->nama_bank,
|
||||||
'no_rek_penjual' => $user2->no_rek,
|
'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,
|
'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([
|
$transactionRefund = Transaction::create([
|
||||||
'id' => Str::uuid(),
|
'id' => Str::uuid(),
|
||||||
'pembeli' => $user1->email,
|
'pembeli' => $user1->email,
|
||||||
@ -157,7 +189,6 @@ class DatabaseSeeder extends Seeder
|
|||||||
'status_transaksi' => 'success',
|
'status_transaksi' => 'success',
|
||||||
'status_pembayaran' => 'refund',
|
'status_pembayaran' => 'refund',
|
||||||
'batas_pembayaran' => now(),
|
'batas_pembayaran' => now(),
|
||||||
'batas_pengiriman_barang_awal' => now(),
|
|
||||||
'batas_pengiriman_barang_akhir' => now(),
|
'batas_pengiriman_barang_akhir' => now(),
|
||||||
'nama_bank_penjual' => $user2->nama_bank,
|
'nama_bank_penjual' => $user2->nama_bank,
|
||||||
'no_rek_penjual' => $user2->no_rek,
|
'no_rek_penjual' => $user2->no_rek,
|
||||||
|
@ -1271,9 +1271,9 @@ select.form-control:not([size]):not([multiple]) {
|
|||||||
margin-bottom: -15px;
|
margin-bottom: -15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card.card-statistic-2 .card-chart canvas {
|
/* .card.card-statistic-2 .card-chart canvas {
|
||||||
height: 90px !important;
|
height: 90px !important;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.card .card-stats {
|
.card .card-stats {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -4,109 +4,123 @@
|
|||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-stats">
|
<div class="card-stats">
|
||||||
<div class="card-stats-title">List Transaction -
|
<div class="card-stats-title">
|
||||||
<div class="dropdown d-inline">
|
<h4>Transaksi</h4>
|
||||||
<a class="font-weight-600 dropdown-toggle" data-toggle="dropdown" href="#"
|
</div>
|
||||||
id="orders-month">August</a>
|
<div class="card-stats-items mt-2">
|
||||||
<ul class="dropdown-menu dropdown-menu-sm">
|
<div class="card-stats-item">
|
||||||
<li class="dropdown-title">Select Month</li>
|
<div class="card-stats-item-count" id="countSuccess">{{ $countSuccess }}</div>
|
||||||
<li><a href="#" class="dropdown-item">January</a></li>
|
<div class="card-stats-item-label">Selesai</div>
|
||||||
<li><a href="#" class="dropdown-item">February</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">March</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item">April</a></li>
|
<div class="card-stats-item-count" id="countCancelled">{{ $countCancelled }}</div>
|
||||||
<li><a href="#" class="dropdown-item">May</a></li>
|
<div class="card-stats-item-label">Gagal</div>
|
||||||
<li><a href="#" class="dropdown-item">June</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">July</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item active">August</a></li>
|
<div class="card-stats-item-count" id="countProcessed">{{ $countProcessed }}</div>
|
||||||
<li><a href="#" class="dropdown-item">September</a></li>
|
<div class="card-stats-item-label">Diproses</div>
|
||||||
<li><a href="#" class="dropdown-item">October</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">November</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item">December</a></li>
|
<div class="card-stats-item-count" id="countIndicated">{{ $countIndicated }}</div>
|
||||||
</ul>
|
<div class="card-stats-item-label">Diterindikasi</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countWaiting">{{ $countWaiting }}</div>
|
||||||
|
<div class="card-stats-item-label">Menunggu</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-stats-items">
|
|
||||||
<div class="card-stats-item">
|
|
||||||
<div class="card-stats-item-count">{{ $countSuccess }}</div>
|
|
||||||
<div class="card-stats-item-label">Success</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-stats-item">
|
|
||||||
<div class="card-stats-item-count">{{ $countPending }}</div>
|
|
||||||
<div class="card-stats-item-label">Pending</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-stats-item">
|
|
||||||
<div class="card-stats-item-count">{{ $countCancelled }}</div>
|
|
||||||
<div class="card-stats-item-label">Canceled</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-stats-item">
|
|
||||||
<div class="card-stats-item-count">{{ $countRefund }}</div>
|
|
||||||
<div class="card-stats-item-label">Refund</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-icon shadow-primary bg-primary">
|
|
||||||
<i class="fas fa-exchange-alt"></i>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-wrap">
|
<div class="card-wrap">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Total Transaction</h4>
|
<h4>Total Transaksi</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-icon shadow-primary bg-primary">
|
||||||
{{ $totalTransaction }}
|
<i class="fas fa-exchange-alt"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="totalTransaction">
|
||||||
|
{{ $totalTransaction }} Transaksi
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-muted">
|
<p class="mb-0 text-muted" id="rateTransaction">
|
||||||
<span class="text-success me-2"><span class="mdi mdi-arrow-up-bold"></span>
|
<span
|
||||||
1.08%</span>
|
class="text-{{ $rateTransaction == 0 ? 'secondary text-black-50' : ($rateTransaction > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
<span class="text-nowrap">Since last week</span>
|
class="mdi {{ $rateTransaction == 0 ? 'mdi-equal' : ($rateTransaction > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($rateTransaction) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-chart">
|
<div class="card-stats">
|
||||||
<canvas id="balance-chart" height="80"></canvas>
|
<div class="card-stats-title">
|
||||||
</div>
|
<h4>Refund</h4>
|
||||||
<div class="card-icon shadow-primary bg-primary">
|
</div>
|
||||||
<i class="fas fa-money-check"></i>
|
<div class="card-stats-items mt-2">
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countPending">{{ $countPending }}</div>
|
||||||
|
<div class="card-stats-item-label">Menunggu</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countApprove">{{ $countApprove }}</div>
|
||||||
|
<div class="card-stats-item-label">Disetujui</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countDeny">{{ $countDeny }}</div>
|
||||||
|
<div class="card-stats-item-label">Ditolak</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-wrap">
|
<div class="card-wrap">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Total Refund</h4>
|
<h4>Total Refund</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-icon shadow-primary bg-primary">
|
||||||
{{ $totalRefund }}
|
<i class="fas fa-exchange-alt"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="totalRefund">
|
||||||
|
{{ $totalRefund }} Pengajuan
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-muted">
|
<p class="mb-0 text-muted" id="rateRefund">
|
||||||
<span class="text-success me-2"><span class="mdi mdi-arrow-up-bold"></span>
|
<span
|
||||||
5.27%</span>
|
class="text-{{ $rateRefund == 0 ? 'secondary text-black-50' : ($rateRefund > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
<span class="text-nowrap">Since last month</span>
|
class="mdi {{ $rateRefund == 0 ? 'mdi-equal' : ($rateRefund > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($rateRefund) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-chart">
|
<div class="card-stats">
|
||||||
<canvas id="sales-chart" height="80"></canvas>
|
<div class="card-stats-title">
|
||||||
|
<h4>Pengguna</h4>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-icon shadow-primary bg-primary">
|
<div class="card-chart">
|
||||||
<i class="fas fa-user"></i>
|
<canvas id="users-chart" height="80"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-wrap">
|
<div class="card-wrap">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Total user</h4>
|
<h4>Total Pengguna</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-icon shadow-primary bg-primary">
|
||||||
|
<i class="fas fa-user"></i>
|
||||||
|
</div>
|
||||||
|
<div class="card-body" id="totalUser">
|
||||||
|
{{ $totalUser }} Pengguna
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
|
||||||
{{ $totalUser }}</div>
|
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-0 text-muted">
|
<p class="mb-0 text-muted" id="rateUser">
|
||||||
<span class="text-danger me-2"><span class="mdi mdi-arrow-down-bold"></span>
|
<span
|
||||||
1.08%</span>
|
class="text-{{ $rateUser == 0 ? 'secondary text-black-50' : ($rateUser > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
<span class="text-nowrap">Since previous week</span>
|
class="mdi {{ $rateUser == 0 ? 'mdi-equal' : ($rateUser > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($rateUser) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -115,18 +129,17 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="alert alert-primary alert-dismissible fade show mb-3" role="alert">
|
<div id="rateProfit">
|
||||||
Pendapatan Hari Ini meningkat <span class="mdi mdi-arrow-up-bold"></span>
|
<div class="alert alert-{{ $rateProfit == 0 ? 'secondary text-black-50' : ($rateProfit > 0 ? 'success' : 'error') }} alert-dismissible fade show mb-3"
|
||||||
5.27%</span>
|
role="alert">
|
||||||
|
Pendapatan {{ $rateProfit == 0 ? 'sama' : ($rateProfit > 0 ? 'meningkat' : 'menurun') }}
|
||||||
|
<span
|
||||||
|
class="mdi {{ $rateProfit == 0 ? 'mdi-equal' : ($rateProfit > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ $rateProfit }}%
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Statistics</h4>
|
<h4>Pendapatan</h4>
|
||||||
<div class="card-header-action">
|
|
||||||
<div class="btn-group">
|
|
||||||
<a href="#" class="btn btn-primary">Week</a>
|
|
||||||
<a href="#" class="btn">Month</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<canvas id="myChart1"></canvas>
|
<canvas id="myChart1"></canvas>
|
||||||
@ -136,137 +149,60 @@
|
|||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div class="input-group mt-4">
|
<div class="input-group mt-4">
|
||||||
<input type="text" name="from-to" class="form-control" id="date-range">
|
<input type="text" name="from-to" class="form-control" id="date-range">
|
||||||
<label class="input-group-text bg-primary text-white align-items-center" for="date-range">
|
<span class="input-group-text bg-primary text-white align-items-center">
|
||||||
<i class="mdi mdi-calendar-range font-13"></i>
|
<i class="mdi mdi-calendar-range font-13"></i>
|
||||||
</label>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card gradient-bottom">
|
<div class="card gradient-bottom">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Top 5 Users</h4>
|
<h4>Top 5 Users</h4>
|
||||||
<div class="card-header-action dropdown">
|
|
||||||
<a href="#" data-toggle="dropdown"
|
|
||||||
class="btn btn-primary dropdown-toggle">Month</a>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-sm dropdown-menu-right">
|
|
||||||
<li class="dropdown-title">Select Period</li>
|
|
||||||
<li><a href="#" class="dropdown-item">Today</a></li>
|
|
||||||
<li><a href="#" class="dropdown-item">Week</a></li>
|
|
||||||
<li><a href="#" class="dropdown-item active">Month</a></li>
|
|
||||||
<li><a href="#" class="dropdown-item">This Year</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body" id="top-5-scroll">
|
<div class="card-body" id="top-5-scroll">
|
||||||
<ul class="list-unstyled list-unstyled-border">
|
<ul class="list-unstyled list-unstyled-border" id="listTopUser">
|
||||||
<li class="media">
|
@forelse ($dataTopUsers as $user)
|
||||||
<img class="mr-3 rounded" width="55"
|
<li class="media">
|
||||||
src="{{ asset('assets/img/avatar/avatar-6.png') }}" alt="product">
|
<img class="mr-3 rounded" width="55"
|
||||||
<div class="media-body">
|
src="{{ $user->foto_profile == null ? asset('storage/foto-profile/face1.jpg') : asset('storage/foto-profile/' . $user->foto_profile) }}"
|
||||||
<div class="float-right">
|
alt="product">
|
||||||
<div class="font-weight-600 text-muted text-small">86 Sales</div>
|
<div class="media-body">
|
||||||
</div>
|
<div class="float-right">
|
||||||
<div class="media-title">Jilhan Haura</div>
|
<div class="font-weight-600 text-muted text-small">
|
||||||
<div class="mt-1">
|
{{ $user->jumlah_transaksi }} transaksi
|
||||||
<div class="budget-price">
|
</div>
|
||||||
<div class="budget-price-square bg-primary" data-width="64%"></div>
|
|
||||||
<div class="budget-price-label">$68,714</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="budget-price">
|
<div class="media-title">{{ $user->nama_lengkap }}</div>
|
||||||
<div class="budget-price-square bg-danger" data-width="43%"></div>
|
<div class="mt-1">
|
||||||
<div class="budget-price-label">$38,700</div>
|
<div class="budget-price">
|
||||||
|
<div class="budget-price-square bg-primary"
|
||||||
|
data-width="{{ (floatval($user->total_transaksi_berhasil) * 100) / (floatval($user->total_transaksi_berhasil) + floatval($user->total_refund_berhasil)) / 1.5 }}%">
|
||||||
|
</div>
|
||||||
|
<div class="budget-price-label">Rp
|
||||||
|
{{ number_format($user->total_transaksi_berhasil, 2, ',', '.') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="budget-price">
|
||||||
|
<div class="budget-price-square bg-danger"
|
||||||
|
data-width="{{ (floatval($user->total_refund_berhasil) * 100) / (floatval($user->total_transaksi_berhasil) + floatval($user->total_refund_berhasil)) / 1.5 }}%">
|
||||||
|
</div>
|
||||||
|
<div class="budget-price-label">Rp
|
||||||
|
{{ number_format($user->total_refund_berhasil, 2, ',', '.') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</li>
|
||||||
</li>
|
@empty
|
||||||
<li class="media">
|
@endforelse
|
||||||
<img class="mr-3 rounded" width="55"
|
|
||||||
src="{{ asset('assets/img/avatar/avatar-1.png') }}" alt="product">
|
|
||||||
<div class="media-body">
|
|
||||||
<div class="float-right">
|
|
||||||
<div class="font-weight-600 text-muted text-small">67 Sales</div>
|
|
||||||
</div>
|
|
||||||
<div class="media-title">Nurul Prima</div>
|
|
||||||
<div class="mt-1">
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-primary" data-width="84%"></div>
|
|
||||||
<div class="budget-price-label">$107,133</div>
|
|
||||||
</div>
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-danger" data-width="60%"></div>
|
|
||||||
<div class="budget-price-label">$91,455</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="media">
|
|
||||||
<img class="mr-3 rounded" width="55"
|
|
||||||
src="{{ asset('assets/img/avatar/avatar-2.png') }}" alt="product">
|
|
||||||
<div class="media-body">
|
|
||||||
<div class="float-right">
|
|
||||||
<div class="font-weight-600 text-muted text-small">63 Sales</div>
|
|
||||||
</div>
|
|
||||||
<div class="media-title">Muhammad Raihan</div>
|
|
||||||
<div class="mt-1">
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-primary" data-width="34%"></div>
|
|
||||||
<div class="budget-price-label">$3,717</div>
|
|
||||||
</div>
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-danger" data-width="28%"></div>
|
|
||||||
<div class="budget-price-label">$2,835</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="media">
|
|
||||||
<img class="mr-3 rounded" width="55"
|
|
||||||
src="{{ asset('assets/img/avatar/avatar-3.png') }}" alt="product">
|
|
||||||
<div class="media-body">
|
|
||||||
<div class="float-right">
|
|
||||||
<div class="font-weight-600 text-muted text-small">28 Sales</div>
|
|
||||||
</div>
|
|
||||||
<div class="media-title">Hantu</div>
|
|
||||||
<div class="mt-1">
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-primary" data-width="45%"></div>
|
|
||||||
<div class="budget-price-label">$13,972</div>
|
|
||||||
</div>
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-danger" data-width="30%"></div>
|
|
||||||
<div class="budget-price-label">$9,660</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="media">
|
|
||||||
<img class="mr-3 rounded" width="55"
|
|
||||||
src="{{ asset('assets/img/avatar/avatar-4.png') }}" alt="product">
|
|
||||||
<div class="media-body">
|
|
||||||
<div class="float-right">
|
|
||||||
<div class="font-weight-600 text-muted text-small">19 Sales</div>
|
|
||||||
</div>
|
|
||||||
<div class="media-title">Testing</div>
|
|
||||||
<div class="mt-1">
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-primary" data-width="35%"></div>
|
|
||||||
<div class="budget-price-label">$7,391</div>
|
|
||||||
</div>
|
|
||||||
<div class="budget-price">
|
|
||||||
<div class="budget-price-square bg-danger" data-width="28%"></div>
|
|
||||||
<div class="budget-price-label">$5,472</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer pt-3 d-flex justify-content-center">
|
<div class="pt-3 d-flex justify-content-center">
|
||||||
<div class="budget-price justify-content-center">
|
<div class="budget-price justify-content-center">
|
||||||
<div class="budget-price-square bg-primary" data-width="20"></div>
|
<div class="budget-price-square bg-primary" data-width="20"></div>
|
||||||
<div class="budget-price-label">Sukses</div>
|
<div class="budget-price-label">Transaksi Selesai</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="budget-price justify-content-center">
|
<div class="budget-price justify-content-center">
|
||||||
<div class="budget-price-square bg-danger" data-width="20"></div>
|
<div class="budget-price-square bg-danger" data-width="20"></div>
|
||||||
<div class="budget-price-label">Refund</div>
|
<div class="budget-price-label">Refund Selesai</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -275,61 +211,15 @@
|
|||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@include('admin.transaction.modal-tracking')
|
@include('admin.transaction.modal-tracking')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
let dataChartTransaction = {{ json_encode($dataChartTransaction) }};
|
let dataChartTransaction = {{ json_encode($dataChartTransaction) }};
|
||||||
let dataChartRefund = {{ json_encode($dataChartRefund) }};
|
let dataChartRefund = {{ json_encode($dataChartRefund) }};
|
||||||
let labels = '';
|
let dataChartUser = {{ json_encode($dataChartUser) }};
|
||||||
let dataChartTotalRefund = {{ json_encode($dataChartTotalRefund) }};
|
let dataLabel = {!! json_encode($dataLabel) !!};
|
||||||
let dataChartTotalUser = {{ json_encode($dataChartTotalUser) }};
|
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
// Date picker range
|
|
||||||
$(document).ready(function() {
|
|
||||||
let searchParams = new URLSearchParams(window.location.search);
|
|
||||||
let dateInterval = searchParams.get('from-to');
|
|
||||||
let start = moment().subtract(29, 'days');
|
|
||||||
let end = moment();
|
|
||||||
|
|
||||||
if (dateInterval) {
|
|
||||||
dateInterval = dateInterval.split(' - ');
|
|
||||||
start = moment(dateInterval[0]);
|
|
||||||
end = moment(dateInterval[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#date-range').daterangepicker({
|
|
||||||
"showDropdowns": true,
|
|
||||||
"showWeekNumbers": true,
|
|
||||||
"alwaysShowCalendars": true,
|
|
||||||
startDate: start,
|
|
||||||
endDate: end,
|
|
||||||
locale: {
|
|
||||||
format: 'YYYY-MM-DD',
|
|
||||||
firstDay: 1,
|
|
||||||
},
|
|
||||||
ranges: {
|
|
||||||
'Today': [moment(), moment()],
|
|
||||||
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
|
||||||
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
|
|
||||||
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
|
||||||
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
|
||||||
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1,
|
|
||||||
'month').endOf(
|
|
||||||
'month')],
|
|
||||||
'This Year': [moment().startOf('year'), moment().endOf('year')],
|
|
||||||
'Last Year': [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year')
|
|
||||||
.endOf(
|
|
||||||
'year')
|
|
||||||
],
|
|
||||||
'All time': [moment().subtract(30, 'year').startOf('month'), moment().endOf('month')],
|
|
||||||
}
|
|
||||||
}, function(start, end, label) {
|
|
||||||
// Menangkap rentang tanggal yang dipilih dan menampilkan di console
|
|
||||||
console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format(
|
|
||||||
'YYYY-MM-DD'));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set new default font family and font color to mimic Bootstrap's default styling
|
|
||||||
Chart.defaults.global.defaultFontFamily = 'Nunito',
|
Chart.defaults.global.defaultFontFamily = 'Nunito',
|
||||||
'-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
|
'-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
|
||||||
Chart.defaults.global.defaultFontColor = '#858796';
|
Chart.defaults.global.defaultFontColor = '#858796';
|
||||||
@ -338,12 +228,10 @@
|
|||||||
var myChart = new Chart(ctx, {
|
var myChart = new Chart(ctx, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Agu", "Sep",
|
labels: dataLabel,
|
||||||
"Okt", "Nov", "Des"
|
|
||||||
],
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Transaction',
|
label: 'Transaction',
|
||||||
data: {{ json_encode($dataChartTransaction) }},
|
data: dataChartTransaction,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: 'rgba(63,82,227,.8)',
|
backgroundColor: 'rgba(63,82,227,.8)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
@ -355,7 +243,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Refund',
|
label: 'Refund',
|
||||||
data: [2207, 3403, 220000, 5025, 2302, 4208, 3880, 4880, 5000],
|
data: dataChartRefund,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: 'rgba(254,86,83,.7)',
|
backgroundColor: 'rgba(254,86,83,.7)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
@ -381,26 +269,22 @@
|
|||||||
scales: {
|
scales: {
|
||||||
yAxes: [{
|
yAxes: [{
|
||||||
gridLines: {
|
gridLines: {
|
||||||
// display: false,
|
|
||||||
drawBorder: false,
|
drawBorder: false,
|
||||||
color: '#f2f2f2',
|
color: '#f2f2f2',
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
beginAtZero: true,
|
beginAtZero: true,
|
||||||
stepSize: 15000,
|
// stepSize: 1000,
|
||||||
callback: function(value, index, values) {
|
// callback: function(value, index, values) {
|
||||||
// return 'Rp.' + value;
|
// return value;
|
||||||
return new Intl.NumberFormat('id-ID', {
|
// },
|
||||||
style: 'currency',
|
|
||||||
currency: 'IDR',
|
|
||||||
}).format(value);
|
|
||||||
},
|
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
maxTicksLimit: 6,
|
||||||
},
|
},
|
||||||
scaleLabel: {
|
scaleLabel: {
|
||||||
display: true,
|
display: true,
|
||||||
labelString: 'Dalam Ratusan Juta', // Label khusus untuk sumbu Y
|
labelString: 'Dalam Rupiah (Rp)',
|
||||||
fontSize: 16 // Ukuran font untuk label sumbu Y
|
fontSize: 16,
|
||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
xAxes: [{
|
xAxes: [{
|
||||||
@ -409,91 +293,28 @@
|
|||||||
tickMarkLength: 15,
|
tickMarkLength: 15,
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
fontSize: 16,
|
display: false,
|
||||||
}
|
maxTicksLimit: 8,
|
||||||
|
},
|
||||||
|
offset: true,
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var balance_chart = document.getElementById("balance-chart").getContext('2d');
|
var users_chart = document.getElementById("users-chart").getContext('2d');
|
||||||
|
|
||||||
var balance_chart_bg_color = balance_chart.createLinearGradient(0, 0, 0, 70);
|
var users_chart_bg_color = users_chart.createLinearGradient(0, 0, 0, 80);
|
||||||
balance_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
|
||||||
balance_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
|
||||||
|
|
||||||
var myChart = new Chart(balance_chart, {
|
var myChartUser = new Chart(users_chart, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: ['16-07-2018', '17-07-2018', '18-07-2018', '19-07-2018', '20-07-2018', '21-07-2018',
|
labels: dataLabel,
|
||||||
'22-07-2018', '23-07-2018', '24-07-2018', '25-07-2018', '26-07-2018', '27-07-2018',
|
|
||||||
'28-07-2018', '29-07-2018', '30-07-2018', '31-07-2018'
|
|
||||||
],
|
|
||||||
datasets: [{
|
|
||||||
label: 'Balance',
|
|
||||||
data: [50, 61, 80, 50, 72, 52, 60, 41, 30, 45, 70, 40, 93, 63, 50, 62],
|
|
||||||
backgroundColor: balance_chart_bg_color,
|
|
||||||
borderWidth: 3,
|
|
||||||
borderColor: 'rgba(63,82,227,1)',
|
|
||||||
pointBorderWidth: 0,
|
|
||||||
pointBorderColor: 'transparent',
|
|
||||||
pointRadius: 3,
|
|
||||||
pointBackgroundColor: 'transparent',
|
|
||||||
pointHoverBackgroundColor: 'rgba(63,82,227,1)',
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
bottom: -1,
|
|
||||||
left: -1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
display: false
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
yAxes: [{
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
drawBorder: false,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
beginAtZero: true,
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
}],
|
|
||||||
xAxes: [{
|
|
||||||
gridLines: {
|
|
||||||
drawBorder: false,
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var sales_chart = document.getElementById("sales-chart").getContext('2d');
|
|
||||||
|
|
||||||
var sales_chart_bg_color = sales_chart.createLinearGradient(0, 0, 0, 80);
|
|
||||||
balance_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
|
||||||
balance_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
|
||||||
|
|
||||||
var myChart = new Chart(sales_chart, {
|
|
||||||
type: 'line',
|
|
||||||
data: {
|
|
||||||
labels: ['16-07-2018', '17-07-2018', '18-07-2018', '19-07-2018', '20-07-2018', '21-07-2018',
|
|
||||||
'22-07-2018', '23-07-2018', '24-07-2018', '25-07-2018', '26-07-2018', '27-07-2018',
|
|
||||||
'28-07-2018', '29-07-2018', '30-07-2018', '31-07-2018'
|
|
||||||
],
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Sales',
|
label: 'Sales',
|
||||||
data: [70, 62, 44, 40, 21, 63, 82, 52, 50, 31, 70, 50, 91, 63, 51, 60],
|
data: dataChartUser,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: balance_chart_bg_color,
|
backgroundColor: users_chart_bg_color,
|
||||||
borderWidth: 3,
|
borderWidth: 3,
|
||||||
borderColor: 'rgba(63,82,227,1)',
|
borderColor: 'rgba(63,82,227,1)',
|
||||||
pointBorderWidth: 0,
|
pointBorderWidth: 0,
|
||||||
@ -506,8 +327,8 @@
|
|||||||
options: {
|
options: {
|
||||||
layout: {
|
layout: {
|
||||||
padding: {
|
padding: {
|
||||||
bottom: -1,
|
bottom: 0,
|
||||||
left: -1
|
left: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
@ -518,23 +339,264 @@
|
|||||||
gridLines: {
|
gridLines: {
|
||||||
display: false,
|
display: false,
|
||||||
drawBorder: false,
|
drawBorder: false,
|
||||||
|
color: '#f2f2f2',
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
beginAtZero: true,
|
beginAtZero: true,
|
||||||
display: false
|
display: false,
|
||||||
|
maxTicksLimit: 6,
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
xAxes: [{
|
xAxes: [{
|
||||||
gridLines: {
|
gridLines: {
|
||||||
drawBorder: false,
|
drawBorder: false,
|
||||||
display: false,
|
display: true,
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
display: false
|
display: false,
|
||||||
}
|
maxTicksLimit: 8,
|
||||||
|
},
|
||||||
|
offset: true,
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||||
|
let searchParams = new URLSearchParams(window.location.search);
|
||||||
|
let dateInterval = searchParams.get('from-to');
|
||||||
|
let start = moment().subtract(29, 'days');
|
||||||
|
let end = moment();
|
||||||
|
|
||||||
|
if (dateInterval) {
|
||||||
|
dateInterval = dateInterval.split(' - ');
|
||||||
|
start = moment(dateInterval[0]);
|
||||||
|
end = moment(dateInterval[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#date-range').daterangepicker({
|
||||||
|
"showDropdowns": true,
|
||||||
|
"showWeekNumbers": true,
|
||||||
|
"alwaysShowCalendars": true,
|
||||||
|
startDate: start,
|
||||||
|
endDate: end,
|
||||||
|
locale: {
|
||||||
|
format: 'YYYY-MM-DD',
|
||||||
|
firstDay: 1,
|
||||||
|
},
|
||||||
|
minDate: "2023-01-01",
|
||||||
|
maxDate: "2025-12-31",
|
||||||
|
ranges: {
|
||||||
|
'Today': [moment(), moment()],
|
||||||
|
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||||
|
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
|
||||||
|
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
||||||
|
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
||||||
|
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1,
|
||||||
|
'month').endOf(
|
||||||
|
'month')],
|
||||||
|
'This Year': [moment().startOf('year'), moment().endOf('year')],
|
||||||
|
'Last Year': [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year')
|
||||||
|
.endOf(
|
||||||
|
'year')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}).on('apply.daterangepicker', function(ev, picker) {
|
||||||
|
var startDate = picker.startDate.format('YYYY-MM-DD');
|
||||||
|
var endDate = picker.endDate.format('YYYY-MM-DD');
|
||||||
|
console.log('Rentang tanggal dipilih:', startDate, 'sampai',
|
||||||
|
endDate);
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
|
||||||
|
allowEscapeKey: false,
|
||||||
|
allowOutsideClick: false,
|
||||||
|
didOpen: () => {
|
||||||
|
Swal.showLoading();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajaxSetup({
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': csrfToken
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin.get-data-dashboard') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
Swal.close();
|
||||||
|
myChart.data.datasets[0].data = response.dataChartTransaction;
|
||||||
|
myChart.data.datasets[1].data = response.dataChartRefund;
|
||||||
|
myChart.data.labels = response.dataLabel;
|
||||||
|
myChart.update();
|
||||||
|
|
||||||
|
myChartUser.data.datasets[0].data = response.dataChartUser;
|
||||||
|
myChartUser.data.labels = response.dataLabel;
|
||||||
|
myChartUser.update();
|
||||||
|
|
||||||
|
$('#countSuccess').html(response.countSuccess);
|
||||||
|
$('#countCancelled').html(response.countCancelled);
|
||||||
|
$('#countProcessed').html(response.countProcessed);
|
||||||
|
$('#countIndicated').html(response.countIndicated);
|
||||||
|
$('#countWaiting').html(response.countWaiting);
|
||||||
|
$('#totalTransaction').html(response.totalTransaction);
|
||||||
|
|
||||||
|
var activitiesRateTransaction = '';
|
||||||
|
var rateTransactionClass = response.rateTransaction == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateTransaction > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateTransactionClassIcon = response.rateTransaction == 0 ?
|
||||||
|
"mdi-equal" : (response.rateTransaction > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesRateTransaction = `
|
||||||
|
<span class="text-${rateTransactionClass} me-2"><span
|
||||||
|
class="mdi ${rateTransactionClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateTransaction)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateTransaction').html(activitiesRateTransaction);
|
||||||
|
|
||||||
|
$('#countPending').html(response.countPending);
|
||||||
|
$('#countApprove').html(response.countApprove);
|
||||||
|
$('#countDeny').html(response.countDeny);
|
||||||
|
$('#totalRefund').html(response.totalRefund);
|
||||||
|
|
||||||
|
var activitiesRateRefund = '';
|
||||||
|
var rateRefundClass = response.rateRefund == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateRefund > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateRefundClassIcon = response.rateRefund == 0 ?
|
||||||
|
"mdi-equal" : (response.rateRefund > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesRateRefund = `
|
||||||
|
<span class="text-${rateRefundClass} me-2"><span
|
||||||
|
class="mdi ${rateRefundClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateRefund)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateRefund').html(activitiesRateRefund);
|
||||||
|
|
||||||
|
$('#totalUser').html(response.totalUser);
|
||||||
|
|
||||||
|
var activitiesRateUser = '';
|
||||||
|
var rateUserClass = response.rateUser == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateUser > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateUserClassIcon = response.rateUser == 0 ?
|
||||||
|
"mdi-equal" : (response.rateUser > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesRateUser = `
|
||||||
|
<span class="text-${rateUserClass} me-2"><span
|
||||||
|
class="mdi ${rateUserClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateUser)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateUser').html(activitiesRateUser);
|
||||||
|
|
||||||
|
var activitiesRateProfit = '';
|
||||||
|
var rateProfitClass = response.rateProfit == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateProfit > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateProfitMention = response.rateProfit == 0 ? "sama" : (response
|
||||||
|
.rateProfit > 0 ? "meningkat" : "menurun");
|
||||||
|
var rateProfitClassIcon = response.rateProfit == 0 ?
|
||||||
|
"sama" : (response.rateProfit > 0 ?
|
||||||
|
"meningkat" : "menurun");
|
||||||
|
|
||||||
|
activitiesRateProfit = `
|
||||||
|
<div class="alert alert-${rateProfitClass} alert-dismissible fade show mb-3"
|
||||||
|
role="alert">
|
||||||
|
Pendapatan ${rateProfitMention}
|
||||||
|
<span
|
||||||
|
class="mdi ${rateProfitClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateProfit)}%
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateProfit').html(activitiesRateProfit);
|
||||||
|
|
||||||
|
// ListTopUser
|
||||||
|
var activitiesHtml = '';
|
||||||
|
|
||||||
|
response.dataTopUser.forEach(user => {
|
||||||
|
let fotoProfile = user.foto_profile == null ?
|
||||||
|
"{{ asset('storage/foto-profile/face1.jpg') }}" :
|
||||||
|
"{{ asset('storage/foto-profile') }}/" + user
|
||||||
|
.foto_profile;
|
||||||
|
let totalTransaction = new Intl.NumberFormat('id-ID', {
|
||||||
|
style: 'currency',
|
||||||
|
currency: 'IDR'
|
||||||
|
}).format(user.total_transaksi_berhasil);
|
||||||
|
let totalRefund = new Intl.NumberFormat('id-ID', {
|
||||||
|
style: 'currency',
|
||||||
|
currency: 'IDR'
|
||||||
|
}).format(user.total_refund_berhasil);
|
||||||
|
let transactionWidth = ((parseFloat(user
|
||||||
|
.total_transaksi_berhasil) *
|
||||||
|
100) / (parseFloat(user
|
||||||
|
.total_transaksi_berhasil) +
|
||||||
|
parseFloat(user.total_refund_berhasil))) / 1.5;
|
||||||
|
let refundWidth = ((parseFloat(user.total_refund_berhasil) *
|
||||||
|
100) / (
|
||||||
|
parseFloat(user.total_transaksi_berhasil) +
|
||||||
|
parseFloat(user.total_refund_berhasil))) / 1.5;
|
||||||
|
activitiesHtml += `
|
||||||
|
<li class="media">
|
||||||
|
<img class="mr-3 rounded" width="55"
|
||||||
|
src="${fotoProfile}"
|
||||||
|
alt="product">
|
||||||
|
<div class="media-body">
|
||||||
|
<div class="float-right">
|
||||||
|
<div class="font-weight-600 text-muted text-small">
|
||||||
|
${user.jumlah_transaksi} transaksi
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="media-title">${user.nama_lengkap}</div>
|
||||||
|
<div class="mt-1">
|
||||||
|
<div class="budget-price">
|
||||||
|
<div class="budget-price-square bg-primary"
|
||||||
|
data-width="${transactionWidth}%" style="width:${transactionWidth}%">
|
||||||
|
</div>
|
||||||
|
<div class="budget-price-label">
|
||||||
|
${totalTransaction}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="budget-price">
|
||||||
|
<div class="budget-price-square bg-danger"
|
||||||
|
data-width="${refundWidth}%" style="width:${refundWidth}%">
|
||||||
|
</div>
|
||||||
|
<div class="budget-price-label">
|
||||||
|
${totalRefund}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
`;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#listTopUser').html(activitiesHtml);
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
Swal.close();
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
@section('content')
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let selected = [];
|
let selected = [];
|
||||||
@ -126,6 +126,13 @@
|
|||||||
icon: result.status ? 'success' : 'error'
|
icon: result.status ? 'success' : 'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (result.status) {
|
if (result.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-notification.update-new-notification') }}",
|
||||||
|
data: formData,
|
||||||
|
type: 'POST',
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
});
|
||||||
location.href =
|
location.href =
|
||||||
"{{ route('admin-notification.index') }}";
|
"{{ route('admin-notification.index') }}";
|
||||||
}
|
}
|
||||||
@ -150,6 +157,8 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@endsection
|
||||||
|
@section('content')
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
@section('content')
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let selected = {!! json_encode($email) !!};
|
let selected = {!! json_encode($email) !!};
|
||||||
@ -145,8 +145,8 @@
|
|||||||
processData: false,
|
processData: false,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
});
|
});
|
||||||
// location.href =
|
location.href =
|
||||||
// "{{ route('admin-notification.index') }}";
|
"{{ route('admin-notification.index') }}";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -170,6 +170,8 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@endsection
|
||||||
|
@section('content')
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
@section('content')
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let listNotifikasi = $('#table-notifikasi').DataTable({
|
let listNotifikasi = $('#table-notifikasi').DataTable({
|
||||||
@ -67,6 +67,8 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@endsection
|
||||||
|
@section('content')
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
@section('content')
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let listUser = $('#table-user').DataTable({
|
let listUser = $('#table-user').DataTable({
|
||||||
@ -65,6 +65,8 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@endsection
|
||||||
|
@section('content')
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
@ -83,7 +85,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex justify-content-start mb-3">
|
<div class="d-flex justify-content-start mb-3">
|
||||||
{{ $notification->content }}
|
{!! $notification->content !!}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex justify-content-center mt-5 mb-3">
|
<div class="d-flex justify-content-center mt-5 mb-3">
|
||||||
|
@ -99,6 +99,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#accept').on('click', function() {
|
$('#accept').on('click', function() {
|
||||||
@ -143,6 +145,14 @@
|
|||||||
icon: response.status ? 'success' : 'error'
|
icon: response.status ? 'success' : 'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-notification.update-new-notification') }}",
|
||||||
|
data: {
|
||||||
|
receivers: response
|
||||||
|
.receivers,
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
});
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -181,11 +191,11 @@
|
|||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Tolak Refund?',
|
title: 'Tolak Refund?',
|
||||||
text: 'Berikan alasan menolak refund ini'
|
text: 'Berikan alasan menolak refund ini',
|
||||||
input: 'text',
|
input: 'text',
|
||||||
inputPlaceholder: 'Cth. Bukti foto tidak sesuai',
|
inputPlaceholder: 'Cth. Bukti foto tidak sesuai',
|
||||||
confirmButtonText: 'Kirim',
|
confirmButtonText: 'Kirim',
|
||||||
showCancelButton: true
|
showCancelButton: true,
|
||||||
cancelButtonText: 'Batal'
|
cancelButtonText: 'Batal'
|
||||||
}).then((a) => {
|
}).then((a) => {
|
||||||
if (a.isConfirmed) {
|
if (a.isConfirmed) {
|
||||||
@ -213,6 +223,14 @@
|
|||||||
'success' : 'error'
|
'success' : 'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-notification.update-new-notification') }}",
|
||||||
|
data: {
|
||||||
|
receivers: response
|
||||||
|
.receivers,
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
});
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -40,6 +40,9 @@
|
|||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@include('admin.refund.modal-keterangan-status')
|
@include('admin.refund.modal-keterangan-status')
|
||||||
|
@include('admin.transaction.modal-keterangan-status')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
let listRefund = $('#table-refund').DataTable({
|
let listRefund = $('#table-refund').DataTable({
|
||||||
@ -147,5 +150,4 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@extends('admin.transaction.modal-keterangan-status')
|
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -97,6 +97,14 @@
|
|||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<address>
|
||||||
|
<strong>Deskripsi:</strong><br>
|
||||||
|
{!! $transaction->deskripsi_transaksi !!}<br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{-- batas pembayaran dan pengiriman --}}
|
{{-- batas pembayaran dan pengiriman --}}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
@ -107,20 +115,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 text-md-right">
|
<div class="col-md-6 text-md-right">
|
||||||
<address>
|
<address>
|
||||||
<strong>Estimasi Pengiriman:</strong><br>
|
<strong>Batas Pengiriman:</strong><br>
|
||||||
{{ date('Y', strtotime($transaction->batas_pengiriman_barang_awal)) ==
|
{{ date('d F Y', strtotime($transaction->batas_pengiriman_barang_akhir)) }}<br>
|
||||||
date('Y', strtotime($transaction->batas_pengiriman_barang_akhir))
|
|
||||||
? (date('F', strtotime($transaction->batas_pengiriman_barang_awal)) ==
|
|
||||||
date('F', strtotime($transaction->batas_pengiriman_barang_akhir))
|
|
||||||
? date('d', strtotime($transaction->batas_pengiriman_barang_awal)) .
|
|
||||||
'-' .
|
|
||||||
date('d F Y', strtotime($transaction->batas_pengiriman_barang_akhir))
|
|
||||||
: date('F', strtotime($transaction->batas_pengiriman_barang_awal)) .
|
|
||||||
'-' .
|
|
||||||
date('d F Y', strtotime($transaction->batas_pengiriman_barang_akhir)))
|
|
||||||
: date('d F', strtotime($transaction->batas_pengiriman_barang_awal)) .
|
|
||||||
'-' .
|
|
||||||
date('d F Y', strtotime($transaction->batas_pengiriman_barang_akhir)) }}<br>
|
|
||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -139,13 +135,12 @@
|
|||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Keterangan --}}
|
{{-- Keterangan --}}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<address>
|
<address>
|
||||||
<strong>Status Indikasi Penipuan:</strong><br>
|
<strong>Status Indikasi Penipuan:</strong><br>
|
||||||
{{ $transaction->fraud_status == null ? 'Tidak ada' : 'Ada' }}
|
{{ $transaction->fraud_status == null ? 'Tidak ada' : ucwords($transaction->fraud_status) }}
|
||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 text-md-right">
|
<div class="col-md-6 text-md-right">
|
||||||
@ -245,6 +240,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#acceptTransaction').on('click', function() {
|
$('#acceptTransaction').on('click', function() {
|
||||||
@ -289,6 +286,14 @@
|
|||||||
icon: response.status ? 'success' : 'error'
|
icon: response.status ? 'success' : 'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-notification.update-new-notification') }}",
|
||||||
|
data: {
|
||||||
|
receivers: response
|
||||||
|
.receivers
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
});
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -368,6 +373,14 @@
|
|||||||
'success' : 'error'
|
'success' : 'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-notification.update-new-notification') }}",
|
||||||
|
data: {
|
||||||
|
receivers: response
|
||||||
|
.receivers
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
});
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
</div>
|
</div>
|
||||||
@include('admin.transaction.modal-tracking')
|
@include('admin.transaction.modal-tracking')
|
||||||
@include('admin.transaction.modal-keterangan-status')
|
@include('admin.transaction.modal-keterangan-status')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let listTransaction = $('#table-transaction').DataTable({
|
let listTransaction = $('#table-transaction').DataTable({
|
||||||
@ -104,30 +106,30 @@
|
|||||||
render: function(data, type, row) {
|
render: function(data, type, row) {
|
||||||
if (row.status_transaksi == 'created') {
|
if (row.status_transaksi == 'created') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (row.status_transaksi == 'success') {
|
} else if (row.status_transaksi == 'success') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['process', 'sending', 'sent'].includes(row
|
} else if (['process', 'sending', 'sent'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['cancel', 'failure', 'refund'].includes(row
|
} else if (['cancel', 'failure', 'refund'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else {
|
} else {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
className: 'text-center'
|
className: 'text-center'
|
||||||
@ -169,34 +171,34 @@
|
|||||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||||
$.each(transactionDatas, function(index, transactionDescription) {
|
$.each(transactionDatas, function(index, transactionDescription) {
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||||
</div>
|
|
||||||
<div class="activity-detail">
|
|
||||||
<div class="mb-2">
|
|
||||||
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
|
||||||
</div>
|
|
||||||
<p>${transactionDescription.deskripsi}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
`;
|
<div class="activity-detail">
|
||||||
|
<div class="mb-2">
|
||||||
|
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
||||||
|
</div>
|
||||||
|
<p>${transactionDescription.deskripsi}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||||
</div>
|
|
||||||
<div class="activity-detail">
|
|
||||||
<div class="mb-2">
|
|
||||||
<span class="text-job text-primary">--, --:--:-- --</span>
|
|
||||||
</div>
|
|
||||||
<p>Kosong</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
`;
|
<div class="activity-detail">
|
||||||
|
<div class="mb-2">
|
||||||
|
<span class="text-job text-primary">--, --:--:-- --</span>
|
||||||
|
</div>
|
||||||
|
<p>Kosong</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menampilkan data dalam modal
|
// Menampilkan data dalam modal
|
||||||
|
@ -153,6 +153,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#tampilKTP').on('click', function() {
|
$('#tampilKTP').on('click', function() {
|
||||||
@ -218,18 +220,18 @@
|
|||||||
icon: response.status ? 'success' : 'error',
|
icon: response.status ? 'success' : 'error',
|
||||||
confirmButtonText: 'OK'
|
confirmButtonText: 'OK'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
location.reload();
|
if (response.status) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: function(error) {
|
error: function(error) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Gagal!',
|
title: 'Gagal!',
|
||||||
text: 'Tidak ada data yang dihapus, karena ' +
|
text: 'Terjadi Kesalahan di server',
|
||||||
error,
|
|
||||||
icon: 'error'
|
icon: 'error'
|
||||||
}).then(function() {
|
|
||||||
location.reload();
|
|
||||||
});
|
});
|
||||||
|
console.log(error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -298,16 +300,18 @@
|
|||||||
'success' : 'error',
|
'success' : 'error',
|
||||||
confirmButtonText: 'OK'
|
confirmButtonText: 'OK'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
location.reload();
|
if (response.status) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: function(error) {
|
error: function(error) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Gagal!',
|
title: 'Gagal!',
|
||||||
text: 'Gagal mengubah status akun, karena ' +
|
text: 'Terjadi Kesalahan di server',
|
||||||
error,
|
|
||||||
icon: 'info'
|
icon: 'info'
|
||||||
});
|
});
|
||||||
|
console.log(error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
let listUser = $('#table-user').DataTable({
|
let listUser = $('#table-user').DataTable({
|
||||||
@ -53,9 +55,9 @@
|
|||||||
render: function(data, type, row) {
|
render: function(data, type, row) {
|
||||||
var foto = data;
|
var foto = data;
|
||||||
return `<figure class="avatar mr-2 avatar-xl">
|
return `<figure class="avatar mr-2 avatar-xl">
|
||||||
<img src="${foto !== null ? "{{ asset('storage/foto-profile/') }}/" + foto : '{{ asset('assets/img/avatar/avatar-6.png') }}'}"
|
<img src="${foto !== null ? "{{ asset('storage/foto-profile/') }}/" + foto : '{{ asset('assets/img/avatar/avatar-6.png') }}'}"
|
||||||
alt="...">
|
alt="...">
|
||||||
</figure>`;
|
</figure>`;
|
||||||
},
|
},
|
||||||
orderable: false,
|
orderable: false,
|
||||||
searchable: false,
|
searchable: false,
|
||||||
@ -108,6 +110,54 @@
|
|||||||
className: 'text-center'
|
className: 'text-center'
|
||||||
}],
|
}],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#table-user').on('click', '#deleteUser', function() {
|
||||||
|
const id = $(this).data('id');
|
||||||
|
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
|
||||||
|
allowEscapeKey: false,
|
||||||
|
allowOutsideClick: false,
|
||||||
|
didOpen: () => {
|
||||||
|
Swal.showLoading();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajaxSetup({
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': csrfToken
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('admin-user.destroy') }}",
|
||||||
|
type: "DELETE",
|
||||||
|
data: {
|
||||||
|
id: id,
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
Swal.fire({
|
||||||
|
title: response.status ? 'Berhasil hapus akun' :
|
||||||
|
'Gagal hapus akun',
|
||||||
|
text: response.message,
|
||||||
|
icon: response.status ? 'success' : 'error'
|
||||||
|
}).then(function() {
|
||||||
|
if (response.status) {
|
||||||
|
listUser.ajax.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Error',
|
||||||
|
text: 'Terjadi kesalahan di server',
|
||||||
|
icon: 'error'
|
||||||
|
});
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -44,6 +44,8 @@
|
|||||||
</div>
|
</div>
|
||||||
@include('user.contact.modal-detail-contact')
|
@include('user.contact.modal-detail-contact')
|
||||||
@include('user.contact.modal-add-contact')
|
@include('user.contact.modal-add-contact')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let check = false;
|
let check = false;
|
||||||
|
@ -1,79 +1,196 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
|
@section('css-tambahan')
|
||||||
|
<style>
|
||||||
|
.select2-container .select2-selection--single {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--single:focus {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||||
|
color: #900c3e;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-selection--single .select2-selection__arrow {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default.select2-container--open .select2-selection--single {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results {
|
||||||
|
border-bottom: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-results__option {
|
||||||
|
padding: 10px;
|
||||||
|
color: #333;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-results>.select2-results__options .select2-results__option--highlighted {
|
||||||
|
background-color: #900c3e !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endsection
|
||||||
@section('content')
|
@section('content')
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-stats">
|
<div class="card-stats">
|
||||||
<div class="card-stats-title">List Transaction -
|
<div class="card-stats-title">
|
||||||
<div class="dropdown d-inline">
|
<h4>
|
||||||
<a class="font-weight-600 dropdown-toggle" data-toggle="dropdown" href="#"
|
Transaksi - <select class="input" style="width: 40%;" name="filterRole" id="filterRole">
|
||||||
id="orders-month">August</a>
|
<option value="1" selected>Semua</option>
|
||||||
<ul class="dropdown-menu dropdown-menu-sm" aria-labelledby="orders-month"
|
<option value="2">Pembeli</option>
|
||||||
id="dropdownMenu1">
|
<option value="3">Penjual</option>
|
||||||
<li class="dropdown-title">Pilih Bulan</li>
|
</select>
|
||||||
<li><a href="#" class="dropdown-item">Januari</a></li>
|
</h4>
|
||||||
<li><a href="#" class="dropdown-item">Februari</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">Maret</a></li>
|
<div id="semua">
|
||||||
<li><a href="#" class="dropdown-item">April</a></li>
|
<div class="card-stats-items">
|
||||||
<li><a href="#" class="dropdown-item">May</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item">Juni</a></li>
|
<div class="card-stats-item-count" id="countAllFinished">{{ $countAllFinished }}
|
||||||
<li><a href="#" class="dropdown-item">Juli</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">Agustus</a></li>
|
<div class="card-stats-item-label">Selesai</div>
|
||||||
<li><a href="#" class="dropdown-item">September</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">Oktober</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item">November</a></li>
|
<div class="card-stats-item-count" id="countAllPending">{{ $countAllPending }}</div>
|
||||||
<li><a href="#" class="dropdown-item">Desember</a></li>
|
<div class="card-stats-item-label">Menunggu</div>
|
||||||
</ul>
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countAllProcessed">{{ $countAllProcessed }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Diproses</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown d-inline">
|
<div class="card-stats-items">
|
||||||
<a class="font-weight-600 dropdown-toggle" data-toggle="dropdown" href="#"
|
<div class="card-stats-item">
|
||||||
id="orders-year">2023</a>
|
<div class="card-stats-item-count" id="countAllCanceled">{{ $countAllCanceled }}
|
||||||
<ul class="dropdown-menu dropdown-menu-sm" aria-labelledby="orders-year"
|
</div>
|
||||||
id="dropdownMenu2">
|
<div class="card-stats-item-label">Gagal</div>
|
||||||
<li class="dropdown-title">Pilih Tahun</li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">2019</a></li>
|
<div class="card-stats-item">
|
||||||
<li><a href="#" class="dropdown-item">2020</a></li>
|
<div class="card-stats-item-count" id="countAllRefund">{{ $countAllRefund }}</div>
|
||||||
<li><a href="#" class="dropdown-item">2021</a></li>
|
<div class="card-stats-item-label">Refund</div>
|
||||||
<li><a href="#" class="dropdown-item">2022</a></li>
|
</div>
|
||||||
<li><a href="#" class="dropdown-item">2023</a></li>
|
<div class="card-stats-item">
|
||||||
</ul>
|
<div class="card-stats-item-count" id="countAllIndicated">{{ $countAllIndicated }}
|
||||||
</div>
|
</div>
|
||||||
Sebagai -
|
<div class="card-stats-item-label">Tertunda</div>
|
||||||
<div class="dropdown d-inline">
|
</div>
|
||||||
<a class="font-weight-600 dropdown-toggle" data-toggle="dropdown" href="#"
|
|
||||||
id="orders-role">Semua</a>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-sm" aria-labelledby="orders-role"
|
|
||||||
id="dropdownMenu3">
|
|
||||||
<li class="dropdown-title">Pilih Peran</li>
|
|
||||||
<li><a href="#" class="dropdown-item">Semua</a></li>
|
|
||||||
<li><a href="#" class="dropdown-item">Pembeli</a></li>
|
|
||||||
<li><a href="#" class="dropdown-item">Penjual</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-stats-items">
|
<div id="pembeli" hidden>
|
||||||
<div class="card-stats-item">
|
<div class="card-stats-items mt-3">
|
||||||
<div class="card-stats-item-count">114</div>
|
<div class="card-stats-item">
|
||||||
<div class="card-stats-item-label">Dibuat</div>
|
<div class="card-stats-item-count" id="countBuyerFinished">{{ $countBuyerFinished }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Selesai</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerPaid">{{ $countBuyerPaid }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Dibayar</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerProcessed">
|
||||||
|
{{ $countBuyerProcessed }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Diproses</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerPending">{{ $countBuyerPending }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Menunggu</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-stats-item">
|
<div class="card-stats-items">
|
||||||
<div class="card-stats-item-count">12</div>
|
<div class="card-stats-item">
|
||||||
<div class="card-stats-item-label">Pending</div>
|
<div class="card-stats-item-count" id="countBuyerCancelled">
|
||||||
|
{{ $countBuyerCancelled }}</div>
|
||||||
|
<div class="card-stats-item-label">Gagal</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerIndicated">
|
||||||
|
{{ $countBuyerIndicated }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Tertunda</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerRefundPending">
|
||||||
|
{{ $countBuyerRefundPending }}</div>
|
||||||
|
<div class="card-stats-item-label">Pengajuan Refund</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerRefundApproved">
|
||||||
|
{{ $countBuyerRefundApproved }}</div>
|
||||||
|
<div class="card-stats-item-label">Disetujui</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countBuyerRefundDenied">
|
||||||
|
{{ $countBuyerRefundDenied }}</div>
|
||||||
|
<div class="card-stats-item-label">Ditolak</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-stats-item">
|
</div>
|
||||||
<div class="card-stats-item-count">23</div>
|
<div id="penjual" hidden>
|
||||||
<div class="card-stats-item-label">Gagal</div>
|
<div class="card-stats-items mt-3">
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerFinished">
|
||||||
|
{{ $countSellerFinished }}</div>
|
||||||
|
<div class="card-stats-item-label">selesai</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerProcessed">
|
||||||
|
{{ $countSellerProcessed }}</div>
|
||||||
|
<div class="card-stats-item-label">Diproses</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerSending">
|
||||||
|
{{ $countSellerSending }}</div>
|
||||||
|
<div class="card-stats-item-label">Dikirim</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerSent">{{ $countSellerSent }}
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item-label">Sampai</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-stats-item">
|
<div class="card-stats-items">
|
||||||
<div class="card-stats-item-count">23</div>
|
<div class="card-stats-item">
|
||||||
<div class="card-stats-item-label">Gagal</div>
|
<div class="card-stats-item-count" id="countSellerPending">
|
||||||
</div>
|
{{ $countSellerPending }}</div>
|
||||||
<div class="card-stats-item">
|
<div class="card-stats-item-label">Menunggu</div>
|
||||||
<div class="card-stats-item-count">23</div>
|
</div>
|
||||||
<div class="card-stats-item-label">Gagal</div>
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerCancelled">
|
||||||
|
{{ $countSellerCancelled }}</div>
|
||||||
|
<div class="card-stats-item-label">Gagal</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerRefund">
|
||||||
|
{{ $countSellerRefund }}</div>
|
||||||
|
<div class="card-stats-item-label">Refund</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-stats-item">
|
||||||
|
<div class="card-stats-item-count" id="countSellerIndicated">
|
||||||
|
{{ $countSellerIndicated }}</div>
|
||||||
|
<div class="card-stats-item-label">Tertunda</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,16 +201,23 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Jumlah Transaction</h4>
|
<h4>Jumlah Transaction</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body" id="totalTransaction">
|
||||||
159 Transaksi
|
{{ $totalTransaction }} Transaksi
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mb-0 text-muted" id="rateTransaction">
|
||||||
|
<span
|
||||||
|
class="text-{{ $rateTransaction == 0 ? 'secondary text-black-50' : ($rateTransaction > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
|
class="mdi {{ $rateTransaction == 0 ? 'mdi-equal' : ($rateTransaction > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($rateTransaction) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-chart">
|
<div class="card-chart">
|
||||||
<canvas id="balance-chart" height="80"></canvas>
|
<canvas id="pemasukan-chart" height="100"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-icon shadow-primary bg-primary">
|
<div class="card-icon shadow-primary bg-primary">
|
||||||
<i class="fas fa-dollar-sign"></i>
|
<i class="fas fa-dollar-sign"></i>
|
||||||
@ -102,16 +226,23 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Pemasukan</h4>
|
<h4>Pemasukan</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body" id="totalPemasukan">
|
||||||
Rp. 35.000.000,00
|
Rp {{ number_format($totalPemasukan, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mb-0 text-muted" id="ratePemasukan">
|
||||||
|
<span
|
||||||
|
class="text-{{ $ratePemasukan == 0 ? 'secondary text-black-50' : ($ratePemasukan > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
|
class="mdi {{ $ratePemasukan == 0 ? 'mdi-equal' : ($ratePemasukan > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($ratePemasukan) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 col-md-4 col-sm-12">
|
<div class="col-lg-4 col-md-12 col-sm-12">
|
||||||
<div class="card card-statistic-2">
|
<div class="card card-statistic-2">
|
||||||
<div class="card-chart">
|
<div class="card-chart">
|
||||||
<canvas id="sales-chart" height="80"></canvas>
|
<canvas id="pengeluaran-chart" height="100"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-icon shadow-primary bg-primary">
|
<div class="card-icon shadow-primary bg-primary">
|
||||||
<i class="fas fa-shopping-bag"></i>
|
<i class="fas fa-shopping-bag"></i>
|
||||||
@ -120,35 +251,62 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h4>Pengeluaran</h4>
|
<h4>Pengeluaran</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">Rp. 35.000.000,00</div>
|
<div class="card-body" id="totalPengeluaran">Rp
|
||||||
|
{{ number_format($totalPengeluaran, 2, ',', '.') }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mb-0 text-muted" id="ratePengeluaran">
|
||||||
|
<span
|
||||||
|
class="text-{{ $ratePengeluaran == 0 ? 'secondary text-black-50' : ($ratePengeluaran > 0 ? 'success' : 'danger') }} me-2"><span
|
||||||
|
class="mdi {{ $ratePengeluaran == 0 ? 'mdi-equal' : ($ratePengeluaran > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
|
{{ abs($ratePengeluaran) }}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" name="from-to" class="form-control" id="date-range">
|
||||||
|
<span class="input-group-text bg-primary text-white align-items-center">
|
||||||
|
<i class="mdi mdi-calendar-range font-13"></i>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="alert alert-primary alert-dismissible fade show mb-3" role="alert">
|
<div id="rateProfit">
|
||||||
Pendapatan Hari Ini meningkat <span class="mdi mdi-arrow-up-bold"></span>
|
<div class="alert alert-{{ $rateProfit == 0 ? 'secondary text-black-50' : ($rateProfit > 0 ? 'success' : 'error') }} alert-dismissible fade show mb-3"
|
||||||
5.27%</span>
|
role="alert">
|
||||||
</div>
|
Transaksi {{ $rateProfit == 0 ? 'sama' : ($rateProfit > 0 ? 'meningkat' : 'menurun') }}
|
||||||
<div class="card-header">
|
<span
|
||||||
<h4 style="font-size: 36px;">Transaksi</h4>
|
class="mdi {{ $rateProfit == 0 ? 'mdi-equal' : ($rateProfit > 0 ? 'mdi-arrow-up-bold' : 'mdi-arrow-down-bold') }}"></span>
|
||||||
<div class="card-header-action">
|
{{ $rateProfit }}%
|
||||||
<div class="btn-group">
|
|
||||||
<a href="#" class="btn btn-primary">Week</a>
|
|
||||||
<a href="#" class="btn">Month</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card-header">
|
||||||
|
<h4>Transaksi</h4>
|
||||||
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<canvas id="myChart" height="150"></canvas>
|
<canvas id="myChart" height="120"></canvas>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
|
<script>
|
||||||
|
let dataLabel = {!! json_encode($dataLabel) !!}
|
||||||
|
let dataChartTransaction = {{ json_encode($dataChartTransaction) }}
|
||||||
|
let dataChartRefund = {{ json_encode($dataChartRefund) }}
|
||||||
|
let dataChartPemasukan = {{ json_encode($dataChartPemasukan) }}
|
||||||
|
let dataChartPengeluaran = {{ json_encode($dataChartPengeluaran) }}
|
||||||
|
</script>
|
||||||
<script>
|
<script>
|
||||||
// Set new default font family and font color to mimic Bootstrap's default styling
|
// Set new default font family and font color to mimic Bootstrap's default styling
|
||||||
Chart.defaults.global.defaultFontFamily = 'Nunito',
|
Chart.defaults.global.defaultFontFamily = 'Nunito',
|
||||||
@ -156,15 +314,13 @@
|
|||||||
Chart.defaults.global.defaultFontColor = '#858796';
|
Chart.defaults.global.defaultFontColor = '#858796';
|
||||||
|
|
||||||
var ctx = document.getElementById("myChart").getContext('2d');
|
var ctx = document.getElementById("myChart").getContext('2d');
|
||||||
var myChart = new Chart(ctx, {
|
var myChartTransaksi = new Chart(ctx, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Agu", "Sep",
|
labels: dataLabel,
|
||||||
"Okt", "Nov", "Des"
|
|
||||||
],
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Transaksi',
|
label: 'Transaksi',
|
||||||
data: [3200, 18009, 4305, 3022, 6310, 5120, 5880, 6154, 0],
|
data: dataChartTransaction,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: 'rgba(63,82,227,.8)',
|
backgroundColor: 'rgba(63,82,227,.8)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
@ -176,7 +332,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Refund',
|
label: 'Refund',
|
||||||
data: [2207, 3403, 2200, 5025, 2302, 4208, 3880, 4880, 5000],
|
data: dataChartRefund,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: 'rgba(254,86,83,.7)',
|
backgroundColor: 'rgba(254,86,83,.7)',
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
@ -208,19 +364,12 @@
|
|||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
beginAtZero: true,
|
beginAtZero: true,
|
||||||
stepSize: 15000,
|
|
||||||
callback: function(value, index, values) {
|
|
||||||
// return 'Rp.' + value;
|
|
||||||
return new Intl.NumberFormat('id-ID', {
|
|
||||||
style: 'currency',
|
|
||||||
currency: 'IDR',
|
|
||||||
}).format(value);
|
|
||||||
},
|
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
maxTicksLimit: 6,
|
||||||
},
|
},
|
||||||
scaleLabel: {
|
scaleLabel: {
|
||||||
display: true,
|
display: true,
|
||||||
labelString: 'Dalam Ratusan Juta', // Label khusus untuk sumbu Y
|
labelString: 'Dalam Rupiah (Rp)', // Label khusus untuk sumbu Y
|
||||||
fontSize: 16 // Ukuran font untuk label sumbu Y
|
fontSize: 16 // Ukuran font untuk label sumbu Y
|
||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
@ -230,91 +379,91 @@
|
|||||||
tickMarkLength: 15,
|
tickMarkLength: 15,
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
fontSize: 16,
|
display: false,
|
||||||
}
|
maxTicksLimit: 8,
|
||||||
|
},
|
||||||
|
offset: true,
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var balance_chart = document.getElementById("balance-chart").getContext('2d');
|
var pemasukan_chart = document.getElementById("pemasukan-chart").getContext('2d');
|
||||||
|
|
||||||
var balance_chart_bg_color = balance_chart.createLinearGradient(0, 0, 0, 70);
|
var pemasukan_chart_bg_color = pemasukan_chart.createLinearGradient(0, 0, 0, 70);
|
||||||
balance_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
|
||||||
balance_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
|
||||||
|
|
||||||
var myChart = new Chart(balance_chart, {
|
pemasukan_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
||||||
type: 'line',
|
|
||||||
data: {
|
pemasukan_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
||||||
labels: ['16-07-2018', '17-07-2018', '18-07-2018', '19-07-2018', '20-07-2018', '21-07-2018',
|
|
||||||
'22-07-2018', '23-07-2018', '24-07-2018', '25-07-2018', '26-07-2018', '27-07-2018',
|
var myChartPemasukan = new Chart(
|
||||||
'28-07-2018', '29-07-2018', '30-07-2018', '31-07-2018'
|
pemasukan_chart, {
|
||||||
],
|
type: 'line',
|
||||||
datasets: [{
|
data: {
|
||||||
label: 'Balance',
|
labels: dataLabel,
|
||||||
data: [50, 61, 80, 50, 72, 52, 60, 41, 30, 45, 70, 40, 93, 63, 50, 62],
|
datasets: [{
|
||||||
backgroundColor: balance_chart_bg_color,
|
label: 'Pemasukan',
|
||||||
borderWidth: 3,
|
data: dataChartPemasukan,
|
||||||
borderColor: 'rgba(63,82,227,1)',
|
backgroundColor: pemasukan_chart_bg_color,
|
||||||
pointBorderWidth: 0,
|
borderWidth: 3,
|
||||||
pointBorderColor: 'transparent',
|
borderColor: 'rgba(63,82,227,1)',
|
||||||
pointRadius: 3,
|
pointBorderWidth: 0,
|
||||||
pointBackgroundColor: 'transparent',
|
pointBorderColor: 'transparent',
|
||||||
pointHoverBackgroundColor: 'rgba(63,82,227,1)',
|
pointRadius: 3,
|
||||||
}]
|
pointBackgroundColor: 'transparent',
|
||||||
},
|
pointHoverBackgroundColor: 'rgba(63,82,227,1)',
|
||||||
options: {
|
|
||||||
layout: {
|
|
||||||
padding: {
|
|
||||||
bottom: -1,
|
|
||||||
left: -1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
display: false
|
|
||||||
},
|
|
||||||
scales: {
|
|
||||||
yAxes: [{
|
|
||||||
gridLines: {
|
|
||||||
display: false,
|
|
||||||
drawBorder: false,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
beginAtZero: true,
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
}],
|
|
||||||
xAxes: [{
|
|
||||||
gridLines: {
|
|
||||||
drawBorder: false,
|
|
||||||
display: false,
|
|
||||||
},
|
|
||||||
ticks: {
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
options: {
|
||||||
});
|
layout: {
|
||||||
|
padding: 10
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
display: false
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
yAxes: [{
|
||||||
|
gridLines: {
|
||||||
|
display: false,
|
||||||
|
drawBorder: false,
|
||||||
|
},
|
||||||
|
ticks: {
|
||||||
|
beginAtZero: true,
|
||||||
|
display: false,
|
||||||
|
maxTicksLimit: 4,
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
xAxes: [{
|
||||||
|
gridLines: {
|
||||||
|
drawBorder: false,
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
ticks: {
|
||||||
|
display: false,
|
||||||
|
maxTicksLimit: 8,
|
||||||
|
},
|
||||||
|
offset: true,
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var sales_chart = document.getElementById("sales-chart").getContext('2d');
|
var pengeluaran = document.getElementById("pengeluaran-chart");
|
||||||
|
var pengeluaran_chart = pengeluaran.getContext('2d');
|
||||||
|
|
||||||
var sales_chart_bg_color = sales_chart.createLinearGradient(0, 0, 0, 80);
|
var pengeluaran_chart_bg_color = pengeluaran_chart.createLinearGradient(0, 0, 0, 80);
|
||||||
balance_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
pengeluaran_chart_bg_color.addColorStop(0, 'rgba(63,82,227,.2)');
|
||||||
balance_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
pengeluaran_chart_bg_color.addColorStop(1, 'rgba(63,82,227,0)');
|
||||||
|
|
||||||
var myChart = new Chart(sales_chart, {
|
var myChartPengeluaran = new Chart(pengeluaran_chart, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: {
|
data: {
|
||||||
labels: ['16-07-2018', '17-07-2018', '18-07-2018', '19-07-2018', '20-07-2018', '21-07-2018',
|
labels: dataLabel,
|
||||||
'22-07-2018', '23-07-2018', '24-07-2018', '25-07-2018', '26-07-2018', '27-07-2018',
|
|
||||||
'28-07-2018', '29-07-2018', '30-07-2018', '31-07-2018'
|
|
||||||
],
|
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Sales',
|
label: 'Pengeluaran',
|
||||||
data: [70, 62, 44, 40, 21, 63, 82, 52, 50, 31, 70, 50, 91, 63, 51, 60],
|
data: dataChartPengeluaran,
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
backgroundColor: balance_chart_bg_color,
|
backgroundColor: pengeluaran_chart_bg_color,
|
||||||
borderWidth: 3,
|
borderWidth: 3,
|
||||||
borderColor: 'rgba(63,82,227,1)',
|
borderColor: 'rgba(63,82,227,1)',
|
||||||
pointBorderWidth: 0,
|
pointBorderWidth: 0,
|
||||||
@ -326,10 +475,7 @@
|
|||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
layout: {
|
layout: {
|
||||||
padding: {
|
padding: 10
|
||||||
bottom: -1,
|
|
||||||
left: -1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
display: false
|
display: false
|
||||||
@ -342,20 +488,244 @@
|
|||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
beginAtZero: true,
|
beginAtZero: true,
|
||||||
display: false
|
display: false,
|
||||||
|
maxTicksLimit: 4,
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
xAxes: [{
|
xAxes: [{
|
||||||
gridLines: {
|
gridLines: {
|
||||||
drawBorder: false,
|
drawBorder: false,
|
||||||
display: false,
|
display: true,
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
display: false
|
display: false,
|
||||||
}
|
maxTicksLimit: 8,
|
||||||
|
},
|
||||||
|
offset: true,
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||||
|
let searchParams = new URLSearchParams(window.location.search);
|
||||||
|
let dateInterval = searchParams.get('from-to');
|
||||||
|
let start = moment().subtract(29, 'days');
|
||||||
|
let end = moment();
|
||||||
|
|
||||||
|
$('#filterRole').select2();
|
||||||
|
|
||||||
|
$('#filterRole').change(function() {
|
||||||
|
let id = $(this).val();
|
||||||
|
|
||||||
|
if (id == "1") {
|
||||||
|
$('#semua').removeAttr('hidden');
|
||||||
|
$('#pembeli').attr('hidden', true);
|
||||||
|
$('#penjual').attr('hidden', true);
|
||||||
|
} else if (id == "2") {
|
||||||
|
$('#semua').attr('hidden', true);
|
||||||
|
$('#pembeli').removeAttr('hidden');
|
||||||
|
$('#penjual').attr('hidden', true);
|
||||||
|
} else {
|
||||||
|
$('#semua').attr('hidden', true);
|
||||||
|
$('#pembeli').attr('hidden', true);
|
||||||
|
$('#penjual').removeAttr('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (dateInterval) {
|
||||||
|
dateInterval = dateInterval.split(' - ');
|
||||||
|
start = moment(dateInterval[0]);
|
||||||
|
end = moment(dateInterval[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#date-range').daterangepicker({
|
||||||
|
"showDropdowns": true,
|
||||||
|
"showWeekNumbers": true,
|
||||||
|
"alwaysShowCalendars": true,
|
||||||
|
startDate: start,
|
||||||
|
endDate: end,
|
||||||
|
locale: {
|
||||||
|
format: 'YYYY-MM-DD',
|
||||||
|
firstDay: 1,
|
||||||
|
},
|
||||||
|
minDate: "2023-01-01",
|
||||||
|
maxDate: "2025-12-31",
|
||||||
|
ranges: {
|
||||||
|
'Today': [moment(), moment()],
|
||||||
|
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||||
|
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
|
||||||
|
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
||||||
|
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
||||||
|
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1,
|
||||||
|
'month').endOf(
|
||||||
|
'month')],
|
||||||
|
'This Year': [moment().startOf('year'), moment().endOf('year')],
|
||||||
|
'Last Year': [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year')
|
||||||
|
.endOf(
|
||||||
|
'year')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}).on('apply.daterangepicker', function(ev, picker) {
|
||||||
|
var startDate = picker.startDate.format('YYYY-MM-DD');
|
||||||
|
var endDate = picker.endDate.format('YYYY-MM-DD');
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
|
||||||
|
allowEscapeKey: false,
|
||||||
|
allowOutsideClick: false,
|
||||||
|
didOpen: () => {
|
||||||
|
Swal.showLoading();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajaxSetup({
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': csrfToken
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user.get-data-dashboard') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
startDate: startDate,
|
||||||
|
endDate: endDate
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
Swal.close();
|
||||||
|
myChartTransaksi.data.datasets[0].data = response.dataChartTransaction;
|
||||||
|
myChartTransaksi.data.datasets[1].data = response.dataChartRefund;
|
||||||
|
myChartTransaksi.data.labels = response.dataLabel;
|
||||||
|
myChartTransaksi.update();
|
||||||
|
|
||||||
|
myChartPemasukan.data.datasets[0].data = response.dataChartUser;
|
||||||
|
myChartPemasukan.data.labels = response.dataLabel;
|
||||||
|
myChartPemasukan.update();
|
||||||
|
|
||||||
|
myChartPengeluaran.data.datasets[0].data = response.dataChartUser;
|
||||||
|
myChartPengeluaran.data.labels = response.dataLabel;
|
||||||
|
myChartPengeluaran.update();
|
||||||
|
|
||||||
|
// Semua
|
||||||
|
$('#countAllFinished').html(response.countAllFinished);
|
||||||
|
$('#countAllPending').html(response.countAllPending);
|
||||||
|
$('#countAllProcessed').html(response.countAllProcessed);
|
||||||
|
$('#countAllCanceled').html(response.countAllCanceled);
|
||||||
|
$('#countAllRefund').html(response.countAllRefund);
|
||||||
|
$('#countAllIndicated').html(response.countAllIndicated);
|
||||||
|
|
||||||
|
// Pembeli
|
||||||
|
$('#countBuyerFinished').html(response.countBuyerFinished);
|
||||||
|
$('#countBuyerPaid').html(response.countBuyerPaid);
|
||||||
|
$('#countBuyerPending').html(response.countBuyerPending);
|
||||||
|
$('#countBuyerProcessed').html(response.countBuyerProcessed);
|
||||||
|
$('#countBuyerCancelled').html(response.countBuyerCancelled);
|
||||||
|
$('#countBuyerRefundPending').html(response.countBuyerRefundPending);
|
||||||
|
$('#countBuyerRefundApproved').html(response.countBuyerRefundApproved);
|
||||||
|
$('#countBuyerRefundDenied').html(response.countBuyerRefundDenied);
|
||||||
|
$('#countBuyerIndicated').html(response.countBuyerIndicated);
|
||||||
|
|
||||||
|
// Penjual
|
||||||
|
$('#countSellerPending').html(response.countSellerPending);
|
||||||
|
$('#countSellerFinished').html(response.countSellerFinished);
|
||||||
|
$('#countSellerProcessed').html(response.countSellerProcessed);
|
||||||
|
$('#countSellerSending').html(response.countSellerSending);
|
||||||
|
$('#countSellerSent').html(response.countSellerSent);
|
||||||
|
$('#countSellerCancelled').html(response.countSellerCancelled);
|
||||||
|
$('#countSellerRefund').html(response.countSellerRefund);
|
||||||
|
$('#countSellerIndicated').html(response.countSellerIndicated);
|
||||||
|
|
||||||
|
$('#totalTransaction').html(response.totalTransaction);
|
||||||
|
|
||||||
|
var activitiesRateTransaction = '';
|
||||||
|
var rateTransactionClass = response.rateTransaction == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateTransaction > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateTransactionClassIcon = response.rateTransaction == 0 ?
|
||||||
|
"mdi-equal" : (response.rateTransaction > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesRateTransaction = `
|
||||||
|
<span class="text-${rateTransactionClass} me-2"><span
|
||||||
|
class="mdi ${rateTransactionClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateTransaction)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateTransaction').html(activitiesRateTransaction);
|
||||||
|
|
||||||
|
// Pemasukan
|
||||||
|
$('#totalPemasukan').html(response.totalPemasukan);
|
||||||
|
|
||||||
|
var activitiesratePemasukan = '';
|
||||||
|
var ratePemasukanClass = response.ratePemasukan == 0 ?
|
||||||
|
"secondary text-black-50" : (response.ratePemasukan > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var ratePemasukanClassIcon = response.ratePemasukan == 0 ?
|
||||||
|
"mdi-equal" : (response.ratePemasukan > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesratePemasukan = `
|
||||||
|
<span class="text-${ratePemasukanClass} me-2"><span
|
||||||
|
class="mdi ${ratePemasukanClassIcon}"></span>
|
||||||
|
${Math.abs(response.ratePemasukan)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#ratePemasukan').html(activitiesratePemasukan);
|
||||||
|
|
||||||
|
// Pengeluaran
|
||||||
|
$('#totalPengeluaran').html(response.totalPengeluaran);
|
||||||
|
|
||||||
|
var activitiesRatePengeluaran = '';
|
||||||
|
var ratePengeluaranClass = response.ratePengeluaran == 0 ?
|
||||||
|
"secondary text-black-50" : (response.ratePengeluaran > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var ratePengeluaranClassIcon = response.ratePengeluaran == 0 ?
|
||||||
|
"mdi-equal" : (response.ratePengeluaran > 0 ?
|
||||||
|
"mdi-arrow-up-bold" : "mdi-arrow-down-bold");
|
||||||
|
|
||||||
|
activitiesRatePengeluaran = `
|
||||||
|
<span class="text-${ratePengeluaranClass} me-2"><span
|
||||||
|
class="mdi ${ratePengeluaranClassIcon}"></span>
|
||||||
|
${Math.abs(response.ratePengeluaran)}%</span>
|
||||||
|
<span class="text-nowrap">Dibandingkan sebelumnya</span>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#ratePengeluaran').html(activitiesRatePengeluaran);
|
||||||
|
|
||||||
|
// Profit
|
||||||
|
var activitiesRateProfit = '';
|
||||||
|
var rateProfitClass = response.rateProfit == 0 ?
|
||||||
|
"secondary text-black-50" : (response.rateProfit > 0 ?
|
||||||
|
"success" : "danger");
|
||||||
|
var rateProfitMention = response.rateProfit == 0 ? "sama" : (response
|
||||||
|
.rateProfit > 0 ? "meningkat" : "menurun");
|
||||||
|
var rateProfitClassIcon = response.rateProfit == 0 ?
|
||||||
|
"sama" : (response.rateProfit > 0 ?
|
||||||
|
"meningkat" : "menurun");
|
||||||
|
|
||||||
|
activitiesRateProfit = `
|
||||||
|
<div class="alert alert-${rateProfitClass} alert-dismissible fade show mb-3"
|
||||||
|
role="alert">
|
||||||
|
Pendapatan ${rateProfitMention}
|
||||||
|
<span
|
||||||
|
class="mdi ${rateProfitClassIcon}"></span>
|
||||||
|
${Math.abs(response.rateProfit)}%
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#rateProfit').html(activitiesRateProfit);
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
Swal.close();
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex justify-content-start mb-3">
|
<div class="d-flex justify-content-start mb-3">
|
||||||
{{ $notification->content }}
|
{!! $notification->content !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,12 +1,5 @@
|
|||||||
@extends('layouts.main')
|
@extends('layouts.main')
|
||||||
@section('content')
|
@section('tambahan-js')
|
||||||
<style>
|
|
||||||
.unread {
|
|
||||||
background-color: #a3194e;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let listUser = $('#table-notifikasi').DataTable({
|
let listUser = $('#table-notifikasi').DataTable({
|
||||||
@ -62,6 +55,14 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@endsection
|
||||||
|
@section('content')
|
||||||
|
<style>
|
||||||
|
.unread {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
|
@ -42,6 +42,8 @@
|
|||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@include('user.refund.modal-keterangan-status')
|
@include('user.refund.modal-keterangan-status')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
let listRefund = $('#table-refund').DataTable({
|
let listRefund = $('#table-refund').DataTable({
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
<div class="modal fade" id="awaldetailrefund" role="dialog">
|
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
<span class="sr-only">Close</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-center">
|
|
||||||
<h4 class="modal-title" id="myModalLabel">Detail Refund</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<p class="statusMsg"></p>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputOrderId">Order ID</label>
|
|
||||||
<p class="form-control-static" id="orderid">1452667</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputCustomer">Customer</label>
|
|
||||||
<p class="form-control-static" id="customer">Nurul Prima</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputEmail">Email Customer</label>
|
|
||||||
<p class="form-control-static" id="inputEmail">npannisa@gmail.com</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputSeller">Seller Name</label>
|
|
||||||
<p class="form-control-static" id="sellername">Zakiaa</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputDueDate">Due Date</label>
|
|
||||||
<p class="form-control-static" id="duedate">29 Januari 2002</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputComplaint">Reason Complaint</label>
|
|
||||||
<p class="form-control-static" id="reasoncomplaint">Pengembalian product dikarenakan tidak
|
|
||||||
sesuai dengan aslinya</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="inputBukti">Bukti</label>
|
|
||||||
<p class="form-control-static" id="inputbukti"></p>
|
|
||||||
<img class="mr-3 rounded" width="200" src="assets/img/avatar/rusak.jpeg">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -51,7 +51,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#formPengajuan').on('submit', function(e) {
|
$('#formPengajuan').on('submit', function(e) {
|
||||||
@ -95,6 +96,14 @@
|
|||||||
icon: response.status ? 'success' : 'error',
|
icon: response.status ? 'success' : 'error',
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-notification-to-admin') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
service: response
|
||||||
|
.service,
|
||||||
|
}
|
||||||
|
});
|
||||||
location.href =
|
location.href =
|
||||||
"{{ route('user-refund.index') }}";
|
"{{ route('user-refund.index') }}";
|
||||||
}
|
}
|
||||||
@ -130,8 +139,8 @@
|
|||||||
if (file.type.startsWith('image/')) {
|
if (file.type.startsWith('image/')) {
|
||||||
preview.innerHTML =
|
preview.innerHTML =
|
||||||
`<div class="col-md-4 m-2">
|
`<div class="col-md-4 m-2">
|
||||||
<img src="${e.target.result}" alt="${file.name}" style="max-width:250px; max-height:200px;">
|
<img src="${e.target.result}" alt="${file.name}" style="max-width:250px; max-height:200px;">
|
||||||
</div>`;
|
</div>`;
|
||||||
} else if (file.type.startsWith('video/')) {
|
} else if (file.type.startsWith('video/')) {
|
||||||
var video = document.createElement('video');
|
var video = document.createElement('video');
|
||||||
var videoUrl = URL.createObjectURL(file);
|
var videoUrl = URL.createObjectURL(file);
|
||||||
@ -149,13 +158,13 @@
|
|||||||
console.log('INI COY 1');
|
console.log('INI COY 1');
|
||||||
} else {
|
} else {
|
||||||
preview.innerHTML = `
|
preview.innerHTML = `
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<video controls style="max-width:250px; max-height:200px;">
|
<video controls style="max-width:250px; max-height:200px;">
|
||||||
<source src="${e.target.result}" type="${file.type}" >
|
<source src="${e.target.result}" type="${file.type}" >
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>
|
</video>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
<div class="d-flex justify-content-center">
|
<div class="d-flex justify-content-center">
|
||||||
<h2 class="mb-4"> Informasi Pesanan</h2>
|
<h2 class="mb-4"> Informasi Pesanan</h2>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="d-flex justify-content-center">
|
||||||
|
<p>#{{ $transaction->id }}</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -98,6 +101,58 @@
|
|||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<address>
|
||||||
|
<strong>Deskripsi:</strong><br>
|
||||||
|
{!! $transaction->deskripsi_transaksi !!}<br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<address>
|
||||||
|
<strong>Batas Pembayaran:</strong><br>
|
||||||
|
{{ date('d F Y', strtotime($transaction->batas_pembayaran)) }}<br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-right">
|
||||||
|
<address>
|
||||||
|
<strong>Batas Pengiriman:</strong><br>
|
||||||
|
{{ date('d F Y', strtotime($transaction->batas_pengiriman_barang_akhir)) }}<br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<address>
|
||||||
|
<strong>Status Transaksi:</strong><br>
|
||||||
|
{{ ucwords($transaction->status_transaksi) }}
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-right">
|
||||||
|
<address>
|
||||||
|
<strong>Status Pembayaran:</strong><br>
|
||||||
|
{{ ucwords($transaction->status_pembayaran) }}
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@if ($transaction->fraud_status != null)
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<address>
|
||||||
|
<strong>Status Indikasi Penipuan:</strong><br>
|
||||||
|
{{ $transaction->fraud_status == null ? 'Tidak ada' : ucwords($transaction->fraud_status) }}
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-right">
|
||||||
|
<address>
|
||||||
|
<strong>Keterangan:</strong><br>
|
||||||
|
{{ $transaction->keterangan }}
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -119,11 +174,11 @@
|
|||||||
<td>1</td>
|
<td>1</td>
|
||||||
<td>{{ $transaction->nama_barang }}</td>
|
<td>{{ $transaction->nama_barang }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
Rp.{{ number_format($transaction->harga_barang, 2, ',', '.') }}
|
Rp {{ number_format($transaction->harga_barang, 2, ',', '.') }}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">{{ $transaction->jumlah_barang }}</td>
|
<td class="text-center">{{ $transaction->jumlah_barang }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
Rp.{{ number_format($transaction->total_harga, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_harga, 2, ',', '.') }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -142,21 +197,22 @@
|
|||||||
<div class="col-lg-4 text-right">
|
<div class="col-lg-4 text-right">
|
||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Subtotal</div>
|
<div class="invoice-detail-name">Subtotal</div>
|
||||||
<div class="invoice-detail-value">Rp
|
<div class="invoice-detail-value">
|
||||||
Rp.{{ number_format($transaction->total_harga, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_harga, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Biaya Admin</div>
|
<div class="invoice-detail-name">Biaya Admin</div>
|
||||||
<div class="invoice-detail-value">
|
<div class="invoice-detail-value">
|
||||||
Rp.{{ number_format($transaction->total_keuntungan, 2, ',', '.') }}
|
Rp
|
||||||
|
{{ number_format($transaction->total_keuntungan, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="mt-2 mb-2">
|
<hr class="mt-2 mb-2">
|
||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Total</div>
|
<div class="invoice-detail-name">Total</div>
|
||||||
<div class="invoice-detail-value invoice-detail-value-lg">
|
<div class="invoice-detail-value invoice-detail-value-lg">
|
||||||
Rp.{{ number_format($transaction->total_bayar, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -59,7 +59,9 @@
|
|||||||
@include('user.transaction.pembeli.modal-end-transaction')
|
@include('user.transaction.pembeli.modal-end-transaction')
|
||||||
@include('user.transaction.pembeli.modal-tracking')
|
@include('user.transaction.pembeli.modal-tracking')
|
||||||
@include('user.transaction.pembeli.modal-keterangan-status')
|
@include('user.transaction.pembeli.modal-keterangan-status')
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('tambahan-js')
|
||||||
<script type="text/javascript" src="https://app.sandbox.midtrans.com/snap/snap.js"
|
<script type="text/javascript" src="https://app.sandbox.midtrans.com/snap/snap.js"
|
||||||
data-client-key="SB-Mid-client-lEMALcmIPviksRRe"></script>
|
data-client-key="SB-Mid-client-lEMALcmIPviksRRe"></script>
|
||||||
<script>
|
<script>
|
||||||
@ -127,30 +129,30 @@
|
|||||||
render: function(data, type, row) {
|
render: function(data, type, row) {
|
||||||
if (row.status_transaksi == 'created') {
|
if (row.status_transaksi == 'created') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (row.status_transaksi == 'success') {
|
} else if (row.status_transaksi == 'success') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['process', 'sending', 'sent'].includes(row
|
} else if (['process', 'sending', 'sent'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['cancel', 'failure', 'refund'].includes(row
|
} else if (['cancel', 'failure', 'refund'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else {
|
} else {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
className: 'text-center'
|
className: 'text-center'
|
||||||
@ -203,6 +205,14 @@
|
|||||||
'error'
|
'error'
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response
|
||||||
|
.receiver,
|
||||||
|
}
|
||||||
|
});
|
||||||
listPembeli.ajax.reload();
|
listPembeli.ajax.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -469,6 +479,14 @@
|
|||||||
}).then(function() {
|
}).then(function() {
|
||||||
Swal.close();
|
Swal.close();
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response
|
||||||
|
.receiver
|
||||||
|
}
|
||||||
|
});
|
||||||
listPembeli.ajax
|
listPembeli.ajax
|
||||||
.reload();
|
.reload();
|
||||||
}
|
}
|
||||||
@ -532,34 +550,34 @@
|
|||||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||||
$.each(transactionDatas, function(index, transactionDescription) {
|
$.each(transactionDatas, function(index, transactionDescription) {
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="activity-detail">
|
<div class="activity-detail">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
||||||
|
</div>
|
||||||
|
<p>${transactionDescription.deskripsi}</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>${transactionDescription.deskripsi}</p>
|
`;
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="activity-detail">
|
<div class="activity-detail">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<span class="text-job text-primary">--, --:--:-- --</span>
|
<span class="text-job text-primary">--, --:--:-- --</span>
|
||||||
|
</div>
|
||||||
|
<p>Kosong</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>Kosong</p>
|
`;
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menampilkan data dalam modal
|
// Menampilkan data dalam modal
|
||||||
@ -585,9 +603,9 @@
|
|||||||
|
|
||||||
var modal = $(this);
|
var modal = $(this);
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<a href="#" type="button" class="btn btn-primary" data-id="${id}" id="finishTransaction">Selesaikan Transaksi</a>
|
<a href="#" type="button" class="btn btn-primary" data-id="${id}" id="finishTransaction">Selesaikan Transaksi</a>
|
||||||
<a href="#" type="button" class="btn btn-danger" data-id="${id}" id="complain">Ajukan Komplain</a>
|
<a href="#" type="button" class="btn btn-danger" data-id="${id}" id="complain">Ajukan Komplain</a>
|
||||||
`;
|
`;
|
||||||
modal.find('.modal-footer').html(activitiesHtml);
|
modal.find('.modal-footer').html(activitiesHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -624,6 +642,13 @@
|
|||||||
icon: response.status ? 'success' : 'error',
|
icon: response.status ? 'success' : 'error',
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response.receiver,
|
||||||
|
}
|
||||||
|
});
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -119,6 +119,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var persentaseKeuntungan = {{ $persentase_keuntungan }};
|
var persentaseKeuntungan = {{ $persentase_keuntungan }};
|
||||||
@ -260,18 +262,18 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "{{ route('user-contact.email', ':email') }}".replace(
|
url: "{{ route('user-contact.email') }}",
|
||||||
":email",
|
data: {
|
||||||
email
|
email: email
|
||||||
),
|
},
|
||||||
type: "GET",
|
type: "GET",
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
if (
|
if (
|
||||||
response.status &&
|
response.status &&
|
||||||
(response.message.nama_bank == null ||
|
(response.message.nama_bank != null ||
|
||||||
response.message.nama_bank == "") &&
|
response.message.nama_bank != "") &&
|
||||||
(response.message.no_rek == null ||
|
(response.message.no_rek != null ||
|
||||||
response.message.no_rek == "")
|
response.message.no_rek != "")
|
||||||
) {
|
) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: "Berhasil",
|
title: "Berhasil",
|
||||||
@ -285,6 +287,7 @@
|
|||||||
icon: "error",
|
icon: "error",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
console.log(response.message.nama_bank);
|
||||||
},
|
},
|
||||||
error: function(error) {
|
error: function(error) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
|
@ -53,6 +53,8 @@
|
|||||||
@include('user.transaction.penjual.modal-tracking')
|
@include('user.transaction.penjual.modal-tracking')
|
||||||
@include('user.transaction.penjual.modal-pengiriman-selesai')
|
@include('user.transaction.penjual.modal-pengiriman-selesai')
|
||||||
@include('user.transaction.penjual.modal-keterangan-status')
|
@include('user.transaction.penjual.modal-keterangan-status')
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
let listPenjual = $('#table-penjual').DataTable({
|
let listPenjual = $('#table-penjual').DataTable({
|
||||||
@ -118,30 +120,30 @@
|
|||||||
render: function(data, type, row) {
|
render: function(data, type, row) {
|
||||||
if (row.status_transaksi == 'created') {
|
if (row.status_transaksi == 'created') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-light">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (row.status_transaksi == 'success') {
|
} else if (row.status_transaksi == 'success') {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-info">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['process', 'sending', 'sent'].includes(row
|
} else if (['process', 'sending', 'sent'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-warning">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['cancel', 'failure', 'refund'].includes(row
|
} else if (['cancel', 'failure', 'refund'].includes(row
|
||||||
.status_transaksi)) {
|
.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-danger">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
} else if (['finished', 'done'].includes(row.status_transaksi)) {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-success">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
} else {
|
} else {
|
||||||
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
return `<a href="#" data-toggle="modal" data-target="#modalKeteranganStatus" class="badge badge-dark">
|
||||||
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
${row.status_transaksi.charAt(0).toUpperCase()}${row.status_transaksi.slice(1)}
|
||||||
</a>`;
|
</a>`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
className: 'text-center'
|
className: 'text-center'
|
||||||
@ -185,34 +187,34 @@
|
|||||||
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
// Iterasi melalui data transaksi dan tambahkan ke activitiesHtml
|
||||||
$.each(transactionDatas, function(index, transactionDescription) {
|
$.each(transactionDatas, function(index, transactionDescription) {
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
<div class="activity-icon ${transactionDescription.background} text-white shadow-primary">
|
||||||
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
<i class="${transactionDescription.judul}" style="font-size: 36px;"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="activity-detail">
|
<div class="activity-detail">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
<span class="text-job text-primary">${new Date(transactionDescription.created_at).toLocaleString()}</span>
|
||||||
|
</div>
|
||||||
|
<p>${transactionDescription.deskripsi}</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>${transactionDescription.deskripsi}</p>
|
`;
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Tidak ada data transaksi, tambahkan pesan kosong
|
// Tidak ada data transaksi, tambahkan pesan kosong
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<div class="activity">
|
<div class="activity">
|
||||||
<div class="activity-icon bg-primary text-white shadow-primary">
|
<div class="activity-icon bg-primary text-white shadow-primary">
|
||||||
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
<i class="fas fa-ban" style="font-size: 36px;"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="activity-detail">
|
<div class="activity-detail">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<span class="text-job text-primary">--, --:--:-- --</span>
|
<span class="text-job text-primary">--, --:--:-- --</span>
|
||||||
|
</div>
|
||||||
|
<p>Kosong</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>Kosong</p>
|
`;
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menampilkan data dalam modal
|
// Menampilkan data dalam modal
|
||||||
@ -274,6 +276,14 @@
|
|||||||
}).then(function() {
|
}).then(function() {
|
||||||
Swal.close();
|
Swal.close();
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response
|
||||||
|
.receiver,
|
||||||
|
}
|
||||||
|
});
|
||||||
listPenjual.ajax.reload();
|
listPenjual.ajax.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -349,6 +359,14 @@
|
|||||||
}).then(function() {
|
}).then(function() {
|
||||||
Swal.close();
|
Swal.close();
|
||||||
if (response.status) {
|
if (response.status) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response
|
||||||
|
.receiver,
|
||||||
|
}
|
||||||
|
});
|
||||||
listPenjual.ajax
|
listPenjual.ajax
|
||||||
.reload();
|
.reload();
|
||||||
}
|
}
|
||||||
@ -468,7 +486,7 @@
|
|||||||
|
|
||||||
var modal = $(this);
|
var modal = $(this);
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<input type="hidden" name="transaction_id" id="transactionId" value="${id}">
|
<input type="hidden" name="transaction_id" id="transactionId" value="${id}">
|
||||||
`;
|
`;
|
||||||
modal.find('.form-bukti-id').html(activitiesHtml);
|
modal.find('.form-bukti-id').html(activitiesHtml);
|
||||||
});
|
});
|
||||||
@ -516,6 +534,13 @@
|
|||||||
if (response.status) {
|
if (response.status) {
|
||||||
$('#formBukti').trigger('reset');
|
$('#formBukti').trigger('reset');
|
||||||
$('#modalOrderSent').modal('hide');
|
$('#modalOrderSent').modal('hide');
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user-notification.update-new-notification') }}",
|
||||||
|
type: 'GET',
|
||||||
|
data: {
|
||||||
|
receiver: response.receiver,
|
||||||
|
}
|
||||||
|
});
|
||||||
listPenjual.ajax.reload();
|
listPenjual.ajax.reload();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
104
resources/views/email/approve-user-email.blade.php
Normal file
104
resources/views/email/approve-user-email.blade.php
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Arial", sans-serif;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
padding: 20px;
|
||||||
|
max-width: 400px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-rekber {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.large-text {
|
||||||
|
font-size: 3.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b61754;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-text {
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-verifikasi,
|
||||||
|
.code,
|
||||||
|
.masa-berlaku {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-pendaftaran {
|
||||||
|
background-color: #b61754;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 3.5em;
|
||||||
|
margin: 10px 0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
.card {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-rekber">
|
||||||
|
<p class="large-text">Rekber</p>
|
||||||
|
<span class="small-text">Pendaftaran Akun Sukses</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code-verifikasi">
|
||||||
|
<p>Selamat, anda dengan email</p>
|
||||||
|
<p><b>{{ $content['email'] }}</b></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code">
|
||||||
|
<p>dinyatakan</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code-pendaftaran">
|
||||||
|
<p>Berhasil</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="masa-berlaku">
|
||||||
|
<p>Selamat bergabung di Rekber dan bertransaksi.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
104
resources/views/email/deny-user-email.blade.php
Normal file
104
resources/views/email/deny-user-email.blade.php
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Arial", sans-serif;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
padding: 20px;
|
||||||
|
max-width: 400px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-rekber {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.large-text {
|
||||||
|
font-size: 3.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b61754;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-text {
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-verifikasi,
|
||||||
|
.code,
|
||||||
|
.masa-berlaku {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-pendaftaran {
|
||||||
|
background-color: #b61754;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 3.5em;
|
||||||
|
margin: 10px 0;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
.card {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-rekber">
|
||||||
|
<p class="large-text">Rekber</p>
|
||||||
|
<span class="small-text">Pendaftaran Akun Gagal</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code-verifikasi">
|
||||||
|
<p>Maaf, Anda dengan email</p>
|
||||||
|
<p><b>{{ $content['email'] }}</b></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code">
|
||||||
|
<p>dinyatakan</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="code-pendaftaran">
|
||||||
|
<p>Gagal</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="masa-berlaku">
|
||||||
|
<p>Dengan alasan {{ $content['keterangan'] }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -4,7 +4,6 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Document</title>
|
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
@ -394,6 +394,7 @@
|
|||||||
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
<script src="{{ asset('assets/js/login_register/app.js') }}"></script>
|
<script src="{{ asset('assets/js/login_register/app.js') }}"></script>
|
||||||
<script src="{{ asset('assets/js/login_register/script.js') }}"></script>
|
<script src="{{ asset('assets/js/login_register/script.js') }}"></script>
|
||||||
|
|
||||||
@if (Session::has('message'))
|
@if (Session::has('message'))
|
||||||
<script>
|
<script>
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
|
@ -33,20 +33,29 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-12">
|
||||||
<address>
|
<address>
|
||||||
<strong>Payment Method:</strong><br>
|
<strong>Deskripsi:</strong><br>
|
||||||
Visa ending **** 4242<br>
|
{!! $transaction->deskripsi_transaksi !!}<br>
|
||||||
npannisa@gmail.com
|
|
||||||
</address>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 text-md-right">
|
|
||||||
<address>
|
|
||||||
<strong>Tanggal Transaksi:</strong><br>
|
|
||||||
{{ $transaction->created_at->format('d M Y, g:i') }}<br><br>
|
|
||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
@if (in_array($transaction->status_pembayaran, ['settlement', 'capture']))
|
||||||
|
<div class="col-md-6">
|
||||||
|
<address>
|
||||||
|
<strong>Status Pembayaran:</strong><br>
|
||||||
|
{{ ucwords($transaction->status_pembayaran) }}<br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-right">
|
||||||
|
<address>
|
||||||
|
<strong>Tanggal Pembayaran:</strong><br>
|
||||||
|
{{ $transaction->created_at->format('d M Y, g:i') }}<br><br>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -67,10 +76,10 @@
|
|||||||
<td>1</td>
|
<td>1</td>
|
||||||
<td>{{ $transaction->nama_barang }}</td>
|
<td>{{ $transaction->nama_barang }}</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
Rp.{{ number_format($transaction->harga_barang, 2, ',', '.') }}</td>
|
Rp {{ number_format($transaction->harga_barang, 2, ',', '.') }}</td>
|
||||||
<td class="text-center">{{ $transaction->jumlah_barang }}</td>
|
<td class="text-center">{{ $transaction->jumlah_barang }}</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
Rp.{{ number_format($transaction->total_harga, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_harga, 2, ',', '.') }}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -90,20 +99,20 @@
|
|||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Subtotal</div>
|
<div class="invoice-detail-name">Subtotal</div>
|
||||||
<div class="invoice-detail-value">
|
<div class="invoice-detail-value">
|
||||||
Rp.{{ number_format($transaction->total_harga, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_harga, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Biaya Admin</div>
|
<div class="invoice-detail-name">Biaya Admin</div>
|
||||||
<div class="invoice-detail-value">
|
<div class="invoice-detail-value">
|
||||||
Rp.{{ number_format($transaction->total_keuntungan, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_keuntungan, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="mt-2 mb-2">
|
<hr class="mt-2 mb-2">
|
||||||
<div class="invoice-detail-item">
|
<div class="invoice-detail-item">
|
||||||
<div class="invoice-detail-name">Total</div>
|
<div class="invoice-detail-name">Total</div>
|
||||||
<div class="invoice-detail-value invoice-detail-value-lg">
|
<div class="invoice-detail-value invoice-detail-value-lg">
|
||||||
Rp.{{ number_format($transaction->total_bayar, 2, ',', '.') }}
|
Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -120,6 +129,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
|
@section('tambahan-js')
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#btnPDF').on('click', function() {
|
$('#btnPDF').on('click', function() {
|
||||||
|
@ -22,14 +22,14 @@ $new = NotificationReceiver::where('receiver', auth()->user()->email)
|
|||||||
<div class="dropdown-menu dropdown-list dropdown-menu-right">
|
<div class="dropdown-menu dropdown-list dropdown-menu-right">
|
||||||
<div class="dropdown-header">Notifikasi
|
<div class="dropdown-header">Notifikasi
|
||||||
<div class="float-right">
|
<div class="float-right">
|
||||||
<a href="javascript: void(0);" id="markAllAsRead">Mark All As Read</a>
|
<a href="javascript: void(0);" id="markAllAsRead">Tandai semua telah dibaca</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-list-content dropdown-list-icons" id="notifContent">
|
<div class="dropdown-list-content dropdown-list-icons" id="notifContent">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-footer text-center">
|
<div class="dropdown-footer text-center">
|
||||||
<a href="{{ route('user-notification.index') }}">View All <i
|
<a href="{{ route('user-notification.index') }}">Lihat semua<i
|
||||||
class="fas fa-chevron-right"></i></a>
|
class="fas fa-chevron-right"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -55,50 +55,56 @@ $new = NotificationReceiver::where('receiver', auth()->user()->email)
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<script>
|
@section('js-header')
|
||||||
$(document).ready(function() {
|
<script>
|
||||||
var notifBtn = $('#notifBtn');
|
$(document).ready(function() {
|
||||||
|
var notifBtn = $('#notifBtn');
|
||||||
|
|
||||||
function updateNotif() {
|
function updateNotif() {
|
||||||
notifBtn.toggleClass("beep");
|
notifBtn.addClass("beep");
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#notifBtn').on('click', function() {
|
function removeNotif() {
|
||||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
notifBtn.removeClass("beep");
|
||||||
var notifContent = $('#notifContent');
|
}
|
||||||
var activitiesHtml = '';
|
|
||||||
|
|
||||||
$.ajaxSetup({
|
$('#notifBtn').on('click', function() {
|
||||||
headers: {
|
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||||
'X-CSRF-TOKEN': csrfToken
|
var notifContent = $('#notifContent');
|
||||||
}
|
var activitiesHtml = '';
|
||||||
});
|
|
||||||
|
|
||||||
$.ajax({
|
$.ajaxSetup({
|
||||||
url: "{{ route('user-notification.latest-notification') }}",
|
headers: {
|
||||||
type: 'GET',
|
'X-CSRF-TOKEN': csrfToken
|
||||||
success: function(response) {
|
}
|
||||||
var notifications = response.notifications;
|
});
|
||||||
if (notifications.length > 0) {
|
|
||||||
notifications.forEach(element => {
|
|
||||||
var url =
|
|
||||||
"{{ route('user-notifiaction.detail-notification', ':id') }}"
|
|
||||||
.replace(':id', element.id);
|
|
||||||
|
|
||||||
var date = new Date(element.updated_at);
|
$.ajax({
|
||||||
var day = date.getDate();
|
url: "{{ route('user-notification.latest-notification') }}",
|
||||||
var month = date.toLocaleString('id-ID', {
|
type: 'GET',
|
||||||
month: 'short'
|
success: function(response) {
|
||||||
});
|
var notifications = response.notifications;
|
||||||
var year = date.getFullYear();
|
if (notifications.length > 0) {
|
||||||
var hours = date.getHours();
|
notifications.forEach(element => {
|
||||||
var minutes = date.getMinutes();
|
var url =
|
||||||
|
"{{ route('user-notifiaction.detail-notification', ':id') }}"
|
||||||
|
.replace(':id', element.id);
|
||||||
|
|
||||||
var formattedDate = day + ' ' + month + ' ' + year +
|
var date = new Date(element.updated_at);
|
||||||
" | " + hours + ":" + +(minutes < 10 ? '0' : '') +
|
var day = date.getDate();
|
||||||
minutes;
|
var month = date.toLocaleString('id-ID', {
|
||||||
|
month: 'short'
|
||||||
|
});
|
||||||
|
var year = date.getFullYear();
|
||||||
|
var hours = date.getHours();
|
||||||
|
var minutes = date.getMinutes();
|
||||||
|
|
||||||
activitiesHtml += `
|
var formattedDate = day + ' ' + month + ' ' + year +
|
||||||
|
" | " + hours + ":" + +(minutes < 10 ? '0' :
|
||||||
|
'') +
|
||||||
|
minutes;
|
||||||
|
|
||||||
|
activitiesHtml += `
|
||||||
<a href="${url}" class="dropdown-item dropdown-item-unread">
|
<a href="${url}" class="dropdown-item dropdown-item-unread">
|
||||||
<div class="dropdown-item-icon bg-primary text-white">
|
<div class="dropdown-item-icon bg-primary text-white">
|
||||||
<i class="fas fa-code"></i>
|
<i class="fas fa-code"></i>
|
||||||
@ -110,9 +116,9 @@ $new = NotificationReceiver::where('receiver', auth()->user()->email)
|
|||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
`;
|
`;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
activitiesHtml += `
|
activitiesHtml += `
|
||||||
<a class="dropdown-item dropdown-item-unread">
|
<a class="dropdown-item dropdown-item-unread">
|
||||||
<div class="dropdown-item-icon bg-primary text-white">
|
<div class="dropdown-item-icon bg-primary text-white">
|
||||||
<i class="fas fa-code"></i>
|
<i class="fas fa-code"></i>
|
||||||
@ -123,57 +129,64 @@ $new = NotificationReceiver::where('receiver', auth()->user()->email)
|
|||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
`;
|
`;
|
||||||
|
}
|
||||||
|
notifContent.html(activitiesHtml);
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
console.log(error);
|
||||||
}
|
}
|
||||||
notifContent.html(activitiesHtml);
|
});
|
||||||
},
|
|
||||||
error: function(error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#markAllAsRead').on('click', function() {
|
|
||||||
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
|
||||||
console.log("Berhasil");
|
|
||||||
|
|
||||||
$.ajaxSetup({
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': csrfToken
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$('#markAllAsRead').on('click', function() {
|
||||||
url: "{{ route('user.notification.mark-all-as-read') }}",
|
const csrfToken = $('meta[name="csrf-token"]').attr('content');
|
||||||
type: 'GET',
|
|
||||||
success: function(response) {
|
$.ajaxSetup({
|
||||||
if (response.status) {
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': csrfToken
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('user.notification.mark-all-as-read') }}",
|
||||||
|
type: 'GET',
|
||||||
|
success: function(response) {
|
||||||
|
if (response.status) {
|
||||||
|
removeNotif();
|
||||||
|
} else {
|
||||||
|
console.log(response);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Pusher.logToConsole = true;
|
||||||
|
var pusher = new Pusher('3e5bdc20dddd7fbc655e', {
|
||||||
|
cluster: 'ap1'
|
||||||
|
});
|
||||||
|
|
||||||
|
var channel = pusher.subscribe('chanel-update-notifikasi');
|
||||||
|
|
||||||
|
channel.bind('event-update-notifikasi', function(data) {
|
||||||
|
let receivers = data.receivers;
|
||||||
|
let userEmail = "{{ auth()->user()->email }}";
|
||||||
|
if (Array.isArray(receivers)) {
|
||||||
|
receivers.forEach(email => {
|
||||||
|
if (email == userEmail) {
|
||||||
|
updateNotif();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (receivers == userEmail) {
|
||||||
updateNotif();
|
updateNotif();
|
||||||
console.log(response);
|
|
||||||
} else {
|
|
||||||
console.log(response);
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
error: function(error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
}
|
||||||
|
console.log(data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
</script>
|
||||||
Pusher.logToConsole = true;
|
@endsection
|
||||||
var pusher = new Pusher('3e5bdc20dddd7fbc655e', {
|
|
||||||
cluster: 'ap1'
|
|
||||||
});
|
|
||||||
|
|
||||||
var channel = pusher.subscribe('chanel-update-notifikasi');
|
|
||||||
|
|
||||||
channel.bind('event-update-notifikasi', function(data) {
|
|
||||||
let receivers = data.receivers;
|
|
||||||
let userEmail = "{{ auth()->user()->email }}";
|
|
||||||
receivers.forEach(email => {
|
|
||||||
if (email == userEmail) {
|
|
||||||
updateNotif();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
@include('layouts.css')
|
@include('layouts.css')
|
||||||
|
|
||||||
|
@yield('css-tambahan')
|
||||||
|
|
||||||
@include('layouts.js')
|
@include('layouts.js')
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -29,8 +31,16 @@
|
|||||||
@include('layouts.footer')
|
@include('layouts.footer')
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
@yield('js-khusus')
|
||||||
|
|
||||||
@include('layouts.js-bawah')
|
@include('layouts.js-bawah')
|
||||||
|
|
||||||
|
@yield('js-header')
|
||||||
|
|
||||||
|
@yield('js-sidebar')
|
||||||
|
|
||||||
|
@yield('tambahan-js')
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
@if (Auth::user()->role == 'Admin')
|
@if (Auth::user()->role == 'Admin')
|
||||||
<li><a class="nav-link {{ request()->routeIs('admin-user.index') ? 'active' : '' }}"
|
<li><a class="nav-link {{ request()->routeIs('admin-user.index') ? 'active' : '' }}"
|
||||||
href="{{ route('admin-user.index') }}"><i class="far fa-user"></i>
|
href="{{ route('admin-user.index') }}" id="clickUser"><i class="far fa-user"></i>
|
||||||
<span>User</span></a></li>
|
<span id="userBeep">User</span></a></li>
|
||||||
<li><a class="nav-link {{ request()->routeIs('admin-transaction.index') ? 'active' : '' }}"
|
<li><a class="nav-link {{ request()->routeIs('admin-transaction.index') ? 'active' : '' }}"
|
||||||
href="{{ route('admin-transaction.index') }}"><i
|
href="{{ route('admin-transaction.index') }}" id="clickTransaction"><i
|
||||||
class="fas fa-columns"></i><span>Transaction</span></a></li>
|
class="fas fa-columns"></i><span id="transactionBeep">Transaction</span></a></li>
|
||||||
<li><a class="nav-link {{ request()->routeIs('admin-refund.index') ? 'active' : '' }}"
|
<li><a class="nav-link {{ request()->routeIs('admin-refund.index') ? 'active' : '' }}"
|
||||||
href="{{ route('admin-refund.index') }}"><i class="far fa-square"></i>
|
href="{{ route('admin-refund.index') }}" id="clickRefund"><i class="far fa-square"></i>
|
||||||
<span>Refund</span></a>
|
<span id="refundBeep">Refund</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="nav-link {{ request()->routeIs('admin-setting.index') ? 'active' : '' }}"
|
<li><a class="nav-link {{ request()->routeIs('admin-setting.index') ? 'active' : '' }}"
|
||||||
href="{{ route('admin-setting.index') }}"><i class="fas fa-cog"></i>
|
href="{{ route('admin-setting.index') }}"><i class="fas fa-cog"></i>
|
||||||
@ -73,4 +73,52 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
<script src="{{ asset('assets/modules/nicescroll/jquery.nicescroll.min.js') }}"></script>
|
@section('js-khusus')
|
||||||
|
<script src="{{ asset('assets/modules/nicescroll/jquery.nicescroll.min.js') }}"></script>
|
||||||
|
@endsection
|
||||||
|
@section('js-sidebar')
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
function updateNotifSideBar(layanan) {
|
||||||
|
layanan.addClass("beep");
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNotifSideBar(layanan) {
|
||||||
|
layanan.removeClass("beep");
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#clickRefund').on('click', function() {
|
||||||
|
removeNotifSideBar($('#refundBeep'));
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#clickTransaction').on('click', function() {
|
||||||
|
removeNotifSideBar($('#transactionBeep'));
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#clickUser').on('click', function() {
|
||||||
|
removeNotifSideBar($('#userBeep'));
|
||||||
|
});
|
||||||
|
|
||||||
|
var pusher = new Pusher('3e5bdc20dddd7fbc655e', {
|
||||||
|
cluster: 'ap1'
|
||||||
|
});
|
||||||
|
|
||||||
|
var channel = pusher.subscribe('chanel-update-notifikasi-untuk-admin');
|
||||||
|
|
||||||
|
channel.bind('event-update-notifikasi-untuk-admin', function(data) {
|
||||||
|
let service = data.service;
|
||||||
|
let userEmail = "{{ auth()->user()->email }}";
|
||||||
|
if ("{{ auth()->user()->role }}" == 'Admin') {
|
||||||
|
if (service == 'Refund') {
|
||||||
|
updateNotifSideBar($('#refundBeep'));
|
||||||
|
} else if (service == 'Transaksi') {
|
||||||
|
updateNotifSideBar($('#transactionBeep'));
|
||||||
|
} else if (service == 'User') {
|
||||||
|
updateNotifSideBar($('#userBeep'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endsection
|
||||||
|
@ -351,8 +351,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
@endsection
|
||||||
{{-- profile --}}
|
@section('tambahan-js')
|
||||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
@ -683,5 +683,4 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{{-- profile --}}
|
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -9,6 +9,7 @@ use App\Http\Controllers\API\Penjual\PenjualApiController;
|
|||||||
use App\Http\Controllers\API\Profile\ProfileApiController;
|
use App\Http\Controllers\API\Profile\ProfileApiController;
|
||||||
use App\Http\Controllers\API\Transaction\TransactionApiController;
|
use App\Http\Controllers\API\Transaction\TransactionApiController;
|
||||||
use App\Http\Controllers\API\Invoice\InvoiceApiController;
|
use App\Http\Controllers\API\Invoice\InvoiceApiController;
|
||||||
|
use App\Http\Controllers\API\Notification\NotificationApiController;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -103,6 +104,12 @@ Route::middleware(['auth:api'])->group(function () {
|
|||||||
Route::get('get-invoice', 'getInvoice')->name('invoice.get-invoice'); // Bisa
|
Route::get('get-invoice', 'getInvoice')->name('invoice.get-invoice'); // Bisa
|
||||||
Route::get('export-invoice', 'exportInvoice')->name('invoice.export-invoice'); // Bisa
|
Route::get('export-invoice', 'exportInvoice')->name('invoice.export-invoice'); // Bisa
|
||||||
}); // sudah
|
}); // sudah
|
||||||
|
|
||||||
|
Route::controller(NotificationApiController::class)->group(function(){
|
||||||
|
Route::get('list-notification','listNotification')->name('notification.list-notification');
|
||||||
|
Route::get('get-detail-notification','getDetailNotification')->name('notification.get-detail-notification');
|
||||||
|
Route::get('mark-all-as-read','markAllAsRead')->name('notification.mark-all-as-read');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -89,6 +89,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
// Tampilan dashboard admin beserta perhitungan
|
// Tampilan dashboard admin beserta perhitungan
|
||||||
Route::controller(AdminDashboardController::class)->group(function(){
|
Route::controller(AdminDashboardController::class)->group(function(){
|
||||||
Route::get('/','index')->name('admin.index');
|
Route::get('/','index')->name('admin.index');
|
||||||
|
Route::get('admin-dashboard/get-data-dashboard','getDataBySearch')->name('admin.get-data-dashboard');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Tampilan, aprove atau deny dan hapus user
|
// Tampilan, aprove atau deny dan hapus user
|
||||||
@ -96,7 +97,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
Route::get('admin-user','index')->name('admin-user.index');
|
Route::get('admin-user','index')->name('admin-user.index');
|
||||||
Route::get('admin-user/list-user','listUser')->name('admin-user.list-user');
|
Route::get('admin-user/list-user','listUser')->name('admin-user.list-user');
|
||||||
Route::get('admin-user/{id}','show')->name('admin-user.show');
|
Route::get('admin-user/{id}','show')->name('admin-user.show');
|
||||||
Route::delete('admin-user/hapus-user','delete')->name('admin-user.destroy');
|
Route::delete('admin-user/hapus-user','destroy')->name('admin-user.destroy');
|
||||||
Route::put('admin-user/approve-user', 'approveUser')->name('admin-user.approve');
|
Route::put('admin-user/approve-user', 'approveUser')->name('admin-user.approve');
|
||||||
Route::put('admin-user/deny-user', 'denyUser')->name('admin-user.deny');
|
Route::put('admin-user/deny-user', 'denyUser')->name('admin-user.deny');
|
||||||
});
|
});
|
||||||
@ -137,7 +138,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
Route::get('admin-notification/list-user-for-create-edit','listUserForCreateEdit')->name('admin-notification.list-user-for-create-edit');
|
Route::get('admin-notification/list-user-for-create-edit','listUserForCreateEdit')->name('admin-notification.list-user-for-create-edit');
|
||||||
Route::get('admin-notification/select-all-user','selectAllUser')->name('admin-notification.select-all-user');
|
Route::get('admin-notification/select-all-user','selectAllUser')->name('admin-notification.select-all-user');
|
||||||
Route::get('admin-notification/edit','edit')->name('admin-notification.edit');
|
Route::get('admin-notification/edit','edit')->name('admin-notification.edit');
|
||||||
Route::post('admin-notification/update-new-notification','updateNewNotification')->name('admin-notification.update-new-notification');
|
Route::get('admin-notification/update-new-notification','updateNewNotification')->name('admin-notification.update-new-notification');
|
||||||
Route::post('admin-notification/store','store')->name('admin-notification.store');
|
Route::post('admin-notification/store','store')->name('admin-notification.store');
|
||||||
Route::post('admin-notification/update','update')->name('admin-notification.update');
|
Route::post('admin-notification/update','update')->name('admin-notification.update');
|
||||||
Route::delete('admin-notification/delete','delete')->name('admin-notification.delete');
|
Route::delete('admin-notification/delete','delete')->name('admin-notification.delete');
|
||||||
@ -152,6 +153,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
// Tampilan dashboard user beserta perhitungan
|
// Tampilan dashboard user beserta perhitungan
|
||||||
Route::controller(UserDashboardController::class)->group(function(){
|
Route::controller(UserDashboardController::class)->group(function(){
|
||||||
Route::get('/','index')->name('user.index');
|
Route::get('/','index')->name('user.index');
|
||||||
|
Route::get('user-dashboard/get-data-dashboard','getDataBySearch')->name('user.get-data-dashboard');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Tampilan, tambah dan hapus kontak
|
// Tampilan, tambah dan hapus kontak
|
||||||
@ -201,7 +203,7 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
Route::controller(UserRefundController::class)->group(function(){
|
Route::controller(UserRefundController::class)->group(function(){
|
||||||
Route::get('user-refund','index')->name('user-refund.index');
|
Route::get('user-refund','index')->name('user-refund.index');
|
||||||
Route::get('user-refund/list-refund','listRefund')->name('user-refund.list-refund');
|
Route::get('user-refund/list-refund','listRefund')->name('user-refund.list-refund');
|
||||||
Route::get('user-refund/ajukan-komplain','create')->name('user-refund.create');
|
Route::get('user-refund/ajukan-komplain/{id}','create')->name('user-refund.create');
|
||||||
Route::get('user-refund/detail-refund/{id}','show')->name('user-refund.show');
|
Route::get('user-refund/detail-refund/{id}','show')->name('user-refund.show');
|
||||||
Route::post('user-refund','store')->name('user-refund.store');
|
Route::post('user-refund','store')->name('user-refund.store');
|
||||||
});
|
});
|
||||||
@ -212,6 +214,8 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
Route::get('user-notification/detail-notification/{id}','show')->name('user-notifiaction.detail-notification');
|
Route::get('user-notification/detail-notification/{id}','show')->name('user-notifiaction.detail-notification');
|
||||||
Route::get('user-notification/latest-notification','latestNotification')->name('user-notification.latest-notification');
|
Route::get('user-notification/latest-notification','latestNotification')->name('user-notification.latest-notification');
|
||||||
Route::get('user-notification/mark-all-as-read','markAllAsRead')->name('user.notification.mark-all-as-read');
|
Route::get('user-notification/mark-all-as-read','markAllAsRead')->name('user.notification.mark-all-as-read');
|
||||||
|
Route::get('user-notification/update-new-notification','updateNewNotification')->name('user-notification.update-new-notification');
|
||||||
|
Route::get('user-notification/update-notification-to-admin','updateNotificationToAdmin')->name('user-notification.update-notification-to-admin');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user