/home/thegtkjw/cresviafinancial.com/project__549d4a8/app/Http/Controllers/Admin/DpsController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Currency;
use App\Models\InstallmentLog;
use App\Models\User;
use App\Models\UserDps;
use Illuminate\Http\Request;
use Datatables;
use Illuminate\Support\Carbon;
class DpsController extends Controller
{
public function __construct()
{
}
public function datatables(Request $request)
{
if($request->status == 'all'){
$datas = UserDps::orderBy('id','desc')->get();
}else{
$datas = UserDps::where('status',$request->status)->orderBy('id','desc')->get();
}
return Datatables::of($datas)
->editColumn('transaction_no', function(UserDps $data) {
return '<div>
'.$data->transaction_no.'
<br>
<span class="text-info">'.$data->plan->title.'</span>
</div>';
})
->editColumn('deposit_amount', function(UserDps $data){
$curr = Currency::where('is_default','=',1)->first();
return '<div>
'.$curr->sign.$data->deposit_amount.'
<br>
<span class="text-info">Per Installment '.$curr->sign.$data->per_installment.'</span>
</div>';
})
->editColumn('user_id', function(UserDps $data){
return '<div>
<span>'.$data->user->name.'</span>
<p>'.$data->user->account_number.'</p>
</div>';
})
->editColumn('total_installment', function(UserDps $data) {
$curr = Currency::where('is_default','=',1)->first();
return '<div>
'.$data->total_installment.'
<br>
<span class="text-info">'.$data->given_installment.' Given ('.$curr->sign.$data->paid_amount.')</span>
</div>';
})
->editColumn('matured_amount', function(UserDps $data) {
$curr = Currency::where('is_default','=',1)->first();
return '<div>
'.$curr->sign.$data->matured_amount.'
<br>
<span class="text-info">Interest Rate'.$data->interest_rate.' (%)</span>
</div>';
})
->editColumn('next_installment', function(UserDps $data){
return $data->next_installment != NULL ? Carbon::parse($data->next_installment)->toDateString() : '--';
})
->addColumn('action', function(UserDps $data) {
return '<div class="btn-group mb-1">
<button type="button" class="btn btn-primary btn-sm btn-rounded dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.'Actions' .'
</button>
<div class="dropdown-menu" x-placement="bottom-start">
<a href="' . route('admin.dps.log.show',$data->id) . '" class="dropdown-item">'.__("Logs").'</a>
</div>
</div>';
})
->rawColumns(['transaction_no','deposit_amount','user_id','total_installment','matured_amount','next_installment','action'])
->toJson();
}
public function index(){
$this->installmentCheck();
return view('admin.dps.index');
}
public function running(){
$this->installmentCheck();
return view('admin.dps.running');
}
public function matured(){
return view('admin.dps.matured ');
}
public function logShow($id){
$dps = UserDps::findOrfail($id);
$logs = InstallmentLog::where('transaction_no',$dps->transaction_no)->latest()->paginate(20);
$currency = Currency::whereIsDefault(1)->first();
return view('admin.dps.log',compact('dps','logs','currency'));
}
public function installmentCheck(){
$dps = UserDps::whereStatus(1)->get();
$now = Carbon::now();
foreach($dps as $key=>$data){
if($data->given_installment == $data->total_installment){
if($data->is_given !=1){
$this->maturedDps($data);
}
return false;
}
if($now->gt($data->next_installment)){
$this->takeLoanAmount($data->user_id,$data->per_installment);
$this->logCreate($data->transaction_no,$data->per_installment,$data->user_id);
$data->next_installment = Carbon::now()->addDays($data->plan->installment_interval);
$data->given_installment += 1;
$data->paid_amount += $data->per_installment;
$data->update();
}
}
}
public function takeLoanAmount($userId,$installment){
$user = User::whereId($userId)->first();
if($user && $user->balance>=$installment){
$user->balance -= $installment;
$user->update();
}
}
public function maturedDps($data){
$dps = UserDps::whereId($data->id)->first();
if($dps){
$dps->status = 2;
$dps->is_given = 1;
$dps->next_installment = NULL;
$dps->update();
$this->sendMaturedMoney($dps->user_id,$dps->matured_amount);
}
}
public function sendMaturedMoney($userId,$maturedAmount){
$user = User::findOrfail($userId);
if($user){
$user->balance += $maturedAmount;
$user->update();
}
}
public function logCreate($transactionNo,$amount,$userId){
$data = new InstallmentLog();
$data->user_id = $userId;
$data->transaction_no = $transactionNo;
$data->type = 'dps';
$data->amount = $amount;
$data->save();
}
}