CalculatesOrderAmounts.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace App\Services\Client\Traits;
  3. use App\Models\MemberUser;
  4. trait CalculatesOrderAmounts
  5. {
  6. private function calculateTotalAmount(float $projectPrice, float $deliveryFee, float $discountAmount): float
  7. {
  8. $totalAmount = bcadd($projectPrice, $deliveryFee, 2);
  9. $totalAmount = bcsub($totalAmount, $discountAmount, 2);
  10. return max(0, $totalAmount);
  11. }
  12. private function calculatePaymentDistribution(MemberUser $user, float $totalAmount, bool $useBalance): array
  13. {
  14. if (! $useBalance || $totalAmount <= 0) {
  15. return [
  16. 'balance_amount' => 0,
  17. 'pay_amount' => $totalAmount,
  18. ];
  19. }
  20. $availableBalance = $user->wallet?->available_balance ?? 0;
  21. if ($availableBalance >= $totalAmount) {
  22. return [
  23. 'balance_amount' => $totalAmount,
  24. 'pay_amount' => 0,
  25. ];
  26. }
  27. return [
  28. 'balance_amount' => $availableBalance,
  29. 'pay_amount' => bcsub($totalAmount, $availableBalance, 2),
  30. ];
  31. }
  32. }