From ebd309e47103748f00efd39eca086931c9b85a4f Mon Sep 17 00:00:00 2001
From: Raihan Surya <raihansurya4000@gmail.com>
Date: Wed, 1 Nov 2023 11:31:58 +0700
Subject: [PATCH] Revisi kontroller transaksi

---
 .../User/UserTransactionController.php        | 235 +++++++++---------
 public/assets/js/page/modules-datatables.js   |   2 +-
 .../User/transaction/Pembeli/index.blade.php  |   6 +-
 .../User/transaction/penjual/index.blade.php  |  18 +-
 routes/web.php                                |  41 +--
 5 files changed, 135 insertions(+), 167 deletions(-)

diff --git a/app/Http/Controllers/User/UserTransactionController.php b/app/Http/Controllers/User/UserTransactionController.php
index 3103e8a..930e2e4 100644
--- a/app/Http/Controllers/User/UserTransactionController.php
+++ b/app/Http/Controllers/User/UserTransactionController.php
@@ -6,14 +6,11 @@ use App\Models\Transaction;
 use App\Models\TransactionDescription;
 use App\Http\Controllers\Controller;
 use App\Models\Contact;
-use App\Models\Refund;
-use App\Models\RefundDescription;
 use App\Models\Setting;
 use Illuminate\Http\Request;
 use App\Models\TransactionUser;
 use App\Models\User;
 use Carbon\Carbon;
-use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
@@ -169,9 +166,7 @@ class UserTransactionController extends Controller
             'callbacks' => [
                 'finish' => route('user-transaction.index.pembeli'),
             ],
