|
@@ -0,0 +1,78 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Requests\API\Project;
|
|
|
+
|
|
|
+use App\Models\Asset;
|
|
|
+use App\Models\Enums\AssetStatus;
|
|
|
+use App\Models\Plan;
|
|
|
+use App\Models\User;
|
|
|
+use Illuminate\Foundation\Http\FormRequest;
|
|
|
+use Illuminate\Support\Facades\Auth;
|
|
|
+use Illuminate\Validation\Rule;
|
|
|
+use Illuminate\Validation\Rules\Enum;
|
|
|
+
|
|
|
+class CreateOrUpdateRequest extends FormRequest
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * Determine if the user is authorized to make this request.
|
|
|
+ */
|
|
|
+ public function authorize(): bool
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get the validation rules that apply to the request.
|
|
|
+ *
|
|
|
+ * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
|
|
+ */
|
|
|
+ public function rules(): array
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ 'name' => 'required|max:150',
|
|
|
+ 'code' => [
|
|
|
+ 'required',
|
|
|
+ 'max:50',
|
|
|
+ ],
|
|
|
+ 'const' => 'numeric',
|
|
|
+ 'begin' => 'date',
|
|
|
+ 'end' => 'date',
|
|
|
+ 'type' => 'required|max:20',
|
|
|
+ 'acl' => 'required|in:private,custom',
|
|
|
+ 'whitelist' => [
|
|
|
+ 'array',
|
|
|
+ function ($attribute, $value, $fail) {
|
|
|
+ $userCount = User::where("company_id", Auth::user()->company_id)->whereIn('id', $value)->count();
|
|
|
+ if ($userCount != count($value)) {
|
|
|
+ $fail('The selected user is invalid.');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ 'plans' => [
|
|
|
+ 'array',
|
|
|
+ function ($attribute, $value, $fail) {
|
|
|
+ $count = Plan::where("company_id", Auth::user()->company_id)->whereIn('id', $value)->count();
|
|
|
+ if ($count != count($value)) {
|
|
|
+ $fail('The selected plan is invalid.');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ 'assets' => [
|
|
|
+ 'array',
|
|
|
+ function ($attribute, $value, $fail) {
|
|
|
+ $count = Asset::query()
|
|
|
+ ->leftJoin("project_asset", "assets.id", "=", "project_asset.asset_id")
|
|
|
+ ->where("company_id", Auth::user()->company_id)
|
|
|
+ ->whereNull("project_asset.id")
|
|
|
+ ->whereIn('assets.id', $value)->count();
|
|
|
+
|
|
|
+ if ($count != count($value)) {
|
|
|
+ $fail('The selected asset is invalid.');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ 'latitude' => 'numeric',
|
|
|
+ 'longitude' => 'numeric',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+}
|