Currencies & Locales
Configure multi-currency support and regional formatting options for your organization.
Overview
The Currencies & Locales module allows you to:
- Add and manage multiple currencies
- Configure exchange rates
- Set up regional locales
- Configure currency symbols and formatting
- Manage currency-specific settings
Currencies
Adding a Currency
-
Navigate to Currencies
- Go to Settings > Currencies & Locales
- Click "Add Currency"
-
Currency Details
- Currency Code: ISO 4217 code (e.g., USD, GHS, EUR)
- Currency Name: Full currency name (e.g., US Dollar, Ghana Cedi)
- Symbol: Currency symbol (e.g., $, ₵, €)
- Locale ID: Associated locale (foreign key to locales table)
- Exchange Rate: Rate relative to base currency
- Decimals: Number of decimal places (usually 2)
- Is Default: Mark as organization default currency
- Is Active: Enable/disable currency
-
Save Currency
- Click "Save" to create the currency
- Currency appears in currency list
Currency Fields
Currency Code
- Format: 3-letter ISO 4217 code
- Examples: USD, GHS, EUR, GBP, JPY
- Required: Yes
- Unique: Yes
Currency Name
- Format: Full name of currency
- Examples: US Dollar, Ghana Cedi, Euro
- Required: Yes
- Display: Shown in dropdowns and reports
Symbol
- Format: Currency symbol
- Examples: $, ₵, €, £, ¥
- Required: Yes
- Display: Shown before amounts
Locale ID
- Type: Foreign key to locales table
- Purpose: Associates currency with regional locale
- Required: No (can be null)
- Impact: Affects number and date formatting
Exchange Rate
- Format: Decimal number
- Base: Relative to organization's base currency
- Example: If base is USD and GHS rate is 12.5, then 1 USD = 12.5 GHS
- Auto-Update: Can be configured for automatic updates
- Manual Override: Can set manually
Decimals
- Format: Integer (0-4)
- Default: 2
- Purpose: Number of decimal places for amounts
- Examples: 2 for $10.50, 0 for ¥1000
Is Default
- Type: Boolean
- Purpose: Mark as organization's primary currency
- Limit: Only one currency can be default
- Impact: Used for reporting and base calculations
Is Active
- Type: Boolean
- Purpose: Enable/disable currency
- Impact: Inactive currencies not shown in dropdowns
- Data Preservation: Historical data preserved even if inactive
Managing Currencies
Editing a Currency
- Navigate to currency list
- Click on currency to edit
- Modify fields as needed
- Click "Save Changes"
- Changes take effect immediately
Deleting a Currency
- Navigate to currency list
- Click on currency to delete
- Click "Delete"
- Confirm deletion
- Currency removed from system
Restrictions:
- Cannot delete default currency
- Cannot delete currency with transactions
- Cannot delete currency with inventory
- Set as inactive instead of deleting
Exchange Rates
Manual Exchange Rate Update
-
Navigate to Currencies
- Go to Settings > Currencies & Locales
- Click on currency to edit
-
Update Exchange Rate
- Enter new exchange rate
- Set effective date
- Click "Save"
-
Rate History
- System maintains rate history
- Can view historical rates
- Used for historical transactions
Automatic Exchange Rate Updates
Configure automatic rate updates:
-
Navigate to Exchange Rate Settings
- Go to Settings > Currencies & Locales
- Click "Exchange Rate Settings"
-
Configure Auto-Update
- Enable: Enable automatic updates
- Source: Select rate source (e.g., Central Bank)
- Frequency: Update frequency (daily, weekly)
- Time: Update time
-
Save Settings
- Click "Save"
- System updates rates automatically
Rate Sources
- Central Bank: Official central bank rates
- Market Rates: Market exchange rates
- Custom API: Custom rate provider API
- Manual: Manual entry only
Locales
Adding a Locale
-
Navigate to Locales
- Go to Settings > Currencies & Locales
- Click "Locales" tab
- Click "Add Locale"
-
Locale Details
- Locale Code: IETF language tag (e.g., en-US, en-GH, fr-FR)
- Locale Name: Human-readable name (e.g., English (United States))
- Language: Language (e.g., English, French)
- Country: Country (e.g., United States, Ghana)
- Is Active: Enable/disable locale
-
Save Locale
- Click "Save"
- Locale appears in locale list
Locale Fields
Locale Code
- Format: IETF BCP 47 language tag
- Examples: en-US, en-GH, fr-FR, es-ES
- Required: Yes
- Unique: Yes
Locale Name
- Format: Human-readable name
- Examples: English (United States), English (Ghana)
- Required: Yes
- Display: Shown in dropdowns
Language
- Format: Language name
- Examples: English, French, Spanish
- Required: Yes
- Purpose: Language identification
Country
- Format: Country name
- Examples: United States, Ghana, France
- Required: Yes
- Purpose: Regional identification
Is Active
- Type: Boolean
- Purpose: Enable/disable locale
- Impact: Inactive locales not shown in dropdowns
Locale Impact
Locales affect:
- Number Formatting: Decimal separators, thousand separators
- Date Formatting: Date order, separators
- Time Formatting: 12-hour vs 24-hour, AM/PM
- Currency Formatting: Symbol position, spacing
- First Day of Week: Sunday or Monday
Currency-Locale Relationship
Foreign Key Relationship
Currencies are linked to locales via the locale_id foreign key:
- Database:
currencies.locale_idreferenceslocales.id - Purpose: Associates currency with regional formatting
- Flexibility: Can be null for global currencies
- Display: Shows locale name and code in UI
Benefits
- Normalized Data: Locale data stored centrally
- Easy Updates: Update locale in one place
- Consistency: Consistent formatting across system
- Flexibility: Multiple currencies can share locale
Multi-Currency Transactions
Transaction Currency Selection
When creating transactions:
-
Select Currency
- Choose from active currencies
- Default to organization default
- Can change per transaction
-
Exchange Rate
- System uses current exchange rate
- Can override if needed
- Rate saved with transaction
-
Base Currency Conversion
- Amount converted to base currency
- Both amounts stored
- Reporting uses base currency
Reporting in Multiple Currencies
- Base Currency: Primary reporting currency
- Multi-Currency: Reports in selected currency
- Conversion: Real-time or historical rates
- Comparison: Compare across currencies
Currency Formatting
Display Formats
Currency amounts are formatted based on:
- Symbol: Currency symbol position
- Decimals: Number of decimal places
- Separators: Thousand and decimal separators
- Spacing: Space between symbol and amount
Examples
| Currency | Format | Example |
|---|---|---|
| USD | $1,234.56 | $1,234.56 |
| GHS | ₵1,234.56 | ₵1,234.56 |
| EUR | 1.234,56 € | 1.234,56 € |
| JPY | ¥1,235 | ¥1,235 |
Best Practices
Currency Management
- Add all currencies you'll use
- Keep exchange rates updated
- Set appropriate decimal places
- Use correct currency codes
- Mark appropriate currency as default
Locale Management
- Add locales for all regions you operate in
- Use correct IETF locale codes
- Keep locale names descriptive
- Activate only needed locales
- Regularly review locale settings
Exchange Rate Management
- Update rates regularly
- Use reliable rate sources
- Maintain rate history
- Document rate sources
- Test automatic updates
Multi-Currency Setup
- Plan currency needs before setup
- Configure base currency first
- Set up exchange rate updates
- Test currency conversion
- Train users on multi-currency
Troubleshooting
Currency Not Showing in Dropdown
- Verify currency is active
- Check if currency is deleted
- Refresh the page
- Verify user permissions
- Contact support if needed
Exchange Rate Not Updating
- Check auto-update settings
- Verify rate source is accessible
- Check API credentials
- Test manual update
- Contact support if issue persists
Incorrect Currency Formatting
- Verify locale is configured correctly
- Check decimal places setting
- Verify symbol is correct
- Test with sample amount
- Contact support if needed
Cannot Delete Currency
- Check if currency is default
- Verify no transactions exist
- Check if inventory uses currency
- Set as inactive instead
- Contact support if needed
Locale Not Working
- Verify locale code is correct
- Check if locale is active
- Verify currency is linked to locale
- Test with sample data
- Contact support if issue persists
Database Schema Reference
Currencies Table
CREATE TABLE currencies (
id INT PRIMARY KEY AUTO_INCREMENT,
organization_id INT,
code VARCHAR(3) NOT NULL,
name VARCHAR(100) NOT NULL,
symbol VARCHAR(10) NOT NULL,
locale_id INT,
exchange_rate DECIMAL(20, 6) DEFAULT 1.000000,
decimals INT DEFAULT 2,
major_singular VARCHAR(50),
major_plural VARCHAR(50),
minor_singular VARCHAR(50),
minor_plural VARCHAR(50),
is_default BOOLEAN DEFAULT 0,
is_active BOOLEAN DEFAULT 1,
FOREIGN KEY (locale_id) REFERENCES locales(id)
);
Locales Table
CREATE TABLE locales (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(10) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
language VARCHAR(50),
country VARCHAR(50),
is_active BOOLEAN DEFAULT 1
);