feat: implement drop-off points & dumpsites edit/delete and status transition logic

This commit is contained in:
Super Admin
2026-06-29 23:15:55 +08:00
parent f2c1573f00
commit cfd7166a24
6 changed files with 355 additions and 33 deletions

View File

@@ -7,6 +7,7 @@ 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 Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use MatanYadaev\EloquentSpatial\Objects\LineString;
@@ -102,7 +103,25 @@ class AdminDumpsiteController extends ApiController
}
}
$dumpsite->update($payload);
$oldStatus = $dumpsite->status;
$newStatus = $payload['status'] ?? $oldStatus;
DB::transaction(function () use ($dumpsite, $payload, $oldStatus, $newStatus) {
$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])
->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."),
]);
}
}
});
return $this->ok(
new DumpsiteResource($dumpsite->fresh()->load('cityMunicipality')),