-            'enabled_payments' => [
-                'credit_card', 'gopay', 'shopeepay'
-            ],
+            'enabled_payments' => ['credit_card', 'gopay', 'shopeepay'],
             'expiry' => [
                 'start_time' => $now->format('Y-m-d H:i:s P'),
                 'unit' => 'days',
@@ -183,7 +178,7 @@ class UserTransactionController extends Controller
         $token = $snap_token;
         $status = 'created';
 
-        try{
+        try {
             DB::beginTransaction();
 
             $query = Transaction::create([
@@ -231,7 +226,7 @@ class UserTransactionController extends Controller
                 'status' => true,
                 'message' => 'Berhasil menambahkan transaksi. Silahkan lakukan pembayaran.',
             ]);
-        }catch(Throwable $e){
+        } catch (Throwable $e) {
             DB::rollBack();
 
             Log::error($e->getMessage());
@@ -245,10 +240,13 @@ class UserTransactionController extends Controller
 
     public function acceptTransaction($id)
     {
-        $query = Transaction::where('id', $id)->update([
-            'status' => 'process',
-        ]);
-        if ($query) {
+        try {
+            DB::beginTransaction();
+
+            Transaction::where('id', $id)->update([
+                'status' => 'process',
+            ]);
+
             TransactionDescription::create([
                 'transaction_id' => $id,
                 'status' => 'process',
@@ -258,11 +256,17 @@ class UserTransactionController extends Controller
                 'deskripsi' => 'Transaksi telah diterima oleh ' . Auth::user()->nama_depan,
             ]);
 
+            DB::commit();
+
             return response()->json([
                 'status' => true,
                 'message' => 'Transaksi telah diterima. Siapkan pesanan untuk dikirim ke penjual.',
             ]);
-        } else {
+        } catch (Throwable $e) {
+            DB::rollBack();
+
+            Log::error($e->getMessage());
+
             return response()->json([
                 'status' => false,
                 'message' => 'Gagal update status karena kesalahan server.',
@@ -272,10 +276,13 @@ class UserTransactionController extends Controller
 
     public function sendingOrder($id)
     {
-        $query = Transaction::where('id', $id)->update([
-            'status' => 'sending',
-        ]);
-        if ($query) {
+        try {
+            DB::beginTransaction();
+
+            Transaction::where('id', $id)->update([
+                'status' => 'sending',
+            ]);
+
             TransactionDescription::create([
                 'transaction_id' => $id,
                 'status' => 'sending',
@@ -285,11 +292,17 @@ class UserTransactionController extends Controller
                 'deskripsi' => 'Pesanan telah dikirim oleh ' . Auth::user()->nama_depan . ' dan sedang dalam perjalanan menuju pembeli.',
             ]);
 
+            DB::commit();
+
             return response()->json([
                 'status' => true,
                 'message' => 'Pesanan sedang dikirim dan menuju pembeli.',
             ]);
-        } else {
+        } catch (Throwable $e) {
+            DB::rollBack();
+
+            Log::error($e->getMessage());
+
             return response()->json([
                 'status' => false,
                 'message' => 'Gagal update status karena kesalahan server.',
@@ -299,10 +312,13 @@ class UserTransactionController extends Controller
 
     public function sentOrder($id)
     {
-        $query = Transaction::where('id', $id)->update([
-            'status' => 'sended',
-        ]);
-        if ($query) {
+        try {
+            DB::beginTransaction();
+
+            Transaction::where('id', $id)->update([
+                'status' => 'sended',
+            ]);
+
             TransactionDescription::create([
                 'transaction_id' => $id,
                 'status' => 'sended',
@@ -312,11 +328,17 @@ class UserTransactionController extends Controller
                 'deskripsi' => 'Pesanan telah sampai di tempat pembeli.',
             ]);
 
+            DB::commit();
+
             return response()->json([
                 'status' => true,
                 'message' => 'Pesanan telah sampai di tempat pembeli.',
             ]);
-        } else {
+        } catch (Throwable $e) {
+            DB::rollBack();
+
+            Log::error($e->getMessage());
+
             return response()->json([
                 'status' => false,
                 'message' => 'Gagal update status karena kesalahan server.',
@@ -326,24 +348,33 @@ class UserTransactionController extends Controller
 
     public function finishTransaction($id)
     {
-        $query = Transaction::where('id', $id)->update([
-            'status' => 'finished',
-        ]);
-        if ($query) {
+        try {
+            DB::beginTransaction();
+
+            Transaction::where('id', $id)->update([
+                'status' => 'finished',
+            ]);
+
             TransactionDescription::create([
                 'transaction_id' => $id,
-                'status' => 'sended',
+                'status' => 'finished',
                 'background' => 'bg-buyer',
                 'user' => Auth::user()->email,
                 'judul' => 'fas fa-check',
-                'deskripsi' => 'Pesanan telah sampai di tempat pembeli.',
+                'deskripsi' => 'Pesanan telah diselesaikan oleh '.auth()->user()->nama_depan.'.',
             ]);
 
+            DB::commit();
+
             return response()->json([
                 'status' => true,
-                'message' => 'Pesanan telah sampai di tempat pembeli.',
+                'message' => 'Pesanan telah diselesaikan oleh '.auth()->user()->nama_depan.'.',
             ]);
-        } else {
+        } catch (Throwable $e) {
+            DB::rollBack();
+
+            Log::error($e->getMessage());
+
             return response()->json([
                 'status' => false,
                 'message' => 'Gagal update status karena kesalahan server.',
@@ -362,57 +393,46 @@ class UserTransactionController extends Controller
 
         $payment = Trans::status($id);
         $result = json_decode(json_encode($payment), true);
-        if (in_array($result['status_code'], ['200', '201', '202'])) {
-            $query = Transaction::where('id', $id)->update([
-                'currency' => $result['currency'],
-                'merchant_id' => $result['merchant_id'],
-                'metode_pembayaran' => $result['payment_type'],
-                'tanggal_transaksi' => $result['transaction_time'],
-                'signature_key' => $result['signature_key'],
-                'status' => $result['transaction_status'],
-                'fraud_status' => $result['fraud_status'],
-            ]);
-            if ($query) {
-                if ($result['transaction_status'] == 'pending') {
-                    TransactionDescription::create([
-                        'transaction_id' => $id,
-                        'status' => $result['transaction_status'],
-                        'user' => Auth::user()->email,
-                        'judul' => 'fas fa-clock',
-                        'status_code' => $result['status_code'],
-                        'background' => 'bg-buyer',
-                        'deskripsi' => 'Pembayaran ditunda.',
-                    ]);
-                    return response()->json([
-                        'status' => true,
-                        'message' => 'Transaksi ditunda. Silahkan bayar nanti selama dalam waktu batas pembayaran.',
-                    ]);
-                } else {
-                    TransactionDescription::create([
-                        'transaction_id' => $id,
-                        'status' => $result['transaction_status'],
-                        'user' => Auth::user()->email,
-                        'judul' => 'fas fa-plus',
-                        'status_code' => $result['status_code'],
-                        'background' => 'bg-buyer',
-                        'deskripsi' => Auth::user()->nama_depan . ' telah sukses melakukan pembayaran. Transaksi diteruskan ke penjual.',
-                    ]);
-                    return response()->json([
-                        'status' => true,
-                        'message' => 'Pembayaran sukses.',
-                    ]);
-                }
-            } else {
+        if ($result['status_code'] == '200') {
+            try {
+                DB::beginTransaction();
+
+                Transaction::where('id', $id)->update([
+                    'currency' => $result['currency'],
+                    'merchant_id' => $result['merchant_id'],
+                    'metode_pembayaran' => $result['payment_type'],
+                    'tanggal_transaksi' => $result['transaction_time'],
+                    'signature_key' => $result['signature_key'],
+                    'status' => $result['transaction_status'],
+                    'fraud_status' => $result['fraud_status'],
+                ]);
+
+                TransactionDescription::create([
+                    'transaction_id' => $id,
+                    'status' => $result['transaction_status'],
+                    'user' => Auth::user()->email,
+                    'judul' => 'fas fa-check',
+                    'status_code' => $result['status_code'],
+                    'background' => 'bg-buyer',
+                    'deskripsi' => Auth::user()->nama_depan . ' telah sukses melakukan pembayaran. Transaksi diteruskan ke penjual.',
+                ]);
+
+                DB::rollBack();
+
+                return response()->json([
+                    'status' => true,
+                    'message' => 'Pembayaran sukses.',
+                ]);
+            } catch (Throwable $e) {
+                DB::rollBack();
+
+                Log::error($e->getMessage());
+
                 return response()->json([
                     'status' => false,
                     'message' => 'Transaksi pembayaran gagal.',
                 ]);
             }
-        } elseif (in_array($result['status_code'], ['400', '401', '402', '403', '404', '405', '406', '407', '408', '409', '410', '411', '412', '413'])) {
-            return response()->json([
-                'status' => false,
-                'message' => 'Terjadi kesalahan di server.',
-            ]);
         } else {
             return response()->json([
                 'status' => false,
@@ -426,17 +446,18 @@ class UserTransactionController extends Controller
         // Membuat objek Google Translate
         $translator = new GoogleTranslate();
 
-        // Mengatur bahasa sumber (Inggris) dan bahasa target (Indonesia)
         $translator->setSource('en');
         $translator->setTarget('id');
 
-        $transaction = Transaction::where('id', $id)->first();
+        $cancel = json_decode(json_encode(Trans::cancel($id)), true);
+        if ($cancel['status_code'] == '200') {
+            try {
+                DB::beginTransaction();
+
+                Transaction::where('id', $id)->update([
+                    'status' => 'cancel',
+                ]);
 
-        if ($transaction->status == 'created') {
-            $query = Transaction::where('id', $id)->update([
-                'status' => 'cancel',
-            ]);
-            if ($query) {
                 TransactionDescription::create([
                     'transcation_id' => $id,
                     'status' => 'cancel',
@@ -446,53 +467,31 @@ class UserTransactionController extends Controller
                     'deskripsi' => 'Transaksi dibatalkan',
                 ]);
 
+                DB::commit();
+
                 return response()->json([
                     'status' => true,
                     'message' => 'Transaksi berhasil dibatal',
                 ]);
-            } else {
+            } catch (Throwable $e) {
+                DB::rollBack();
+
+                Log::error($e->getMessage());
+
                 return response()->json([
                     'status' => false,
                     'message' => 'Transaksi gagal dibatalkan',
                 ]);
             }
         } else {
-            $cancel = json_decode(json_encode(Trans::cancel($id)), true);
-            if ($cancel['status_code'] == '200') {
-                $query = Transaction::where('id', $id)->update([
-                    'status' => $cancel['transaction_status'],
-                ]);
-                if ($query) {
-                    TransactionDescription::create([
-                        'transaction_id' => $id,
-                        'status' => $cancel['transaction_status'],
-                        'user' => Auth::user()->email,
-                        'judul' => 'fas fa-exclamation',
-                        'status_code' => $cancel['status_code'],
-                        'background' => 'bg-buyer',
-                        'deskripsi' => $translator->translate($cancel['status_message']),
-                    ]);
-
-                    return response()->json([
-                        'status' => true,
-                        'message' => $translator->translate($cancel['status_message']),
-                    ]);
-                } else {
-                    return response()->json([
-                        'status' => false,
-                        'message' => $translator->translate($cancel['status_message']),
-                    ]);
-                }
-            } elseif ($cancel['status_code'] == '412') {
-                return response()->json([
-                    'status' => false,
-                    'message' => $translator->translate($cancel['status_message']),
-                ]);
-            }
+            return response()->json([
+                'status' => false,
+                'message' => $translator->translate($cancel['status_message']),
+            ]);
         }
     }
 
-    public function complainTransaction($id)
+    public function complaintTransaction($id)
     {
         return view('user.refund.new-refund', compact('id'));
     }
diff --git a/public/assets/js/page/modules-datatables.js b/public/assets/js/page/modules-datatables.js
index 8db18c9..cb2bb12 100644
--- a/public/assets/js/page/modules-datatables.js
+++ b/public/assets/js/page/modules-datatables.js
@@ -52,7 +52,7 @@ $("#table-2").dataTable({
 
 // Transaksi pembeli
 $("#table-3").dataTable({
-    columnDefs: [{ sortable: false, targets: [6] }],
+    columnDefs: [{ sortable: false, targets: [7] }],
     searchable: true,
 });
 
diff --git a/resources/views/User/transaction/Pembeli/index.blade.php b/resources/views/User/transaction/Pembeli/index.blade.php
index c3d5f74..3d3c0a6 100644
--- a/resources/views/User/transaction/Pembeli/index.blade.php
+++ b/resources/views/User/transaction/Pembeli/index.blade.php
@@ -37,6 +37,7 @@
                                                 #
                                             </th>
                                             <th>Penjual</th>
+                                            <th>Nama Barang</th>
                                             <th>Total</th>
                                             <th>Tanggal Transaksi</th>
                                             <th>Tanggal Update</th>
@@ -50,6 +51,7 @@
                                                 <td>{{ $loop->iteration }}</td>
                                                 <td>{{ $transaction->data_penjual->nama_depan . ' ' . $transaction->data_penjual->nama_belakang }}
                                                 </td>
+                                                <td>{{ $transaction->nama_barang }}</td>
                                                 <td>Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}</td>
                                                 <td>{{ $transaction->created_at }}</td>
                                                 <td>{{ $transaction->updated_at }}</td>
@@ -72,7 +74,7 @@
                                                         <button type="button" class="btn btn-primary dropdown-toggle"
                                                             data-toggle="dropdown" aria-haspopup="true"
                                                             aria-expanded="false">
-                                                            Action
+                                                            ...
                                                         </button>
 
                                                         <ul class="dropdown-menu">
@@ -97,7 +99,7 @@
                                                                 </li>
                                                             @endif
 
-                                                            @if (in_array($transaction->status, ['pending', 'authorize', 'capture', 'created']))
+                                                            @if (in_array($transaction->status, ['pending', 'capture', 'created']))
                                                                 <li><a href="#" data-id="{{ $transaction->id }}"
                                                                         id="cancel" class="dropdown-item">Batal</a></li>
                                                             @endif
diff --git a/resources/views/User/transaction/penjual/index.blade.php b/resources/views/User/transaction/penjual/index.blade.php
index d79aab1..c00c50e 100644
--- a/resources/views/User/transaction/penjual/index.blade.php
+++ b/resources/views/User/transaction/penjual/index.blade.php
@@ -30,8 +30,8 @@
                                                 <th class="text-center">
                                                     #
                                                 </th>
-                                                <th>Order ID</th>
                                                 <th>Pembeli</th>
+                                                <th>Nama Barang</th>
                                                 <th>Total</th>
                                                 <th>Tanggal Pembuatan</th>
                                                 <th>Tanggal Update</th>
@@ -43,9 +43,9 @@
                                             @forelse ($transactions as $transaction)
                                                 <tr>
                                                     <td>{{ $loop->iteration }}</td>
-                                                    <td>{{ $transaction->id }}</td>
                                                     <td>{{ $transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang }}
                                                     </td>
+                                                    <td>{{ $transaction->nama_barang }}</td>
                                                     <td>Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}</td>
                                                     <td>{{ $transaction->created_at }}</td>
                                                     <td>{{ $transaction->updated_at }}</td>
@@ -68,7 +68,7 @@
                                                             <button type="button" class="btn btn-primary dropdown-toggle"
                                                                 data-toggle="dropdown" aria-haspopup="true"
                                                                 aria-expanded="false">
-                                                                Action
+                                                                ...
                                                             </button>
                                                             <ul class="dropdown-menu">
                                                                 <li><a class="dropdown-item"
@@ -81,12 +81,13 @@
                                                                     </li>
                                                                 @endif
                                                                 {{-- Setelah dibayar --}}
-                                                                @if ($transaction->status == 'settlement')
-                                                                    <li><a class="dropdown-item" href="#">Process</a>
+                                                                @if (in_array($transaction->status, ['settlement', 'capture']))
+                                                                    <li><a class="dropdown-item" href="#">Proses
+                                                                            Transaksi</a>
                                                                     </li>
                                                                 @endif
                                                                 {{-- Pengiriman barang --}}
-                                                                @if ($transaction->status == 'progress')
+                                                                @if ($transaction->status == 'process')
                                                                     <li><a class="dropdown-item" href="#">Kirim
                                                                             Barang</a>
                                                                     </li>
@@ -96,6 +97,11 @@
                                                                             sampai</a>
                                                                     </li>
                                                                 @endif
+                                                                @if ($transaction->status == 'finished')
+                                                                    <li><a class="dropdown-item" href="#">Transaksi
+                                                                            Selesai</a>
+                                                                    </li>
+                                                                @endif
                                                             </ul>
                                                         </div>
                                                     </td>
diff --git a/routes/web.php b/routes/web.php
index b7453c9..b064c98 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -42,20 +42,6 @@ Route::get('/detail_transaction', function () {
         'detail_transaction' => Transactions::allDetailTransactions()
     ]);
 })->name('transaction.detail');
-// Route::get('/history_transaction', function () {
-//     return view('admin/transaction/History_Transaction',[
-//         'name'=>'Jilhan Haura',
-//         "transaction"=> Transactions::allTransactions()
-//     ]);
-// });
-// Route::get('/history_refund', function () {
-//     return view('admin/refund/history-refund',[
-//         'name'=>'Jilhan Haura',
-//         "history_refund" => Refunds::HistoryRefund()
-//     ]);
-// });
-
-
 
 Route::get('/detail_refund',function() {
     return view('admin/refund/detail-refund',[
@@ -68,31 +54,6 @@ Route::get('/next_detail_refund',function() {
         'name'=>"Jilhan Haura"
     ]);
 });
-// Route::get('/list_user',function() {
-//     return view('Admin/users/list-user',[
-//         'name'=>"Jilhan Haura",
-//         "list_users" => Users::listUsers()
-//     ]);
-// });
-// Route::get('/detail-user',function() {
-//     return view('Admin/users/detail-user',[
-//         'name'=>"Jilhan Haura",
-//         "detail_user" => Users::detailUser()
-//     ]);
-// });
-// Route::get('/profile',function() {
-//     return view('admin/profile/index',[
-//         'name'=>"Jilhan Haura",
-//     ]);
-// });
-// Route::get('/setting',function() {
-//     return view('admin/setting/index',[
-//         'name'=>"Jilhan Haura",
-//         "setting" => Settings:: HistorySetting()
-//     ]);
-// });
-
-// --------------------------------------------------------------------------------------------
 
 //Index
 
@@ -195,7 +156,7 @@ Route::middleware(['auth'])->group(function(){
                 Route::put('user-pembeli/bayar-transaksi/{id}','payTransaction')->name('user-pembeli.pay');
                 Route::put('user-pembeli/batal-transaksi/{id}','cancelTransaction')->name('user-pembeli.cancel');
                 Route::put('user-pembeli/transaksi-selesai/{id}','finishTransaction')->name('user-pembeli.finish');
-                Route::put('user-pembeli/transaksi-komplain/{id}','complainTransaction')->name('user-pembeli.complain');
+                Route::put('user-pembeli/transaksi-komplain/{id}','complaintTransaction')->name('user-pembeli.complain');
 
                 //Penjual
                 Route::get('user-penjual','indexPenjual')->name('user-penjual.index');