feat: implement barangay system phases 2-14
Some checks failed
tests / PHP 8.2 (swoole-5.1.6) (push) Has been cancelled
tests / PHP 8.3 (swoole-5.1.6) (push) Has been cancelled
tests / PHP 8.4 (swoole-6.0) (push) Has been cancelled

Complete adaptation from BukidBountyApp to Philippine barangay governance:

- Barangay models: Resident, Household, HouseholdMember, Blotter, BlotterHearing,
  DocumentRequest, RequestPayment, RequestType, BarangayProject, BarangayBudget
- Controllers: ResidentController, HouseholdController, BlotterController,
  BlotterHearingController, DocumentRequestController, RequestTypeController,
  ProjectController, BudgetController, QRPHController, AdminConsoleController,
  UserController, FileController, ChapterController, LoginController
- Vue pages: Home, ManageResidents, ResidentProfile, ManageHouseholds, ManageBlotters,
  BlotterDetail, RequestDocument, ManageDocumentRequests, DocumentRequestDetail,
  ManageRequestTypes, ManageProjects, BudgetLedger, AdminConsole
- Barangay roles: PunongBarangay, Kagawad, Secretary, Treasurer, SK, Tanod, BHW, Staff, Resident
- UserPermissions matrix rewritten with barangay-specific permission mappings
- VueRouteMap replaced with barangay SPA routes
- UserActions enum references corrected across all controllers
- Removed all market/cooperative/POS/subscription code and models
This commit is contained in:
Jonathan Sykes
2026-06-07 03:09:09 +08:00
parent 19fec0933b
commit fbb7e3ff37
234 changed files with 5582 additions and 39457 deletions

View File

@@ -0,0 +1,77 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Barangay;
use App\Enums\UserActions;
use App\Http\Controllers\Helpers\Permissions\UserPermissions;
use App\Http\Controllers\Helpers\ResponseHelper;
use App\Models\Barangay\Blotter;
use App\Models\Barangay\BlotterHearing;
use Hypervel\Http\Request;
use Hypervel\Support\Facades\Auth;
use Hypervel\Support\Facades\Validator;
class BlotterHearingController
{
private function checkWrite(): bool
{
return UserPermissions::isActionPermitted(Auth::user()->acct_type, UserActions::ManageBlotterHearings);
}
public function index(Request $request)
{
$blotter = Blotter::where('hashkey', $request->input('blotter'))->first();
if (!$blotter) return ResponseHelper::returnError('Blotter not found', 404);
$hearings = BlotterHearing::with('officer')
->where('blotter_id', $blotter->id)
->orderBy('hearing_date')
->get();
return response()->json(['success' => true, 'data' => $hearings]);
}
public function schedule(Request $request)
{
if (!$this->checkWrite()) return ResponseHelper::returnUnauthorized();
$validator = Validator::make($request->all(), [
'blotter' => 'required|string',
'hearing_date' => 'required|date',
'officer_id' => 'nullable|integer|exists:users,id',
'notes' => 'nullable|string',
]);
if ($validator->fails()) {
return response()->json(['success' => false, 'errors' => $validator->errors()], 422);
}
$blotter = Blotter::where('hashkey', $request->input('blotter'))->first();
if (!$blotter) return ResponseHelper::returnError('Blotter not found', 404);
$hearing = BlotterHearing::create([
'blotter_id' => $blotter->id,
'hearing_date' => $request->input('hearing_date'),
'status' => 'SCHEDULED',
'officer_id' => $request->input('officer_id', $blotter->assigned_officer_id),
'notes' => $request->input('notes'),
]);
return response()->json(['success' => true, 'data' => $hearing, 'message' => 'Hearing scheduled']);
}
public function update(Request $request)
{
if (!$this->checkWrite()) return ResponseHelper::returnUnauthorized();
$hearing = BlotterHearing::find($request->input('hearing_id'));
if (!$hearing) return ResponseHelper::returnError('Hearing not found', 404);
$data = $request->only(['status', 'notes', 'resolution', 'next_hearing_date']);
$hearing->update($data);
return response()->json(['success' => true, 'data' => $hearing, 'message' => 'Hearing updated']);
}
}