Transaksi ke midtrans

This commit is contained in:
Muhammad Raihan Surya 2023-09-21 14:39:32 +07:00
parent 6c18bb1a52
commit ce8b355248
22 changed files with 3458 additions and 1924 deletions

View File

@ -4,14 +4,33 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Models\Transactions;
use App\Models\Transaction;
use App\Models\Refund;
use Illuminate\Support\Facades\Auth;
class AdminDashboardController extends Controller
{
public function index(){
$sumSettlement = 0;
$sumCancelled = 0;
$sumRefund = 0;
$currentYear = Carbon::now()->year;
$dataChartTransaction = [];
$dataChartRefund = [];
for($bulan = 1; $bulan <= 12; $bulan++){
$transaction = Transaction::whereMonth('created_at',$bulan)->whereYear('created_at', $currentYear)->sum('total_bayar');
// $transaction = Transaction::where('status','finished')->whereMonth('created_at',$bulan)->whereYear('created_at', $currentYear)->sum('total_bayar');
// $refund = Refund::whereMonth('created_at',$bulan)->whereYear('created_at', $currentYear)->sum('total');
// $refund = Refund::where('status','Partial Refund')->whereMonth('created_at',$bulan)->whereYear('created_at', $currentYear)->sum('total');
$dataChartTransaction[] = intval($transaction);
// $dataChartRefund[] = intval($refund);
}
return view('admin.index',[
"transaction"=>Transactions::allTransactions()
"transaction"=>Transactions::allTransactions(),
"dataChartTransaction" => $dataChartTransaction,
// "dataChartRefund" => $dataChartRefund
]);
}

View File

@ -34,10 +34,6 @@ class LoginController extends Controller
public function login()
{
$provinces = Province::all();
$cities = City::all();
$districts = District::all();
$villages = Village::all();
return view('index');
}
@ -49,10 +45,18 @@ class LoginController extends Controller
public function authenticate(Request $request)
{
// dd($request);
$credentials = $request->validate([
$credentials = $request->validate(
[
'email' => ['required', 'email'],
'password' => ['required', 'min:8'],
]);
],
[
'email.required' => 'Alamat email wajib diisi.',
'email.email' => 'Alamat email harus berformat valid.',
'password.required' => 'Password wajib diisi.',
'password.min' => 'Password harus memiliki panjang minimal 8 karakter.',
]
);
if (Auth::attempt($credentials)) {
if (Auth::user()->status == 'Finished') {
@ -63,17 +67,22 @@ class LoginController extends Controller
} else {
return redirect()->intended('user');
}
} else if(Auth::user()->status == 'Rejected'){
Session::flash('message', 'Akun ditolak karena tidak memenuhi persyaratan');
return redirect()->back();
} else {
Session::flash('message', 'Akun tidak ditemukan atau sedang dalam pengajuan');
return redirect()->back();
}
}
// $error = $credentials->errors();
// ->withInput($request->except('key'))
// ->withErrors($validator)
return redirect()
->back()
->withErrors([
'email' => 'Email dengan' . $credentials['email'] . ' tidak tersedia.',
])
->withErrors($credentials)
->onlyInput('email');
}
@ -95,7 +104,6 @@ class LoginController extends Controller
public function register(Request $request)
{
// input
$nama_depan = $request->get('nama-depan');
$nama_belakang = $request->get('nama-belakang');
$tanggal_lahir = $request->get('tanggal-lahir');
@ -171,7 +179,6 @@ class LoginController extends Controller
// } else {
// $status = 'Progress';
// }
} catch (\Exception $e) {
// $status = 'Progress';
}
@ -264,13 +271,14 @@ class LoginController extends Controller
return response()->json($data);
}
public function kirimKodeVerifikasi(Request $request){
public function kirimKodeVerifikasi(Request $request)
{
$email = $request->get('email');
$code = $request->get('code');
$verificationEmail = [
'code' => $code,
'email' => $email
'email' => $email,
];
try {
Mail::to($email)->send(new verificationMail($verificationEmail));
@ -278,7 +286,6 @@ class LoginController extends Controller
'message' => 'Kode verifikasi berhasil dikirim ke email. Silahkan cek di email anda.',
'status' => true,
]);
} catch (\Exception $e) {
return response()->json([
'message' => 'Kode verifikasi gagal dikirim ke email. ' . $e,
@ -287,7 +294,8 @@ class LoginController extends Controller
}
}
public function getOcr(){
public function getOcr()
{
//OCR
// dd(phpinfo());
try {
@ -335,7 +343,6 @@ class LoginController extends Controller
// } else {
// $status = 'Progress';
// }
} catch (\Exception $e) {
// $status = 'Progress';
dd($e);

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers\User;
use App\Models\Transaction;
use App\Models\TransactionDescription;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\Request;
@ -14,6 +15,7 @@ use Illuminate\Support\Facades\Auth;
use Ramsey\Uuid\Uuid;
use Midtrans\Config;
use Midtrans\Snap;
use Midtrans\Transaction as Trans;
class UserTransactionController extends Controller
{
@ -23,9 +25,11 @@ class UserTransactionController extends Controller
public function indexPembeli()
{
return view('user.transaction.pembeli.index', [
'name' => 'npannisa',
'TransactionUser' => TransactionUser::HistoryTransaction(),
'transactions' => Transaction::where('pembeli', Auth::user()->email)
->latest()
->get(),
]);
// dd(Transaction::where('pembeli',Auth::user()->email)->get());
}
/**
@ -33,18 +37,19 @@ class UserTransactionController extends Controller
*/
public function indexPenjual()
{
return view('user.transaction.penjual.transaction-penjual', [
'name' => 'npannisa',
'TransactionUser' => TransactionUser::HistoryTransaction(),
return view('user.transaction.penjual.index', [
'transactions' => Transaction::where('penjual', Auth::user()->email)->get(),
]);
}
public function detailTransaction($id)
{
return view('user.transaction.pembeli.detail-transaction', [
'name' => 'npannisa',
'TransactionUser' => TransactionUser::HistoryTransaction(),
'transaction' => Transaction::findOrFail($id),
'trackings' => TransactionDescription::where('order_id', $id)->get(),
]);
// dd(Transaction::findOrFail($id));
}
/**
@ -52,10 +57,7 @@ class UserTransactionController extends Controller
*/
public function createTransaction(Request $request)
{
return view('user.transaction.pembeli.new-transaction', [
'name' => 'npannisa',
'TransactionUser' => TransactionUser::HistoryTransaction(),
]);
return view('user.transaction.pembeli.new-transaction');
}
/**
@ -82,40 +84,69 @@ class UserTransactionController extends Controller
$nama_depan_pembeli = Auth::user()->nama_depan;
$nama_belakang_pembeli = Auth::user()->nama_belakang;
$nohp_pembeli = Auth::user()->nohp;
$nama_penjual = User::where('email', $penjual);
$nama_penjual = User::where('email', $penjual)->value('nama_depan');
$alamat = ucwords(strtolower(Auth::user()->alamat));
$id = Uuid::uuid4();
$now = Carbon::now();
$now = Carbon::now()->tz('Asia/Jakarta');
$bulan = $now->format('F');
$tahun = $now->year;
// $persentase_keuntungan = Setting::where('status','Active')
// ->where('bulan','=',$bulan)
// ->where('tahun','=',$tahun)->get();
$persentase_keuntungan = floatval('5');
$persentase_keuntungan = $request->get('persentase_keuntungan');
$total_harga = $jumlah_barang * $harga_barang;
$total_keuntungan = $persentase_keuntungan * $total_harga;
$biaya_admin = 0.1;
$total_bayar = intval($biaya_admin + $total_keuntungan + $total_harga);
$total_harga = $request->get('total_harga');
$total_keuntungan = $request->get('total_keuntungan');
$total_bayar = $request->get('total_bayar');
$batas_pembayaran = $now->addDays(1)->toDateTimeString();
$batas_pengiriman_barang_awal = $now->addDays(2)->toDateTimeString();
$batas_pengiriman_barang_akhir = $now->addDays(5)->toDateTimeString();
$params = [
'transaction_details' => [
'order_id' => Uuid::uuid4(),
'order_id' => $id,
'gross_amount' => $total_bayar,
],
'item_details' => [
[
'id' => $nama_barang . time(),
'price' => $total_bayar,
'quantity' => 1,
'price' => $harga_barang,
'quantity' => $jumlah_barang,
'name' => $nama_barang,
],
[
'id' => 'BA01',
'price' => $total_keuntungan,
'quantity' => 1,
'name' => 'Biaya Admin',
],
],
'customer_details' => [
'firts_name' => $nama_depan_pembeli,
'last_name' => $nama_belakang_pembeli,
'email' => $pembeli,
'phone' => $nohp_pembeli,
'billing' => [
'first_name' => $nama_depan_pembeli,
'last_name' => $nama_belakang_pembeli,
'email' => $pembeli,
'phone' => $nohp_pembeli,
'address' => Auth::user()->alamat,
'city' => '',
'postal_code' => '12190',
'country_code' => 'IDN',
],
],
'callbacks' => [
'finish' => 'http://127.0.0.1:8000/user/user-transaction-pembeli/',
],
'expiry' => [
'start_time' => $now->format('Y-m-d H:i:s P'),
'unit' => 'days',
'duration' => 1,
],
];
@ -128,11 +159,9 @@ class UserTransactionController extends Controller
$snap_token = Snap::getSnapToken($params);
$token = $snap_token;
$batas_pembayaran = $now->addDays(2)->toDateTimeString();
$batas_pengiriman_barang = $now->addDays(6)->toDateTimeString();
$status = 'Pending';
$status = 'pending';
$query = Transaction::create([
'id' => Uuid::uuid4(),
'id' => $id,
'pembeli' => $pembeli,
'penjual' => $penjual,
'nama_barang' => $nama_barang,
@ -142,32 +171,79 @@ class UserTransactionController extends Controller
'jumlah_barang' => $jumlah_barang,
'persentase_keuntungan' => $persentase_keuntungan,
'total_keuntungan' => $total_keuntungan,
'biaya_admin' => $biaya_admin,
'total_harga' => $total_harga,
'total_bayar' => $total_bayar,
'token' => $token,
'status' => $status,
'batas_pembayaran' => $batas_pembayaran,
'batas_pengiriman_barang' => $batas_pengiriman_barang,
'batas_pengiriman_barang_awal' => $batas_pengiriman_barang_awal,
'batas_pengiriman_barang_akhir' => $batas_pengiriman_barang_akhir,
]);
return response()->json($query);
if ($query) {
TransactionDescription::create([
'order_id' => $id,
'status' => $status,
'user' => $pembeli,
'judul' => 'fa fa-plus',
'background' => 'bg-buyer',
'deskripsi' => $nama_depan_pembeli . ' telah membuat transaksi baru dengan ' . $nama_penjual,
]);
return response()->json([
'status' => true,
'message' => 'Berhasil menambahkan transaksi. Silahkan lakukan pembayaran.',
]);
} else {
return response()->json([
'status' => false,
'message' => 'Gagal menambahkan transaksi.',
]);
}
}
// $result_api = json_decode($response->body(), true);
public function updateStatusTransaction(Request $request)
{
}
// $token = '124';
// $redirect_url = 'haha';
public function acceptTransaction(Request $request)
{
}
// // save to db
// $payment = new payment;
// $payment->order_id = $params['transaction_details'][ 'order_id'];
// $payment->status = 'pending';
// $payment->price = $request->price;
// $payment->customer_firts_name = $request->customer_firts_name;
// $payment->customer_email = $request->customer_email;
// $payment->item_name = $request->item_name;
// $payment->checkout_link = $response['redirect_url'];
// $payment->save();
public function paymentTransaction(Request $request, $id)
{
Config::$serverKey = 'SB-Mid-server-8rydZAwKoWuoQ6g_3ot0-K7p';
Config::$isProduction = false;
// Set sanitization on (default)
Config::$isSanitized = true;
// Set 3DS transaction for credit card to true
Config::$is3ds = true;
$payment = Trans::status($id);
$result = json_decode(json_encode($payment), true);
$query = Transaction::where('id', $id)->update([
'acquire' => $result['acquirer'],
'currency' => $result['currency'],
'fraud_status' => $result['fraud_status'],
'issuer' => $result['issuer'],
'merchant_id' => $result['merchant_id'],
'metode_pembayaran' => $result['payment_type'],
'tanggal_pembayaran' => $result['settlement_time'],
'signature_key' => $result['signature_key'],
'status' => $result['transaction_status'],
'tipe_transaction' => $result['transaction_type'],
'status_code' => $result['status_code'],
]);
if ($query) {
return response()->json([
'status' => true,
'message' => 'Pembayaran sukses. Proses akan dilanjutkan ke penjual',
]);
} else {
return response()->json([
'status' => false,
'message' => 'Pembayaran gagal',
]);
}
}
/**

View File

@ -18,6 +18,8 @@ class TransactionDescription extends Model
'order_id',
'user',
'judul',
'status',
'background',
'deskripsi'
];

View File

@ -25,13 +25,13 @@ class Transaction extends Model
'jumlah_barang',
'persentase_keuntungan',
'total_keuntungan',
'biaya_admin',
'total_harga',
'total_bayar',
'token',
'status',
'batas_pembayaran',
'batas_pengiriman_barang',
'batas_pengiriman_barang_awal',
'batas_pengiriman_barang_akhir',
];
/**
@ -46,12 +46,12 @@ class Transaction extends Model
];
//Relasi
public function pembeli(){
return $this->belongsTo(User::class, 'email', 'pembeli');
public function data_pembeli(){
return $this->belongsTo(User::class, 'pembeli', 'email');
}
public function penjual(){
return $this->belongsTo(User::class, 'email', 'penjual');
public function data_penjual(){
return $this->belongsTo(User::class, 'penjual', 'email');
}
public function refunds(){

View File

@ -22,15 +22,23 @@ return new class extends Migration
$table->double('jumlah_barang');
$table->double('persentase_keuntungan'); // persentase keuntungan
$table->double('total_keuntungan'); // perolehan keuntungan
$table->double('biaya_admin'); // biaya tambahan
$table->double('total_harga'); // gross amount
$table->double('total_bayar');
$table->string('signature_key')->nullable();
$table->string('token');
$table->string('metode_pembayaran')->nullable();
$table->enum('status',['Settlement','Capture','Pending','Cancel','Refund','Expire','Failure','Progress','Failed'])->default('Pending'); // transaction_status
$table->string('acquire')->nullable();
$table->string('issuer')->nullable();
$table->char('currency',3)->nullable();
$table->string('fraud_status')->nullable();
$table->string('merchant_id')->nullable();
$table->string('status_code')->nullable();
$table->string('tipe_transaction')->nullable();
$table->enum('status',['settlement','capture','pending','cancel','refund','expire','failure','progress','failed','sending','sended','finished'])->default('pending'); // transaction_status
$table->timestamp('batas_pembayaran');
$table->timestamp('batas_pengiriman_barang');
$table->timestamp('batas_pengiriman_barang_awal');
$table->timestamp('batas_pengiriman_barang_akhir');
$table->timestamp('tanggal_pembayaran')->nullable();
$table->timestamps();
$table->foreign('pembeli')->on('users')->references('email');
$table->foreign('penjual')->on('users')->references('email');

View File

@ -16,8 +16,8 @@ return new class extends Migration
$table->foreignUuid('order_id');
$table->double('total',10);
$table->timestamp('due_date');
$table->enum('status',['Partial Refund','Deny','Pending'])->default('Pending');
$table->enum('status',['partial refund','deny','pending'])->default('Pending');
$table->timestamps();
$table->foreign('order_id')->on('transactions')->references('id');
});
}

View File

@ -15,7 +15,7 @@ return new class extends Migration
$table->id();
$table->string('bulan',20);
$table->string('tahun',5);
$table->string('persentase',5);
$table->integer('persentase');
$table->enum('status',['Active', 'Nonactive']);
$table->timestamps();
});

View File

@ -16,6 +16,7 @@ return new class extends Migration
$table->foreignUuid('order_id');
$table->string('status',15);
$table->string('user');
$table->string('background');
$table->string('judul');
$table->string('deskripsi');
$table->timestamps();

View File

@ -5,6 +5,8 @@ namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use Carbon\Carbon;
use App\Models\Setting;
use Illuminate\Support\Str;
use Faker\Factory as FakerFactory;
use Faker\Provider\id_ID\Person as Person;
@ -43,12 +45,16 @@ class DatabaseSeeder extends Seeder
]);
User::factory(20)->create();
$this->call([
ProvincesSeeder::class,
CitiesSeeder::class,
DistrictsSeeder::class,
VillagesSeeder::class,
$now = Carbon::now()->tz('Asia/Jakarta');
$bulan = $now->format('F');
$tahun = $now->year;
Setting::factory()->create([
'bulan' => $bulan,
'tahun' => $tahun,
'persentase' => 5,
'status' => 'Active'
]);
$this->call([ProvincesSeeder::class, CitiesSeeder::class, DistrictsSeeder::class, VillagesSeeder::class]);
}
}

View File

@ -83,6 +83,14 @@ a:not(.btn-social-icon):not(.btn-social):not(.page-link) .fab {
background-color: #ba2760 !important;
}
.bg-buyer {
background-color: #d6760f !important;
}
.bg-seller {
background-color: #02a393 !important;
}
.bg-secondary {
background-color: #cdd3d8 !important;
}
@ -3486,10 +3494,58 @@ pre {
margin-right: 15px;
}
.section .section-buyer {
font-size: 18px;
color: #191d21;
font-weight: 600;
position: relative;
margin: 30px 0 25px 0;
}
.section .section-buyer:before {
content: " ";
border-radius: 5px;
height: 8px;
width: 30px;
background-color: #d6760f;
display: inline-block;
float: left;
margin-top: 6px;
margin-right: 15px;
}
.section .section-seller {
font-size: 18px;
color: #191d21;
font-weight: 600;
position: relative;
margin: 30px 0 25px 0;
}
.section .section-seller:before {
content: " ";
border-radius: 5px;
height: 8px;
width: 30px;
background-color: #0cf9e1;
display: inline-block;
float: left;
margin-top: 6px;
margin-right: 15px;
}
.section .section-title + .section-lead {
margin-top: -20px;
}
.section .section-buyer + .section-lead {
margin-top: -20px;
}
.section .section-seller + .section-lead {
margin-top: -20px;
}
.section .section-lead {
margin-left: 45px;
}
@ -3509,6 +3565,14 @@ pre {
font-size: 14px;
}
.section .section-buyer {
font-size: 14px;
}
.section .section-seller {
font-size: 14px;
}
.section .section-header {
flex-wrap: wrap;
margin-bottom: 20px !important;

View File

@ -52,6 +52,6 @@ $("#table-2").dataTable({
// Transaksi pembeli
$("#table-3").dataTable({
columnDefs: [{ sortable: false, targets: [6] }],
columnDefs: [{ sortable: false, targets: [5] }],
searchable: true,
});

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
<div class="card card-statistic-2">
<div class="card-stats">
<div class="card-stats-title">List Transaction -
<div class="dropdown d-inline">
{{-- <div class="dropdown d-inline">
<a class="font-weight-600 dropdown-toggle" data-toggle="dropdown" href="#"
id="orders-month">August</a>
<ul class="dropdown-menu dropdown-menu-sm">
@ -26,7 +26,7 @@
<li><a href="#" class="dropdown-item">November</a></li>
<li><a href="#" class="dropdown-item">December</a></li>
</ul>
</div>
</div> --}}
</div>
<div class="card-stats-items">
<div class="card-stats-item">
@ -41,6 +41,10 @@
<div class="card-stats-item-count">23</div>
<div class="card-stats-item-label">Canceled</div>
</div>
<div class="card-stats-item">
<div class="card-stats-item-count">23</div>
<div class="card-stats-item-label">Refund</div>
</div>
</div>
</div>
<div class="card-icon shadow-primary bg-primary">
@ -170,8 +174,7 @@
<div class="card-header">
<h4>Top 5 Users</h4>
<div class="card-header-action dropdown">
<a href="#" data-toggle="dropdown"
class="btn btn-primary dropdown-toggle">Month</a>
<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>
@ -184,8 +187,8 @@
<div class="card-body" id="top-5-scroll">
<ul class="list-unstyled list-unstyled-border">
<li class="media">
<img class="mr-3 rounded" width="55" src="{{asset('assets/img/avatar/avatar-6.png')}}"
alt="product">
<img class="mr-3 rounded" width="55"
src="{{ asset('assets/img/avatar/avatar-6.png') }}" alt="product">
<div class="media-body">
<div class="float-right">
<div class="font-weight-600 text-muted text-small">86 Sales</div>
@ -204,8 +207,8 @@
</div>
</li>
<li class="media">
<img class="mr-3 rounded" width="55" src="{{asset('assets/img/avatar/avatar-1.png')}}"
alt="product">
<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>
@ -224,8 +227,8 @@
</div>
</li>
<li class="media">
<img class="mr-3 rounded" width="55" src="{{asset('assets/img/avatar/avatar-2.png')}}"
alt="product">
<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>
@ -244,8 +247,8 @@
</div>
</li>
<li class="media">
<img class="mr-3 rounded" width="55" src="{{asset('assets/img/avatar/avatar-3.png')}}"
alt="product">
<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>
@ -264,8 +267,8 @@
</div>
</li>
<li class="media">
<img class="mr-3 rounded" width="55" src="{{asset('assets/img/avatar/avatar-4.png')}}"
alt="product">
<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>
@ -373,6 +376,48 @@
</div>
@include('admin.transaction.modal-tracking')
<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')],
}
});
});
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = 'Nunito',
'-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
@ -382,10 +427,12 @@
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "Oktober", "November", "December"],
labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September",
"Oktober", "November", "December"
],
datasets: [{
label: 'Transaction',
data: [3200, 18009, 4305, 3022, 6310, 5120, 5880, 6154, 0],
data: {{json_encode($dataChartTransaction)}},
borderWidth: 2,
backgroundColor: 'rgba(63,82,227,.8)',
borderWidth: 0,
@ -428,7 +475,7 @@
},
ticks: {
beginAtZero: true,
stepSize: 15000,
stepSize: 15000000,
callback: function(value, index, values) {
// return 'Rp.' + value;
return new Intl.NumberFormat('id-ID', {

View File

@ -91,48 +91,6 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script>
$(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')],
}
});
});
</script>
<!-- General JS Scripts -->
<script src="{{ asset('assets/modules/jquery.min.js') }}"></script>

View File

@ -1,4 +1,4 @@
@extends('Admin.layout.main')
@extends('admin.layout.main')
@section('content')
<div class="main-content">
<section class="section">
@ -15,7 +15,7 @@
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<div class="card-title pb-2 m-0">User Id<br /><span>#{{ $user->id }}</span>
<div class="card-title pb-2 m-0">User ID<br /><span>#{{ $user->id }}</span>
</div>
</div>
<div class="d-flex flex-column">
@ -98,15 +98,13 @@
@if ($user->foto_ktp == null)
<a href="#" id="tampilKTP">
<img id="fotoKTP" src="{{ asset('storage/foto-ktp/ktp.jpg') }}"
alt="Foto KTP" class="align-self-center img-fluid"
style="max-width: 350px;">
alt="Foto KTP" class="align-self-center img-fluid" style="width: 400px">
</a>
@else
<a href="#" id="tampilKTP">
<img id="fotoKTP"
src="{{ asset('storage/foto-ktp/' . $user->foto_ktp) }}"
alt="Foto Wajah" class="align-self-center img-fluid"
style="max-width: 350px;">
alt="Foto Wajah" class="align-self-center img-fluid" style="width: 450px">
</a>
@endif
</div>
@ -115,15 +113,13 @@
@if ($user->foto_wajah == null)
<a href="#" id="tampilWajah">
<img id="fotoWajah" src="{{ asset('storage/foto-wajah/wajah.jpg') }}"
alt="Foto KTP" class="align-self-center img-fluid"
style="max-width: 350px;">
alt="Foto KTP" class="align-self-center img-fluid" style="width: 400px">
</a>
@else
<a href="#" id="tampilWajah">
<img id="fotoWajah"
src="{{ asset('storage/foto-wajah/' . $user->foto_wajah) }}"
alt="Foto Wajah" class="align-self-center img-fluid"
style="max-width: 350px;">
alt="Foto Wajah" class="align-self-center img-fluid" style="width: 400px">
</a>
@endif
</div>

View File

@ -12,7 +12,12 @@
</div>
</div>
<div class="section-body">
<h2 class="section-title">npannisa</h2>
<h2 class="section-title">
Admin</h2>
<h2 class="section-buyer">
{{ $transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang }}</h2>
<h2 class="section-seller">
{{ $transaction->data_penjual->nama_depan . ' ' . $transaction->data_penjual->nama_belakang }}</h2>
<div class="d-flex justify-content-between align-items-center">
<div class="card-title pb-2 m-0">
<h4>Timeline</h4>
@ -23,66 +28,37 @@
<div class="row">
<div class="col-12">
<div class="activities">
{{-- Awal --}}
@forelse ($trackings as $tracking)
<div class="activity">
<div class="activity-icon bg-primary text-white shadow-primary">
<i class="fas fa-clipboard-list" style="font-size: 36px;"></i>
<div
class="activity-icon {{ $tracking->background }} text-white shadow-primary">
<i class="{{ $tracking->judul }}" style="font-size: 30px;"
aria-hidden="true"></i>
<!-- Mengganti ikon dengan ikon clipboard-list dan mengatur ukuran ikon -->
</div>
<div class="activity-detail">
<div class="mb-2">
<span class="text-job text-primary">August 21, 2023, 8:30:15 am</span>
<span class="text-job text-primary">{{ $tracking->created_at }}</span>
</div>
<p>User Created Trade</p>
<p>{{ $tracking->deskripsi }}</p>
</div>
</div>
@empty
<div class="activity">
<div class="activity-icon bg-primary text-white shadow-primary">
<i class="fas fa-bell" style="font-size: 36px;"></i>
<!-- Mengganti ikon dengan ikon bell dan mengatur ukuran ikon -->
<i class="fas fa-ban" style="font-size: 36px;"></i>
<!-- Mengganti ikon dengan ikon clipboard-list dan mengatur ukuran ikon -->
</div>
<div class="activity-detail">
<div class="mb-2">
<span class="text-job text-primary">August 22, 2023, 8:30:15 am</span>
<span class="text-job text-primary">--</span>
</div>
<p>System Notified Admin</p>
</div>
</div>
<div class="activity">
<div class="activity-icon bg-primary text-white shadow-primary">
<i class="fas fa-check-circle" style="font-size: 36px;"></i>
<!-- Mengganti ikon dengan ikon check-circle dan mengatur ukuran ikon -->
</div>
<div class="activity-detail">
<div class="mb-2">
<span class="text-job text-primary">August 23, 2023, 8:30:15 am</span>
</div>
<p>Admin Accepted Trade</p>
</div>
</div>
<div class="activity">
<div class="activity-icon bg-primary text-white shadow-primary">
<i class="fas fa-trash-alt" style="font-size: 36px;"></i>
<!-- Mengganti ikon dengan ikon trash-alt dan mengatur ukuran ikon -->
</div>
<div class="activity-detail">
<div class="mb-2">
<span class="text-job text-primary">August 24, 2023, 8:30:15 am</span>
</div>
<p>Trade in system</p>
</div>
</div>
<div class="activity">
<div class="activity-icon bg-primary text-white shadow-primary">
<i class="fas fa-comment-alt" style="font-size: 36px;"></i>
<!-- Mengganti ikon dengan ikon comment-alt dan mengatur ukuran ikon -->
</div>
<div class="activity-detail">
<div class="mb-2">
<span class="text-job text-primary">August 24, 2023, 8:30:15 am</span>
</div>
<p>Transaction Success</p>
<p>Tidak ada histori</p>
</div>
</div>
@endforelse
{{-- Akhir --}}
</div>
</div>
</div>
@ -90,41 +66,50 @@
<div class="section-body">
<div class="invoice">
<div class="invoice-print">
<h2 style="margin-bottom: -1em">REKBER</h2>
<div class="row">
<div class="col-lg-12">
<hr>
<div class="section-title">Keterangan</div>
<div class="row">
<div class="col-md-6">
<address>
<strong>Billed To:</strong><br>
npannisa<br>
1234 Main<br>
Apt. 4B<br>
Depok City, Indonesia
<strong>Pembeli:</strong><br>
{{ ucwords(strtolower($transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang)) }}<br>
{{ ucwords(strtolower($transaction->data_pembeli->alamat)) }}<br>
{{ ucwords(strtolower($transaction->data_pembeli->getVillageName() . ', ' . $transaction->data_pembeli->getDistrictName())) }}<br>
{{ ucwords(strtolower($transaction->data_pembeli->getCityName() . ', ' . $transaction->data_pembeli->getProvinceName())) }}
</address>
</div>
<div class="col-md-6 text-md-right">
<address>
<strong>Shipped To:</strong><br>
Jilhan Haura<br>
12345 Main<br>
Apt. 5B<br>
Bogor Barat, Indonesia
<strong>Penjual:</strong><br>
{{ ucwords(strtolower($transaction->data_penjual->nama_depan . ' ' . $transaction->data_penjual->nama_belakang)) }}<br>
{{ ucwords(strtolower($transaction->data_penjual->alamat)) }}<br>
{{ ucwords(strtolower($transaction->data_penjual->getVillageName() . ', ' . $transaction->data_penjual->getDistrictName())) }}<br>
{{ ucwords(strtolower($transaction->data_penjual->getCityName() . ', ' . $transaction->data_penjual->getProvinceName())) }}
</address>
</div>
</div>
<div class="row">
<div class="col-md-12 text-md-left">
<address>
<strong>Tanggal Transaksi:</strong><br>
{{ $transaction->created_at }}<br><br>
</address>
</div>
<div class="col-md-6">
<address>
<strong>Payment Method:</strong><br>
<strong>Metode Pembayaran:</strong><br>
Visa ending **** 4242<br>
npannisa@gmail.com
</address>
</div>
<div class="col-md-6 text-md-right">
<address>
<strong>Order Date:</strong><br>
September 19, 2023<br><br>
<strong>Tanggal Pembayaran:</strong><br>
{{ $transaction->updated_at }}<br><br>
{{-- {{$transaction->tanggal_pembayaran}}<br><br> --}}
</address>
</div>
</div>
@ -133,53 +118,54 @@
<div class="row mt-4">
<div class="col-md-12">
<div class="section-title">Order Summary</div>
<p class="section-lead">All items here cannot be deleted.</p>
<div class="section-title">Rangkuman Transaksi</div>
<p class="section-lead">Semua barang yang didaftarkan dalam transaksi.</p>
<div class="table-responsive">
<table class="table table-striped table-hover table-md">
<tr>
<th data-width="40">#</th>
<th>Item</th>
<th class="text-center">Price</th>
<th class="text-center">Quantity</th>
<th class="text-right">Totals</th>
<th>Nama Barang</th>
<th class="text-center">Harga</th>
<th class="text-center">Jumlah</th>
<th class="text-right">Total</th>
</tr>
<tr>
<td>1</td>
<td>Ayam Warna Warni</td>
<td class="text-center">Rp. 50.000.000</td>
<td class="text-center">1</td>
<td class="text-right">Rp. 50.000.000</td>
<td>{{ $transaction->nama_barang }}</td>
<td class="text-center">{{ $transaction->harga_barang }}</td>
<td class="text-center">{{ $transaction->jumlah_barang }}</td>
<td class="text-right">
{{ $transaction->harga_barang * $transaction->jumlah_barang }}</td>
</tr>
</table>
</div>
<div class="row mt-4">
<div class="col-lg-8">
<div class="section-title">Payment Method</div>
<p class="section-lead">The payment method that we provide
is to make it easier for
you to pay invoices.</p>
<p class="section-lead">{{$transaction->metode_pembayaran}}</p>
<div class="images">
<img src="assets/img/visa.png" alt="visa">
<img src="assets/img/jcb.png" alt="jcb">
<img src="assets/img/mastercard.png" alt="mastercard">
<img src="assets/img/paypal.png" alt="paypal">
<img src="{{ asset('assets/img/visa.png') }}" alt="visa">
<img src="{{ asset('assets/img/jcb.png') }}" alt="jcb">
<img src="{{ asset('assets/img/mastercard.png') }}" alt="mastercard">
<img src="{{ asset('assets/img/paypal.png') }}" alt="paypal">
</div>
</div>
<div class="col-lg-4 text-right">
<div class="invoice-detail-item">
<div class="invoice-detail-name">Subtotal</div>
<div class="invoice-detail-value">Rp.670.000.000</div>
<div class="invoice-detail-value">Rp {{ number_format($transaction->total_harga, 2, ',', '.') }}</div>
</div>
<div class="invoice-detail-item">
<div class="invoice-detail-name">Shipping</div>
<div class="invoice-detail-value">Rp.15.000</div>
<div class="invoice-detail-name">Biaya Admin</div>
<div class="invoice-detail-value">
Rp {{ number_format($transaction->total_keuntungan, 2, ',', '.') }}
</div>
</div>
<hr class="mt-2 mb-2">
<div class="invoice-detail-item">
<div class="invoice-detail-name">Total</div>
<div class="invoice-detail-value invoice-detail-value-lg">
Rp.6.715.000.000</div>
Rp {{ number_format($transaction->total_bayar, 2, ',', '.') }}</div>
</div>
</div>
</div>
@ -191,99 +177,6 @@
</div>
</div>
</div>
</section>
</div>
@endsection
{{-- <div class="col-12 col-md-12 col-lg-7">
<div class="card">
<div class="card-body">
@foreach ($TransactionUser as $HistoryTransaction) --}}
{{-- <div class="d-flex flex-column">
<div class="data-fieldr">
<span class="fw-bold text-start">Order Details</span>
</div>
<hr class="border border-1 opacity-75 w-100">
<div class="data-field">
<span class="fw-bold text-start">Oder ID</span>
<span class="text-muted ">{{ $HistoryTransaction['orderId'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Customer</span>
<span class="text-muted ">{{ $HistoryTransaction['Customer'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Seller</span>
<span class="text-muted ">{{ $HistoryTransaction['seller'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Total</span>
<span class="text-muted ">{{ $HistoryTransaction['total'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Due Date</span>
<span class="text-muted ">{{ $HistoryTransaction['dueDate'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Status</span>
<span class="text-muted ">{{ $HistoryTransaction['status'] }}</span>
</div>
</div> --}}
{{-- @endforeach --}}
{{-- Pindahan modal --}}
{{-- awal modal transaksi --}}
{{-- <div class="modal fade" id="detailtransaksi" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header d-flex justify-content-center">
<h1 class="modal-title fs-5" id="staticBackdropLabel">Detail Transaksi</h1>
<a type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></a>
</div>
<div class="modal-body">
@foreach ($TransactionUser as $HistoryTransaction)
<div class="d-flex flex-column">
<div class="data-fieldr">
<span class="fw-bold text-start">Order Details</span>
</div>
<hr class="border border-1 opacity-75 w-100">
<div class="data-field">
<span class="fw-bold text-start">Oder ID</span>
<span class="text-muted ">{{ $HistoryTransaction['orderId'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Customer</span>
<span class="text-muted ">{{ $HistoryTransaction['Customer'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Seller</span>
<span class="text-muted ">{{ $HistoryTransaction['seller'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Total</span>
<span class="text-muted ">{{ $HistoryTransaction['total'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Due Date</span>
<span class="text-muted ">{{ $HistoryTransaction['dueDate'] }}</span>
</div>
<div class="data-field">
<span class="fw-bold text-start">Status</span>
<span class="text-muted ">{{ $HistoryTransaction['status'] }}</span>
</div>
</div>
@endforeach
</div>
<div class="modal-footer">
<a href="/transaction" type="button" class="btn btn-primary">OK!</a>
</div>
</div>
</div>
</div> --}}

View File

@ -37,20 +37,22 @@
<th>Order ID</th>
<th>Penjual</th>
<th>Total</th>
<th>Batas Pengiriman</th>
<th>Tanggal Pembuatan</th>
<th>Tanggal Update</th>
<th>Status</th>
<th>Action</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($TransactionUser as $HistoryTransaction)
@foreach ($transactions as $transaction)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $HistoryTransaction['orderId'] }}</td>
<td>{{ $HistoryTransaction['seller'] }}</td>
<td>{{ $HistoryTransaction['total'] }}</td>
<td>{{ $HistoryTransaction['dueDate'] }}</td>
<td>{{ $HistoryTransaction['status'] }}</td>
<td>{{ $transaction->id }}</td>
<td>{{ $transaction->data_penjual->nama_depan.' '.$transaction->data_penjual->nama_belakang }}</td>
<td>Rp {{number_format($transaction->total_bayar,2, ',', '.') }}</td>
<td>{{ $transaction->created_at }}</td>
<td>{{ $transaction->updated_at }}</td>
<td>{{ ($transaction->status == 'pending' ? 'Menunggu Pembayaran' : 'Selesai') }}</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
@ -60,19 +62,22 @@
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="{{route('user-transaction.detail.pembeli',$HistoryTransaction['orderId'])}}">Detail</a></li>
<li><a class="dropdown-item" href="{{route('user-transaction.detail.pembeli',$transaction->id)}}">Detail</a></li>
{{-- @if ($transaction->status == 'Pending')
@endif --}}
<li><a class="dropdown-item"
href="/refund-transaction">Refund</a></li>
{{-- <li><a class="dropdown-item"
href="/invoice-transaction">Bayar</a></li> --}}
<li><a class="dropdown-item" id="bayar"
data-id="{{ $HistoryTransaction['orderId'] }}">Bayar</a>
data-id="{{ $transaction->id }}"
data-token="{{$transaction->token}}">Bayar</a>
{{-- data-id="{{ $transaction }}">Bayar</a> --}}
</li>
<li><a class="dropdown-item" id="selesai"
data-id="{{ $HistoryTransaction['orderId'] }}">Selesai</a>
data-id="{{ $transaction->id }}">Selesai</a>
{{-- data-id="{{ $transaction }}">Selesai</a> --}}
</li>
</ul>
@ -98,80 +103,74 @@
// Bayar
$('#table-3').on('click', '#bayar', function() {
const id = $(this).data('id');
const token =$(this).data('token');
const csrfToken = $('meta[name="csrf-token"]').attr('content');
snap.pay("98f6ed6d-3562-42ba-9ef5-cb7d52258e9f", {
snap.pay(token, {
onSuccess: function(result) {
/* You may add your own implementation here */
alert("payment success!");
const formData = new FormData();
formData.append('status', result.transaction_status);
formData.append('tanggal_pembayaran', result.transaction_time);
formData.append('metode_pembayaran', result.payment_type);
$.ajaxSetup({
headers:{
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
url:"{{route('payment-transaction.pembeli',':id')}}".replace(':id',id),
type:"POST",
data: formData,
contentType: false,
processData: false,
success:function(response){
Swal.fire({
title: response.status ? 'Berhasil' : 'Gagal',
text: response.message,
icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK'
});
console.log(response);
},error:function(error){
Swal.fire({
title: 'Gagal',
text: 'Gagal mengupdate pembayaran ke database',
icon: 'error'
});
}
});
console.log(result);
},
onPending: function(result) {
/* You may add your own implementation here */
// alert("wating your payment!");
Swal.fire({
title: 'Ditunda',
text: 'Pemabayaran ditunda. Silahkan tunggu sebentar ' + result,
icon: 'info'
});
console.log(result);
},
onError: function(result) {
/* You may add your own implementation here */
alert("payment failed!");
Swal.fire({
title : 'Gagal',
text: 'Terjadi kesalahan ' + result,
icon: 'error'
});
console.log(result);
},
onClose: function(error) {
/* You may add your own implementation here */
alert('you closed the popup without finishing the payment '+error);
Swal.fire({
title: 'Ditunda',
text: 'Kamu menutup halaman pembayaran. Silahkan masuk lagi untuk melakukan pembayaran',
icon: 'warning'
});
console.log(error);
}
});
// $.ajaxSetup({
// headers: {
// 'X-CSRF-TOKEN': csrfToken
// }
// });
// $.ajax({
// url: '/transaction',
// type: 'POST',
// data: formData,
// processData: false,
// contentType: false,
// success: function(response) {
// Swal.fire({
// title: 'Berhasil!',
// text: 'Berhasil bayar',
// icon: 'success',
// confirmButtonText: 'OK'
// }).then(function() {
// // console.log("Sukses bayar " + response['token']);
// window.snap.pay("610bcd2b-700a-4bff-a570-35c6fbd0b57b", {
// onSuccess: function(result) {
// /* You may add your own implementation here */
// alert("payment success!");
// console.log(result);
// },
// onPending: function(result) {
// /* You may add your own implementation here */
// alert("wating your payment!");
// console.log(result);
// },
// onError: function(result) {
// /* You may add your own implementation here */
// alert("payment failed!");
// console.log(result);
// },
// onClose: function() {
// /* You may add your own implementation here */
// alert(
// 'you closed the popup without finishing the payment'
// );
// }
// });
// });
// },
// error: function(error) {
// console.log("error");
// }
// });
});
$('#table-3').on('click', '#selesai', function() {

View File

@ -76,13 +76,13 @@
<input type="number" class="form-control" name="jumlah_barang" id="jumlahBarang"
placeholder="Jumlah satuan">
</div>
<div class="form-group">
{{-- <div class="form-group">
<label for="batasPengiriman">
<h5>Batas Pengiriman Barang</h5>
</label>
<input type="date" class="form-control" name="batas_pengiriman"
id="batasPengiriman" nama="batas_pengiriman">
</div>
</div> --}}
<div class="form-group">
<label for="inputDeskripsi">
<h5>Deskripsi</h5>
@ -93,19 +93,20 @@
<div class="dashed-line"></div>
<div class="form-row">
<label style="margin-right: 500px;">Nominal</label>
<div style="display: inline-block;">Rp. 890000</div>
<label style="margin-right: 200px;" id="jumlah">Nominal</label>
<div style="display: inline-block;" id="totalBiaya">Rp 0,00</div>
</div>
<div class="form-row">
<label style="margin-right: 500px;">Biaya Admin</label>
<div style="display: inline-block; ">Rp.0</div>
<label style="margin-right: 200px;" id="biayaAdmin" data-admin="">Biaya Admin
(0.1%)</label>
<div style="display: inline-block;" id="totalBiayaAdmin">Rp 0,00</div>
</div>
<div class="form-row">
<h6 style="margin-right: 500px;">Total Biaya</h6>
<h6 style="margin-right: 200px;">Total Biaya</h6>
<div style="display: inline-block;">
<h6>Rp.0</h6>
<h6 id="totalBayar">Rp 0,00</h6>
</div>
</div>
@ -125,6 +126,31 @@
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
$(document).ready(function() {
let totalHarga = 0;
let biayaAdmin = 0.1;
let totalBiayaAdmin = 0;
let totalBayar = 0;
function tampilTotalHarga(harga) {
let tampilTotalNominal = document.getElementById('totalBiaya');
let tampilTotalBiaya = document.getElementById('totalBayar');
let tampilTotalBiayaAdmin = document.getElementById('totalBiayaAdmin');
totalBiayaAdmin = harga * biayaAdmin / 100
totalBayar = totalBiayaAdmin + harga
tampilTotalNominal.innerHTML = harga.toLocaleString('id-ID', {
style: 'currency',
currency: 'IDR'
});
tampilTotalBiaya.innerHTML = totalBayar.toLocaleString('id-ID', {
style: 'currency',
currency: 'IDR'
});;
tampilTotalBiayaAdmin.innerHTML = totalBiayaAdmin.toLocaleString('id-ID', {
style: 'currency',
currency: 'IDR'
});
}
$("#selectContact").select2({
placeholder: "Pilih Kontak",
ajax: {
@ -144,6 +170,40 @@
},
});
$('#hargaBarang').change(function() {
let harga = $(this).val();
let jumlah = $('#jumlahBarang').val();
let biaya = document.getElementById('totalBiaya');
if (harga.trim() != '') {
if (jumlah.trim() != '') {
totalHarga = harga * jumlah;
} else {
totalHarga = harga * 0;
}
tampilTotalHarga(totalHarga);
}
});
$('#jumlahBarang').change(function() {
let jumlah = $(this).val();
let harga = $('#hargaBarang').val();
let nominal = document.getElementById('jumlah');
if (jumlah.trim() != '') {
if (jumlah == 0) {
nominal.innerHTML = 'Nominal';
} else {
nominal.innerHTML = 'Nominal (x' + jumlah + ')';
}
if (harga.trim() != '') {
totalHarga = harga * jumlah;
} else {
totalHarga = 0 * jumlah;
}
tampilTotalHarga(totalHarga);
}
})
$('#selectContact').change(function() {
let email = $('#selectContact').val();
@ -184,6 +244,7 @@
icon: 'error'
});
} else {
if (email != "{{ Auth::user()->email }}") {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
@ -191,7 +252,8 @@
});
$.ajax({
url: "{{ route('user-contact.email', ':email') }}".replace(':email', email),
url: "{{ route('user-contact.email', ':email') }}".replace(':email',
email),
type: 'GET',
success: function(response) {
if (response.status) {
@ -216,6 +278,13 @@
});
}
});
} else {
Swal.fire({
title: 'Gagal',
text: 'Email penjual tidak boleh sama denggan email pembeli',
icon: 'error',
});
}
}
});
@ -226,7 +295,6 @@
let hargaBarang = document.querySelector('[name="harga_barang"]').value;
let satuanBarang = document.querySelector('[name="satuan_barang"]').value;
let jumlahBarang = document.querySelector('[name="jumlah_barang"]').value;
let batasPengiriman = document.querySelector('[name="batas_pengiriman"]').value;
let deskripsi = document.querySelector('[name="deskripsi"]').value;
let emptyInput = [];
@ -243,6 +311,10 @@
emptyInput.push("Kolom penjual tidak boleh kosong");
}
if (penjual == "{{ Auth::user()->email }}") {
emptyInput.push("Email penjual tidak boleh sama dengan email pembeli");
}
if (namaBarang == "") {
emptyInput.push("Nama barang tidak boleh kosong");
}
@ -259,9 +331,9 @@
emptyInput.push("Jumlah barang tidak boleh kosong");
}
if (batasPengiriman == "") {
emptyInput.push("Batas pengiriman tidak boleh kosong");
}
// if (batasPengiriman == "") {
// emptyInput.push("Batas pengiriman tidak boleh kosong");
// }
if (emptyInput.length > 0) {
const emptyInputError = emptyInput.join(', ');
@ -279,8 +351,12 @@
formData.append('satuan_barang', satuanBarang);
formData.append('harga_barang', hargaBarang);
formData.append('jumlah_barang', jumlahBarang);
formData.append('batas_pengiriman', batasPengiriman);
// formData.append('batas_pengiriman', batasPengiriman);
formData.append('deskripsi', deskripsi);
formData.append('persentase_keuntungan', 0.1);
formData.append('total_keuntungan', totalBiayaAdmin);
formData.append('total_harga', totalHarga);
formData.append('total_bayar', totalBayar);
$.ajaxSetup({
headers: {
@ -296,9 +372,13 @@
contentType: false,
success: function(response) {
Swal.fire({
title:'Berhasil',
text: "Transaksi berhasil didaftar",
icon: 'success'
title: response.status ? 'Berhasil' : 'Gagal',
text: response.message,
icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK'
}).then(function() {
location.href =
"{{ route('user-transaction.index.pembeli') }}"
});
console.log(response);
},
@ -308,7 +388,7 @@
text: 'Gagal mengirimkan data karena ' + error,
icon: 'error'
});
console.log(error)
console.log(error);
}
});
}

