Purchase
Search Purchases by Number, Supplier, Phone and Bill Date
The expanded Filter strip narrows received-purchase records by identity and bill date. Its scope is different from the Status and Expected quick filters and from purchase orders.
- Menu path
- Purchase -> Purchases -> Filter
- Verified from
- Posnic demo and current POS source reviewed on 2026-09-08
Technical source evidence
frontend/static/script/js/modules/js/receiving_add.js mountPurchaseFilters loadList, frontend/static/script/js/core/list-filter.js PRESETS legacyFilters MIN_SEARCH DEBOUNCE_MS, receivings date supplier_name supplier_phone receiving_id filters, purchaseOrders loaded separately without legacyFilters
Open and Use the Filter Strip
- Open Purchase -> Purchases and click Filter.
- Type a purchase number, supplier name or supplier phone in Search.
- Choose All fields, Purchase no, Supplier or Phone from the field selector.
- Turn on Exact only when the whole selected field must match.
- Choose All time or a Bill date preset; use Custom range for precise From and To times.
- Pause after typing so the list can refresh.
- Review the Filter button count and the result count.
- Open the matching document and verify it before receiving, printing, emailing, returning or voiding.
Choose the Correct Search Field
| Field | Searches | Best use |
|---|---|---|
| All fields | Purchase number, supplier name and supplier phone together. | Use when you know the value but not which field stores it. |
| Purchase no | The received-purchase identifier such as R-DEMO-000005. | Fast document lookup from an invoice or internal reference. |
| Supplier | Supplier name on received purchases. | Reviewing purchases from one vendor. |
| Phone | Supplier phone stored on received purchases. | Finding a vendor when the name is uncertain. |
| Supplier suggestion | Cached recent and known supplier choices. | Selecting a known supplier without spelling variation; selection enables exact matching. |
Contains Search Versus Exact
Normal search is case-insensitive and requires every typed word to be present, in any order. Exact anchors the whole selected value instead of matching a fragment.
| Search setup | Behavior | Example use |
|---|---|---|
| All fields, Exact off | Every typed token must appear somewhere in the same searchable field, regardless of word order. | blue traders can match Traders Blue. |
| Supplier, Exact off | Supplier name contains all typed tokens. | metro can match Metro Supply Co. |
| Supplier, Exact on | Whole supplier name must match, ignoring letter case. | Metro Supply Co avoids other Metro-named suppliers. |
| Purchase no, Exact on | Whole purchase identifier must match. | Use for a copied receiving number. |
| Phone, Exact on | Whole stored phone value must match. | Use only when formatting and country code are known. |
Search Timing and Minimum Length
- An ordinary fragment search starts at two non-space characters.
- One ordinary character remains visible in the box but does not reload the list.
- Exact search and a picked supplier can apply even to a one-character value.
- Typing waits about 350 milliseconds after the last keystroke before reloading.
- Clearing the search always reloads the unsearched list.
- Changing the field or Exact setting reloads only when a usable search term exists.
Bill Date Presets
Bill date ranges are created in the browser’s local timezone and sent as exact start and end instants. This keeps the working day aligned with the till that applies the filter.
| Preset | From | To |
|---|---|---|
| All time | No lower boundary. | No upper boundary. |
| Today | Local midnight today. | Local 23:59:59.999 today. |
| Yesterday | Local midnight yesterday. | End of yesterday. |
| This week | Local midnight Monday. | End of today. |
| This month | Local midnight on the first day of this month. | End of today. |
| This year | Local midnight on January 1. | End of today. |
| Last 7 days | Local midnight six days ago. | End of today, seven calendar days inclusive. |
| Last 30 days | Local midnight 29 days ago. | End of today, thirty calendar days inclusive. |
| Custom range | Operator-selected local date and time. | Operator-selected local date and time; the controls prevent To before From. |
Important Purchase-Order Boundary
The text and Bill date filter is sent to the received-purchases endpoint. Purchase orders are fetched separately without those same filter parameters, then both sources are merged into one list.
- A purchase-order row can remain visible even when it does not match the received-purchase search.
- Search results should not be treated as proof that no purchase order exists.
- Use the row number and Status to distinguish order work from received purchases.
- The current CSV export stores the loaded merged rows before Status and Expected quick filtering.
- Use Purchase Reports or archive history for a complete controlled-period review.
Clear Filters Reliably
- Click Filter so the current controls are visible.
- Check the number badge on the Filter button; field choice and Exact do not count without a search term.
- Click Clear to reset Search, field, Exact and Bill date to their defaults.
- Set Status to All and Expected to Any separately because those quick filters are outside this strip.
- Choose Default under Sort when row ordering is also causing confusion.
- Wait for the list and count to reload before concluding that a purchase is missing.
Filter Problems and Corrections
| Problem | Likely reason | Correction |
|---|---|---|
| One typed character does nothing | Ordinary fragment search requires two characters. | Type a second character or use Exact for a genuine whole one-character value. |
| Too many suppliers match | All fields or fragment matching is active. | Choose Supplier and enable Exact, preferably from a suggestion. |
| Phone search misses the supplier | Stored phone formatting differs. | Try a stable fragment with Exact off, then verify the supplier profile. |
| This week misses Sunday expected by staff | Business-week preset starts Monday. | Use Custom range when the shop uses a different weekly boundary. |
| Purchase order remains after filtering | Purchase orders are loaded separately from received-purchase filters. | Identify it by number, kind and status; use the appropriate order workflow. |
| No purchases match | A hidden Status or Expected quick filter may still be active. | Set Status All, Expected Any, click Clear and reload. |
| Custom range cannot be inverted | The From and To controls enforce valid minimum and maximum values. | Move the opposite endpoint first, then set the intended range. |
| CSV contains rows not visible after filtering | Export scope differs from visible quick-filter scope. | Use the dedicated CSV guide and reconcile the downloaded rows. |