Files
konfirmasibank/Http/Controllers/KonfirmasiBankController.php
2024-04-04 10:00:06 +07:00

698 lines
28 KiB
PHP

<?php
namespace Modules\Konfirmasibank\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Modules\Konfirmasibank\DataTables\ViewAccountDataTable;
use Modules\Konfirmasibank\Entities\ViewAccount;
use Modules\Konfirmasibank\Entities\LimitReference;
use Modules\Konfirmasibank\Entities\Fasilitas;
use Modules\Konfirmasibank\Entities\Signer;
use Modules\Konfirmasibank\Entities\Letters;
use Modules\Konfirmasibank\Entities\Category;
use Modules\Konfirmasibank\Entities\Company;
use Modules\Konfirmasibank\Entities\Account;
use Modules\Konfirmasibank\Entities\Arrangement;
use Modules\Konfirmasibank\Entities\TermAmount;
//use Dompdf\Dompdf;
use PDF;
//use Dompdf\Options;
use Carbon\Carbon;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\Element\Table;
use PhpOffice\PhpWord\SimpleType\TblWidth;
use PhpOffice\PhpWord\Element\Section;
use Response;
use Exception;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Modules\Konfirmasibank\Http\Requests\Fasilitas\StoreFasilitasRequest;
use Akaunting\Money\Currency;
use Akaunting\Money\Money;
class KonfirmasiBankController extends Controller
{
public $user;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::guard('web')->user();
return $next($request);
});
addVendor('chained-select');
}
public function index(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.create')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
// dd($request);
$data = [];
$no_req_surat = '';
// Contoh tanggal saat ini
$today = Carbon::now();
// Menambahkan 1 tahun ke tanggal saat ini
$currentYear = $today->format("d-m-Y");
//get month in roman
// Menambahkan 5 tahun ke tanggal saat ini
$pastYear = $today->subYear(3)->format('d-m-Y');
$dateRoman = $this->numberToRoman($today->format('n'));
$signer = Signer::where('status',1)->get();
$company = Company::all();
$infoSurat = Letters::orderBy('created_at','desc')->first();
if($infoSurat){
$no_req_surat = $infoSurat['no_req_surat'];
}else{
$no_req_surat = '001/SUBDIT.OPS/'. $dateRoman.'/'.$currentYear;
}
$data['currentYear'] = $currentYear;
$data['pastYear'] = $pastYear;
$data['signer'] = $signer;
$data['company'] = $company;
$data['no_req_surat'] = $no_req_surat;
return view('konfirmasibank::pages.index',compact('data','request'));
}
public function create(){
return view('konfirmasibank::pages.index',compact('data'));
}
public function getData(Request $request)
{
$data = [];
$Account = new Account;
$arrAccount = [];
$startDate = Carbon::parse($request->startDate);
$dateCore = $startDate->subDays(2)->format('m/d/Y');
$Accounts = $Account->getSearchAccount($request->cif,$arrAccount,$request->kodecabang, $dateCore)->get();
foreach ($Accounts as $key => $value) {
$data[$key]['ACCOUNT_NUMBER'] = $value->ACCOUNT_NUMBER;
$data[$key]['COMPANY_NAME'] = $value->COMPANY_NAME;
$data[$key]['SHORT_NAME'] = $value->SHORT_NAME;
$data[$key]['CURRENCY'] = $value->CURRENCY;
$data[$key]['WORKING_BALANCE'] = number_format($value->WORKING_BALANCE, 2, ',', '.') ;
}
return json_encode($data );
}
public function postInfoSurat(Request $request){
// $noSurat = $this->generateNomorSurat();
// $request->validate([
// 'signer' => ['required'],
// 'no_req_surat' => ['required', 'max:100'],
// 'tgl_req_surat' => ['required'],
// 'email' => ['email'],
// 'tlp' => ['numeric', 'max:10'],
// 'nama_tujuan' => ['required'],
// 'alamat' => ['required']
// ]);
//Validate the request
//Validate the request
$currentDate = Carbon::now();
$tglSurat = $currentDate->format('Y-m-d');
$letter = new Letters();
$letter->no_cif = $request->cus_no;
$letter->no_surat = $request->no_surat;
$letter->tgl_surat = $tglSurat;
$letter->no_req_surat = $request->no_req_surat;
$letter->tgl_req_surat = $request->tgl_req_surat;
$letter->email = $request->email ;
$letter->tlp = $request->tlp ;
$letter->nama_tujuan = $request->nama_tujuan ;
$letter->alamat = $request->alamat ;
$letter->created_at = $currentDate;
$letter->status = 1;
$letter->save();
echo json_encode(['status' => 'success', 'message' => ' Info Surat created successfully.']);
}
// private function generateNomorSurat(){
// $latesNoSurat = '';
// $latestRecord = letters::latest('no_surat')->select('no_surat')->first();
// $tanggal = now();
// $tahun = $tanggal->format('Y');
// // Fungsi untuk mengonversi angka bulan menjadi romawi
// $bulanRomawi = $this->numberToRoman($tanggal->format('n'));
// if($latestRecord){
// $squence = substr($latestRecord['no_surat'], 0, 3);
// $latesNoSurat = str_pad(intval($squence), 3, '0', STR_PAD_LEFT);
// $NoUrut = str_pad(intval($latesNoSurat + 1), 3, '0', STR_PAD_LEFT);
// $noSurat = " $NoUrut/SUBDIT.OPS/$bulanRomawi/$tahun";
// return $noSurat;
// }else {
// $noSurat = "001/SUBDIT.OPS/$bulanRomawi/$tahun";
// return $noSurat;
// }
// }
function numberToRoman($num)
{
// Be sure to convert the given parameter into an integer
$n = intval($num);
$result = '';
// Declare a lookup array that we will use to traverse the number:
$lookup = array(
'M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400,
'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40,
'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1
);
foreach ($lookup as $roman => $value)
{
// Look for number of matches
$matches = intval($n / $value);
// Concatenate characters
$result .= str_repeat($roman, $matches);
// Substract that from the number
$n = $n % $value;
}
return $result;
}
public function signer(Request $request){
if (is_null($this->user) || !$this->user->can('konfirmasibank.create')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
$data = [];
// $signer = Signer::paginate(10);
$signer = Signer::where('status',1)->paginate(10);
$data['signer'] = $signer;
// dd( $data['signer']);
return view('konfirmasibank::pages.index_signer',compact('data'));
}
public function convertToRupiah($amount)
{
$formattedAmount = number_format($amount, 0, ',', '.');
return $formattedAmount;
}
public function postSigner(Request $request){
if (is_null($this->user) || !$this->user->can('konfirmasibank.create')) {
abort(403, 'Sorry !! You are Unauthorized to create any konfirmasibank.create !');
}
$currentDate = Carbon::now();
$validated = $request->validate([
'deputy_director' => 'required|string',
'executive_officer' => 'required|string',
'signer_type' => 'required|string'
]);
if ($validated) {
try {
// Create New User
$signer = new Signer();
$signer->deputy_director_name = $request->deputy_director;
$signer->executive_officer_name = $request->executive_officer;
$signer->signer_type = $request->signer_type;
$signer->created_at = $currentDate;
$signer->status = 1;
$signer->save();
// return redirect()->route('konfirmasibank.addFasilitas')->with('success', 'Data berhasil ditambahkan');
echo json_encode(['status' => 'success', 'message' => ' Add signer successfully .']);
} catch (Exception $e) {
return json_encode([
'status' => 'error',
'message' => $e->getMessage()
]);
}
}
return false;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
*
* @return Response
*/
public function editSigner(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.update')) {
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
}
$signer = Signer::find($request->id);
return json_encode( $signer);
}
public function updateSigner(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.update')) {
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
}
$today = Carbon::now();
$validator = Validator::make($request->all(), [
'deputy_director' => 'required|string',
'executive_officer' => 'required|string',
'signer_type' => 'required|string'
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422); // Return validation errors as JSON
}
if ($validator) {
try {
$signer = Signer::findOrFail($request->id);
$signer->deputy_director_name = $request->deputy_director;
$signer->executive_officer_name = $request->executive_officer;
$signer->signer_type = $request->signer_type;
$signer->updated_at = $today;
$signer->save();
echo json_encode(['status' => 'success', 'message' => ' signer updated successfully.']);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => ' signer updated failed.']);
}
return;
}
echo json_encode(['status' => 'error', 'message' => ' signer updated failed.']);
}
public function export(Request $request){
$arrAccount = explode("," , $request['accNo']);
$startDate = Carbon::parse($request['startDate2']);
$dateCore = $startDate->subDays(2);
$Account = new Account;
$data = [];
$DataAccounts = [];
$DataPinjaman = [];
$DataFasilitas = [];
// dd($listAccount);
$GetCustomer = $Account->getCustomer($request['cusNo'])->first();
$listAccount = $Account->getAccount($request['cusNo'], $arrAccount, $dateCore )->get();
$dataAADepo = $Account->getAA($request['cusNo'],$arrAccount, $dateCore)->get();
foreach ($listAccount as $key1 => $account) {
$dataAADepo = $Account->getAA($request['cusNo'],$account->ACCOUNT_NUMBER, $dateCore)->first();
if ($account->CATEGORY == '6603') {
if ($dataAADepo) {
$tenor = '';
$tanggal_1 = date_create($dataAADepo->RENEWAL_DATE);
$tanggal_2 = date_create($dataAADepo->START_DATE);
$tenor = date_diff( $tanggal_1, $tanggal_2 );
$DataAccounts[$key1]['ACCOUNT_NUMBER'] = $account->ACCOUNT_NUMBER;
$DataAccounts[$key1]['OPENING_DATE'] = $account->OPENING_DATE;
$DataAccounts[$key1]['BATCH_DATE'] = $account->BATCH_DATE;
$DataAccounts[$key1]['CUSTOMER_NO'] = $account->CUSTOMER_NO;
$DataAccounts[$key1]['SHORT_NAME'] = $account->SHORT_NAME;
$DataAccounts[$key1]['CURRENCY'] = $account->CURRENCY;
$DataAccounts[$key1]['PRODUCT'] = $account->SHORT_TITLE;
$DataAccounts[$key1]['COMPANY_NAME'] = $account->COMPANY_NAME;
$DataAccounts[$key1]['WORKING_BALANCE'] = $account->WORKING_BALANCE != null ? number_format($account->WORKING_BALANCE, 2, ',', '.') : 'NIHIL';
$DataAccounts[$key1]['MATURITY_DATE'] = date('d-m-Y', strtotime($dataAADepo->RENEWAL_DATE)) ;
$DataAccounts[$key1]['ARRANGEMENT_ID'] = '';
$DataAccounts[$key1]['FIXED_RATE'] = $dataAADepo->FIXED_RATE . ' %';
$DataAccounts[$key1]['TERM'] = intval($tenor->days/30) . ' BLN';
}
}else{
$DataAccounts[$key1]['ACCOUNT_NUMBER'] = $account->ACCOUNT_NUMBER;
$DataAccounts[$key1]['OPENING_DATE'] = $account->OPENING_DATE;
$DataAccounts[$key1]['BATCH_DATE'] = $account->BATCH_DATE;
$DataAccounts[$key1]['CUSTOMER_NO'] = $account->CUSTOMER_NO;
$DataAccounts[$key1]['SHORT_NAME'] = $account->SHORT_NAME;
$DataAccounts[$key1]['CURRENCY'] = $account->CURRENCY;
$DataAccounts[$key1]['PRODUCT'] = $account->SHORT_TITLE;
$DataAccounts[$key1]['COMPANY_NAME'] = $account->COMPANY_NAME;
$DataAccounts[$key1]['WORKING_BALANCE'] = $account->WORKING_BALANCE != null ? number_format($account->WORKING_BALANCE, 2, ',', '.') : 'NIHIL';
$DataAccounts[$key1]['MATURITY_DATE'] = '' ;
$DataAccounts[$key1]['ARRANGEMENT_ID'] = '';
$DataAccounts[$key1]['FIXED_RATE'] = '';
$DataAccounts[$key1]['TERM'] = '';
}
}
$Arrangement = $Account->getPinjaman($request['cusNo'], $dateCore)->get();
foreach ($Arrangement as $key2 => $pinjaman) {
$balance = $Account->getSingleAccount($pinjaman->LINKED_APPL_ID,$startDate)->first();
// dd($balance);
$DataPinjaman[$key2]['ARRANGEMENT_ID'] = $pinjaman->ARRANGEMENT_ID;
$DataPinjaman[$key2]['START_DATE'] = $pinjaman->START_DATE;
$DataPinjaman[$key2]['CURRENCY'] = $pinjaman->CURRENCY;
$DataPinjaman[$key2]['PRODUCT'] = $pinjaman->PRODUCT;
$DataPinjaman[$key2]['WORKING_BALANCE'] = number_format($balance->WORKING_BALANCE, 2, ',', '.') ?? '';
$DataPinjaman[$key2]['TERM'] = $this->convertDateToMonth($pinjaman->TERM) ?? '';
$DataPinjaman[$key2]['FIXED_RATE'] = $pinjaman->FIXED_RATE ?? '';
$DataPinjaman[$key2]['MATURITY_DATE'] = date('d-m-Y', strtotime($pinjaman->MATURITY_DATE)) ?? '';
$DataPinjaman[$key2]['ACCOUNT_NUMBER'] = $pinjaman->LINKED_APPL_ID;
}
$fasilitas = Fasilitas::where('nomor_cif',$request['cusNo'] )->where('status',1)->get();
foreach ($fasilitas as $key3 => $val3) {
$DataFasilitas[$key3]['jenis_fasilitas'] = $val3->jenis_fasilitas;
$DataFasilitas[$key3]['start_date'] = $val3->start_date;
$DataFasilitas[$key3]['mata_uang'] = $val3->mata_uang;
$DataFasilitas[$key3]['saldo'] = number_format(floatval($val3->saldo), 2, ',', '.');
$DataFasilitas[$key3]['jangka_waktu'] = $this->convertDateToMonth( $val3->jangka_waktu) . ' BLN' ?? '';
$DataFasilitas[$key3]['fixed_rate'] = $val3->fixed_rate ?? '';
$DataFasilitas[$key3]['due_date'] = $val3->due_date ?? '';
$DataFasilitas[$key3]['nomor_rekening'] = $val3->nomor_rekening;
}
$ListLimits = $Account->getLimit($request['cusNo'],$request['startDate2'])->get();
// dd($fasilitas);
$signer = Signer::where('id', $request['signerId'])->where('status',1)->get();
$currentDate = Carbon::now();
$tanggalIndonesia = $currentDate->locale('id')->isoFormat('D MMMM YYYY');
$today = $currentDate->format("d-m-Y");
$letter = new Letters;
$infoSuratNew = $letter->where('no_cif',$request['cusNo'])->orderBy('id','DESC')->first();
$infoSuratOld = $letter->where('no_cif',$request['cusNo'])->orderBy('id','ASC')->first();
$data['DataAccounts'] = $DataAccounts;
$data['DataPinjaman'] = $DataPinjaman;
$data['DataLimit'] = $ListLimits;
$data['DataFasilitas']= $DataFasilitas;
$data['DataSigner'] = $signer;
$data['DataCustomer'] = $GetCustomer ?? '';
$data['localDate'] = $tanggalIndonesia;
$data['today'] = $today;
$data['batchDate'] = $request['startDate2'];
$data['infoSuratOld'] = $infoSuratOld;
$data['infoSuratNew'] = $infoSuratNew;
// dd($data);
$pdf = PDF::loadview('konfirmasibank::exportPdf',['data'=>$data]);
// $canvas = $domPdf->get_canvas();
// $canvas->page_text(10, 10, "Page {PAGE_NUM} of {PAGE_COUNT}", null, 10, [0, 0, 0]);
// $font = Font_Metrics::get_font("helvetica", "bold");
//$domPdf->get_canvas()->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}", null, 6, array(0,0,0));
$exportTime = Carbon::now();
$filename = "Kobank_" . $request['cusNo'] .'_'.$exportTime->format('YmdHis'). '.PDF';
return $pdf->stream($filename);
// return $pdf->stream();
}
public function convertDateToMonth($termVal){
$months = '';
$getPeriode = substr($termVal, -1); // Mengambil satu karakter dari kanan
$trimmedStr = substr($termVal, 0, -1 * 1);
if ($getPeriode == 'Y') {
$months = intval($trimmedStr) * 12;
} else if ($getPeriode == 'D') {
$days = $trimmedStr; // Number of days to convert
$months = intval($trimmedStr / 30) ; // Get the whole number of months (assuming 30 days per month)
} else {
$months = $trimmedStr;
}
return $months;
}
public function fasilitas(Request $request){
if (is_null($this->user) || !$this->user->can('konfirmasibank.create')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
$data = [];
$DataFasilitas = [];
$fasilitas = Fasilitas::where('status',1)->where('nomor_cif',$request->query()['cus_no_fasilitas'])->paginate(10)->appends($request->query()['cus_no_fasilitas'],$request->query()['company_name'],$request->query()['startDateFasilitas'],$request->query()['endDateFasilitas']);
$Category = Category::all();
$Company = Company::all();
// dd($fasilitas);
$limitReference = LimitReference::all();
$data['queryParam'] = $request->query();
$data['fasilitas'] = $fasilitas;
$data['limitReference'] = $limitReference;
$data['Category'] = $Category;
$data['Company'] = $Company;
return view('konfirmasibank::pages.index_fasilitas',compact('data'));
}
public function postFasilitas(Request $request){
if (is_null($this->user) || !$this->user->can('konfirmasibank.create')) {
abort(403, 'Sorry !! You are Unauthorized to create any konfirmasibank.create !');
}
$validated = $request->validate([
'nomor_rekening' => 'required|string|max:10|unique:fasilitas,nomor_rekening',
'jenis_fasilitas' => 'required|string',
'cabang' => 'required|string',
'mata_uang' => 'required|string',
'jenis_rekening' => 'required|string',
'saldo' => 'required|string',
'start_date' => 'required|string',
'due_date' => 'required|string',
'fixed_rate' => 'required|string'
]);
$startDate = Carbon::parse($request->start_date);
$endDate = Carbon::parse($request->due_date);
$jangkaWaktu = $endDate->diffInDays($startDate);
if ($validated) {
try {
// Create New User
$fasilitas = new Fasilitas();
$fasilitas->nomor_cif = $request->nomor_cif;
$fasilitas->nomor_rekening = $request->nomor_rekening;
$fasilitas->cabang = $request->cabang;
$fasilitas->jenis_fasilitas = $request->jenis_fasilitas;
$fasilitas->jenis_rekening = $request->jenis_rekening;
$fasilitas->mata_uang = $request->mata_uang;
$fasilitas->saldo = $request->saldo;
$fasilitas->start_date = $request->start_date;
$fasilitas->due_date = $request->due_date;
$fasilitas->jangka_waktu = $jangkaWaktu;
$fasilitas->fixed_rate = $request->fixed_rate;
$fasilitas->keterangan = $request->keterangan;
$fasilitas->save();
echo json_encode(['status' => 'success', 'message' => 'Add fasilitas successfully.']);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
// return json_encode([
// 'status' => 'error',
// 'message' => $e->getMessage()
// ]);
}
}
return false;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
*
* @return Response
*/
public function editFasilitas(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.update')) {
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
}
$fasilitas = Fasilitas::find($request->id);
return json_encode( $fasilitas);
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
*
* @return Response
*/
public function updateFasilitas(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.update')) {
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
}
$today = Carbon::now();
// Menambahkan 1 tahun ke tanggal saat ini
// $currentYear = $today->format("YYYY-MM-DD");
// Validation Data\
$validator = Validator::make($request->all(), [
'nomor_rekening_edit' => 'required|string',
'cabang_edit' => 'required|string',
'jenis_fasilitas_edit' => 'required|string',
'jenis_rekening_edit' => 'required|string',
'mata_uang_edit' => 'required|string',
'saldo_edit' => 'required|string',
'start_date_edit' => 'required|string',
'due_date_edit' => 'required|string',
'fixed_rate_edit' => 'required|string'
// Other validation rules
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422); // Return validation errors as JSON
}
$startDate = Carbon::parse($request->start_date_edit);
$endDate = Carbon::parse($request->due_date_edit);
$jangkaWaktu = $endDate->diffInDays($startDate);
if ($validator) {
try {
$fasilitas = Fasilitas::findOrFail($request->id);
$fasilitas->nomor_rekening = $request->nomor_rekening_edit;
$fasilitas->cabang = $request->cabang_edit;
$fasilitas->jenis_fasilitas = $request->jenis_fasilitas_edit;
$fasilitas->jenis_rekening = $request->jenis_rekening_edit;
$fasilitas->mata_uang = $request->mata_uang_edit;
$fasilitas->saldo = $request->saldo_edit;
$fasilitas->start_date = $request->start_date_edit;
$fasilitas->due_date = $request->due_date_edit;
$fasilitas->jangka_waktu = $jangkaWaktu;
$fasilitas->fixed_rate = $request->fixed_rate_edit;
$fasilitas->keterangan = $request->keterangan_edit;
$fasilitas->updated_at = $today;
$fasilitas->save();
echo json_encode(['status' => 'success', 'message' => ' fasilitas updated successfully.']);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => ' fasilitas updated failed.']);
}
return;
}
echo json_encode(['status' => 'error', 'message' => ' fasilitas updated failed.']);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return Renderable
*/
public function destroyFasilitas(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.delete')) {
abort(403, 'Sorry !! You are Unauthorized to delete any konfirmasibank module !');
}
$fasilitas = Fasilitas::findOrFail($request->id);
try {
$fasilitas->status = 0;
$fasilitas->save();
echo json_encode(['status' => 'success', 'message' => ' fasilitas deleted successfully.']);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => ' fasilitas deleted failed.']);
}
}
public function destroySigner(Request $request)
{
if (is_null($this->user) || !$this->user->can('konfirmasibank.delete')) {
abort(403, 'Sorry !! You are Unauthorized to delete any konfirmasibank module !');
}
$signer = Signer::findOrFail($request->id);
try {
$signer->status = 0;
$signer->save();
echo json_encode(['status' => 'success', 'message' => ' Signer deleted successfully.']);
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => ' Signer deleted failed.']);
}
}
}