OrderPaymentStatusService.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Order;
  4. use App\Models\ProductSKU;
  5. use App\Models\Scopes\YearScope;
  6. class OrderPaymentStatusService
  7. {
  8. public function markPaidIfAllMafsHavePaymentData(Order|int|null $order): bool
  9. {
  10. if ($order === null) {
  11. return false;
  12. }
  13. $order = $order instanceof Order
  14. ? $order
  15. : Order::query()->withoutGlobalScope(YearScope::class)->find($order);
  16. if (!$order) {
  17. return false;
  18. }
  19. $mafsQuery = ProductSKU::query()
  20. ->withoutGlobalScope(YearScope::class)
  21. ->where('order_id', $order->id);
  22. if (!(clone $mafsQuery)->exists()) {
  23. return false;
  24. }
  25. $hasIncompleteMafs = (clone $mafsQuery)
  26. ->where(function ($query): void {
  27. $query
  28. ->whereNull('statement_number')
  29. ->orWhereRaw("TRIM(statement_number) = ''")
  30. ->orWhereNull('upd_number')
  31. ->orWhereRaw("TRIM(upd_number) = ''");
  32. })
  33. ->exists();
  34. if ($hasIncompleteMafs) {
  35. return false;
  36. }
  37. if ((int) $order->order_status_id !== Order::STATUS_PAID) {
  38. $order->update(['order_status_id' => Order::STATUS_PAID]);
  39. }
  40. return true;
  41. }
  42. }