From f517b773775d721c32e8e666e6a37d9ba429c41a Mon Sep 17 00:00:00 2001 From: Developer Date: Thu, 2 Jul 2026 12:49:22 +0800 Subject: [PATCH] style: fix linting issues with Laravel Pint --- .../V1/Admin/AdminDropOffPointController.php | 8 +- .../Api/V1/Admin/AdminDumpsiteController.php | 13 ++-- .../Api/V1/Admin/AdminHouseholdController.php | 1 - .../V1/Admin/AdminPartnerStoreController.php | 4 +- .../Api/V1/Admin/AdminQrBatchController.php | 1 - .../Api/V1/Admin/AdminTeamController.php | 6 +- .../Api/V1/Admin/AdminTripController.php | 4 +- .../Api/V1/Admin/AdminTruckController.php | 8 +- .../Api/V1/Admin/AdminUserController.php | 16 ++-- .../Controllers/Api/V1/Auth/MeController.php | 5 +- .../Api/V1/Auth/RegisterController.php | 6 +- .../Api/V1/Driver/TripDetourController.php | 11 +-- .../V1/Helper/HelperAssignmentController.php | 8 +- .../Api/V1/Household/HouseholdController.php | 4 +- .../Api/V1/Me/MyHouseholdController.php | 12 +-- .../Api/V1/Me/MySalesController.php | 14 ++-- .../Api/V1/Me/UpcomingPickupsController.php | 20 ++--- .../Api/V1/Qr/MyQrCodeController.php | 6 +- .../Api/V1/Scanner/ScannerController.php | 29 ++++--- .../Api/V1/Store/StorePortalController.php | 77 ++++++++++--------- .../SuperAdmin/SuperAdminUserController.php | 10 ++- .../Store/StoreDashboardController.php | 1 - app/Http/Middleware/ResolveTenant.php | 3 +- .../StoreAdminHouseholdMemberRequest.php | 3 +- .../Household/StoreHouseholdMemberRequest.php | 4 +- app/Http/Requests/Team/StoreTruckRequest.php | 2 +- app/Http/Resources/UserResource.php | 3 +- app/Models/CollectionTeam.php | 12 ++- app/Models/DropOffPoint.php | 3 +- app/Models/StoreInventoryAdjustment.php | 4 + app/Models/Trip.php | 1 + 31 files changed, 166 insertions(+), 133 deletions(-) diff --git a/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php b/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php index b24d61a..2adc4a3 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php @@ -11,16 +11,16 @@ use App\Http\Resources\DropOffPointResource; use App\Models\DropOffCapacityLog; use App\Models\DropOffPoint; use App\Services\DropOff\DropOffPointFinder; -use Illuminate\Support\Facades\DB; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use MatanYadaev\EloquentSpatial\Objects\LineString; +use Illuminate\Support\Facades\DB; use MatanYadaev\EloquentSpatial\Objects\Point; use MatanYadaev\EloquentSpatial\Objects\Polygon; class AdminDropOffPointController extends ApiController { public function __construct(private readonly DropOffPointFinder $dopFinder) {} + public function index(Request $request): JsonResponse { $request->validate([ @@ -75,7 +75,7 @@ class AdminDropOffPointController extends ApiController 'photo_path' => $data['photo_path'] ?? null, 'contact_person' => $data['contact_person'] ?? null, 'contact_phone' => $data['contact_phone'] ?? null, - 'geofence' => !empty($data['geofence_wkt']) ? Polygon::fromJson($data['geofence_wkt'], 4326) : null, + 'geofence' => ! empty($data['geofence_wkt']) ? Polygon::fromJson($data['geofence_wkt'], 4326) : null, ]); return $this->created(new DropOffPointResource($dop->load('barangay')), 'Drop-off point created'); @@ -104,7 +104,7 @@ class AdminDropOffPointController extends ApiController unset($data['lat'], $data['lng']); if (array_key_exists('geofence_wkt', $data)) { - $data['geofence'] = !empty($data['geofence_wkt']) ? Polygon::fromJson($data['geofence_wkt'], 4326) : null; + $data['geofence'] = ! empty($data['geofence_wkt']) ? Polygon::fromJson($data['geofence_wkt'], 4326) : null; unset($data['geofence_wkt']); } diff --git a/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php b/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php index 0d7c10c..3be35cb 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php @@ -7,9 +7,10 @@ use App\Http\Requests\Dumpsite\StoreDumpsiteRequest; use App\Http\Requests\Dumpsite\UpdateDumpsiteRequest; use App\Http\Resources\DumpsiteResource; use App\Models\Dumpsite; -use Illuminate\Support\Facades\DB; +use App\Models\Trip; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use MatanYadaev\EloquentSpatial\Objects\LineString; use MatanYadaev\EloquentSpatial\Objects\Point; use MatanYadaev\EloquentSpatial\Objects\Polygon; @@ -110,14 +111,14 @@ class AdminDumpsiteController extends ApiController $dumpsite->update($payload); if ($newStatus !== Dumpsite::STATUS_ACTIVE && $oldStatus === Dumpsite::STATUS_ACTIVE) { - $trips = \App\Models\Trip::where('dumpsite_id', $dumpsite->id) - ->whereIn('status', [\App\Models\Trip::STATUS_SCHEDULED, \App\Models\Trip::STATUS_IN_PROGRESS, \App\Models\Trip::STATUS_AT_DUMPSITE]) + $trips = Trip::where('dumpsite_id', $dumpsite->id) + ->whereIn('status', [Trip::STATUS_SCHEDULED, Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]) ->get(); foreach ($trips as $trip) { $trip->update([ - 'status' => \App\Models\Trip::STATUS_CANCELLED, - 'notes' => trim(($trip->notes ?? '') . "\nSystem: Trip cancelled because the dumpsite was moved to " . $newStatus . " status."), + 'status' => Trip::STATUS_CANCELLED, + 'notes' => trim(($trip->notes ?? '')."\nSystem: Trip cancelled because the dumpsite was moved to ".$newStatus.' status.'), ]); } } @@ -149,7 +150,7 @@ class AdminDumpsiteController extends ApiController } if (array_key_exists('geofence_wkt', $data)) { - $payload['boundary_polygon'] = !empty($data['geofence_wkt']) ? \MatanYadaev\EloquentSpatial\Objects\Polygon::fromJson($data['geofence_wkt'], 4326) : null; + $payload['boundary_polygon'] = ! empty($data['geofence_wkt']) ? Polygon::fromJson($data['geofence_wkt'], 4326) : null; } return $payload; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php b/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php index 16b877e..4f33f07 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php @@ -11,7 +11,6 @@ use App\Http\Requests\Admin\UpdateAdminHouseholdMemberRequest; use App\Http\Requests\Admin\UpdateAdminHouseholdRequest; use App\Http\Resources\HouseholdResource; use App\Models\Barangay; -use App\Models\DropOffPoint; use App\Models\Household; use App\Models\HouseholdMember; use App\Models\NotificationPreference; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminPartnerStoreController.php b/app/Http/Controllers/Api/V1/Admin/AdminPartnerStoreController.php index c6cab67..103fefa 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminPartnerStoreController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminPartnerStoreController.php @@ -139,7 +139,7 @@ class AdminPartnerStoreController extends ApiController $data = $request->validate([ 'household_id' => ['required', 'integer', 'exists:households,id'], 'quantity' => ['required', 'integer', 'min:1', 'max:1000'], - 'retail_price_per_code_centavos' => ['nullable', 'integer', 'in:' . $globalPrice], + 'retail_price_per_code_centavos' => ['nullable', 'integer', 'in:'.$globalPrice], ]); $retailPrice = (int) ($data['retail_price_per_code_centavos'] ?? $globalPrice); @@ -340,7 +340,7 @@ class AdminPartnerStoreController extends ApiController { // Safety check: ensure the QR belongs to this store and is a replacement if ($qrCode->assigned_to_store_id !== $store->id) { - return $this->fail('Unauthorized access to this QR code', null, 403); + return $this->fail('Unauthorized access to this QR code', null, 403); } // In a real app, this might return a PDF or a signed URL to a PDF. diff --git a/app/Http/Controllers/Api/V1/Admin/AdminQrBatchController.php b/app/Http/Controllers/Api/V1/Admin/AdminQrBatchController.php index 8f10205..e5caf7d 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminQrBatchController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminQrBatchController.php @@ -9,7 +9,6 @@ use App\Http\Resources\QrCodeResource; use App\Models\Household; use App\Models\QrCode; use App\Models\QrCodeBatch; -use App\Models\ServiceArea; use App\Services\Qr\BatchGenerator; use Barryvdh\DomPDF\Facade\Pdf; use Carbon\Carbon; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php b/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php index 00c6e7c..50cde36 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php @@ -51,7 +51,7 @@ class AdminTeamController extends ApiController { $data = $request->validated(); $override = (bool) ($data['override_conflicts'] ?? false); - + if (! isset($data['helper_count']) && isset($data['helper_ids'])) { $data['helper_count'] = count($data['helper_ids']); $data['helper_assignment_mode'] = 'manual'; @@ -61,7 +61,7 @@ class AdminTeamController extends ApiController $expectedCount = (int) ($data['helper_count'] ?? 0); if ($expectedCount > 0 && count($helperIds) < $expectedCount) { return $this->fail('Not enough available helpers found.', [ - 'helper_count' => ['Only ' . count($helperIds) . ' available helper(s) found.'] + 'helper_count' => ['Only '.count($helperIds).' available helper(s) found.'], ], 422); } @@ -125,7 +125,7 @@ class AdminTeamController extends ApiController $expectedCount = (int) ($data['helper_count'] ?? 0); if ($expectedCount > 0 && count($helperIds) < $expectedCount) { return $this->fail('Not enough available helpers found.', [ - 'helper_count' => ['Only ' . count($helperIds) . ' available helper(s) found.'] + 'helper_count' => ['Only '.count($helperIds).' available helper(s) found.'], ], 422); } } diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTripController.php b/app/Http/Controllers/Api/V1/Admin/AdminTripController.php index ff150bc..93d578e 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTripController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTripController.php @@ -136,13 +136,13 @@ class AdminTripController extends ApiController if ($teamConflict) { $conflicts[] = "Team is already scheduled on {$data['scheduled_date']} (trip {$teamConflict->trip_number})"; } - if (!empty($conflicts)) { + if (! empty($conflicts)) { return $this->fail('Trip has scheduling conflicts', ['conflicts' => $conflicts], 422); } } DB::transaction(function () use ($trip, $data) { - if ((int)$trip->route_id !== (int)$data['route_id']) { + if ((int) $trip->route_id !== (int) $data['route_id']) { $trip->stops()->delete(); $route = Route::with('stops')->findOrFail($data['route_id']); $data['dumpsite_id'] = $route->default_dumpsite_id; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php b/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php index 995cf35..a902769 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php @@ -5,12 +5,12 @@ namespace App\Http\Controllers\Api\V1\Admin; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Requests\Team\StoreTruckRequest; use App\Http\Resources\TruckResource; -use App\Models\Truck; -use App\Models\Trip; use App\Models\CollectionTeam; -use Illuminate\Support\Facades\DB; +use App\Models\Trip; +use App\Models\Truck; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class AdminTruckController extends ApiController { @@ -75,7 +75,7 @@ class AdminTruckController extends ApiController foreach ($trips as $trip) { $trip->update([ 'status' => Trip::STATUS_CANCELLED, - 'notes' => trim(($trip->notes ?? '') . "\nSystem: Trip cancelled because the truck was moved to " . $newStatus . " status."), + 'notes' => trim(($trip->notes ?? '')."\nSystem: Trip cancelled because the truck was moved to ".$newStatus.' status.'), ]); } diff --git a/app/Http/Controllers/Api/V1/Admin/AdminUserController.php b/app/Http/Controllers/Api/V1/Admin/AdminUserController.php index cd60323..a2a72f2 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminUserController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminUserController.php @@ -5,15 +5,17 @@ namespace App\Http\Controllers\Api\V1\Admin; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Requests\Admin\RejectProfileRequest; use App\Http\Requests\Admin\UpdateUserRequest; -use App\Http\Resources\UserDetailResource; use App\Http\Resources\HouseholdResource; -use App\Models\User; +use App\Http\Resources\UserDetailResource; use App\Models\Household; use App\Models\HouseholdMember; +use App\Models\User; +use App\Services\DropOff\DropOffPointFinder; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Validation\Rule; use Illuminate\Support\Facades\DB; +use Illuminate\Validation\Rule; +use MatanYadaev\EloquentSpatial\Objects\Point; class AdminUserController extends ApiController { @@ -119,7 +121,7 @@ class AdminUserController extends ApiController return $this->forbidden('Only Super Admins can activate or approve resident profiles'); } - $householdMember = \App\Models\HouseholdMember::where('user_id', $user->id)->first(); + $householdMember = HouseholdMember::where('user_id', $user->id)->first(); $household = $householdMember ? $householdMember->household : $user->headedHousehold; if (! $household || ! $household->coordinates) { @@ -156,7 +158,7 @@ class AdminUserController extends ApiController return $this->forbidden('Only Super Admins can activate or approve resident profiles'); } - $householdMember = \App\Models\HouseholdMember::where('user_id', $user->id)->first(); + $householdMember = HouseholdMember::where('user_id', $user->id)->first(); $household = $householdMember ? $householdMember->household : $user->headedHousehold; if (! $household || ! $household->coordinates) { @@ -258,8 +260,8 @@ class AdminUserController extends ApiController return $h; } else { - $point = new \MatanYadaev\EloquentSpatial\Objects\Point((float) $data['lat'], (float) $data['lng'], 4326); - $dopFinder = app(\App\Services\DropOff\DropOffPointFinder::class); + $point = new Point((float) $data['lat'], (float) $data['lng'], 4326); + $dopFinder = app(DropOffPointFinder::class); $nearestDop = $dopFinder->nearest((float) $data['lat'], (float) $data['lng']); $h = Household::create([ diff --git a/app/Http/Controllers/Api/V1/Auth/MeController.php b/app/Http/Controllers/Api/V1/Auth/MeController.php index 9ccfc0e..93f4f03 100644 --- a/app/Http/Controllers/Api/V1/Auth/MeController.php +++ b/app/Http/Controllers/Api/V1/Auth/MeController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\V1\Auth; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Resources\UserResource; +use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -13,10 +14,10 @@ class MeController extends ApiController { $user = $request->user(); $relations = ['tenant']; - if ($user->role === \App\Models\User::ROLE_DRIVER) { + if ($user->role === User::ROLE_DRIVER) { $relations[] = 'driverTeam.truck'; } - + return $this->ok([ 'user' => new UserResource($user->load($relations)), ]); diff --git a/app/Http/Controllers/Api/V1/Auth/RegisterController.php b/app/Http/Controllers/Api/V1/Auth/RegisterController.php index 208bb78..1ab18c2 100644 --- a/app/Http/Controllers/Api/V1/Auth/RegisterController.php +++ b/app/Http/Controllers/Api/V1/Auth/RegisterController.php @@ -5,13 +5,13 @@ namespace App\Http\Controllers\Api\V1\Auth; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Requests\Auth\RegisterRequest; use App\Http\Resources\UserResource; +use App\Models\Household; +use App\Models\HouseholdMember; use App\Models\NotificationPreference; use App\Models\OtpCode; use App\Models\User; -use App\Models\Household; -use App\Models\HouseholdMember; -use App\Services\Otp\OtpService; use App\Services\DropOff\DropOffPointFinder; +use App\Services\Otp\OtpService; use App\Tenancy\Tenancy; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\DB; diff --git a/app/Http/Controllers/Api/V1/Driver/TripDetourController.php b/app/Http/Controllers/Api/V1/Driver/TripDetourController.php index 1adef59..3961352 100644 --- a/app/Http/Controllers/Api/V1/Driver/TripDetourController.php +++ b/app/Http/Controllers/Api/V1/Driver/TripDetourController.php @@ -5,8 +5,9 @@ namespace App\Http\Controllers\Api\V1\Driver; use App\Http\Controllers\Controller; use App\Models\Trip; use App\Models\TripTimelineEvent; -use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; +use MatanYadaev\EloquentSpatial\Objects\Point; class TripDetourController extends Controller { @@ -28,8 +29,8 @@ class TripDetourController extends Controller 'event_type' => TripTimelineEvent::TYPE_DETOUR_TO_DUMPSITE, 'event_at' => now(), 'recorded_by_user_id' => $request->user()->id, - 'coordinates' => isset($validated['lat'], $validated['lng']) - ? new \MatanYadaev\EloquentSpatial\Objects\Point((float)$validated['lat'], (float)$validated['lng'], 4326) + 'coordinates' => isset($validated['lat'], $validated['lng']) + ? new Point((float) $validated['lat'], (float) $validated['lng'], 4326) : null, 'notes' => 'Truck full - Detouring to dumpsite', 'created_at' => now(), @@ -58,8 +59,8 @@ class TripDetourController extends Controller 'event_type' => TripTimelineEvent::TYPE_RESUMED_FROM_DETOUR, 'event_at' => now(), 'recorded_by_user_id' => $request->user()->id, - 'coordinates' => isset($validated['lat'], $validated['lng']) - ? new \MatanYadaev\EloquentSpatial\Objects\Point((float)$validated['lat'], (float)$validated['lng'], 4326) + 'coordinates' => isset($validated['lat'], $validated['lng']) + ? new Point((float) $validated['lat'], (float) $validated['lng'], 4326) : null, 'notes' => 'Finished unloading at dumpsite - Resuming route', 'created_at' => now(), diff --git a/app/Http/Controllers/Api/V1/Helper/HelperAssignmentController.php b/app/Http/Controllers/Api/V1/Helper/HelperAssignmentController.php index e513a7a..20d2cee 100644 --- a/app/Http/Controllers/Api/V1/Helper/HelperAssignmentController.php +++ b/app/Http/Controllers/Api/V1/Helper/HelperAssignmentController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers\Api\V1\Helper; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Resources\TeamMemberResource; +use App\Http\Resources\TripResource; use App\Models\TeamMember; +use App\Models\Trip; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -99,9 +101,9 @@ class HelperAssignmentController extends ApiController return $this->ok(null, 'No active assignment for today.'); } - $trip = \App\Models\Trip::query() + $trip = Trip::query() ->where('team_id', $assignment->team_id) - ->whereIn('status', [\App\Models\Trip::STATUS_SCHEDULED, \App\Models\Trip::STATUS_IN_PROGRESS, \App\Models\Trip::STATUS_AT_DUMPSITE]) + ->whereIn('status', [Trip::STATUS_SCHEDULED, Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]) ->with(['route', 'team.driver', 'team.scanner', 'truck', 'dumpsite', 'stops.dropOffPoint']) ->orderBy('scheduled_date') ->first(); @@ -110,7 +112,7 @@ class HelperAssignmentController extends ApiController return $this->ok(null, 'No active trip for assigned team.'); } - return $this->ok(\App\Http\Resources\TripResource::make($trip)); + return $this->ok(TripResource::make($trip)); } public function history(Request $request): JsonResponse diff --git a/app/Http/Controllers/Api/V1/Household/HouseholdController.php b/app/Http/Controllers/Api/V1/Household/HouseholdController.php index 835ed1c..6be1c1f 100644 --- a/app/Http/Controllers/Api/V1/Household/HouseholdController.php +++ b/app/Http/Controllers/Api/V1/Household/HouseholdController.php @@ -174,13 +174,13 @@ class HouseholdController extends ApiController $this->authorizeOwn($request->user(), $household); $data = $request->validated(); - + $userToAdd = User::where('email', $data['email'])->first(); // Check if this user is already a member of any household or the head of one $isMember = HouseholdMember::where('user_id', $userToAdd->id)->exists(); $isHead = Household::where('head_user_id', $userToAdd->id)->exists(); - + if ($isMember || $isHead) { return $this->fail('This user is already part of a household.', ['email' => ['Already in a household.']], 422); } diff --git a/app/Http/Controllers/Api/V1/Me/MyHouseholdController.php b/app/Http/Controllers/Api/V1/Me/MyHouseholdController.php index 55cf39a..12050d3 100644 --- a/app/Http/Controllers/Api/V1/Me/MyHouseholdController.php +++ b/app/Http/Controllers/Api/V1/Me/MyHouseholdController.php @@ -5,8 +5,10 @@ namespace App\Http\Controllers\Api\V1\Me; use App\Http\Controllers\Api\V1\ApiController; use App\Http\Resources\HouseholdResource; use App\Models\Household; +use App\Tenancy\Tenancy; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class MyHouseholdController extends ApiController { @@ -18,8 +20,8 @@ class MyHouseholdController extends ApiController public function show(Request $request): JsonResponse { $userId = $request->user()->id; - $tenantId = \App\Tenancy\Tenancy::current()?->id; - \Illuminate\Support\Facades\Log::info("DEBUG HOUSEHOLD show for User $userId, Tenant: $tenantId"); + $tenantId = Tenancy::current()?->id; + Log::info("DEBUG HOUSEHOLD show for User $userId, Tenant: $tenantId"); $household = Household::with([ 'head', 'barangay.cityMunicipality.province.region', 'members.user', @@ -28,9 +30,9 @@ class MyHouseholdController extends ApiController ->withCount('members') ->where(function ($query) use ($request) { $query->where('head_user_id', $request->user()->id) - ->orWhereHas('members', function ($q) use ($request) { - $q->where('user_id', $request->user()->id); - }); + ->orWhereHas('members', function ($q) use ($request) { + $q->where('user_id', $request->user()->id); + }); }) ->first(); diff --git a/app/Http/Controllers/Api/V1/Me/MySalesController.php b/app/Http/Controllers/Api/V1/Me/MySalesController.php index e3f870f..89eb3f5 100644 --- a/app/Http/Controllers/Api/V1/Me/MySalesController.php +++ b/app/Http/Controllers/Api/V1/Me/MySalesController.php @@ -5,8 +5,8 @@ namespace App\Http\Controllers\Api\V1\Me; use App\Http\Controllers\Api\V1\ApiController; use App\Models\Household; use App\Models\StoreSale; +use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Http\Response; class MySalesController extends ApiController @@ -30,7 +30,7 @@ class MySalesController extends ApiController { $household = $this->getHousehold(); - if (!$household) { + if (! $household) { return $this->ok([], 'No household associated with this account.'); } @@ -40,7 +40,7 @@ class MySalesController extends ApiController ->paginate(15); return $this->ok( - $sales->map(fn($s) => [ + $sales->map(fn ($s) => [ 'id' => $s->id, 'store_name' => $s->store?->business_name ?? 'Verde Partner Store', 'quantity' => $s->quantity, @@ -64,14 +64,14 @@ class MySalesController extends ApiController { $household = $this->getHousehold(); - if (!$household || $sale->household_id !== $household->id) { + if (! $household || $sale->household_id !== $household->id) { abort(403, 'Unauthorized access to this receipt.'); } $sale->load(['store', 'household.head', 'household.barangay']); - - $pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView('pdfs.receipt', [ - 'sale' => $sale + + $pdf = Pdf::loadView('pdfs.receipt', [ + 'sale' => $sale, ]); return $pdf->download("receipt-{$sale->id}.pdf"); diff --git a/app/Http/Controllers/Api/V1/Me/UpcomingPickupsController.php b/app/Http/Controllers/Api/V1/Me/UpcomingPickupsController.php index 684f9fe..203968a 100644 --- a/app/Http/Controllers/Api/V1/Me/UpcomingPickupsController.php +++ b/app/Http/Controllers/Api/V1/Me/UpcomingPickupsController.php @@ -58,11 +58,11 @@ class UpcomingPickupsController extends ApiController $trips = Trip::query() ->with([ - 'route:id,name,code', + 'route:id,name,code', 'route.stops' => fn ($q) => $q->whereIn('drop_off_point_id', $nearbyDopIds), - 'team:id,name,driver_id', - 'team.driver:id,first_name,last_name', - 'truck:id,plate_number' + 'team:id,name,driver_id', + 'team.driver:id,first_name,last_name', + 'truck:id,plate_number', ]) ->whereHas('route.stops', fn ($q) => $q->whereIn('drop_off_point_id', $nearbyDopIds)) ->whereNotIn('status', [Trip::STATUS_CANCELLED, Trip::STATUS_COMPLETED]) @@ -72,12 +72,12 @@ class UpcomingPickupsController extends ApiController // For today, check the time ->orWhere(function ($q) { $q->where('scheduled_date', now('Asia/Manila')->toDateString()) - ->where(function ($sub) { - // Keep if the time hasn't passed yet (evaluated in Manila time) - $sub->where('scheduled_start_time', '>=', now('Asia/Manila')->toTimeString()) - // OR if the driver has already started the trip - ->orWhereIn('status', [Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]); - }); + ->where(function ($sub) { + // Keep if the time hasn't passed yet (evaluated in Manila time) + $sub->where('scheduled_start_time', '>=', now('Asia/Manila')->toTimeString()) + // OR if the driver has already started the trip + ->orWhereIn('status', [Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]); + }); }); }) ->orderBy('scheduled_date') diff --git a/app/Http/Controllers/Api/V1/Qr/MyQrCodeController.php b/app/Http/Controllers/Api/V1/Qr/MyQrCodeController.php index e864056..fd1cf13 100644 --- a/app/Http/Controllers/Api/V1/Qr/MyQrCodeController.php +++ b/app/Http/Controllers/Api/V1/Qr/MyQrCodeController.php @@ -84,7 +84,7 @@ class MyQrCodeController extends ApiController if (! $household) { return $this->forbidden('You must have an active household'); } - + $activateBatch = $request->boolean('activate_batch'); if ($activateBatch) { @@ -92,12 +92,12 @@ class MyQrCodeController extends ApiController if (! $qrCode->batch_id) { return $this->fail('This QR code does not belong to a batch', null, 422); } - + $activatedCount = $allocator->activateBatch($qrCode, $household); if ($activatedCount === 0) { return $this->fail('No unactivated codes found in this batch, or you do not have permission to activate this batch', null, 422); } - + return $this->ok(['activated_count' => $activatedCount], "Successfully activated $activatedCount QR codes in the batch"); } diff --git a/app/Http/Controllers/Api/V1/Scanner/ScannerController.php b/app/Http/Controllers/Api/V1/Scanner/ScannerController.php index ed8702d..ccb6aa1 100644 --- a/app/Http/Controllers/Api/V1/Scanner/ScannerController.php +++ b/app/Http/Controllers/Api/V1/Scanner/ScannerController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers\Api\V1\Scanner; use App\Http\Controllers\Api\V1\ApiController; +use App\Http\Resources\CollectionTeamResource; +use App\Http\Resources\TripResource; +use App\Models\CollectionTeam; use App\Models\DropOffPoint; use App\Models\Trip; use App\Models\TripStop; @@ -10,6 +13,7 @@ use App\Services\Scan\ScanService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class ScannerController extends ApiController { @@ -19,32 +23,32 @@ class ScannerController extends ApiController { $user = $request->user(); - $team = \App\Models\CollectionTeam::query() + $team = CollectionTeam::query() ->with(['driver', 'truck', 'helpers.user']) ->where('scanner_id', $user->id) - ->where('status', \App\Models\CollectionTeam::STATUS_ACTIVE) + ->where('status', CollectionTeam::STATUS_ACTIVE) ->first(); if (! $team) { return $this->fail('No active collection team assigned to this scanner', null, 404); } - $trip = \App\Models\Trip::query() + $trip = Trip::query() ->with(['route.stops.dropOffPoint', 'stops.dropOffPoint']) ->where('team_id', $team->id) - ->whereIn('status', [\App\Models\Trip::STATUS_SCHEDULED, \App\Models\Trip::STATUS_IN_PROGRESS, \App\Models\Trip::STATUS_AT_DUMPSITE]) + ->whereIn('status', [Trip::STATUS_SCHEDULED, Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]) ->orderBy('scheduled_date') ->first(); return $this->ok([ - 'team' => \App\Http\Resources\CollectionTeamResource::make($team), - 'active_trip' => $trip ? \App\Http\Resources\TripResource::make($trip) : null, + 'team' => CollectionTeamResource::make($team), + 'active_trip' => $trip ? TripResource::make($trip) : null, ]); } public function scan(Request $request): JsonResponse { - \Illuminate\Support\Facades\Log::info("DEBUG: Entering ScannerController::scan"); + Log::info('DEBUG: Entering ScannerController::scan'); $data = $request->validate([ 'serial' => ['required', 'string', 'max:64'], 'drop_off_point_id' => ['required', 'integer', 'exists:drop_off_points,id'], @@ -62,7 +66,7 @@ class ScannerController extends ApiController $dop = DropOffPoint::findOrFail($data['drop_off_point_id']); $trip = isset($data['trip_id']) ? Trip::where('uuid', $data['trip_id'])->first() : null; $stop = isset($data['trip_stop_id']) ? TripStop::find($data['trip_stop_id']) : null; - \Illuminate\Support\Facades\Log::info("Scan attempt", ['serial' => $data['serial'] ?? 'none']); + Log::info('Scan attempt', ['serial' => $data['serial'] ?? 'none']); try { $result = $this->scanner->scan( @@ -80,14 +84,15 @@ class ScannerController extends ApiController scannedAt: isset($data['scanned_at']) ? Carbon::parse($data['scanned_at']) : null, ); } catch (\Throwable $e) { - \Illuminate\Support\Facades\Log::error("DEBUG: Scan Exception: " . $e->getMessage() . "\n" . $e->getTraceAsString()); + Log::error('DEBUG: Scan Exception: '.$e->getMessage()."\n".$e->getTraceAsString()); throw $e; } - \Illuminate\Support\Facades\Log::info("DEBUG: Scan completed", ['accepted' => $result->accepted, 'reason' => $result->rejectReason ?? 'none']); + Log::info('DEBUG: Scan completed', ['accepted' => $result->accepted, 'reason' => $result->rejectReason ?? 'none']); if (! $result->accepted) { - \Illuminate\Support\Facades\Log::warning("Scan rejected internally", ['serial' => $data['serial'], 'reason' => $result->rejectReason]); + Log::warning('Scan rejected internally', ['serial' => $data['serial'], 'reason' => $result->rejectReason]); + return $this->fail( 'Scan rejected', ['reason' => [$result->rejectReason]], @@ -100,7 +105,7 @@ class ScannerController extends ApiController 'log_id' => $result->log->id, 'status' => (string) $result->code->status, ]; - \Illuminate\Support\Facades\Log::info("Scan Response OK", $res); + Log::info('Scan Response OK', $res); return $this->ok($res, 'Scan recorded'); } diff --git a/app/Http/Controllers/Api/V1/Store/StorePortalController.php b/app/Http/Controllers/Api/V1/Store/StorePortalController.php index b8ec244..15d37f3 100644 --- a/app/Http/Controllers/Api/V1/Store/StorePortalController.php +++ b/app/Http/Controllers/Api/V1/Store/StorePortalController.php @@ -3,10 +3,16 @@ namespace App\Http\Controllers\Api\V1\Store; use App\Http\Controllers\Api\V1\ApiController; +use App\Models\Household; use App\Models\PartnerStore; +use App\Models\QrCode; +use App\Models\StoreInventoryAdjustment; use App\Models\StoreSale; use App\Models\User; use App\Services\Store\StoreOperations; +use App\States\QrCode\Active; +use Barryvdh\DomPDF\Facade\Pdf; +use Endroid\QrCode\Writer\PngWriter; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -20,13 +26,13 @@ class StorePortalController extends ApiController { /** @var User $user */ $user = auth()->user(); - + $store = PartnerStore::where('owner_user_id', $user->id)->first(); - - if (!$store) { + + if (! $store) { abort(403, 'No partner store associated with this account.'); } - + return $store; } @@ -37,7 +43,7 @@ class StorePortalController extends ApiController { $store = $this->getStore(); $inventory = $store->inventory; - + $data = [ 'business_name' => $store->business_name, 'inventory_balance' => $inventory ? (int) $inventory->current_code_balance : 0, @@ -55,12 +61,12 @@ class StorePortalController extends ApiController public function analytics(): JsonResponse { $store = $this->getStore(); - + // Sums $totalRetail = $store->sales()->sum('retail_price_centavos'); $totalWholesale = $store->purchases()->sum('wholesale_price_centavos'); $totalCommission = $store->sales()->sum('commission_centavos'); - + // Calculate settlement balance $totalSettled = $store->settlements()->sum('amount_centavos'); $amountOwed = ($totalRetail - $totalCommission) - $totalSettled; @@ -80,7 +86,7 @@ class StorePortalController extends ApiController public function recordSale(Request $request, StoreOperations $operations): JsonResponse { $store = $this->getStore(); - + $request->validate([ 'household_id' => 'required|exists:households,id', 'quantity' => 'required|integer|min:1', @@ -90,18 +96,18 @@ class StorePortalController extends ApiController try { $sale = $operations->sellToHousehold( $store, - \App\Models\Household::findOrFail($request->household_id), + Household::findOrFail($request->household_id), $request->quantity, config('qr.default_retail_price_per_code_centavos'), $request->serial_number ); // Fetch the serials that were just activated for this sale - $codes = \App\Models\QrCode::whereIn('id', $sale->id ? [$sale->id] : []) // Wait, StoreSale doesn't link to QrCode directly? + $codes = QrCode::whereIn('id', $sale->id ? [$sale->id] : []) // Wait, StoreSale doesn't link to QrCode directly? // I need to find the codes that were activated. // QrCode table has assigned_to_household_id. ->where('assigned_to_household_id', $request->household_id) - ->where('status', \App\States\QrCode\Active::$name) + ->where('status', Active::$name) ->latest('activated_at') ->limit($request->quantity) ->get(); @@ -110,16 +116,17 @@ class StorePortalController extends ApiController $qr = \Endroid\QrCode\QrCode::create($code->serial) ->setSize(300) ->setMargin(10); - $writer = new \Endroid\QrCode\Writer\PngWriter(); + $writer = new PngWriter; + return [ 'serial' => $code->serial, - 'qr_base64' => base64_encode($writer->write($qr)->getString()) + 'qr_base64' => base64_encode($writer->write($qr)->getString()), ]; }); return $this->created([ 'sale' => $sale, - 'codes' => $qrData + 'codes' => $qrData, ], 'Sale recorded successfully.'); } catch (\Exception $e) { return $this->fail($e->getMessage(), null, 422); @@ -132,7 +139,7 @@ class StorePortalController extends ApiController public function salesHistory(): JsonResponse { $store = $this->getStore(); - + $sales = $store->sales() ->with('household.head') ->latest() @@ -147,8 +154,8 @@ class StorePortalController extends ApiController public function inventoryHistory(): JsonResponse { $store = $this->getStore(); - - $history = \App\Models\StoreInventoryAdjustment::query() + + $history = StoreInventoryAdjustment::query() ->where('store_id', $store->id) ->with('user') ->latest() @@ -157,14 +164,14 @@ class StorePortalController extends ApiController return $this->ok($history); } - public function downloadReceipt(\App\Models\StoreSale $sale): Response + public function downloadReceipt(StoreSale $sale): Response { $this->authorize('view', $sale); $sale->load(['store', 'household.head', 'household.barangay']); - - $pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView('pdfs.receipt', [ - 'sale' => $sale + + $pdf = Pdf::loadView('pdfs.receipt', [ + 'sale' => $sale, ]); return $pdf->download("receipt-{$sale->id}.pdf"); @@ -181,27 +188,27 @@ class StorePortalController extends ApiController 'q' => 'required|string|min:2', ]); - $term = '%' . $request->string('q') . '%'; - - $households = \App\Models\Household::query() + $term = '%'.$request->string('q').'%'; + + $households = Household::query() ->with(['head', 'barangay']) ->where('tenant_id', $store->tenant_id) - ->where('verification_status', \App\Models\Household::VERIFICATION_APPROVED) - ->where(function($q) use ($term) { + ->where('verification_status', Household::VERIFICATION_APPROVED) + ->where(function ($q) use ($term) { $q->where('address_line', 'like', $term) - ->orWhereHas('head', function($h) use ($term) { - $h->where('first_name', 'like', $term) - ->orWhere('last_name', 'like', $term); - }) - ->orWhereHas('members', function($m) use ($term) { - $m->where('first_name', 'like', $term) - ->orWhere('last_name', 'like', $term); - }); + ->orWhereHas('head', function ($h) use ($term) { + $h->where('first_name', 'like', $term) + ->orWhere('last_name', 'like', $term); + }) + ->orWhereHas('members', function ($m) use ($term) { + $m->where('first_name', 'like', $term) + ->orWhere('last_name', 'like', $term); + }); }) ->limit(15) ->get(); - return $this->ok($households->map(fn($h) => [ + return $this->ok($households->map(fn ($h) => [ 'id' => $h->id, 'uuid' => $h->uuid, 'head_name' => $h->head?->full_name ?? 'Unknown Head', diff --git a/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminUserController.php b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminUserController.php index 21171c2..83e08cc 100644 --- a/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminUserController.php +++ b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminUserController.php @@ -6,6 +6,8 @@ use App\Http\Controllers\Api\V1\ApiController; use App\Http\Requests\SuperAdmin\StoreSuperAdminUserRequest; use App\Http\Resources\SuperAdmin\SuperAdminUserResource; use App\Models\NotificationPreference; +use App\Models\PartnerStore; +use App\Models\StoreInventory; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -87,15 +89,15 @@ class SuperAdminUserController extends ApiController // If store_partner, auto-create a shell store so they can access the dashboard if ($data['role'] === User::ROLE_STORE_PARTNER) { - $store = \App\Models\PartnerStore::create([ + $store = PartnerStore::create([ 'tenant_id' => $user->tenant_id, 'owner_user_id' => $user->id, - 'business_name' => $user->first_name . "'s Store", - 'status' => \App\Models\PartnerStore::STATUS_ACTIVE, + 'business_name' => $user->first_name."'s Store", + 'status' => PartnerStore::STATUS_ACTIVE, 'commission_rate_percent' => 10, // Default 10% ]); - \App\Models\StoreInventory::create([ + StoreInventory::create([ 'store_id' => $store->id, 'current_code_balance' => 0, ]); diff --git a/app/Http/Controllers/Store/StoreDashboardController.php b/app/Http/Controllers/Store/StoreDashboardController.php index ab1391d..3740f1f 100644 --- a/app/Http/Controllers/Store/StoreDashboardController.php +++ b/app/Http/Controllers/Store/StoreDashboardController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers\Store; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; class StoreDashboardController extends Controller { diff --git a/app/Http/Middleware/ResolveTenant.php b/app/Http/Middleware/ResolveTenant.php index f51ffb4..147d7da 100644 --- a/app/Http/Middleware/ResolveTenant.php +++ b/app/Http/Middleware/ResolveTenant.php @@ -37,6 +37,7 @@ class ResolveTenant $tenant = Tenant::where('code', strtoupper((string) $headerCode))->first(); if (! $tenant) { \Log::info("ResolveTenant: Header code not found: {$headerCode}"); + return response()->json([ 'success' => false, 'data' => null, @@ -48,7 +49,7 @@ class ResolveTenant } elseif ($headerId) { $tenant = Tenant::where('uuid', $headerId)->first(); if (! $tenant) { - \Log::info("ResolveTenant: Header ID not found: {$headerId}"); + \Log::info("ResolveTenant: Header ID not found: {$headerId}"); } } diff --git a/app/Http/Requests/Admin/StoreAdminHouseholdMemberRequest.php b/app/Http/Requests/Admin/StoreAdminHouseholdMemberRequest.php index 5fbf31f..7a03013 100644 --- a/app/Http/Requests/Admin/StoreAdminHouseholdMemberRequest.php +++ b/app/Http/Requests/Admin/StoreAdminHouseholdMemberRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Admin; use App\Models\HouseholdMember; +use App\Models\User; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -32,7 +33,7 @@ class StoreAdminHouseholdMemberRequest extends FormRequest 'nullable', 'integer', Rule::exists('users', 'id')->where(function ($query) { - $query->where('role', \App\Models\User::ROLE_RESIDENT); + $query->where('role', User::ROLE_RESIDENT); }), ], 'full_name' => [ diff --git a/app/Http/Requests/Household/StoreHouseholdMemberRequest.php b/app/Http/Requests/Household/StoreHouseholdMemberRequest.php index 1eec975..0b700ad 100644 --- a/app/Http/Requests/Household/StoreHouseholdMemberRequest.php +++ b/app/Http/Requests/Household/StoreHouseholdMemberRequest.php @@ -2,7 +2,7 @@ namespace App\Http\Requests\Household; -use App\Models\HouseholdMember; +use App\Models\User; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -20,7 +20,7 @@ class StoreHouseholdMemberRequest extends FormRequest 'required', 'email', Rule::exists('users', 'email')->where(function ($query) { - $query->where('role', \App\Models\User::ROLE_RESIDENT); + $query->where('role', User::ROLE_RESIDENT); }), ], 'date_of_birth' => ['nullable', 'date', 'before:today'], diff --git a/app/Http/Requests/Team/StoreTruckRequest.php b/app/Http/Requests/Team/StoreTruckRequest.php index b40a908..4efab12 100644 --- a/app/Http/Requests/Team/StoreTruckRequest.php +++ b/app/Http/Requests/Team/StoreTruckRequest.php @@ -23,7 +23,7 @@ class StoreTruckRequest extends FormRequest 'required', 'string', 'max:16', - Rule::unique('trucks', 'plate_number')->ignore($truckId)->whereNull('deleted_at') + Rule::unique('trucks', 'plate_number')->ignore($truckId)->whereNull('deleted_at'), ], 'model' => ['nullable', 'string', 'max:100'], 'capacity_kg' => ['nullable', 'integer', 'min:0'], diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 26a6229..e1dc063 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -2,6 +2,7 @@ namespace App\Http\Resources; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; @@ -35,7 +36,7 @@ class UserResource extends JsonResource return $ring ? $ring->getGeometries()->map(fn ($p) => ['lat' => $p->latitude, 'lng' => $p->longitude])->all() : null; })($this->tenant->boundary_polygon) : null, ] : null, - 'truck' => $this->role === \App\Models\User::ROLE_DRIVER && $this->relationLoaded('driverTeam') && $this->driverTeam?->truck ? new \App\Http\Resources\TruckResource($this->driverTeam->truck) : null, + 'truck' => $this->role === User::ROLE_DRIVER && $this->relationLoaded('driverTeam') && $this->driverTeam?->truck ? new TruckResource($this->driverTeam->truck) : null, ]; } } diff --git a/app/Models/CollectionTeam.php b/app/Models/CollectionTeam.php index abd81b6..a3b16ba 100644 --- a/app/Models/CollectionTeam.php +++ b/app/Models/CollectionTeam.php @@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\HasManyThrough; +use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Str; @@ -15,7 +17,9 @@ class CollectionTeam extends Model use HasFactory, HasTenant, SoftDeletes; public const STATUS_ACTIVE = 'active'; + public const STATUS_INACTIVE = 'inactive'; + public const STATUS_STANDBY = 'standby'; protected $fillable = [ @@ -72,24 +76,24 @@ class CollectionTeam extends Model return $this->hasMany(Trip::class, 'team_id'); } - public function currentTrip(): \Illuminate\Database\Eloquent\Relations\HasOne + public function currentTrip(): HasOne { return $this->hasOne(Trip::class, 'team_id') ->whereIn('status', [Trip::STATUS_IN_PROGRESS, Trip::STATUS_AT_DUMPSITE]); } - public function collectionLogs(): \Illuminate\Database\Eloquent\Relations\HasManyThrough + public function collectionLogs(): HasManyThrough { return $this->hasManyThrough(CollectionLog::class, Trip::class, 'team_id', 'trip_id'); } public function getIsFullAttribute(): bool { - // A team is considered "Full" if it has a Driver, a Scanner, + // A team is considered "Full" if it has a Driver, a Scanner, // and the number of helpers matches or exceeds the desired helper_count. $hasCore = $this->driver_id && $this->scanner_id; $helpersMet = $this->helpers()->count() >= ($this->helper_count ?: 2); - + return $hasCore && $helpersMet; } diff --git a/app/Models/DropOffPoint.php b/app/Models/DropOffPoint.php index 5eab5e0..e735d53 100644 --- a/app/Models/DropOffPoint.php +++ b/app/Models/DropOffPoint.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Str; use MatanYadaev\EloquentSpatial\Objects\Point; +use MatanYadaev\EloquentSpatial\Objects\Polygon; use MatanYadaev\EloquentSpatial\Traits\HasSpatial; class DropOffPoint extends Model @@ -44,7 +45,7 @@ class DropOffPoint extends Model { return [ 'coordinates' => Point::class, - 'geofence' => \MatanYadaev\EloquentSpatial\Objects\Polygon::class, + 'geofence' => Polygon::class, 'operating_hours' => 'array', 'accepted_waste_types' => 'array', 'capacity_kg' => 'integer', diff --git a/app/Models/StoreInventoryAdjustment.php b/app/Models/StoreInventoryAdjustment.php index f011b3f..7c77ea0 100644 --- a/app/Models/StoreInventoryAdjustment.php +++ b/app/Models/StoreInventoryAdjustment.php @@ -11,9 +11,13 @@ class StoreInventoryAdjustment extends Model use HasFactory; public const TYPE_PURCHASE = 'purchase'; + public const TYPE_SALE = 'sale'; + public const TYPE_DEFECTIVE = 'defective'; + public const TYPE_MANUAL = 'manual'; + public const TYPE_RETURN = 'return'; protected $fillable = [ diff --git a/app/Models/Trip.php b/app/Models/Trip.php index 31b2a67..e2f5d25 100644 --- a/app/Models/Trip.php +++ b/app/Models/Trip.php @@ -34,6 +34,7 @@ class Trip extends Model 'dumpsite_arrival_time', 'dumpsite_departure_time', 'status', 'is_detouring', 'total_load_kg', 'notes', 'created_by_admin_id', ]; + protected function casts(): array { return [