View File

@ -18,7 +18,7 @@
<div class="hero bg-primary text-white">
<div class="hero-inner">
<h1>Welcome to the Rekber Aplication</h1>
<p class="lead">Selamat Datang npannisa!</p>
<p class="lead">Selamat Datang {{ Auth::user()->nama_depan }}!</p>
</div>
</div>
</div>
@ -30,27 +30,26 @@
<thead>
<tr>
<th>#</th>
<th>User ID</th>
<th>Order ID</th>
<th>Customer</th>
<th>Seller</th>
<th>Pembeli</th>
<th>Total</th>
<th>Due Date</th>
<th>Batas Pengiriman Barang</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@foreach ($TransactionUser as $key => $HistoryTransaction)
@foreach ($transactions as $transaction)
<tr>
<td>{{ ++$key }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['userId'] }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['orderId'] }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['Customer'] }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['seller'] }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['total'] }}</td>
<td>{{ $HistoryTransaction['dueDate'] }}</td>
<td class="font-weight-600">{{ $HistoryTransaction['status'] }}</td>
<td>{{ $loop->iteration }}</td>
<td class="font-weight-600">{{ $transaction->id }}</td>
<td class="font-weight-600">
{{ ucwords(strtolower($transaction->data_pembeli->nama_depan . ' ' . $transaction->data_pembeli->nama_belakang)) }}
</td>
<td class="font-weight-600">{{ $transaction->total_bayar }}</td>
{{-- <td class="font-weight-600">{{ $transaction->batas_pengiriman_barang }}</td> --}}
<td>{{ $transaction->batas_pengiriman_barang }}</td>
<td class="font-weight-600">{{ $transaction->status }}</td>
<td>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle"
@ -60,7 +59,8 @@
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item"
href="/detail-transaction">Detail</a></li>
href="{{ route('user-transaction.detail.pembeli', $transaction->id) }}">Detail</a>
</li>
<li><a class="dropdown-item" data-toggle="modal"
data-target="#tracking">Tracking</a></li>
{{-- <li><a class="dropdown-item" href="/tracking">Tracking</a></li> --}}
@ -76,5 +76,8 @@
</div>
</div>
</div>
@extends('user.transaction.Penjual.tracking')
</div>
</section>
</div>
@extends('user.transaction.penjual.modal-tracking')
@endsection

