Writeoff/Http/Controllers/HapusBukuController.php

459 lines
21 KiB
PHP

<?php
namespace Modules\Writeoff\Http\Controllers;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Modules\Writeoff\DataTables\HapusBukuDataTable;
use Modules\Writeoff\Entities\Approval;
use Modules\Writeoff\Entities\Branch;
use Modules\Writeoff\Entities\Currency;
use Modules\Writeoff\Entities\DetailJaminan;
use Modules\Writeoff\Entities\DetailPembayaran;
use Modules\Writeoff\Entities\DetailPenagihan;
use Modules\Writeoff\Entities\FacilityType;
use Modules\Writeoff\Entities\HapusBuku;
use Modules\Writeoff\Entities\InterestHistory;
use Modules\Writeoff\Entities\LoanType;
use Modules\Writeoff\Entities\Rekening;
use Modules\Writeoff\Http\Requests\HapusBuku\StoreHapusBukuRequest;
use Modules\Writeoff\Http\Requests\HapusBuku\UpdateHapusBukuRequest;
class HapusBukuController extends Controller
{
public $user;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::guard('web')->user();
return $next($request);
});
}
/**
* Display a listing of the SubrogasiJamkrindos.
*
* @param \Modules\Writeoff\DataTables\HapusBukuDataTable $dataTable
*
* @return mixed
*/
public function index(HapusBukuDataTable $dataTable, Request $request)
{
if (is_null($this->user) || !$this->user->can('pencatatan.read')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
$this->hitungBunga();
if ($request->rekening) {
return redirect()->route('pencatatan.hapus_buku.create', ['rekening' => $request->rekening]);
} else {
return $dataTable->render('writeoff::pencatatan.hapus_buku.index', ['add' => false]);
}
}
public function hitungBunga()
{
$hapusbuku = HapusBuku::where('status', 1)->get();
$suku_bunga_extra = 60;
$decimal = 2;
$now = Carbon::today();
$hari_denda = 0;
foreach ($hapusbuku as $key => $value) {
$nomor_pinjaman = $value->nomor_pinjaman;
$tgl_wo = Carbon::parse($value->tanggal_hapus_buku);
$hari_wo = $now->diffInDays($tgl_wo);
$day_wo = $tgl_wo->day;
$tgl = $tgl_wo;
$bunga_ekstra = 0;
$bunga_non_ekstra = 0;
while ($tgl <= $now) {
$awal = $tgl;
$id = $awal->format('Ymd');
$awal_ = $awal->format('Y-m-d');
$hist = InterestHistory::where('nomor_pinjaman', $nomor_pinjaman)
->where('periode_bunga', $id)
->get()
->first();
$cnt = 0;
if ($hist) {
$cnt = 1;
}
$base = $value->baki_debet;
$sk_bng = $value->suku_bunga;
if ($cnt == 1) {
$base = $hist->total_kewajiban;
$sk_bng = $hist->suku_bunga;
}
if (in_array($awal->format('m'), ['01', '03', '05', '07', '08', '10', '12'])) {
$n = 31;
} else if (in_array($awal->format('m'), ['04', '06', '09', '11'])) {
$n = 30;
} else {
$n = 28;
if ($awal->format('Y') % 4 == 0) {
$n = 29;
}
}
if ($day_wo <= 28) {
$tgl = $awal->addDays($n);
} else if ($day_wo == 29) {
$tgl = $awal->addMonths(1);
if ($tgl->format('dmy') == '2802') {
$tgl = $awal->addDays($day_wo);
}
} else if ($day_wo == 30) {
$tgl = $awal->addMonths(1);
if ($tgl->format('dmy') == '2802') {
$tgl = $awal->addDays($day_wo);
} else {
if ($tgl->addDay()->format('d') == '01') {
$tgl = $awal->subDay();
}
}
} else {
if ($awal->format('m') == '01') {
if ($awal->format('y') % 4 === 0) {
$tgl = $awal->addDays($day_wo - 2);
} else {
$tgl = $awal->addDays($day_wo - 3);
}
} else if ($awal->format('m') == '02' && $n == '28') {
$tgl = $awal->addDays($n + 3);
} else if ($awal->format('m') == '02' && $n == '29') {
$tgl = $awal->addDays($n + 2);
} else if (in_array($awal->format('m'), ['03', '05', '08', '10'])) {
$tgl = $awal->addDays($n - 1);
} else if (in_array($awal->format('m'), ['04', '06', '09', '11'])) {
$tgl = $awal->addDays($n + 1);
} else {
$tgl = $awal->addMonths(1);
}
}
$akhir = $tgl->subDay();
$tgl = $akhir;
$hari_b = $akhir->diffInDays($awal_) + 1;
if ($hari_denda == 0) {
$hari_denda = $hari_wo - $hari_b;
} else {
$hari_denda = $hari_denda - $hari_b;
}
$hari_d = $hari_denda;// $now->subDay()->diffInDays($akhir);
if ($akhir->addDay()->format('dmy') == $now->format('dmy')) {
$hari_d = 0;
}
if ($akhir >= $now) {
$hari_d = 0;
$akhir = $now;
$hari_b = $now->diffInDays($awal_);
}
//bunga amount due
//echo $hari_b . 'b ' . $hari_d . 'd ' . $base . 'bs ' . $sk_bng . ' ' . $suku_bunga_extra . '<br>';exit;
$temp_non = ($base * ($sk_bng / 100) * $hari_b) / 360;
$bunga_non_ekstra += $temp_non;
//denda
$temp = ($temp_non * ($suku_bunga_extra / 100) * $hari_d) / 360;
$bunga_ekstra += $temp;
//bunga berjalan
$tagihan_lain = $temp_non;
InterestHistory::updateOrCreate([
'nomor_pinjaman' => $nomor_pinjaman,
'periode_bunga' => $id,
], [
'tanggal_awal' => $awal_,
'tanggal_akhir' => $akhir,
'hari_bunga' => $hari_b,
'nilai_bunga' => round($temp_non, $decimal),
'hari_denda' => $hari_d,
'nilai_denda' => round($temp, $decimal),
'total_kewajiban' => $value->baki_debet,
'suku_bunga' => $value->suku_bunga,
'suku_bunga_denda' => $suku_bunga_extra
]);
}
$bunga_intra = ($value->baki_debet * ($value->suku_bunga / 100) * $hari_wo) / 360;
$bunga_non_ekstra = $bunga_non_ekstra - $tagihan_lain;
$bunga_intra = round($bunga_intra, $decimal);
$bunga_ekstra = round($bunga_ekstra, $decimal);
$bunga_non_ekstra = round($bunga_non_ekstra, $decimal);
$tagihan_lain = round($tagihan_lain, $decimal);
$total_all = $value->total_kewajiban + $bunga_intra + $bunga_ekstra + $value->denda + $value->biaya_lain;
HapusBuku::where('nomor_pinjaman', $nomor_pinjaman)->update([
'lama_hari' => $hari_wo,
'bunga_intra' => $bunga_intra,
'bunga_ekstra' => $bunga_ekstra,
'bunga_non_ekstra' => $bunga_non_ekstra,
'tagihan_lain' => $tagihan_lain,
'total_all_kewajiban' => $total_all
]);
}
}
public function update(UpdateHapusBukuRequest $request, $id)
{
$validated = $request->validated();
if ($validated) {
try {
DB::transaction(function () use ($validated, $id) {
// Prepare the data for creating a new user
$data = [
'nomor_pinjaman' => $validated['nomor_pinjaman'],
'kode_jenis_pinjaman' => $validated['kode_jenis_pinjaman'],
'kode_debitur' => $validated['kode_debitur'],
'nama_debitur' => $validated['nama_debitur'],
'alamat_debitur' => $validated['alamat_debitur'],
'npwp_debitur' => $validated['npwp_debitur'],
'kode_cabang' => $validated['kode_cabang'],
'kode_mata_uang' => $validated['kode_mata_uang'],
'tanggal_hapus_buku' => $validated['tanggal_hapus_buku'],
'nomor_fasilitas' => $validated['nomor_fasilitas'],
'kode_jenis_fasilitas' => $validated['kode_jenis_fasilitas'],
'nilai_plafond_awal' => $validated['nilai_plafond_awal'],
'suku_bunga' => $validated['suku_bunga'],
'baki_debet' => $validated['baki_debet'],
'jumlah_bunga' => $validated['jumlah_bunga'],
'jumlah_kewajiban_lain' => $validated['jumlah_kewajiban_lain'],
'total_kewajiban' => $validated['total_kewajiban'],
'bunga_intra' => $validated['bunga_intra'],
'bunga_ekstra' => $validated['bunga_ekstra'],
'bunga_non_ekstra' => $validated['bunga_non_ekstra'],
'denda' => $validated['denda'],
'tagihan_lain' => $validated['tagihan_lain'],
'biaya_lain' => $validated['biaya_lain'],
'total_all_kewajiban' => $validated['total_all_kewajiban'],
'memo_persetujuan' => $validated['memo_persetujuan'],
'lama_hari' => $validated['lama_hari'],
'proses_hukum' => $validated['proses_hukum'],
'komitmen_debitur' => $validated['komitmen_debitur'],
'keterangan' => $validated['keterangan'],
'status' => $validated['status']
];
// Emit a success event with a message
$hapus_buku = HapusBuku::find($id);
$data['updated_by'] = auth()->user()->id;
$data['updated_at'] = now();
$approval = [
'method' => 'update',
'menu' => 'Hapus Buku',
'old_request' => json_encode($hapus_buku),
'new_request' => json_encode($data),
'description' => 'Update Hapus Buku',
'status' => '0',
'ref' => $validated['nomor_pinjaman']
];
$is_approval = Approval::where('menu', 'Hapus Buku')
->where('ref', $validated['nomor_pinjaman'])
->where('status', '0')
->where('method', 'update')
->get()
->first();
if ($is_approval) {
echo json_encode(['status' => 'error', 'message' => 'Data Sedang Menunggu Approval']);
} else {
Approval::create($approval);
echo json_encode([
'status' => 'success',
'message' => 'Data Berhasil Di Update, Menunggu Approval'
]);
}
});
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
}
}
/**
* Display a listing of the SubrogasiJamkrindos.
*
* @param \Modules\Writeoff\DataTables\HapusBukuDataTable $dataTable
*
* @return mixed
*/
public function create(HapusBukuDataTable $dataTable, Request $request)
{
if (is_null($this->user) || !$this->user->can('pencatatan.read')) {
abort(403, 'Sorry !! You are Unauthorized to view any master data !');
}
$branch = Branch::all();
$loan_type = LoanType::all();
$facility_type = FacilityType::all();
$currency = Currency::all();
$totalbayar = 0;
if ($request->id) {
$hapusbuku = HapusBuku::find($request->id);
$totalbayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)
->where('status', 1)
->sum('nominal');
$rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency')
->where('nomor_rekening', $hapusbuku->nomor_pinjaman)
->whereHas('loan_type', function ($query) {
$query->whereBetween('kode', [3000, 3999]);
})
->get()
->first();
$jaminan = DetailJaminan::with('guaranteeType')
->where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)
->get();
$bayar = DetailPembayaran::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get();
$penagihan = DetailPenagihan::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get();
$history = InterestHistory::where('nomor_pinjaman', $hapusbuku->nomor_pinjaman)->get();
return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar', 'hapusbuku', 'jaminan', 'bayar', 'penagihan', 'history'));
} else {
$rekening = Rekening::with('loan_type', 'debitur', 'branch', 'currency')
->where('nomor_rekening', $request->rekening)
->whereDoesntHave('hapusBuku')
->whereHas('loan_type', function ($query) {
$query->whereBetween('kode', [3000, 3999]);
})
->get()
->first();
return view('writeoff::pencatatan.hapus_buku.add', compact('branch', 'loan_type', 'facility_type', 'currency', 'rekening', 'totalbayar'));
}
}
public function edit($id)
{
return redirect()->route('pencatatan.hapus_buku.create', ['id' => $id]);
}
/*
*
*
*
* */
public function store(StoreHapusBukuRequest $request)
{
$validated = $request->validated();
if ($validated) {
try {
DB::transaction(function () use ($validated) {
// Prepare the data for creating a new user
$data = [
'nomor_pinjaman' => $validated['nomor_pinjaman'],
'kode_jenis_pinjaman' => $validated['kode_jenis_pinjaman'],
'kode_debitur' => $validated['kode_debitur'],
'nama_debitur' => $validated['nama_debitur'],
'alamat_debitur' => $validated['alamat_debitur'],
'npwp_debitur' => $validated['npwp_debitur'],
'kode_cabang' => $validated['kode_cabang'],
'kode_mata_uang' => $validated['kode_mata_uang'],
'tanggal_hapus_buku' => $validated['tanggal_hapus_buku'],
'nomor_fasilitas' => $validated['nomor_fasilitas'],
'kode_jenis_fasilitas' => $validated['kode_jenis_fasilitas'],
'nilai_plafond_awal' => $validated['nilai_plafond_awal'],
'suku_bunga' => $validated['suku_bunga'],
'baki_debet' => $validated['baki_debet'],
'jumlah_bunga' => $validated['jumlah_bunga'],
'jumlah_kewajiban_lain' => $validated['jumlah_kewajiban_lain'],
'total_kewajiban' => $validated['total_kewajiban'],
'bunga_intra' => $validated['bunga_intra'],
'bunga_ekstra' => $validated['bunga_ekstra'],
'bunga_non_ekstra' => $validated['bunga_non_ekstra'],
'denda' => $validated['denda'],
'tagihan_lain' => $validated['tagihan_lain'],
'biaya_lain' => $validated['biaya_lain'],
'total_all_kewajiban' => $validated['total_all_kewajiban'],
'memo_persetujuan' => $validated['memo_persetujuan'],
'lama_hari' => $validated['lama_hari'],
'proses_hukum' => $validated['proses_hukum'],
'komitmen_debitur' => $validated['komitmen_debitur'],
'keterangan' => $validated['keterangan'],
'status' => $validated['status']
];
$data['created_by'] = auth()->user()->id;
$data['created_at'] = now();
// Emit a success event with a message
$approval = [
'method' => 'create',
'menu' => 'Hapus Buku',
'new_request' => json_encode($data),
'description' => 'Create Hapus Buku',
'status' => '0',
'ref' => $validated['nomor_pinjaman']
];
$is_approval = Approval::where('menu', 'Hapus Buku')
->where('ref', $validated['nomor_pinjaman'])
->where('status', '0')
->where('method', 'create')
->get()
->first();
if ($is_approval) {
echo json_encode(['status' => 'error', 'message' => 'Data Sedang Menunggu Approval']);
} else {
Approval::create($approval);
echo json_encode([
'status' => 'success',
'message' => 'Data Berhasil Di Input, Menunggu Approval'
]);
}
});
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
}
}
}