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
79 lines
2.0 KiB
PHP
79 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Models\Barangay;
|
|
|
|
use App\Models\Model;
|
|
use App\Enums\Barangay\DocumentStatus;
|
|
use App\Enums\Barangay\PaymentStatus;
|
|
use Hypervel\Database\Eloquent\SoftDeletes;
|
|
|
|
class DocumentRequest extends Model
|
|
{
|
|
use SoftDeletes;
|
|
|
|
protected ?string $table = 'barangay_document_requests';
|
|
|
|
protected array $fillable = [
|
|
'hashkey', 'request_no', 'resident_user_id', 'request_type_id',
|
|
'purpose', 'fee_amount', 'payment_status', 'payment_method',
|
|
'payment_ref', 'qrph_code', 'status',
|
|
'requested_by', 'processed_by', 'claimed_at', 'notes',
|
|
];
|
|
|
|
protected array $casts = [
|
|
'fee_amount' => 'decimal:2',
|
|
'status' => DocumentStatus::class,
|
|
'payment_status' => PaymentStatus::class,
|
|
'claimed_at' => 'datetime',
|
|
];
|
|
|
|
public function requestType()
|
|
{
|
|
return $this->belongsTo(RequestType::class, 'request_type_id');
|
|
}
|
|
|
|
public function resident()
|
|
{
|
|
return $this->belongsTo(\App\Models\User::class, 'resident_user_id');
|
|
}
|
|
|
|
public function processedBy()
|
|
{
|
|
return $this->belongsTo(\App\Models\User::class, 'processed_by');
|
|
}
|
|
|
|
public function requestedBy()
|
|
{
|
|
return $this->belongsTo(\App\Models\User::class, 'requested_by');
|
|
}
|
|
|
|
public function payments()
|
|
{
|
|
return $this->hasMany(RequestPayment::class, 'request_id');
|
|
}
|
|
|
|
public function latestPayment()
|
|
{
|
|
return $this->payments()->latest()->first();
|
|
}
|
|
|
|
public static function generateRequestNo(): string
|
|
{
|
|
$year = date('Y');
|
|
$count = static::whereYear('created_at', $year)->count() + 1;
|
|
return sprintf('REQ-%s-%05d', $year, $count);
|
|
}
|
|
|
|
public function scopePending($query)
|
|
{
|
|
return $query->whereIn('status', [DocumentStatus::DRAFT, DocumentStatus::PENDING_PAYMENT]);
|
|
}
|
|
|
|
public function scopeForProcessing($query)
|
|
{
|
|
return $query->where('status', DocumentStatus::PAID);
|
|
}
|
|
}
|