Faris Fragnance

Welcome Back

Login ke baad app direct realtime database se fresh data layegi.

[[ loginError ]]

[[ currentTabLabel ]]

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 ]]

No bank or wallet found.

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 ]]

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) ]]

[[ getGrowthLabel(card.growth) ]]

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) ]]

[[ formatCompactNumber(point.total) ]]
[[ point.label ]]

Today's Calendar

[[ dashboardToday.day ]]

[[ dashboardToday.weekday ]]

[[ dashboardToday.monthYear ]]

Business Day

Dashboard refreshed for today

Calendar View

[[ dashboardCalendarTitle ]]

[[ day ]]
[[ cell.day ]]
Holiday indication
Hover for details

Customers

Walk-in vs Register

Walk-in

[[ dashboardCustomerSplit.walkIn ]]

Register

[[ dashboardCustomerSplit.register ]]

Cash Position

Bank & Wallet Balances

Cash in Bank Rs. [[ formatCompactNumber(dashboardAccountBuckets.bank) ]]
Cash in Wallet Rs. [[ formatCompactNumber(dashboardAccountBuckets.wallet) ]]

Top Supplier

Best Purchase Volume

[[ dashboardTopSupplier.name ]]

[[ dashboardTopSupplier.company ]]

Purchases

[[ dashboardTopSupplier.purchases ]]

Amount

Rs. [[ formatCompactNumber(dashboardTopSupplier.amount) ]]

No supplier purchase data yet.

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

No low stock alerts.

[[ item.name ]]

[[ item.category ]]

[[ item.stock ]]

Limit: [[ item.limit || 0 ]]

Best Movers

Highest Sales Items

No product velocity yet.

[[ 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') ]]

Bulk (Oils)
Total Price
Rs. [[ calculateBulkOilPrice(selectedProductData.Per_Kg_Price, customGramsValue || 0) ]]
@ Rs. [[ getCustomBulkUnitRate(selectedProductData.Per_Kg_Price, customGramsValue || 0) ]] / g

Sprays (Walk-in)

[[ option.label ]]

[[ option.hint ]]

[[ getCustomSprayBottleStock(option.value) ]] left
No size found
Calculated Rate
Rs. [[ selectedProductData && selectedProductData.Per_Kg_Price ? calculateSprayPrice(selectedProductData.Per_Kg_Price, customSprayGrams || 0) : 0 ]]

[[ option.label ]]

[[ option.grams ]]g oil

[[ getCustomSprayBottleStock(option.label.replace(' ', '')) ]] left
No size found

[[ p.Product_Name ]]

Stock [[ getAvailableStock(p.Product_ID) ]]g | Rs. [[ p.Per_Kg_Price ]] / kg

No perfume found

[[ p.Product_Name ]]

Stock [[ getAvailableStock(p.Product_ID) ]]g | Rs. [[ p.Per_Kg_Price ]] / kg

No perfume found
Rs. [[ hybridOilOneLivePrice ]]
Rs. [[ hybridOilTwoLivePrice ]]

Total Oil

[[ hybridOilUsedGrams ]]g / [[ hybridSelectedOilGrams ]]g

Rate

Rs. [[ hybridSprayPrice ]]

G
[[ u ]]
[[ customEntryPreview ]]

Steel Cans

Plastic Bottles

Tap selected card again to unselect.

[[ b.name ]]
Stock: [[ b.stock ]]
No bottles found!

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

[[ p.Product_Name ]]
No items found
+ Add Custom Entry Shift+Enter

Live Sticker Preview

Faris Fragnance
[[ labelData.name || 'ITEM NAME' ]]
[[ labelData.ml || '00ml' ]] [[ todayDate ]]

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 ]]

No invoices found for this search.

S# [[ ((invoiceCurrentPage - 1) * invoiceItemsPerPage) + idx + 1 ]]

[[ inv.orderId ]]

[[ inv.dateTime ]]

[[ inv.items.length ]] Items
Customer[[ inv.customerName || 'Walk-in Guest' ]]
OriginalRs. [[ inv.originalTotal ]]
DiscountRs. [[ inv.totalDiscount ]]
NetRs. [[ inv.totalAmount ]]
ReturnedRs. [[ getInvoiceReturnSummary(inv).amount ]]
Showing [[ paginatedInvoices.length ]] of [[ filteredInvoices.length ]] invoices
Page [[ invoiceCurrentPage ]] / [[ invoiceTotalPages ]]

Records

Product Wise Profit

Track profit by product from all sales invoices.

Products

Select Product

No product sales data.

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 ]]
Showing [[ paginatedSalesReturns.length ]] of [[ filteredSalesReturns.length ]] returns
Page [[ salesReturnPage ]] / [[ salesReturnTotalPages ]]

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) ]]

