Troubleshooting¶
If Loyalty will not open at all — a blank page, or a bounce back to the dashboard — that is an install problem, not a Loyalty one. See troubleshooting an install.
Most of what follows is Loyalty doing what it was told. Each heading is what you see; underneath is the list of reasons, in the order worth checking.
Where a reason is logged, it is in the shared diagnostic file described on
what Kyvero extensions log, and read under System ›
Maintenance › Error Logs in the kyvero.log tab. When a line you expect is
not there, switch Detailed logging on under Diagnostics on the default
store's Loyalty screen; it switches itself off after two days.
Customers have no way to spend points at checkout¶
The cart shows no Use Points control and the checkout has no Loyalty line.
- OpenCart's own Reward Points order total is switched on. This is the commonest reason, because a fresh OpenCart ships with it on. Both Loyalty screens show a banner while it is, with a link to switch it off under Extensions › Extensions › Order Totals › Reward Points.
- The Loyalty order total is not installed, or is switched off, under Extensions › Extensions › Order Totals › Loyalty.
- The programme is switched off for this store, by Status on the Loyalty screen.
- The customer is not signed in. Guests have no balance.
- The customer's balance is below Minimum balance to spend, is zero, or is below zero. A negative balance blocks spending until it is earned back.
A customer who has nothing to spend but will earn on the cart still sees the This order earns … points line on its own.
An order earned nothing¶
- Earning has not been started. The right-hand column of the Loyalty screen reads Earning is off until somebody presses Start awarding points.
- The order was placed before earning was started. An order is judged by when it was placed, so completing it afterwards earns nothing. This is deliberate: switching earning on never pays for the past.
- No awarding status is ticked, or the order has not reached one of them. Awarded when an order reaches is empty out of the box.
- The order was a guest's.
- The order was too small to earn a whole point at your rate. Nothing is written, so an order edited upward can still earn.
- The rate is 0, for the store or for the customer group the order was placed in, and no product in the order has a Reward Points figure of its own.
- The order already earned, or was reversed. An order earns once and never again after a reversal.
A refunded order kept its points¶
Taken back when an order reaches is empty out of the box, and the screen warns in red under it while awarding statuses are ticked and it is not. Tick the statuses that mean the money went back, typically Canceled, Refunded and Chargeback. Ticking them now does not reach back to orders that passed through those statuses before; take those points back by hand on the customer's Reward Points tab.
An order whose award has already expired is not reversed, because the customer has already lost those points once. Nor is an order that reached its refund status while the programme's Status was off for its store.
A customer's balance is below zero¶
Three things can put it there, and none is a fault:
- An order they spent the earned points from was refunded. The reversal takes back the whole award. Their points page names the order.
- Two orders placed at once spent the same points. Points leave the balance when OpenCart confirms the order, so a customer with two tabs open can choose the same points twice. The log has a line naming the order that went short.
- You removed points by hand on their Reward Points tab.
The points they earn next clear it. To forgive it, add the difference on their Reward Points tab.
Nothing is expiring¶
- Expiry is switched off, which is how it ships.
- The scheduled pass is not running. Expiry happens only when your host
calls OpenCart's
cron.php. Check Extensions → Cron Jobs for when Loyalty: the hourly scheduled pass last ran. - Your store is on OpenCart 4.1.0.4, whose scheduler cannot run any extension's task, and no crontab line runs Loyalty's command instead; see running the scheduled task yourself.
- Your store's mail is not working. Nothing expires until its warning email has been sent, and an email that failed to send records nothing. A store whose mail is broken expires nothing at all.
- The warning has not had its time yet. A customer is expired only once their warning is at least Warning email, days before old, and the first pass after you switch expiry on only warns.
- The customer's points are not Loyalty's. Points added by hand, or before Loyalty was installed, never expire.
- The customer moved points recently. Any points movement restarts their clock and clears a pending warning.
A backlog takes several passes: each hourly pass warns and expires at most 50 customers per store.
The birthday bonus was not paid¶
- No birthday field is chosen, or Birthday bonus is 0. OpenCart has no birthday field of its own; create a Date custom field at the Account location and choose it.
- The customer left the field empty, or it holds something that is not a real date. The detailed log records it; nothing is warned about.
- The birthday fell before earning was started, or while the bonus was 0. That year is recorded as passed rather than paid late.
- The scheduled pass has not run since the birthday, or the store is on OpenCart 4.1.0.4 without the crontab line. A pass that was down catches up when it next runs, without paying twice.
The welcome bonus was not paid¶
- Welcome bonus is 0, which is how it ships.
- The programme was switched off for the customer's store when the account was created.
- The account was created before you set the bonus. Nothing is backfilled.
Needing attention shows unfinished writes¶
Loyalty writes its own row first and OpenCart's reward row second. A request that died between the two leaves the row unfinished and the customer's balance unmoved. The hourly pass finishes it, but only once the row is an hour old, so that it never races a request still in flight. If the count stays above zero for longer than that, the pass is not running: see Nothing is expiring above for why.
Needing attention shows rows OpenCart deleted¶
Somebody used Remove Reward on an order, which deletes the order's reward rows. The balance is already right, because it is OpenCart's own sum; Loyalty keeps its matching row as history and counts it here. There is nothing to fix.
The customer's Reward Points page looks like OpenCart's¶
The programme is switched off for that store. With it off, Loyalty steps aside and core's own page is served as if it were not installed.
OpenCart's Customer Reward Points report disagrees with Loyalty¶
It is the report. Its order count and order total overstate for any order with more than one reward row, a date range changes what its points column means, and it drops the rows of deleted customers. See what the store owes.
An update will not remove the old files¶
The installer refuses while either half is still installed. Uninstall the order total first, then the module, then upload the new version. See updating.