Aplikasi_Rekber/resources/views/profile/index.blade.php

685 lines
35 KiB
PHP

@extends('layouts.main')
@section('content')
<div class="main-content">
<section class="section">
<div class="section-header">
<h1>Profile</h1>
</div>
<div class="card-body profile-card py-2 d-flex flex-column align-items-center text-center"
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);">
<i class="bi bi-arrow-right" style="position: absolute; top: 10px; right: 10px; font-size: 24px;"></i>
<img src="{{ Auth::user()->foto_profile == null ? asset('assets/img/avatar/avatar-1.png') : asset('storage/foto-profile/' . Auth::user()->foto_profile) }}"
alt="{{ Auth::user()->nama_depan }}" class="rounded-circle" style="width: 150px; height: 150px;">
<h2 class="mt-3">{{ Auth::user()->nama_depan . ' ' . Auth::user()->nama_belakang }}</h2>
<h5 class="mb-0">#{{ Auth::user()->id }}</h5>
</div>
<div class="card">
<div class="card-body pt-3">
<!-- Bordered Tabs -->
<ul class="nav nav-tabs nav-tabs-bordered">
<li class="nav-item">
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#profile-overview">Data
Diri</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-edit">Ubah
Profile</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-change-password">Ubah
Password</button>
</li>
</ul>
<div class="tab-content pt-2">
{{-- Detail Profil --}}
<div class="tab-pane active show profile-overview" id="profile-overview">
<h5 class="card-title">Detail Profil</h5>
<div class="row">
<div class="col-lg-3 col-md-4 label ">Nama Lengkap</div>
<div class="col-lg-9 col-md-8">
{{ Auth::user()->nama_depan . ' ' . Auth::user()->nama_belakang }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Email</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->email }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">No. HP</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->nohp }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Negara</div>
<div class="col-lg-9 col-md-8">Indonesia</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Provinsi</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->getProvinceName() }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Kota/Kabupaten</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->getCityName() }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Kecamatan</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->getDistrictName() }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Kelurahan</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->getVillageName() }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Alamat</div>
<div class="col-lg-9 col-md-8">{{ Auth::user()->alamat }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Nama Bank/e-Wallet Tujuan</div>
<div class="col-lg-9 col-md-8">{{ auth()->user()->nama_bank }}</div>
</div>
<div class="row">
<div class="col-lg-3 col-md-4 label">Nomor Rekening/e-Wallet Tujuan</div>
<div class="col-lg-9 col-md-8">{{ auth()->user()->no_rek }}</div>
</div>
</div>
{{-- Edit Profile --}}
<div class="tab-pane fade profile-edit pt-3" id="profile-edit">
<form id="formEditProfile" action="javascript:void(0);" enctype="multipart/form-data">
@csrf
<div class="row mb-3">
<label for="profileImage" class="col-md-4 col-lg-3 col-form-label">Foto Profil</label>
<div class="col-md-8 col-lg-9">
<img id="profileImagePreview"
src="{{ Auth::user()->foto_profile == null ? asset('assets/img/avatar/avatar-1.png') : asset('storage/foto-profile/' . auth()->user()->foto_profile) }}"
alt="Profile" style="max-width: 100%; max-height: 150px;">
<div class="d-flex justify-content-between align-items-center mt-2">
<label for="profileImageInput" class="btn btn-primary btn-sm"
title="Upload new profile image">
<i class="bi bi-upload"></i> Unggah
<input type="file" id="profileImageInput" accept="image/*"
style="display: none;" name="foto_profile">
</label>
</div>
</div>
</div>
<div class="row mb-3">
<label for="nama_depan" class="col-md-4 col-lg-3 col-form-label">Nama
Lengkap</label>
<div class="col-md-4 col-lg-4">
<input name="nama_depan" type="text" class="form-control" id="nama_depan"
placeholder="Nama depan" value="{{ Auth::user()->nama_depan }}" required>
</div>
<div class="col-md-4 col-lg-5">
<input name="nama_belakang" type="text" class="form-control"
id="nama_belakang" placeholder="Nama belakang"
value="{{ Auth::user()->nama_belakang }}" required>
</div>
</div>
<div class="row mb-3">
<label for="nohp" class="col-md-4 col-lg-3 col-form-label">No. HP</label>
<div class="col-md-8 col-lg-9">
<input name="nohp" type="text" class="form-control" id="nohp"
value="{{ Auth::user()->nohp }}"
oninput="this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"
required>
</div>
</div>
<div class="row mb-3">
<label for="selectProvince" class="col-md-4 col-lg-3 col-form-label">Provinsi</label>
<div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="provinsi" id="selectProvince">
@foreach ($provinces as $province)
<option value="{{ $province->code }}">{{ $province->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="selectCity"
class="col-md-4 col-lg-3 col-form-label">Kabupaten/Kota</label>
<div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kota" id="selectCity">
@foreach ($cities as $city)
<option value="{{ $city->code }}">{{ $city->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="selectDistrict" class="col-md-4 col-lg-3 col-form-label">Kecamatan</label>
<div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kecamatan" id="selectDistrict">
@foreach ($districts as $district)
<option value="{{ $district->code }}">{{ $district->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="selectVillage" class="col-md-4 col-lg-3 col-form-label">Kelurahan</label>
<div class="col-md-8 col-lg-9">
<select style="width: 100%;" name="kelurahan" id="selectVillage" required>
@foreach ($villages as $village)
<option value="{{ $village->code }}">{{ $village->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-3">
<label for="alamat" class="col-md-4 col-lg-3 col-form-label">Alamat</label>
<div class="col-md-8 col-lg-9">
<input name="alamat" type="text" class="form-control" id="alamat"
value="{{ Auth::user()->alamat }}" required>
</div>
</div>
<div class="row mb-3">
<label for="namaBank" class="col-md-4 col-lg-3 col-form-label">Bank/e-Wallet
Tujuan</label>
<div class="col-md-4 col-lg-4">
<select style="width: 100%;" name="nama_bank" id="namaBank" required>
<option selected disabled>Silahkan Pilih Bank/e-Wallet</option>
<option disabled>Bank</option>
<option value="bca"
{{ Auth::user()->nama_bank == 'bca' ? 'selected' : '' }}>BCA
</option>
<option value="mandiri"
{{ Auth::user()->nama_bank == 'mandiri' ? 'selected' : '' }}>
Mandiri
</option>
<option value="bni"
{{ Auth::user()->nama_bank == 'bni' ? 'selected' : '' }}>BNI
</option>
<option value="bri"
{{ Auth::user()->nama_bank == 'bri' ? 'selected' : '' }}>BRI
</option>
<option value="bsm"
{{ Auth::user()->nama_bank == 'bsm' ? 'selected' : '' }}>BSI (Bank
Syariah
Indonesia)</option>
<option value="danamon"
{{ Auth::user()->nama_bank == 'danamon' ? 'selected' : '' }}>
Danamoon/Danamon Syariah</option>
<option value="permata"
{{ Auth::user()->nama_bank == 'permata' ? 'selected' : '' }}>Bank
Permata
</option>
<option value="mega"
{{ Auth::user()->nama_bank == 'mega' ? 'selected' : '' }}>Bank Mega
</option>
<option value="btn"
{{ Auth::user()->nama_bank == 'btn' ? 'selected' : '' }}>BTN/BTN
Syariah
</option>
<option value="cimb"
{{ Auth::user()->nama_bank == 'cimb' ? 'selected' : '' }}>CIMB
Niaga/CIMB
Niaga Syariah</option>
<option value="hsbc"
{{ Auth::user()->nama_bank == 'hsbc' ? 'selected' : '' }}>HSBC
Indonesia
</option>
<option value="uob"
{{ Auth::user()->nama_bank == 'uob' ? 'selected' : '' }}>TMRW/UOB
</option>
<option value="panin"
{{ Auth::user()->nama_bank == 'panin' ? 'selected' : '' }}>Panin
Bank
</option>
<option value="bii"
{{ Auth::user()->nama_bank == 'bii' ? 'selected' : '' }}>Maybank
Indonesia
</option>
<option value="ocbc"
{{ Auth::user()->nama_bank == 'ocbc' ? 'selected' : '' }}>OCBC NISP
</option>
<option value="sinarmas"
{{ Auth::user()->nama_bank == 'sinarmas' ? 'selected' : '' }}>Bank
Sinarmas
</option>
<option value="dbs"
{{ Auth::user()->nama_bank == 'dbs' ? 'selected' : '' }}>DBS Bank
Indonesia
</option>
<option disabled>e-Wallet</option>
<option value="ovo"
{{ Auth::user()->nama_bank == 'ovo' ? 'selected' : '' }}>OVO
</option>
<option value="dana"
{{ Auth::user()->nama_bank == 'dana' ? 'selected' : '' }}>DANA
</option>
<option value="linkaja"
{{ Auth::user()->nama_bank == 'linkaja' ? 'selected' : '' }}>
LinkAja
</option>
<option value="gopay"
{{ Auth::user()->nama_bank == 'gopay' ? 'selected' : '' }}>GoPay
</option>
<option value="shopeepay"
{{ Auth::user()->nama_bank == 'shopeepay' ? 'selected' : '' }}>
ShopeePay
</option>
</select>
</div>
<div class="col-md-4 col-lg-5">
<input name="no_rek" type="text" class="form-control" id="noRek"
value="{{ Auth::user()->no_rek }}"
oninput="this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*?)\..*/g, '$1');"
required>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
{{-- Edit Profil --}}
{{-- Change Password --}}
<div class="tab-pane fade pt-3" id="profile-change-password">
<form id="formChangePassword" action="javascript:void(0);">
@csrf
<div class="row mb-3">
<label for="currentPassword" class="col-md-4 col-lg-3 col-form-label">Password
Sekarang</label>
<div class="col-md-8 col-lg-9">
<input name="currentpassword" type="password" class="form-control"
id="currentPassword">
</div>
</div>
<div class="row mb-3">
<label for="newPassword" class="col-md-4 col-lg-3 col-form-label">Password
Baru</label>
<div class="col-md-8 col-lg-9">
<input name="newpassword" type="password" class="form-control" id="newPassword">
</div>
</div>
<div class="row mb-3">
<label for="renewPassword" class="col-md-4 col-lg-3 col-form-label">Ketik Ulang
Password Baru</label>
<div class="col-md-8 col-lg-9">
<input name="renewpassword" type="password" class="form-control"
id="renewPassword">
</div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-primary">Ganti Password</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
</div>
{{-- profile --}}
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
const editProfileTab = document.querySelector('[data-bs-target="#profile-edit"]');
const changePasswordTab = document.querySelector('[data-bs-target="#profile-change-password"]');
const overviewTab = document.querySelector('[data-bs-target="#profile-overview"]');
// Menambahkan event listener untuk mengubah tab saat tombol diklik
editProfileTab.addEventListener("click", function() {
activateTabAndContent(editProfileTab, "#profile-edit");
});
changePasswordTab.addEventListener("click", function() {
activateTabAndContent(changePasswordTab, "#profile-change-password");
});
// Menambahkan event listener untuk kembali ke tab "Overview"
overviewTab.addEventListener("click", function() {
activateTabAndContent(overviewTab, "#profile-overview");
});
// Fungsi untuk mengaktifkan tab dan konten
function activateTabAndContent(tabButton, tabContentId) {
// Nonaktifkan tab aktif saat ini
const activeTabButton = document.querySelector(".nav-link.active");
const activeTabContent = document.querySelector(".tab-pane.active");
activeTabButton.classList.remove("active");
activeTabContent.classList.remove("show", "active");
// Aktifkan tab yang dipilih
tabButton.classList.add("active");
// Tampilkan konten tab yang dipilih
const selectedTabContent = document.querySelector(tabContentId);
selectedTabContent.classList.add("show", "active");
}
});
$(document).ready(function() {
var selectedVillage = "{{ Auth::user()->kode_kelurahan }}";
var selectedDistrict = "{{ Auth::user()->village->district->code }}";
var selectedCity = "{{ Auth::user()->village->district->city->code }}";
var selectedProvince = "{{ Auth::user()->village->district->city->province->code }}";
$("#selectProvince").val(selectedProvince).trigger('change');
$("#selectCity").val(selectedCity).trigger('change');
$("#selectDistrict").val(selectedDistrict).trigger('change');
$("#selectVillage").val(selectedVillage).trigger('change');
function ucwords(str) {
return str.toLowerCase().replace(/\b\w/g, function(l) {
return l.toUpperCase();
});
}
$('#selectProvince').select2();
$('#selectCity').select2();
$('#selectDistrict').select2();
$('#selectVillage').select2();
// Event Listener untuk selectProvince
$("#selectProvince").change(function() {
let code = $("#selectProvince").val();
// Mengosongkan pilihan di selectCity dan selectDistrict dan selectVillage
$("#selectCity", "#selectDistrict", "#selectVillage").empty();
// Menghapus properti 'disabled' pada selectCity dan selectDistrict dan selectVillage
$("#selectCity", "#selectDistrict", "#selectVillage").prop(
"disable",
false
);
// Muat ulang data berdasarkan provinsi yang baru dipilih di selectProvince
$("#selectCity").select2({
placeholder: "Pilih Kabupaten/Kota",
ajax: {
url: "/cari-kota/" + code,
processResults: function({
data
}) {
return {
results: $.map(data, function(item) {
return {
id: item.code,
text: ucwords(item.name),
};
}),
};
},
},
});
});
// Event Listener untuk perubahan pada selectCity
$("#selectCity").change(function() {
let code = $("#selectCity").val();
// Mengosongkan pilihan di selectDistrict dan selectVillage
$("#selectDristrict", "#selectVillage").empty();
// Menghapus properti 'disable' pada selectDistrict dan selectVillage
$("#selectDistrict", "#selectVillage").prop("disabled", false);
// Memuat ulang data berdasarkan wilayah yang baru dipilih di selectCity
$("#selectDistrict").select2({
placeholder: "Pilih Kecamatan",
ajax: {
url: "/cari-kecamatan/" + code, // Isi dengan URL yang sesuai
processResults: function({
data
}) {
return {
results: $.map(data, function(item) {
return {
id: item.code,
text: ucwords(item.name),
};
}),
};
},
},
});
});
// Event Listener untuk selectDistrict
$("#selectDistrict").change(function() {
let code = $("#selectDistrict").val();
// Mengosongkan pilihan di selectVillage
$("#selectVillage").empty();
// Menghapus properti 'disabled' pada selectVillage
$("#selectVillage").prop("disabled", false);
// Memuat ulang data berdasarkan wilayah yang baru dipilih di selectDistrict
$("#selectVillage").select2({
placeholder: "Pilih Kelurahan",
ajax: {
url: "/cari-kelurahan/" + code, // Isi dengan URL yang sesuai
processResults: function({
data
}) {
return {
results: $.map(data, function(item) {
return {
id: item.code,
text: ucwords(item.name),
};
}),
};
},
},
});
});
$('#namaBank').select2();
//file input
$('#profileImageInput').change(function() {
var file = this.files[0];
if (file.type.startsWith('image/')) {
const reader = new FileReader();
reader.onload = function(e) {
// Mengganti src gambar dengan data URL dari berkas yang dipilih
document.getElementById('profileImagePreview').src = e.target.result;
};
// Membaca berkas sebagai data URL
reader.readAsDataURL(file);
} else {
Swal.fire({
title: 'Salah Input',
text: 'File yang anda upload bukan foto/gambar',
icon: 'error',
});
$('#profileImageInput').val('');
}
});
// edit profile
$('#formEditProfile').on('submit', function(e) {
e.preventDefault();
let form = this;
const csrf = $('meta[name="csrf-token"]').attr('content');
if (!form.checkValidity()) {
form.reportValidity();
return;
}
let formData = new FormData(this);
formData.append('foto', $('#profileImageInput')[0].files[0])
Swal.fire({
html: '<div class="mt-3"><lord-icon src="https://cdn.lordicon.com/etwtznjn.json" trigger="loop" colors="primary:#0ab39c,secondary:#405189" style="width:120px;height:120px"></lord-icon><div class="mt-4 pt-2 fs-15"><h4>Form Anda sedang diproses!</h4><p class="text-muted mx-4 mb-0">Mohon tunggu...</p></div></div>',
allowEscapeKey: false,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading()
}
});
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrf,
}
});
$.ajax({
type: 'POST',
url: "{{ route('profile.update') }}",
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',
position: 'center',
}).then(function() {
if (response.status) {
location.reload();
}
});
},
error: function(error) {
console.log(error.responseText)
var response = JSON.parse(error.responseText);
var errorMessage = '';
for (var key in response.errors) {
if (response.errors.hasOwnProperty(key)) {
errorMessage += response.errors[key][0] + '<br>';
}
}
Swal.fire({
position: 'center',
icon: 'error',
title: 'Terjadi Kesalahan',
html: errorMessage,
showConfirmButton: true
});
}
});
});
// ganti password
$('#formChangePassword').on('submit', function(e) {
e.preventDefault();
let form = this;
if (!form.checkValidity()) {
form.reportValidity();
return;
}
let formData = new FormData(this);
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 currentPassword = $('#currentPassword').val();
const newPassword = $('#newPassword').val();
const renewPassword = $('#renewPassword').val();
$.ajax({
type: 'PUT',
url: "{{ route('profile.change-password') }}",
data: {
currentPassword: currentPassword,
newPassword: newPassword,
renewPassword: renewPassword,
"_token": "{{ csrf_token() }}",
},
success: function(response) {
Swal.fire({
title: response.status ? 'Berhasil!' : 'Gagal!',
text: response.message,
icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK',
position: 'center',
}).then(function() {
if (response.status) {
location.reload();
}
});
},
error: function(error) {
console.log(error.responseText)
var response = JSON.parse(error.responseText);
var errorMessage = '';
for (var key in response.errors) {
if (response.errors.hasOwnProperty(key)) {
errorMessage += response.errors[key][0] + '<br>';
}
}
Swal.fire({
position: 'center',
icon: 'error',
title: 'Terjadi Kesalahan',
html: errorMessage,
showConfirmButton: true
});
}
});
});
});
</script>
{{-- profile --}}
@endsection