calculatesBookingPayableAmount = $calculatesBookingPayableAmount; } public function execute(Booking $booking, $type){ $transaction = $booking->transactions() ->where('type', TransactionType::PAYMENT) ->latest()->get()[0]; $voucherRedemption = $transaction->voucherRedemption; $discount = 0; if ($voucherRedemption) { $discount = $voucherRedemption->value; } if ($type == TransactionType::PAYMENT) { $totalPayment = $booking->fix_currency_id === 1 ? $booking->transactions()->payments()->complete()->sum('original_amount') : $booking->transactions()->payments()->complete()->selectRaw('sum(amount - service_charge - tax) as sub_total')->get()->sum('sub_total'); return $this->calculatesBookingPayableAmount->execute($booking, $booking->fix_currency_id) / ($totalPayment + $discount); } else if ($type == TransactionType::BILL) { return $booking->bills->sum('original_amount') / $booking->bills->sum('amount'); } } }