ZenZen Mart · ERP v3
{{ osTitle }}
{{ osSubtitle }}
| Order | Customer | Governorate | Channel | Status | COD / Total | Blended margin | Profit & subsidy | Actions | |
|---|---|---|---|---|---|---|---|---|---|
| No orders match these filters | |||||||||
|
{{ o.date || o.createdAt || '' }}
|
{{ osOrderName(o) }}
{{ osOrderPhone(o) }}
|
{{ osChannelLabel(o) }} | {{ Number(o.total || o.revenue || 0).toFixed(2) }} |
{{ osMarginOf(o).blendedMarginPct.toFixed(1) }}%
cost {{ Number(osMarginOf(o).landedCost).toFixed(0) }} EGP
⚠️ Low Margin Basket
partial cost
|
Gross {{ osEconOf(o).gross_profit_before_shipping.toFixed(0) }}
{{ osEconOf(o).true_net_profit.toFixed(2) }} EGP net
{{ osEconOf(o).net_margin_pct == null ? 'n/a' : osEconOf(o).net_margin_pct.toFixed(1) + '%' }}
subsidy {{ osEconOf(o).shipping_subsidy.toFixed(0) }} EGP
|
BOM ✓ | |||
| SKU / Barcode | Product | Qty | Stock | Expiry (FEFO) | Min | Adjust |
|---|---|---|---|---|---|---|
| No SKUs match | ||||||
|
{{ item.sku }}
{{ item.barcode || '—' }}
|
{{ item.nameEn }}
{{ zzCategoryType(item) === 'Global_Import' ? 'Import' : 'Essential' }}
Bundle ×{{ zzBundleComponents(item).length }}
{{ item.nameAr }}
{{ item.nameZh }}
|
{{ item.quantity || 0 }} | {{ osStockLabel(item) }} | {{ osExpiryChip(item).label }} {{ item.expiry_date || item.expiryDate || '—' }} | {{ item.min_stock_alert || item.minStock || 5 }} | |
| SKU | Product | Type | Cost (FC) | Rate → EGP | Landed EGP | Sell EGP | Gross margin | Driver |
|---|---|---|---|---|---|---|---|---|
| {{ row.sku }} | {{ row.nameEn }} |
{{ row.categoryType === 'Global_Import' ? 'Import' : 'Essential' }}
target {{ row.targetFloor }}%+
|
{{ row.symbol }} {{ Number(row.costFc).toFixed(2) }}
—
{{ row.currency }}
|
{{ Number(row.rate||0).toFixed(3) }}
1.000
stored
|
{{ Number(row.landed||0).toFixed(2) }} | {{ Number(row.sell||0).toFixed(2) }} | {{ row.margin == null ? '—' : row.margin.toFixed(1) + '%' }} | Top driver |
| Order | Governorate | Courier | COD EGP | COD settlement status | Reconciled |
|---|---|---|---|---|---|
| No COD shipments | |||||
|
{{ o.id }}
{{ osOrderName(o) }} · {{ osOrderPhone(o) }}
|
{{ osOrderGov(o) || '—' }} |
{{ o.jtCourier || o.courierName || '—' }}
{{ o.jtAwb || o.courierAwb || 'no waybill' }}
|
{{ Number(o.total || o.revenue || 0).toFixed(2) }} |
{{ osCodShortLabel(o) }}
{{ String(o.codSettledAt).slice(0,10) }}
|
|
ZenZen Business Financial Report
Period: {{ dashStartDate }} to {{ dashEndDate }}
True net profit bridge
Shipping subsidy by governorate
| Governorate | Tier | Orders | Delivery collected | Courier cost | Subsidy absorbed | Avg / order |
|---|---|---|---|---|---|---|
| {{ g.gov }} | {{ g.tier ? 'T' + g.tier : 'n/a' }} | {{ g.orders }} | {{ g.collected.toFixed(2) }} | {{ g.courier.toFixed(2) }} | {{ g.subsidy.toFixed(2) }} | {{ (g.orders ? g.subsidy / g.orders : 0).toFixed(2) }} |
Revenue by Department
Operational Stats & CRM
Inventory Value
Revenue mix
Daily revenue
Welcome, {{ currentUser.name }}!
You are logged in with limited access. Please navigate to the appropriate sections to perform your tasks.
⚠️ Low Stock Alerts
Transactions
| Item | SKU | Qty | Price | Total |
|---|---|---|---|---|
| {{ it.nameEn }} | {{ it.sku }} | {{ it.sellQty || it.qty || 0 }} | {{ Number(it.sellPrice || it.price || 0).toFixed(2) }} | {{ ((it.sellQty || it.qty || 0) * (it.sellPrice || it.price || 0)).toFixed(2) }} |
| No line items saved on this invoice. | ||||
No sales in the selected dates — showing all invoices. Change From/To to filter.
Item sales
Profit = invoice revenue − cost saved at checkout (product + shipping share). Not today's warehouse cost.
| Photo | Product | SKU | Qty sold | Revenue | Cost | Profit | Margin |
|---|---|---|---|---|---|---|---|
| {{ it.nameEn }} | {{ it.sku }} | {{ it.qty }} | {{ it.revenue.toFixed(0) }} | {{ Number(it.cost||0).toFixed(0) }} | {{ it.profit.toFixed(0) }} | {{ Number(it.margin||0).toFixed(0) }}% |
Customer sales
Who bought, how many invoices, revenue and profit.
| Customer | Invoices | Qty | Revenue | Avg invoice | Profit |
|---|---|---|---|---|---|
| {{ c.name }} | {{ c.orders }} | {{ c.qty }} | {{ c.revenue.toFixed(0) }} | {{ Number(c.avg||0).toFixed(0) }} | {{ c.profit.toFixed(0) }} |
Online Orders
Alpha tools
No orders found matching your criteria.
| ID | Phone | Customer | Total EGP | Status | Actions |
|---|---|---|---|---|---|
| {{ order.id }} | {{ ooPhone(order) }} |
{{ ooCustomerName(order) }}
{{ ooViaLabel(order) }}
|
{{ Number(order.total || order.revenue || 0).toFixed(2) }} EGP
⚠️ Low Margin Basket
{{ osMarginOf(order).blendedMarginPct.toFixed(1) }}% margin
|
{{ ooStatusLabel(ooDisplayStatus(order)) }} |
|
|
Customer
{{ ooCustomerName(order) }} · {{ ooPhone(order) }}
{{ (order.customer && order.customer.address) || order.address || (order.customer && order.customer.area) || order.area || '—' }}
{{ order.date || order.createdAt }}
Delivery: {{ order.deliveryFee }} · Discount: -{{ order.discount }}
{{ order.jtCourier || order.courierName || 'Courier' }} · {{ order.jtAwb || order.courierAwb || 'no waybill' }}
Actual delivery {{ Number(order.courier_invoice_egp).toFixed(2) }} EGP · COD fee {{ Number(order.codFeeEGP).toFixed(2) }}
Items
{{ item.qty }}x {{ item.nameEn }}
{{ ooLineCatLabel(item) }}
{{ ((Number(item.price)||0)*(Number(item.qty)||0)).toFixed(2) }}
Blended gross margin
{{ osMarginOf(order).blendedMarginPct.toFixed(1) }}%
cost data missing
Revenue {{ Number(osMarginOf(order).goodsRevenue).toFixed(2) }} · Landed cost {{ Number(osMarginOf(order).landedCost).toFixed(2) }} · Profit {{ Number(osMarginOf(order).grossProfit).toFixed(2) }} EGP
Mix: {{ osMarginOf(order).mix['Global_Import'] }}% imported · {{ osMarginOf(order).mix['Convenience_Essential'] }}% essentials
⚠️ Low Margin Basket — under {{ osMarginOf(order).threshold }}%
Only {{ osMarginOf(order).costCoveragePct }}% of the basket has landed cost — treat as indicative.
|
|||||
Shipment — Alpha
{{ courierLinkOrder && courierLinkOrder.id }} — works after it shipped. Customer total does not change.
Edit Web Order
{{ editingWebOrder.id }} · {{ editingWebOrder.status || '' }}
Linked customerId: {{ webOrderEditForm.customerId }}
١–٢ مجاني من ٨٠٠ · ٣ من ١٣٠٠ · ٤ حد ١٨٠٠ / مجاني ٢٧٠٠ — Zones 1–2 free 800 · Z3 1300 · Z4 min 1800 / free 2700
These are our cost. The customer invoice does not change. You can edit this after the order shipped.
Items · delivery fee stays {{ Number(editingWebOrder.deliveryFee||0) }} EGP
{{ webOrderEditSubtotal().toFixed(2) }} + {{ Number(editingWebOrder.deliveryFee||0).toFixed(2) }} del = {{ (webOrderEditSubtotal() + Number(editingWebOrder.deliveryFee||0) - Number(editingWebOrder.discount||0)).toFixed(2) }} EGP
📱 أوردر واتساب / هاتف
{{ manualOrder.crmHit }}
١–٢ مجاني من ٨٠٠ · ٣ من ١٣٠٠ · ٤ حد ١٨٠٠ / مجاني ٢٧٠٠ — Zones 1–2 free 800 · Z3 1300 · Z4 min 1800 / free 2700
Point of Sale (Retail)
Current Cart
Wholesale Orders
Add Item from Warehouse
Current Invoice Details
| SKU & Product | Qty | Unit Price | Total | Action |
|---|---|---|---|---|
| {{ cartItem.nameEn }} | {{ cartItem.sellQty }} | {{ cartItem.sellPrice.toFixed(2) }} EGP | {{ (cartItem.sellQty * cartItem.sellPrice).toFixed(2) }} EGP |
Past Wholesale Invoices
Expenses & Marketing 📊
Promo Codes
Business & Marketing Expenses
{{ crmTab === 'suppliers' ? 'Suppliers CRM & Sourcing 🌍' : 'Customers CRM & Pipeline 👥' }}
New version · {{ crmTab === 'suppliers' ? 'Sourcing partners auto-mapped from job orders, classified by location' : 'Customer 360 · one CRM source' }}
| Client / Company Name & Code | Type & Contact | Location | Orders | Last order | LTV & Rewards Points |
|---|---|---|---|---|---|
|
{{ client.type === 'Wholesale' && client.companyName ? client.companyName : client.name }}
{{ client.stage }}
Contact: {{ client.name }}
{{ client.customerCode }}
|
{{ client.type }}
{{ client.phone }}
{{ client.phone2 }}
|
{{ client.country || 'Egypt' }}
{{ client.area || 'N/A' }}
|
{{ client.ordersCount || 0 }} |
{{ customerIdleLabel(client) }}
|
{{ (client.totalSpent || 0).toFixed(2) }} EGP
{{ (client.points||0) >= 1500 ? 'Gold' : ((client.points||0) >= 500 ? 'Silver' : 'Bronze') }}
{{ client.points || 0 }} Pts
|
| Supplier / Store | Location | Type | Currency | Job orders | Last order |
|---|---|---|---|---|---|
|
{{ sup.name }}
{{ sup.id }}
|
{{ sup.country || 'Unspecified' }}
{{ sup.city }}
|
{{ sup.type || 'Import' }} |
{{ sup.currency || '—' }}
1 {{ sup.currency }} = {{ zzFxRate(sup.currency).toFixed(3) }} EGP
|
{{ sup.orderCount || (sup.jobOrders || []).length || 0 }} |
{{ sup.lastOrderDate || '—' }}
|
{{ jobDeskTab === 'local' ? 'Local Market Purchase' : 'Import Job Order' }}
{{ jobDeskTab === 'local' ? 'EGP only · rate 1 · no freight or PAX tickets.' : 'Any origin · ' + jobCurrencyLabel + ' → EGP @ ' + Number(jobOrder.exchangeRate || 0).toFixed(3) + ' · PAX / Sea / Air' }}
🧳 PAX Trip Cost Details
| Trans. | Product Info & SKU | Qty & Pcs | Landed (EGP) | Sell Price | Action |
|---|---|---|---|---|---|
|
{{ item.nameEn }}
SKU: {{ item.sku }}
{{ item.edition }}
|
{{ item.quantity }} {{ item.packageType }} | {{ (calculateLandedCost(item) || 0).toFixed(2) }} | {{ (calculateTargetSellPrice(item) || 0).toFixed(2) }} |
{{ jobDeskTab === 'local' ? 'Local purchases (not in warehouse yet)' : 'Import in transit (not in warehouse yet)' }}
| Product | Pcs | Weight (kg) | Cost (FC) | Cost EGP | Sell / Pc | Margin % | Expected Revenue | Expected Profit | Action |
|---|---|---|---|---|---|---|---|---|---|
|
{{ t.nameEn }}
{{ t.sku }}
|
{{ (t.snapshot && t.snapshot.pcs) || 0 }} | {{ Number((t.snapshot && t.snapshot.weightKg) || ((t.unitWeightKg || 0) * (t.quantity || 0)) || 0).toFixed(3) }} {{ Number(t.unitWeightKg || 0).toFixed(3) }} /pkg |
{{ formatTransitCostCny(t) }} |
{{ zzMoney((t.snapshot && t.snapshot.costEGP) || 0) }}
{{ zzMoney((t.snapshot && t.snapshot.costPerPcEGP) || 0) }} /pc
|
Total: {{ zzMoney(transitExpectedRevenue(t)) }}
|
% | {{ zzMoney(transitExpectedRevenue(t)) }} | {{ zzMoney(transitExpectedProfit(t)) }} |
|
Products
Catalog for storefront — prices & visibility (no stock counts) · New version · catalog tools · {{ productsNeedsFixCount }} need fix
To be corrected
Missing barcode, weight, pcs, price, duplicates, and other clear data gaps — list shrinks when you Save with fields filled
| SKU | Product | Missing | |
|---|---|---|---|
| {{ row.item.sku }} |
{{ row.item.nameEn }}
{{ row.item.nameAr }}
|
Warehouse Inventory
Dark stock board · card inventory · select to print or share with customers
More ▾
🗑 Deleted Products (Soft Deleted)
| SKU & Name | Deleted At | Actions | |
|---|---|---|---|
|
{{ item.nameEn }}
{{ item.sku }} · {{ item.category }}
|
{{ item.deletedAt ? new Date(item.deletedAt).toLocaleString() : '-' }} |
Similar products — check photo & location before merge
Same name can be a different flavor. Look at the picture. Deleted items are not listed. Pick KEEP only if they are truly the same product.
Accounting
Variant B-v3 · editable couriers & payment methods · FX + QR · courier COD AR · materials · ads · cash flow · sidebar live links · localStorage only (no warehouse/DB)
Accounting · costs (live ERP)
Same numbers as Dashboard + Expenses. Nothing from the old demo. Pay: cash / InstaPay / WhatsApp (manual).
Add cost (ads, materials, courier…)
Saves into the ERP database — also shows under Expenses & Marketing.
Cost log
| Date | What | Type | EGP | |
|---|---|---|---|---|
| {{ exp.date }} | {{ exp.name }} | {{ exp.platform }} | {{ Number(exp.cost||0).toFixed(2) }} |
Connected ops LIVE where available else OPEN LINK
Read-only counts from in-memory ERP state · deep-link to sidebar subjects · Accounting owns detailed ads/materials (Expenses & Marketing stays for quick ops log)
FX Rates Board Alpha edit
Alipay / WeChat checkout converts RMB → EGP using this board. Last update stored locally.
Payment QR · Alipay / WeChat / Instapay Omar sends QR later
Upload file → dataURL or paste URL · stored in localStorage · Alpha only · no server upload
Alipay
≈ {{ (Number(accQr.alipayAmtRmb) * Number(accFx.rmbEgp)).toFixed(2) }} EGP @ {{ Number(accFx.rmbEgp).toFixed(2) }}
WeChat Pay
≈ {{ (Number(accQr.wechatAmtRmb) * Number(accFx.rmbEgp)).toFixed(2) }} EGP @ {{ Number(accFx.rmbEgp).toFixed(2) }}
Instapay
Optional EGP amount label (local only)
Courier & Payment Method Lists Alpha editable
Not a fixed enum — add / rename / remove · used by COD collections, courier fees, payment ledger & pickers · persisted in localStorage
Couriers
Payment methods
Daily / Monthly P&L Snapshot
Pulls from dashboard metrics when available · else demo stub
| Line | Amount (EGP) |
|---|---|
| Goods revenue | {{ Number(accPnl.revenue).toLocaleString() }} |
| Delivery fees | {{ Number(accPnl.delivery).toLocaleString() }} |
| Goods profit | {{ Number(accPnl.goodsProfit).toLocaleString() }} |
| Ads & expenses | −{{ Number(accPnl.marketing).toLocaleString() }} |
| Net | {{ Number(accPnl.net).toLocaleString() }} |
Expenses & Ads Log
| Date | Item | Channel | EGP | |
|---|---|---|---|---|
| {{ row.date }} | {{ row.name }} | {{ row.channel }} | {{ Number(row.amount).toLocaleString() }} |
Receivables / Payables STUB
| Party | Type | Due | Amount |
|---|---|---|---|
| {{ r.party }} | {{ r.type }} | {{ r.due }} | {{ r.amountLabel }} |
Payment Methods Ledger STUB + editable list
Methods from your list · demo volume stub · add method above or inline
| Method | Orders | Volume | Share | |
|---|---|---|---|---|
| {{ m.name }} | {{ m.orders }} | {{ m.volume }} | {{ m.share }} |
Active methods list: {{ (accPaymentMethodList||[]).join(' · ') }}
FX History
RMB/EGP last entries · CSS bars
- {{ h.date }} · RMB/EGP {{ h.rate }}
Multi-currency Journal STUB
| Date | Account | Dr | Cr | CCY |
|---|---|---|---|---|
| {{ j.date }} | {{ j.account }} | {{ j.dr || '—' }} | {{ j.cr || '—' }} | {{ j.ccy }} |
Cash Flow Snapshot LOCAL
Cash in hand+bank+Instapay · earned but pending with couriers · cash out (courier fees + materials + ads MTD)
Courier COD Collections (pending remittance) DEMO OK
Your courier list (editable above) · remittance may lag ~30 days · Alpha editable
| Courier | Ref / period | Collected | Due | Status | Notes | |
|---|---|---|---|---|---|---|
| {{ row.courier }} | {{ row.ref }} | {{ Number(row.amount).toLocaleString() }} EGP | {{ row.dueDate }} | {{ row.status }} | {{ row.notes || '—' }} |
Courier / Delivery Cost EXPENSE
Per shipment or weekly invoice · linked to expenses · MTD summary
| Date | Courier | Period | Fee EGP | |
|---|---|---|---|---|
| {{ row.date }} | {{ row.courier }} | {{ row.period }} | {{ Number(row.fee).toLocaleString() }} |
Marketing & Ads CHANNELS
Meta / TikTok / Google / Influencer / Other · budget vs spend · MTD ads total
| Date | Channel | Name | Spend | Budget | |
|---|---|---|---|---|---|
| {{ row.date }} | {{ row.channel }} | {{ row.name }} | {{ Number(row.spend).toLocaleString() }} | {{ Number(row.budget||0).toLocaleString() }} |
Shipping & Warehouse Materials CONSUMABLES
Boxes, tape, bubble wrap, labels, bags, other supplies · item · qty · unit cost · total · date
| Date | Item | Qty | Unit | Total | Note | |
|---|---|---|---|---|---|---|
| {{ row.date }} | {{ row.item }} | {{ row.qty }} | {{ Number(row.unitCost).toLocaleString() }} | {{ Number(row.total).toLocaleString() }} | {{ row.note || '—' }} |
Tax / VAT Note OPTIONAL STUB
Simple local note — not a live tax filing system · Alpha editable
Export & Reports
Client-side CSV download of stub / aggregated local data
Company Branding
Change Password
Legal & Business Info
These details will appear on printed invoices and receipts.
System Email Configuration
Use an App Password if using Zoho/Google with 2FA.
Data Management
System Health (safe)
Diagnose + limited fixes only. Never changes warehouse quantities or invoices.