Orders and reviewing¶
Work reaches you along three routes. This page is mostly about the first one — orders customers place themselves on your order page.
Three routes¶
| Where it comes from | Where it lands | Notes |
|---|---|---|
| Customer self-orders | The Self-order inbox | The customer fills in your order page; nothing counts until you review it. This page |
| You add it yourself | Straight into a deal or a job | "New deal" and "+ Add job" on the schedule page, including the AI quick-capture |
| Vertical tickets | 🔧 Repair tickets / 🧹 Cleaning jobs | Only in repair / cleaning template stores; their own flow |
The last two never touch the inbox — see the final two sections.
What the customer fills in¶
Your order page lives at app.huanhuan.com.au/s/<your-shop-code>. Send it on WeChat or RED and regulars can order themselves.
Only two fields are required: WeChat name and phone. Miss either and you get "Enter your WeChat name" / "Enter your phone". "Name (optional)" is optional, and there is also a preferred date, a preferred time slot (Any / Morning 09–13 / Afternoon 13–17 / Evening 17–21) and a free-text note.
Why WeChat name is required
The hint under the box says it all: "Your WeChat nickname — how the owner matches you". In this community the WeChat name is how you tell one customer from another.
Address is not a built-in field
The fields we add automatically are only "Name / Contact / Quantity / Preferred date / Preferred time". If you want address, property type, fault description and so on, either add your own fields in 🧩 Order form, or let customers write them into the note (its placeholder is literally "Address, special requests, etc.").
Customers can submit with an empty cart — "Cart is empty — you can also just leave a request for a quote." Under the submit button it says "After you submit, the owner contacts you to confirm — no auto-charge.", and once sent they see "Got it!".
Where the inbox is, and what the two badges mean¶
How to get there: open app.huanhuan.com.au → Me at the bottom → More → 🆕 Self-order inbox. The page itself is titled 🆕 Self-orders.
The bottom navigation is only Today / Schedule / Collab / Ledger / Me — there is no "Orders" tab, so stop looking for one.
Two shortcuts:
- The green card at the top of Today: "N customer self-orders awaiting confirmation — handle in {store}". Tap it to go straight in.
- The ⋯ menu next to the schedule page title → "📦 Customer orders · {store}".
The inbox entry and your store row carry two badges:
| Badge | What the number is | Tooltip |
|---|---|---|
| Red | Self-orders waiting for you | "Pending self-orders" in the store switcher; "Pending order requests" on the Me page |
| Cream | Deals recorded but not yet on the calendar | "Recorded but not on the calendar yet" |
Red means new work waiting to be reviewed; cream means you reviewed it but never scheduled it. Clear both and your day is actually clean.
Reviewing: three actions¶
Every to-do card has the same three buttons:
| Button | What it does |
|---|---|
| ✓ Pass · record + schedule | Check the amount and time, then book it and put it on the calendar in one step |
| ⏸ Hold | Not sure yet — park it; the order stays in the to-do list |
| ✕ Reject | Not taking it. You get a "Reject this request?" confirmation first |
There is no "Change time" button. To change the time, edit Visit date / Start time / End (blank = +2h) in the same review form, then hit ✓ Pass · record + schedule.
- Hold is not an end state. You get a "Held" toast, the card gets a yellow Pending chip, and the ⏸ Hold button disappears — but the form stays, so you can still pass or reject it later.
- Reject has no undo. After the "Rejected" toast the order drops into Recently handled with a grey Rejected chip. There is no restore button in the app.
What goes in the review form¶
The form is built into every to-do card (held ones included), and the line above it spells out the job: "Review: set the visit time + assignee → passing schedules it".
- Visit date / Start time / End (blank = +2h) — leave the end blank and you get two hours.
- Assign to — defaults to "Default (first available)".
- Deal amount (optional, blank = record later) — this box only appears when the order has no cart lines. If the customer picked items, the line amounts and a Total show on the card instead.
- Deposit received (optional) + Deposit method — four choices: WeChat transfer (default), cash, PayID, bank transfer.
- Note (extra, goes to the job card) — whatever you write here follows the job onto the schedule.
- ⚠ Book even if it clashes — the force-book tick box; more on that below.
Cards also carry a few automatic flags to help you judge: difficulty ("Easy" / "Medium" / "Hard"), risk ("Low risk" / "Medium risk" / "High risk" — high-risk cards get a pink outline), a "⚠" line if there is anything special about the job, and a "🤖" line with an AI suggestion.
Passing = record + schedule, but the two can come apart¶
The button says "record + schedule" and passing gives you a "Confirmed ✓" toast. But you can end up with only half of it done.
An order that was booked but never made it onto the calendar shows up under Recently handled with a yellow ⚠ Unscheduled chip (tooltip: "Recorded but not on the calendar yet") and a 📅 Schedule button next to it to fix that. The cream badge above counts exactly these.
Orders you passed sit in Recently handled with a green Recorded chip, plus a View deal link into the detail if a deal exists.
Don't breed a pile of $0 orders
The review form is deliberately relaxed about money — the field literally reads "Deal amount (optional, blank = record later)", and you can pass with a blank amount and a zero deposit. Convenient, but a stack of amountless orders makes your reports useless. Make it a habit: if you can price it now, price it now; if you can't, come back and fill it in.
The hard guard against empty orders lives on the New deal page instead: you need at least one line item or a deposit, otherwise the save button stays dead and the page tells you "Nothing to save yet: add at least one line item, or take a deposit".
Clashes ask first — and nothing gets lost¶
If the slot you picked collides with an existing job on the same vehicle or person, you get:
That slot clashes. Force-book anyway?
Say yes and the order goes in anyway — the app automatically re-sends it as a forced booking. Nothing is dropped.
If you don't want to be asked every time, tick ⚠ Book even if it clashes in the form before you pass it.
Once forced in, the two jobs sit side by side with a red outline in the timeline view on the schedule page, and the job card carries a yellow ⚠ Clash badge ("Overlaps another job on the same resource (forced) — needs your attention"). The app only tells you there is an overlap; what to do about it is your call — move it, subcontract it, or run both because they're on the same route anyway.
Why it works this way
An early version silently dropped the second job on a clash, so a confirmed order simply never appeared on the calendar. Now it asks, then forces — and loses nothing.
Assign to, and what if you have no vehicles or staff¶
The Assign to dropdown is fed from Me → 🚚 Vehicles / Staff (schedulable), a page whose subtitle puts it plainly: "Assign a job to a vehicle or staff member when scheduling." When you add one, the name placeholder is "e.g. Van A / John (staff)", and the type is Vehicle / Staff / Other.
If a new store has no resources at all, "Default (first available)" is the only option in the dropdown.
Passed an order but can't find it on the calendar?
First check Recently handled — if the order carries a ⚠ Unscheduled chip, hit the 📅 Schedule button beside it. Then go add a vehicle or a person under 🚚 Vehicles / Staff (schedulable); scheduling gets a lot smoother once you have one.
The second route: adding orders yourself (with AI quick-capture)¶
This route skips the inbox entirely and writes straight through:
- 🎤 Say it, we'll record it at the top of the New deal page → 🤖 AI: turn into a deal, which creates a deal.
- The collapsible 🤖 AI scheduling (recommended) · paste customer info / say it inside "+ Add job" on the schedule page → 🤖 AI fill it in (check the time after), which creates a booking.
Paste in the whole message the customer sent you (the placeholder says "Paste in whatever the customer sent"), or hold 🎤 Press to talk and just say it.
The AI never files it for you. It only fills the form so you can check it — and it tells you whether the AI or the keyword fallback did the work, with a line like ✓ AI filled it in (AI) — check the time, then "Schedule". If it can't parse anything you just get "Parsing failed — fill it in by hand instead". Too busy to deal with it while driving? Hit "Save for later, driving now" and tidy it up from Drafts.
The third route: repair and cleaning tickets¶
Repairs and cleaning are two separate ticket flows. They only appear in stores on the matching template, and the entry point is on the Me page:
- 🔧 Repair tickets — the flow line reads "Remote diagnosis → test fee → quote → customer confirms → repair → hand over & collect." Intake is Remote / Drop-off / Mail-in. Note that repair tickets have no visit time field at all.
- 🧹 Cleaning jobs — "Survey → quote → confirm → schedule → on-site → collect payment." Cleaning jobs do have a visit date, a visit time and a 📅 Schedule button.
Both can be handed to a helper with 🤝 Dispatch to helper, and both deduct the deposit automatically when you settle.