Perbaiki tampilan transaksi baru

This commit is contained in:
Muhammad Raihan Surya 2023-12-06 16:22:54 +07:00
parent fc7db3e110
commit 1095ed940c
7 changed files with 213 additions and 216 deletions

View File

@ -53,6 +53,30 @@ class PembeliController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$request->validate(
[
'nama_barang' => ['required'],
'harga_barang' => ['required'],
'satuan_barang' => ['required'],
'jumlah_barang' => ['required'],
'email_penjual' => ['required'],
'persentase_keuntungan' => ['required'],
'total_keuntungan' => ['required'],
'total_bayar' => ['required'],
'total_harga' => ['required']
],[
'nama_barang.required' => 'Isi nama barang',
'harga_barang.required' => 'Isi harga barang',
'satuan_barang.required' => 'Isi satuan barang',
'jumlah_barang.required' => 'Isi jumlah barang',
'email_penjual.required' => 'Isi email penjual. Bisa dari kontak atau masukan email',
'persentase_keuntungan.required' => 'Terjadi kesalahan di server',
'total_keuntungan.required' => 'Terjadi kesalahan di server',
'total_bayar.required' => 'Terjadi kesalahan di server',
'total_harga.required' => 'Terjadi kesalahan di server'
]
);
$pembeli = auth()->user()->email; $pembeli = auth()->user()->email;
$penjual = $request->email_penjual; $penjual = $request->email_penjual;
$nama_barang = $request->nama_barang; $nama_barang = $request->nama_barang;

View File

@ -32,6 +32,7 @@ return new class extends Migration
$table->enum('status_transaksi',['success','challenge','failure','process','sending','sent','finished','created', 'refund', 'done'])->default('created'); // transaction_status $table->enum('status_transaksi',['success','challenge','failure','process','sending','sent','finished','created', 'refund', 'done'])->default('created'); // transaction_status
$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_pembatalan_transaksi')->nullable();
$table->timestamp('batas_konfirmasi_transaksi')->nullable(); $table->timestamp('batas_konfirmasi_transaksi')->nullable();
$table->timestamp('batas_pengiriman_barang_akhir'); $table->timestamp('batas_pengiriman_barang_akhir');
$table->timestamp('tanggal_transaksi')->nullable(); $table->timestamp('tanggal_transaksi')->nullable();

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

View File

@ -14,20 +14,25 @@
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div class="activities"> <div class="activities">
<p>asdasdasdsad</p> <p style="text-align: justify;">
Silahkan konfirmasi barang anda sebelum menyelesaikan
transaksi atau mengajukan
refund. Harap diminta kesadaran penuh anda sebelum memilih selesaikan transaksi atau
ajukan
komplain.</p>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row m-4">
<div class="col-12"> <div class="col-12">
<div class="activities"> <div class="activities">
<div class="col-6 d-flex justify-content-center"> <div class="col-6 d-flex justify-content-center">
<img src="{{ asset('assets/img/avatar/avatar-1.png') }}" <img src="{{ asset('assets/img/modal-end/approve.png') }}" style="width:100%;"
style="max-width:200px; max-height: 150px;" alt=""> alt="approve">
</div> </div>
<div class="col-6 d-flex justify-content-center"> <div class="col-6 d-flex justify-content-center">
<img src="{{ asset('assets/img/avatar/avatar-1.png') }}" <img src="{{ asset('assets/img/modal-end/refund.png') }}" style="width:100%;"
style="max-width:200px; max-height: 150px;" alt=""> alt="refund">
</div> </div>
</div> </div>
</div> </div>

View File