[[ numberToWords(financeSummary.today.grossSales || 0) ]]

Returns

Deducted from sales

Rs. [[ formatCompactNumber(financeSummary.today.returnAmount || 0) ]]

[[ numberToWords(financeSummary.today.returnAmount || 0) ]]

Net Sales

Gross - Returns

Rs. [[ formatCompactNumber(financeSummary.today.netSales || 0) ]]

[[ numberToWords(financeSummary.today.netSales || 0) ]]

COGS

Inventory cost

Rs. [[ formatCompactNumber(financeSummary.today.cogs || 0) ]]

[[ numberToWords(financeSummary.today.cogs || 0) ]]

Expenses

Overheads & other

Rs. [[ formatCompactNumber(financeSummary.today.expenses || 0) ]]

[[ numberToWords(financeSummary.today.expenses || 0) ]]

Net Profit

Net Sales - COGS - Exp

Rs. [[ formatCompactNumber(financeSummary.today.netProfit || 0) ]]

[[ numberToWords(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 ]]
Showing [[ paginatedFinanceExpenses.length ]] of [[ financeExpenseSnapshot.length ]]
[[ financeExpensePage ]] / [[ financeExpenseTotalPages ]]

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 ]]
Showing [[ paginatedFinanceReturns.length ]] of [[ financeReturnSnapshot.length ]]
[[ financeReturnPage ]] / [[ financeReturnTotalPages ]]

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 ]]
Showing [[ paginatedExpensesList.length ]] of [[ filteredExpensesList.length ]] expenses
Page [[ expenseCurrentPage ]] / [[ expenseTotalPages ]]

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

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

[[ cashDrawerEntryDate || financeSummary.openCashSession?.sessionDate || 'No Date Selected' ]]
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 ]]
Showing [[ paginatedCashDrawerEntries.length ]] of [[ filteredCashDrawerEntries.length ]] cash entries
Page [[ cashDrawerCurrentPage ]] / [[ cashDrawerTotalPages ]]

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
No products found.
Showing [[ paginatedProductMaster.length ]] of [[ filteredProductMaster.length ]] products
Page [[ productMasterPage ]] / [[ productMasterTotalPages ]]

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 ]]
Showing [[ paginatedInventory.length ]] of [[ filteredInventory.length ]] entries
[[ invCurrentPage ]] / [[ invTotalPages ]]

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.

[[ s.name ]] ([[ s.company ]])
No supplier found
[[ inv.name ]] [[ inv.category ]]
No existing item found.
Base Unit Rate: Rs. [[ calculatedPerUnitRate ]] / [[ purchaseItemRateLabel ]]
[[ purchaseInventoryCostTitle ]] [[ purItemForm.previousPerKgPrice ? ('Rs. ' + purItemForm.previousPerKgPrice + ' / ' + purchaseCurrentCostLabel) : 'No purchase cost yet' ]]
Inventory Will Add: [[ calculatedInventoryGrams ]] [[ purchaseInventoryUnitLabel ]]

Current Purchase Bill

Assigned Vendor [[ purSuppSearchQuery || 'Not Selected' ]]
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.
Rs. [[ purDue ]]

Total Bill

Rs. [[ purTotal ]]

People & Stock In

Supplier Management

Vendors manage karo, payable khata dekho, aur supplier profile clean record mein rakho.

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.
Showing page [[ supplierTotalPages === 0 ? 0 : supplierCurrentPage ]] of [[ supplierTotalPages ]]

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.

No brand found.

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)) ]]

[[ p.Product_ID ]]
No items found

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

100G
Price Rs. [[ formatDisplayVal(calculateBulkOilPrice(pcSelectedProduct.Per_Kg_Price, 100)) ]]
50G
Price Rs. [[ formatDisplayVal(calculateBulkOilPrice(pcSelectedProduct.Per_Kg_Price, 50)) ]]
30G
Price Rs. [[ formatDisplayVal(calculateBulkOilPrice(pcSelectedProduct.Per_Kg_Price, 30)) ]]
12G
Price Rs. [[ formatDisplayVal(calculateBulkOilPrice(pcSelectedProduct.Per_Kg_Price, 12)) ]]
6G
Price Rs. [[ formatDisplayVal(calculateBulkOilPrice(pcSelectedProduct.Per_Kg_Price, 6)) ]]
Custom
Price

Rs. [[ formatDisplayVal(pcCustomPrice) ]]

Perfume

Quick Rates

100ML 30g
Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 30)) ]]
50ML 12g
Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 12)) ]]
50ML 15g
Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 15)) ]]
30ML 8g
Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 8)) ]]
30ML 10g
Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 10)) ]]
5ML
Tester Price Rs. [[ formatDisplayVal(calculateSprayPrice(pcSelectedProduct.Per_Kg_Price, 1)) ]]
Custom

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 ]]