2024-02-27 22:53:57 +07:00
< ? php
namespace App\Http\Controllers ;
2024-03-07 18:13:09 +07:00
use App\Jobs\layananPengajuanDpuDpaJob ;
2024-03-02 18:06:48 +07:00
use App\Models\Mahasiswa ;
use App\Models\PengajuanDpuDpa ;
use App\Models\User ;
2024-03-07 18:13:09 +07:00
use Carbon\Carbon ;
2024-02-27 22:53:57 +07:00
use Illuminate\Http\Request ;
2024-03-02 18:06:48 +07:00
use Illuminate\Support\Facades\Storage ;
2024-03-07 18:13:09 +07:00
use PhpParser\Node\Expr\Cast\Object_ ;
use Spatie\Permission\Models\Role ;
2024-02-27 22:53:57 +07:00
class LayananPengajuanDpuDpaController extends Controller
{
2024-03-07 18:13:09 +07:00
//done
2024-02-27 22:53:57 +07:00
public function index (){
2024-03-02 18:06:48 +07:00
$data = PengajuanDpuDpa ::
select ( 'pengajuan_dpu_dpas.*' ,
'mahasiswas.nim as nim' ,
'mahasiswas.nama as nama' ,
'dosen_dpu.nama_gelar as dpu_nama_gelar' ,
'dosen_dpa.nama_gelar as dpa_nama_gelar'
)
-> join ( 'mahasiswas' , 'mahasiswas_id' , '=' , 'mahasiswas.id' )
-> join ( 'users as dosen_dpu' , 'mahasiswas.dosen_dpu_id' , '=' , 'dosen_dpu.id' )
-> join ( 'users as dosen_dpa' , 'mahasiswas.dosen_dpa_id' , '=' , 'dosen_dpa.id' )
-> get ();
return view ( 'layanan-dpudpa.index' ,[ 'title' => 'Pengajuan DPU/DPA | Admin Dashboard' , 'data' => $data ]);
2024-02-27 22:53:57 +07:00
}
2024-03-07 18:13:09 +07:00
//done
2024-02-27 22:53:57 +07:00
public function tambah (){
2024-03-02 18:06:48 +07:00
$dosen = User :: role ( 'Dosen' ) -> get ();
return view ( 'layanan-dpudpa.tambah' ,[ 'dosen' => $dosen ]);
2024-02-27 22:53:57 +07:00
}
2024-03-07 18:13:09 +07:00
//done
public function terima ( Request $request ){
$id = $request -> id ;
$countcaseid = PengajuanDpuDpa :: where ( 'updated_at' , '<=' , Carbon :: today ()) -> count ();
$caseid = " LS " . date_format ( date_create (), " ymd " ) . $countcaseid + 1 ;
$cekData = PengajuanDpuDpa :: where ( 'caseid' , $caseid ) -> first ();
$data = PengajuanDpuDpa :: where ( 'id' , $id ) -> first ();
//cek apakah ada caseid yang sama sebelum disave
if ( ! is_null ( $cekData )){
$data -> updated_at = Carbon :: now ();
$data -> save ();
return redirect () -> route ( 'layanan-dpudpa.index' ) -> with ( 'error' , 'Gagal simpan Data, Cek kembali Detail Data yang akan diterima' );
}
//save CASEID dan kirim email
$data -> caseid = $caseid ;
$data -> ttd_operator = Carbon :: now ();
if ( $data -> save ()){
$data_job = [
[
'jenis' => 'mahasiswa' ,
'id' => $id ,
],
[
'jenis' => 'dpu' ,
'id' => $id ,
],
[
'jenis' => 'dpa' ,
'id' => $id ,
],
];
foreach ( $data_job as $item ){
dispatch ( new layananPengajuanDpuDpaJob ( $item ));
}
return redirect () -> route ( 'layanan-dpudpa.index' ) -> with ( 'success' , 'Data Berhasil Disimpan, Email Akan Dikirimkan ke Mahasiswa, DPU dan DPA' );
}
}
//done
2024-03-02 18:06:48 +07:00
public function store ( Request $request ){
$request -> validate ([
'nim' => 'required|numeric' ,
'nama' => 'required' ,
'nomor_hp' => 'required|numeric' ,
'email' => 'required|email' ,
'judul_seminar_proposal' => 'required' ,
'bagian' => 'required|numeric' ,
'dosen_dpu' => 'required|numeric' ,
'dosen_dpa' => 'required|numeric' ,
'file_transkrip' => 'required|mimes:pdf|max:4096' ,
],[
'nim.required' => 'NIP Wajib Diisi' ,
'nim.numeric' => 'NIM Wajib Berisi Angka saja' ,
'nomor_hp.numeric' => 'Nomor HP Wajib Menggunakan Angka, Contoh 089xxxxx' ,
'email.email' => 'Format email tidak sesuai, cek lagi email anda, Contoh mahasiswa@mail.com/ mahasiswa@mail.unej.ac.id' ,
'bagian.numeric' => 'Bagian tidak valid, cek kembali Bagian yang dipilih' ,
'dosen_dpu.numeric' => 'Dosen Pembimbing tidak valid, cek kembali Dosen Pembimbing Utama yang dipilih' ,
'dosen_dpa.numeric' => 'Dosen Pembimbing tidak valid, cek kembali Dosen Pembimbing Anggota yang dipilih' ,
'file_transkrip.mimes' => 'Format File Bukan PDF, Cek Ulang file anda' ,
'file_transkrip.max' => 'Ukuran File Anda lebih dari 4Mb, Cek Ulang File anda' ,
]);
2024-03-07 18:13:09 +07:00
//Cek Apakah Data Mahasiswa Tersebut sudah ada, jika ada maka diminta untuk menggunakan fitur cari
$mahasiswas_id = Mahasiswa :: where ( 'nim' , $request -> nim ) -> first ();
if ( ! is_null ( $mahasiswas_id )){
return redirect () -> route ( 'layanan-dpudpa.tambah' ) -> with ( 'error' , 'Data Anda Sudah Ada, Gunakan Fitur Cari' );
}
2024-03-02 18:06:48 +07:00
2024-03-07 18:13:09 +07:00
$data_mhs [ 'nim' ] = $request -> nim ;
$data_mhs [ 'nama' ] = $request -> nama ;
$data_mhs [ 'nomor_hp' ] = $request -> nomor_hp ;
$data_mhs [ 'email' ] = $request -> email ;
$data_mhs [ 'judul_seminar_proposal' ] = $request -> judul_seminar_proposal ;
$data_mhs [ 'bagian' ] = $request -> bagian ;
$data_mhs [ 'dosen_dpu_id' ] = $request -> dosen_dpu ;
$data_mhs [ 'dosen_dpa_id' ] = $request -> dosen_dpa ;
//set default to 0
$data_mhs [ 'dosen_penguji1_id' ] = 1 ;
$data_mhs [ 'dosen_penguji2_id' ] = 1 ;
$data_mhs [ 'judul_skripsi_id' ] = '-' ;
$data_mhs [ 'judul_skripsi_en' ] = '-' ;
$data_mhs [ 'judul_jurnal' ] = '-' ;
$data_mhs [ 'judul_artikel' ] = '-' ;
//set penyimpanan file
2024-03-02 18:06:48 +07:00
$file_transkrip = $request -> file ( 'file_transkrip' );
$file_transkrip_name = 'LS_' . str_replace ( ' ' , '_' , $file_transkrip -> getClientOriginalName ());
$path = $request -> nim . '/' . $file_transkrip_name ;
2024-03-07 18:13:09 +07:00
//jika berhasil save file dan save data mhs maka pengajuan akan diisi
if ( Storage :: disk ( 'public' ) -> put ( $path , file_get_contents ( $file_transkrip )) && Mahasiswa :: create ( $data_mhs )){
$mahasiswas_id = Mahasiswa :: where ( 'nim' , $request -> nim ) -> first ();
$data_dpudpa [ 'mahasiswas_id' ] = $mahasiswas_id -> id ;
$data_dpudpa [ 'bukti_transkrip_nilai' ] = $file_transkrip_name ;
PengajuanDpuDpa :: create ( $data_dpudpa );
return redirect () -> route ( 'layanan-dpudpa.tambah' ) -> with ( 'success' , 'Sukses Tambah Data, Silahkan Menunggu Email Konfirmasi setelah disetujui Oleh Operator' );
}
return redirect () -> route ( 'layanan-dpudpa.tambah' ) -> with ( 'error' , 'Gagal Tambah data, Cek kembali data yang anda masukkan' );
}
2024-03-02 18:06:48 +07:00
2024-03-07 18:13:09 +07:00
//done
public function destroy ( Request $request ){
$id = $request -> id ;
//cari data dan kirim notif sebelum dihapus
$data = PengajuanDpuDpa :: where ( 'pengajuan_dpu_dpas.id' , $id )
-> join ( 'mahasiswas' , 'mahasiswas_id' , '=' , 'mahasiswas.id' )
-> first ();
$data_job = [
'jenis' => 'penolakan' ,
'nama' => $data -> nama ,
'email' => $data -> email ,
'created_at' => $data -> created_at ,
'alasan' => $request -> alasan ,
];
$path = $data -> nim . " / " . $data -> bukti_transkrip_nilai ;
//hapus file yang diupload mahasiswa
if ( Storage :: disk ( 'public' ) -> exists ( $path )){
Storage :: disk ( 'public' ) -> delete ( $path );
//hapus data pengajuan mahasiswa
return redirect () -> route ( 'layanan-dpudpa.index' ) -> with ( 'error' , 'Gagal Hapus Data, File Mahasiswa Yang akan dihapus tidak ditemukan' );
}
$dataDelete = PengajuanDpuDpa :: findOrFail ( $id );
//kirim notifikasi jika data berhasil dihapus
if ( $dataDelete -> delete ()){
dispatch ( new layananPengajuanDpuDpaJob ( $data_job ));
return redirect () -> route ( 'layanan-dpudpa.index' ) -> with ( 'success' , 'Permintaan Sudah Diproses, Email akan segera dikirim ke penerima' );
}
return redirect () -> route ( 'layanan-dpudpa.index' ) -> with ( 'error' , 'Gagal Hapus Data, coba cek data yang akan dihapus lalu coba lagi!' );
}
2024-03-02 18:06:48 +07:00
2024-03-07 18:13:09 +07:00
public function ettd ( $url , $caseid ){
$role_untuk_ettd = [ 'dpu' , 'dpa' , 'kombi' ];
$data = PengajuanDpuDpa :: where ( 'caseid' , '=' , $caseid )
-> select ( 'pengajuan_dpu_dpas.id' ,
'pengajuan_dpu_dpas.caseid' ,
'mahasiswas.nama' ,
'mahasiswas.nim' ,
'mahasiswas.judul_seminar_proposal' ,
'dosen_dpu.nama_gelar as dosen_dpu_nama_gelar' ,
'dosen_dpa.nama_gelar as dosen_dpa_nama_gelar' ,
)
-> join ( 'mahasiswas' , 'pengajuan_dpu_dpas.mahasiswas_id' , '=' , 'mahasiswas.id' )
-> join ( 'users as dosen_dpu' , 'mahasiswas.dosen_dpu_id' , '=' , 'dosen_dpu.id' )
-> join ( 'users as dosen_dpa' , 'mahasiswas.dosen_dpa_id' , '=' , 'dosen_dpa.id' )
-> first ();
if ( in_array ( $url , $role_untuk_ettd ) && ! is_null ( $data )){
//jika URL DPU maka render ini
if ( $url == 'dpu' ){
$jenis = 'Dosen Pembimbing Utama' ;
return view ( 'layanan-dpudpa.ettd' ,[ 'title' => 'INPUT E-Signature' , 'jenis' => $jenis , 'data' => $data ]);
}
//jika URL DPA maka render ini
elseif ( $url == 'dpa' ){
$jenis = 'Dosen Pembimbing Anggota' ;
return view ( 'layanan-dpudpa.ettd' ,[ 'title' => 'INPUT E-Signature' , 'jenis' => $jenis , 'data' => $data ]);
}
//jika URL Kombi maka render ini
elseif ( $url == 'kombi' ){
$jenis = 'Komisi Bimbingan' ;
$kombiRole = Role :: findByName ( 'Ketua Kombi' ) -> users ;
$dataKombi = [
'caseid' => $data -> caseid ,
'nama' => $data -> nama ,
'nim' => $data -> nim ,
'judul_seminar_proposal' => $data -> judul_seminar_proposal ,
'dosen_kombi_nama_gelar' => $kombiRole [ 0 ] -> nama_gelar ,
2024-03-02 18:06:48 +07:00
2024-03-07 18:13:09 +07:00
];
$jenis = 'Komisi Bimbingan' ;
return view ( 'layanan-dpudpa.ettd' ,[ 'title' => 'INPUT E-Signature' , 'jenis' => $jenis , 'data' => $dataKombi ]);
}
}
//jika URL tidak diantara ketika itu maka render ini
return redirect () -> route ( 'laman-awal' ) -> with ([ 'error' => 'Invalid CASEID, Atau CaseID Tidak Ditemukan' ]);
2024-03-02 18:06:48 +07:00
2024-03-07 18:13:09 +07:00
}
public function submitettd ( $url , $caseid , Request $request ){
$role_untuk_ettd = [ 'dpu' , 'dpa' , 'kombi' ];
$data = PengajuanDpuDpa :: where ( 'caseid' , '=' , $caseid ) -> first ();
if ( in_array ( $url , $role_untuk_ettd ) && ! is_null ( $data )){
//jika URL DPU maka render ini
if ( $url == 'dpu' ){
//jika sudah pernah ETTD Akan Dikembalikan Ke laman TTD Dengan error
if ( $data -> ttd_dpu != '-' ){
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'CaseID Ini Sudah Pernah Anda Tandatangani Pada ' . $data -> ttd_dpu ]);
}
//ambil data ETTD sesuai url
$ttd = Mahasiswa :: where ( 'nim' , $request -> nim ) -> join ( 'users as dosen_dpu' , 'mahasiswas.dosen_dpu_id' , '=' , 'dosen_dpu.id' ) -> first ();
//jika Belum Pernah maka TTD akan diproses
if ( $ttd -> ettd == $request -> ettd ){
$data -> ttd_dpu = Carbon :: now ();
$data -> save ();
$this -> cek_dpa_dpu ( $caseid );
return redirect () -> route ( 'laman-awal' ) -> with ([ 'success' => 'Terimakasih Telah Melakukan Tanda Tangan' ]);
}
//jika ETTD Tidak sesuai Akan Dikembalikan Ke laman TTD Dengan error
else {
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'E-TTD Tidak Sesuai, Cek Kembali ETTD Anda' ]);
}
}
//jika URL DPa maka render ini
if ( $url == 'dpa' ){
//jika sudah pernah ETTD Akan Dikembalikan Ke laman TTD Dengan error
if ( $data -> ttd_dpa != '-' ){
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'CaseID Ini Sudah Pernah Anda Tandatangani Pada ' . $data -> ttd_dpa ]);
}
//ambil data ETTD sesuai url
$ttd = Mahasiswa :: where ( 'nim' , $request -> nim ) -> join ( 'users as dosen_dpa' , 'mahasiswas.dosen_dpa_id' , '=' , 'dosen_dpa.id' ) -> first ();
//jika Belum Pernah maka TTD akan diproses
if ( $ttd -> ettd == $request -> ettd ){
$data -> ttd_dpa = Carbon :: now ();
$data -> save ();
$this -> cek_dpa_dpu ( $caseid );
return redirect () -> route ( 'laman-awal' ) -> with ([ 'success' => 'Terimakasih Telah Melakukan Tanda Tangan' ]);
}
//jika ETTD Tidak sesuai Akan Dikembalikan Ke laman TTD Dengan error
else {
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'E-TTD Tidak Sesuai, Cek Kembali ETTD Anda' ]);
}
2024-03-02 18:06:48 +07:00
}
2024-03-07 18:13:09 +07:00
//jika URL Kombi maka render ini
if ( $url == 'kombi' ){
//jika sudah pernah ETTD Akan Dikembalikan Ke laman TTD Dengan error
if ( $data -> ttd_kombi != '-' ){
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'CaseID Ini Sudah Pernah Anda Tandatangani Pada ' . $data -> ttd_kombi ]);
}
//ambil data ETTD sesuai url
$ttd = Role :: findByName ( 'Ketua Kombi' ) -> users ;
//jika Belum Pernah maka TTD akan diproses
if ( $ttd [ 0 ] -> ettd == $request -> ettd ){
$data -> ttd_kombi = Carbon :: now ();
$data -> save ();
$data = [
'jenis' => 'mahasiswa selesai' ,
'id' => $data -> id ,
];
dispatch ( new layananPengajuanDpuDpaJob ( $data ));
return redirect () -> route ( 'laman-awal' ) -> with ([ 'success' => 'Terimakasih Telah Melakukan Tanda Tangan' ]);
}
//jika ETTD Tidak sesuai Akan Dikembalikan Ke laman TTD Dengan error
else {
return redirect () -> route ( 'layanan-dpudpa.ettd' ,[ 'url' => $url , 'caseid' => $caseid ]) -> with ([ 'error' => 'E-TTD Tidak Sesuai, Cek Kembali ETTD Anda' ]);
}
}
}
}
//cek apakah DPU dan DPU sudah Tanda tangan, jika sudah maka akan mengirim notifikasi ke Kombi
private function cek_dpa_dpu ( $caseid ){
$status = PengajuanDpuDpa :: where ( 'caseid' , $caseid )
-> select ( 'id' , 'ttd_dpu' , 'ttd_dpa' )
-> first ();
if ( $status -> ttd_dpu != '-' && $status -> ttd_dpa != '-' ){
$data = [
'jenis' => 'kombi' ,
'id' => $status -> id ,
];
dispatch ( new layananPengajuanDpuDpaJob ( $data ));
2024-03-02 18:06:48 +07:00
}
2024-02-27 22:53:57 +07:00
}
}