Release Notes & Changelog
Track our latest features, improvements, and security updates.
This release introduces a brand-new in-app notification system, extends the quick filter functionality across almost all index pages, and introduces automated maintenance for the support ticketing system.
✨ New Features
- In-App Notification System:
- Navbar Integration: Added a notification bell icon with a real-time unread counter to the main top navigation bar.
- Notification Dropdown: Clicking the bell reveals a quick-access dropdown showing your 5 most recent unread alerts.
- Dedicated Notifications Hub: Created a new page (
/notification/index) to view your entire notification history, featuring quick filters for Read and Unread statuses. - Automated Triggers:
- Task Reminders: The system automatically notifies assigned users via in-app alerts when a task becomes due.
- Dunning & Collections: Administrators now receive automatic in-app alerts whenever an invoice becomes overdue or when a late fee is applied by the system.
🚀 Enhancements
-
Widespread Quick Filters: We've rolled out intuitive one-click "Quick Filters" above the data tables to drastically speed up sorting and searching. These have been added to:
- Admin Users Index
- Expenses Index
- Vendors (Suppliers) Index
- Customers Index
- Contacts (People) Index
- Inventory Items Index
- Audit Logs
-
Automated Helpdesk Management:
- Auto-Close Resolved Tickets: The background automation script now monitors the Helpdesk. Any ticket that has been marked as "Resolved" and has had no activity for 48 hours will automatically be changed to "Closed".
🛠️ Bug Fixes & Under the Hood
- Notification MVC Registration: Fixed a
Databaseclass instantiation issue in theNotificationModeland ensured theNotificationControllercorrectly loads core system helpers (liketheme_helperfor colour conversion logic). - Database Migrations: Added
050_add_notifications_system.sqland updated the masterinstall/scheme.sqlto include the newsystem_notificationstable.
🚨 Keystone Accounting Pro - v1.2.4 Update Release 🚨
🔐 Security & Role-Based Access Control (RBAC)
-
New "Technician" Role: Added a highly restricted staff role tailored specifically for field workers and support agents.
-
Dedicated Field Workspace: Technicians log into a customized, secure dashboard showing only their pending Jobcards, open Support Tickets, and Tasks. All sensitive financial metrics, charts, and system stats are completely hidden from view.
-
Strict Data Isolation: Deep database-level filtering ensures Technicians cannot access overarching customer financials or system settings.
📱 Mobile & Progressive Web App (PWA)
-
Installable Native App: The entire system has been converted into a fully installable Progressive Web App (PWA). Admins and technicians can install the system natively onto their iOS or Android home screens.
-
Dynamic Manifest Engine: The system automatically extracts your uploaded company logo and primary theme colors to generate your custom mobile app icon and splash screen.
-
Service Worker Caching: Implemented a "Network First, Fallback to Cache" Service Worker logic (sw.js) to guarantee blazing fast load times on spotty cellular networks.
-
Responsive DataTables: Every data table across the entire system now natively utilizes the DataTables Responsive Extension, perfectly collapsing columns into expandable rows on small devices.
💬 Communications & WhatsApp Integration
-
Twilio API Engine: Fully integrated Twilio API. You can now securely connect your Twilio SID and Auth Token directly inside System Settings.
-
Automated WhatsApp Notifications: The system now dispatches real-time WhatsApp notifications to your clients (e.g., Invoice Reminders, Overdue Notices) in tandem with traditional emails.
-
Proforma Invoice Workflow: The system now automatically generates and utilizes a dedicated "Proforma Invoice" email template when you convert a Quote into a Proforma Invoice and dispatch it to a client.
💸 Dunning & Financial Automation
-
Escalating Overdue Reminders: The daily cron engine has been completely overhauled. It now analyzes unpaid debt and issues escalating warnings based on severe lateness (e.g., 3 days before, due today, 7 days late, 14 days late).
-
Automated Late Fee Penalties: If an invoice exceeds the 14-day severely overdue threshold, the Dunning Engine will autonomously inject a 5% "Late Fee Penalty" line item directly into the invoice, recalculating the subtotal, VAT, and total balance, before alerting the client.
-
EOM Age Analysis Fix: Resolved a complex calculation bug regarding End-Of-Month (30 Days EOM) terms on Customer Statements, ensuring an invoice issued on June 1st correctly maps its due date to July 30th.
🎨 UI/UX & Email Customization
-
WYSIWYG Email Template Editor: Ripped out the basic HTML text area and replaced it with a fully open-source, rich-text TinyMCE editing suite.
-
Real-Time Split-Screen Preview: Editors now feature a live iframe preview that instantly renders your email template alongside your company logo and system header as you type.
-
Click-to-Insert Placeholders: Replaced the old list of tags with interactive badges. Clicking a tag (e.g., {{customer_name}}) instantly injects it at your exact cursor position.
-
Dynamic Theme Adaption: The TinyMCE editor instantly adapts its UI skin to match your system-wide Light or Dark mode preferences on the fly.
⚙️ System Administration & Onboarding
-
Setup Wizard Checklist: A new dynamic widget on the Dashboard guides fresh installations through setting up vital business details, VAT constraints, and Banking Info.
-
Page Help Overhaul: The slide-out Page Help panels across all 82+ views in the system have been completely rewritten. Technical jargon has been replaced with highly conversational, layman-friendly explanations of complex business logic.
-
Updated Manuals: Both the admin_manual.php and customer_manual.php have been expanded to document the new Field Workspaces, WhatsApp opt-ins, PWA installations, and escalating late fees.
🐛 Bug Fixes & Logic Corrections
-
Pro Forma Invoices: Fixed the Pro Forma Invoice document numbering and convert to invoice process.
-
Invoice View: Fixed an error on the Invoice view page.
🏦 Multi-Account Treasury Upgrade
-
System-Wide Bank Routing: Fully deprecated the legacy single-account banking system[cite: 23, 24]. The Admin Settings banking tab now safely redirects users to the dedicated Bank Accounts module to manage multiple treasury profiles.
-
Automated Treasury Assignment: Recurring Invoice templates now include a "Bank Account" selector[cite: 5, 6]. The
cron.phpautomation engine has been upgraded to read this selection and automatically stamp the correct bank details onto dynamically generated invoices. -
Credit Note Inheritance: Credit Notes now intelligently trace back to their parent invoice to fetch and display the exact bank account details used during the original transaction[cite: 8].
📊 Financial Reporting Enhancements
-
Ledger Export Sync: The Trial Balance CSV export has been upgraded to automatically pull and append the live running balances of all active physical bank accounts, ensuring the books balance perfectly[cite: 3].
-
Payment Allocation Tracking: The internal Payment Report now utilizes a
LEFT JOINto clearly display exactly which bank account received the funds for every transaction[cite: 2].
🔐 Security & Role-Based Access Control (RBAC)
-
Strict Controller-Level RBAC: Closed a "Security by Obscurity" loophole where Technicians could edit customer details by clicking through a Helpdesk ticket. Technicians are now strictly blocked at the
CustomerControllerlevel from accessing theedit,add, andindexroutes. -
UI Element Hiding: The Read-Only Customer Profile view (accessed via Helpdesk) now dynamically hides the "Edit Profile" and "Back to Customers" buttons for users with the Technician role[cite: 10, 11].
📄 PDF & Document Standardization
-
Dynamic Copyright Footers: Added a universally standardized, dynamically updating copyright notice (
Copyright © {Year} - Keystone Accounting Pro) to the bottom of all 8 PDF templates (Accountant Reports, Credit Notes, Delivery Notes, Invoices, Jobcards, Purchase Orders, Quotes, and Statements)[cite: 12, 13, 14, 15, 16, 18, 19, 20].
🐛 Bug Fixes & Logic Corrections
-
Overdue Status Grace Period: Fixed a bug where invoices were marked as "Overdue" the moment the due date arrived (midnight). The invoice lifecycle engine now appends
23:59:59to the timestamp, granting clients until the absolute end of the day to settle their accounts before triggering the overdue status[cite: 21, 22]. -
Recurring Profile Logic Preservation: Restored and protected the highly advanced custom scheduling logic (
recur_on_day_of_month) and the 12-month Projected Income math within theRecurringInvoiceModel[cite: 4].
🎯 Interim Update!
Fix minor bugs
🚀 Version 1.1.9 Release Notes
🔐 Security & Role-Based Access Control (RBAC)
-
New "Technician" Role: Added a restricted staff role tailored specifically for field workers and support agents.
-
Dedicated Field Workspace: When a Technician logs in, they now land on a customized, secure dashboard showing only their pending Jobcards, open Support Tickets, and Tasks. All sensitive financial metrics, charts, and system stats are completely hidden.
-
Strict Data Isolation: Implemented deep database-level filtering and URL protection. Technicians can only view, edit, or interact with records that are explicitly assigned to their User ID, preventing unauthorized access.
-
Adaptive Sidebar: The main navigation menu now intelligently adapts to the user's role, stripping away Financial, Purchasing, Inventory, and Reporting modules for Technicians.
✨ New Features & Compliance
-
Company Registration Number: Added a dedicated "Company Reg Number" field to the Global Settings. This ensures complete SARS (South African Revenue Service) tax compliance across all documents.
-
Supplier Banking Details: Introduced a comprehensive banking details section to Vendor profiles. You can now capture and view a supplier's Bank Name, Account Holder, Account Number, Branch Code, Account Type, and SWIFT/BIC code directly from their profile.
-
Dynamic Demo Mode: Added a "Showcase Mode" toggle in Admin Settings. When enabled, it dynamically projects predefined demo login credentials onto the public login screen—perfect for software showcases.
💎 UI/UX & Navigation Improvements
-
Intelligent Sidebar Restructure: Completely overhauled the global navigation sidebar to follow a logical, natural business flow (CRM & Support ➔ Sales & Receivables ➔ Purchases & Payables ➔ Products & Inventory ➔ Reporting ➔ Admin).
-
Strict Active Link Highlighting: Rewrote the sidebar routing logic so that only the exact page you are currently viewing is highlighted, preventing parent and child menus from lighting up simultaneously.
-
PDF Spacing Enhancements: Added a universal margin below the header line across all 7 PDF templates (Invoices, Quotes, POs, Statements, Jobcards, Delivery Notes) to create better visual breathing room above the address blocks.
-
Unified Web Previews: Synchronized the HTML web previews (in both the Admin UI and the Customer Portal) to perfectly match the PDF output. All web views now accurately display full Banking Details, the Company Registration Number, and dynamic Tax/VAT logic.
-
Dynamic Tax Headers: The Customer Portal invoice view now dynamically switches the document title from "INVOICE" to "TAX INVOICE" based on your global VAT registration setting.
-
Quick Contact Access: Exposed the customer's primary phone number and email address directly on the main CRM "Company Details" card for faster access.
🐛 Bug Fixes
-
Customer Phone Field: Fixed a UI logic bug in the CRM where the main
contact_phonefield was hidden when linking an existing person to a company. The field is now permanently visible and safely pulls the existing contact's phone number without overwriting manual entries. -
Quote Address Block: Fixed a copy-paste variable bug on the Admin Quote preview where the system was rendering your own company's phone and email address in the customer's "TO:" box instead of the client's actual details.
PDF Document Layout & Rendering
-
Improved (Layout): Implemented a strict 40/60 width split for the footer sections across all financial PDFs (Invoices, Quotes, Purchase Orders, Credit Notes, and Statements). The left column (Banking Details/Notes) now takes 40% of the page width, allowing 60% for the Totals column.
-
Fixed (Amount Wrapping): Applied
table-layout: fixedandwhite-space: nowrapCSS constraints to the Totals table. Large financial figures will no longer wrap to a second line and distort the document layout. -
Added (Dynamic Currency): Introduced a currency mapper array to all templates. The PDF engine now automatically converts raw ISO currency codes (e.g.,
ZAR,USD,EUR,GBP) into their visual symbols (e.g.,R,$,€,£). -
Improved (UI Consistency): Standardized the visual design of the Document Totals block. Quotes, Purchase Orders, and Statements now share the exact same polished styling as Invoices. (Credit Notes retain their specific red/danger theme).
Dynamic Watermarks & Stamps
-
Added (Status Stamps): Introduced dynamic, absolutely positioned "Stamps" that overlay the document totals. These automatically trigger based on the document's status (
PAID IN FULL,OVERDUE,ACCEPTED,DECLINED). -
Added (Stamp Metadata): The stamps now calculate and display relevant temporal data. Overdue stamps display the phrase
SINCE:followed by the original due date. Paid/Accepted/Declined stamps displayDATE:followed by the exact date the status was updated. -
Fixed (DomPDF Rendering Bug): Resolved a critical rendering issue where DomPDF would tear text out of absolutely positioned, rotated containers, causing massive layout gaps. The stamp is now wrapped in a bulletproof, isolated HTML
<table>matrix that physically locks the dimensions before applying the-12degCSS rotation.
Banking & Client Details
-
Improved (Data Synchronization): Unified the banking details card across
invoice_template.phpandstatement_template.php. Both documents now pull the complete array of settings, including Account Type and SWIFT/BIC codes. -
Added (Statement Referencing): The
statement_template.phpbanking card now dynamically generates a "Reference:" line utilizing the mapped Customer/Company Name to ensure payments made from statements are easily identifiable on the bank feed.
Database & Schema Enhancements
-
Added: status column to the users table to support active/inactive staff states and prevent application crashes during ticket assignment.
-
Added: vendor_id column to the expenses table to properly bridge converted Purchase Orders to the Expenses ledger.
-
Added: Strict relational foreign key constraint linking expenses.vendor_id to vendors.id.
-
Added: last_briefing_date column to the settings table to give the automation engine "memory" of daily tasks.
-
Migrated: Ran an automated SQL query to retrospectively link all historical "Received" Purchase Orders to their correct Vendor IDs in the expenses table.
Automation & Cron Engine
-
Fixed: A critical loop where "Daily Task Reminders" (Task 4) were being dispatched every 2 minutes.
-
Improved: The Daily Briefing automation is now time-gated to run no earlier than 08:00 AM, and utilizes a direct raw SQL update to ensure it fires exactly once per day.
-
Changed: Removed the hardcoded 20-record limit in CronLogModel.php. The Automation Logs page now loads your complete execution history, utilizing frontend DataTables for efficient pagination.
UI, Views & Workflow
-
Improved (Tasks): Overhauled the Task Management interface (tasks/index.php). The workflow is now cleanly separated into "Pending Tasks" and "Completed Tasks" tabs, complete with dynamic badge counters.
-
Fixed (Tasks): Resolved a visual bug where tasks marked as "Completed" were still displaying a red "Overdue" warning.
-
Improved (Global Sidebar): Completely rebuilt the dynamic Weather Widget (sidebar.php).
-
Changed (Weather Widget): Replaced sluggish browser-based GPS tracking (navigator.geolocation) with a lightning-fast IP-based location API. This permanently eliminates annoying browser permission pop-ups and resolves localhost vs. live server location discrepancies.
-
Added (Weather Widget): Integrated a sleek Bootstrap hover tooltip that now displays expanded meteorological data (Humidity, Wind Speed, and detailed textual conditions) fetched from the Open-Meteo API.
-
Fixed (Accountant Report): Corrected a variable mapping bug in the Year-End Accountant Report (accountant.php) where the company header fell back to generic text. It now correctly pulls site_title from the database.
Version: v1.1.6
Date: 12 June 2026
✨ New Features & Enhancements
-
Jobcard Contact Assignment: The Jobcard/Dispatch module now supports linking a jobcard directly to a specific Contact Person (
person_id) associated with the client. The dynamic dropdown automatically fetches relevant contacts via AJAX when dispatching or reviewing a field job. -
Dynamic Portal Discounts: Upgraded the Customer Portal's Quote and Invoice views to dynamically display a Disc % column on the item tables. The column remains hidden by default but expands perfectly with exact decimal precision (e.g.,
0.89%) the moment a line-item discount is detected. -
Dashboard UI Optimization: Reordered the Quick Actions grid on the main admin dashboard to position "New Quote" as the primary first-action button for a faster sales workflow.
-
Comprehensive System Manuals: Massively expanded both the Admin and Customer manuals to cover People Directories, Credit Wallets, Jobcards, Task Management, Delivery Notes, and System Diagnostics. Implemented a strict 15% viewport "tripwire" (
data-bs-root-margin) to permanently fix Bootstrap ScrollSpy highlighting bugs on shorter documentation sections.
🐛 Bug Fixes & System Corrections
-
Purchase Order Strict Mode Crash: Fixed a MySQL strict mode exception (
Incorrect date value) that caused Purchase Orders to crash upon saving if the optional "Expected Delivery" date was left blank. Empty strings are now properly sanitized and passed asNULL. -
PO-to-Expense Financial Bridge: Resolved a silent background crash that prevented 'Received' Purchase Orders from auto-generating an Expense record. The bridge now safely passes a
NULLreceipt path to bypass strict mode and accurately links thevendor_idso the expense appears perfectly in the unified ledger. -
Manual Expense Schema Sync: Updated the core Expense Controller and Model to natively support the newly added
vendor_idrelational link, ensuring manual expenses save flawlessly alongside auto-generated PO expenses.
🗄️ Database Schema Migrations
-
Altered the
jobcardstable to include a newperson_idrelational column (INT NULL DEFAULT NULL AFTER customer_id) to track the specific contact who requested the dispatch. -
Altered the
expensestable to include a newvendor_idrelational column (INT NULL DEFAULT NULL AFTER category_id) to properly link financial expenses to the Vendor CRM directory. -
Executed a retroactive data reconciliation script to scan the database for historical 'Received' Purchase Orders and automatically generate their missing Expense records based on legacy text data.
Version: v1.1.5
Date: 12 June 2026
✨ New Features & Enhancements
-
Delivery Note Generation: Implemented a dedicated Delivery Note (Dispatch Note) PDF engine. Users can now instantly generate non-financial dispatch documents directly from existing Invoices, complete with a professional "Goods Received" signature block.
-
Jobcard Contact Assignment: The Jobcard/Dispatch module now supports linking a jobcard directly to a specific Contact Person associated with the client. The dynamic dropdown automatically fetches relevant contacts via AJAX when dispatching or reviewing a job.
-
Deep-Linked Task Management: Upgraded the Task Management module to support assigning tasks directly to specific Contact Persons (
person_id), in addition to top-level Customer Accounts. This includes dynamic AJAX dropdown rendering. -
Intelligent Crash Diagnostics: The global error-handling engine (Front Controller) now actively extracts the installation's physical license key (
app/config/license.key) and injects it directly into the automated developer crash report emails for faster client identification.
🐛 Bug Fixes & System Corrections
-
Discount Decimal Precision: Resolved an aggressive UI and database rounding bug that forced decimal discount percentages (e.g.,
0.89%) to render as whole numbers (1%). Exact decimal precision is now perfectly maintained across Invoices, Quotes, Credit Notes, and their respective PDF engines. -
Quote Client Notes Data Binding: Fixed a backend controller omission where the
client_notesfield on the Quote form was bypassing the database save routine. Client notes now save and render on Quote PDFs perfectly. -
Purchase Order Dynamic Currency: Removed hardcoded South African Rand (
R) symbols from the Purchase Order preview screens and charts. POs now dynamically inherit the active global system currency. -
People Directory UI Polish: Applied strict
text-nowrapUI classes to the Name, Email, and Phone columns on the People list to prevent awkward line breaks and row stretching.
🗄️ Database Schema Migrations
-
Modified
invoice_itemsandquote_itemstables to upgrade thediscount_percentagecolumns from standardINTtoDECIMAL(5,2). -
Altered the
taskstable to include a newperson_idrelational column (INT NULL DEFAULT NULL AFTER customer_id) to support the new deep-linked contact assignment feature. -
Altered the
jobcardstable to include a newperson_idrelational column (INT NULL DEFAULT NULL AFTER customer_id) to track the specific person who requested the dispatch.
Version 1.1.4
Release Date: June 11, 2026
✨ New Features & Enhancements
-
Unlimited CRM Contacts (Many-to-Many Architecture):
-
Replaced the strict 1-to-1 primary contact restriction with a flexible Pivot Table architecture (
customer_contactsandvendor_contacts). -
You can now link an unlimited number of people to any single Customer or Supplier profile.
-
Added multi-select dropdowns to the Add/Edit views for easy association.
-
Customer and Supplier 360-degree profile views now display a full directory of all associated personnel.
-
-
Multi-Email / CC Dispatch Engine:
-
Added an
additional_emailsfield to the People (Contacts) module. -
Overhauled the core
Email.phpengine to intelligently parse comma-separated email addresses. The primary address is placed in theTO:field, while all subsequent addresses are automatically appended asCC:recipients.
-
-
Helpdesk Specific Contact Routing:
-
Added
person_idtracking to thesupport_ticketsmodule. -
The "Log New Ticket" modal now features a dynamic, AJAX-driven dropdown that instantly fetches all contacts linked to the selected Customer.
-
Automated Helpdesk email notifications (Ticket Created, New Reply) now route directly to the specific person who reported the issue, rather than defaulting to the company's general inbox.
-
-
Proactive Developer Crash Reporting:
-
Upgraded the Front Controller (
index.php) global Exception Handler to automatically dispatch a diagnostic email directly to the developer (DEV_EMAIL) whenever a fatal database or runtime crash occurs. -
The crash report dynamically injects critical environment metadata (Hosted Domain, App Version, DB Version, License Key) alongside the Owner’s corporate profile (Company Name, Contact Details).
-
The local
error.logfile is now automatically attached to the crash alert email.
-
🐛 Bug Fixes
-
Global Search Alias Typo: Resolved a SQL
1054 Unknown columnexception inSearchModel.phpby correcting the table alias for Quote Items fromiitoqi. -
AJAX URL Routing: Fixed a 404 Not Found error on the Helpdesk ticketing modal by preventing the system's URL helper from stripping trailing slashes off the
getContactsByCustomerAPI endpoint. -
MySQL Strict Mode Compliance: Fixed potential database crashes caused by
ONLY_FULL_GROUP_BYstrict constraints inCustomerModel.phpby swappingGROUP BYclauses withSELECT DISTINCTduring association fetching.
⚙️ Under the Hood & Architecture
-
Database schemas upgraded with
customer_contacts,vendor_contacts, and alteredpeopleandsupport_ticketstables. -
Explicit forced logging applied to the
error_logdirective to guarantee all caught\Throwableexceptions write cleanly to the application's root directory.
Version: 1.1.3
Release Date: June 11, 2026
✨ New Features & Core Modules
1. Customer Credit Wallet (Overpayment Handling)
-
Automated Credit Routing: When a client overpays an invoice (either via single payment or bulk lump sum), the system automatically caps the invoice payment at the exact amount owed and reroutes the excess funds into a dedicated "Credit Wallet."
-
"Pay from Wallet" Engine: Added a smart application tool directly inside the invoice payment modal. Staff can instantly apply available wallet funds to unpaid invoices, which automatically recalculates balances and logs the transaction.
-
Client & Admin Visibility: Introduced a new Wallet Balance display on the administrative Customer 360 view, and deployed a new glass-themed Credit Wallet card to the Client Portal dashboard so customers can see their available funds in real-time.
-
Transparent Receipting: Automated payment receipts now explicitly separate invoice allocations from funds moved to the credit wallet to prevent client confusion.
2. Bulk Payment Allocation Engine
-
Lump Sum Processing: Staff can now capture a single large payment and distribute it across multiple unpaid invoices for the same client.
-
Smart Auto-Allocator: Built-in JavaScript engine uses a First-In-First-Out (FIFO) method to instantly pay down the oldest invoices first and calculate exact remainders.
-
Manual Overrides: Full flexibility to manually adjust the allocated amounts per invoice before saving.
-
Consolidated Email Receipts: The system compiles the entire bulk allocation into a single HTML receipt and automatically emails it to the client.
3. Customer Portal Helpdesk Integration
-
Client-Facing Ticketing: Customers can securely log support requests, check ticket statuses, and reply to threads directly from their Customer Portal.
-
Rich Media Support: Integrated drag-and-drop file uploads and clipboard pasting for both clients and staff.
-
2-Way Email Automations: Automated alerts for new tickets, staff replies, and customer responses.
-
Privacy Controls: Internal staff notes remain completely hidden from the client portal views.
⚙️ Enhancements & Workflow Improvements
-
Automated Payment Receipts: Added instant HTML email receipts for standard single-invoice payment captures, complete with the payment method, date, and a direct link to the client's portal.
-
Navigation Updates: Added a dedicated "Bulk Allocation" tool under the Sales & Clients sidebar menu, and deployed the new "Support Tickets" tab in the Customer Portal menu.
-
Legacy Data Cleanup: Safely hid the deprecated global "VAT Percentage" field from the Admin Site Settings view to prevent staff confusion, as the system now relies entirely on the granular Tax Rates module for line-item calculations.
🐛 Bug Fixes & UI Corrections
-
Task Management Double-Encoding: Fixed an issue where special characters (like the
&symbol) were being double-encoded into HTML entities (e.g.,&) when saving and viewing tasks. -
CRM Kanban Board Contrast: Resolved a UI bug in the Sales Pipeline where column header text became invisible in Light Mode due to aggressive theme overrides. Implemented bulletproof inline CSS variables to guarantee perfect contrast for "New" and "Lost" columns in both Dark and Light modes.
Version: 1.1.2 Release Date: June 10, 2026
✨ New Features & Core Modules
1. CRM Lead Pipeline (Kanban Board)
-
Visual Drag-and-Drop: Introduced a Kanban-style board to track prospective leads across color-coded stages (New, Contacted, Qualified, Won, Lost).
-
AJAX Automation: Dragging a lead to a new column instantly and silently updates the database in the background without requiring a page reload.
2. Centralized Activity Timeline & Interaction Log
-
360-Degree Customer View: Added a vertical timeline to both the Customer Profile and Edit screens to log all interactions.
-
Interaction Tracking: Staff can manually record Phone Calls, Meetings, and Notes. The system also automatically logs key events (like profile creation or updates).
3. Task Management & Follow-Up Engine
-
Internal To-Do Lists: Staff can create tasks with priority levels (Low, Medium, High) and due dates.
-
Customer Linking: Tasks can be linked directly to specific clients using a dynamic customer dropdown list.
-
Status Tracking: Easily toggle tasks between Pending, In Progress, and Completed.
4. Helpdesk Support Ticketing System
-
Customer Portal Integration: Clients can now log support requests, check statuses, and reply to threads directly from their secure portal.
-
Admin Dashboard: A centralized queue for your team to track, assign, and resolve post-sale support issues.
-
Internal Notes: Staff can add private, color-coded internal notes to a ticket thread that remain completely hidden from the client.
-
Drag-and-Drop Attachments: Both staff and clients can easily attach files and images to tickets by dragging and dropping them, or by pasting them directly from the clipboard.
-
Jobcard Conversion: Added a one-click "Convert to Jobcard" button that instantly transforms a support ticket into a dispatchable job for a technician, migrating the entire conversation history into the job description.
⚙️ Automation & Email Notifications
-
Daily Task Briefings (Cron): The overnight automation engine (
cron.php) has been updated to scan the database and email a personalized "Daily Briefing" to staff members containing all their pending and overdue tasks. -
2-Way Helpdesk Notifications:
-
Customers receive an email confirmation when a ticket is logged and when a staff member replies.
-
Admins/Staff are notified via email when a customer logs a new ticket, replies to an existing thread, or when a ticket is specifically assigned to them.
-
🔄 UI & System Improvements
-
Sidebar Navigation: Updated the global navigation menu. Added "Task Management" and "Helpdesk Tickets" under the Sales & Clients section in the Admin panel, and added a new "Support" section to the Customer Portal sidebar.
-
Database Schema Enhancements: Added
customer_activities,tasks,support_tickets,ticket_replies, andticket_attachmentstables to handle the new CRM data structure.
Changelog: Version 1.1.1
Release Date: 2026-06-05
🚀 Added
-
Sidebar State Memory: Implemented a new JavaScript state manager (
sessionStorage) within the global navigation sidebar. The sidebar will now seamlessly remember and restore its exact vertical scroll position across page reloads, significantly improving navigation UX.
🔄 Changed / Updated
-
Dynamic Due Date Engine: Wired customer-specific Payment Terms directly into the Invoice generation lifecycle. When creating or editing an invoice, the system now automatically calculates the exact Due Date based on the terms assigned to the selected customer's profile (e.g., C.O.D, Net 30).
-
Automated Terms Compliance (Cron): Upgraded the
cron.phpandAdminCronTrait.phpengines to inject thePaymentTermModel. Automatically generated recurring invoices now strictly adhere to the customer's unique payment terms for their due dates, rather than relying on a global default. -
Settings Architecture Cleanup: Deprecated and removed the global "Default Invoice Due Days" setting from the Document Settings UI and backend processor, as due dates are now intelligently managed at the customer level.
🐛 Fixed
-
Disappearing Client Notes: Fixed a payload omission in the
InvoiceControllerwhere theclient_notesfield was being ignored during Add and Edit POST requests. Client notes now save securely to the database and render perfectly on generated PDFs. -
Bug Report Routing: Corrected the system diagnostics and bug report email dispatcher in the Admin Settings to route submissions to the correct developer inbox (
info@keystonepro.co.za).
Changelog: Version 1.1.0
Release Date: 2026-06-01
🌍 Global Banking Integration
-
SWIFT/BIC Code Infrastructure: Expanded the core database schema (Migration 024) to include a
banking_swiftcolumn. -
Admin Settings UI: Upgraded the Banking Details interface within the Admin Settings to securely capture the optional SWIFT/BIC code, providing vital support for international and cross-border client payments.
📄 Document Formatting & PDF Upgrades
-
Rich-Text PDF Restoration: Identified and removed strict HTML sanitization (
htmlspecialchars) that was stripping layout code from the Terms & Conditions output. Implementedhtml_entity_decode()so that TinyMCE's rich-text formatting (bulleted lists, bold text, line breaks) now renders perfectly on official DOMPDF documents. -
Footer Layout Redesign: Overhauled the bottom layout of both the Invoice and Quote PDF templates. Banking details have been moved into an elegant, left-aligned card to perfectly counterbalance the right-aligned Financial Totals.
-
Dynamic Banking Injection: Configured the PDF rendering engine to dynamically read and inject the new SWIFT/BIC code into the banking card, intelligently hiding the label and spacing if the field is left blank.
-
Absolute Bottom Terms: Adjusted the flow of the PDF templates so that the Terms & Conditions and Client Notes now sit cleanly isolated at the absolute bottom of the document, below all financial and banking data.
🛠️ Core Engine & Security
-
Model Whitelisting: Patched the
SettingsModelto explicitly whitelist the newbanking_swiftfield. This ensures the strict column security matrix is maintained and successfully processes the new data during administrative POST requests. -
Migration Patch: Corrected the database migration script to accurately target the
banking_branch_codeanchor column, ensuring seamless OTA (Over-The-Air) database upgrades for existing installations without throwing fatal SQL errors.
Changelog: Version 1.0.9
Release Date: 2026-05-28
🚀 Added
-
Database Migrations: Added Migration 023 to include a vat_type column in the recurring_invoice_items table, and Migration 024 to add a banking_swift column to the settings table.
-
SWIFT/BIC Code Support: Integrated a new optional SWIFT/BIC code field into the Admin Banking Settings to facilitate international client transfers.
-
Purchase Order JS Engine: Built a new, dedicated po-form.js engine to handle dynamic tax rate calculations, DOM generation, and custom tax classifications for supplier orders.
-
Independent Scroll Viewports: Implemented a new UI scroll architecture that locks the main body overflow and allows the Sidebar and Main Content areas to scroll completely independently, complete with a sleek, custom-styled sidebar scrollbar.
🔄 Changed / Updated
-
Dynamic Tax Engine Expansion (Stage 6): Fully wired the Inventory Item Catalog, Purchase Orders, and Recurring Invoices modules into the new dynamic tax engine, ensuring all financial calculations adhere to the custom database tax rates (e.g., STD, ZERO, EXM).
-
Document PDF Templates: Updated the DOMPDF layout templates for Invoices and Quotes to cleanly inject the new SWIFT/BIC code into the banking details block. The engine intelligently hides the label if the field is left blank.
-
Refund Eligibility: Rewrote the getInvoicesJSON API endpoint in the Credit Note module using a direct SQL query to bypass the strict "unpaid only" filter. Users can now securely select and issue refunds against Paid in Full invoices.
🐛 Fixed
-
Credit Note Dropdown Freeze: Resolved a bug where the "Link to Invoice" dropdown would fail to populate and remain locked. Fixed case-sensitive Linux routing paths in the AJAX fetch requests and added Javascript fail-safes to forcefully strip the disabled HTML attribute upon data load.
-
Missing Controller Payloads: Fixed a silent Javascript failure in the Credit Note module by properly injecting the TaxRateModel into the controller, ensuring the frontend DOM builder receives the necessary tax rate arrays to render.
-
Aggressive Browser Caching: Added dynamic cache-busting parameters (?v=time()) to the script imports for Quotes, Credit Notes, and Purchase Orders to force browsers to flush old cached files and load the updated tax engines.
🛠️ System Architecture & Core Engine
-
Global Exception Handling (The Safety Net): Upgraded the root
index.phpFront Controller with a globaltry...catch(\Throwable $e)block. Any fatal PHP errors or PDO Database crashes are now instantly intercepted and gracefully routed to the branded 500 Internal Server Error page, preventing raw stack traces from exposing server details. -
Intelligent Method Reflection Router: Enhanced the MVC router to use PHP's
ReflectionMethod. It now actively verifies that a requested controller method is explicitlypublic. If a user attempts to access aprotectedcore system function via the URL, it safely deflects them to the branded 404 Page Not Found screen. -
JSON API Bulletproofing: Upgraded all asynchronous JSON endpoints across controllers with
ob_clean()and strictheader('Content-Type: application/json');headers. This aggressively scrubs hidden PHP background warnings that previously caused silent Javascript parsing crashes. -
PHP 8 Null-Safe Interpolation: Refactored financial calculations in API endpoints to mathematically cast database
NULLvalues to(float)before formatting, completely eliminating PHP 8 deprecation warnings.
🔍 Global Search Engine Overhaul
-
Deep-Scan Capabilities: The global search engine no longer just searches titles. It now uses highly optimized SQL
EXISTSclauses to search inside nested line items, product descriptions, terms, and notes without duplicating result rows. -
Expanded Module Reach: Added comprehensive search support for Vendors, Purchase Orders, Credit Notes, Recurring Invoices, Payments, and Inventory Serial Numbers.
-
Dynamic Results UI: Completely redesigned the
results.phpview to handle all 10 modules dynamically with color-coded badges, icons, and precise routing to the specific document or profile.
📄 Document Formatting & PDF Upgrades
-
Document Address Snapshot Feature: Added a historical "Snapshot" address field to Invoices, Quotes, Credit Notes, and Recurring Invoices. This ensures that if a customer moves and updates their profile, historical documents retain the exact address they were originally billed to.
-
PDF Height Synchronization: Replaced flexbox models with strict HTML
<table>layouts (.equal-height-cell) in the DOMPDF templates (invoice_template.php,quote_template.php,credit_note_template.php,statement_template.php,po_template.php). This guarantees the "FROM" and "TO" boxes are locked to the exact same vertical pixel height regardless of text volume. -
Mirrored Web UI Parity: Updated the read-only web preview screens for all financial documents to use identical, left-aligned flex-grids with matching iconography (Envelope/Telephone) for perfectly symmetrical "FROM" and "TO" sections.
💼 Module-Specific Updates
Invoices & Quotes
-
Layout Alignment: Stripped out nested wrapper divs to fix a margin-offset bug, ensuring the Customer Address dropdown aligns perfectly with all other form inputs.
-
TinyMCE Restoration: Restored the missing TinyMCE CDN script to the Add/Edit views to ensure the Terms & Conditions textareas render as rich-text editors instead of raw HTML blocks.
Recurring Invoices & Automation (Cron)
-
Cron Propagation: Updated the
AdminCronTrait.phpengine so that when a recurring template fires, it successfully carries over thebilling_address,billing_branch_id,customer_po_number,currency, andexchange_rateto the freshly generated invoice.
Credit Notes
-
Fatal Error Fix: Resolved a 500 Server Error caused by calling an incorrect model name (
InventoryModelinstead ofInventoryItemModel) in the controller constructor. -
Number Sequence Safety: Replaced a missing helper method with the standardized prefix + padding calculation for generating new Credit Note numbers.
-
Linux Pathing Fix: Corrected case-sensitive Javascript
fetchURLs to ensure the "Link to Invoice" dropdown reliably populates on strict Linux environments.
Customers
-
Action Routing Fix: Renamed the
viewCustomer()method toprofile()to resolve a routing conflict with the coreBaseController::view()method. -
Dark Mode UI: Changed the 360 Profile icon button from
btn-outline-darktobtn-outline-secondaryso it remains clearly visible when the user toggles the system to Dark Mode. -
Statement Link Fix: Corrected the "Back to Customer" link in the Statement Preview screen to properly point to the renamed
profileroute.
We are excited to release Keystone Accounting Pro v1.0.5. This update focuses heavily on refining the multi-currency architecture, modernizing the user interface, and expanding the 360-degree CRM capabilities to give you deeper insights into your client accounts.
Key Updates Included in this Release:
- Multi-Currency Email Engine: Resolved a template parsing issue where currency symbols were failing to render in dispatched emails. The entire email dispatch system across Invoices, Quotes, Credit Notes, and Statements has been refactored to dynamically inject the correct client currency.
- Universal System Confirmation Modal: Replaced outdated native browser popups with a beautiful, unified Bootstrap confirmation modal. Critical actions (like deleting records or revoking portal access) now utilize this smooth, modern UI component.
- Customer 360° Enhancements: Upgraded the Customer View dashboard to automatically fetch and display all associated personnel. A new "Associated Contacts" card clearly shows exactly who is linked to the company and what their specific roles are (Primary, Billing, Quotes, Statements).
- Bulletproof Document Routing: Fixed a silent failure in the Customer Controller where linking alternative contacts for document routing failed to save. The data extraction logic has been aggressively hardened to ensure seamless database saves.
- Legacy Login Synchronization: Bridged the gap between the new Decoupled Contacts architecture and the legacy authentication system. Legacy customer logins now correctly trigger the `last_login` timestamp on their associated Person profile, keeping your telemetry perfectly synced.
- UI Polish & Notification Placement: Repositioned the system's flash notifications to float perfectly below the main navigation bar without overlapping the search field. Additionally, refined the "Copy Physical Address" button placement to prevent UI collisions during rapid data entry.
Thank you for your continued support and feedback. We remain dedicated to expanding the system's capabilities while maintaining our strict zero-breakage and security standards!
Welcome to Keystone Accounting Pro v1.0.2! 🚀
We are excited to release Keystone Accounting Pro v1.0.2. This massive upgrade transforms the platform into a true enterprise-ready ERP, introducing powerful corporate hierarchies, intelligent email routing, and advanced inventory control.
Key Updates Included in this Release:
- Advanced Inventory Tracking: Track individual high-value items with serial numbers and warranty dates, plus manage perishable goods using strict FEFO (First-Expired, First-Out) batch tracking.
- Purchasing & Vendors: A complete accounts payable workflow. Maintain a supplier database and generate professional Purchase Orders to seamlessly restock your inventory.
- Decoupled Contact Directory: A brand new "Contacts" module separates people from corporate entities, allowing a single director or managing agent to be linked to multiple branches without data duplication.
- Corporate Hierarchies: Link individual client accounts to a primary "Head Office." Bill the parent company financially while seamlessly attaching specific branch addresses for physical delivery.
- Intelligent Document Routing: Explicitly route different financial documents to different people within the same organization (e.g., email quotes to Procurement, but route monthly statements to Accounts Payable).
- Customer PO Tracking: Capture Customer Purchase Order numbers and automatically display them across Quotes, Invoices, Automated Recurring Templates, and the live Client Portal.
- Security & UI Enhancements: Patched a critical data leak to ensure internal notes are fully stripped from all generated PDFs, alongside contrast optimizations for the Glass Dark Mode UI.
Thank you for your continued support and feedback. We remain dedicated to expanding the system's capabilities while maintaining our strict zero-breakage and security standards!
Welcome to Keystone Accounting Pro! 🎉
We are thrilled to announce the official launch of Keystone Accounting Pro v1.0.1. This initial release brings a robust, self-hosted, and completely enterprise-grade accounting solution to the you.
Core Features Included in this Release:
- Real-Time Dashboard: An instant bird's-eye view of your financial health, tracking total sales, outstanding payments, and expenses.
- Professional Invoicing: Create, manage, and email VAT or Non-VAT invoices with automated, branded PDF generation.
- Quote Management: Send professional quotes to your leads and convert them directly into active invoices with a single click.
- Self-Service Client Portal: A secure, dedicated login area for your clients to view their ledger, check quote statuses, and download past invoices.
- Inventory & Stock Control: Manage products and services, track cost margins, and automatically decrement stock levels upon invoicing.
- Expense Tracking: Categorize and log all business purchases to maintain an accurate, real-time net profit calculation.
Thank you for joining us on day one. We are committed to keeping this application user friendly and free of any bugs, and we look forward to rolling out regular updates based on your feedback!