feat: Phase 1 bootstrap — adapt BukidBountyApp as BarangaySystem
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

- Replace UserTypes with barangay roles (super_admin, punong_barangay,
  kagawad, secretary, treasurer, sk_chairperson, sk_councilor, tanod,
  bhw, daycare_worker, staff, resident, audit)
- Replace UserActions with barangay-specific permissions (residents,
  households, blotters, documents, fee payments, projects, budget)
- Replace modules config with barangay modules (residents, households,
  blotters, documents, certificates, projects, budget, announcements,
  accounting, chapters, qr_payment, subscriptions, landing_pages)
- Update app name, seeders, and landing page to barangay defaults
- Add new enums: DocumentStatus, BlotterStatus, PaymentStatus
- Add 6 new migrations: residents, households, blotters, document
  requests, projects, budget
- Add RequestTypeSeeder with default certificate fee schedule
- Update README with BarangaySystem stack, roles, and remotes
This commit is contained in:
Jonathan Sykes
2026-06-06 18:47:20 +08:00
parent eb4a5731fb
commit 19fec0933b
19 changed files with 797 additions and 1096 deletions

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Enums\Barangay;
enum BlotterStatus: string
{
case FILED = 'FILED';
case FOR_HEARING = 'FOR_HEARING';
case SETTLED = 'SETTLED';
case RESOLVED = 'RESOLVED';
case DISMISSED = 'DISMISSED';
case ENDORSED = 'ENDORSED';
public function label(): string
{
return match($this) {
self::FILED => 'Filed',
self::FOR_HEARING => 'For Hearing',
self::SETTLED => 'Settled',
self::RESOLVED => 'Resolved',
self::DISMISSED => 'Dismissed',
self::ENDORSED => 'Endorsed to Higher Authority',
};
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Enums\Barangay;
enum DocumentStatus: string
{
case DRAFT = 'DRAFT';
case PENDING_PAYMENT = 'PENDING_PAYMENT';
case PAID = 'PAID';
case PROCESSING = 'PROCESSING';
case READY = 'READY';
case CLAIMED = 'CLAIMED';
case CANCELLED = 'CANCELLED';
public function label(): string
{
return match($this) {
self::DRAFT => 'Draft',
self::PENDING_PAYMENT => 'Pending Payment',
self::PAID => 'Paid',
self::PROCESSING => 'Processing',
self::READY => 'Ready for Pickup',
self::CLAIMED => 'Claimed',
self::CANCELLED => 'Cancelled',
};
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Enums\Barangay;
enum PaymentStatus: string
{
case PENDING = 'PENDING';
case PAID = 'PAID';
case REFUNDED = 'REFUNDED';
case WAIVED = 'WAIVED';
public function label(): string
{
return match($this) {
self::PENDING => 'Pending',
self::PAID => 'Paid',
self::REFUNDED => 'Refunded',
self::WAIVED => 'Waived',
};
}
}

View File

@@ -1,30 +1,40 @@
<?php
namespace App\Enums;
enum UserActions: string
{
// User management
case DeleteUser = 'deleteuser';
case ModifyUser = 'modifyuser';
case SetActiveUser = 'setactiveuser';
case SetInActiveUser = 'setinactiveuser';
case CreateUser = 'createuser';
case CreateUserUltimate = 'createuserultimate';
case CreateUserSuperOperator = 'createusersuperoperator';
case CreateUserOperator = 'createuseroperator';
case CreateUserCoordinator = 'createusercoordinator';
case CreateUserSupplierOverseer = 'createusersupplieroverseer';
case CreateUserWholesaleBuyer = 'createuserwholesalebuyer';
case CreateUserSupplier = 'createusersupplier';
case CreateUserStoreOwner = 'createuserstoreowner';
case CreateUserStoreManager = 'createuserstoremanager';
case CreateUserUser = 'createuseruser';
case CreateUserRider = 'createuserrider';
case CreateUserSuperAdmin = 'createusersuperadmin';
case CreateUserPunongBarangay = 'createuserpunongbarangay';
case CreateUserKagawad = 'createuserkagawad';
case CreateUserSecretary = 'createusersecretary';
case CreateUserTreasurer = 'createusertreasurer';
case CreateUserSkChairperson = 'createuserskchairperson';
case CreateUserSkCouncilor = 'createuserskcouncilor';
case CreateUserTanod = 'createusertanod';
case CreateUserBhw = 'createuserbhw';
case CreateUserDaycareWorker = 'createuserdaycareworker';
case CreateUserStaff = 'createuserstaff';
case CreateUserResident = 'createuserresident';
case CreateUserAudit = 'createuseraudit';
case CreateUserPOSTerminal = 'createuserposterminal';
// Console access
case DeveloperConsole = 'devconsole';
case UltimateConsole = 'ultconsole';
case UltimateLogs = 'ultlogs';
case UltimateReports = 'ultreports';
case UltimateMaintenance = 'ultmaintenance';
case UltimateQuery = 'ultquery';
case UltimateGlobalMessage = 'ultglobalmessage';
case UltimateFlush = 'ultflush';
// User notes/exec
case SetUserNotes = 'setusernotes';
case DeleteUserNotes = 'deleteusernotes';
case ViewUserNotes = 'viewusernotes';
@@ -35,21 +45,17 @@ enum UserActions: string
case ViewSelfExec = 'viewselfexec';
case DeleteSelfNotes = 'delteselfnotes';
case UpdateSelfExec = 'updateselfexec';
// Reports & roles
case ViewGlobalReports = 'viewglobalreports';
case ModifyGlobalReports = 'modifyglobalreports';
case DeleteGlobalReports = 'deleteglobalreports';
case ChangeUserPassword = 'changeuserpassword';
case DirectUserCreditTransfer = 'directusercredittransfer';
case ForceLogoutUser = 'forcelogoutuser';
case UserAllowedtoChangeAnotherUserRoles = 'userchangeroles';
case UserAllowedtoViewSelfRoles = 'selfviewroles';
case UserAllowedtoViewOtherUserRoles = 'userviewroles';
case UserAllowedtoViewAllRoles = 'viewallroles';
case ChangeAnotherUsersParent = 'changeotherusersparents';
case ViewAllUserTypes = 'viewallusertypes';
case ListAllUsersAsParentforUserCreation = 'listallusersasparentforUserCreation';
@@ -57,88 +63,64 @@ enum UserActions: string
case CheckifMobileNumberExists = 'checkifmobilenumberexists';
case BypassMobileNumberFormat = 'bypassmobilenumberformat';
case CreateStoreforSelf = 'createstoreforself';
case CreateProductforSelf = 'createproductforself';
case CreateStoreGlobal = 'createstoreglobal';
case CreateProductGlobal = 'createproductglobal';
case CreateProductForOwnStore = 'createproductforownstore';
case ViewOwnStores = 'viewownstores';
case ViewAllStores = 'viewallstores';
case ViewAllProducts = 'viewallproducts';
case ViewOwnProducts = 'viewownproducts';
case ModifyOwnStore = 'modifyownstore';
case ModifyOwnProduct = 'modifyownproduct';
case AddProducttoOwnStore = 'addproducttoownstore';
case DeleteOwnStore = 'deleteownstore';
case DeleteOwnProduct = 'deleteownproduct';
case ModifyAllStores = 'modifyallstores';
case ModifyAllProducts = 'modifyallproducts';
case DeleteAllStores = 'deleteallstores';
case DeleteAllProducts = 'deleteallproducts';
// Files
case UploadAllFiles = 'uploadallfiles';
case ViewAllFiles = 'viewallfiles';
case DeleteAllFiles = 'deleteallfiles';
case ModifyAllFiles = 'modifyallfiles';
case AddProducttoAnyStore = 'addproducttoanystore';
case RemoveProductfromAnyStore = 'removeproductfromanystore';
// Announcements
case CreateAnnouncement = 'createannouncement';
case ModifyAnnouncement = 'modifyannouncement';
case DeleteAnnouncement = 'deleteannouncement';
case ViewAllAnnouncements = 'viewallannouncements';
case ViewFarmers = 'viewfarmers';
case VerifyFarmer = 'verifyfarmer';
case CreateOrganization = 'createorganization';
case ViewOrganizations = 'vieworganizations';
case ViewShipments = 'viewshipments';
case CreateShipment = 'createshipment';
case UpdateShipmentStatus = 'updateshipmentstatus';
case CreateCourier = 'createcourier';
case ViewCouriers = 'viewcouriers';
case ViewGlobalTransactions = 'viewglobaltransactions';
case CreateGlobalTransaction = 'createglobaltransaction';
case ViewAccountingReports = 'viewaccountingreports';
case ManageAccounting = 'manageaccounting';
case ViewProperties = 'viewproperties';
case ViewReferrals = 'viewreferrals';
case ViewPosAccessKeys = 'viewposaccesskeys';
case CreatePosAccessKey = 'createposaccesskey';
case DeletePosAccessKey = 'deleteposaccesskey';
case TogglePosAccessKey = 'toggleposaccesskey';
case ViewPosReports = 'viewposreports';
case ViewCustomers = 'viewcustomers';
case ManageOrganizations = 'manageorganizations';
case JoinCooperative = 'joincooperative';
// User info & settings
case ViewUserInfo = 'viewuserinfo';
case ManageUserInfo = 'manageuserinfo';
case UltimateMaintenance = 'ultmaintenance';
case UltimateQuery = 'ultquery';
case UltimateBatch = 'ultbatch';
case UltimateGlobalMessage = 'ultglobalmessage';
case UltimateFlush = 'ultflush';
case ManageLandingPages = 'managelandingpages';
case CreateResolution = 'createresolution';
case VoteResolution = 'voteresolution';
case ViewResolutions = 'viewresolutions';
// QR PH Payment
case ManageQrphPaymentCode = 'manageqrphpaymentcode';
case SearchStockPhotos = 'searchstockphotos';
case DownloadStockPhoto = 'downloadstockphoto';
// Chapters / Geography
case ViewChapterOrgChart = 'viewchapterorgchart';
case ManageChapterMembers = 'managechaptermembers';
case ViewScopedMemberReports = 'viewscopedmemberreports';
case AssignChapterOfficer = 'assignchapterofficer';
}
// Accounting
case ViewAccountingReports = 'viewaccountingreports';
case ManageAccounting = 'manageaccounting';
// Barangay residents & households
case ViewResidents = 'viewresidents';
case ManageResidents = 'manageresidents';
case ImportResidents = 'importresidents';
case ExportResidents = 'exportresidents';
case ViewHouseholds = 'viewhouseholds';
case ManageHouseholds = 'managehouseholds';
// Barangay documents & certificates
case ViewDocumentRequests = 'viewdocumentrequests';
case CreateDocumentRequest = 'createdocumentrequest';
case ProcessDocumentRequest = 'processdocumentrequest';
case ManageRequestTypes = 'managerequesttypes';
case ManageFeeSchedules = 'managefeeschedules';
// Blotter / Incident
case ViewBlotters = 'viewblotters';
case CreateBlotter = 'createblotter';
case ProcessBlotter = 'processblotter';
case ManageBlotterHearings = 'manageblotterhearings';
// Barangay projects & budget
case ViewBarangayProjects = 'viewbarangayprojects';
case ManageBarangayProjects = 'managebarangayprojects';
case ViewBarangayBudget = 'viewbarangaybudget';
case ManageBarangayBudget = 'managebarangaybudget';
// Fee payments
case ViewFeePayments = 'viewfeepayments';
case ManageFeePayments = 'managefeepayments';
}

View File

@@ -4,23 +4,20 @@ namespace App\Enums;
enum UserTypes: string
{
case ULTIMATE = 'ult';
case SUPER_OPERATOR = 'super operator';
case OPERATOR = 'operator';
case COORDINATOR = 'coordinator';
case COOP_OFFICER = 'coop officer';
case COOP_MEMBER = 'coop member';
case SUPPLIER_OVERSEER = 'supplier overseer';
case WHOLESALE_BUYER = 'wholesale buyer';
case SUPPLIER = 'supplier';
case STORE_OWNER = 'store owner';
case STORE_MANAGER = 'store manager';
case USER = 'user';
case RIDER = 'rider';
case SUPER_ADMIN = 'super_admin';
case PUNONG_BARANGAY = 'punong_barangay';
case BARANGAY_KAGAWAD = 'kagawad';
case SECRETARY = 'secretary';
case TREASURER = 'treasurer';
case SK_CHAIRPERSON = 'sk_chairperson';
case SK_COUNCILOR = 'sk_councilor';
case BARANGAY_TANOD = 'tanod';
case BHW = 'bhw';
case DAYCARE_WORKER = 'daycare_worker';
case STAFF = 'staff';
case RESIDENT = 'resident';
case AUDIT = 'audit';
case POS_TERMINAL = 'pos terminal';
case ANY_USER = 'default';
case PUBLIC = 'public';
}