View File

@ -102,7 +102,6 @@
<div style="width: 100%; display: flex; align-items: center;">
<div class="input-field-signin-flex">
<i class="fas fa-envelope" aria-hidden="true"></i>
{{-- <input type="text" class="telp-input-signin" maxlength="13" oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 13);" placeholder="Nomer Telepon"> --}}
<input type="email" class="telp-input-signin" placeholder="Email" name="email" required>
</div>
<button type="button" class="btn-otp solid" id="cekAkun">Cek Akun</button>
@ -161,7 +160,7 @@
<div class="input-field-signup-flex">
<i class="fas fa-user"></i>
<input type="text" placeholder="Nama Depan" class="first-name-input"
name="nama_depan" />
name="nama_depan" required />
</div>
<div class="input-field-signup-flex" style="margin-left: 3%">
<i class="fas fa-user"></i>
@ -399,6 +398,8 @@
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"
integrity="sha512-aVKKRRi/Q/YV+4mjoKBsE4x3H+BkegoM/em46NNlCqNTmUYADjBbeNefNxYV7giUp0VxICtqdrbqU7iVaeZNXA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
@ -409,6 +410,26 @@
<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/script.js') }}"></script>
@if (Session::has('message'))
<script>
Swal.fire({
icon: 'error',
title: 'Gagal',
text: "{{ Session::get('message') }}",
});
</script>
@endif
@if ($errors->any())
<script>
Swal.fire({
icon: 'error',
title: 'Kesalahan',
text: @json($errors->all()).join(' '),
});
console.log(@json($errors->all()));
</script>
@endif
<script>
$(document).ready(function() {
@ -416,6 +437,7 @@
let verificationCode = '';
let waktuSekarangDetik = 0;
// Generate Kode Verifikasi
function generateVerificationCode() {
const codeLength = 6;
let code = '';
@ -425,6 +447,7 @@
return code;
}
// Login Awal
$('#cekAkun').on('click', function() {
let email = document.querySelector('[name="email"]').value;
const csrfToken = $('meta[name="csrf-token"]').attr('content');
@ -491,7 +514,9 @@
}
}
});
// Login Akhir
// Register Awal
$('#newEmail').on('input', function() {
const newEmail = $(this);
clearTimeout(newEmail.timer); // Menghapus timeout yang ada
@ -511,12 +536,22 @@
}
});
function isValidEmail(email) {
// Ekspresi reguler untuk memeriksa validitas alamat email
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// Menggunakan test() untuk memeriksa apakah email sesuai dengan ekspresi reguler
return emailRegex.test(email);
}
$('#verifikasiEmail').on('click', function() {
const newEmail = $(this);
let email = document.querySelector('[name="new_email"]').value;
const email = document.querySelector('[name="new_email"]').value;
const csrfToken = $('meta[name="csrf-token"]').attr('content');
verificationCode = generateVerificationCode();
verificationStatus = false
if (isValidEmail(email)) {
const formData = new FormData();
formData.append('email', email);
formData.append('code', verificationCode);
@ -566,17 +601,26 @@
text: response.message,
icon: response.status ? 'success' : 'error',
});
verificationStatus = true;
},
error: function(error) {
Swal.fire({
title: 'Gagal',
text: 'Gagal karena ' + error,
text: 'Gagal karena kesalahan inputan atau jaringan',
icon: 'error',
});
console.log(error);
},
});
} else {
Swal.fire({
title: 'Kesalahan',
text: 'Inputan yang anda masukan bukan alamat email. Silahkan masukan alamat email yang benar.',
icon: 'error'
});
}
verificationStatus = true;
});
$('#signUp').on('click', function() {
@ -624,9 +668,14 @@
if (email.trim() === "") {
emptyInput.push("Email tidak boleh kosong");
} else if (!verificationStatus) {
}
if (!verificationStatus) {
emptyInput.push("Verifikasi email terlebih dahulu");
} else if (emailVerification != verificationCode) {
}
if (emailVerification.trim() === "") {
emptyInput.push("Kode verifikasi harus diisi");
}
if (emailVerification != verificationCode) {
emptyInput.push('Kode verifikasi harus sama dengan kode yang dikirim ke email');
}
@ -723,6 +772,7 @@
});
}
});
// Register Akhir
});
</script>
</body>

View File

@ -160,6 +160,7 @@ Route::middleware(['auth'])->group(function(){
Route::get('detail-user-transaction-pembeli/{id}','detailTransaction')->name('user-transaction.detail.pembeli');
Route::get('tambah-transaction','createTransaction')->name('tambah-transaction.pembeli');
Route::post('store-transaction','storeTransaction')->name('store-transaction.pembeli');
Route::post('payment-transaction/{id}','paymentTransaction')->name('payment-transaction.pembeli');
//Penjual
Route::get('user-transaction-penjual','indexPenjual')->name('user-transaction.index.penjual');