diff --git a/server/package.json b/server/package.json index 1d25a8e02..cbcebcb30 100644 --- a/server/package.json +++ b/server/package.json @@ -78,6 +78,7 @@ "pluralize": "^8.0.0", "pug": "^3.0.2", "puppeteer": "^10.2.0", + "qim": "0.0.52", "ramda": "^0.27.1", "rate-limiter-flexible": "^2.1.14", "reflect-metadata": "^0.1.13", diff --git a/server/src/api/controllers/Resources.ts b/server/src/api/controllers/Resources.ts index 5d679f37f..a0eee4338 100644 --- a/server/src/api/controllers/Resources.ts +++ b/server/src/api/controllers/Resources.ts @@ -47,9 +47,11 @@ export default class ResourceController extends BaseController { tenantId, resourceModel ); - return res - .status(200) - .send({ resource_meta: this.transfromToResponse(resourceMeta) }); + return res.status(200).send({ + resource_meta: this.transfromToResponse( + resourceMeta, + ), + }); } catch (error) { next(error); } diff --git a/server/src/locales/ar.json b/server/src/locales/ar.json index 8f1451ac4..2c865ec45 100644 --- a/server/src/locales/ar.json +++ b/server/src/locales/ar.json @@ -23,7 +23,7 @@ "Other Liability": "التزمات اخري", "Equity": "حقوق الملكية", "Expense": "مصروف", - "Income": "دخل", + "Income": "إيراد", "Accounts Receivable (A/R)": "الذمم المدينة", "Accounts Receivable": "الذمم المدينة", "Accounts Payable (A/P)": "الذمم الدائنة", @@ -76,7 +76,7 @@ "Journal type": "نوع القيد", "Date": "تاريخ", "Asset": "أصل", - "Liability": "مسؤلية", + "Liability": "التزام", "First-in first-out (FIFO)": "الوارد أولاً يصرف أولاً (FIFO)", "Last-in first-out (LIFO)": "الوارد أخيرًا يصرف أولاً (LIFO)", "Average rate": "المعدل المتوسط", @@ -187,5 +187,181 @@ "receipt.paper.receipt_number": "رقم الإيصال", "receipt.paper.conditions_title": "الشروط والأحكام", "receipt.paper.notes_title": "ملاحظات", - "receipt.paper.receipt_amount": "قيمة الإيصال" + "receipt.paper.receipt_amount": "قيمة الإيصال", + "account.field.name": "إسم الحساب", + "account.field.description": "الوصف", + "account.field.slug": "Account slug", + "account.field.code": "رقم الحساب", + "account.field.root_type": "جذر الحساب", + "account.field.normal": "طبيعة الحساب", + "account.field.normal.credit": "دائن", + "account.field.normal.debit": "مدين", + "account.field.type": "نوع الحساب", + "account.field.active": "Activity", + "account.field.balance": "الرصيد", + "account.field.created_at": "أنشئت في", + "item.field.type": "نوع الصنف", + "item.field.type.inventory": "مخزون", + "item.field.type.service": "خدمة", + "item.field.type.non-inventory": "Non inventory", + "item.field.name": "اسم الصنف", + "item.field.code": "رمز الصنف", + "item.field.sellable": "قابل للبيع", + "item.field.purchasable": "قابل للشراء", + "item.field.cost_price": "سعر التكلفة", + "item.field.cost_account": "حساب التكلفة", + "item.field.sell_account": "حساب البيع", + "item.field.sell_description": "وصف البيع", + "item.field.inventory_account": "حساب المخزون", + "item.field.purchase_description": "وصف الشراء", + "item.field.quantity_on_hand": "الكمية", + "item.field.note": "ملاحظة", + "item.field.category": "التصنيف", + "item.field.active": "Active", + "item.field.created_at": "أنشئت في", + "item_category.field.name": "الاسم", + "item_category.field.description": "الوصف", + "item_category.field.count": "العدد", + "item_category.field.created_at": "أنشئت في", + "invoice.field.customer": "الزبون", + "invoice.field.invoice_date": "تاريخ الفاتورة", + "invoice.field.due_date": "تاريخ الاستحقاق", + "invoice.field.invoice_no": "رقم الفاتورة", + "invoice.field.reference_no": "رقم الإشاري", + "invoice.field.invoice_message": "رسالة الفاتورة", + "invoice.field.terms_conditions": "الشروط والأحكام", + "invoice.field.amount": "القيمة", + "invoice.field.payment_amount": "القيمة المدفوعة", + "invoice.field.due_amount": "القيمة المستحقة", + "invoice.field.status": "الحالة", + "invoice.field.status.paid": "مدفوعة", + "invoice.field.status.partially-paid": "المدفوعة جزئيا", + "invoice.field.status.overdue": "متأخرة", + "invoice.field.status.unpaid": "غير مدفوعة", + "invoice.field.status.delivered": "تم تسليمها", + "invoice.field.status.draft": "مسودة", + "invoice.field.created_at": "أنشئت في", + "estimate.field.amount": "القيمة", + "estimate.field.estimate_number": "رقم العرض", + "estimate.field.customer": "الزبون", + "estimate.field.estimate_date": "تاريخ العرض", + "estimate.field.expiration_date": "تاريخ انتهاء الصلاحية", + "estimate.field.reference_no": "رقم الإشاري", + "estimate.field.note": "ملاحظة", + "estimate.field.terms_conditions": "الشروط والأحكام", + "estimate.field.status": "الحالة", + "estimate.field.status.delivered": "تم تسليمها", + "estimate.field.status.rejected": "مرفوضة", + "estimate.field.status.approved": "تم الموافقة", + "estimate.field.status.draft": "مسودة", + "estimate.field.created_at": "أنشئت في", + "payment_receive.field.customer": "الزبون", + "payment_receive.field.payment_date": "تاريخ الدفع", + "payment_receive.field.amount": "القيمة", + "payment_receive.field.reference_no": "رقم الإشاري", + "payment_receive.field.deposit_account": "حساب الإيداع", + "payment_receive.field.payment_receive_no": "رقم عملية الدفع", + "payment_receive.field.statement": "البيان", + "payment_receive.field.created_at": "أنشئت في", + "bill_payment.field.vendor": "المورد", + "bill_payment.field.amount": "القيمة", + "bill_payment.field.due_amount": "قيمة المستحقة", + "bill_payment.field.payment_account": "حساب الدفع", + "bill_payment.field.payment_number": "قيمة الدفع", + "bill_payment.field.payment_date": "تاريخ الدفع", + "bill_payment.field.reference_no": "رقم الإشاري", + "bill_payment.field.description": "الوصف", + "bill_payment.field.created_at": "أنشئت في", + "bill.field.vendor": "المورد", + "bill.field.bill_number": "رقم الفاتورة", + "bill.field.bill_date": "تاريخ الفاتورة", + "bill.field.due_date": "تاريخ الاستحقاق", + "bill.field.reference_no": "رقم الإشاري", + "bill.field.status": "الحالة", + "bill.field.status.paid": "مدفوعة", + "bill.field.status.partially-paid": "مدفوعة جزئيا", + "bill.field.status.unpaid": "غير مدفوعة", + "bill.field.status.opened": "مفتوحة", + "bill.field.status.draft": "مسودة", + "bill.field.status.overdue": "متأخرة", + "bill.field.amount": "القيمة", + "bill.field.payment_amount": "قيم الدفع", + "bill.field.note": "ملاحظة", + "bill.field.created_at": "أنشئت في", + "inventory_adjustment.field.date": "التاريخ", + "inventory_adjustment.field.type": "النوع", + "inventory_adjustment.field.type.increment": "زيادة", + "inventory_adjustment.field.type.decrement": "نقصان", + "inventory_adjustment.field.adjustment_account": "حساب التسوية", + "inventory_adjustment.field.reason": "السبب", + "inventory_adjustment.field.reference_no": "رقم الإشاري", + "inventory_adjustment.field.description": "الوصف", + "inventory_adjustment.field.published_at": "نشرت في", + "inventory_adjustment.field.created_at": "أنشئت في", + "expense.field.payment_date": "تاريخ الدفع", + "expense.field.payment_account": "حساب الدفع", + "expense.field.amount": "القيمة", + "expense.field.reference_no": "رقم الإشاري", + "expense.field.description": "الوصف", + "expense.field.published": "Published", + "expense.field.status": "الحالة", + "expense.field.status.draft": "مسودة", + "expense.field.status.published": "نشرت", + "expense.field.created_at": "أنشئت في", + "manual_journal.field.date": "التاريخ", + "manual_journal.field.journal_number": "رقم القيد", + "manual_journal.field.reference": "رقم الإشاري", + "manual_journal.field.journal_type": "نوع القيد", + "manual_journal.field.amount": "القيمة", + "manual_journal.field.description": "الوصف", + "manual_journal.field.status": "الحالة", + "manual_journal.field.created_at": "أنشئت في", + "receipt.field.amount": "القيمة", + "receipt.field.deposit_account": "حساب الإيداع", + "receipt.field.customer": "الزبون", + "receipt.field.receipt_date": "تاريخ الإيصال", + "receipt.field.receipt_number": "رقم الإيصال", + "receipt.field.reference_no": "رقم الإشاري", + "receipt.field.receipt_message": "رسالة الإيصال", + "receipt.field.statement": "البيان", + "receipt.field.created_at": "أنشئت في", + "receipt.field.status": "الحالة", + "receipt.field.status.draft": "مسودة", + "receipt.field.status.closed": "مغلقة", + "customer.field.first_name": "الاسم الأول", + "customer.field.last_name": "الاسم الاخير", + "customer.field.display_name": "اسم العرض", + "customer.field.email": "بريد الالكتروني", + "customer.field.work_phone": "هاتف عمل", + "customer.field.personal_phone": "هاتف شخصي", + "customer.field.company_name": "اسم الشركة", + "customer.field.website": "موقع الكتروني", + "customer.field.opening_balance_at": "الرصيد الافتتاحي في", + "customer.field.opening_balance": "الرصيد الافتتاحي", + "customer.field.created_at": "أنشئت في", + "customer.field.balance": "الرصيد", + "customer.field.status": "الحالة", + "customer.field.currency": "العملة", + "customer.field.status.active": "مفعل", + "customer.field.status.inactive": "غير مفعل", + "customer.field.status.overdue": "متأخر", + "customer.field.status.unpaid": "غير دافع", + "vendor.field.first_name": "الاسم الأول", + "vendor.field.last_name": "الاسم الاخير", + "vendor.field.display_name": "اسم العرض", + "vendor.field.email": "بريد الالكتروني", + "vendor.field.work_phone": "هاتف عمل", + "vendor.field.personal_phone": "هاتف شخصي", + "vendor.field.company_name": "اسم الشركة", + "vendor.field.website": "موقع الكتروني", + "vendor.field.opening_balance_at": "الرصيد الافتتاحي في", + "vendor.field.opening_balance": "الرصيد الافتتاحي", + "vendor.field.created_at": "أنشئت في", + "vendor.field.balance": "الرصيد", + "vendor.field.status": "الحالة", + "vendor.field.currency": "العملة", + "vendor.field.status.active": "مفعل", + "vendor.field.status.inactive": "غير مفعل", + "vendor.field.status.overdue": "متأخر", + "vendor.field.status.unpaid": "غير دافع" } \ No newline at end of file diff --git a/server/src/locales/en.json b/server/src/locales/en.json index 4cf0c952f..4aaf27c11 100644 --- a/server/src/locales/en.json +++ b/server/src/locales/en.json @@ -187,5 +187,181 @@ "receipt.paper.expiration_date": "Expiration date", "receipt.paper.conditions_title": "Conditions & terms", "receipt.paper.notes_title": "Notes", - "receipt.paper.receipt_amount": "Receipt amount" + "receipt.paper.receipt_amount": "Receipt amount", + "account.field.name": "Account name", + "account.field.description": "Description", + "account.field.slug": "Account slug", + "account.field.code": "Account code", + "account.field.root_type": "Root type", + "account.field.normal": "Account normal", + "account.field.normal.credit": "Credit", + "account.field.normal.debit": "Debit", + "account.field.type": "Type", + "account.field.active": "Activity", + "account.field.balance": "Balance", + "account.field.created_at": "Created at", + "item.field.type": "Item type", + "item.field.type.inventory": "Inventory", + "item.field.type.service": "Service", + "item.field.type.non-inventory": "Non inventory", + "item.field.name": "Name", + "item.field.code": "Code", + "item.field.sellable": "Sellable", + "item.field.purchasable": "Purchasable", + "item.field.cost_price": "Cost price", + "item.field.cost_account": "Cost account", + "item.field.sell_account": "Sell account", + "item.field.sell_description": "Sell description", + "item.field.inventory_account": "Inventory account", + "item.field.purchase_description": "Purchase description", + "item.field.quantity_on_hand": "Quantity on hand", + "item.field.note": "Note", + "item.field.category": "Category", + "item.field.active": "Active", + "item.field.created_at": "Created at", + "item_category.field.name": "Name", + "item_category.field.description": "Description", + "item_category.field.count": "Count", + "item_category.field.created_at": "Created at", + "invoice.field.customer": "Customer", + "invoice.field.invoice_date": "Invoice date", + "invoice.field.due_date": "Due date", + "invoice.field.invoice_no": "Invoice No.", + "invoice.field.reference_no": "Reference No.", + "invoice.field.invoice_message": "Invoice message", + "invoice.field.terms_conditions": "Terms & conditions", + "invoice.field.amount": "Amount", + "invoice.field.payment_amount": "Payment amount", + "invoice.field.due_amount": "Due amount", + "invoice.field.status": "Status", + "invoice.field.status.paid": "Paid", + "invoice.field.status.partially-paid": "Partially paid", + "invoice.field.status.overdue": "Overdue", + "invoice.field.status.unpaid": "Unpaid", + "invoice.field.status.delivered": "Delivered", + "invoice.field.status.draft": "Draft", + "invoice.field.created_at": "Created at", + "estimate.field.amount": "Amount", + "estimate.field.estimate_number": "Estimate number", + "estimate.field.customer": "Customer", + "estimate.field.estimate_date": "Estimate date", + "estimate.field.expiration_date": "Expiration date", + "estimate.field.reference_no": "Reference No.", + "estimate.field.note": "Note", + "estimate.field.terms_conditions": "Terms & conditions", + "estimate.field.status": "Status", + "estimate.field.status.delivered": "Delivered", + "estimate.field.status.rejected": "Rejected", + "estimate.field.status.approved": "Approved", + "estimate.field.status.draft": "Draft", + "estimate.field.created_at": "Created at", + "payment_receive.field.customer": "Customer", + "payment_receive.field.payment_date": "Payment date", + "payment_receive.field.amount": "Amount", + "payment_receive.field.reference_no": "Reference No.", + "payment_receive.field.deposit_account": "Deposit account", + "payment_receive.field.payment_receive_no": "Payment receive No.", + "payment_receive.field.statement": "Statement", + "payment_receive.field.created_at": "Created at", + "bill_payment.field.vendor": "Vendor", + "bill_payment.field.amount": "Amount", + "bill_payment.field.due_amount": "Due amount", + "bill_payment.field.payment_account": "Payment account", + "bill_payment.field.payment_number": "Payment number", + "bill_payment.field.payment_date": "Payment date", + "bill_payment.field.reference_no": "Reference No.", + "bill_payment.field.description": "Description", + "bill_payment.field.created_at": "Created at", + "bill.field.vendor": "Vendor", + "bill.field.bill_number": "Bill number", + "bill.field.bill_date": "Bill date", + "bill.field.due_date": "Due date", + "bill.field.reference_no": "Reference No.", + "bill.field.status": "Status", + "bill.field.status.paid": "Paid", + "bill.field.status.partially-paid": "Partially paid", + "bill.field.status.unpaid": "Unpaid", + "bill.field.status.opened": "Opened", + "bill.field.status.draft": "Draft", + "bill.field.status.overdue": "overdue", + "bill.field.amount": "Amount", + "bill.field.payment_amount": "Payment amount", + "bill.field.note": "Note", + "bill.field.created_at": "Created at", + "inventory_adjustment.field.date": "Date", + "inventory_adjustment.field.type": "Type", + "inventory_adjustment.field.type.increment": "Increment", + "inventory_adjustment.field.type.decrement": "Decrement", + "inventory_adjustment.field.adjustment_account": "Adjustment account", + "inventory_adjustment.field.reason": "Reason", + "inventory_adjustment.field.reference_no": "Reference No.", + "inventory_adjustment.field.description": "Description", + "inventory_adjustment.field.published_at": "Published at", + "inventory_adjustment.field.created_at": "Created at", + "expense.field.payment_date": "Payment date", + "expense.field.payment_account": "Payment account", + "expense.field.amount": "Amount", + "expense.field.reference_no": "Reference No.", + "expense.field.description": "Description", + "expense.field.published": "Published", + "expense.field.status": "Status", + "expense.field.status.draft": "Draft", + "expense.field.status.published": "Published", + "expense.field.created_at": "Created at", + "manual_journal.field.date": "Date", + "manual_journal.field.journal_number": "Journal number", + "manual_journal.field.reference": "Reference No.", + "manual_journal.field.journal_type": "Journal type", + "manual_journal.field.amount": "Amount", + "manual_journal.field.description": "Description", + "manual_journal.field.status": "Status", + "manual_journal.field.created_at": "Created at", + "receipt.field.amount": "Amount", + "receipt.field.deposit_account": "Deposit account", + "receipt.field.customer": "Customer", + "receipt.field.receipt_date": "Receipt date", + "receipt.field.receipt_number": "Receipt number", + "receipt.field.reference_no": "Reference No.", + "receipt.field.receipt_message": "Receipt message", + "receipt.field.statement": "Statement", + "receipt.field.created_at": "Created at", + "receipt.field.status": "Status", + "receipt.field.status.draft": "Draft", + "receipt.field.status.closed": "Closed", + "customer.field.first_name": "First name", + "customer.field.last_name": "Last name", + "customer.field.display_name": "Display name", + "customer.field.email": "Email", + "customer.field.work_phone": "Work phone", + "customer.field.personal_phone": "Personal phone", + "customer.field.company_name": "Company name", + "customer.field.website": "Website", + "customer.field.opening_balance_at": "Opening balance at", + "customer.field.opening_balance": "Opening balance", + "customer.field.created_at": "Created at", + "customer.field.balance": "Balance", + "customer.field.status": "Status", + "customer.field.currency": "Curreny", + "customer.field.status.active": "Active", + "customer.field.status.inactive": "Inactive", + "customer.field.status.overdue": "Overdue", + "customer.field.status.unpaid": "Unpaid", + "vendor.field.first_name": "First name", + "vendor.field.last_name": "Last name", + "vendor.field.display_name": "Display name", + "vendor.field.email": "Email", + "vendor.field.work_phone": "Work phone", + "vendor.field.personal_phone": "Personal phone", + "vendor.field.company_name": "Company name", + "vendor.field.website": "Website", + "vendor.field.opening_balance_at": "Opening balance at", + "vendor.field.opening_balance": "Opening balance", + "vendor.field.created_at": "Created at", + "vendor.field.balance": "Balance", + "vendor.field.status": "Status", + "vendor.field.currency": "Curreny", + "vendor.field.status.active": "Active", + "vendor.field.status.inactive": "Inactive", + "vendor.field.status.overdue": "Overdue", + "vendor.field.status.unpaid": "Unpaid" } \ No newline at end of file diff --git a/server/src/models/Account.Settings.ts b/server/src/models/Account.Settings.ts index 61a2f6caf..a7187653f 100644 --- a/server/src/models/Account.Settings.ts +++ b/server/src/models/Account.Settings.ts @@ -1,4 +1,3 @@ -import { IModelMeta } from 'interfaces'; import { ACCOUNT_TYPES } from 'data/AccountTypes'; export default { @@ -9,29 +8,29 @@ export default { }, fields: { name: { - name: 'Account name', + name: 'account.field.name', column: 'name', fieldType: 'text', }, description: { - name: 'Description', + name: 'account.field.description', column: 'description', fieldType: 'text', }, slug: { - name: 'Account slug', + name: 'account.field.slug', column: 'slug', fieldType: 'text', columnable: false, filterable: false, }, code: { - name: 'Account code', + name: 'account.field.code', column: 'code', fieldType: 'text', }, root_type: { - name: 'Root type', + name: 'account.field.root_type', fieldType: 'enumeration', options: [ { key: 'asset', label: 'Asset' }, @@ -44,17 +43,17 @@ export default { sortable: false, }, normal: { - name: 'Account normal', + name: 'account.field.normal', fieldType: 'enumeration', options: [ - { key: 'debit', label: 'Debit' }, - { key: 'credit', label: 'Credit' }, + { key: 'debit', label: 'account.field.normal.debit' }, + { key: 'credit', label: 'account.field.normal.credit' }, ], filterCustomQuery: NormalTypeFieldFilterQuery, sortable: false, }, type: { - name: 'Type', + name: 'account.field.type', column: 'account_type', fieldType: 'enumeration', options: ACCOUNT_TYPES.map((accountType) => ({ @@ -63,24 +62,24 @@ export default { })), }, active: { - name: 'Active', + name: 'account.field.active', column: 'active', fieldType: 'boolean', filterable: false, }, balance: { - name: 'Account balance', + name: 'account.field.balance', column: 'amount', fieldType: 'number', }, currency: { - name: 'Currency', + name: 'account.field.currency', column: 'currency_code', fieldType: 'text', filterable: false, }, created_at: { - name: 'Created at', + name: 'account.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/Bill.Settings.ts b/server/src/models/Bill.Settings.ts index bb67c7416..82aec9e94 100644 --- a/server/src/models/Bill.Settings.ts +++ b/server/src/models/Bill.Settings.ts @@ -9,7 +9,7 @@ export default { }, fields: { vendor: { - name: 'Vendor', + name: 'bill.field.vendor', column: 'vendor_id', fieldType: 'relation', @@ -20,61 +20,61 @@ export default { relationEntityKey: 'id', }, bill_number: { - name: 'Bill number', + name: 'bill.field.bill_number', column: 'bill_number', columnable: true, fieldType: 'text', }, bill_date: { - name: 'Bill date', + name: 'bill.field.bill_date', column: 'bill_date', columnable: true, fieldType: 'date', }, due_date: { - name: 'Due date', + name: 'bill.field.due_date', column: 'due_date', columnable: true, fieldType: 'date', }, reference_no: { - name: 'Reference No.', + name: 'bill.field.reference_no', column: 'reference_no', columnable: true, fieldType: 'text', }, status: { - name: 'Status', + name: 'bill.field.status', fieldType: 'enumeration', columnable: true, options: [ - { label: 'Paid', key: 'paid' }, - { label: 'Partially paid', key: 'partially-paid' }, - { label: 'Overdue', key: 'overdue' }, - { label: 'Unpaid', key: 'unpaid' }, - { label: 'Opened', key: 'opened' }, - { label: 'Draft', key: 'draft' }, + { label: 'bill.field.status.paid', key: 'paid' }, + { label: 'bill.field.status.partially-paid', key: 'partially-paid' }, + { label: 'bill.field.status.overdue', key: 'overdue' }, + { label: 'bill.field.status.unpaid', key: 'unpaid' }, + { label: 'bill.field.status.opened', key: 'opened' }, + { label: 'bill.field.status.draft', key: 'draft' }, ], filterCustomQuery: StatusFieldFilterQuery, sortCustomQuery: StatusFieldSortQuery, }, amount: { - name: 'Amount', + name: 'bill.field.amount', column: 'amount', fieldType: 'number', }, payment_amount: { - name: 'Payment amount', + name: 'bill.field.payment_amount', column: 'payment_amount', fieldType: 'number', }, note: { - name: 'Note', + name: 'bill.field.note', column: 'note', fieldType: 'text', }, created_at: { - name: 'Created at', + name: 'bill.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/BillPayment.Settings.ts b/server/src/models/BillPayment.Settings.ts index 261328036..c222ecafa 100644 --- a/server/src/models/BillPayment.Settings.ts +++ b/server/src/models/BillPayment.Settings.ts @@ -1,4 +1,3 @@ - export default { defaultFilterField: 'vendor', defaultSort: { @@ -6,8 +5,8 @@ export default { sortField: 'bill_date', }, fields: { - 'vendor': { - name: 'Vendor name', + vendor: { + name: 'bill_payment.field.vendor', column: 'vendor_id', fieldType: 'relation', @@ -17,18 +16,18 @@ export default { relationEntityLabel: 'display_name', relationEntityKey: 'id', }, - 'amount': { - name: 'Amount', + amount: { + name: 'bill_payment.field.amount', column: 'amount', fieldType: 'number', }, - 'due_amount': { - name: 'Due amount', + due_amount: { + name: 'bill_payment.field.due_amount', column: 'due_amount', fieldType: 'number', }, - 'payment_account': { - name: 'Payment account', + payment_account: { + name: 'bill_payment.field.payment_account', column: 'payment_account_id', fieldType: 'relation', @@ -38,28 +37,28 @@ export default { relationLabelField: 'name', relationKeyField: 'slug', }, - 'payment_number': { - name: 'Payment number', + payment_number: { + name: 'bill_payment.field.payment_number', column: 'payment_number', fieldType: 'number', }, - 'payment_date': { - name: 'Payment date', + payment_date: { + name: 'bill_payment.field.payment_date', column: 'payment_date', fieldType: 'date', }, - 'reference_no': { - name: 'Reference No.', + reference_no: { + name: 'bill_payment.field.reference_no', column: 'reference', fieldType: 'text', }, - 'description': { - name: 'Description', + description: { + name: 'bill_payment.field.description', column: 'description', fieldType: 'text', }, - 'created_at': { - name: 'Created at', + created_at: { + name: 'bill_payment.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/Customer.Settings.ts b/server/src/models/Customer.Settings.ts index c709e9b33..1d22941cf 100644 --- a/server/src/models/Customer.Settings.ts +++ b/server/src/models/Customer.Settings.ts @@ -1,79 +1,79 @@ export default { fields: { first_name: { - name: 'First name', + name: 'customer.field.first_name', column: 'first_name', fieldType: 'text', }, last_name: { - name: 'Last name', + name: 'customer.field.last_name', column: 'last_name', fieldType: 'text', }, display_name: { - name: 'Display name', + name: 'customer.field.display_name', column: 'display_name', fieldType: 'text', }, email: { - name: 'Email', + name: 'customer.field.email', column: 'email', fieldType: 'text', }, work_phone: { - name: 'Work phone', + name: 'customer.field.work_phone', column: 'work_phone', fieldType: 'text', }, personal_phone: { - name: 'Personal phone', + name: 'customer.field.personal_phone', column: 'personal_phone', fieldType: 'text', }, company_name: { - name: 'Company name', + name: 'customer.field.company_name', column: 'company_name', fieldType: 'text', }, website: { - name: 'Website', + name: 'customer.field.website', column: 'website', fieldType: 'text', }, created_at: { - name: 'Created at', + name: 'customer.field.created_at', column: 'created_at', fieldType: 'date', }, balance: { - name: 'Balance', + name: 'customer.field.balance', column: 'balance', fieldType: 'number', }, opening_balance: { - name: 'Opening balance', + name: 'customer.field.opening_balance', column: 'opening_balance', fieldType: 'number', }, opening_balance_at: { - name: 'Opening balance at', + name: 'customer.field.opening_balance_at', column: 'opening_balance_at', filterable: false, fieldType: 'date', }, currency_code: { - name: 'Curreny', + name: 'customer.field.currency', column: 'currency_code', fieldType: 'text', }, status: { - name: 'Status', + name: 'customer.field.status', fieldType: 'enumeration', options: [ - { key: 'active', label: 'Active' }, - { key: 'inactive', label: 'Inactive' }, - { key: 'overdue', label: 'Overdue' }, - { key: 'unpaid', label: 'Unpaid' }, + { key: 'active', label: 'customer.field.status.active' }, + { key: 'inactive', label: 'customer.field.status.inactive' }, + { key: 'overdue', label: 'customer.field.status.overdue' }, + { key: 'unpaid', label: 'customer.field.status.unpaid' }, ], filterCustomQuery: statusFieldFilterQuery, }, diff --git a/server/src/models/Expense.Settings.ts b/server/src/models/Expense.Settings.ts index 4f7a91575..0d8ea8712 100644 --- a/server/src/models/Expense.Settings.ts +++ b/server/src/models/Expense.Settings.ts @@ -9,12 +9,12 @@ export default { }, fields: { 'payment_date': { - name: 'Payment date', + name: 'expense.field.payment_date', column: 'payment_date', fieldType: 'date', }, 'payment_account': { - name: 'Payment account', + name: 'expense.field.payment_account', column: 'payment_account_id', fieldType: 'relation', @@ -25,37 +25,37 @@ export default { relationEntityKey: 'slug', }, 'amount': { - name: 'Amount', + name: 'expense.field.amount', column: 'total_amount', fieldType: 'number', }, 'reference_no': { - name: 'Reference No.', + name: 'expense.field.reference_no', column: 'reference_no', fieldType: 'text', }, 'description': { - name: 'Description', + name: 'expense.field.description', column: 'description', fieldType: 'text', }, 'published': { - name: 'Published', + name: 'expense.field.published', column: 'published_at', fieldType: 'date', }, 'status': { - name: 'Status', + name: 'expense.field.status', fieldType: 'enumeration', options: [ - { key: 'draft', label: 'Draft' }, - { key: 'published', label: 'Published' }, + { label: 'expense.field.status.draft', key: 'draft' }, + { label: 'expense.field.status.published', key: 'published' }, ], filterCustomQuery: StatusFieldFilterQuery, sortCustomQuery: StatusFieldSortQuery, }, 'created_at': { - name: 'Created at', + name: 'expense.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/InventoryAdjustment.Settings.ts b/server/src/models/InventoryAdjustment.Settings.ts index 0ca469b2f..9ef90cbc5 100644 --- a/server/src/models/InventoryAdjustment.Settings.ts +++ b/server/src/models/InventoryAdjustment.Settings.ts @@ -5,22 +5,22 @@ export default { sortField: 'date', }, fields: { - 'date': { - name: 'Date', + date: { + name: 'inventory_adjustment.field.date', column: 'date', fieldType: 'date', }, - 'type': { - name: 'Adjustment type', + type: { + name: 'inventory_adjustment.field.type', column: 'type', fieldType: 'enumeration', options: [ - { key: 'increment', name: 'Increment' }, - { key: 'decrement', name: 'Decrement' }, + { key: 'increment', name: 'inventory_adjustment.field.type.increment' }, + { key: 'decrement', name: 'inventory_adjustment.field.type.decrement' }, ], }, - 'adjustment_account': { - name: 'Adjustment account', + adjustment_account: { + name: 'inventory_adjustment.field.adjustment_account', column: 'adjustment_account_id', fieldType: 'relation', @@ -30,28 +30,28 @@ export default { relationEntityLabel: 'name', relationEntityKey: 'slug', }, - 'reason': { - name: 'Reason', + reason: { + name: 'inventory_adjustment.field.reason', column: 'reason', fieldType: 'text', }, - 'reference_no': { - name: 'Reference No.', + reference_no: { + name: 'inventory_adjustment.field.reference_no', column: 'reference_no', fieldType: 'text', }, - 'description': { - name: 'Description', + description: { + name: 'inventory_adjustment.field.description', column: 'description', fieldType: 'text', }, - 'published_at': { - name: 'Published at', + published_at: { + name: 'inventory_adjustment.field.published_at', column: 'published_at', fieldType: 'date', }, - 'created_at': { - name: 'Created at', + created_at: { + name: 'inventory_adjustment.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/Item.Settings.ts b/server/src/models/Item.Settings.ts index 403b889a9..b5509a0a4 100644 --- a/server/src/models/Item.Settings.ts +++ b/server/src/models/Item.Settings.ts @@ -6,47 +6,47 @@ export default { }, fields: { 'type': { - name: 'Item type', + name: 'item.field.type', column: 'type', fieldType: 'enumeration', options: [ - { key: 'inventory', label: 'Inventory', }, - { key: 'service', label: 'Service' }, - { key: 'non-inventory', label: 'Non Inventory', }, + { key: 'inventory', label: 'item.field.type.inventory', }, + { key: 'service', label: 'item.field.type.service' }, + { key: 'non-inventory', label: 'item.field.type.non-inventory', }, ], }, 'name': { - name: 'Name', + name: 'item.field.name', column: 'name', fieldType: 'text', }, 'code': { - name: 'Code', + name: 'item.field.code', column: 'code', fieldType: 'text', }, 'sellable': { - name: 'Sellable', + name: 'item.field.sellable', column: 'sellable', fieldType: 'boolean', }, 'purchasable': { - name: 'Purchasable', + name: 'item.field.purchasable', column: 'purchasable', fieldType: 'boolean', }, 'sell_price': { - name: 'Sell price', + name: 'item.field.cost_price', column: 'sell_price', fieldType: 'number', }, 'cost_price': { - name: 'Cost price', + name: 'item.field.cost_account', column: 'cost_price', fieldType: 'number', }, 'cost_account': { - name: 'Cost account', + name: 'item.field.sell_account', column: 'cost_account_id', fieldType: 'relation', @@ -57,7 +57,7 @@ export default { relationEntityKey: 'slug', }, 'sell_account': { - name: 'Sell account', + name: 'item.field.sell_description', column: 'sell_account_id', fieldType: 'relation', @@ -68,7 +68,7 @@ export default { relationEntityKey: 'slug', }, 'inventory_account': { - name: 'Inventory account', + name: 'item.field.inventory_account', column: 'inventory_account_id', relationType: 'enumeration', @@ -88,17 +88,17 @@ export default { fieldType: 'text', }, 'quantity_on_hand': { - name: 'Quantity on hand', + name: 'item.field.quantity_on_hand', column: 'quantity_on_hand', fieldType: 'number', }, 'note': { - name: 'Note', + name: 'item.field.note', column: 'note', fieldType: 'text', }, 'category': { - name: 'Category', + name: 'item.field.category', column: 'category_id', relationType: 'enumeration', @@ -108,13 +108,13 @@ export default { relationEntityKey: 'id', }, 'active': { - name: 'Active', + name: 'item.field.active', column: 'active', fieldType: 'boolean', filterable: false, }, 'created_at': { - name: 'Created at', + name: 'item.field.created_at', column: 'created_at', columnType: 'date', fieldType: 'date', diff --git a/server/src/models/ItemCategory.Settings.ts b/server/src/models/ItemCategory.Settings.ts index bad8956ef..1ce8d9190 100644 --- a/server/src/models/ItemCategory.Settings.ts +++ b/server/src/models/ItemCategory.Settings.ts @@ -6,23 +6,23 @@ export default { }, fields: { name: { - name: 'Name', + name: 'item_category.field.name', column: 'name', fieldType: 'text', }, description: { - name: 'Description', + name: 'item_category.field.description', column: 'description', fieldType: 'text', }, count: { - name: 'Count', + name: 'item_category.field.count', column: 'count', fieldType: 'number', virtualColumn: true, }, created_at: { - name: 'Created at', + name: 'item_category.field.created_at', column: 'created_at', columnType: 'date', }, diff --git a/server/src/models/ManualJournal.Settings.ts b/server/src/models/ManualJournal.Settings.ts index f506e1626..484128783 100644 --- a/server/src/models/ManualJournal.Settings.ts +++ b/server/src/models/ManualJournal.Settings.ts @@ -6,37 +6,37 @@ export default { }, fields: { 'date': { - name: 'Date', + name: 'manual_journal.field.date', column: 'date', fieldType: 'date', }, 'journal_number': { - name: 'Journal number', + name: 'manual_journal.field.journal_number', column: 'journal_number', fieldType: 'text', }, 'reference': { - name: 'Reference No.', + name: 'manual_journal.field.reference', column: 'reference', fieldType: 'text', }, 'journal_type': { - name: 'Journal type', + name: 'manual_journal.field.journal_type', column: 'journal_type', fieldType: 'text', }, 'amount': { - name: 'Amount', + name: 'manual_journal.field.amount', column: 'amount', fieldType: 'number', }, 'description': { - name: 'Description', + name: 'manual_journal.field.description', column: 'description', fieldType: 'text', }, 'status': { - name: 'Status', + name: 'manual_journal.field.status', column: 'status', fieldType: 'enumeration', options: [ @@ -46,7 +46,7 @@ export default { sortCustomQuery: StatusFieldSortQuery, }, 'created_at': { - name: 'Created at', + name: 'manual_journal.field.created_at', column: 'created_at', fieldType: 'date', }, diff --git a/server/src/models/PaymentReceive.Settings.ts b/server/src/models/PaymentReceive.Settings.ts index da83a90a2..9132398c9 100644 --- a/server/src/models/PaymentReceive.Settings.ts +++ b/server/src/models/PaymentReceive.Settings.ts @@ -2,7 +2,7 @@ export default { fields: { customer: { - name: 'Customer', + name: 'payment_receive.field.customer', column: 'customer_id', fieldType: 'relation', @@ -13,22 +13,22 @@ export default { relationEntityKey: 'id', }, payment_date: { - name: 'Payment date', + name: 'payment_receive.field.payment_date', column: 'payment_date', fieldType: 'date', }, amount: { - name: 'Amount', + name: 'payment_receive.field.amount', column: 'amount', fieldType: 'number', }, reference_no: { - name: 'Reference No.', + name: 'payment_receive.field.reference_no', column: 'reference_no', fieldType: 'text', }, deposit_account: { - name: 'Deposit account', + name: 'payment_receive.field.deposit_account', column: 'deposit_account_id', fieldType: 'relation', @@ -39,17 +39,17 @@ export default { relationEntityKey: 'slug', }, payment_receive_no: { - name: 'Payment receive No.', + name: 'payment_receive.field.payment_receive_no', column: 'payment_receive_no', fieldType: 'text', }, statement: { - name: 'Statement', + name: 'payment_receive.field.statement', column: 'statement', fieldType: 'text', }, created_at: { - name: 'Created at', + name: 'payment_receive.field.created_at', column: 'created_at', fieldDate: 'date', }, diff --git a/server/src/models/SaleEstimate.Settings.ts b/server/src/models/SaleEstimate.Settings.ts index 7efdca4bb..9d1ea90a4 100644 --- a/server/src/models/SaleEstimate.Settings.ts +++ b/server/src/models/SaleEstimate.Settings.ts @@ -6,17 +6,17 @@ export default { }, fields: { 'amount': { - name: 'Amount', + name: 'estimate.field.amount', column: 'amount', fieldType: 'number', }, 'estimate_number': { - name: 'Estimate number', + name: 'estimate.field.estimate_number', column: 'estimate_number', fieldType: 'text', }, 'customer': { - name: 'Customer', + name: 'estimate.field.customer', column: 'customer_id', fieldType: 'relation', @@ -27,45 +27,44 @@ export default { relationEntityKey: 'id', }, 'estimate_date': { - name: 'Estimate date', + name: 'estimate.field.estimate_date', column: 'estimate_date', fieldType: 'date', }, 'expiration_date': { - name: 'Expiration date', + name: 'estimate.field.expiration_date', column: 'expiration_date', fieldType: 'date', }, 'reference_no': { - name: 'Reference No.', + name: 'estimate.field.reference_no', column: 'reference', fieldType: 'text', }, 'note': { - name: 'Note', + name: 'estimate.field.note', column: 'note', fieldType: 'text', }, 'terms_conditions': { - name: 'Terms & conditions', + name: 'estimate.field.terms_conditions', column: 'terms_conditions', fieldType: 'text', }, 'status': { - name: 'Status', + name: 'estimate.field.status', fieldType: 'enumeration', options: [ - { label: 'Delivered', key: 'delivered' }, - { label: 'Rejected', key: 'rejected' }, - { label: 'Approved', key: 'approved' }, - { label: 'Delivered', key: 'delivered' }, - { label: 'Draft', key: 'draft' }, + { label: 'estimate.field.status.delivered', key: 'delivered' }, + { label: 'estimate.field.status.rejected', key: 'rejected' }, + { label: 'estimate.field.status.approved', key: 'approved' }, + { label: 'estimate.field.status.draft', key: 'draft' }, ], filterCustomQuery: StatusFieldFilterQuery, sortCustomQuery: StatusFieldSortQuery, }, 'created_at': { - name: 'Created at', + name: 'estimate.field.created_at', column: 'created_at', columnType: 'date', }, diff --git a/server/src/models/SaleInvoice.Settings.ts b/server/src/models/SaleInvoice.Settings.ts index 3e3334bd6..842c5618b 100644 --- a/server/src/models/SaleInvoice.Settings.ts +++ b/server/src/models/SaleInvoice.Settings.ts @@ -6,7 +6,7 @@ export default { }, fields: { customer: { - name: 'Customer', + name: 'invoice.field.customer', column: 'customer_id', fieldType: 'relation', @@ -17,70 +17,71 @@ export default { relationEntityKey: 'id', }, invoice_date: { - name: 'Invoice date', + name: 'invoice.field.invoice_date', column: 'invoice_date', fieldType: 'date', }, due_date: { - name: 'Due date', + name: 'invoice.field.due_date', column: 'due_date', fieldType: 'date', }, invoice_no: { - name: 'Invoice No.', + name: 'invoice.field.invoice_no', column: 'invoice_no', fieldType: 'text', }, reference_no: { - name: 'Reference No.', + name: 'invoice.field.reference_no', column: 'reference_no', fieldType: 'text', }, invoice_message: { - name: 'Invoice message', + name: 'invoice.field.invoice_message', column: 'invoice_message', fieldType: 'text', }, terms_conditions: { - name: 'Terms & conditions', + name: 'invoice.field.terms_conditions', column: 'terms_conditions', fieldType: 'text', }, amount: { - name: 'Invoice amount', + name: 'invoice.field.amount', column: 'balance', fieldType: 'number', }, payment_amount: { - name: 'Payment amount', + name: 'invoice.field.payment_amount', column: 'payment_amount', fieldType: 'number', }, - due_amount: { // calculated. - name: 'Due amount', + due_amount: { + // calculated. + name: 'invoice.field.due_amount', column: 'due_amount', fieldType: 'number', virtualColumn: true, }, status: { - name: 'Status', + name: 'invoice.field.status', fieldType: 'enumeration', options: [ - { key: 'draft', label: 'Draft' }, - { key: 'delivered', label: 'Delivered' }, - { key: 'unpaid', label: 'Unpaid' }, - { key: 'overdue', label: 'Overdue' }, - { key: 'partially-paid', label: 'Partially paid' }, - { key: 'paid', label: 'Paid' }, + { key: 'draft', label: 'invoice.field.status.draft' }, + { key: 'delivered', label: 'invoice.field.status.delivered' }, + { key: 'unpaid', label: 'invoice.field.status.unpaid' }, + { key: 'overdue', label: 'invoice.field.status.overdue' }, + { key: 'partially-paid', label: 'invoice.field.status.partially-paid' }, + { key: 'paid', label: 'invoice.field.status.paid' }, ], filterCustomQuery: StatusFieldFilterQuery, sortCustomQuery: StatusFieldSortQuery, }, created_at: { - name: 'Created at', + name: 'invoice.field.created_at', column: 'created_at', fieldType: 'date', - }, + }, }, }; diff --git a/server/src/models/SaleReceipt.Settings.ts b/server/src/models/SaleReceipt.Settings.ts index 098e86554..a844661ed 100644 --- a/server/src/models/SaleReceipt.Settings.ts +++ b/server/src/models/SaleReceipt.Settings.ts @@ -6,13 +6,13 @@ export default { }, fields: { 'amount': { - name: 'Amount', + name: 'receipt.field.amount', column: 'amount', fieldType: 'number', }, 'deposit_account': { column: 'deposit_account_id', - name: 'Deposit account', + name: 'receipt.field.deposit_account', fieldType: 'relation', relationType: 'enumeration', @@ -22,8 +22,8 @@ export default { relationEntityKey: 'slug', }, 'customer': { - label: 'Customer', - name: 'customer_id', + name: 'receipt.field.customer', + column: 'customer_id', fieldType: 'relation', relationType: 'enumeration', @@ -33,42 +33,42 @@ export default { relationEntityKey: 'id', }, 'receipt_date': { - name: 'Receipt date', + name: 'receipt.field.receipt_date', column: 'receipt_date', fieldType: 'date', }, 'receipt_number': { - name: 'Receipt No.', + name: 'receipt.field.receipt_number', column: 'receipt_number', fieldType: 'text', }, 'reference_no': { - name: 'Reference No.', + name: 'receipt.field.reference_no', column: 'reference_no', fieldType: 'text', }, 'receipt_message': { - name: 'Receipt message', + name: 'receipt.field.receipt_message', column: 'receipt_message', fieldType: 'text', }, 'statement': { - name: 'Statement', + name: 'receipt.field.statement', column: 'statement', fieldType: 'text', }, 'created_at': { - name: 'Created at', + name: 'receipt.field.created_at', column: 'created_at', fieldType: 'date', }, 'status': { - name: 'Status', + name: 'receipt.field.status', fieldType: 'enumeration', options: [ - { key: 'draft', label: 'Draft' }, - { key: 'closed', label: 'Closed' }, + { key: 'draft', label: 'receipt.field.status.draft' }, + { key: 'closed', label: 'receipt.field.status.closed' }, ], filterCustomQuery: StatusFieldFilterQuery, sortCustomQuery: StatusFieldSortQuery, diff --git a/server/src/models/Vendor.Settings.ts b/server/src/models/Vendor.Settings.ts index 5bd8b48d6..ba964edab 100644 --- a/server/src/models/Vendor.Settings.ts +++ b/server/src/models/Vendor.Settings.ts @@ -6,76 +6,76 @@ export default { }, fields: { first_name: { - name: 'First name', + name: 'vendor.field.first_name', column: 'first_name', fieldType: 'text', }, last_name: { - name: 'Last name', + name: 'vendor.field.last_name', column: 'last_name', fieldType: 'text', }, - 'display_name': { - name: 'Display name', + display_name: { + name: 'vendor.field.display_name', column: 'display_name', fieldType: 'text', }, - 'email': { - name: 'Email', + email: { + name: 'vendor.field.email', column: 'email', fieldType: 'text', }, - 'work_phone': { - name: 'Work phone', + work_phone: { + name: 'vendor.field.work_phone', column: 'work_phone', fieldType: 'text', }, - 'personal_phone': { - name: 'Personal phone', + personal_phone: { + name: 'vendor.field.personal_pone', column: 'personal_phone', fieldType: 'text', }, - 'company_name': { - name: 'Company name', + company_name: { + name: 'vendor.field.company_name', column: 'company_name', fieldType: 'text', }, - 'website': { - name: 'Website', + website: { + name: 'vendor.field.website', column: 'website', fieldType: 'text', }, - 'created_at': { - name: 'Created at', + created_at: { + name: 'vendor.field.created_at', column: 'created_at', fieldType: 'date', }, - 'balance': { - name: 'Balance', + balance: { + name: 'vendor.field.balance', column: 'balance', fieldType: 'number', }, - 'opening_balance': { - name: 'Opening balance', + opening_balance: { + name: 'vendor.field.opening_balance', column: 'opening_balance', fieldType: 'number', }, - 'opening_balance_at': { - name: 'Opening balance at', + opening_balance_at: { + name: 'vendor.field.opening_balance_at', column: 'opening_balance_at', fieldType: 'date', }, - 'currency_code': { - name: 'Currency code', + currency_code: { + name: 'vendor.field.currency', column: 'currency_code', fieldType: 'text', }, - 'status': { - name: 'Status', + status: { + name: 'vendor.field.status', type: 'enumeration', options: [ - { key: 'overdue', label: 'Overdue' }, - { key: 'unpaid', label: 'Unpaid' }, + { key: 'overdue', label: 'vendor.field.status.overdue' }, + { key: 'unpaid', label: 'vendor.field.status.unpaid' }, ], filterCustomQuery: (query, role) => { switch (role.value) { diff --git a/server/src/services/I18n/I18nService.ts b/server/src/services/I18n/I18nService.ts index 3f81343eb..03301c2b5 100644 --- a/server/src/services/I18n/I18nService.ts +++ b/server/src/services/I18n/I18nService.ts @@ -1,3 +1,5 @@ +import * as R from 'ramda'; +import * as qim from 'qim'; import HasTenancyService from 'services/Tenancy/TenancyService'; import { Service, Inject } from 'typedi'; @@ -44,4 +46,19 @@ export default class I18nService { }; }); } + + public i18nApply( + paths: (string|Function)[][], + data: Array, + tenantId: number, + ) { + const i18n = this.tenancy.i18n(tenantId); + const applyCurry = R.curryN(3, qim.apply); + + const transform = (value) => i18n.__(value) || value; + + const curriedCallbacks = paths.map((path) => applyCurry(path, transform)); + + return R.compose(...curriedCallbacks)(data); + } } diff --git a/server/src/services/Resource/ResourceService.ts b/server/src/services/Resource/ResourceService.ts index ba4a71b0d..b475de274 100644 --- a/server/src/services/Resource/ResourceService.ts +++ b/server/src/services/Resource/ResourceService.ts @@ -1,10 +1,12 @@ import { Service, Inject } from 'typedi'; import { camelCase, upperFirst } from 'lodash'; +import * as qim from 'qim'; import pluralize from 'pluralize'; -import { buildFilter } from 'objection-filter'; -import { IModel, IModelMeta } from 'interfaces'; +import { IModelMeta } from 'interfaces'; import TenancyService from 'services/Tenancy/TenancyService'; import { ServiceError } from 'exceptions'; +import I18nService from 'services/I18n/I18nService'; +import { tenantKnexConfig } from 'config/knexConfig'; const ERRORS = { RESOURCE_MODEL_NOT_FOUND: 'RESOURCE_MODEL_NOT_FOUND', @@ -15,6 +17,9 @@ export default class ResourceService { @Inject() tenancy: TenancyService; + @Inject() + i18nService: I18nService; + /** * Transform resource to model name. * @param {string} resourceName @@ -50,6 +55,25 @@ export default class ResourceService { metakey?: string ): IModelMeta { const resourceModel = this.getResourceModel(tenantId, modelName); - return resourceModel.getMeta(metakey); + + // Retrieve the resource meta. + const resourceMeta = resourceModel.getMeta(metakey); + + // Localization the fields names. + return this.getResourceMetaLocalized(resourceMeta, tenantId); + } + + /** + * Retrieve the resource meta localized based on the current user language. + */ + public getResourceMetaLocalized(meta, tenantId) { + const $enumerationType = (field) => + field.fieldType === 'enumeration' ? field : undefined; + + const naviagations = [ + ['fields', qim.$each, 'name'], + ['fields', qim.$each, $enumerationType, 'options', qim.$each, 'label'], + ]; + return this.i18nService.i18nApply(naviagations, meta, tenantId); } }