Sales & Invoice Management System for quotation-to-cash workflows, customer statements, receipt allocation, expense tracking, and profit reporting.
These repository preview graphics are included now so the project has immediate visuals on GitHub. They can be replaced later with real product screenshots or recorded GIFs from the running application.
SIMS is a Django-based business application for small and medium teams that need to manage the full sales and collections lifecycle in one place.
It supports:
- quotations and quotation conversion
- invoice creation and PDF export
- receipts and multi-invoice payment allocation
- customer statements with aging analysis
- expense tracking and category reporting
- profit and loss style reporting on cash and accrual basis
- Arabic-friendly PDF rendering for regional business workflows
The current codebase uses SQLite by default for development and can be deployed behind Gunicorn and Nginx in production.
- Customer management with contact details and history
- Quotation management with status workflow and validity dates
- Invoice management with taxes, discounts, line items, due dates, and payment status
- Receipt management with payment method tracking and printable documents
- Full payment allocation so one receipt can settle multiple invoices
- Customer statement generation with running balance and transaction ledger
- Monthly statement runs for all customers or one selected customer
- Statement email-status tracking with recipient and timestamp capture
- Expense recording by category, vendor, payment method, and reference number
- Profit and loss style reporting using invoices, receipts, and expenses
- Finance dashboard with KPI cards and monthly trends
- Outstanding receivables monitoring
- Aging buckets for open invoices
- Top customers by outstanding balance
- Revenue comparison by invoiced value versus collected cash
- Expense breakdown by category across a selected date range
Receipts are no longer limited to a single invoice settlement model. A single payment can be distributed across several invoices for the same customer, while invoice paid amounts remain synchronized through the finance service layer.
Statements include:
- opening balance
- period debits and credits
- running balance per transaction
- outstanding invoice listing
- aging summary for overdue balances
- PDF export for sharing or archive purposes
The finance module provides a practical operating view of business performance:
- invoiced revenue
- collected revenue
- total expenses
- net profit on cash basis
- net profit on accrual basis
- category-based expense analysis
| Layer | Technology |
|---|---|
| Backend | Django 5.2 |
| UI | Django Templates, Bootstrap 5, JavaScript |
| Forms | django-crispy-forms, crispy-bootstrap5 |
| Database | SQLite by default |
| PDF Rendering | WeasyPrint, ReportLab |
| App Server | Gunicorn |
| Test Data | Faker |
.
├── docs/
├── finance/
├── invsys/
├── sales/
├── templates/
├── manage.py
├── gunicorn_config.py
└── requirements.txt
sales: customers, quotations, invoices, receipts, analytics, PDFsfinance: expenses, payment allocations, statements, statement runs, P&L reportinginvsys: project settings, URL routing, WSGI and ASGI entry points
git clone https://github.com/essyem/sims.git
cd simspython3 -m venv env
source env/bin/activatepip install --upgrade pip setuptools wheel
pip install -r requirements.txtOn Ubuntu 22.04 or 24.04:
sudo apt update
sudo apt install -y \
python3-dev build-essential shared-mime-info fontconfig \
libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 \
libgdk-pixbuf2.0-0 libffi-dev libcairo2 libcairo2-dev \
libharfbuzz-dev libharfbuzz0b libjpeg-dev libpng-dev \
fonts-arabeyes fonts-farsiweb fonts-kacst fonts-noto \
fonts-noto-core fonts-noto-ui-core fonts-dejavu-core fonts-liberationThese packages are required for WeasyPrint and reliable Arabic PDF output.
mkdir -p media static staticfiles tmp logspython manage.py migratepython manage.py createsuperuserpython manage.py runserverOpen http://127.0.0.1:8000/ in your browser.
python manage.py populate_test_data --clear --customers 100 --quotations 1000 --invoices 750python manage.py seed_finance_data --sample-expenses 120 --with-allocations --with-statement-runspython manage.py generate_monthly_statementsOptional targeted run:
python manage.py generate_monthly_statements --year 2026 --month 3 --customer-id 12- Create a customer.
- Create a quotation with line items.
- Convert the quotation to an invoice.
- Record a receipt when payment arrives.
- Print or export invoice and receipt PDFs.
- Open a receipt.
- Allocate payment across one or more invoices.
- Review customer balances in the statement view.
- Generate statement runs for the month.
- Mark statements as emailed after dispatch.
- Review profit and loss using the finance dashboard and P&L page.
- customer CRUD
- quotation CRUD
- invoice CRUD
- receipt CRUD
- invoice and quotation PDF output
- analytics pages for operating visibility
- expense CRUD
- expense categories
- payment allocation management
- customer statement HTML and PDF views
- statement run generation and status tracking
- profit and loss reporting
Run the finance test suite:
python manage.py test finance -v 2Run all Django checks:
python manage.py checkCurrent default behavior in the repository:
- SQLite is used as the default database.
DEBUGis enabled for development.- static files use
static/andstaticfiles/paths. - login is required for most application views.
For production, update at minimum:
SECRET_KEYDEBUG = FalseALLOWED_HOSTSCSRF_TRUSTED_ORIGINS- database configuration if moving away from SQLite
A more detailed server guide is available in docs/deployguide.md.
Typical production stack:
- Ubuntu Linux
- Gunicorn
- Nginx
- system package dependencies for WeasyPrint
- SSL termination with Let's Encrypt
populate_test_data: generate customers, quotations, invoices, receipts, and item datareceivables_report: reporting helper for receivables analysis
seed_finance_data: generate expenses, allocations, and statement runsgenerate_monthly_statements: create statement-run records for a selected month
SIMS is suitable for:
- service businesses
- consultancies
- agencies
- contractors
- trading companies
- SMEs handling bilingual invoice workflows
The codebase still contains internal Django module names such as invsys, while the repository and product can be presented as SIMS. That naming difference does not affect runtime behavior.
No license file is currently included in this repository. Add one before public distribution if needed.