Refine budget loan entry flow
This commit is contained in:
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "القروض / الفوائد",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "إضافة إدخال",
|
"emptyAction": "إضافة إدخال",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "القروض",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} نشط · المتبقي {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "قرض جديد",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "إنشاء قرض",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "تعديل القرض",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "حذف القرض",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "هل تريد حذف القرض \"{{title}}\"؟ ستتم إزالة الدفعات المسجلة في الميزانية أيضًا.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "المتبقي",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "الأقساط المتبقية",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "المدفوع",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "لا توجد قروض نشطة.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "تم دفع {{paid}} من {{total}} أقساط",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "من {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "التالي: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "مدفوع",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "تسجيل الدفع",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "الشخص *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "مثال: Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "عنوان القرض",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "مثال: قرض شخصي",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "المبلغ الإجمالي *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "الأقساط *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "أول شهر استحقاق *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "ملاحظات",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "الشخص مطلوب",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "أدخل عدد الأقساط",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "أدخل أول شهر استحقاق",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "تمت إضافة القرض",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "تم حفظ القرض",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "تم حذف القرض",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "تم تسجيل الدفع",
|
||||||
|
"typeLoan": "قرض"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "الإعدادات",
|
"title": "الإعدادات",
|
||||||
|
|||||||
@@ -606,7 +606,7 @@
|
|||||||
"loanRemainingOf": "von {{total}}",
|
"loanRemainingOf": "von {{total}}",
|
||||||
"loanNextDue": "Nächste: {{month}}",
|
"loanNextDue": "Nächste: {{month}}",
|
||||||
"loanPaidStatus": "Bezahlt",
|
"loanPaidStatus": "Bezahlt",
|
||||||
"markLoanPaid": "Bezahlt",
|
"markLoanPaid": "Als bezahlt markieren",
|
||||||
"loanBorrowerLabel": "Person *",
|
"loanBorrowerLabel": "Person *",
|
||||||
"loanBorrowerPlaceholder": "z. B. Lais",
|
"loanBorrowerPlaceholder": "z. B. Lais",
|
||||||
"loanTitleLabel": "Darlehenstitel",
|
"loanTitleLabel": "Darlehenstitel",
|
||||||
@@ -621,7 +621,8 @@
|
|||||||
"loanAddedToast": "Darlehen hinzugefügt",
|
"loanAddedToast": "Darlehen hinzugefügt",
|
||||||
"loanSavedToast": "Darlehen gespeichert",
|
"loanSavedToast": "Darlehen gespeichert",
|
||||||
"loanDeletedToast": "Darlehen gelöscht",
|
"loanDeletedToast": "Darlehen gelöscht",
|
||||||
"loanPaymentAddedToast": "Zahlung erfasst"
|
"loanPaymentAddedToast": "Zahlung erfasst",
|
||||||
|
"typeLoan": "Darlehen"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Einstellungen",
|
"title": "Einstellungen",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "Δάνεια / Τόκοι",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "Προσθήκη εγγραφής",
|
"emptyAction": "Προσθήκη εγγραφής",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Δάνεια",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} ενεργά · απομένουν {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Νέο δάνειο",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Δημιουργία δανείου",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Επεξεργασία δανείου",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Διαγραφή δανείου",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Να διαγραφεί το δάνειο «{{title}}»; Οι πληρωμές που έχουν ήδη περαστεί στον προϋπολογισμό θα αφαιρεθούν επίσης.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Υπόλοιπο",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Δόσεις που απομένουν",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Πληρωμένο",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Δεν υπάρχουν ενεργά δάνεια.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} από {{total}} δόσεις πληρωμένες",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "από {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Επόμενη: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Πληρωμένο",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Σήμανση πληρωμής",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Άτομο *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "π.χ. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Τίτλος δανείου",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "π.χ. Προσωπικό δάνειο",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Συνολικό ποσό *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Δόσεις *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Πρώτος μήνας λήξης *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Σημειώσεις",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "Το άτομο είναι υποχρεωτικό",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Εισαγάγετε τον αριθμό δόσεων",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Εισαγάγετε τον πρώτο μήνα λήξης",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Το δάνειο προστέθηκε",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Το δάνειο αποθηκεύτηκε",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Το δάνειο διαγράφηκε",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Η πληρωμή καταγράφηκε",
|
||||||
|
"typeLoan": "Δάνειο"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Ρυθμίσεις",
|
"title": "Ρυθμίσεις",
|
||||||
|
|||||||
@@ -596,7 +596,8 @@
|
|||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Loan added",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Loan saved",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Loan deleted",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Payment recorded",
|
||||||
|
"typeLoan": "Loan"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Settings",
|
"title": "Settings",
|
||||||
|
|||||||
+32
-31
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Categoría añadida.",
|
"categoryAddedToast": "Categoría añadida.",
|
||||||
"subcategoryAddedToast": "Subcategoría añadida.",
|
"subcategoryAddedToast": "Subcategoría añadida.",
|
||||||
"emptyAction": "Agregar entrada",
|
"emptyAction": "Agregar entrada",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Préstamos",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} activos · {{amount}} restantes",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Nuevo préstamo",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Crear préstamo",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Editar préstamo",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Eliminar préstamo",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "¿Eliminar el préstamo \"{{title}}\"? También se eliminarán los pagos ya registrados en el presupuesto.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Restante",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Cuotas restantes",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Pagado",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "No hay préstamos activos.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} de {{total}} cuotas pagadas",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "de {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Siguiente: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Pagado",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Marcar pagado",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Persona *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Ej. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Título del préstamo",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Ej. Préstamo personal",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Importe total *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Cuotas *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Primer mes de vencimiento *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Notas",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "La persona es obligatoria",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Introduce el número de cuotas",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Introduce el primer mes de vencimiento",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Préstamo añadido",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Préstamo guardado",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Préstamo eliminado",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Pago registrado",
|
||||||
|
"typeLoan": "Préstamo"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Ajustes",
|
"title": "Ajustes",
|
||||||
|
|||||||
+31
-30
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Catégorie ajoutée.",
|
"categoryAddedToast": "Catégorie ajoutée.",
|
||||||
"subcategoryAddedToast": "Sous-catégorie ajoutée.",
|
"subcategoryAddedToast": "Sous-catégorie ajoutée.",
|
||||||
"emptyAction": "Ajouter une entrée",
|
"emptyAction": "Ajouter une entrée",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Prêts",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} actifs · {{amount}} restants",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Nouveau prêt",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Créer le prêt",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Modifier le prêt",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Supprimer le prêt",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Supprimer le prêt \"{{title}}\" ? Les paiements déjà enregistrés dans le budget seront aussi supprimés.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Restant",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Échéances restantes",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Payé",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Aucun prêt actif.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} sur {{total}} échéances payées",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "sur {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Prochaine : {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Payé",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Marquer payé",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Personne *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Ex. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Titre du prêt",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Ex. Prêt personnel",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Montant total *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Échéances *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Premier mois d’échéance *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Notes",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "La personne est obligatoire",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Indiquez le nombre d’échéances",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Indiquez le premier mois d’échéance",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Prêt ajouté",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Prêt enregistré",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Prêt supprimé",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Paiement enregistré",
|
||||||
|
"typeLoan": "Prêt"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Paramètres",
|
"title": "Paramètres",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "उधार / ब्याज",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "प्रविष्टि जोड़ें",
|
"emptyAction": "प्रविष्टि जोड़ें",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "उधार",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} सक्रिय · {{amount}} बाकी",
|
||||||
"newLoan": "New loan",
|
"newLoan": "नया उधार",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "उधार बनाएं",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "उधार संपादित करें",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "उधार हटाएं",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "उधार \"{{title}}\" हटाएं? बजट में दर्ज भुगतान भी हटा दिए जाएंगे।",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "बाकी",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "बाकी किस्तें",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "भुगतान किया",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "कोई सक्रिय उधार नहीं।",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{total}} में से {{paid}} किस्तें चुकाई गईं",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "{{total}} में से",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "अगली: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "चुकाया गया",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "भुगतान दर्ज करें",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "व्यक्ति *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "जैसे Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "उधार का शीर्षक",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "जैसे व्यक्तिगत उधार",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "कुल राशि *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "किस्तें *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "पहला देय महीना *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "नोट्स",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "व्यक्ति आवश्यक है",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "किस्तों की संख्या दर्ज करें",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "पहला देय महीना दर्ज करें",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "उधार जोड़ा गया",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "उधार सहेजा गया",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "उधार हटाया गया",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "भुगतान दर्ज किया गया",
|
||||||
|
"typeLoan": "उधार"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "सेटिंग्स",
|
"title": "सेटिंग्स",
|
||||||
|
|||||||
+32
-31
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Categoria aggiunta.",
|
"categoryAddedToast": "Categoria aggiunta.",
|
||||||
"subcategoryAddedToast": "Sottocategoria aggiunta.",
|
"subcategoryAddedToast": "Sottocategoria aggiunta.",
|
||||||
"emptyAction": "Aggiungi voce",
|
"emptyAction": "Aggiungi voce",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Prestiti",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} attivi · {{amount}} rimanenti",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Nuovo prestito",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Crea prestito",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Modifica prestito",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Elimina prestito",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Eliminare il prestito \"{{title}}\"? Verranno rimossi anche i pagamenti già registrati nel bilancio.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Rimanente",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Rate rimanenti",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Pagato",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Nessun prestito attivo.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} di {{total}} rate pagate",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "di {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Prossima: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Pagato",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Segna pagato",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Persona *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Es. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Titolo del prestito",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Es. Prestito personale",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Importo totale *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Rate *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Primo mese di scadenza *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Note",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "La persona è obbligatoria",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Inserisci il numero di rate",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Inserisci il primo mese di scadenza",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Prestito aggiunto",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Prestito salvato",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Prestito eliminato",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Pagamento registrato",
|
||||||
|
"typeLoan": "Prestito"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Impostazioni",
|
"title": "Impostazioni",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "貸付 / 利息",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "エントリを追加",
|
"emptyAction": "エントリを追加",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "貸付",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} 件が進行中 · 残り {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "新しい貸付",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "貸付を作成",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "貸付を編集",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "貸付を削除",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "貸付「{{title}}」を削除しますか?予算に記録済みの返済も削除されます。",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "残額",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "残り回数",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "返済済み",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "進行中の貸付はありません。",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{total}} 回中 {{paid}} 回返済済み",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "{{total}} のうち",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "次回:{{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "完済",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "返済済みにする",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "相手 *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "例:Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "貸付タイトル",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "例:個人貸付",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "合計金額 *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "分割回数 *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "初回支払月 *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "メモ",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "相手を入力してください",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "分割回数を入力してください",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "初回支払月を入力してください",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "貸付を追加しました",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "貸付を保存しました",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "貸付を削除しました",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "返済を記録しました",
|
||||||
|
"typeLoan": "貸付"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "設定",
|
"title": "設定",
|
||||||
|
|||||||
@@ -596,7 +596,8 @@
|
|||||||
"loanAddedToast": "Empréstimo adicionado",
|
"loanAddedToast": "Empréstimo adicionado",
|
||||||
"loanSavedToast": "Empréstimo salvo",
|
"loanSavedToast": "Empréstimo salvo",
|
||||||
"loanDeletedToast": "Empréstimo excluído",
|
"loanDeletedToast": "Empréstimo excluído",
|
||||||
"loanPaymentAddedToast": "Pagamento registrado"
|
"loanPaymentAddedToast": "Pagamento registrado",
|
||||||
|
"typeLoan": "Empréstimo"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Configurações",
|
"title": "Configurações",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "Займы / Проценты",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "Добавить запись",
|
"emptyAction": "Добавить запись",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Займы",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} активных · осталось {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Новый займ",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Создать займ",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Изменить займ",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Удалить займ",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Удалить займ «{{title}}»? Платежи, уже добавленные в бюджет, тоже будут удалены.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Осталось",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Осталось платежей",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Оплачено",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Нет активных займов.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "Оплачено {{paid}} из {{total}} платежей",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "из {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Следующий: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Оплачено",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Отметить оплату",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Человек *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Напр. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Название займа",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Напр. Личный займ",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Общая сумма *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Платежи *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Первый месяц оплаты *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Заметки",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "Укажите человека",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Укажите количество платежей",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Укажите первый месяц оплаты",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Займ добавлен",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Займ сохранён",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Займ удалён",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Платёж записан",
|
||||||
|
"typeLoan": "Займ"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Настройки",
|
"title": "Настройки",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "Lån / Ränta",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "Lägg till post",
|
"emptyAction": "Lägg till post",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Lån",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} aktiva · {{amount}} kvar",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Nytt lån",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Skapa lån",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Redigera lån",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Ta bort lån",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Ta bort lånet \"{{title}}\"? Betalningar som redan bokförts i budgeten tas också bort.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Kvar",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Delbetalningar kvar",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Betalt",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Inga aktiva lån.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} av {{total}} delbetalningar betalda",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "av {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Nästa: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Betalt",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Markera betalt",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Person *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "t.ex. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Lånetitel",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "t.ex. Privat lån",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Totalbelopp *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Delbetalningar *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Första förfallomånaden *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Anteckningar",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "Person krävs",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Ange antal delbetalningar",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Ange första förfallomånaden",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Lån tillagt",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Lån sparat",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Lån borttaget",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Betalning registrerad",
|
||||||
|
"typeLoan": "Lån"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Inställningar",
|
"title": "Inställningar",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "Borçlar / Faiz",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "Giriş ekle",
|
"emptyAction": "Giriş ekle",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Borçlar",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} aktif · {{amount}} kaldı",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Yeni borç",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Borç oluştur",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Borcu düzenle",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Borcu sil",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "\"{{title}}\" borcu silinsin mi? Bütçeye işlenmiş ödemeler de kaldırılır.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Kalan",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Kalan taksit",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Ödenen",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Aktif borç yok.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "{{paid}} / {{total}} taksit ödendi",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "{{total}} içinden",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Sonraki: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Ödendi",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Ödendi işaretle",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Kişi *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Örn. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Borç başlığı",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Örn. Kişisel borç",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Toplam tutar *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Taksitler *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "İlk vade ayı *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Notlar",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "Kişi gerekli",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Taksit sayısını girin",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "İlk vade ayını girin",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Borç eklendi",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Borç kaydedildi",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Borç silindi",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Ödeme kaydedildi",
|
||||||
|
"typeLoan": "Borç"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Ayarlar",
|
"title": "Ayarlar",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "Позики / Відсотки",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "Додати запис",
|
"emptyAction": "Додати запис",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "Позики",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} активних · залишилось {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "Нова позика",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "Створити позику",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "Редагувати позику",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "Видалити позику",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "Видалити позику «{{title}}»? Платежі, вже додані до бюджету, також буде видалено.",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "Залишилось",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "Залишилось платежів",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "Сплачено",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "Немає активних позик.",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "Сплачено {{paid}} з {{total}} платежів",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "з {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "Наступний: {{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "Сплачено",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "Позначити сплату",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "Людина *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "Напр. Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "Назва позики",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "Напр. Особиста позика",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "Загальна сума *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "Платежі *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "Перший місяць сплати *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "Нотатки",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "Вкажіть людину",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "Вкажіть кількість платежів",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "Вкажіть перший місяць сплати",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "Позику додано",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "Позику збережено",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "Позику видалено",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "Платіж записано",
|
||||||
|
"typeLoan": "Позика"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Налаштування",
|
"title": "Налаштування",
|
||||||
|
|||||||
+33
-32
@@ -553,7 +553,7 @@
|
|||||||
"subcatCoursesCollege": "Courses / College",
|
"subcatCoursesCollege": "Courses / College",
|
||||||
"subcatSchoolSupplies": "School supplies",
|
"subcatSchoolSupplies": "School supplies",
|
||||||
"subcatLanguages": "Languages",
|
"subcatLanguages": "Languages",
|
||||||
"subcatLoansInterest": "Loans / Interest",
|
"subcatLoansInterest": "借款 / 利息",
|
||||||
"subcatBankFees": "Bank fees",
|
"subcatBankFees": "Bank fees",
|
||||||
"subcatInsuranceOther": "Insurance",
|
"subcatInsuranceOther": "Insurance",
|
||||||
"subcatInvestments": "Investments",
|
"subcatInvestments": "Investments",
|
||||||
@@ -566,37 +566,38 @@
|
|||||||
"categoryAddedToast": "Category added.",
|
"categoryAddedToast": "Category added.",
|
||||||
"subcategoryAddedToast": "Subcategory added.",
|
"subcategoryAddedToast": "Subcategory added.",
|
||||||
"emptyAction": "添加记录",
|
"emptyAction": "添加记录",
|
||||||
"loansTitle": "Loans",
|
"loansTitle": "借款",
|
||||||
"loansSummary": "{{count}} active · {{amount}} remaining",
|
"loansSummary": "{{count}} 笔进行中 · 剩余 {{amount}}",
|
||||||
"newLoan": "New loan",
|
"newLoan": "新建借款",
|
||||||
"createLoan": "Create loan",
|
"createLoan": "创建借款",
|
||||||
"editLoan": "Edit loan",
|
"editLoan": "编辑借款",
|
||||||
"deleteLoan": "Delete loan",
|
"deleteLoan": "删除借款",
|
||||||
"deleteLoanConfirm": "Delete loan \"{{title}}\"? Payments already posted to the budget will also be removed.",
|
"deleteLoanConfirm": "删除借款“{{title}}”?已记入预算的还款也会被删除。",
|
||||||
"loanRemainingAmount": "Remaining",
|
"loanRemainingAmount": "剩余金额",
|
||||||
"loanRemainingInstallments": "Installments left",
|
"loanRemainingInstallments": "剩余期数",
|
||||||
"loanPaidAmount": "Paid",
|
"loanPaidAmount": "已还金额",
|
||||||
"loansEmpty": "No active loans.",
|
"loansEmpty": "没有进行中的借款。",
|
||||||
"loanInstallmentMeta": "{{paid}} of {{total}} installments paid",
|
"loanInstallmentMeta": "已还 {{paid}} / {{total}} 期",
|
||||||
"loanRemainingOf": "of {{total}}",
|
"loanRemainingOf": "共 {{total}}",
|
||||||
"loanNextDue": "Next: {{month}}",
|
"loanNextDue": "下一期:{{month}}",
|
||||||
"loanPaidStatus": "Paid",
|
"loanPaidStatus": "已还清",
|
||||||
"markLoanPaid": "Mark paid",
|
"markLoanPaid": "标记已还",
|
||||||
"loanBorrowerLabel": "Borrower *",
|
"loanBorrowerLabel": "借款人 *",
|
||||||
"loanBorrowerPlaceholder": "e.g. Lais",
|
"loanBorrowerPlaceholder": "例如:Lais",
|
||||||
"loanTitleLabel": "Loan title",
|
"loanTitleLabel": "借款标题",
|
||||||
"loanTitlePlaceholder": "e.g. Personal loan",
|
"loanTitlePlaceholder": "例如:个人借款",
|
||||||
"loanAmountLabel": "Total amount *",
|
"loanAmountLabel": "总金额 *",
|
||||||
"loanInstallmentsLabel": "Installments *",
|
"loanInstallmentsLabel": "期数 *",
|
||||||
"loanStartMonthLabel": "First due month *",
|
"loanStartMonthLabel": "首期月份 *",
|
||||||
"loanNotesLabel": "Notes",
|
"loanNotesLabel": "备注",
|
||||||
"loanBorrowerRequired": "Borrower is required",
|
"loanBorrowerRequired": "请填写借款人",
|
||||||
"loanInstallmentsRequired": "Enter the number of installments",
|
"loanInstallmentsRequired": "请输入期数",
|
||||||
"loanStartMonthRequired": "Enter the first due month",
|
"loanStartMonthRequired": "请输入首期月份",
|
||||||
"loanAddedToast": "Loan added",
|
"loanAddedToast": "借款已添加",
|
||||||
"loanSavedToast": "Loan saved",
|
"loanSavedToast": "借款已保存",
|
||||||
"loanDeletedToast": "Loan deleted",
|
"loanDeletedToast": "借款已删除",
|
||||||
"loanPaymentAddedToast": "Payment recorded"
|
"loanPaymentAddedToast": "还款已记录",
|
||||||
|
"typeLoan": "借款"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "设置",
|
"title": "设置",
|
||||||
|
|||||||
+102
-50
@@ -346,7 +346,6 @@ function renderBody() {
|
|||||||
_container.querySelector('#empty-cta-budget')?.addEventListener('click', () => {
|
_container.querySelector('#empty-cta-budget')?.addEventListener('click', () => {
|
||||||
document.querySelector('.page-fab')?.click();
|
document.querySelector('.page-fab')?.click();
|
||||||
});
|
});
|
||||||
_container.querySelector('#budget-add-loan')?.addEventListener('click', () => openLoanModal());
|
|
||||||
_container.querySelectorAll('[data-action="loan-pay"]').forEach((btn) => {
|
_container.querySelectorAll('[data-action="loan-pay"]').forEach((btn) => {
|
||||||
btn.addEventListener('click', async () => {
|
btn.addEventListener('click', async () => {
|
||||||
await markLoanPayment(parseInt(btn.dataset.id, 10));
|
await markLoanPayment(parseInt(btn.dataset.id, 10));
|
||||||
@@ -445,6 +444,8 @@ function renderEntries() {
|
|||||||
|
|
||||||
function renderLoansDashboard() {
|
function renderLoansDashboard() {
|
||||||
const loans = state.loans?.loans ?? [];
|
const loans = state.loans?.loans ?? [];
|
||||||
|
if (!loans.length) return '';
|
||||||
|
|
||||||
const summary = state.loans?.summary ?? {};
|
const summary = state.loans?.summary ?? {};
|
||||||
const activeLoans = loans.filter((loan) => loan.status === 'active');
|
const activeLoans = loans.filter((loan) => loan.status === 'active');
|
||||||
|
|
||||||
@@ -458,10 +459,6 @@ function renderLoansDashboard() {
|
|||||||
amount: formatAmount(summary.remaining_amount ?? 0),
|
amount: formatAmount(summary.remaining_amount ?? 0),
|
||||||
})}</div>
|
})}</div>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn--secondary budget-loans__add" id="budget-add-loan">
|
|
||||||
<i data-lucide="hand-coins" aria-hidden="true" class="icon-base"></i>
|
|
||||||
${t('budget.newLoan')}
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="budget-loans__stats">
|
<div class="budget-loans__stats">
|
||||||
<div>
|
<div>
|
||||||
@@ -560,6 +557,7 @@ function formatEntryDate(dateStr) {
|
|||||||
function openBudgetModal({ mode, entry = null }) {
|
function openBudgetModal({ mode, entry = null }) {
|
||||||
const isEdit = mode === 'edit';
|
const isEdit = mode === 'edit';
|
||||||
const today = new Date().toISOString().slice(0, 10);
|
const today = new Date().toISOString().slice(0, 10);
|
||||||
|
const todayMonth = today.slice(0, 7);
|
||||||
|
|
||||||
const isExpense = isEdit ? entry.amount < 0 : true;
|
const isExpense = isEdit ? entry.amount < 0 : true;
|
||||||
const absAmount = isEdit ? Math.abs(entry.amount).toFixed(2) : '';
|
const absAmount = isEdit ? Math.abs(entry.amount).toFixed(2) : '';
|
||||||
@@ -575,27 +573,29 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
).join('');
|
).join('');
|
||||||
|
|
||||||
const content = `
|
const content = `
|
||||||
<div class="amount-type-toggle">
|
<div class="amount-type-toggle ${isEdit ? 'amount-type-toggle--entry-only' : ''}">
|
||||||
<button class="amount-type-btn amount-type-btn--expenses ${isExpense ? 'amount-type-btn--active' : ''}"
|
<button class="amount-type-btn amount-type-btn--expenses ${isExpense ? 'amount-type-btn--active' : ''}"
|
||||||
id="type-expense" type="button">${t('budget.typeExpense')}</button>
|
id="type-expense" type="button">${t('budget.typeExpense')}</button>
|
||||||
<button class="amount-type-btn amount-type-btn--income ${!isExpense ? 'amount-type-btn--active' : ''}"
|
<button class="amount-type-btn amount-type-btn--income ${!isExpense ? 'amount-type-btn--active' : ''}"
|
||||||
id="type-income" type="button">${t('budget.typeIncome')}</button>
|
id="type-income" type="button">${t('budget.typeIncome')}</button>
|
||||||
|
${!isEdit ? `<button class="amount-type-btn amount-type-btn--loan"
|
||||||
|
id="type-loan" type="button">${t('budget.typeLoan')}</button>` : ''}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group js-entry-field">
|
||||||
<label class="form-label" for="bm-title">${t('budget.titleLabel')}</label>
|
<label class="form-label" for="bm-title">${t('budget.titleLabel')}</label>
|
||||||
<input type="text" class="form-input" id="bm-title"
|
<input type="text" class="form-input" id="bm-title"
|
||||||
placeholder="${t('budget.titlePlaceholder')}" value="${esc(isEdit ? entry.title : '')}">
|
placeholder="${t('budget.titlePlaceholder')}" value="${esc(isEdit ? entry.title : '')}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group js-entry-field">
|
||||||
<label class="form-label" for="bm-amount">${t('budget.amountLabel')}</label>
|
<label class="form-label" for="bm-amount">${t('budget.amountLabel')}</label>
|
||||||
<input type="number" class="form-input" id="bm-amount"
|
<input type="number" class="form-input" id="bm-amount"
|
||||||
placeholder="${t('budget.amountPlaceholder')}" step="0.01" min="0"
|
placeholder="${t('budget.amountPlaceholder')}" step="0.01" min="0"
|
||||||
inputmode="decimal" value="${absAmount}">
|
inputmode="decimal" value="${absAmount}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group js-entry-field">
|
||||||
<div class="budget-field-header">
|
<div class="budget-field-header">
|
||||||
<label class="form-label" for="bm-category">${t('budget.categoryLabel')}</label>
|
<label class="form-label" for="bm-category">${t('budget.categoryLabel')}</label>
|
||||||
<button class="btn btn--secondary budget-inline-add" type="button" id="bm-add-category">${t('budget.addCategory')}</button>
|
<button class="btn btn--secondary budget-inline-add" type="button" id="bm-add-category">${t('budget.addCategory')}</button>
|
||||||
@@ -603,7 +603,7 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
<select class="form-input" id="bm-category">${catOpts}</select>
|
<select class="form-input" id="bm-category">${catOpts}</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group" id="bm-subcategory-group" ${isExpense ? '' : 'hidden'}>
|
<div class="form-group js-entry-field" id="bm-subcategory-group" ${isExpense ? '' : 'hidden'}>
|
||||||
<div class="budget-field-header">
|
<div class="budget-field-header">
|
||||||
<label class="form-label" for="bm-subcategory">${t('budget.subcategoryLabel')}</label>
|
<label class="form-label" for="bm-subcategory">${t('budget.subcategoryLabel')}</label>
|
||||||
<button class="btn btn--secondary budget-inline-add" type="button" id="bm-add-subcategory">${t('budget.addSubcategory')}</button>
|
<button class="btn btn--secondary budget-inline-add" type="button" id="bm-add-subcategory">${t('budget.addSubcategory')}</button>
|
||||||
@@ -611,13 +611,13 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
<select class="form-input" id="bm-subcategory">${subcatOpts}</select>
|
<select class="form-input" id="bm-subcategory">${subcatOpts}</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group js-entry-field">
|
||||||
<label class="form-label" for="bm-date">${t('budget.dateLabel')}</label>
|
<label class="form-label" for="bm-date">${t('budget.dateLabel')}</label>
|
||||||
<input type="text" class="form-input js-date-input" id="bm-date"
|
<input type="text" class="form-input js-date-input" id="bm-date"
|
||||||
value="${formatDateInput(isEdit ? entry.date : today)}" placeholder="${dateInputPlaceholder()}" inputmode="numeric">
|
value="${formatDateInput(isEdit ? entry.date : today)}" placeholder="${dateInputPlaceholder()}" inputmode="numeric">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group js-entry-field">
|
||||||
<label class="toggle">
|
<label class="toggle">
|
||||||
<input type="checkbox" id="bm-recurring" ${isEdit && entry.is_recurring ? 'checked' : ''}>
|
<input type="checkbox" id="bm-recurring" ${isEdit && entry.is_recurring ? 'checked' : ''}>
|
||||||
<span class="toggle__track"></span>
|
<span class="toggle__track"></span>
|
||||||
@@ -625,6 +625,37 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="bm-loan-fields" hidden>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-borrower">${t('budget.loanBorrowerLabel')}</label>
|
||||||
|
<input type="text" class="form-input" id="lm-borrower"
|
||||||
|
placeholder="${t('budget.loanBorrowerPlaceholder')}">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-title">${t('budget.loanTitleLabel')}</label>
|
||||||
|
<input type="text" class="form-input" id="lm-title"
|
||||||
|
placeholder="${t('budget.loanTitlePlaceholder')}">
|
||||||
|
</div>
|
||||||
|
<div class="form-grid-2">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-amount">${t('budget.loanAmountLabel')}</label>
|
||||||
|
<input type="number" class="form-input" id="lm-amount" step="0.01" min="0.01" inputmode="decimal">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-installments">${t('budget.loanInstallmentsLabel')}</label>
|
||||||
|
<input type="number" class="form-input" id="lm-installments" step="1" min="1" max="240" inputmode="numeric">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-start">${t('budget.loanStartMonthLabel')}</label>
|
||||||
|
<input type="month" class="form-input" id="lm-start" value="${todayMonth}">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="lm-notes">${t('budget.loanNotesLabel')}</label>
|
||||||
|
<textarea class="form-input" id="lm-notes" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="modal-panel__footer" style="border:none;padding:0;margin-top:var(--space-4)">
|
<div class="modal-panel__footer" style="border:none;padding:0;margin-top:var(--space-4)">
|
||||||
${isEdit ? `<button class="btn btn--danger btn--icon" id="bm-delete" aria-label="${t('budget.deleteLabel')}">
|
${isEdit ? `<button class="btn btn--danger btn--icon" id="bm-delete" aria-label="${t('budget.deleteLabel')}">
|
||||||
<i data-lucide="trash-2" style="width:16px;height:16px;" aria-hidden="true"></i>
|
<i data-lucide="trash-2" style="width:16px;height:16px;" aria-hidden="true"></i>
|
||||||
@@ -642,6 +673,19 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
onSave(panel) {
|
onSave(panel) {
|
||||||
let currentType = isExpense ? 'expense' : 'income';
|
let currentType = isExpense ? 'expense' : 'income';
|
||||||
|
|
||||||
|
const setType = (type) => {
|
||||||
|
currentType = type;
|
||||||
|
panel.querySelector('#type-expense').classList.toggle('amount-type-btn--active', type === 'expense');
|
||||||
|
panel.querySelector('#type-income').classList.toggle('amount-type-btn--active', type === 'income');
|
||||||
|
panel.querySelector('#type-loan')?.classList.toggle('amount-type-btn--active', type === 'loan');
|
||||||
|
panel.querySelectorAll('.js-entry-field').forEach((el) => { el.hidden = type === 'loan'; });
|
||||||
|
panel.querySelector('#bm-loan-fields').hidden = type !== 'loan';
|
||||||
|
panel.querySelector('#bm-save').textContent = type === 'loan'
|
||||||
|
? t('budget.createLoan')
|
||||||
|
: (isEdit ? t('common.save') : t('common.add'));
|
||||||
|
if (type !== 'loan') updateCategoryOptions();
|
||||||
|
};
|
||||||
|
|
||||||
const updateCategoryOptions = (preferredCategory = '') => {
|
const updateCategoryOptions = (preferredCategory = '') => {
|
||||||
const cats = currentType === 'income' ? incomeCategories() : expenseCategories();
|
const cats = currentType === 'income' ? incomeCategories() : expenseCategories();
|
||||||
const catSelect = panel.querySelector('#bm-category');
|
const catSelect = panel.querySelector('#bm-category');
|
||||||
@@ -709,16 +753,13 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
panel.querySelector('#type-expense').addEventListener('click', () => {
|
panel.querySelector('#type-expense').addEventListener('click', () => {
|
||||||
currentType = 'expense';
|
setType('expense');
|
||||||
panel.querySelector('#type-expense').classList.add('amount-type-btn--active');
|
|
||||||
panel.querySelector('#type-income').classList.remove('amount-type-btn--active');
|
|
||||||
updateCategoryOptions();
|
|
||||||
});
|
});
|
||||||
panel.querySelector('#type-income').addEventListener('click', () => {
|
panel.querySelector('#type-income').addEventListener('click', () => {
|
||||||
currentType = 'income';
|
setType('income');
|
||||||
panel.querySelector('#type-income').classList.add('amount-type-btn--active');
|
});
|
||||||
panel.querySelector('#type-expense').classList.remove('amount-type-btn--active');
|
panel.querySelector('#type-loan')?.addEventListener('click', () => {
|
||||||
updateCategoryOptions();
|
setType('loan');
|
||||||
});
|
});
|
||||||
panel.querySelector('#bm-category').addEventListener('change', () => updateSubcategoryOptions());
|
panel.querySelector('#bm-category').addEventListener('change', () => updateSubcategoryOptions());
|
||||||
panel.querySelector('#bm-add-category').addEventListener('click', addCategory);
|
panel.querySelector('#bm-add-category').addEventListener('click', addCategory);
|
||||||
@@ -739,6 +780,11 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
|
|
||||||
panel.querySelector('#bm-save').addEventListener('click', async () => {
|
panel.querySelector('#bm-save').addEventListener('click', async () => {
|
||||||
const saveBtn = panel.querySelector('#bm-save');
|
const saveBtn = panel.querySelector('#bm-save');
|
||||||
|
if (currentType === 'loan') {
|
||||||
|
await saveLoanFromPanel(panel, saveBtn, { closeAfterSave: true });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const title = panel.querySelector('#bm-title').value.trim();
|
const title = panel.querySelector('#bm-title').value.trim();
|
||||||
const absVal = parseFloat(panel.querySelector('#bm-amount').value);
|
const absVal = parseFloat(panel.querySelector('#bm-amount').value);
|
||||||
const category = panel.querySelector('#bm-category').value;
|
const category = panel.querySelector('#bm-category').value;
|
||||||
@@ -778,10 +824,45 @@ function openBudgetModal({ mode, entry = null }) {
|
|||||||
saveBtn.textContent = isEdit ? t('common.save') : t('common.add');
|
saveBtn.textContent = isEdit ? t('common.save') : t('common.add');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
setType(currentType);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function saveLoanFromPanel(panel, saveBtn, { loan = null, closeAfterSave = false } = {}) {
|
||||||
|
const isEdit = Boolean(loan);
|
||||||
|
const borrower = panel.querySelector('#lm-borrower').value.trim();
|
||||||
|
const title = panel.querySelector('#lm-title').value.trim() || borrower;
|
||||||
|
const total_amount = parseFloat(panel.querySelector('#lm-amount').value);
|
||||||
|
const installment_count = parseInt(panel.querySelector('#lm-installments').value, 10);
|
||||||
|
const start_month = panel.querySelector('#lm-start').value;
|
||||||
|
const notes = panel.querySelector('#lm-notes').value.trim();
|
||||||
|
|
||||||
|
if (!borrower) { window.oikos?.showToast(t('budget.loanBorrowerRequired'), 'error'); return; }
|
||||||
|
if (isNaN(total_amount) || total_amount <= 0) { window.oikos?.showToast(t('budget.validAmountRequired'), 'error'); return; }
|
||||||
|
if (!Number.isInteger(installment_count) || installment_count < 1) { window.oikos?.showToast(t('budget.loanInstallmentsRequired'), 'error'); return; }
|
||||||
|
if (!/^\d{4}-\d{2}$/.test(start_month)) { window.oikos?.showToast(t('budget.loanStartMonthRequired'), 'error'); return; }
|
||||||
|
|
||||||
|
saveBtn.disabled = true;
|
||||||
|
saveBtn.textContent = '...';
|
||||||
|
try {
|
||||||
|
const body = { borrower, title, total_amount, installment_count, start_month, notes };
|
||||||
|
if (isEdit) {
|
||||||
|
await api.put(`/budget/loans/${loan.id}`, body);
|
||||||
|
} else {
|
||||||
|
await api.post('/budget/loans', body);
|
||||||
|
}
|
||||||
|
await loadMonth(state.month);
|
||||||
|
if (closeAfterSave) closeModal({ force: true });
|
||||||
|
renderBody();
|
||||||
|
window.oikos?.showToast(isEdit ? t('budget.loanSavedToast') : t('budget.loanAddedToast'), 'success');
|
||||||
|
} catch (err) {
|
||||||
|
window.oikos?.showToast(err.data?.error ?? t('common.unknownError'), 'error');
|
||||||
|
saveBtn.disabled = false;
|
||||||
|
saveBtn.textContent = isEdit ? t('common.save') : t('budget.createLoan');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openLoanModal(loan = null) {
|
function openLoanModal(loan = null) {
|
||||||
const isEdit = Boolean(loan);
|
const isEdit = Boolean(loan);
|
||||||
const todayMonth = new Date().toISOString().slice(0, 7);
|
const todayMonth = new Date().toISOString().slice(0, 7);
|
||||||
@@ -832,36 +913,7 @@ function openLoanModal(loan = null) {
|
|||||||
panel.querySelector('#lm-cancel').addEventListener('click', closeModal);
|
panel.querySelector('#lm-cancel').addEventListener('click', closeModal);
|
||||||
panel.querySelector('#lm-save').addEventListener('click', async () => {
|
panel.querySelector('#lm-save').addEventListener('click', async () => {
|
||||||
const saveBtn = panel.querySelector('#lm-save');
|
const saveBtn = panel.querySelector('#lm-save');
|
||||||
const borrower = panel.querySelector('#lm-borrower').value.trim();
|
await saveLoanFromPanel(panel, saveBtn, { loan, closeAfterSave: true });
|
||||||
const title = panel.querySelector('#lm-title').value.trim() || borrower;
|
|
||||||
const total_amount = parseFloat(panel.querySelector('#lm-amount').value);
|
|
||||||
const installment_count = parseInt(panel.querySelector('#lm-installments').value, 10);
|
|
||||||
const start_month = panel.querySelector('#lm-start').value;
|
|
||||||
const notes = panel.querySelector('#lm-notes').value.trim();
|
|
||||||
|
|
||||||
if (!borrower) { window.oikos?.showToast(t('budget.loanBorrowerRequired'), 'error'); return; }
|
|
||||||
if (isNaN(total_amount) || total_amount <= 0) { window.oikos?.showToast(t('budget.validAmountRequired'), 'error'); return; }
|
|
||||||
if (!Number.isInteger(installment_count) || installment_count < 1) { window.oikos?.showToast(t('budget.loanInstallmentsRequired'), 'error'); return; }
|
|
||||||
if (!/^\d{4}-\d{2}$/.test(start_month)) { window.oikos?.showToast(t('budget.loanStartMonthRequired'), 'error'); return; }
|
|
||||||
|
|
||||||
saveBtn.disabled = true;
|
|
||||||
saveBtn.textContent = '...';
|
|
||||||
try {
|
|
||||||
const body = { borrower, title, total_amount, installment_count, start_month, notes };
|
|
||||||
if (isEdit) {
|
|
||||||
await api.put(`/budget/loans/${loan.id}`, body);
|
|
||||||
} else {
|
|
||||||
await api.post('/budget/loans', body);
|
|
||||||
}
|
|
||||||
await loadMonth(state.month);
|
|
||||||
closeModal({ force: true });
|
|
||||||
renderBody();
|
|
||||||
window.oikos?.showToast(isEdit ? t('budget.loanSavedToast') : t('budget.loanAddedToast'), 'success');
|
|
||||||
} catch (err) {
|
|
||||||
window.oikos?.showToast(err.data?.error ?? t('common.unknownError'), 'error');
|
|
||||||
saveBtn.disabled = false;
|
|
||||||
saveBtn.textContent = isEdit ? t('common.save') : t('budget.createLoan');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -472,13 +472,17 @@
|
|||||||
/* Einnahme/Ausgabe-Toggle */
|
/* Einnahme/Ausgabe-Toggle */
|
||||||
.amount-type-toggle {
|
.amount-type-toggle {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
gap: var(--space-2);
|
gap: var(--space-2);
|
||||||
background-color: var(--color-surface-2);
|
background-color: var(--color-surface-2);
|
||||||
border-radius: var(--radius-sm);
|
border-radius: var(--radius-sm);
|
||||||
padding: var(--space-0h);
|
padding: var(--space-0h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.amount-type-toggle--entry-only {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
.amount-type-btn {
|
.amount-type-btn {
|
||||||
padding: var(--space-2) var(--space-3);
|
padding: var(--space-2) var(--space-3);
|
||||||
border-radius: var(--radius-xs);
|
border-radius: var(--radius-xs);
|
||||||
@@ -502,6 +506,11 @@
|
|||||||
color: var(--color-text-on-accent);
|
color: var(--color-text-on-accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.amount-type-btn--loan.amount-type-btn--active {
|
||||||
|
background-color: var(--module-accent);
|
||||||
|
color: var(--color-text-on-accent);
|
||||||
|
}
|
||||||
|
|
||||||
.budget-field-header {
|
.budget-field-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
Reference in New Issue
Block a user