Frequently Asked Questions
General
What is Surveyor POS?
Surveyor POS is a web-based management platform for equipment rental businesses. It handles day-to-day rental operations, customer management, project tracking, financial reporting, and automated SMS notifications — all from a browser.
What roles does the system have?
Three roles with separate login portals:
| Role | Portal | What they can do |
|---|---|---|
| Admin | /admin/login |
Full access — all modules, all branches |
| Worker | /worker/login |
Rentals, equipment, tasks, customers |
| Customer | /login |
View rentals/projects, submit bookings |
Rentals
What is the difference between a Day Rental and a Point Rental?
Day Rentals charge per day (price_per_day). A customer rents a piece of equipment for a set number of days and is charged accordingly.
Point Rentals charge per point (price_per_point). This is typically used for survey instruments where the "unit" of billing is project-based or survey-point-based rather than calendar-day-based. Both systems run in parallel — the same customer can have both types of rentals.
Why is a specification not showing in the POS?
Specifications only appear in the Rental POS and booking forms if their status is available. Check the specification's status:
rented— currently out with a customer; process a return firstmaintenance— marked as in service; update the status once repairs are done
How do late fees work?
The app:calculate-rental-late-fees command runs nightly. For any RentalItem or PointRentalItem where due_date has passed and returned_at is null, it calculates and records a late fee based on the price_per_day (or price_per_point) multiplied by the number of overdue days.
Bookings
How does a customer submit a booking?
From the customer portal (/user/bookings/create), they select the type (day or point), tick the equipment they want, enter the number of days per item, choose a preferred start date, and submit.
What happens when a customer submits a booking request?
The system immediately:
- Creates a
BookingRequestrecord with statuspending - Sets each requested specification's status to
reserved(so no one else can book it while the request is pending) - Sends an SMS to the customer confirming the request was received
- Sends an SMS to every worker at the branch who has a phone number on their profile
What happens when an admin or worker approves a booking?
The system automatically:
- Creates a
Rental(orPointRental) record for the customer - Creates one
RentalItem(orPointRentalItem) per requested piece of equipment - Sets each specification's status to
rented - Updates the booking status to
approvedand links it to the new rental - Sends an SMS to the customer
- Logs the action in the audit log
The admin or worker can then open the linked rental to record payments, add a deposit, etc.
Can a customer cancel an approved booking?
No. Once a booking is approved, a rental exists and the equipment is marked as rented. Contact the admin to process any changes.
Can a worker approve or reject bookings?
Yes. Both admins and workers can approve and reject booking requests for their branch. Workers see the same Booking Requests section in their sidebar with the live pending count badge.
The customer's phone number is missing — will SMS still work?
No. SMS is only sent when the user's phone field is not empty. Ask the customer to update their phone number in their profile settings.
Do workers get notified about new booking requests?
Yes. When a customer submits a booking request, an SMS is sent to every worker at that branch who has a phone number saved on their profile. Workers also see the pending count badge on the Booking Requests sidebar link.
How does the overdue SMS show the late fee amount?
The app:calculate-rental-late-fees command runs nightly at 01:00 and writes the current late fee to each overdue item. The app:send-rental-reminders command runs at 08:00 and reads that pre-calculated figure to include in the SMS. The 7-hour gap ensures the amount in the morning SMS always reflects the freshly updated fee.
Payments & Finance
How do I record a partial payment?
From the rental show page, click Record Payment. Enter the amount, payment method, and any notes. You can record multiple partial payments — each one updates total_paid to the running total.
The balance is negative — what does that mean?
A negative balance means the customer has overpaid (more has been recorded in payments than the total price + fees). Review the payments to check if a duplicate entry was made.
How do I refund a deposit?
On the rental show page, click Return Deposit, then confirm. The system records the date and marks deposit_returned = true. This is an informational record only — the actual cash transfer must be handled outside the system.
Reporting
How do I export data to Excel?
Go to Reports → Outstanding Balances (or Overdue / Customer Statements) and click Export CSV. Open the downloaded .csv file in Excel or Google Sheets.
Can I filter the audit log?
Yes. Go to Reports → Audit Log and use the Action dropdown to filter by action type (e.g., rental_created, booking_approved). You can also filter by date range.
Equipment & Inventory
How do I take equipment out of service for maintenance?
- Go to the specification's edit page
- Set the status to
maintenance - Create a maintenance log entry under Operations → Maintenance
The specification will no longer appear in the POS or booking form until its status is changed back to available.
How do I check what equipment is currently available?
Go to Operations → Equipment Availability. Select a date range and click Check. The page shows available and rented equipment for both day and point rental systems.
Technical / Setup
Booking routes are not showing in route:list — why?
A route cache exists at bootstrap/cache/routes-v7.php. Run php artisan route:clear to remove it, then re-run route:list. In local development, avoid running route:cache — it is only intended for production.
SMS messages are not being delivered
Check storage/logs/laravel.log for Wigal error entries. Common causes:
WIGAL_API_KEYis not set in.env- The customer's phone number is missing or in an unsupported format
- API credentials are incorrect or the account has insufficient balance
PDF generation fails
Ensure the storage/ directory (and subdirectories) are writable by the web server user. DomPDF writes temporary files during PDF generation.
I ran npm run build but frontend changes are not reflected
Clear your browser cache (hard refresh: Cmd+Shift+R / Ctrl+Shift+R) or run npm run dev for live reloading during development.
The scheduler is not running
Confirm the cron entry is set up on the server:
* * * * * cd /path/to/surveyor-pos && php artisan schedule:run >> /dev/null 2>&1
You can test commands manually:
php artisan app:send-rental-reminders
php artisan app:calculate-rental-late-fees