Add phone login support and member import functionality
Features: - Support login via phone number or email (LoginRequest) - Add members:import-roster command for Excel roster import - Merge survey emails with roster data Code Quality (Phase 1-4): - Add database locking for balance calculation - Add self-approval checks for finance workflow - Create service layer (FinanceDocumentApprovalService, PaymentVerificationService) - Add HasAccountingEntries and HasApprovalWorkflow traits - Create FormRequest classes for validation - Add status-badge component - Define authorization gates in AuthServiceProvider - Add accounting config file Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
64
app/Http/Requests/StoreIssueRequest.php
Normal file
64
app/Http/Requests/StoreIssueRequest.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use App\Models\Issue;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StoreIssueRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return $this->user()->can('create_issues') || $this->user()->hasRole('admin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'title' => ['required', 'string', 'max:255'],
|
||||
'description' => ['nullable', 'string'],
|
||||
'issue_type' => ['required', Rule::in([
|
||||
Issue::TYPE_WORK_ITEM,
|
||||
Issue::TYPE_PROJECT_TASK,
|
||||
Issue::TYPE_MAINTENANCE,
|
||||
Issue::TYPE_MEMBER_REQUEST,
|
||||
])],
|
||||
'priority' => ['required', Rule::in([
|
||||
Issue::PRIORITY_LOW,
|
||||
Issue::PRIORITY_MEDIUM,
|
||||
Issue::PRIORITY_HIGH,
|
||||
Issue::PRIORITY_URGENT,
|
||||
])],
|
||||
'assigned_to_user_id' => ['nullable', 'exists:users,id'],
|
||||
'member_id' => ['nullable', 'exists:members,id'],
|
||||
'parent_issue_id' => ['nullable', 'exists:issues,id'],
|
||||
'due_date' => ['nullable', 'date'],
|
||||
'estimated_hours' => ['nullable', 'numeric', 'min:0'],
|
||||
'labels' => ['nullable', 'array'],
|
||||
'labels.*' => ['exists:issue_labels,id'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom messages for validator errors.
|
||||
*/
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'title.required' => __('Title is required.'),
|
||||
'issue_type.required' => __('Issue type is required.'),
|
||||
'issue_type.in' => __('Invalid issue type.'),
|
||||
'priority.required' => __('Priority is required.'),
|
||||
'priority.in' => __('Invalid priority level.'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user