Files
api_arrahn/app/Services/Miscellaneous/PanjarServices.php
T
2024-01-10 10:11:25 +08:00

318 lines
15 KiB
PHP

<?php
namespace App\Services\Miscellaneous;
use App\Audit;
use App\Cawangan;
use App\Denominasi;
use App\DenoPanjar;
use App\Panjar;
use App\Vault;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class PanjarServices
{
/*
//////////////
/// NOTED ///
////////////
1. tak buat lgi untuk perubatan. just untuk buat yang panjar biasa.
*/
protected $cawangan = 'KB2';
protected $namelist_deno = [
'bd1' => 100,'bd5' => 500,'bd10' => 1000,'bd20' => 1000,'bd50' => 5000,'bd100' => 5000,
'txtsen1' => 0.01,'txtsen5' => 0.05,'txtsen10' => 0.10,'txtsen20' => 0.20,'txtsen50' => 0.50,
'txtring1' => 1,'txtring5' => 5,'txtring10' => 10,'txtring20' => 20,'txtring50' => 50,
'txtring100' => 100,'txtring1000' => 1000,
];
public function __construct($kodcaw){
$this->cawangan = $kodcaw;
}
private function calculation_denominasi($array_deno = [],$denominasi = [],$jenis_panjar){
if(isset($array_deno) <= 0 || isset($denominasi) <= 0){
return 'no data';
}
if($jenis_panjar != 'masuk' || $jenis_panjar != 'keluar') return 'no data';
$records = [];
foreach($this->namelist_deno as $deno => $value){
$total_deno = 0;$total = 0;
$total_deno = ($jenis_panjar == 'masuk') ? $denominasi[$deno] += intval($array_deno[$deno]) : $denominasi[$deno] -= intval($array_deno[$deno]);
$total = ($total_deno * $value);
$records[$deno] = [
'keping' => $total_deno,
'jumlah' => $total
];
}
/* total Keping */
$total_keping = array_sum(array_column($records, 'jumlah'));
/* Total Bundle */
$filteredKeys = array_filter(array_keys($records), function($key) {
return strpos($key, 'bd') !== false;
});
$filteredRecords = array_filter($records, function($record,$key) use ($filteredKeys) {
return in_array($key, $filteredKeys);
}, ARRAY_FILTER_USE_BOTH);
$total_bundle = array_sum(array_column($filteredRecords, 'jumlah'));
return [
'deno' => $records,
'total' => $total_keping,
'total_bundle' => $total_bundle,
'total_all' => ($total_keping + $total_bundle),
];
}
public function delete(Request $request){
$current = Carbon::now();
$current = new Carbon();
$cawangan = Cawangan::on('mysql7')->where('kodcaw', $this->cawangan)->first();
$denominasi = Denominasi::on($cawangan['mysql'])->latest('tarikh')->first();
$panjar = Panjar::on($cawangan['mysql'])->latest('tarikh')->where('nobaucer', $request->nobaucer)->first();
$vault = Vault::on($cawangan['mysql'])->latest('tarikh')->first();
$deno_panjar = DenoPanjar::on('mysql7')->where('kodcaw', $this->cawangan)->where('recno', $request->recno)->latest('tarikh','masa')->first();
try{
if (!$panjar) throw new \Exception('Custom Exception: Panjar Does Not Exist!');
if (!$denominasi) throw new \Exception('Custom Exception: Denominasi Does Not Exist!');
if (!$vault) throw new \Exception('Custom Exception: Vault Does Not Exist!');
if (!$deno_panjar) throw new \Exception('Custom Exception: Denominasi Panjar Does Not Exist!');
DB::transaction(function () use ($cawangan,$deno_panjar,$panjar,$denominasi,$current,$vault,$request) {
$return_data = $this->calculation_denominasi($deno_panjar,$denominasi,'masuk');
if($return_data == 'no data') throw new \Exception('Custom Exception: Denominasi Panjar Not Return Data');
Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array(
'bd1' => $return_data['deno']['bd1']['keping'],
'b1'=> $return_data['deno']['bd1']['jumlah'],
'bd5'=> $return_data['deno']['bd5']['keping'],
'b5'=> $return_data['deno']['bd5']['keping'],
'bd10'=> $return_data['deno']['bd10']['keping'],
'b10'=> $return_data['deno']['bd10']['jumlah'],
'bd20'=> $return_data['deno']['bd20']['keping'],
'b20'=> $return_data['deno']['bd20']['jumlah'],
'bd50'=> $return_data['deno']['bd50']['keping'],
'b50'=> $return_data['deno']['bd50']['jumlah'],
'bd100'=> $return_data['deno']['bd100']['keping'],
'b100'=> $return_data['deno']['bd100']['jumlah'],
'txtring1'=> $return_data['deno']['txtring1']['keping'],
'k1'=> $return_data['deno']['txtring1']['jumlah'],
'txtring5'=> $return_data['deno']['txtring5']['keping'],
'k5'=> $return_data['deno']['txtring5']['jumlah'],
'txtsen1'=> $return_data['deno']['txtsen1']['keping'],
'k01'=> $return_data['deno']['txtsen1']['jumlah'],
'txtsen5'=> $return_data['deno']['txtsen5']['keping'],
'k05'=> $return_data['deno']['txtsen5']['jumlah'],
'txtsen10'=> $return_data['deno']['txtsen10']['keping'],
'k010'=> $return_data['deno']['txtsen10']['jumlah'],
'txtsen20'=> $return_data['deno']['txtsen20']['keping'],
'k020'=> $return_data['deno']['txtsen20']['jumlah'],
'txtsen50'=> $return_data['deno']['txtsen50']['keping'],
'k050'=> $return_data['deno']['txtsen50']['jumlah'],
'txtring10'=> $return_data['deno']['txtring10']['keping'],
'k10'=> $return_data['deno']['txtring10']['jumlah'],
'txtring20'=> $return_data['deno']['txtring20']['keping'],
'k20'=> $return_data['deno']['txtring20']['jumlah'],
'txtring50'=> $return_data['deno']['txtring50']['keping'],
'k50'=> $return_data['deno']['txtring50']['jumlah'],
'txtring100'=> $return_data['deno']['txtring100']['keping'],
'k100'=> $return_data['deno']['txtring100']['jumlah'],
'txtring1000'=> $return_data['deno']['txtring1000']['keping'],
'k1000'=> $return_data['deno']['txtring1000']['jumlah'],
'jumlahbundle'=> $return_data['total_bundle'],
'txtjumlah'=> $return_data['total_all'],
'jumlahkeping' => $return_data['total']
) );
$totalpanjar = ($vault['totpanjar'] - $deno_panjar['serahan']);
$bakiakhir = ($vault['bakiawal'] - $vault['keluar'] + $vault['masuk'] + $vault['pendahuluan'] - $vault['serahan'] - $totalpanjar);
if($bakiakhir <= 0) throw new \Exception('Custom Exception: Amaun Baki Akhir Cannot Be Zero');
if($totalpanjar < 0) throw new \Exception('Custom Exception: Amaun Panjar Cannot Be Zero');
Vault::on($cawangan['mysql'])->where('kodcaw','=', $cawangan['kodcaw'])->latest('tarikh')->update(array(
'totpanjar' => $totalpanjar,
'bakiakhir'=>$bakiakhir,
'bakieod'=>$bakiakhir
));
DenoPanjar::on('mysql7')->where('kodcaw', $this->cawangan)->where('recno', $panjar['recno'])->latest('tarikh','masa')->delete();
Panjar::on($cawangan['mysql'])->where('recno',$panjar['recno'])->delete();
$audit = new Audit();
$audit->users = $request->tuntutoleh;
$audit->actions = "Keluarkan Perbelanjaan";
$audit->new_data = $panjar;
$audit->kodcaw = $this->cawangan;
$audit->created_at = $current;
$audit->updated_at = $current;
$audit->save();
});
}catch(\Exception $e){
dd($e->getMessage());
Log::error('Exception: ' , $e->getMessage());
}
}
public function create(Request $request){
$current = Carbon::now();
$current = new Carbon();
$cawangan = Cawangan::on('mysql7')->where('kodcaw', $this->cawangan)->first();
$denominasi = Denominasi::on($cawangan['mysql'])->latest('tarikh')->first();
$vault = Vault::on($cawangan['mysql'])->latest('tarikh')->first();
try{
if (!$denominasi) throw new \Exception('Custom Exception: Denominasi Does Not Exist!');
if (!$vault) throw new \Exception('Custom Exception: Vault Does Not Exist!');
DB::transaction(function () use ($cawangan,$denominasi,$current,$vault,$request) {
$panjar = Panjar::on($cawangan['mysql'])
->create([
'tarikh'=> $current->toDateString(),
'deskripsi'=> $request->deskripsi,
'bayaran' => $request->bayaran,
'tag' => $request->tag,
'kategori' => $request->kategori,
'id' => $request->id,
'bakiperubatan' => $request->bakiperubatan,
'nobaucer' => $request->nobaucer,
'nobil' => $request->nobil,
'tuntutoleh' => $request->tuntutoleh
]);
$denopanjar = DenoPanjar::on('mysql7')->create([
'tarikh' => $current->toDateString(),
'masa' => $current->toTimeString(),
'kodcaw' => $this->cawangan,
'kodlaluan' => $request->kodlaluan,
'serahan' => $request->serahan,
'bd1' => $request->bd1,
'bd5' => $request->bd5,
'bd10' => $request->bd10,
'bd20' => $request->bd20,
'bd50' => $request->bd50,
'bd100' => $request->bd100,
'txtring1' => $request->txtring1,
'txtring5' => $request->txtring5,
'txtring10' => $request->txtring10,
'txtring20' => $request->txtring20,
'txtring50' => $request->txtring50,
'txtring100' => $request->txtring100,
'txtring1000' => $request->txtring1000,
'txtsen1' => $request->txtsen1,
'txtsen5' => $request->txtsen5,
'txtsen10' => $request->txtsen10,
'txtsen20' => $request->txtsen20,
'txtsen50' => $request->txtsen50,
'jenis' =>$request->jenis,
'recno' =>$panjar['recno'],
'update' => '0'
]);
$return_data = $this->calculation_denominasi($denopanjar,$denominasi,'masuk');
if($return_data == 'no data') throw new \Exception('Custom Exception: Denominasi Panjar Not Return Data');
Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array(
'bd1' => $return_data['deno']['bd1']['keping'],
'b1'=> $return_data['deno']['bd1']['jumlah'],
'bd5'=> $return_data['deno']['bd5']['keping'],
'b5'=> $return_data['deno']['bd5']['keping'],
'bd10'=> $return_data['deno']['bd10']['keping'],
'b10'=> $return_data['deno']['bd10']['jumlah'],
'bd20'=> $return_data['deno']['bd20']['keping'],
'b20'=> $return_data['deno']['bd20']['jumlah'],
'bd50'=> $return_data['deno']['bd50']['keping'],
'b50'=> $return_data['deno']['bd50']['jumlah'],
'bd100'=> $return_data['deno']['bd100']['keping'],
'b100'=> $return_data['deno']['bd100']['jumlah'],
'txtring1'=> $return_data['deno']['txtring1']['keping'],
'k1'=> $return_data['deno']['txtring1']['jumlah'],
'txtring5'=> $return_data['deno']['txtring5']['keping'],
'k5'=> $return_data['deno']['txtring5']['jumlah'],
'txtsen1'=> $return_data['deno']['txtsen1']['keping'],
'k01'=> $return_data['deno']['txtsen1']['jumlah'],
'txtsen5'=> $return_data['deno']['txtsen5']['keping'],
'k05'=> $return_data['deno']['txtsen5']['jumlah'],
'txtsen10'=> $return_data['deno']['txtsen10']['keping'],
'k010'=> $return_data['deno']['txtsen10']['jumlah'],
'txtsen20'=> $return_data['deno']['txtsen20']['keping'],
'k020'=> $return_data['deno']['txtsen20']['jumlah'],
'txtsen50'=> $return_data['deno']['txtsen50']['keping'],
'k050'=> $return_data['deno']['txtsen50']['jumlah'],
'txtring10'=> $return_data['deno']['txtring10']['keping'],
'k10'=> $return_data['deno']['txtring10']['jumlah'],
'txtring20'=> $return_data['deno']['txtring20']['keping'],
'k20'=> $return_data['deno']['txtring20']['jumlah'],
'txtring50'=> $return_data['deno']['txtring50']['keping'],
'k50'=> $return_data['deno']['txtring50']['jumlah'],
'txtring100'=> $return_data['deno']['txtring100']['keping'],
'k100'=> $return_data['deno']['txtring100']['jumlah'],
'txtring1000'=> $return_data['deno']['txtring1000']['keping'],
'k1000'=> $return_data['deno']['txtring1000']['jumlah'],
'jumlahbundle'=> $return_data['total_bundle'],
'txtjumlah'=> $return_data['total_all'],
'jumlahkeping' => $return_data['total']
) );
$totalpanjar = ($vault['totpanjar'] + $denopanjar['serahan']);
$bakiakhir = ($vault['bakiawal'] - $vault['keluar'] + $vault['masuk'] + $vault['pendahuluan'] - $vault['serahan'] - $totalpanjar);
if($bakiakhir <= 0) throw new \Exception('Custom Exception: Amaun Baki Akhir Cannot Be Zero');
if($totalpanjar < 0) throw new \Exception('Custom Exception: Amaun Panjar Cannot Be Zero');
Vault::on($cawangan['mysql'])->where('kodcaw','=', $cawangan['kodcaw'])->latest('tarikh')->update(array(
'totpanjar' => $totalpanjar,
'bakiakhir'=>$bakiakhir,
'bakieod'=>$bakiakhir
));
$audit = new Audit();
$audit->users = $request->tuntutoleh;
$audit->actions = "Daftar Perbelanjaan";
$audit->new_data = $panjar;
$audit->kodcaw = $this->cawangan;
$audit->created_at = $current;
$audit->updated_at = $current;
$audit->save();
$array_response = [
'result' => 'success',
'data' => 1
];
return response()->json($array_response);
});
}catch(\Exception $e){
dd($e->getMessage());
$array_response = [
'result' => 'error',
'data' => $e->getMessage()
];
return response()->json($array_response);
Log::error('Exception: ' , $e->getMessage());
}
}
}