A comprehensive, touch-optimized Point of Sale (POS) system built specifically for Jarz company, featuring advanced bundle management, real-time inventory tracking, intelligent delivery management, enhanced cart functionality, and seamless ERPNext integration.
- Remove Items: One-click removal of individual items and bundles from cart
- Edit Bundles: Modify bundle contents after adding to cart with live pricing updates
- Confirmation Dialogs: Prevent accidental deletions with confirmation prompts
- Real-time Updates: Cart automatically updates with new totals after changes
- Recent Customers: Automatically shows last 5 customers when search field is focused
- Smart Date Display: Shows when customers were added (Today, Yesterday, X days ago)
- No Typing Required: Quick access to recent customers without typing
- Intelligent Search: Enhanced search with contact information display
- Expense Editing: Modify delivery expenses during checkout with quick dialog
- Dual Display: Shows both delivery income (customer charge) and expense (our cost)
- Clean Interface: Expense editing doesn't clutter the main POS interface
- Profit Tracking: Clear visibility of delivery profit margins
- POS Profile Integration: Automatic warehouse and price list selection based on user permissions
- Real-time Inventory: Live stock levels with color-coded indicators (Green/Yellow/Red)
- Dynamic Pricing: Automatic price fetching from configured price lists
- Item Group Organization: Items organized by categories for easy navigation
- Customer Management: Enhanced search, selection, and creation with delivery address support
- Full-screen Mode: Toggle full-screen experience with ESC key support
- Complex Bundle Configuration: Support for multi-group item bundles with quantity requirements
- Interactive Bundle Selection: Touch-friendly modal with inventory validation and live editing
- Bundle Pricing: Automatic discount calculation showing real savings
- Hierarchical Cart Display: Organized bundle presentation with editing capabilities
- Bundle Editing: Modify bundle contents after adding to cart with validation
- ERPNext Integration: Seamless sales invoice creation with proper item mapping
- City-based Delivery: Configure delivery charges and expenses per city
- Dynamic Delivery Pricing: Real-time delivery charge calculation from customer addresses
- Editable Delivery Expenses: Modify delivery expenses on-the-fly during sales
- Address Integration: Automatic delivery loading from customer address city information
- Dual Accounting: Delivery income as tax charges, expenses as invoice discounts
- Full-screen POS Interface: Clean, sidebar-free interface with toggle support
- Responsive Design: Optimized for tablets, touch screens, and desktop
- Touch-friendly Interactions: Large buttons, intuitive gestures, and quick actions
- Real-time Updates: Live inventory, pricing, delivery costs, and cart updates
- Enhanced Search: Smart pre-filling and recent customer quick access
- ERPNext v13/v14/v15
- Frappe Framework
- Access to ERPNext site with administrator privileges
-
Clone the app:
cd /path/to/your/frappe-bench bench get-app https://github.com/your-username/jarz_pos.git -
Install the app on your site:
bench --site your-site-name install-app jarz_pos
-
Migrate database (for City doctype):
bench --site your-site-name migrate
-
Restart the bench:
bench restartBelow is a copy-paste friendly checklist for taking Jarz POS live on a fresh server. It assumes you already have SSH access and basic Linux administration rights.
β’ Ubuntu 20.04/22.04 (or Debian 12) with at least 2 vCPU / 4 GB RAM (8 GB recommended)
β’ bench β₯ 5, Node 18, Yarn, Redis, MariaDB 10.6, wkhtmltopdf 0.12.6
β’ ERPNext / Frappe Framework v15 codebase (same branch used in development)
# As root or a sudo user
sudo apt update && sudo apt install git python3-pip -y
pip3 install --upgrade frappe-bench
# Create the bench directory and install Frappe
bench init --frappe-branch version-15 ~/frappe-bench
cd ~/frappe-benchbench new-site your-site.com \
--mariadb-root-password <MYSQL_ROOT> \
--admin-password <ADMIN_PASS>
# (Skip if ERPNext already installed)
bench get-app erpnext --branch version-15
bench --site your-site.com install-app erpnext# Pull the app source
bench get-app jarz_pos https://github.com/your-username/jarz_pos.git
# Install on your production site
bench --site your-site.com install-app jarz_pos
# Run database migrations & automatic patches (custom fields etc.)
bench --site your-site.com migrate# Compile JS/CSS for production (uses Node/Yarn)
bench build --production
# Generate Supervisor + Nginx configs and start services under supervisor
sudo bench setup production frappe
sudo bench restart- POS Profile β Create at
Setup βΊ Point of Sale βΊ POS Profile, set warehouse, price list, and assign users. - Delivery Cities β Add records under
Jarz POS βΊ Citywith income & expense amounts. - Verify Custom Fields β
required_delivery_datetime&sales_invoice_stateshould now appear on Sales Invoice (patch runs automatically). - Test POS β Browse to
https://your-site.com/app/custom-posand complete a test sale. - (Optional) Enable HTTPS with Letβs Encrypt:
sudo bench setup lets-encrypt your-site.com.
cd ~/frappe-bench/apps/jarz_pos
git pull
bench --site your-site.com migrate
bench build --production && bench restartThatβs itβJarz POS is now running in production. Happy selling! π
Navigate to: Setup > Point of Sale > POS Profile
Create a new POS Profile with:
- Name: "Jarz POS Profile" (or your preferred name)
- Warehouse: Select your main warehouse for inventory tracking
- Selling Price List: Select your selling price list (e.g., "Standard Selling")
- Applicable for Users: Add users who should have access to this POS
- Item Groups: Select the item groups you want to display in the POS
- Payment Methods: Configure at least one payment method (required for POS invoices)
Navigate to: Jarz POS > City
Create delivery cities with:
- City Name: Name of the delivery city
- Delivery Income: Amount charged to customer for delivery
- Delivery Expense: Actual cost/expense for delivery to this city
Example:
City: Downtown Riyadh
Delivery Income: $10.00
Delivery Expense: $3.00
Net Delivery Profit: $7.00
Ensure your items are properly categorized into Item Groups:
- Navigate to:
Stock > Setup > Item Group - Create/organize item groups as needed
- Add these groups to your POS Profile
Ensure all items have prices in your configured price list:
- Navigate to:
Stock > Item Price - Create item prices for your selling price list
- Alternatively, set standard selling rates on items
To use the advanced bundle feature:
- Navigate to:
Jarz POS > Jarz Bundle - Create bundle configurations with:
- Bundle name and price
- Item groups with required quantities
- ERPNext Item: Link to an ERPNext item that represents this bundle in sales invoices
- Bundle items and pricing
Important: Each bundle must have an erpnext_item field linking to a valid ERPNext Item. This item will be used when creating sales invoices for bundle purchases.
Ensure your Chart of Accounts has appropriate accounts for delivery:
- Freight and Forwarding Charges: For delivery income/expense tracking
- Miscellaneous Expenses: Fallback account for delivery expenses
- The system will automatically find and use appropriate accounts
- Navigate to:
/app/custom-posin your ERPNext site - Select POS Profile (if multiple profiles are available)
- The POS interface will load with your configured items and settings
- Top Bar:
- Current POS Profile info (name, warehouse, price list)
- Full-screen toggle button
- Left Panel (75%):
- Bundles section (if configured)
- Items organized by item groups with inventory indicators
- Right Panel (25%):
- Smart customer search with recent customers display
- Shopping cart with enhanced management features
- Delivery information with expense editing
- Checkout button
- Recent Customer Display: Last 5 customers shown when field is focused
- Smart Search: Type customer name, mobile, or email to search
- Quick Access: Select recent customers without typing
- Smart Pre-filling:
- Numbers only β Pre-fills Mobile Number field
- Letters (Arabic/English) β Pre-fills Customer Name field
- Address Integration: Automatic delivery charge loading from customer addresses
- Create New: Use "+ New" button to create customers with delivery address
- Remove Items: Click "Remove" button on any cart item with confirmation
- Edit Bundles: Click "Edit" button on bundles to modify contents after adding
- Live Updates: Cart totals update automatically after changes
- Bundle Editing: Full bundle reconfiguration with validation and pricing updates
- Delivery Management: View and edit delivery expenses directly in cart
- Address-based Delivery: Delivery charges determined from customer's address city
- Automatic Calculation: Delivery costs automatically added when customer selected
- Expense Editing: Click "Edit Expense" to modify delivery costs during checkout
- Dual Display: Shows both customer charge and our expense
- Dynamic Loading: Delivery charges loaded when customer is selected
- Individual Items: Click on any item card to add to cart
- Bundles: Click on bundle card, select required items, then add to cart
- Inventory Validation: Out-of-stock items cannot be added (red indicators)
- Price Display: Shows prices from configured price list
- Bundle Inventory: Real-time inventory checking for bundle items
- Initial Selection: Click on any bundle card
- Modal Interface: Interactive modal with item groups and requirements
- Item Selection: Select required quantity from each group with inventory validation
- Visual Feedback: Blue highlighting, quantity badges, remove buttons
- Add to Cart: Complete selection and add bundle to cart
- Edit in Cart: Click "Edit" button to modify bundle contents
- Live Updates: Bundle pricing and savings update automatically
- Add Items: Add individual items and/or bundles to cart
- Select Customer: Choose from recent customers or search/create new
- Automatic Delivery: Delivery charges loaded from customer's address city
- Edit Delivery: Modify delivery expenses if needed using "Edit Expense"
- Review Cart: View items, bundles, delivery charges, and totals
- Remove/Edit: Make any last-minute changes to cart contents
- Click Checkout: System creates and submits sales invoice automatically
- Invoice Success: Cart clears, success dialog with print option
Items Total: $50.00
+ Delivery Charge: $10.00 (Tax - Customer pays)
= Subtotal: $60.00
+ Discount Amount: -$3.00 (Delivery Expense - Our cost)
= Grand Total: $57.00 (Net profit: $7.00 delivery)
= Paid Amount: $57.00
[+ Add New Customer]
Create a new customer
π
Recent Customers
Ahmad Al-Hassan Today
+966501234567 β’ ahmad@email.com
Sarah Johnson Yesterday
sarah@company.com β’ +1234567890
Mohamed Ali 3 days ago
+966509876543
π¦ Combo Meal Bundle [Edit] [Remove]
Bundle Price: $15.00 Save $5.00
βββ Main Course: Burger Γ 1
βββ Side: Fries Γ 1
βββ Drink: Coke Γ 1
Coffee Γ 2 [Remove]
$3.50 each = $7.00
π Delivery: Downtown [Edit Expense]
Delivery Charge: $10.00
Our Expense: $3.00
Total: $32.00
jarz_pos/
βββ jarz_pos/
β βββ doctype/
β β βββ city/ # City delivery configuration
β β βββ jarz_bundle/ # Bundle management
β βββ page/
β β βββ custom_pos/ # Main POS page
β βββ public/
β β βββ js/
β β βββ custom_pos.js # Enhanced POS logic
β βββ hooks.py # App configuration
βββ README.md # This documentation
βββ FIXES_APPLIED.md # Detailed fix documentation
βββ requirements.txt # Python dependencies
loadRecentCustomers()- Smart customer searchaddCartEventHandlers()- Cart managementeditBundleInCart()- Bundle editingeditDeliveryExpense()- Delivery cost managementvalidateAndUpdateBundle()- Bundle validation and updates
Run comprehensive tests:
bench run-tests --app jarz_pos-
City Dropdown Not Showing
- Ensure City doctype exists and has records
- Verify Link field configuration in customer creation
-
Delivery Charges Not Loading
- Check customer has address with valid city
- Verify city configuration has delivery income/expense
-
Bundle Issues
- Ensure bundles have valid
erpnext_itemfield - Check item group configurations in bundle setup
- Ensure bundles have valid
-
Cart Management Not Working
- Verify JavaScript console for errors
- Check cart event handlers are properly attached
- Optimized Loading: Parallel API calls for inventory and pricing
- Smart Caching: Recent customer caching for faster access
- Real-time Updates: Efficient cart rendering with minimal DOM updates
- Touch Optimization: Debounced search and touch-friendly interactions
- User Permissions: POS Profile controls user access
- Data Validation: Server-side validation for all transactions
- Inventory Checks: Real-time inventory validation prevents overselling
- Address Verification: Proper address linking and validation
For issues, feature requests, or support:
- Create issues on GitHub repository
- Check
FIXES_APPLIED.mdfor recent fixes and solutions - Review console logs for debugging information
- β Added remove functionality for cart items and bundles
- β Implemented bundle editing in cart with live updates
- β Added delivery expense editing during checkout
- β Enhanced customer search with recent customers display
- β Improved cart management with confirmation dialogs
- β Added smart date display for recent customers
- β Fixed city dropdown implementation
- β Resolved server errors in address lookup
- β Unified delivery management through customer addresses
- β Enhanced error handling and debugging capabilities
The Jarz POS system provides a complete, enterprise-grade point of sale solution with advanced features tailored for modern retail operations. \n\n---\n\nFor day-to-day POS operation instructions, refer to USAGE.md.