Konfigurace - Nastavení modulu
Dokumentace konfigurace modulu Banking - layouty, metadata, překlady a nastavení.
Metadata
Entity Definitions
Metadata pro entity jsou uloženy v:
Cesta: backend/Resources/metadata/entityDefs/
Bank.json
Definuje strukturu entity Bank včetně polí, vazeb a indexů.
Klíčová nastavení:
{
"collection": {
"orderBy": "createdAt",
"order": "desc"
},
"indexes": {
"name": {
"columns": ["name", "deleted"]
}
}
}
BankAccount.json
Definuje strukturu entity BankAccount včetně speciálních polí jako bankAccountNumber a credential.
Klíčová nastavení:
{
"optimisticConcurrencyControl": false,
"collection": {
"textFilterFields": ["name"],
"fullTextSearch": false
}
}
BankTransaction.json
Definuje strukturu entity BankTransaction včetně readonly polí a vazeb na faktury.
Klíčová nastavení:
{
"collection": {
"orderBy": "createdAt",
"order": "desc"
}
}
Client Definitions
Metadata pro frontend jsou uložena v:
Cesta: backend/Resources/metadata/clientDefs/
Bank.json
{
"controller": "controllers/record",
"iconClass": "fas fa-university",
"color": "#3498db",
"boolFilterList": ["usesApi"],
"relationshipPanels": {
"bankAccounts": {
"create": true,
"select": false
}
}
}
Vysvětlení:
iconClass: Ikona pro entitu (Font Awesome)color: Barva entity v UIboolFilterList: Rychlé bool filtryrelationshipPanels: Konfigurace panelů vztahů
BankAccount.json
{
"controller": "controllers/record",
"iconClass": "fas fa-credit-card",
"color": "#2ecc71",
"dynamicLogic": {
"fields": {
"iban": {
"visible": {
"conditionGroup": [
{
"type": "equals",
"attribute": "type",
"value": "foreign"
}
]
}
}
}
},
"menu": {
"detail": [
{
"label": "Download Transactions",
"action": "downloadTransactions",
"acl": "edit"
}
]
}
}
BankTransaction.json
{
"controller": "controllers/record",
"iconClass": "fas fa-exchange-alt",
"color": "#e74c3c",
"boolFilterList": ["invoiceNotFound", "isInvoiceAssigned"],
"filterList": ["incoming", "outgoing"],
"defaultFilterData": {
"primary": "all"
}
}
Record Definitions
Cesta: backend/Resources/metadata/recordDefs/
Definují chování záznamů:
- Before/After save hooks
- Duplicate check
- Mandatory fields
- Read-only fields
ACL Definitions
Cesta: backend/Resources/metadata/aclDefs/
Definují přístupová práva:
BankAccount.json
{
"mandatory": {
"scopeLevel": {
"read": "yes",
"edit": "team",
"delete": "no",
"create": "team"
}
}
}
Úrovně přístupu:
all- Všichni uživateléteam- Pouze týmoví uživateléown- Pouze vlastní záznamyno- Žádný přístup
Layouts
List Layouts
Cesta: backend/Resources/layouts/[Entity]/list.json
Bank List
[
{"name": "name", "width": 30},
{"name": "code", "width": 10},
{"name": "usesApi", "width": 10},
{"name": "assignedUser", "width": 15}
]
BankAccount List
[
{"name": "name", "width": 20},
{"name": "bankAccountNumber", "width": 25},
{"name": "bank", "width": 20},
{"name": "balance", "width": 15},
{"name": "enabled", "width": 10}
]
BankTransaction List
[
{"name": "transactionDate", "width": 15},
{"name": "type", "width": 10},
{"name": "amount", "width": 15},
{"name": "counterAccountName", "width": 20},
{"name": "variableSymbol", "width": 15},
{"name": "isInvoiceAssigned", "width": 10}
]
Detail Layouts
Cesta: backend/Resources/layouts/[Entity]/detail.json
Definují rozložení detail view s panely.
Bank Detail
{
"panels": [
{
"name": "overview",
"label": "Přehled",
"rows": [
[{"name": "name"}, {"name": "code"}],
[{"name": "website"}, {"name": "usesApi"}]
]
},
{
"name": "notifications",
"label": "Notifikace",
"rows": [
[{"name": "enableAlertUsers"}],
[{"name": "users"}],
[{"name": "notificationTeams"}]
]
}
]
}
BankAccount Detail
{
"panels": [
{
"name": "overview",
"label": "Přehled",
"rows": [
[{"name": "name"}, {"name": "bank"}],
[{"name": "bankAccountNumber"}, {"name": "type"}],
[{"name": "iban"}, {"name": "swift"}],
[{"name": "balance"}, {"name": "enabled"}]
]
},
{
"name": "api",
"label": "API přístup",
"rows": [
[{"name": "credential"}]
]
}
]
}
BankTransaction Detail
{
"panels": [
{
"name": "overview",
"label": "Přehled",
"rows": [
[{"name": "type"}, {"name": "transactionDate"}],
[{"name": "amount"}, {"name": "bankAccount"}],
[{"name": "transactionType"}]
]
},
{
"name": "counterparty",
"label": "Protiúčet",
"rows": [
[{"name": "counterAccountName"}],
[{"name": "counterBankAccountNumber"}, {"name": "counterBank"}]
]
},
{
"name": "symbols",
"label": "Symboly",
"rows": [
[{"name": "variableSymbol"}, {"name": "constantSymbol"}],
[{"name": "specificSymbol"}]
]
},
{
"name": "invoices",
"label": "Faktury",
"rows": [
[{"name": "invoice"}, {"name": "supplierInvoice"}],
[{"name": "proformaInvoice"}, {"name": "receivedProformaInvoice"}],
[{"name": "invoiceNotFound"}]
]
}
]
}
Filter Layouts
Cesta: backend/Resources/layouts/[Entity]/filters.json
Definují dostupné filtry v seznamech.
BankTransaction Filters
{
"primary": [
"all",
"incoming",
"outgoing",
"unpaired",
"invoiceNotFound"
],
"bool": {
"invoiceNotFound": "Faktura nenalezena",
"isInvoiceAssigned": "Přiřazeno k faktuře"
},
"fields": {
"transactionDate": {},
"amount": {},
"bankAccount": {},
"type": {},
"variableSymbol": {}
}
}
Mass Update Layout
Cesta: backend/Resources/layouts/[Entity]/massUpdate.json
Definuje pole dostupná pro hromadnou aktualizaci.
[
"assignedUser",
"teams"
]
Poznámka: Pro Banking entity je hromadná aktualizace omezená, protože většina polí je readonly.
Překlady (i18n)
Struktura překladů
Cesta: backend/Resources/i18n/[locale]/[Entity].json
Podporované lokalizace:
cs_CZ- Češtinaen_US- Angličtinade_DE- Němčinask_SK- Slovenština
Formát překladu
{
"labels": {
"Create Bank": "Vytvořit Banka"
},
"fields": {
"name": "Název",
"bankAccount": "Bankovní účet"
},
"links": {
"bankAccounts": "Bankovní účty"
},
"options": {
"type": {
"Incoming": "Příchozí",
"Outgoing": "Odchozí"
}
},
"tooltips": {
"invoiceNotFound": "Označuje transakce..."
},
"messages": {
"downloadSuccess": "Transakce byly úspěšně staženy"
}
}
Přidání vlastního překladu
- Vytvořte soubor v
custom/Espo/Custom/Resources/i18n/[locale]/Banking.json - Přidejte vlastní překlady:
{
"messages": {
"customMessage": "Vlastní zpráva"
}
}
- Použijte v kódu:
this.translate('customMessage', 'messages', 'Banking')
Nastavení (Settings)
Entity Settings
Soubor: backend/Resources/metadata/entityDefs/Settings.json
{
"fields": {
"bankingEnabled": {
"type": "bool",
"default": true
},
"bankingAutoDownload": {
"type": "bool",
"default": false
},
"bankingDownloadInterval": {
"type": "int",
"default": 3600,
"tooltip": true
},
"bankingNotificationsEnabled": {
"type": "bool",
"default": true
}
}
}
Přístup k nastavení
Backend (PHP)
$config = $this->getConfig();
$enabled = $config->get('bankingEnabled', true);
Frontend (JS/TS)
const enabled = this.getConfig().get('bankingEnabled');
Dynamic Logic
Field Visibility
{
"fields": {
"iban": {
"visible": {
"conditionGroup": [
{
"type": "equals",
"attribute": "type",
"value": "foreign"
}
]
}
}
}
}
Field Required
{
"fields": {
"swift": {
"required": {
"conditionGroup": [
{
"type": "equals",
"attribute": "type",
"value": "foreign"
}
]
}
}
}
}
Field Read-only
{
"fields": {
"balance": {
"readOnly": {
"conditionGroup": [
{
"type": "isNotEmpty",
"attribute": "id"
}
]
}
}
}
}
Options Dynamic
{
"fields": {
"credential": {
"optionsPath": "data.credentialOptions"
}
}
}
Formuláře
Create Form
Formulář pro vytváření nového záznamu.
Konfigurace: Používá detailSmall.json layout
Edit Form
Formulář pro editaci existujícího záznamu.
Konfigurace: Používá detail.json layout
Quick Create
Rychlé vytvoření z jiných entit.
Příklad: Vytvoření BankAccount přímo z Bank detail view
Relationship Panels
Konfigurace panelů
{
"relationshipPanels": {
"bankAccounts": {
"select": false,
"create": true,
"view": "views/record/panels/relationship",
"recordListView": "views/record/list",
"layout": "listForBank"
}
}
}
Parametry:
select: Povolit výběr existujícíchcreate: Povolit vytváření novýchview: Custom view pro panellayout: Vlastní layout pro seznam
Validation Rules
Field Validation
Bank Account Number
{
"bankAccountNumber": {
"type": "bankAccountNumber",
"pattern": "^\\d{6}-\\d{10}\\/\\d{4}$",
"maxLength": 30
}
}
IBAN
{
"iban": {
"type": "varchar",
"pattern": "^[A-Z]{2}\\d{2}[A-Z0-9]+$",
"maxLength": 100
}
}
SWIFT
{
"swift": {
"type": "varchar",
"pattern": "^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$",
"maxLength": 11
}
}
Export/Import
Export Configuration
{
"exportDisabled": false,
"exportFields": [
"name",
"bankAccountNumber",
"iban",
"balance"
]
}
Import Configuration
{
"importDisabled": true
}
Poznámka: Import je zakázán pro BankTransaction, protože transakce se importují automaticky z bank.
Stream (Aktivita)
Stream Configuration
{
"stream": true,
"statusStyles": {
"Incoming": "success",
"Outgoing": "danger"
}
}
Doporučené postupy
Customizace layoutů
-
Nikdy neupravujte přímo v modulech
- Používejte Custom adresář
- Nebo upravujte přes Administration UI
-
Backup před úpravou
- Zálohujte metadata před změnami
- Testujte na vývojovém prostředí
-
Konzistence
- Dodržujte jednotný styl layoutů
- Používejte konzistentní šířky sloupců
Překlady
-
Používejte translation keys
- Vždy používejte translation keys místo hardcoded textů
- Poskytujte překlady pro všechny podporované jazyky
-
Konzistence v názvosloví
- Používejte stejné termíny napříč modulem
- Dodržujte firemní terminologii
Metadata
-
Testujte změny
- Vždy po změně metadata clear cache
- Rebuild aplikace
-
Dokumentujte custom pole
- Vyplňte tooltip pro všechny custom pole
- Poskytněte description
Poznámky
- Po změně metadata je nutné provést Rebuild (Administration → Rebuild)
- Clear cache po změně layoutů: Administration → Clear Cache
- Dynamic logic se vyhodnocuje v real-time na frontendu
- Všechny metadata změny by měly být verzovány (Git)