4x4AT
Built a custom Magento 2 point-of-sale that unified the trade counter and the website into one stock pool, one ledger, one set of customer records.
What needed solving
4x4AT operate both a physical trade counter and a Magento 2 ecommerce store. The two ran on separate systems: Magento for online, a legacy desktop till for the counter. Stock counts diverged by the hour. Customer records didn't match across channels. VAT reporting was a quarterly headache.
Off-the-shelf Magento POS modules were either limited (no salesman attribution, no deposit handling) or expensive (£200+/month per till), and none of them handled the specific tax logic 4x4AT needed for export vs UK sales.
The brief was specific: a POS that lives inside Magento, uses Magento's product catalogue and customer database, takes payment through Stripe, handles deposits, attributes commissions to the right salesman, and produces VAT-correct invoices for both UK and EU customers at the till.
How the team worked through it
Custom Magento 2 module from the ground up
Built as a proper M2 module — admin UI, ACL roles, declarative schema, dependency injection — so it sits alongside the catalogue, orders, and customer modules natively. No iframe hacks, no separate codebase to maintain.
Stripe Terminal for in-person payments
Integrated Stripe Terminal SDK for chip-and-PIN, contactless, and Apple/Google Pay. Card readers connect over Bluetooth to the till tablet. Payments captured directly against the Magento order so the source of truth stays in one place.
Multi-currency VAT with country-aware logic
Built tax rules that handle UK domestic, EU consumer (with post-Brexit IOSS where applicable), and export-zero-rated, all selectable at the till from a single dropdown. The till knows what each combination means for the invoice.
Salesman attribution and commission
Each sale gets attributed to the salesman who rang it through. Custom reporting in admin shows daily and monthly commission totals. No more arguments at month end.
Deposit handling for big-ticket items
Customers paying deposits on larger items (winches, full kits) get a real Magento order in 'pending payment' state, with the balance collectable later through the same till or online. Reconciliation is automatic.
Full PHPUnit test suite
Tax logic, payment flows, salesman attribution, deposit reconciliation — all covered by automated tests. Updates to the module can be made with confidence, not by crossing fingers.
Got a similar problem?
Free 30-minute call. We'll work out whether Magento Patches can help.