At this stage your HRMS is already beyond a basic attendance system. The next two major modules are:

# 1. Asset Management Module

Create folder:

```text
/assets/
```

Files:

```text
asset_types.php
assets.php
asset_assign.php
asset_return.php
asset_history.php
my_assets.php
```

---

# SQL TABLES

## assets

```sql
CREATE TABLE assets (

id INT AUTO_INCREMENT PRIMARY KEY,

asset_tag VARCHAR(100) UNIQUE,

asset_name VARCHAR(255),

asset_type VARCHAR(100),

serial_number VARCHAR(255),

purchase_date DATE,

purchase_cost DECIMAL(12,2),

status ENUM(
'Available',
'Assigned',
'Repair',
'Disposed'
) DEFAULT 'Available',

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);
```

---

## asset_assignments

```sql
CREATE TABLE asset_assignments (

id INT AUTO_INCREMENT PRIMARY KEY,

asset_id INT NOT NULL,

employee_id INT NOT NULL,

assigned_date DATE,

returned_date DATE NULL,

condition_out TEXT,

condition_in TEXT,

status ENUM(
'Assigned',
'Returned'
) DEFAULT 'Assigned',

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);
```

---

# assets.php

HR/Admin manages hotel assets.

Examples:

* Laptop
* Desktop
* POS Terminal
* Walkie Talkie
* Access Card
* Door Key
* Radio
* Mobile Phone
* Router
* Printer

Table:

```text
Asset Tag
Asset Name
Type
Serial Number
Status
Action
```

Example:

```text
IT-001      Dell Latitude 5420     Laptop      Assigned
IT-002      Ubiquiti UDM Pro        Router      Available
FO-001      Front Office Radio      Radio       Assigned
```

---

# asset_assign.php

Assign asset to staff.

Form:

```php
<select name="asset_id">
Available Assets
</select>

<select name="employee_id">
Employees
</select>

<textarea name="condition_out">
Good Condition
</textarea>
```

Submit:

```sql
INSERT INTO asset_assignments
```

Then:

```sql
UPDATE assets
SET status='Assigned'
```

---

# asset_return.php

Return asset.

HR enters:

```text
Returned Date
Condition Returned
```

Updates:

```sql
asset_assignments.status='Returned'
```

and

```sql
assets.status='Available'
```

---

# my_assets.php

Staff Portal page.

Shows:

```text
Assigned Asset
Asset Tag
Date Assigned
Condition
```

Example:

```text
Dell Latitude 5420
IT-001
12 May 2026
Good Condition
```

---

# asset_history.php

Complete audit trail.

```text
Asset
Employee
Assigned
Returned
Status
```

Useful during audits.

---

# ESS (Employee Self Service Portal)

Create folder:

```text
/ess/
```

Files:

```text
ess_dashboard.php
my_profile.php
my_attendance.php
my_schedule.php
my_leave.php
my_loans.php
my_assets.php
my_payslips.php
```

---

# ESS Dashboard

File:

```text
ess_dashboard.php
```

Cards:

```text
Attendance This Month
Leave Balance
Active Loan Balance
Assigned Assets
Latest Payslip
```

Example:

```text
Present Days: 24

Leave Balance: 18 days

Loan Balance:
₦120,000

Assets:
2

Payslip:
May 2026
```

---

# my_profile.php

Staff updates:

```text
Phone
Address
Emergency Contact
Next Of Kin
Photo
```

Table:

```sql
employee_profiles
```

---

# my_attendance.php

Staff views:

```text
Date
Check In
Check Out
Hours Worked
Status
```

Pulled from attendance table.

---

# my_schedule.php

Shows shift schedule.

```text
Date
Shift
Check In
Check Out
```

Pulled from:

```sql
department_schedules
```

---

# my_leave.php

Displays:

```text
Leave Type
Date From
Date To
Status
```

and button:

```text
Request Leave
```

Links to:

```text
leave_request.php
```

---

# my_loans.php

Displays:

```text
Amount
Balance
Monthly Deduction
Status
```

Example query:

```php
SELECT *
FROM employee_loans
WHERE employee_id=$userId
ORDER BY id DESC
```

Table:

```html
<table class="w-full bg-white shadow rounded">

<thead class="bg-gray-100">

<tr>

<th class="p-4">Amount</th>
<th class="p-4">Balance</th>
<th class="p-4">Monthly Deduction</th>
<th class="p-4">Months</th>
<th class="p-4">Status</th>

</tr>

</thead>

<tbody>

<?php while($row=$res->fetch_assoc()): ?>

<tr class="border-b">

<td class="p-4">
₦<?= number_format($row['amount'],2) ?>
</td>

<td class="p-4">
₦<?= number_format($row['balance'],2) ?>
</td>

<td class="p-4">
₦<?= number_format($row['monthly_deduction'],2) ?>
</td>

<td class="p-4">
<?= $row['total_months'] ?>
</td>

<td class="p-4">
<?= $row['status'] ?>
</td>

</tr>

<?php endwhile; ?>

</tbody>

</table>
```

---

# my_payslips.php

Staff sees ONLY released payslips.

Query:

```sql
SELECT *
FROM payroll_details

WHERE employee_id=?

AND payroll_status='Disbursed'

AND payslip_released=1
```

Columns:

```text
Month
Year
Net Salary
View
```

---

# Final Module Order

Your system should now look like:

```text
Core HR
├── Employees
├── Departments
├── Attendance
├── Shift Management
├── Scheduling

Leave Management
├── Leave Types
├── Leave Requests
├── Manager Approval
├── HR Approval
├── Leave Calendar

Payroll
├── Payroll Generation
├── Payroll Approval
├── Audit Approval
├── GM Approval
├── Disbursement
├── Payslip Release
├── Payroll History

Finance
├── Staff Loans
├── Salary Advances
├── Payroll Deductions

Asset Management
├── Assets
├── Asset Assignment
├── Asset Return
├── Asset History

Employee Self Service
├── My Profile
├── My Attendance
├── My Schedule
├── My Leave
├── My Loans
├── My Assets
├── My Payslips

Reports
├── Payroll Dashboard
├── Finance Reports
├── Attendance Reports
├── Leave Reports
├── Asset Reports
```

Once these are done, the next enterprise-grade addition would be **Procurement & Inventory Management** (store items, stock issuance, requisitions, approvals, vendor management), which is very valuable for hotel operations.
