Run multiple companies inside one SuiteCRM with full data isolation, per-company record numbering, and zero extra infrastructure. One instance, any number of companies, no compromises.
Release Notes
MTS Multi Organization — Release Notes
Version 1.0.0 (2025-10-22)
New Features
Multi-Company Isolation
- Company-scoped SQL filtering on list views for all enabled modules (
mts_cm_company_id_cWHERE clause) - ACL enforcement on detail / edit / delete views — users cannot access records from other companies
setCompanyForRecordlogic hook (position 99): auto-tags new records with the current user's company onbefore_save- Session-based company context (
$_SESSION['mts_cm_company_id_c']) with UUID format validation and live DB existence check CompanyResolver::createCompanyWhere()per-request static cache to avoid redundant DB calls on list views- Cross-user company query restricted to admin users (security fix)
Company Module
- Full
MTS_Companybean with standard SuiteCRM CRUD views - Built-in field groups: Company Information, Legal Information (legal form, registration, VAT, Tax ID, managing directors, share capital, country of incorporation), Bank Details (IBAN, BIC/SWIFT, SEPA creditor ID), Commercial (payment terms)
- Users subpanel — many-to-many relationship between Companies and Users
- Company picker (
availableCompaniesview) for users assigned to multiple companies - Switch Company global link in navigation bar
Admin Configuration Panel
- Admin section in Administration with three tiles: Enable Modules, Manage Companies, License
- Activate / deactivate toggle (master switch)
- Visible admin multi-select with real-time DB validation against actual admin users
- Module selection grid with toggle-all button
- Enabled modules persisted as JSON in SuiteCRM Administration settings
Record Numbering
mts_company_numberingDB table for per-company per-module rules- Format pattern engine with tokens:
{PREFIX},{YYYY},{YY},{MM},{DD},{N},{N:X} - Reset periods: Never, Daily, Monthly, Yearly with conditional UPDATE to prevent concurrent duplicate counters
applyNumberinglogic hook (position 100): reads company from bean (not session) for compatibility with admin "ALL" context- Numbering admin page with add / edit / delete rules
- Numbering modal on Company detail view (per-company rule management)
- Live format preview in the numbering form
- AJAX endpoints:
ajaxGetRules,ajaxGetFields,ajaxSaveRule,ajaxDeleteRule
License Validation
- SugarOutfitters integration (
MTSMultiOrgOutfittersLicense+MTSMultiOrg_SugarOutfitters_API) - Weekly cached validation stored in Administration settings
- Two build packages: Yearly and Onetime — public key injected by build script at build time
- License check gate in
CompanyResolver::isEnabled()— invalid license silently disables all features - License tile in admin panel with validate UI
Technical Details
build.phpgenerates two ZIP files (MTS_Multi_Organization_Yearly_x.x.x.zipand_Onetime_) with public keys injected at build time- All user-facing strings in
$mod_strings— no hardcoded English in templates or PHP CompanyResolverper-request static cache forcreateCompanyWhere()and per-session cache forisEnabled()/isModuleEnabled()RelateFieldInstaller: install / uninstallmts_cm_company_id_crelate fields dynamically per module- Full i18n: English and German language files
Known Limitations
- Records imported via SuiteCRM's native import wizard are not auto-tagged with a company.
- The v8 REST API path does not trigger logic hooks for numbering — applies only to the legacy MVC save path.
- Bulk-editing records from multiple companies simultaneously is not supported (edit one company context at a time).
Upcoming Features (Roadmap)
Version 1.1.0 (planned)
- [ ] Bulk company assignment tool for existing records
- [ ] Per-company logo upload and branding on Company record
- [ ] Company-scoped dashboards
- [ ] REST API v8 hook compatibility for numbering
Version 1.2.0 (planned)
- [ ] Numbering rule import / export (JSON)
- [ ] Company hierarchy — parent / child company relationships
- [ ] Audit log for company context switches
Upgrade Notes
Trial to Licensed
- Purchase a license on the SuiteCRM Store.
- Go to Admin → MTS Multi Organization → License.
- Enter and validate the new license key.
- No reinstall required.
Version Upgrade
- Back up
mts_companyandmts_company_numberingtables. - Go to Admin → Module Loader → Installed Packages → Uninstall current version.
- Upload and install the new ZIP.
- Run Quick Repair and Rebuild → Execute for any SQL schema changes.
- Re-validate the license if prompted.
Version History
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2025-10-22 | Initial release |
Support: SuiteCRM Store Support
- Website: mientrungsoft.com
- Email: anhnhatuit@gmail.com
- WhatsApp: +84973131884