Formula Control Center
Per KG based pricing formulas
Manage bulk oil and spray bottle pricing from a clear Excel-style breakdown. Each row shows how sale price is calculated from product Per KG price.
Bulk Oil Formula
Bulk Oil Formula
| S# | Output | Divide By | Multiply By / Ratio | Oil Multiplier | Final Divide | Add Extra | Formula |
|---|---|---|---|---|---|---|---|
| [[ index + 1 ]] | [[ bulkEditableFormula(row, index) ]]
|
Spray Formula
Spray Formula
| S# | Output | Times | Oil Multiplier | Oil Ratio | Bottle Cost | Packaging + Juice | Formula |
|---|---|---|---|---|---|---|---|
| [[ index + 1 ]] | [[ sprayEditableFormula(row, index) ]]
|
Logistics & Delivery
Courier Partner Management
Apne delivery partners manage karein, unka pending COD record dekhin aur payments clear karein.
| S# | Partner Name | Service Type | Phone | Pending COD | Action |
|---|---|---|---|---|---|
| No courier partners found. | |||||
| [[ idx + 1 ]] |
[[ c.name ]] [[ c.id ]] |
[[ c.serviceType ]] | [[ c.phone ]] | Rs. [[ getCourierLiveBalance(c) ]] |
|
Company Money Control
Bank, wallet aur cash position ek jagah
Accounts manage karo, balances dekho, aur latest payments instantly trace karo.
Cash in Hand
Rs. [[ formatCompactNumber(companyAccountStats.cashInHand) ]]
Cash in Bank
Rs. [[ formatCompactNumber(companyAccountStats.bank) ]]
Cash in Wallet
Rs. [[ formatCompactNumber(companyAccountStats.wallet) ]]
Account Setup
[[ companyAccountManagerMode === 'edit' ? 'Update Account' : 'Add New Account' ]]
[[ b.name ]]
[[ b.type ]]
Saved Accounts
Bank & Wallet Directory
| S# | Account | Type | Number | Opening | Balance | Action |
|---|---|---|---|---|---|---|
| No company accounts found. | ||||||
| [[ ((companyAccountCurrentPage - 1) * companyAccountItemsPerPage) + index + 1 ]] |
[[ acc.name ]] [[ acc.id ]] |
[[ acc.type ]] | [[ acc.number || '-' ]] | Rs. [[ formatCompactNumber(acc.openingBalance || 0) ]] | Rs. [[ formatCompactNumber(acc.currentBalance || 0) ]] |
|
Page [[ companyAccountCurrentPage ]] of [[ companyAccountTotalPages ]]
Live Payment Trail
Last Payments by Account
| S# | Date | Account | Source | Reference | In | Out | Balance After |
|---|---|---|---|---|---|---|---|
| No account payment history found. | |||||||
| [[ ((companyAccountTxnPage - 1) * companyAccountTxnItemsPerPage) + index + 1 ]] | [[ txn.dateTime || '-' ]] |
[[ txn.accountName || getCompanyAccountName(txn.accountId) ]] [[ getCompanyAccountNumber(txn.accountId) ]] |
[[ formatCompanyAccountSource(txn.sourceType) ]] [[ txn.partyName || txn.description || txn.sourceId ]] [[ txn.partyName ? (txn.description || txn.sourceId) : txn.sourceId ]] |
[[ txn.referenceId || txn.sourceId || '-' ]] | [[ txn.amountIn ? 'Rs. ' + formatCompactNumber(txn.amountIn) : '-' ]] | [[ txn.amountOut ? 'Rs. ' + formatCompactNumber(txn.amountOut) : '-' ]] | Rs. [[ formatCompactNumber(txn.balanceAfter || 0) ]] |
Page [[ companyAccountTxnPage ]] of [[ companyAccountTxnTotalPages ]]
Company Account Ledger
[[ companyAccountLedgerType ]] Ledger
| S# | Date | Account | Source | Reference | In | Out | Balance |
|---|---|---|---|---|---|---|---|
| No ledger entries found. | |||||||
| [[ ((companyAccountLedgerPage - 1) * companyAccountLedgerItemsPerPage) + index + 1 ]] | [[ txn.dateTime || '-' ]] |
[[ txn.accountName || getCompanyAccountName(txn.accountId) ]] [[ getCompanyAccountNumber(txn.accountId) ]] |
[[ formatCompanyAccountSource(txn.sourceType) ]] [[ txn.partyName || txn.description || txn.sourceId ]] |
[[ txn.referenceId || txn.sourceId || '-' ]] | [[ txn.amountIn ? 'Rs. ' + formatCompactNumber(txn.amountIn) : '-' ]] | [[ txn.amountOut ? 'Rs. ' + formatCompactNumber(txn.amountOut) : '-' ]] | Rs. [[ formatCompactNumber(txn.balanceAfter || 0) ]] |
Page [[ companyAccountLedgerPage ]] of [[ companyAccountLedgerTotalPages ]]
Add Money
[[ acc.name ]]
[[ acc.type ]] � [[ acc.number || '-' ]]
Rs. [[ formatCompactNumber(acc.currentBalance || 0) ]]
Business Dashboard
Realtime overview of sales, profit, cash, customers & stock
Main page se hi sari important metrics, trends, aur quick operational insights.
[[ card.label ]]
Rs. [[ formatCompactNumber(card.value) ]]
Total Sales
Rs. [[ formatCompactNumber(dashboardTotals.totalSales) ]]
Profit
Rs. [[ formatCompactNumber(dashboardTotals.totalProfit) ]]
Invoices
[[ dashboardTotals.totalInvoices ]]
Revenue
Rs. [[ formatCompactNumber(dashboardTotals.totalRevenue) ]]
Sales Analytics
Last 7 Days Performance
Peak Day
Rs. [[ formatCompactNumber(dashboardSalesAnalyticsMax) ]]
Today's Calendar
[[ dashboardToday.day ]]
[[ dashboardToday.weekday ]]
[[ dashboardToday.monthYear ]]
Business Day
Dashboard refreshed for today
Calendar View
[[ dashboardCalendarTitle ]]
[[ cell.label ]]
[[ cell.holiday || (cell.isToday ? 'Today' : 'Regular Day') ]]
Customers
Walk-in vs Register
Walk-in
[[ dashboardCustomerSplit.walkIn ]]
Register
[[ dashboardCustomerSplit.register ]]
Cash Position
Bank & Wallet Balances
Top Supplier
Best Purchase Volume
[[ dashboardTopSupplier.name ]]
[[ dashboardTopSupplier.company ]]
Purchases
[[ dashboardTopSupplier.purchases ]]
Amount
Rs. [[ formatCompactNumber(dashboardTopSupplier.amount) ]]
Recent Orders
Latest 5 Orders with Quick Details
| S# | Invoice | Customer | Date | Items | Paid | Total |
|---|---|---|---|---|---|---|
| No recent orders found. | ||||||
| [[ ((dashboardRecentOrderPage - 1) * dashboardRecentOrderItemsPerPage) + idx + 1 ]] |
[[ inv.orderId ]] [[ inv.paymentType || 'Cash' ]] |
[[ inv.customerName || 'Walk-in Guest' ]] [[ inv.customerType || 'Walk-in' ]] |
[[ inv.dateTime ]] | [[ (inv.items || []).length ]] Items | Rs. [[ formatCompactNumber(inv.paidAmount || 0) ]] | Rs. [[ formatCompactNumber(inv.totalAmount || 0) ]] |
Showing page [[ dashboardRecentOrderPage ]] of [[ dashboardRecentOrderTotalPages ]]
Top Performance Products
Highest Selling Products
| Rank | Product | Qty | Revenue |
|---|---|---|---|
| No product sales yet. | |||
| # [[ idx + 1 ]] | [[ item.name ]] | [[ item.qty ]] Sold | Rs. [[ formatCompactNumber(item.revenue) ]] |
Pending Cash
Customer Cash Not Confirmed
| Date | Source | Status | Amount |
|---|---|---|---|
| No pending cash rows. | |||
| [[ row.entryDate || '-' ]] | [[ row.sourceId || row.description ]] | [[ row.status || 'PENDING' ]] | Rs. [[ formatCompactNumber(row.amount || 0) ]] |
Payments from Supplier
Recent Supplier Payments
| Supplier | Ref | Date | Paid |
|---|---|---|---|
| No supplier payments yet. | |||
|
[[ row.supplierName ]] [[ row.company ]] |
[[ row.refId || '-' ]] | [[ row.date ]] | Rs. [[ formatCompactNumber(row.credit || 0) ]] |
Inventory Status
Lowest Stock / Restock
[[ item.name ]]
[[ item.category ]]
[[ item.stock ]]
Limit: [[ item.limit || 0 ]]
Best Movers
Highest Sales Items
[[ item.name ]]
Top selling
[[ item.qty ]]
Rs. [[ formatCompactNumber(item.revenue) ]]
Add Item
[[ productsStatus ]]Select Variation STOCK [[ formatDisplayVal(getAvailableStock(selectedProductData.Product_ID), 'g') ]] [[ formatDisplayUnit(getAvailableStock(selectedProductData.Product_ID), 'g') ]]
[[ option.label ]]
[[ option.hint ]]
[[ option.label ]]
[[ option.grams ]]g oil
[[ p.Product_Name ]]
Stock [[ getAvailableStock(p.Product_ID) ]]g | Rs. [[ p.Per_Kg_Price ]] / kg
[[ p.Product_Name ]]
Stock [[ getAvailableStock(p.Product_ID) ]]g | Rs. [[ p.Per_Kg_Price ]] / kg
Total Oil
[[ hybridOilUsedGrams ]]g / [[ hybridSelectedOilGrams ]]g
Rate
Rs. [[ hybridSprayPrice ]]
Steel Cans
Plastic Bottles
Tap selected card again to unselect.
Extra Rs. [[ Math.max(0, Math.ceil(Number(newItem.packing_rate) || 0)) ]]
Current Order
| Item Name | Qty x Rate | Subtotal |
|---|---|---|
| Cart is empty. Add items from the left panel. | ||
|
[[ item.name ]]
|
[[ formatDisplayVal(item.qty, item.unit) ]] [[ formatDisplayUnit(item.qty, item.unit) ]] x [[ item.price ]]
Base Rs. [[ item.customRateAmount ]] / [[ item.customRateUnit ]]
Packing + Rs. [[ Math.ceil(Number(item.packing_rate) || 0) ]]
Disc
[[ item.discountValue ]]%
Rs. [[ item.discountValue ]]
|
Rs. [[ getItemFinalTotal(item) ]] |
Label Printing Station
Live Sticker Preview
Invoice Archive
Find Any Invoice Fast
Search by invoice ID, customer name, and filter by date range.
Total Invoices
[[ filteredInvoices.length ]]
Current Page
[[ invoiceCurrentPage ]]
Visible Entries
[[ paginatedInvoices.length ]]
Returned Amount
Rs. [[ filteredInvoiceReturnedTotal ]]
| S# | Invoice | Customer | Date | Items | Original | Discount | Net | Returned | Action |
|---|---|---|---|---|---|---|---|---|---|
| No invoices found for this search. | |||||||||
| [[ ((invoiceCurrentPage - 1) * invoiceItemsPerPage) + idx + 1 ]] |
[[ inv.orderId ]] [[ inv.customerType || 'Walk-in' ]] |
[[ inv.customerName || 'Walk-in Guest' ]] |
[[ inv.dateTime ]] | [[ inv.items.length ]] Items | Rs. [[ inv.originalTotal ]] | Rs. [[ inv.totalDiscount ]] | Rs. [[ inv.totalAmount ]] |
Rs. [[ getInvoiceReturnSummary(inv).amount ]] Net after: Rs. [[ Math.max(0, Number(inv.totalAmount || 0) - getInvoiceReturnSummary(inv).amount) ]] |
|
S# [[ ((invoiceCurrentPage - 1) * invoiceItemsPerPage) + idx + 1 ]]
[[ inv.orderId ]]
[[ inv.dateTime ]]
Records
Product Wise Profit
Track profit by product from all sales invoices.
Products
Select Product
Selected Product
[[ selectedProductForProfit.name ]]
Total Profit
Rs. [[ formatCompactNumber(productProfitStats.profit) ]]
Total Revenue
Rs. [[ formatCompactNumber(productProfitStats.revenue) ]]
Total Cost
Rs. [[ formatCompactNumber(productProfitStats.cost) ]]
Sold Detail
[[ productProfitSoldSummary ]]
| S# | Invoice | Date | Sold Detail | Revenue | Cost | Profit |
|---|---|---|---|---|---|---|
| [[ rowIdx + 1 ]] |
[[ row.invoiceId ]] [[ row.customer ]] |
[[ row.date ]] |
[[ row.saleDetail ]] [[ productProfitOilLabel(row) ]] |
Rs. [[ formatCompactNumber(row.revenue) ]] | Rs. [[ formatCompactNumber(row.cost) ]] | Rs. [[ formatCompactNumber(row.profit) ]] |
| No sales found for this product. | ||||||
Select a product from the left to view profit details.
Sales Returns
Maal Wapsi Register
Invoice ke against returned item, amount, refund method, aur stock adjustment ka record.
Total Returns
[[ filteredSalesReturns.length ]]
Returned Value
Rs. [[ filteredSalesReturnsTotal ]]
Stock Added
[[ filteredSalesReturns.filter(r => isRawOilReturnRecord(r) && r.stockReversed).length ]]
| S# | Return ID | Invoice | Date | Item | Qty | Refund | Stock | Amount | Receipt |
|---|---|---|---|---|---|---|---|---|---|
| No returns found. | |||||||||
| [[ ((salesReturnPage - 1) * salesReturnItemsPerPage) + idx + 1 ]] |
[[ ret.id ]] [[ ret.reason || '-' ]] |
[[ ret.originalOrderId ]] | [[ ret.dateTime ]] |
[[ ret.productName ]] [[ ret.variation || '-' ]] |
[[ ret.qty ]] [[ String(ret.unit || '').toUpperCase() ]] | [[ ret.refundMethod ]] | [[ isRawOilReturnRecord(ret) && ret.stockReversed ? 'Raw Oil Added' : 'No Stock Add' ]] | Rs. [[ ret.returnAmount ]] | |
Finance Summary
Sale, COGS, Expenses, Net Profit
Yahan sirf summary aur recent finance activity hogi, clutter ke baghair.
Gross Sales
Total before returns
Rs. [[ formatCompactNumber(financeSummary.today.grossSales || 0) ]]
Returns
Deducted from sales
Rs. [[ formatCompactNumber(financeSummary.today.returnAmount || 0) ]]
Net Sales
Gross - Returns
Rs. [[ formatCompactNumber(financeSummary.today.netSales || 0) ]]
COGS
Inventory cost
Rs. [[ formatCompactNumber(financeSummary.today.cogs || 0) ]]
Expenses
Overheads & other
Rs. [[ formatCompactNumber(financeSummary.today.expenses || 0) ]]
Net Profit
Net Sales - COGS - Exp
Rs. [[ formatCompactNumber(financeSummary.today.netProfit || 0) ]]
Month Net Sales
Rs. [[ financeSummary.month.netSales || 0 ]]
Month COGS
Rs. [[ financeSummary.month.cogs || 0 ]]
Month Expenses
Rs. [[ financeSummary.month.expenses || 0 ]]
Month Net Profit
Rs. [[ financeSummary.month.netProfit || 0 ]]
Total Payable
Suppliers ko dene hain
Rs. [[ formatCompactNumber(financeSummary.supplierPayable || 0) ]]
Total Receivable
Customers se lene hain
Rs. [[ formatCompactNumber(financeSummary.customerReceivable || 0) ]]
Recent Expenses
Expense Snapshot
| S# | Date | Expense | Category | Amount |
|---|---|---|---|---|
| No expense entries yet. | ||||
| [[ ((financeExpensePage - 1) * financeSnapshotItemsPerPage) + idx + 1 ]] | [[ exp.dateTime ]] | [[ exp.description ]] | [[ exp.category ]] | Rs. [[ exp.amount ]] |
Recent Returns
Sales Return Snapshot
| S# | Date | Invoice | Item | Amount |
|---|---|---|---|---|
| No return entries yet. | ||||
| [[ ((financeReturnPage - 1) * financeSnapshotItemsPerPage) + idx + 1 ]] | [[ ret.dateTime ]] | [[ ret.originalOrderId ]] |
[[ ret.productName ]] [[ ret.variation || '-' ]] |
Rs. [[ ret.returnAmount ]] |
[[ financeBalanceModalType === 'payable' ? 'Supplier Payables' : 'Customer Receivables' ]]
Rs. [[ formatCompactNumber(financeBalanceModalTotal) ]]
| S# | Name | Contact | Type / Company | Balance |
|---|---|---|---|---|
| No balance found. | ||||
| [[ idx + 1 ]] | [[ row.name ]] | [[ row.phone || '-' ]] | [[ row.company || row.type || '-' ]] | Rs. [[ row.balance ]] |
Expense Tracker
Rozmarra Kharchay Alag Se
Entry form upar, saari expenses neeche clean table me.
Today Expenses
Rs. [[ financeSummary.today.expenses || 0 ]]
Month Expenses
Rs. [[ financeSummary.month.expenses || 0 ]]
Add New Expense
Expense Archive
Find Any Expense Fast
| S# | Date | Description | Category | Payment | Amount |
|---|---|---|---|---|---|
| No expense entries found. | |||||
| [[ ((expenseCurrentPage - 1) * expenseItemsPerPage) + idx + 1 ]] | [[ exp.dateTime ]] |
[[ exp.description ]] [[ exp.notes ]] |
[[ exp.category ]] | [[ exp.paymentMethod ]] | Rs. [[ exp.amount ]] |
Cash Drawer
Daily Cash Cross Verification
Sales yahan aayengi, aur tum confirm kar sako ge ke cash drawer me rakh diya gaya hai.
Opening
Rs. [[ selectedDayCashSummary.opening || 0 ]]
Selected day start
Expected Cash
Rs. [[ selectedDayCashSummary.expected || 0 ]]
Opening + pending in
Confirmed In Drawer
Rs. [[ selectedDayCashSummary.confirmedIn || 0 ]]
Cash received
Cash Out
Rs. [[ selectedDayCashSummary.cashOut || 0 ]]
Drawer se nikla
Pending Confirm
Rs. [[ selectedDayCashSummary.pendingIn || 0 ]]
Unconfirmed cash in
Cash Drawer
Drawer Day Wise History
| S# | Date | Open Drawer | Closing Drawer | Variance |
|---|---|---|---|---|
| No drawer history found. | ||||
| [[ ((cashHistoryPage - 1) * cashHistoryItemsPerPage) + idx + 1 ]] |
[[ session.sessionDate ]] [[ session.sessionId ]] |
Rs. [[ session.openingBalance ]] [[ session.openedAt || '-' ]] |
Rs. [[ session.actualClosing || 0 ]] [[ session.closedAt || (session.status === 'OPEN' ? 'Still open' : '-') ]] |
Rs. [[ session.variance || 0 ]] |
Session Control
[[ financeSummary.openCashSession ? 'Open Session' : 'Closed' ]][[ financeSummary.openCashSession ? 'Closing ke waqt actual cash count enter karo.' : 'Shop start pe opening cash record karo.' ]]
Last closing suggestion: Rs. [[ financeSummary.suggestedOpeningBalance || 0 ]]
Selected Day
Open / Close History
| S# | Date | Opening | Closing | Action |
|---|---|---|---|---|
| No drawer session for selected day. | ||||
| [[ idx + 1 ]] |
[[ session.sessionDate ]] [[ session.status ]] � [[ session.sessionId ]] |
Rs. [[ session.openingBalance ]] [[ session.openedAt || '-' ]] |
Rs. [[ session.actualClosing || 0 ]] [[ session.closedAt || (session.status === 'OPEN' ? 'Still open' : '-') ]] |
|
Daily Cash Feed
Cash In / Out
| S# | Type | Source | Detail | Time | Amount | Status | Action | |
|---|---|---|---|---|---|---|---|---|
| No cash activity found for selected day. | ||||||||
| [[ ((cashDrawerCurrentPage - 1) * cashDrawerItemsPerPage) + idx + 1 ]] | [[ entry.entryType ]] | [[ entry.sourceId ]] |
[[ entry.description ]] [[ entry.detail ]] |
[[ entry.dateTime ]] | Rs. [[ entry.amount ]] | [[ entry.status ]] | ||
Faris POS Cash Drawer Report
[[ cashReportData.fromDate ]] to [[ cashReportData.toDate ]]
Rs. [[ cashReportData.summary.opening || 0 ]]
Rs. [[ cashReportData.summary.expected || 0 ]]
Rs. [[ cashReportData.summary.actual || 0 ]]
Rs. [[ cashReportData.summary.confirmed || 0 ]]
Rs. [[ cashReportData.summary.pending || 0 ]]
| S# | Date | Type | Source | Amount | Status |
|---|---|---|---|---|---|
| [[ idx + 1 ]] | [[ entry.entryDate ]] | [[ entry.entryType ]] | [[ entry.sourceId ]] | Rs. [[ entry.amount ]] | [[ entry.status ]] |
Product Master
[[ productModalMode === 'edit' ? 'Edit Product' : 'Add New Product' ]]
Product Master
Products Sheet Control
Master fragrance pricing yahan se edit hogi, POS aur Price Checker dono isi data ko use karenge.
| S# | Product | Brand | Per Kg | 100G | 50G | 30G | Action | |
|---|---|---|---|---|---|---|---|---|
| [[ ((productMasterPage - 1) * productMasterItemsPerPage) + idx + 1 ]] | [[ p.Brand_Name || 'No Brand' ]] | Rs. [[ p.Per_Kg_Price || 0 ]] | Rs. [[ calculateBulkOilPrice(p.Per_Kg_Price, 100) ]] | Rs. [[ calculateBulkOilPrice(p.Per_Kg_Price, 50) ]] | Rs. [[ calculateBulkOilPrice(p.Per_Kg_Price, 30) ]] |
|
||
|
Spray Formula Details Calculated from Per KG price: Rs. [[ p.Per_Kg_Price || 0 ]]
100ML / 30g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 30) ]]
50ML / 15g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 15) ]]
50ML / 12g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 12) ]]
30ML / 10g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 10) ]]
30ML / 8g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 8) ]]
Tester / 1g Oil
Rs. [[ calculateSprayPrice(p.Per_Kg_Price, 1) ]]
|
||||||||
| No products found. | ||||||||
Inventory Control
Inventory Management
Stock levels monitor karo, real restock purchase flow se karo, aur manual edits sirf correction ke liye rakho.
Inventory Control
Add Inventory Stock
1. Select Item
[[ p.Product_Name ]]
ID: [[ p.Product_ID ]]
Custom Entry
Selected Item
[[ invForm.name ]]
Mapped ID: [[ invForm.product_id ]]
2. Quantity & Category
[[ option ]]
[[ option.label ]]
[[ option.hint ]]
Ethanol / Solvent Logic
Spray sale ke waqt solvent_ml isi ML stock se minus hoga. Is item ko ML quantity aur Per KG cost mein save karo.
3. Cost & Submit
Total Cost Price
[[ invAutoTotalCost > 0 ? formatCurrency(invAutoTotalCost) : 'Auto total cost' ]]
Unit (UOM)
[[ invDisplayUom ]]
Low Alert Limit
Cost Unit
[[ invDisplayCostUnit ]]
Auto Cost
[[ formatCurrency(invAutoUnitCost) ]]
Current Stock Levels
| S# | Name | Category | In Stock | Low Alert | Action |
|---|---|---|---|---|---|
| No inventory records found. | |||||
| [[ (invCurrentPage - 1) * invItemsPerPage + index + 1 ]] |
[[ inv.name ]] [[ inv.id ]] |
[[ inv.category ]] | [[ formatDisplayVal(inv.stock, inv.uom) ]] [[ formatDisplayUnit(inv.stock, inv.uom) ]] | [[ inv.limit ]] |
|
Daily Operations
Daily Consumables Monitor
Ethanol, bottles aur boxes same raw inventory se monitor karo. Purchase flow wahi rahega; daily usage yahin se deduct hoga.
[[ card.label ]]
[[ card.stock ]]
Used Today
[[ card.today ]]
Low Items
[[ card.low ]]
Consumable Stock
Filtered from current raw inventory only.
| S# | Item | Type | In Stock | Used Today | Used 7 Days | Used 30 Days | Action |
|---|---|---|---|---|---|---|---|
| No ethanol, bottle or box items found. | |||||||
| [[ index + 1 ]] |
[[ item.name ]] [[ item.id ]] |
[[ consumableTypeLabel(item) ]] | [[ formatDisplayVal(item.stock, item.uom) ]] [[ formatDisplayUnit(item.stock, item.uom) ]] | [[ consumableUsed(item.id, 'today') ]] | [[ consumableUsed(item.id, 'week') ]] | [[ consumableUsed(item.id, 'month') ]] |
|
People & Stock In
Customer Management
Customers manage karein, balances dekhein aur ledger instantly open karein.
| S# | Customer Name | Phone | Type | Balance Due | Action |
|---|---|---|---|---|---|
| No customers found. | |||||
| [[ (custCurrentPage - 1) * custItemsPerPage + index + 1 ]] |
[[ c.name ]] [[ c.id ]] |
[[ c.phone ]] | [[ c.type ]] | Rs. [[ c.balance ]] |
|
Page [[ custCurrentPage ]] of [[ custTotalPages ]]
Customer Purchase Trail
[[ selectedCustomerForPurchases?.name || 'Customer' ]]
[[ selectedCustomerForPurchases?.id || '' ]]
Selected Invoice
[[ selectedCustomerInvoice.orderId ]]
[[ selectedCustomerInvoice.dateTime || selectedCustomerInvoice.date ]]
Paid
Rs. [[ formatCompactNumber(selectedCustomerInvoice.paidAmount || 0) ]]
Total
Rs. [[ formatCompactNumber(selectedCustomerInvoice.totalAmount || selectedCustomerInvoice.total || 0) ]]
| S# | Item | Qty | Price | Discount | Subtotal |
|---|---|---|---|---|---|
| [[ itemIndex + 1 ]] |
[[ item.name ]] [[ item.variation || item.unit || '' ]] |
[[ item.qty ]] | Rs. [[ formatCompactNumber(item.price || 0) ]] | [[ item.discountAmount ? 'Rs. ' + formatCompactNumber(item.discountAmount) : '-' ]] | Rs. [[ formatCompactNumber(item.subTotal || 0) ]] |
Select an invoice to inspect items.
Receive New Stock
Restock via Purchase
[[ restockSourceItem.name ]]
Supplier select karo, quantity aur bill amount enter karo. Stock aur supplier khata dono update honge.
Current Purchase Bill
| Item Name | Category | Qty & Base Rate | Subtotal | Action |
|---|---|---|---|---|
| [[ item.name ]] | [[ item.displayCategory || item.category ]] |
[[ item.qty ]] [[ item.unit ]]
Base Rs. [[ item.buyingPrice ]] / [[ item.category === 'Oil' ? 'gram' : (item.category === 'Solvent' ? 'ml' : 'pc') ]]
Rs. [[ item.purchasePerKgPrice ]] / KG
|
Rs. [[ item.totalLinePrice ]] | |
| No items added to the bill yet. | ||||
Total Bill
Rs. [[ purTotal ]]
People & Stock In
Supplier Management
Vendors manage karo, payable khata dekho, aur supplier profile clean record mein rakho.
Register New Supplier
Suppliers Directory
| S# | Vendor | Contact | Company | City | Payable (Udhaar) | Action |
|---|---|---|---|---|---|---|
| [[ ((supplierCurrentPage - 1) * supplierItemsPerPage) + index + 1 ]] |
[[ s.name ]]
|
[[ s.phone || 'N/A' ]]
|
[[ s.company || 'N/A' ]]
|
[[ s.city || 'N/A' ]]
|
Rs. [[ s.balance ]] | |
| No suppliers found. | ||||||
Edit Supplier
Supplier Khata
[[ selectedSuppName ]]
Payable Balance (Udhaar)
Rs. [[ selectedSuppBalance ]]
Pay Supplier
| S# | Date | Description & Ref ID | Bill | Paid (Cash) | Balance |
|---|---|---|---|---|---|
| [[ (suppLedgerCurrentPage - 1) * suppLedgerItemsPerPage + index + 1 ]] | [[ entry.date ]] |
[[ entry.description ]]
[[ entry.refId ]]
|
[[ entry.debit > 0 ? 'Rs. ' + entry.debit : '-' ]] | [[ entry.credit > 0 ? 'Rs. ' + entry.credit : '-' ]] | Rs. [[ entry.balance ]] |
| No ledger records found. | |||||
Maal History (Purchases)
[[ selectedSuppName ]]
| S# | Date | Item Name & ID | Qty Received | Buy Rate | Line Total |
|---|---|---|---|---|---|
| [[ (historyCurrentPage - 1) * historyItemsPerPage + index + 1 ]] | [[ h.date ]] |
[[ h.name ]]
[[ h.purchaseId ]]
|
[[ h.qty ]] [[ h.unit ]] | Rs. [[ formatDisplayVal(h.pricePerKg ?? h.price) ]] [[ h.rateLabel || (h.pricePerKg ? 'PER KG' : ('PER ' + (h.unit || '').toUpperCase())) ]] | Rs. [[ h.total ]] |
| Loading maal history... | |||||
| No purchase history found. | |||||
Quick Price Checker
Instant barcode scan and custom price calculator for salesmen
PDF Brand Filter
Company Wise Price List
Search brand aur selected company ka PDF banao.
Customer PDF
Perfume Price List
100ML, 50ML (12g), 30ML (8g) rates.
Wholesale PDF
Bulk Oil Price List
KG, 100G, 50G, 30G rates.
[[ p.Product_Name ]]
Bulk Rs. [[ formatDisplayVal(p.Per_Kg_Price) ]] | 50ML Rs. [[ formatDisplayVal(calculateSprayPrice(p.Per_Kg_Price, 12)) ]]
Selected Fragrance
[[ pcSelectedProduct.Product_Name ]]
Bulk aur spray dono rates ek hi screen par, bilkul POS flow ki tarah.
Per KG
Rs. [[ formatDisplayVal(pcSelectedProduct.Per_Kg_Price) ]]
Stock
[[ formatDisplayVal(pcAvailableStock, 'g') ]] [[ formatDisplayUnit(pcAvailableStock, 'g') ]]
Bulk Oil
Quick Rates
Rs. [[ formatDisplayVal(pcCustomPrice) ]]
Perfume
Quick Rates
Rs. [[ formatDisplayVal(pcCustomSprayPrice) ]]
Available Bottles
Current Bottle Stock
Spray ke liye is waqt itni bottle quantity available hai.
5ML
[[ pcBottleStock5ML ]]
30ML
[[ pcBottleStock30ML ]]
50ML
[[ pcBottleStock50ML ]]
100ML
[[ pcBottleStock100ML ]]