Files
api_arrahn/app/Http/Controllers/AutoSerahanController.php
T
2025-04-07 15:05:43 +08:00

307 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\ApprovalWithdrawal;
use App\Bank;
use App\Cawangan;
use App\Denominasi;
use App\DenoPendSer;
use App\GlDetail;
use App\Vault;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class AutoSerahanController extends Controller
{
public function getAutoSerahan(Request $request){
$query = ApprovalWithdrawal::on('mysql7')->where('approval_status', 'PENDING');
if (isset($request->kodcaw)) $query->where('kodcaw', '=', $request->kodcaw);
$listapproval = $query->paginate(5);
return response()->json($listapproval,200);
}
public function createAutoSerahan(Request $request)
{
$current = Carbon::now();
DB::connection('mysql7')->beginTransaction();
try{
$deno_pendser = DenoPendSer::on('mysql7')->create([
'tarikh' => $current->toDateString(),
'masa' => $current->toTimeString(),
'kodcaw' => $request->kodcaw,
'kodlaluan' => $request->teller,
'amaun' => $request->amaun,
'bd1' => 0,
'bd5' => 0,
'bd10' => 0,
'bd20' => 0,
'bd50' => 0,
'bd100' => 0,
'txtring1' => isset($request->txtring1) ? $request->txtring1 : 0,
'txtring5' => isset($request->txtring5) ? $request->txtring5 : 0,
'txtring10' => isset($request->txtring10) ? $request->txtring10 : 0,
'txtring20' => isset($request->txtring20) ? $request->txtring20 : 0,
'txtring50' => isset($request->txtring50) ? $request->txtring50 : 0,
'txtring100' => isset($request->txtring100) ? $request->txtring100 : 0,
'txtring1000' => isset($request->txtring1000) ? $request->txtring1000 : 0,
'txtsen1' => isset($request->txtsen1) ? $request->txtsen1 : 0,
'txtsen5' => isset($request->txtsen5) ? $request->txtsen5 : 0,
'txtsen10' => isset($request->txtsen10) ? $request->txtsen10 : 0,
'txtsen20' => isset($request->txtsen20) ? $request->txtsen20 : 0,
'txtsen50' => isset($request->txtsen50) ? $request->txtsen50 : 0,
'jenis' =>$request->jenis,
'recno' => 0,
'update' => 0
]);
if($request->version == 'v3'){
$approval = ApprovalWithdrawal::on('mysql7')->create([
'kodcaw' => $request->kodcaw,
'pc_name' => $request->teller,
'operasi_name' => null,
'amount' => $request->amaun,
'approval_status' => 'PENDING',
'approval_timestamp' => null,
'gldetail_id_v3' => 0,
'gldetail_id_v2' => 0,
'denopendser_id_v3' => $deno_pendser->id,
'denopendser_id_v2' => 0,
'updated_serahan_v2' => 0,
'updated_pendahuluan_v3' => 0,
'created_at' => $current,
'updated_at' => $current,
]);
DB::connection('mysql7')->commit();
return response()->json(['status' => 'success','id' => $approval->id]);
}else{
ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([
'denopendser_id_v2' => $deno_pendser->id,
]);
DB::connection('mysql7')->commit();
return response()->json(['status' => 'success']);
}
}catch(\Exception $e){
DB::connection('mysql7')->rollBack();
return response()->json(['status' => 'failed','message' => $e->getMessage()]);
}
}
private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id){
$current = Carbon::now();
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first();
$bakiawal = $vault['bakiawal'];
$keluar = $vault['keluar'];
$masuk = $vault['masuk'];
$bakiakhir = $vault['bakiakhir'];
$pendahuluan = $vault['pendahuluan'];
$serahan = $vault['serahan'];
$totpanjaran = $vault['totpanjar'];
DB::connection($cawangan['mysql'])->beginTransaction();
DB::connection('mysql7')->beginTransaction();
try{
$approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first();
if($jenis == 'pendahuluan'){
$totalpendahuluan = $amaun + $pendahuluan;
$bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran;
$denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->first();
$this->updateDenominasi($kodcaw,$denopendser);
$gldetail = GlDetail::on($cawangan['mysql'])->create([
'kodcaw' => $kodcaw,
'tarikh' => $current->toDateString(),
'dtacct' => '1000/010',
'ktacct' => '7000/102',
'descpt' => 'Auto Pendahuluan Daripada V2',
'pendahuluan' => $amaun,
'teller' => $teller . ' (AUTO V2)',
'date_created' => $current
]);
DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->update(array(
'recno' => $gldetail->id,
'update' => 1
));
Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array(
'pendahuluan' => $totalpendahuluan,
'bakiakhir' => $bakiakhir,
'bakieod' => $bakiakhir
));
ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array(
'updated_pendahuluan_v3' => 1,
'gldetail_id_v3' => $gldetail->id
));
}else if($jenis == 'serahan'){
$totalserahan = $amaun + $serahan;
$bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran;
$denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->first();
$this->updateDenominasi($kodcaw,$denopendser);
$gldetail = GlDetail::on($cawangan['mysql'])->create([
'kodcaw' => $kodcaw,
'tarikh' => $current->toDateString(),
'dtacct' => '1000/010',
'ktacct' => '1000/020',
'descpt' => 'Auto Serahan Kepada V3',
'serahan' => $amaun,
'teller' => $teller . ' (AUTO V3)',
'date_created' => $current
]);
DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->update(array(
'recno' => $gldetail->id,
'update' => 1
));
Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array(
'serahan' => $totalserahan,
'bakiakhir' => $bakiakhir,
'bakieod' => $bakiakhir
));
ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array(
'updated_serahan_v2' => 1,
'gldetail_id_v2' => $gldetail->id
));
}
// Commit transactions
DB::connection($cawangan['mysql'])->commit();
DB::connection('mysql7')->commit();
}catch(\Exception $e){
DB::connection($cawangan['mysql'])->rollBack();
DB::connection('mysql7')->rollBack();
throw $e;
}
}
public function autoSerahanApproval(Request $request){
$current = Carbon::now();
DB::connection('mysql7')->beginTransaction();
try{
$approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first();
if($approval->approval_status == 'PENDING' && $request->sendApproval == 'ACCEPTED'){
$approval->operasi_name = $request->operasi_name;
$approval->approval_status = 'APPROVED';
$approval->approval_timestamp = $current;
$approval->save();
$updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id);
$updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id);
DB::connection('mysql7')->commit();
return response()->json(['status' => 'success'],200);
}else{
$approval->operasi_name = $request->operasi_name;
$approval->approval_status = 'REJECTED';
$approval->approval_timestamp = $current;
$approval->save();
DB::connection('mysql7')->commit();
return response()->json(['status' => 'success'],200);
}
}catch(\Exception $e){
DB::connection('mysql7')->rollBack();
return response()->json(['status' => 'error','message' =>$e->getMessage(), 'line' => $e->getLine()]);
}
}
private function updateDenominasi($kodcaw,$denopendser){
$current = Carbon::now();
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
Log::debug($denopendser);
$k1 = $denopendser['k1'];
$txtring1 = $denopendser['k1'] * 1;
$k5 = $denopendser['k5'];
$txtring5 = $denopendser['k5'] * 5;
$k01 = $denopendser['k01'];
$txtsen1 = $denopendser['k01'] * 0.01;
$k05 = $denopendser['k05'];
$txtsen5 = $denopendser['k05'] * 0.05;
$k010 = $denopendser['k010'];
$txtsen10 = $denopendser['k010'] * 0.10;
$k020 = $denopendser['k020'];
$txtsen20 = $denopendser['k020'] * 0.20;
$k050 = $denopendser['k050'];
$txtsen50 = $denopendser['k050'] * 0.50;
$k10 = $denopendser['k10'];
$txtring10 = $denopendser['k10'] * 10;
$k20 = $denopendser['k20'];
$txtring20 = $denopendser['k20'] * 20;
$k50 = $denopendser['k50'];
$txtring50 = $denopendser['k50'] * 50;
$k100 = $denopendser['k100'];
$txtring100 = $denopendser['k100'] * 100;
$totalkeping = $k01 + $k05 + $k010 + $k020 + $k050 + $k1 + $k5 + $k10 + $k20 + $k50 + $k100;
Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array(
'bd1' => 0,
'b1'=> 0,
'bd5'=> 0,
'b5'=> 0,
'bd10'=> 0,
'b10'=> 0,
'bd20'=> 0,
'b20'=> 0,
'bd50'=> 0,
'b50'=> 0,
'bd100'=> 0,
'b100'=> 0,
'txtring1'=> $txtring1,
'k1'=> $k1,
'txtring5'=> $txtring5,
'k5'=> $k5,
'txtsen1'=> $txtsen1,
'k01'=> $k01,
'txtsen5'=> $txtsen5,
'k05'=> $k05,
'txtsen10'=> $txtsen10,
'k010'=> $k010,
'txtsen20'=> $txtsen20,
'k020'=> $k020,
'txtsen50'=> $txtsen50,
'k050'=> $k050,
'txtring10'=> $txtring10,
'k10'=> $k10,
'txtring20'=> $txtring20,
'k20'=> $k20,
'txtring50'=> $txtring50,
'k50'=> $k50,
'txtring100'=> $txtring100,
'k100'=> $k100,
'jumlahbundle'=> 0,
'txtjumlah'=> $totalkeping,
'jumlahkeping' => $totalkeping
));
}
}