@ -9,109 +9,121 @@
<div class="card-body"> <div class="card-body">
<div class="card" <div class="card"
style="border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; background: linear-gradient(45deg, #f3f3f3, #e0e0e0);"> style="border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); position: relative; background: linear-gradient(45deg, #f3f3f3, #e0e0e0);">
<div class="card-header d-flex justify-content-center"> <form action="javascript:void(0);" method="POST" id="formTambahTransaksi"
<h2>Form Transaksi</h2> enctype="multipart/form-data">
</div> <div class="card-header d-flex justify-content-center">
<div class="card-body"> <h2>Form Transaksi</h2>
<div class="form-row"> </div>
<div class="form-group col-md-12"> <div class="card-body">
<label for="inputpembeli"> <div class="form-row">
<h5>Nama Pembeli</h5> <div class="form-group col-md-12">
<label for="inputPembeli">
<h5>Nama Pembeli</h5>
</label>
<input type="email" class="form-control" id="inputPembeli" name="pembeli"
placeholder="Masukkan nama pembeli"
value="{{ Auth::user()->nama_depan . ' ' . Auth::user()->nama_belakang }}"
disabled>
</div>
</div>
<div class="form-group">
<label for="inputpenjual">
<h5>Penjual</h5>
</label> </label>
<input type="email" class="form-control" id="inputpembeli" <h6>Pilih dari kontak</h6>
placeholder="Masukkan nama pembeli" <div class="input-group">
value="{{ Auth::user()->nama_depan . ' ' . Auth::user()->nama_belakang }}" <select class="form-control col-lg-10 col-md-10 col-sm-12"
disabled> id="selectContact" name="select_penjual">
</select>
<button class="btn btn-danger col-md-2 col-md-2 col-sm-12" type="button"
id="deleteOption">Hapus</button>
</div>
</div>
<div class="form-group">
<h6>atau dari email</h6>
<div class="input-group">
<input type="email" class="form-control" id="inputPenjual"
name="input_penjual" placeholder="Masukkan email penjual">
<button class="btn btn-danger" type="button" id="checkButton">Cek</button>
</div>
</div>
<div class="form-group">
<label for="inputBarang">
<h5>Nama Barang/Jasa</h5>
</label>
<input type="text" class="form-control" id="inputBarang"
placeholder="Sepeda Motor" name="nama_barang">
</div>
<div class="form-group">
<label for="hargaBarang">
<h5>Harga Satuan</h5>
</label>
<input type="text" class="form-control" name="harga_barang" id="hargaBarang"
placeholder="Rp. 1000.000"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);">
</div>
<div class="form-group">
<label for="hargaBarang">
<h5>Satuan</h5>
</label>
<input type="text" class="form-control" name="satuan_barang"
id="satuanBarang" placeholder="Buah/Kg/Karung/Jutaan dll.">
</div>
<div class="form-group">
<label for="jumlahBarang">
<h5>Jumlah Satuan</h5>
</label>
<input type="text" class="form-control" name="jumlah_barang"
id="jumlahBarang" placeholder="Jumlah satuan"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').substring(0, 10);">
</div>
<div class="form-group">
<label for="inputDeskripsi">
<h5>Deskripsi</h5>
</label>
<textarea class="form-control resizable" name="deskripsi" id="inputDeskripsi" placeholder="Deskripsikan transaksi anda"></textarea>
</div>
<div class="dashed-line"></div>
<div class="form-group">
<div class="input-group">
<label class="col-6" id="jumlah">Nominal</label>
<div class="col-6 text-right" id="totalBiaya">
Rp 0,00
</div>
</div>
</div>
<div class="form-group">
<div class="input-group">
<label class="col-6" id="biayaAdmin">Biaya Admin
({{ $persentase_keuntungan }}%)</label>
<div class="col-6 text-right" id="totalBiayaAdmin">Rp 0,00</div>
</div>
</div>
<div class="form-group">
<div class="input-group">
<h6 class="col-6">Total Biaya</h6>
<div class="col-6 text-right">
<h6 id="totalBayar">Rp 0,00</h6>
</div>
</div>
</div>
<div class="dashed-line"></div>
<div class="card-footer d-flex justify-content-center">
<button type="submit" class="btn btn-primary" id="save">Buat</button>
</div> </div>
</div> </div>
</form>
<div class="form-group">
<label for="inputpenjual">
<h5>Penjual</h5>
</label>
<h6>Pilih dari kontak</h6>
<div class="input-group">
<select class="form-control" id="selectContact" name="select_penjual"
style="width: 89%">
</select>
<button class="btn btn-danger" type="button" id="deleteOption">Hapus</button>
</div>
</div>
<div class="form-group">
<h6>atau dari email</h6>
<div class="input-group">
<input type="email" class="form-control" id="inputPenjual"
name="input_penjual" placeholder="Masukkan email penjual">
<button class="btn btn-danger" type="button" id="checkButton">Cek</button>
</div>
</div>
<div class="form-group">
<label for="inputBarang">
<h5>Nama Barang/Jasa</h5>
</label>
<input type="text" class="form-control" id="inputBarang"
placeholder="Sepeda Motor" name="nama_barang">
</div>
<div class="form-group">
<label for="hargaBarang">
<h5>Harga Satuan</h5>
</label>
<input type="text" class="form-control" name="harga_barang" id="hargaBarang"
placeholder="Rp. 1000.000"
oninput="this.value = this.value.replace(/[^0-9]/g, '').substring(0, 16);">
</div>
<div class="form-group">
<label for="hargaBarang">
<h5>Satuan</h5>
</label>
<input type="text" class="form-control" name="satuan_barang" id="satuanBarang"
placeholder="Buah/Kg/Karung/Jutaan dll.">
</div>
<div class="form-group">
<label for="jumlahBarang">
<h5>Jumlah Satuan</h5>
</label>
<input type="text" class="form-control" name="jumlah_barang" id="jumlahBarang"
placeholder="Jumlah satuan"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').substring(0, 10);">
</div>
<div class="form-group">
<label for="inputDeskripsi">
<h5>Deskripsi</h5>
</label>
<textarea class="form-control resizable" name="deskripsi" id="inputDeskripsi" placeholder="Deskripsikan transaksi anda"></textarea>
</div>
<div class="dashed-line"></div>
<div class="form-row">
<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: 200px;" id="biayaAdmin" data-admin="">Biaya Admin
({{ $persentase_keuntungan }}%)</label>
<div style="display: inline-block;" id="totalBiayaAdmin">Rp 0,00</div>
</div>
<div class="form-row">
<h6 style="margin-right: 200px;">Total Biaya</h6>
<div style="display: inline-block;">
<h6 id="totalBayar">Rp 0,00</h6>
</div>
</div>
<div class="dashed-line"></div>
<div class="card-footer d-flex justify-content-center">
<button type="button" class="btn btn-primary" id="save">Buat</button>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -307,126 +319,81 @@
} }
}); });
$("#save").on("click", function() { $('#formTambahTransaksi').on('submit', function(e) {
const csrfToken = $('meta[name="csrf-token"]').attr("content"); e.preventDefault();
const csrfToken = $('meta[name="csrf-token"]').attr('content');
let form = this;
let email_kontak = $('#selectContact').val();
let email_input = $('#inputPenjual').val();
let penjual = email_kontak != null ? email_kontak : email_input;
let opsiKontak = document.querySelector( const formData = new FormData(this);
'[name="select_penjual"]' formData.append("email_penjual", penjual);
).value; formData.append("persentase_keuntungan", biayaAdmin);
let inputKontak = document.querySelector( formData.append("total_keuntungan", totalBiayaAdmin);
'[name="input_penjual"]' formData.append("total_harga", totalHarga);
).value; formData.append("total_bayar", totalBayar);
let namaBarang = document.querySelector('[name="nama_barang"]').value;
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 deskripsi = document.querySelector(
'textarea[name="deskripsi"]'
).value;
let emptyInput = []; 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();
}
});
let penjual = ""; $.ajaxSetup({
if (opsiKontak != "" && inputKontak != "") { headers: {
penjual = opsiKontak; "X-CSRF-TOKEN": csrfToken,
} else if (opsiKontak == "" && inputKontak != "") { },
penjual = inputKontak; });
} else if (inputKontak == "" && opsiKontak != "") {
penjual = opsiKontak;
} else {
emptyInput.push("Kolom penjual tidak boleh kosong");
}
if (penjual == "{{ Auth::user()->email }}") { $.ajax({
emptyInput.push( url: "{{ route('user-pembeli.store') }}",
"Email penjual tidak boleh sama dengan email pembeli" type: "POST",
); data: formData,
} processData: false,
contentType: false,
success: function(response) {
Swal.fire({
title: response.status ? "Berhasil" : "Gagal",
text: response.message,
icon: response.status ? "success" : "error",
confirmButtonText: "OK",
}).then(function() {
if (response.status) {
location.href =
"{{ route('user-pembeli.index') }}";
}
});
},
error: function(error) {
if (error.responseJSON && error.responseJSON.errors) {
let errorMessage = "Terdapat beberapa kesalahan:<br>";
if (namaBarang == "") { const errors = error.responseJSON.errors;
emptyInput.push("Nama barang tidak boleh kosong");
}
if (hargaBarang == "") { for (let key in errors) {
emptyInput.push("Harga barang tidak boleh kosong"); errorMessage += `${errors[key].join(', ')}<br>`;
} }
if (satuanBarang == "") {
emptyInput.push("Satuan barang tidak boleh kosong");
}
if (jumlahBarang == "") {
emptyInput.push("Jumlah barang tidak boleh kosong");
}
if (emptyInput.length > 0) {
const emptyInputError = emptyInput.join(", ");
Swal.fire({
title: "Gagal",
text: emptyInputError,
icon: "error",
confirmButtonText: "OK",
});
} else {
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();
}
});
const formData = new FormData();
formData.append("email_penjual", penjual);
formData.append("nama_barang", namaBarang);
formData.append("satuan_barang", satuanBarang);
formData.append("harga_barang", hargaBarang);
formData.append("jumlah_barang", jumlahBarang);
formData.append("deskripsi", deskripsi);
formData.append("persentase_keuntungan", biayaAdmin);
formData.append("total_keuntungan", totalBiayaAdmin);
formData.append("total_harga", totalHarga);
formData.append("total_bayar", totalBayar);
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": csrfToken,
},
});
$.ajax({
url: "{{ route('user-pembeli.store') }}",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function(response) {
Swal.fire({
title: response.status ? "Berhasil" : "Gagal",
text: response.message,
icon: response.status ? "success" : "error",
confirmButtonText: "OK",
}).then(function() {
if (response.status) {
location.href =
"{{ route('user-pembeli.index') }}";
}
});
},
error: function(error) {
Swal.fire({ Swal.fire({
title: "Gagal", title: "Gagal",
text: "Gagal mengirimkan data karena " + error, html: errorMessage,
icon: "error", icon: "error",
}); });
}, } else {
}); Swal.fire({
} title: "Gagal",
text: "Gagal mengirimkan data karena " + error
.statusText,
icon: "error",
});
}
console.log(error);
},
});
}); });
}); });
</script> </script>

View File

@ -97,7 +97,7 @@
<!-- ======= END SIGN IN FORM ======= --> <!-- ======= END SIGN IN FORM ======= -->
<!-- ======= SIGN UP FORM ======= --> <!-- ======= SIGN UP FORM ======= -->
<form action="javascript:void(0)" class="sign-up-form" id="msform" enctype="multipart/form-data" <form action="javascript:void(0);" class="sign-up-form" id="msform" enctype="multipart/form-data"
method="POST"> method="POST">
@csrf @csrf
<h2 class="title">Daftar</h2> <h2 class="title">Daftar</h2>