diff --git a/app/Http/Controllers/DenominasiController.php b/app/Http/Controllers/DenominasiController.php index 066e0d5..a0f0fae 100644 --- a/app/Http/Controllers/DenominasiController.php +++ b/app/Http/Controllers/DenominasiController.php @@ -5,12 +5,20 @@ namespace App\Http\Controllers; use App\CawanganDetail; use App\Cawangan; use App\Denominasi; +use App\Services\CashFlow\TellerServices; use Illuminate\Http\Request; use Carbon\Carbon; class DenominasiController extends Controller { + public function test($kodcaw,Request $request){ + $teller = new TellerServices($kodcaw); + $response = $teller->CashDeposit($request); + + return response()->json($response); + } + public function listdenominasi($kodcaw) { $current = Carbon::now(); diff --git a/app/Services/CashFlow/TellerServices.php b/app/Services/CashFlow/TellerServices.php new file mode 100644 index 0000000..067594b --- /dev/null +++ b/app/Services/CashFlow/TellerServices.php @@ -0,0 +1,296 @@ +cawangan = $kodcaw; + } + + private function CheckTunai(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$this->cawangan)->first(); + $current = Carbon::now(); + $current = new Carbon(); + + try{ + /* Checking Status Data include Tunai */ + $tunai = Tunai::on($cawangan['mysql']) + ->where([['kodcaw','=',$this->cawangan],['tarikh','=',$current->toDateString()],['kodlaluan','=',$request->teller]]); + $tunai = optional($tunai->first())->toArray(); + + if(empty($tunai)){ + // Create transaction of cash in teller + $tunai = Tunai::on($cawangan['mysql'])->create([ + 'tarikh' => $current->toDateString(), + 'kodcaw'=> $this->cawangan, + 'kodlaluan'=>$request->teller, + 'bakiawal'=>$request->bakiawal, + 'masuk'=>$request->masuk, + 'yuran'=>$request->yuran, + 'keluar'=>$request->keluar, + 'baki'=>$request->baki, + 'tambah'=>$request->amt, + 'kurang'=>$request->kurang + ]); + } + + } catch (\Exception $e) { + DB::connection($cawangan['mysql'])->rollBack(); + + // Handle the exception or re-throw + throw $e; + } + + } + + private function checkAddTunai(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$this->cawangan)->first(); + $current = Carbon::now(); + $current = new Carbon(); + + /* Checking AddTunai */ + + //Same Note e.g P1 and S1 + $same_note = AddTunai::on($cawangan['mysql']) + ->where('kodlaluan', $request->teller) + ->where('nota',$request->nota) + ->where('tarikh',$current->toDateString())->first(); + + if($same_note){ + //Throw this + Log::error('Error: same-note :' . $this->cawangan . ': Name :' . $request->teller); + return 'same-note'; + } + + //Time Interval + $latestRecord = AddTunai::on($cawangan['mysql'])->where('kodlaluan', $request->teller)->latest()->first(); + if($latestRecord){ + $time = Carbon::parse($latestRecord->created_at); + $time_end = $time->copy()->addMinutes(1); + + if($current->between($time,$time_end)){ + //Throw this + Log::error('Error: within 1 minute :' . $this->cawangan . ': Name :' . $request->teller); + return 'within 1 minute'; + } + } + + return 'success'; + } + + private function getDenoTotal(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$this->cawangan)->first(); + $current = Carbon::now(); + $current = new Carbon(); + + $deno = Denominasi::on($cawangan['mysql'])->where('tarikh','=',$current->toDateString()); + $deno = optional($deno->first())->toArray(); + + if(empty($deno)){ + return "empty"; + Log::error("Empty Denominasi Data"); + } + + $deno['txtsen1'] -= intval($request->ambilansen1); + $deno['txtsen5'] -= intval($request->ambilansen5); + $deno['txtsen10'] -= intval($request->ambilansen10); + $deno['txtsen20'] -= intval($request->ambilansen20); + $deno['txtsen50'] -= intval($request->ambilansen50); + + $deno['txtring1'] -= intval($request->ambilanring1); + $deno['txtring5'] -= intval($request->ambilanring5); + $deno['txtring10'] -= intval($request->ambilanring10); + $deno['txtring20'] -= intval($request->ambilanring20); + $deno['txtring50'] -= intval($request->ambilanring50); + $deno['txtring100'] -= intval($request->ambilanring100); + + $k01 = ($deno['txtsen1'] * 0.01); + $k05 = ($deno['txtsen5'] * 0.05); + $k010 = ($deno['txtsen10'] * 0.10); + $k020 = ($deno['txtsen20'] * 0.20); + $k050 = ($deno['txtsen50'] * 0.50); + $k1 = ($deno['txtring1'] * 1); + $k5 = ($deno['txtring5'] * 5); + $k10 = ($deno['txtring10'] * 10); + $k20 = ($deno['txtring20'] * 20); + $k50 = ($deno['txtring50'] * 50); + $k100 = ($deno['txtring100'] * 100); + + $totalkeping = $k01 + $k05 + $k010 + $k020 + + $k050 + $k1 + $k5 + $k10 + $k20 + + $k50 + $k100; + + $array_total_cash = [ + 'syiling1' => $k01, + 'syiling5' => $k05, + 'syiling10' => $k010, + 'syiling20' => $k020, + 'syiling50' => $k050, + 'kertas1' => $k1, + 'kertas5' => $k5, + 'kertas10' => $k10, + 'kertas20' => $k20, + 'kertas50' => $k50, + 'kertas100' => $k100, + ]; + + return ['deno' => $deno,'total' => $totalkeping,'cash' => $array_total_cash]; + } + + + public function CashDeposit(Request $request){ + + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$this->cawangan)->first(); + $current = Carbon::now(); + $current = new Carbon(); + + try { + // Start transaction + DB::connection($cawangan['mysql'])->beginTransaction(); + DB::connection('mysql7')->beginTransaction(); + + + /* Addtunai Transaction */ + $response_addtunai = $this->checkAddTunai($request); + + if($response_addtunai !== 'success'){ + Log::error("Unsuccessful Tunai"); + Log::debug($response_addtunai); + throw new Exception('Unsuccessful Tunai'); + } + + AddTunai::on($cawangan['mysql'])->create([ + 'tarikh' => $current->toDateString(), + 'kodcaw'=> $this->cawangan, + 'kodlaluan'=>$request->teller, + 'tambah'=>$request->amt, + 'kurang'=> 0, + 'nota'=>$request->nota, + 'created_at'=>$current + ]); + + /* Tunai Transaction */ + $tunai = Tunai::on($cawangan['mysql']) + ->where([['kodcaw','=',$this->cawangan],['tarikh','=',$current->toDateString()],['kodlaluan','=',$request->teller]]); + $tunai = optional($tunai->first())->toArray(); + + if(empty($tunai)){ + Log::debug($this->cawangan); + Log::debug($current->toDateString()); + Log::debug($request->teller); + Log::error("Empty Tunai Data"); + throw new Exception("Empty Tunai Data"); + } + + $total_teller_deposit = $tunai['tambah'] + $request->amt; + $remaining_teller_cashflow = $tunai['baki'] + $request->amt; + + Tunai::on($cawangan['mysql'])->where( [['tarikh','=', $current->toDateString()],['kodlaluan','=', $request->teller] ])-> + update(array( + 'tambah' => $total_teller_deposit, + 'baki' => $remaining_teller_cashflow + )); + + /* Vault Transaction */ + $vault = Vault::on($cawangan['mysql']) + ->where('kodcaw','=',$this->cawangan) + ->where('tarikh','=',$current->toDateString()); + $vault = optional($vault->first())->toArray(); + + if(empty($vault)){ + Log::error("Empty Vault Data"); + throw new Exception("Empty Vault Data"); + } + + $total_vault_deposit = $vault['keluar'] + $request->amt; + $remaining_vault = $vault['bakiawal'] - $total_vault_deposit + $vault['masuk'] + $vault['pendahuluan'] - $vault['serahan'] - $vault['totpanjar']; + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $this->cawangan]])->update(array( + 'keluar' => $total_vault_deposit, + 'bakiakhir' => $remaining_vault, + 'bakieod' => $remaining_vault + ) ); + + /* Denominasi Transaction */ + + $response_deno = $this->getDenoTotal($request); + + if($response_deno == 'empty') + throw new Exception("Empty Denominasi Data"); + + $deno = $response_deno['deno']; + $total = $response_deno['total']; + $cash = $response_deno['cash']; + + Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array( + 'txtring1'=> $deno['txtring1'], + 'k1'=> $cash['kertas1'], + 'txtring5'=> $deno['txtring5'], + 'k5'=> $cash['kertas5'], + 'txtsen1'=> $deno['txtsen1'], + 'k01'=> $cash['syiling1'], + 'txtsen5'=> $deno['txtsen5'], + 'k05'=> $cash['syiling5'], + 'txtsen10'=> $deno['txtsen10'], + 'k010'=> $cash['syiling10'], + 'txtsen20'=> $deno['txtsen20'], + 'k020'=> $cash['syiling20'], + 'txtsen50'=> $deno['txtsen50'], + 'k050'=> $cash['syiling50'], + 'txtring10'=> $deno['txtring10'], + 'k10'=> $cash['kertas10'], + 'txtring20'=> $deno['txtring20'], + 'k20'=> $cash['kertas20'], + 'txtring50'=> $deno['txtring50'], + 'k50'=> $cash['kertas50'], + 'txtring100'=> $deno['txtring100'], + 'k100'=> $cash['kertas100'], + 'txtjumlah'=> $total, + 'jumlahkeping' => $total + ) ); + + /* RequestTeller Transaction */ + RequestTeller::on('mysql7')->where([['no','=',$request->no],['kodcaw','=',$this->cawangan],['kodlaluan','=',$request->teller],['update','=',0]])->update(array( + 'update' => 1 + )); + + // Commit transactions + DB::connection($cawangan['mysql'])->commit(); + DB::connection('mysql7')->commit(); + + return 'success'; + + } catch (\Exception $e) { + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + + + // Handle the exception or re-throw + throw $e; + } + + } + + public function CashWithdrawals(){ + + } + +} diff --git a/routes/web.php b/routes/web.php index b2b3a62..ad8c8d1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -646,6 +646,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('/cawangan/getcawnotisall/{kodcaw}',['uses'=>'CawanganCallCenterController@getcawnotisall']); $router->get('/cawangan/bycawnotisperingatan/{kodcaw}/{notisid}',['uses'=>'CawanganCallCenterController@bycawnotisperingatan']); + $router->post('test/updatetunai/{kodcaw}',['uses'=>'DenominasiController@test']); });