diff --git a/app/Http/Controllers/Api/V1/Admin/AdminBarangayController.php b/app/Http/Controllers/Api/V1/Admin/AdminBarangayController.php index 3bf02b7..3645005 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminBarangayController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminBarangayController.php @@ -31,6 +31,7 @@ class AdminBarangayController extends ApiController $barangays = Barangay::query() ->with(['cityMunicipality.province']) + ->withSum('households', 'household_size') ->where('city_municipality_id', $cityId) ->when($request->filled('q'), function ($q) use ($request) { $term = '%'.$request->string('q').'%'; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php b/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php index 2adc4a3..b8fabc0 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminDropOffPointController.php @@ -33,7 +33,7 @@ class AdminDropOffPointController extends ApiController $perPage = (int) $request->input('per_page', 25); $points = DropOffPoint::query() - ->with('barangay') + ->with(['barangay', 'tenant']) ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('barangay_id'), fn ($q) => $q->where('barangay_id', $request->integer('barangay_id'))) ->when($request->filled('q'), function ($q) use ($request) { diff --git a/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php b/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php index aef4a80..2bd6e09 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminDumpsiteController.php @@ -30,7 +30,7 @@ class AdminDumpsiteController extends ApiController $perPage = (int) $request->input('per_page', 25); $dumpsites = Dumpsite::query() - ->with('cityMunicipality') + ->with(['cityMunicipality', 'tenant']) ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when( $request->filled('city_municipality_id'), diff --git a/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php b/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php index 14d0e1b..d7a836e 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminHouseholdController.php @@ -44,7 +44,7 @@ class AdminHouseholdController extends ApiController $perPage = (int) $request->input('per_page', 25); $households = Household::query() - ->with(['head', 'barangay.serviceAreas']) + ->with(['head', 'barangay.cityMunicipality', 'barangay.serviceAreas', 'assignedDropOffPoint', 'tenant']) ->withCount('members') ->when( $request->filled('verification_status'), diff --git a/app/Http/Controllers/Api/V1/Admin/AdminRouteController.php b/app/Http/Controllers/Api/V1/Admin/AdminRouteController.php index f5790f5..7d672df 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminRouteController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminRouteController.php @@ -30,7 +30,7 @@ class AdminRouteController extends ApiController $perPage = (int) $request->input('per_page', 25); $routes = Route::query() - ->with(['area', 'defaultDumpsite']) + ->with(['area', 'defaultDumpsite', 'tenant']) ->withCount('stops') ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('area_id'), fn ($q) => $q->where('area_id', $request->integer('area_id'))) diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php b/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php index 50cde36..9712784 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTeamController.php @@ -28,7 +28,7 @@ class AdminTeamController extends ApiController $perPage = (int) $request->input('per_page', 25); $teams = CollectionTeam::query() - ->with(['area', 'driver', 'scanner', 'truck', 'helpers.user', 'currentTrip']) + ->with(['area', 'driver', 'scanner', 'truck', 'helpers.user', 'currentTrip', 'tenant']) ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('area_id'), fn ($q) => $q->where('area_id', $request->integer('area_id'))) ->when($request->filled('q'), fn ($q) => $q->where('name', 'like', '%'.$request->string('q').'%')) diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTripController.php b/app/Http/Controllers/Api/V1/Admin/AdminTripController.php index 2584c2e..e09c810 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTripController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTripController.php @@ -30,7 +30,7 @@ class AdminTripController extends ApiController $perPage = (int) $request->input('per_page', 25); $trips = Trip::query() - ->with(['route', 'team', 'truck', 'dumpsite']) + ->with(['route', 'team', 'truck', 'dumpsite', 'tenant']) ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('date'), fn ($q) => $q->whereDate('scheduled_date', $request->string('date'))) ->when($request->filled('team_id'), fn ($q) => $q->where('team_id', $request->integer('team_id'))) diff --git a/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php b/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php index a902769..d74952c 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php @@ -25,6 +25,7 @@ class AdminTruckController extends ApiController $perPage = (int) $request->input('per_page', 25); $trucks = Truck::query() + ->with('tenant') ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('q'), function ($q) use ($request) { $term = '%'.$request->string('q').'%'; diff --git a/app/Http/Controllers/Api/V1/Admin/AdminUserController.php b/app/Http/Controllers/Api/V1/Admin/AdminUserController.php index 319e9c6..ffbb3fb 100644 --- a/app/Http/Controllers/Api/V1/Admin/AdminUserController.php +++ b/app/Http/Controllers/Api/V1/Admin/AdminUserController.php @@ -74,7 +74,7 @@ class AdminUserController extends ApiController ->orderByDesc('id') ->paginate($perPage); - $users->load(['residentProfile', 'driverProfile', 'helperProfile', 'scannerProfile', 'storePartnerProfile']); + $users->load(['residentProfile', 'driverProfile', 'helperProfile', 'scannerProfile', 'storePartnerProfile', 'tenant']); return $this->ok( UserDetailResource::collection($users), diff --git a/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminBarangayController.php b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminBarangayController.php index 4deaa77..55365f1 100644 --- a/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminBarangayController.php +++ b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminBarangayController.php @@ -30,6 +30,7 @@ class SuperAdminBarangayController extends ApiController $barangays = Barangay::query() ->with(['cityMunicipality.province']) + ->withSum('households', 'household_size') ->when($request->filled('city_municipality_id'), fn ($q) => $q->where('city_municipality_id', $request->integer('city_municipality_id'))) ->when($request->filled('q'), function ($q) use ($request) { $term = '%'.$request->string('q').'%'; diff --git a/app/Http/Resources/BarangayResource.php b/app/Http/Resources/BarangayResource.php index 4714ac4..59c07ad 100644 --- a/app/Http/Resources/BarangayResource.php +++ b/app/Http/Resources/BarangayResource.php @@ -27,6 +27,7 @@ class BarangayResource extends JsonResource 'name' => $this->name, 'urban_rural' => $this->urban_rural, 'population' => $this->population, + 'total_residents' => $this->households_sum_household_size ?? 0, 'city_municipality_id' => $this->city_municipality_id, 'centroid' => $this->centroid ? [ 'lat' => $this->centroid->latitude, diff --git a/app/Http/Resources/CollectionTeamResource.php b/app/Http/Resources/CollectionTeamResource.php index 25ff228..4e8e6ab 100644 --- a/app/Http/Resources/CollectionTeamResource.php +++ b/app/Http/Resources/CollectionTeamResource.php @@ -40,6 +40,10 @@ class CollectionTeamResource extends JsonResource 'performance_stats' => $this->getPerformanceStats(), 'current_trip' => TripResource::make($this->whenLoaded('currentTrip')), 'notes' => $this->notes, + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), 'created_at' => $this->created_at?->toIso8601String(), ]; } diff --git a/app/Http/Resources/DropOffPointResource.php b/app/Http/Resources/DropOffPointResource.php index 64c52b5..3a26b3c 100644 --- a/app/Http/Resources/DropOffPointResource.php +++ b/app/Http/Resources/DropOffPointResource.php @@ -31,6 +31,10 @@ class DropOffPointResource extends JsonResource isset($this->distance_meters), fn () => round((float) $this->distance_meters, 1), ), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), 'barangay' => BarangayResource::make($this->whenLoaded('barangay')), ]; } diff --git a/app/Http/Resources/DumpsiteResource.php b/app/Http/Resources/DumpsiteResource.php index 60b52b3..27559ed 100644 --- a/app/Http/Resources/DumpsiteResource.php +++ b/app/Http/Resources/DumpsiteResource.php @@ -39,6 +39,10 @@ class DumpsiteResource extends JsonResource 'contact_person' => $this->contact_person, 'contact_phone' => $this->contact_phone, 'city_municipality' => CityMunicipalityResource::make($this->whenLoaded('cityMunicipality')), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), 'created_at' => $this->created_at?->toIso8601String(), ]; } diff --git a/app/Http/Resources/HouseholdResource.php b/app/Http/Resources/HouseholdResource.php index 03c12e7..d4a3362 100644 --- a/app/Http/Resources/HouseholdResource.php +++ b/app/Http/Resources/HouseholdResource.php @@ -34,6 +34,10 @@ class HouseholdResource extends JsonResource 'member_count' => $this->whenCounted('members'), 'created_at' => $this->created_at?->toIso8601String(), 'updated_at' => $this->updated_at?->toIso8601String(), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), ]; } } diff --git a/app/Http/Resources/RouteResource.php b/app/Http/Resources/RouteResource.php index bb15edd..c819d75 100644 --- a/app/Http/Resources/RouteResource.php +++ b/app/Http/Resources/RouteResource.php @@ -23,6 +23,10 @@ class RouteResource extends JsonResource 'default_team_id' => $this->default_team_id, 'stops' => RouteStopResource::collection($this->whenLoaded('stops')), 'stop_count' => $this->whenCounted('stops'), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), 'created_at' => $this->created_at?->toIso8601String(), ]; } diff --git a/app/Http/Resources/TripResource.php b/app/Http/Resources/TripResource.php index cc7bea9..02d10d9 100644 --- a/app/Http/Resources/TripResource.php +++ b/app/Http/Resources/TripResource.php @@ -50,6 +50,10 @@ class TripResource extends JsonResource 'dumpsite_attendant' => $r->dumpsite_attendant_name, 'notes' => $r->notes, ])), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), 'created_at' => $this->created_at?->toIso8601String(), ]; } diff --git a/app/Http/Resources/TruckResource.php b/app/Http/Resources/TruckResource.php index bfb6577..d2cb58b 100644 --- a/app/Http/Resources/TruckResource.php +++ b/app/Http/Resources/TruckResource.php @@ -22,6 +22,10 @@ class TruckResource extends JsonResource 'lng' => $this->last_known_coordinates->longitude, ] : null, 'last_location_updated_at' => $this->last_location_updated_at?->toIso8601String(), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), ]; } } diff --git a/app/Http/Resources/UserDetailResource.php b/app/Http/Resources/UserDetailResource.php index 96b0e47..ec5b212 100644 --- a/app/Http/Resources/UserDetailResource.php +++ b/app/Http/Resources/UserDetailResource.php @@ -31,6 +31,10 @@ class UserDetailResource extends JsonResource 'created_at' => $this->created_at?->toIso8601String(), 'profile' => $profile?->toArray(), 'has_household' => $this->headedHousehold()->exists() || $this->householdMemberships()->exists(), + 'tenant' => $this->whenLoaded('tenant', fn () => [ + 'id' => $this->tenant->id, + 'name' => $this->tenant->name, + ]), ]; } } diff --git a/app/Models/Barangay.php b/app/Models/Barangay.php index d61ce1b..d22cf47 100644 --- a/app/Models/Barangay.php +++ b/app/Models/Barangay.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use MatanYadaev\EloquentSpatial\Objects\Point; use MatanYadaev\EloquentSpatial\Objects\Polygon; @@ -50,4 +51,9 @@ class Barangay extends Model return $this->belongsToMany(ServiceArea::class, 'service_area_barangay') ->withTimestamps(); } + + public function households(): HasMany + { + return $this->hasMany(Household::class); + } } diff --git a/resources/views/admin/barangays.blade.php b/resources/views/admin/barangays.blade.php index 173f604..90d7b1d 100644 --- a/resources/views/admin/barangays.blade.php +++ b/resources/views/admin/barangays.blade.php @@ -39,7 +39,7 @@
${window.Verde.escapeHtml(t.area?.name || 'No Area')}
+${window.Verde.escapeHtml(t.area?.name || 'No Area')} • ${window.Verde.escapeHtml(t.tenant?.name || 'N/A')}