| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- <?php
- namespace App\Services;
- use App\Models\Order;
- use App\Models\ProductSKU;
- use App\Models\Scopes\YearScope;
- use Illuminate\Database\Eloquent\Builder;
- class OrderPaymentStatusService
- {
- public function paidBackfillCandidatesQuery(?int $year = null): Builder
- {
- return Order::query()
- ->withoutGlobalScope(YearScope::class)
- ->when($year !== null, fn (Builder $query): Builder => $query->where('year', $year))
- ->where('order_status_id', '<>', Order::STATUS_PAID)
- ->whereHas('products_sku', function (Builder $query): void {
- $query->withoutGlobalScope(YearScope::class);
- })
- ->whereDoesntHave('products_sku', function (Builder $query): void {
- $query
- ->withoutGlobalScope(YearScope::class)
- ->where(function (Builder $query): void {
- $query
- ->whereNull('statement_number')
- ->orWhereRaw("TRIM(statement_number) = ''")
- ->orWhereNull('upd_number')
- ->orWhereRaw("TRIM(upd_number) = ''");
- });
- });
- }
- public function markPaidIfAllMafsHavePaymentData(Order|int|null $order): bool
- {
- if ($order === null) {
- return false;
- }
- $order = $order instanceof Order
- ? $order
- : Order::query()->withoutGlobalScope(YearScope::class)->find($order);
- if (!$order) {
- return false;
- }
- $mafsQuery = ProductSKU::query()
- ->withoutGlobalScope(YearScope::class)
- ->where('order_id', $order->id);
- if (!(clone $mafsQuery)->exists()) {
- return false;
- }
- $hasIncompleteMafs = (clone $mafsQuery)
- ->where(function ($query): void {
- $query
- ->whereNull('statement_number')
- ->orWhereRaw("TRIM(statement_number) = ''")
- ->orWhereNull('upd_number')
- ->orWhereRaw("TRIM(upd_number) = ''");
- })
- ->exists();
- if ($hasIncompleteMafs) {
- return false;
- }
- if ((int) $order->order_status_id !== Order::STATUS_PAID) {
- $order->update(['order_status_id' => Order::STATUS_PAID]);
- }
- return true;
- }
- }
|