| Path : /var/www/html/thb_loan_system/app/Builders/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : //var/www/html/thb_loan_system/app/Builders/LoanBuilder.php |
<?php
namespace App\Builders;
use Illuminate\Database\Eloquent\Builder;
class LoanBuilder extends Builder
{
public function loan_total_paid($date = null) : self
{
return $this->withSum(['transactions' => function ($query) use ($date) {
return $query->whereIn('transaction_type', ['repayment', 'pay_off'])
->when(!empty($date), function ($query) use ($date) {
$query->where('due_date', '<=', $date);
})
->where('reversed', 0);
}], 'credit');
}
public function loan_total_penalty($date = null): self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_penalty_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'penalty');
}
return $this->withSum('schedules', 'penalty');
}
public function loan_total_fees($date = null): self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_fees_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'fees');
}
return $this->withSum(['schedules'], 'fees');
}
public function loan_total_interest($date = null): self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_interest_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'interest');
}
return $this->withSum('schedules', 'interest');
}
public function loan_total_principal($date = null) :self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_principal_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'principal');
}
return $this->withSum('schedules', 'principal');
}
public function loan_total_interest_waived($date = null):self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_interest_waived_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'interest_waived');
}
return $this->withSum('schedules', 'interest_waived');
}
public function loan_total_pay_off($date = null) :self
{
if (!empty($date)) {
return $this->withSum(['schedules as schedules_sum_pay_off_by_date' => function ($query) use ($date) {
$query->where('due_date', '<=', $date);
}], 'pay_off');
}
return $this->withSum('schedules', 'pay_off');
}
public function transactions_sum_payment($start_date = null, $end_date = null): self
{
return $this->withSum(['transactions as transactions_sum_payment' => function ($query) use ($start_date, $end_date) {
return $query->whereIn('transaction_type', ['repayment', 'pay_off'])
->where('reversed', 0)
->when(!empty($start_date) && !empty($end_date), function ($query) use ($start_date, $end_date) {
return $query->whereBetween('date', [$start_date, $end_date]);
});
}], 'credit');
}
public function transactions_sum_waived($start_date = null, $end_date = null): self
{
return $this->withSum(['transactions as transactions_sum_waived' => function ($query) use ($start_date, $end_date) {
return $query->where('transaction_type', 'waiver')
->where('reversed', 0)
->when(!empty($start_date) && !empty($end_date), function ($query) use ($start_date, $end_date) {
return $query->whereBetween('date', [$start_date, $end_date]);
});
}], 'credit');
}
public function sum_principal($start_date = null, $end_date = null): self
{
return $this->withSum(['schedules' => function($query) use( $start_date,$end_date){
return $query->when(!empty($start_date) && !empty($end_date),function($query) use($start_date,$end_date){
return $query->whereBetween('due_date',[$start_date, $end_date]);
});
}], 'principal');
}
public function sum_interest($start_date = null, $end_date = null): self
{
return $this->withSum(['schedules' => function ($query) use ($start_date, $end_date) {
return $query->when(!empty($start_date) && !empty($end_date), function ($query) use ($start_date, $end_date) {
return $query->whereBetween('due_date', [$start_date, $end_date]);
});
}], 'interest');
}
public function sum_fees($start_date = null, $end_date = null): self
{
return $this->withSum(['schedules' => function ($query) use ($start_date, $end_date) {
return $query->when(!empty($start_date) && !empty($end_date), function ($query) use ($start_date, $end_date) {
return $query->whereBetween('due_date', [$start_date, $end_date]);
});
}], 'fees');
}
public function sum_penalty($start_date = null, $end_date = null): self
{
return $this->withSum(['schedules' => function ($query) use ($start_date, $end_date) {
return $query->when(!empty($start_date) && !empty($end_date), function ($query) use ($start_date, $end_date) {
return $query->whereBetween('due_date', [$start_date, $end_date]);
});
}], 'penalty');
}
}