Everything a dealership needs, without the Tally-era pain.
One login for the showroom, the warehouse and the accountant. Every invoice posts to the books, every stock move is traceable, every user action is permission-guarded.
Sales & Purchase Invoices
Create invoices with line items, parties, taxes and discounts. Posting generates balanced journal entries automatically.
- Auto double-entry posting
- Party-wise history
- Draft → Posted lifecycle
Real Double-Entry Accounting
Chart of accounts, groups, cost centers, and 14 journal types with debit = credit enforcement on every line.
- Balance validation per line
- Posted entries are immutable
- Cash / cheque / bank metadata
Inventory That Scales
Items, units, warehouses, batches and serials. Opening stocks, manual closing stocks and full movement ledger.
- Batch + serial traceability
- Multi-warehouse
- Stock valuation friendly
Cash, Bank & Parties
Cash funds, bank accounts, customers and suppliers in one master-data hub with searchable comboboxes everywhere.
- Instrument no. & date tracking
- Receivables / payables ready
- Fast lazy-loaded selects
Reports & Dashboard
Live summary KPIs plus ledger drill-down and trial balance. P&L and balance-sheet formats follow proven Tally-style structure.
- Ledger by account & date
- Trial balance
- Closing-stock aware P&L
Roles, Permissions & Audit
Spatie-powered RBAC with users, roles and granular permissions. Automated entries can't be edited behind your back.
- Guarded API routes
- Delete confirmations
- Toast + error logging
Debits always equal credits. The system won't let you break it.
Each journal entry carries a header (date, type, status, SI no.) plus ≥2 lines. A line holds exactly one of debit / credit, an account, optional cost center, and payment metadata. Automated and posted entries are locked.
Statuses: Draft Posted Cancelled · SLO-safe pagination, debounced search, stale-request protection.
{
"type": "Sales",
"date": "2026-09-05",
"status": "Posted",
"description": "Invoice INV-2081 / Party: Karim Motors",
"lines": [
{ "account_id": 12, "debit": 85000.00, "credit": 0,
"description": "Receivable — Karim Motors" },
{ "account_id": 41, "debit": 0, "credit": 85000.00,
"description": "Sales account",
"cost_center_id": 3 }
]
}
// server validates:
// • each line: debit XOR credit
// • Σ debit == Σ credit (4-decimal)
// • automated / posted entries immutableFrom warehouse shelf to serial number.
Track quantities and cost with a stock-move ledger (in-cost / out-cost), so COGS and closing stock stay consistent — the same logic your accountant uses for the income statement: COGS = Opening + Purchases − Closing.
Items & Units
SKU, units, purchase/sales ledgers per item. Clean selects across invoices & journals.
Batches
Lot-wise quantity & expiry-friendly tracking for parts, tyres, batteries.
Serials
Chassis / engine / VIN-level traceability for vehicles and high-value parts.
Warehouses
Showroom, godown, service-center stocks separated — with opening & dated closing balances.
Invoice in. Ledger updated. Stock moved.
No re-typing between systems. The document flow does the accounting for you.
Create account groups, ledgers, cost centers, parties, warehouses, cash/bank, stock items.
Raise purchase & sales invoices against parties; pick batches/serials and warehouse.
Each invoice emits balanced journal lines (receivable ↔ sales, stock ↔ payable, cash/bank legs).
Post journals, record closing stock, then read ledger, trial balance and P&L.
Answers your accountant will trust.
Ledger drill-down per account with opening / movement / closing. Trial balance with debit–credit equality check. Income statement nets sales, purchases, direct/indirect heads and closing-stock-derived COGS; the balance sheet carries capital, loans, current assets/liabilities and the period profit.
📒 Ledger report
Filter by account + date range. Every row links back to its journal entry.
⚖️ Trial balance
One-screen debit = credit proof before you close the month.
Built-in report formats
Documented in doc/ and followed by the report engine:
- Profit & Loss — net sales, net purchases, direct expenses, opening/closing stock, gross & net profit
- Balance Sheet — capital, loans, current liabilities/assets, stock-in-hand from stock tables
- Manual closing-stock ladder — dated valuations carried forward (Tally-style)
- Dashboard summary API — GET /api/dashboard/summary
Boring tech, in a good way.
Predictable Laravel conventions + a fast React SPA. Easy to self-host, easy for AI coding agents and juniors to extend — every new CRUD follows the same documented pattern (migration → model → controller → routes → service → 3 components).
🚀 Quick start
composer setup installs deps, copies .env, migrates & builds. Demo data via DemoDataSeeder.
🖥️ Self-host
Any PHP 8.3 host + SQLite works. Serve with php artisan serve and npm run dev / npm run build.
🧩 Extend
Copy the doc/crud.md + doc/journal.md checklist: index / list / show / store / update / destroy + transform().
Common questions.
Is Drabok DMS a Tally replacement?
For dealership workflows — yes for daily books: sales/purchase, receipts/payments, stock with batches & serials, ledger and trial balance. It intentionally mirrors Tally-style closing-stock and P&L logic so accountants feel at home.
Can invoices edit the accounts directly?
No — and that's by design. Invoices create automated journal entries, which are immutable. Corrections go through reversals, credit/debit notes or new entries, keeping an audit trail.
Does it support multiple branches / cost centers?
Yes. Cost centers tag journal lines for branch/division reporting, and warehouses separate physical stock.
What do I need to run it?
PHP 8.3+, Composer, Node 20+, and SQLite (default) or MySQL. See doc/setup.md and doc/commands.md in the repo.
Where is the documentation?
Alongside this page in doc/: CRUD pattern, journal architecture, stock valuation notes, report formats, setup & commands.
Put the whole dealership on one ledger.
Clone the repo, run setup, and raise your first sales invoice in minutes.