Offline desktop POS app for Windows.
Beauty P&C POS is a fully offline Point of Sale system for Windows, built with Python, PyQt5, and SQLite. It is designed for fast daily billing, inventory management, purchase tracking, and financial management in a retail shop.
- User Management: Login with Admin and Cashier roles
- Product Management: Add, edit, delete products with categories, brands, barcodes, cost prices, and selling prices
- Product Variants: Manage product variants with size, color, SKU, variant-specific barcodes, pricing, and stock
- Stock Management: Automatic stock tracking with low stock alerts (supports both products and variants)
- POS Screen: Fast checkout with search, barcode scanning, variant selection, cart, discounts, and multiple payment methods
- Sales Management: View, edit, and delete sales transactions
- Customer Management: Track customers with purchase history
- Customer Reports: View customer details with sales statistics (total sales, invoice count, last purchase)
- Sales Reports: Daily, monthly, yearly sales summaries and category-wise analysis
- Purchase Management: Record bulk purchases from suppliers with automatic stock updates
- Purchase Reports: Daily, monthly, yearly purchase summaries
- Supplier Tracking: Track suppliers with purchase history
- Top Purchased Products: Identify most purchased items
- Inventory Reports: Current stock levels with cost and selling price valuations
- Cashbook: Track all cash transactions
- Cash sales and other income
- Cash expenses and cash purchases
- Bank deposits (reduces cash)
- Bank withdrawals (increases cash)
- Net cash balance
- Bankbook: Track all bank/card transactions
- Card sales (money into bank)
- Card purchases and card expenses (money out of bank)
- Deposits (cash to bank)
- Withdrawals (bank to cash)
- Net bank balance
- Bank Transactions: Record deposits and withdrawals between cash and bank
- Expenses Tracking: Record expenses with payment methods (Cash, Card, Cheque, Credit, Other)
- Profit Reports: Daily, monthly, yearly profit analysis with revenue, COGS, expenses, and net profit
- Financial Reports: Comprehensive financial summaries
- Sales Reports (Daily, Monthly, Yearly, Category-wise, Top Products)
- Purchase Reports (Daily, Monthly, Yearly, Top Purchased, Supplier Summary)
- Financial Reports (Profit, Expenses, Income, Cashbook, Bankbook)
- Inventory Reports (Current Stock Levels)
- Customer Details Reports
- Product Variants Management:
- Create variants with size, color, SKU, and unique barcodes
- Variant-specific pricing and cost pricing
- Individual stock tracking per variant
- Low stock alerts for variants
- Variant selection during sales and purchases
- Thermal Receipt Printing: ESC/POS or Windows printer support
- PDF Invoice Generation: Automatic PDF generation for sales
- Export Functionality: Export data to CSV/Excel
- Backup & Restore: Full database backup and restore functionality
- Offline Operation: All data stored locally in SQLite database
-
Install Python 3.10+ (Windows)
-
Create venv and install requirements
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt- Run the app (the schema is created automatically; no sample data is inserted)
python main.py- Default admin login: admin / admin123 (change after first login)
Optional – load demo/sample data (do this only for testing; it will insert example products/brands/categories):
python -m sqlite3 database/beauty_pc.db ".read schema.sql"
python -m sqlite3 database/beauty_pc.db ".read sample_data.sql"pyinstaller --noconsole --onefile --name "BeautyPC_POS" --icon assets/logo.ico main.py- Place
assets/,database/, andschema.sqlnext to the generated exe if using onefile. - Alternatively, use
--add-datato bundle assets and migrate to an app data folder on first run.
Example add-data use (PowerShell):
pyinstaller --noconsole --onefile --name "BeautyPC_POS" \
--add-data "assets;assets" \
--add-data "schema.sql;." \
--add-data "sample_data.sql;." \
main.py- Barcode scanner: works as keyboard input in the search/barcode field
- Thermal printer: use ESC/POS (USB/Serial/Ethernet) or Windows printer (win32print)
- Optional cash drawer: supported via ESC/POS kick drawer command
- Use the app menu: Backup to ZIP or export CSV/Excel
- Manual: copy the
database/beauty_pc.dbfile to a safe location
beauty_pc_pos/
├── main.py # Application entry point
├── database/
│ └── beauty_pc.db # SQLite database
├── ui/
│ ├── login.py # Login dialog
│ ├── dashboard.py # Main dashboard window
│ ├── pos_screen.py # Point of Sale screen
│ ├── products.py # Product management with variants
│ ├── variant_selector.py # Variant selection dialog
│ ├── purchases.py # Purchase entry screen
│ ├── purchase_management.py # Purchase management dialog
│ ├── sales.py # Sales management dialog
│ ├── customers.py # Customer management dialog
│ ├── expenses.py # Expenses management dialog
│ ├── other_income.py # Other income management dialog
│ ├── users.py # User management dialog
│ ├── reports.py # Reports widget
│ └── bank_transactions.py # Bank transactions dialog
├── utils/
│ ├── db_helper.py # Database operations
│ ├── printer.py # Receipt printing and PDF generation
│ └── backup.py # Backup/restore utilities
├── assets/
│ ├── logo.png
│ └── icons/
├── invoices/ # Generated PDF invoices
├── requirements.txt
├── schema.sql # Database schema
└── sample_data.sql # Optional sample data
- Go to POS tab
- Search or scan product barcode (supports both product and variant barcodes)
- If product has variants, select the desired variant from the selection dialog
- Add products/variants to cart (double-click or press Enter)
- Adjust quantities, prices, discounts as needed
- Select payment type (Cash, Card, QR, Other)
- Enter paid amount
- Click "Checkout & Print" (F9)
- Stock automatically decreases (variant stock if variant selected, otherwise product stock)
- Go to Purchases tab (Admin only)
- Search or select products (supports both product and variant barcodes)
- If product has variants, select the desired variant from the selection dialog
- Add products/variants to purchase cart with quantities and unit costs
- Enter supplier name (optional)
- Select payment type (Cash, Card, Cheque, Credit, Other)
- Enter paid amount
- Click "Save Purchase" (F9)
- Stock automatically increases (variant stock if variant selected, otherwise product stock), cost price updates
- Go to Manage menu → Bank Transactions (Admin only)
- Click "Deposit (Cash → Bank)" to deposit cash to bank
- Click "Withdrawal (Bank → Cash)" to withdraw from bank to cash
- Enter amount and optional description
- System validates available balances
- Go to Manage menu → Expenses (Admin only)
- Enter description, category, amount
- Select payment method (Cash, Card, Cheque, Credit, Other)
- Select date and click "Add Expense"
- Cash expenses reduce cashbook; card expenses reduce bankbook
The system tracks different payment methods:
- Cash: Affects cashbook balance
- Card/QR/Other (Sales): Affects bankbook balance
- Card/Cheque/Credit/Other (Purchases/Expenses): Affects bankbook balance
Key tables:
users: User accounts with rolesproducts: Product catalog with stockproduct_variants: Product variants with size, color, SKU, barcodes, pricing, and stocksales&sale_items: Sales transactions (supports variant_id)purchases&purchase_items: Purchase transactions (supports variant_id)expenses: Expense records with payment typescustomers: Customer informationbank_transactions: Cash ↔ Bank transfersother_income: Other income sources
The system supports product variants to manage different sizes, colors, SKUs, and other variations of the same product:
- Creating Variants: Edit an existing product and go to the "Variants" tab to add variants
- Variant Fields: Size, Color, SKU, Barcode, Price (optional, falls back to product price), Cost Price, Stock Quantity, Low Stock Threshold
- Variant Barcodes: Each variant can have its own unique barcode for direct scanning
- Stock Tracking: Variants have independent stock levels separate from the base product
- Pricing: Variants can have custom pricing, or use the base product price if not specified
- Sales & Purchases: When adding a product with variants to cart, a selection dialog appears to choose the variant
- Low Stock Alerts: Both products and variants are included in low stock reports
- The database auto-initializes on first launch using
schema.sql. Sample data is not loaded by default. - Replace the placeholder
assets/logo.pngwith your shop logo. - All data stays offline. No internet connection is required.
- Default admin login:
admin/admin123(change after first login) - Cashiers can only use POS screen; admins have full access
- Products without variants work exactly as before - the variant system is optional and backward compatible
Proprietary – for Beauty P&C internal use.