Checkout & inventory
The checkout handles cart items, quantities, sale prices and payment-method recording, with cash-change calculation. Stock deduction and insufficient-stock checks connect the sale to inventory.
A full-stack point-of-sale application connecting checkout, inventory, orders, staff permissions and branch-specific access.
An order affects stock, receipts and reporting. A pending order needs its own lifecycle. A staff member should work within the right branch and permissions.
This project brings those concerns together in an Angular interface backed by ASP.NET Core. V1 established the core POS workflow; V2 adds branch-aware operations and a broader order lifecycle.
The checkout handles cart items, quantities, sale prices and payment-method recording, with cash-change calculation. Stock deduction and insufficient-stock checks connect the sale to inventory.
Orders can be saved, completed or voided. Automatic pending-order expiry releases reserved stock, giving incomplete orders a defined lifecycle.
Staff authentication and role-based permissions govern access. Branch selection and branch-specific data access scope operations to the selected branch. Inactive-branch access blocking is implemented.
Order history includes filtering, sorting, pagination and details. Daily, weekly and monthly reports sit alongside revenue, today’s orders and low-stock alerts. Receipts support 58 mm, 80 mm and A4 layouts.
V1 used ASP.NET Core, Angular and SQL Server, with JWT authentication and role-based authorization. The CV documents xUnit and Jasmine/Karma tests and a GitHub Actions deployment pipeline for that version.
The inspected V2 production configuration uses a MySQL 8.4 database, separate API and frontend containers, and loopback-bound application ports. The application is hosted at pos.thisara.dev ↗.
I’d love to hear about your team and what you’re building.