BackspaceX Invoice Manager
Professional invoice management for BackspaceX with a finance dashboard, structured invoice builder, polished A4 invoice output and local QR verification.
by BackspaceX · github.com/thebackspacex/backspacex-invoice-manager
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/thebackspacex/backspacex-invoice-manager/archive/refs/heads/main.zipA lightweight, self-hosted WordPress invoice and payment manager with native PDF generation, client management, email delivery, QR verification, payment ledger, multi-currency reporting, and SSLCOMMERZ online payments.
Current release: v0.7.3.2
Requirements
- WordPress 6.5+
- PHP 8.1+
Core Features
- Structured invoice creation and client management
- Searchable client selector
- Multiple invoice line items
- Discount and Tax/VAT
- Draft, Unpaid, Partially Paid, Paid, Overdue and Cancelled states
- Manual Paid Date support
- Browser Preview / Print
- Lightweight self-hosted PHP PDF generation
- PDF core Helvetica / Helvetica-Bold
- Company identity and logo
- PAID seal
- Amount in Words
- Local/self-hosted QR generation
- Short
/i/XXXXXXXX/verification URLs - Branded public invoice verification
- Email delivery with PDF attachment
- Separate invoice and Paid Invoice email templates
- Independent From Email and Reply-To Email settings
- Multiple bank/payment instruction profiles
- Email logs
Payment Ledger & Partial Payments
Payments are stored as ledger entries instead of a single Paid/Unpaid flag.
Each invoice can have multiple payments. Manual entries can include:
- Amount
- Payment date
- Cash / Bank Transfer / Manual / Other method
- Receiving bank account
- Transaction/reference
- Note
The plugin automatically calculates:
Invoice Total
- Total Paid
= Balance Due
Status is derived from the ledger:
Paid = 0 -> Unpaid
Paid > 0 and Balance > 0 -> Partially Paid
Balance = 0 -> Paid
Preview, generated PDF and QR verification reflect partial-payment totals. Payment History is shown compactly on invoice output.
Existing fully Paid invoices created before Payment Ledger are migrated automatically to a historical full-payment ledger entry so old records remain financially consistent.
SSLCOMMERZ Online Payments
SSLCOMMERZ can be configured under Invoice Manager → Settings with:
- Enable/Disable Online Payment
- Sandbox/Live mode
- Store ID
- Store Password
- Customer-facing payment button text
- Automatic Paid Invoice email option
The client email can contain a one-click payment button:
Invoice Email -> Pay Online -> SSLCOMMERZ Checkout
-> Success/IPN -> Server Validation -> Payment Ledger
The client does not have to re-enter the invoice amount or invoice identity before reaching the checkout.
Remaining-Balance Payments
SSLCOMMERZ charges only the current Balance Due.
For a foreign-currency invoice, the manual exchange rate saved on the invoice converts the remaining invoice balance to BDT for the gateway. The original invoice remains in its original currency.
SSLCOMMERZ Validation & IPN
A browser success return alone does not mark an invoice Paid.
The plugin performs server-side validation and checks the gateway transaction ID, amount, BDT currency and validation status. IPN is processed independently, and transaction IDs are used to prevent duplicate ledger insertion.
Gateway events are available under Invoice Manager → Gateway Logs. Store passwords and card numbers are excluded from logs.
Risk Review Workflow
A validated SSLCOMMERZ transaction may be marked by the gateway with a non-zero risk level.
Such a transaction is not treated as failed and is not automatically added to the paid balance. Instead, it becomes:
Payment Received — Under Review
The invoice edit screen shows the transaction ID, BDT amount and risk information.
The administrator then has two explicit actions:
Approve & Add to Ledger
Use this after confirming the transaction in the SSLCOMMERZ dashboard/bank settlement.
The existing gateway transaction is promoted into the Payment Ledger with the same SSLCOMMERZ transaction reference. This is not a second/manual payment.
After approval:
- Total Paid and Balance Due update
- Invoice becomes Partially Paid or Paid as appropriate
- The decision is written to Gateway Logs
- A fully paid invoice regenerates its PDF
- Automatic Paid Invoice email can run when enabled
Reject / Keep Unpaid
Use this if the risky transaction should not be accepted.
No Payment Ledger entry is created. The invoice balance remains due, and the rejection decision is retained in Gateway Logs.
A resolved Under Review transaction cannot be approved/rejected a second time.
Multi-Currency
Supported invoice currencies:
- BDT
- USD
- EUR
- GBP
- AED
BDT is the consolidated dashboard reporting currency.
Foreign-currency invoices use a manually entered exchange rate to BDT, saved as an invoice-level snapshot.
Example:
100 USD x 124 BDT = 12,400 BDT dashboard value
The client-facing invoice remains 100 USD; conversion is used for reporting and SSLCOMMERZ BDT charging.
Dashboard
The dashboard uses Payment Ledger values for financial totals:
- Total Invoiced
- Total Paid
- Total Due
- Overdue
- Paid invoice count
- Partially Paid count
- Unpaid count
- Overdue count
- Original-currency breakdown
Partial payments contribute only the amount actually received to Total Paid; only the remaining balance contributes to Total Due.
PDF System
The plugin uses its own lightweight native PHP PDF writer and does not require an external PDF-generation API.
Generated PDF output intentionally uses core Helvetica fonts for compatibility. Browser Preview / Print font settings are separate.
Generated PDFs are stored in the WordPress uploads directory under:
/backspacex-invoices/
When invoice/payment data changes, an existing PDF is marked stale and regenerated when required.
QR Verification
QR generation is local/self-hosted.
The public verification page identifies the configured issuing company and shows invoice information and current status. For Partially Paid invoices it also shows:
- Invoice Amount
- Paid
- Balance Due
- Partially Paid status
For fully Paid invoices it shows the Paid Date.
Recommended Workflow
- Configure company identity, email, bank accounts and SSLCOMMERZ.
- Add a client.
- Create the invoice.
- Add manual payments when Cash/Bank payments are received, or send the invoice email for online payment.
- Let the Payment Ledger calculate Paid and Balance Due.
- Generate/send the updated invoice when partial payment exists.
- SSLCOMMERZ payments are validated and inserted automatically when normal.
- Resolve risky gateway payments explicitly from the invoice edit screen.
- When Balance Due reaches zero, the invoice becomes Paid.
Privacy & External Services
Core invoice, PDF and QR generation is self-hosted.
SSLCOMMERZ is contacted only when online payment functionality is used.
Google Fonts may optionally be requested by the browser for Preview / Print and can be disabled. Generated PDFs do not depend on Google Fonts.
Email uses the WordPress mail system and any SMTP/provider configured for the WordPress installation.
Duplicate Invoice
The WordPress Invoices list includes a Duplicate row action next to Edit.
Duplicating an invoice copies reusable business content:
- Client
- Line items
- Currency and saved exchange rate
- Discount and Tax/VAT
- Payment instructions / selected bank profile
- Notes / terms
- Online Payment preference
A duplicate is always created as a fresh draft. It receives a new invoice number, today's invoice date, a recalculated due date based on the source invoice's payment-term length, and a new QR verification identity.
Financial and identity state is never copied, including Payment Ledger, Paid Date, SSLCOMMERZ transactions, risk-review state, QR SVG, generated PDF, or previous payment status.
After duplication, the administrator is taken directly to the new invoice edit screen for review.
Current Roadmap
The next planned functional release is:
v0.8.0 — Reports + CSV Export
License
GPL-2.0-or-later
v0.7.3.1 PDF Pagination Fix
Ordinary paid and partially paid invoices use tighter A4 pagination. Fully paid invoices show Total and Paid without the redundant Balance Due 0.00 row. Partial invoices continue to show Total, Paid, and Balance Due.
v0.7.3.2 Amount in Words Layout Fix
The PDF renderer measures and reserves the complete Amount in Words area before positioning Payment Instructions, Notes / Terms, Payment History and QR Verification. One-page rendering remains preferred, but the bottom section is never allowed to overlap the Amount in Words block.