Merge branch 'develop' of https://github.com/frappe/erpnext into #34282-Record-advance-payment-as-a-liability
diff --git a/CODEOWNERS b/CODEOWNERS
index 540680c..9077c67 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -5,7 +5,6 @@
erpnext/accounts/ @deepeshgarg007 @ruthra-kumar
erpnext/assets/ @anandbaburajan @deepeshgarg007
-erpnext/loan_management/ @deepeshgarg007
erpnext/regional @deepeshgarg007 @ruthra-kumar
erpnext/selling @deepeshgarg007 @ruthra-kumar
erpnext/support/ @deepeshgarg007
diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py
index 8ad0bd1..8edd376 100644
--- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py
+++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py
@@ -5,7 +5,6 @@
import frappe
from frappe import _, msgprint
from frappe.model.document import Document
-from frappe.query_builder.custom import ConstantColumn
from frappe.utils import flt, fmt_money, getdate
import erpnext
@@ -22,167 +21,24 @@
if not self.account:
frappe.throw(_("Account is mandatory to get payment entries"))
- condition = ""
- if not self.include_reconciled_entries:
- condition = "and (clearance_date IS NULL or clearance_date='0000-00-00')"
+ entries = []
- journal_entries = frappe.db.sql(
- """
- select
- "Journal Entry" as payment_document, t1.name as payment_entry,
- t1.cheque_no as cheque_number, t1.cheque_date,
- sum(t2.debit_in_account_currency) as debit, sum(t2.credit_in_account_currency) as credit,
- t1.posting_date, t2.against_account, t1.clearance_date, t2.account_currency
- from
- `tabJournal Entry` t1, `tabJournal Entry Account` t2
- where
- t2.parent = t1.name and t2.account = %(account)s and t1.docstatus=1
- and t1.posting_date >= %(from)s and t1.posting_date <= %(to)s
- and ifnull(t1.is_opening, 'No') = 'No' {condition}
- group by t2.account, t1.name
- order by t1.posting_date ASC, t1.name DESC
- """.format(
- condition=condition
- ),
- {"account": self.account, "from": self.from_date, "to": self.to_date},
- as_dict=1,
- )
-
- if self.bank_account:
- condition += "and bank_account = %(bank_account)s"
-
- payment_entries = frappe.db.sql(
- """
- select
- "Payment Entry" as payment_document, name as payment_entry,
- reference_no as cheque_number, reference_date as cheque_date,
- if(paid_from=%(account)s, paid_amount + total_taxes_and_charges, 0) as credit,
- if(paid_from=%(account)s, 0, received_amount) as debit,
- posting_date, ifnull(party,if(paid_from=%(account)s,paid_to,paid_from)) as against_account, clearance_date,
- if(paid_to=%(account)s, paid_to_account_currency, paid_from_account_currency) as account_currency
- from `tabPayment Entry`
- where
- (paid_from=%(account)s or paid_to=%(account)s) and docstatus=1
- and posting_date >= %(from)s and posting_date <= %(to)s
- {condition}
- order by
- posting_date ASC, name DESC
- """.format(
- condition=condition
- ),
- {
- "account": self.account,
- "from": self.from_date,
- "to": self.to_date,
- "bank_account": self.bank_account,
- },
- as_dict=1,
- )
-
- loan_disbursement = frappe.qb.DocType("Loan Disbursement")
-
- query = (
- frappe.qb.from_(loan_disbursement)
- .select(
- ConstantColumn("Loan Disbursement").as_("payment_document"),
- loan_disbursement.name.as_("payment_entry"),
- loan_disbursement.disbursed_amount.as_("credit"),
- ConstantColumn(0).as_("debit"),
- loan_disbursement.reference_number.as_("cheque_number"),
- loan_disbursement.reference_date.as_("cheque_date"),
- loan_disbursement.clearance_date.as_("clearance_date"),
- loan_disbursement.disbursement_date.as_("posting_date"),
- loan_disbursement.applicant.as_("against_account"),
- )
- .where(loan_disbursement.docstatus == 1)
- .where(loan_disbursement.disbursement_date >= self.from_date)
- .where(loan_disbursement.disbursement_date <= self.to_date)
- .where(loan_disbursement.disbursement_account.isin([self.bank_account, self.account]))
- .orderby(loan_disbursement.disbursement_date)
- .orderby(loan_disbursement.name, order=frappe.qb.desc)
- )
-
- if not self.include_reconciled_entries:
- query = query.where(loan_disbursement.clearance_date.isnull())
-
- loan_disbursements = query.run(as_dict=1)
-
- loan_repayment = frappe.qb.DocType("Loan Repayment")
-
- query = (
- frappe.qb.from_(loan_repayment)
- .select(
- ConstantColumn("Loan Repayment").as_("payment_document"),
- loan_repayment.name.as_("payment_entry"),
- loan_repayment.amount_paid.as_("debit"),
- ConstantColumn(0).as_("credit"),
- loan_repayment.reference_number.as_("cheque_number"),
- loan_repayment.reference_date.as_("cheque_date"),
- loan_repayment.clearance_date.as_("clearance_date"),
- loan_repayment.applicant.as_("against_account"),
- loan_repayment.posting_date,
- )
- .where(loan_repayment.docstatus == 1)
- .where(loan_repayment.posting_date >= self.from_date)
- .where(loan_repayment.posting_date <= self.to_date)
- .where(loan_repayment.payment_account.isin([self.bank_account, self.account]))
- )
-
- if not self.include_reconciled_entries:
- query = query.where(loan_repayment.clearance_date.isnull())
-
- if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
- query = query.where((loan_repayment.repay_from_salary == 0))
-
- query = query.orderby(loan_repayment.posting_date).orderby(
- loan_repayment.name, order=frappe.qb.desc
- )
-
- loan_repayments = query.run(as_dict=True)
-
- pos_sales_invoices, pos_purchase_invoices = [], []
- if self.include_pos_transactions:
- pos_sales_invoices = frappe.db.sql(
- """
- select
- "Sales Invoice Payment" as payment_document, sip.name as payment_entry, sip.amount as debit,
- si.posting_date, si.customer as against_account, sip.clearance_date,
- account.account_currency, 0 as credit
- from `tabSales Invoice Payment` sip, `tabSales Invoice` si, `tabAccount` account
- where
- sip.account=%(account)s and si.docstatus=1 and sip.parent = si.name
- and account.name = sip.account and si.posting_date >= %(from)s and si.posting_date <= %(to)s
- order by
- si.posting_date ASC, si.name DESC
- """,
- {"account": self.account, "from": self.from_date, "to": self.to_date},
- as_dict=1,
- )
-
- pos_purchase_invoices = frappe.db.sql(
- """
- select
- "Purchase Invoice" as payment_document, pi.name as payment_entry, pi.paid_amount as credit,
- pi.posting_date, pi.supplier as against_account, pi.clearance_date,
- account.account_currency, 0 as debit
- from `tabPurchase Invoice` pi, `tabAccount` account
- where
- pi.cash_bank_account=%(account)s and pi.docstatus=1 and account.name = pi.cash_bank_account
- and pi.posting_date >= %(from)s and pi.posting_date <= %(to)s
- order by
- pi.posting_date ASC, pi.name DESC
- """,
- {"account": self.account, "from": self.from_date, "to": self.to_date},
- as_dict=1,
+ # get entries from all the apps
+ for method_name in frappe.get_hooks("get_payment_entries_for_bank_clearance"):
+ entries += (
+ frappe.get_attr(method_name)(
+ self.from_date,
+ self.to_date,
+ self.account,
+ self.bank_account,
+ self.include_reconciled_entries,
+ self.include_pos_transactions,
+ )
+ or []
)
entries = sorted(
- list(payment_entries)
- + list(journal_entries)
- + list(pos_sales_invoices)
- + list(pos_purchase_invoices)
- + list(loan_disbursements)
- + list(loan_repayments),
+ entries,
key=lambda k: getdate(k["posting_date"]),
)
@@ -235,3 +91,111 @@
msgprint(_("Clearance Date updated"))
else:
msgprint(_("Clearance Date not mentioned"))
+
+
+def get_payment_entries_for_bank_clearance(
+ from_date, to_date, account, bank_account, include_reconciled_entries, include_pos_transactions
+):
+ entries = []
+
+ condition = ""
+ if not include_reconciled_entries:
+ condition = "and (clearance_date IS NULL or clearance_date='0000-00-00')"
+
+ journal_entries = frappe.db.sql(
+ """
+ select
+ "Journal Entry" as payment_document, t1.name as payment_entry,
+ t1.cheque_no as cheque_number, t1.cheque_date,
+ sum(t2.debit_in_account_currency) as debit, sum(t2.credit_in_account_currency) as credit,
+ t1.posting_date, t2.against_account, t1.clearance_date, t2.account_currency
+ from
+ `tabJournal Entry` t1, `tabJournal Entry Account` t2
+ where
+ t2.parent = t1.name and t2.account = %(account)s and t1.docstatus=1
+ and t1.posting_date >= %(from)s and t1.posting_date <= %(to)s
+ and ifnull(t1.is_opening, 'No') = 'No' {condition}
+ group by t2.account, t1.name
+ order by t1.posting_date ASC, t1.name DESC
+ """.format(
+ condition=condition
+ ),
+ {"account": account, "from": from_date, "to": to_date},
+ as_dict=1,
+ )
+
+ if bank_account:
+ condition += "and bank_account = %(bank_account)s"
+
+ payment_entries = frappe.db.sql(
+ """
+ select
+ "Payment Entry" as payment_document, name as payment_entry,
+ reference_no as cheque_number, reference_date as cheque_date,
+ if(paid_from=%(account)s, paid_amount + total_taxes_and_charges, 0) as credit,
+ if(paid_from=%(account)s, 0, received_amount) as debit,
+ posting_date, ifnull(party,if(paid_from=%(account)s,paid_to,paid_from)) as against_account, clearance_date,
+ if(paid_to=%(account)s, paid_to_account_currency, paid_from_account_currency) as account_currency
+ from `tabPayment Entry`
+ where
+ (paid_from=%(account)s or paid_to=%(account)s) and docstatus=1
+ and posting_date >= %(from)s and posting_date <= %(to)s
+ {condition}
+ order by
+ posting_date ASC, name DESC
+ """.format(
+ condition=condition
+ ),
+ {
+ "account": account,
+ "from": from_date,
+ "to": to_date,
+ "bank_account": bank_account,
+ },
+ as_dict=1,
+ )
+
+ pos_sales_invoices, pos_purchase_invoices = [], []
+ if include_pos_transactions:
+ pos_sales_invoices = frappe.db.sql(
+ """
+ select
+ "Sales Invoice Payment" as payment_document, sip.name as payment_entry, sip.amount as debit,
+ si.posting_date, si.customer as against_account, sip.clearance_date,
+ account.account_currency, 0 as credit
+ from `tabSales Invoice Payment` sip, `tabSales Invoice` si, `tabAccount` account
+ where
+ sip.account=%(account)s and si.docstatus=1 and sip.parent = si.name
+ and account.name = sip.account and si.posting_date >= %(from)s and si.posting_date <= %(to)s
+ order by
+ si.posting_date ASC, si.name DESC
+ """,
+ {"account": account, "from": from_date, "to": to_date},
+ as_dict=1,
+ )
+
+ pos_purchase_invoices = frappe.db.sql(
+ """
+ select
+ "Purchase Invoice" as payment_document, pi.name as payment_entry, pi.paid_amount as credit,
+ pi.posting_date, pi.supplier as against_account, pi.clearance_date,
+ account.account_currency, 0 as debit
+ from `tabPurchase Invoice` pi, `tabAccount` account
+ where
+ pi.cash_bank_account=%(account)s and pi.docstatus=1 and account.name = pi.cash_bank_account
+ and pi.posting_date >= %(from)s and pi.posting_date <= %(to)s
+ order by
+ pi.posting_date ASC, pi.name DESC
+ """,
+ {"account": account, "from": from_date, "to": to_date},
+ as_dict=1,
+ )
+
+ entries = (
+ list(payment_entries)
+ + list(journal_entries)
+ + list(pos_sales_invoices)
+ + list(pos_purchase_invoices)
+ )
+
+ return entries
diff --git a/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py b/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
index c1e55f6..c7404d1 100644
--- a/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
+++ b/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
@@ -8,34 +8,96 @@
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
-from erpnext.loan_management.doctype.loan.test_loan import (
- create_loan,
- create_loan_accounts,
- create_loan_type,
- create_repayment_entry,
- make_loan_disbursement_entry,
-)
+from erpnext.tests.utils import if_lending_app_installed, if_lending_app_not_installed
class TestBankClearance(unittest.TestCase):
@classmethod
def setUpClass(cls):
+ clear_payment_entries()
+ clear_loan_transactions()
make_bank_account()
- create_loan_accounts()
- create_loan_masters()
add_transactions()
# Basic test case to test if bank clearance tool doesn't break
# Detailed test can be added later
+ @if_lending_app_not_installed
def test_bank_clearance(self):
bank_clearance = frappe.get_doc("Bank Clearance")
bank_clearance.account = "_Test Bank Clearance - _TC"
bank_clearance.from_date = add_months(getdate(), -1)
bank_clearance.to_date = getdate()
bank_clearance.get_payment_entries()
+ self.assertEqual(len(bank_clearance.payment_entries), 1)
+
+ @if_lending_app_installed
+ def test_bank_clearance_with_loan(self):
+ from lending.loan_management.doctype.loan.test_loan import (
+ create_loan,
+ create_loan_accounts,
+ create_loan_type,
+ create_repayment_entry,
+ make_loan_disbursement_entry,
+ )
+
+ def create_loan_masters():
+ create_loan_type(
+ "Clearance Loan",
+ 2000000,
+ 13.5,
+ 25,
+ 0,
+ 5,
+ "Cash",
+ "_Test Bank Clearance - _TC",
+ "_Test Bank Clearance - _TC",
+ "Loan Account - _TC",
+ "Interest Income Account - _TC",
+ "Penalty Income Account - _TC",
+ )
+
+ def make_loan():
+ loan = create_loan(
+ "_Test Customer",
+ "Clearance Loan",
+ 280000,
+ "Repay Over Number of Periods",
+ 20,
+ applicant_type="Customer",
+ )
+ loan.submit()
+ make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=getdate())
+ repayment_entry = create_repayment_entry(
+ loan.name, "_Test Customer", getdate(), loan.loan_amount
+ )
+ repayment_entry.save()
+ repayment_entry.submit()
+
+ create_loan_accounts()
+ create_loan_masters()
+ make_loan()
+
+ bank_clearance = frappe.get_doc("Bank Clearance")
+ bank_clearance.account = "_Test Bank Clearance - _TC"
+ bank_clearance.from_date = add_months(getdate(), -1)
+ bank_clearance.to_date = getdate()
+ bank_clearance.get_payment_entries()
self.assertEqual(len(bank_clearance.payment_entries), 3)
+def clear_payment_entries():
+ frappe.db.delete("Payment Entry")
+
+
+@if_lending_app_installed
+def clear_loan_transactions():
+ for dt in [
+ "Loan Disbursement",
+ "Loan Repayment",
+ ]:
+ frappe.db.delete(dt)
+
+
def make_bank_account():
if not frappe.db.get_value("Account", "_Test Bank Clearance - _TC"):
frappe.get_doc(
@@ -49,42 +111,8 @@
).insert()
-def create_loan_masters():
- create_loan_type(
- "Clearance Loan",
- 2000000,
- 13.5,
- 25,
- 0,
- 5,
- "Cash",
- "_Test Bank Clearance - _TC",
- "_Test Bank Clearance - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- )
-
-
def add_transactions():
make_payment_entry()
- make_loan()
-
-
-def make_loan():
- loan = create_loan(
- "_Test Customer",
- "Clearance Loan",
- 280000,
- "Repay Over Number of Periods",
- 20,
- applicant_type="Customer",
- )
- loan.submit()
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=getdate())
- repayment_entry = create_repayment_entry(loan.name, "_Test Customer", getdate(), loan.loan_amount)
- repayment_entry.save()
- repayment_entry.submit()
def make_payment_entry():
diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py
index 0eef3e9..3da5ac3 100644
--- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py
+++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py
@@ -7,7 +7,6 @@
import frappe
from frappe import _
from frappe.model.document import Document
-from frappe.query_builder.custom import ConstantColumn
from frappe.utils import cint, flt
from erpnext import get_default_cost_center
@@ -419,19 +418,7 @@
to_reference_date,
):
exact_match = True if "exact_match" in document_types else False
- # combine all types of vouchers
- subquery = get_queries(
- bank_account,
- company,
- transaction,
- document_types,
- from_date,
- to_date,
- filter_by_reference_date,
- from_reference_date,
- to_reference_date,
- exact_match,
- )
+
filters = {
"amount": transaction.unallocated_amount,
"payment_type": "Receive" if transaction.deposit > 0.0 else "Pay",
@@ -443,21 +430,29 @@
matching_vouchers = []
- matching_vouchers.extend(
- get_loan_vouchers(bank_account, transaction, document_types, filters, exact_match)
- )
-
- for query in subquery:
+ # get matching vouchers from all the apps
+ for method_name in frappe.get_hooks("get_matching_vouchers_for_bank_reconciliation"):
matching_vouchers.extend(
- frappe.db.sql(
- query,
+ frappe.get_attr(method_name)(
+ bank_account,
+ company,
+ transaction,
+ document_types,
+ from_date,
+ to_date,
+ filter_by_reference_date,
+ from_reference_date,
+ to_reference_date,
+ exact_match,
filters,
)
+ or []
)
+
return sorted(matching_vouchers, key=lambda x: x[0], reverse=True) if matching_vouchers else []
-def get_queries(
+def get_matching_vouchers_for_bank_reconciliation(
bank_account,
company,
transaction,
@@ -468,6 +463,7 @@
from_reference_date,
to_reference_date,
exact_match,
+ filters,
):
# get queries to get matching vouchers
account_from_to = "paid_to" if transaction.deposit > 0.0 else "paid_from"
@@ -492,7 +488,17 @@
or []
)
- return queries
+ vouchers = []
+
+ for query in queries:
+ vouchers.extend(
+ frappe.db.sql(
+ query,
+ filters,
+ )
+ )
+
+ return vouchers
def get_matching_queries(
@@ -550,18 +556,6 @@
return queries
-def get_loan_vouchers(bank_account, transaction, document_types, filters, exact_match):
- vouchers = []
-
- if transaction.withdrawal > 0.0 and "loan_disbursement" in document_types:
- vouchers.extend(get_ld_matching_query(bank_account, exact_match, filters))
-
- if transaction.deposit > 0.0 and "loan_repayment" in document_types:
- vouchers.extend(get_lr_matching_query(bank_account, exact_match, filters))
-
- return vouchers
-
-
def get_bt_matching_query(exact_match, transaction):
# get matching bank transaction query
# find bank transactions in the same bank account with opposite sign
@@ -595,85 +589,6 @@
"""
-def get_ld_matching_query(bank_account, exact_match, filters):
- loan_disbursement = frappe.qb.DocType("Loan Disbursement")
- matching_reference = loan_disbursement.reference_number == filters.get("reference_number")
- matching_party = loan_disbursement.applicant_type == filters.get(
- "party_type"
- ) and loan_disbursement.applicant == filters.get("party")
-
- rank = frappe.qb.terms.Case().when(matching_reference, 1).else_(0)
-
- rank1 = frappe.qb.terms.Case().when(matching_party, 1).else_(0)
-
- query = (
- frappe.qb.from_(loan_disbursement)
- .select(
- rank + rank1 + 1,
- ConstantColumn("Loan Disbursement").as_("doctype"),
- loan_disbursement.name,
- loan_disbursement.disbursed_amount,
- loan_disbursement.reference_number,
- loan_disbursement.reference_date,
- loan_disbursement.applicant_type,
- loan_disbursement.disbursement_date,
- )
- .where(loan_disbursement.docstatus == 1)
- .where(loan_disbursement.clearance_date.isnull())
- .where(loan_disbursement.disbursement_account == bank_account)
- )
-
- if exact_match:
- query.where(loan_disbursement.disbursed_amount == filters.get("amount"))
- else:
- query.where(loan_disbursement.disbursed_amount > 0.0)
-
- vouchers = query.run(as_list=True)
-
- return vouchers
-
-
-def get_lr_matching_query(bank_account, exact_match, filters):
- loan_repayment = frappe.qb.DocType("Loan Repayment")
- matching_reference = loan_repayment.reference_number == filters.get("reference_number")
- matching_party = loan_repayment.applicant_type == filters.get(
- "party_type"
- ) and loan_repayment.applicant == filters.get("party")
-
- rank = frappe.qb.terms.Case().when(matching_reference, 1).else_(0)
-
- rank1 = frappe.qb.terms.Case().when(matching_party, 1).else_(0)
-
- query = (
- frappe.qb.from_(loan_repayment)
- .select(
- rank + rank1 + 1,
- ConstantColumn("Loan Repayment").as_("doctype"),
- loan_repayment.name,
- loan_repayment.amount_paid,
- loan_repayment.reference_number,
- loan_repayment.reference_date,
- loan_repayment.applicant_type,
- loan_repayment.posting_date,
- )
- .where(loan_repayment.docstatus == 1)
- .where(loan_repayment.clearance_date.isnull())
- .where(loan_repayment.payment_account == bank_account)
- )
-
- if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
- query = query.where((loan_repayment.repay_from_salary == 0))
-
- if exact_match:
- query.where(loan_repayment.amount_paid == filters.get("amount"))
- else:
- query.where(loan_repayment.amount_paid > 0.0)
-
- vouchers = query.run()
-
- return vouchers
-
-
def get_pe_matching_query(
exact_match,
account_from_to,
diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
index f82337f..6a47562 100644
--- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
+++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py
@@ -343,14 +343,7 @@
def set_voucher_clearance(doctype, docname, clearance_date, self):
- if doctype in [
- "Payment Entry",
- "Journal Entry",
- "Purchase Invoice",
- "Expense Claim",
- "Loan Repayment",
- "Loan Disbursement",
- ]:
+ if doctype in get_doctypes_for_bank_reconciliation():
if (
doctype == "Payment Entry"
and frappe.db.get_value("Payment Entry", docname, "payment_type") == "Internal Transfer"
diff --git a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
index f900e07..59905da 100644
--- a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
+++ b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
@@ -16,6 +16,7 @@
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
+from erpnext.tests.utils import if_lending_app_installed
test_dependencies = ["Item", "Cost Center"]
@@ -23,14 +24,13 @@
class TestBankTransaction(FrappeTestCase):
def setUp(self):
for dt in [
- "Loan Repayment",
"Bank Transaction",
"Payment Entry",
"Payment Entry Reference",
"POS Profile",
]:
frappe.db.delete(dt)
-
+ clear_loan_transactions()
make_pos_profile()
add_transactions()
add_vouchers()
@@ -160,8 +160,9 @@
is not None
)
+ @if_lending_app_installed
def test_matching_loan_repayment(self):
- from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts
+ from lending.loan_management.doctype.loan.test_loan import create_loan_accounts
create_loan_accounts()
bank_account = frappe.get_doc(
@@ -190,6 +191,11 @@
self.assertEqual(linked_payments[0][2], repayment_entry.name)
+@if_lending_app_installed
+def clear_loan_transactions():
+ frappe.db.delete("Loan Repayment")
+
+
def create_bank_account(bank_name="Citi Bank", account_name="_Test Bank - _TC"):
try:
frappe.get_doc(
@@ -400,16 +406,18 @@
si.submit()
+@if_lending_app_installed
def create_loan_and_repayment():
- from erpnext.loan_management.doctype.loan.test_loan import (
+ from lending.loan_management.doctype.loan.test_loan import (
create_loan,
create_loan_type,
create_repayment_entry,
make_loan_disbursement_entry,
)
- from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
+ from lending.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
process_loan_interest_accrual_for_term_loans,
)
+
from erpnext.setup.doctype.employee.test_employee import make_employee
create_loan_type(
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
index 2d68bb7..e3127b3 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py
@@ -4,7 +4,6 @@
import frappe
from frappe import _
-from frappe.query_builder.custom import ConstantColumn
from frappe.utils import getdate, nowdate
@@ -61,7 +60,28 @@
def get_entries(filters):
+ entries = []
+
+ # get entries from all the apps
+ for method_name in frappe.get_hooks("get_entries_for_bank_clearance_summary"):
+ entries += (
+ frappe.get_attr(method_name)(
+ filters,
+ )
+ or []
+ )
+
+ return sorted(
+ entries,
+ key=lambda k: k[2] or getdate(nowdate()),
+ )
+
+
+def get_entries_for_bank_clearance_summary(filters):
+ entries = []
+
conditions = get_conditions(filters)
+
journal_entries = frappe.db.sql(
"""SELECT
"Journal Entry", jv.name, jv.posting_date, jv.cheque_no,
@@ -92,65 +112,6 @@
as_list=1,
)
- # Loan Disbursement
- loan_disbursement = frappe.qb.DocType("Loan Disbursement")
+ entries = journal_entries + payment_entries
- query = (
- frappe.qb.from_(loan_disbursement)
- .select(
- ConstantColumn("Loan Disbursement").as_("payment_document_type"),
- loan_disbursement.name.as_("payment_entry"),
- loan_disbursement.disbursement_date.as_("posting_date"),
- loan_disbursement.reference_number.as_("cheque_no"),
- loan_disbursement.clearance_date.as_("clearance_date"),
- loan_disbursement.applicant.as_("against"),
- -loan_disbursement.disbursed_amount.as_("amount"),
- )
- .where(loan_disbursement.docstatus == 1)
- .where(loan_disbursement.disbursement_date >= filters["from_date"])
- .where(loan_disbursement.disbursement_date <= filters["to_date"])
- .where(loan_disbursement.disbursement_account == filters["account"])
- .orderby(loan_disbursement.disbursement_date, order=frappe.qb.desc)
- .orderby(loan_disbursement.name, order=frappe.qb.desc)
- )
-
- if filters.get("from_date"):
- query = query.where(loan_disbursement.disbursement_date >= filters["from_date"])
- if filters.get("to_date"):
- query = query.where(loan_disbursement.disbursement_date <= filters["to_date"])
-
- loan_disbursements = query.run(as_list=1)
-
- # Loan Repayment
- loan_repayment = frappe.qb.DocType("Loan Repayment")
-
- query = (
- frappe.qb.from_(loan_repayment)
- .select(
- ConstantColumn("Loan Repayment").as_("payment_document_type"),
- loan_repayment.name.as_("payment_entry"),
- loan_repayment.posting_date.as_("posting_date"),
- loan_repayment.reference_number.as_("cheque_no"),
- loan_repayment.clearance_date.as_("clearance_date"),
- loan_repayment.applicant.as_("against"),
- loan_repayment.amount_paid.as_("amount"),
- )
- .where(loan_repayment.docstatus == 1)
- .where(loan_repayment.posting_date >= filters["from_date"])
- .where(loan_repayment.posting_date <= filters["to_date"])
- .where(loan_repayment.payment_account == filters["account"])
- .orderby(loan_repayment.posting_date, order=frappe.qb.desc)
- .orderby(loan_repayment.name, order=frappe.qb.desc)
- )
-
- if filters.get("from_date"):
- query = query.where(loan_repayment.posting_date >= filters["from_date"])
- if filters.get("to_date"):
- query = query.where(loan_repayment.posting_date <= filters["to_date"])
-
- loan_repayments = query.run(as_list=1)
-
- return sorted(
- journal_entries + payment_entries + loan_disbursements + loan_repayments,
- key=lambda k: k[2] or getdate(nowdate()),
- )
+ return entries
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
index b0a0e05..206654c 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py
@@ -4,10 +4,7 @@
import frappe
from frappe import _
-from frappe.query_builder.custom import ConstantColumn
-from frappe.query_builder.functions import Sum
from frappe.utils import flt, getdate
-from pypika import CustomFunction
from erpnext.accounts.utils import get_balance_on
@@ -113,20 +110,27 @@
def get_entries(filters):
+ entries = []
+
+ for method_name in frappe.get_hooks("get_entries_for_bank_reconciliation_statement"):
+ entries += frappe.get_attr(method_name)(filters) or []
+
+ return sorted(
+ entries,
+ key=lambda k: getdate(k["posting_date"]),
+ )
+
+
+def get_entries_for_bank_reconciliation_statement(filters):
journal_entries = get_journal_entries(filters)
payment_entries = get_payment_entries(filters)
- loan_entries = get_loan_entries(filters)
-
pos_entries = []
if filters.include_pos_transactions:
pos_entries = get_pos_entries(filters)
- return sorted(
- list(payment_entries) + list(journal_entries + list(pos_entries) + list(loan_entries)),
- key=lambda k: getdate(k["posting_date"]),
- )
+ return list(journal_entries) + list(payment_entries) + list(pos_entries)
def get_journal_entries(filters):
@@ -188,47 +192,19 @@
)
-def get_loan_entries(filters):
- loan_docs = []
- for doctype in ["Loan Disbursement", "Loan Repayment"]:
- loan_doc = frappe.qb.DocType(doctype)
- ifnull = CustomFunction("IFNULL", ["value", "default"])
-
- if doctype == "Loan Disbursement":
- amount_field = (loan_doc.disbursed_amount).as_("credit")
- posting_date = (loan_doc.disbursement_date).as_("posting_date")
- account = loan_doc.disbursement_account
- else:
- amount_field = (loan_doc.amount_paid).as_("debit")
- posting_date = (loan_doc.posting_date).as_("posting_date")
- account = loan_doc.payment_account
-
- query = (
- frappe.qb.from_(loan_doc)
- .select(
- ConstantColumn(doctype).as_("payment_document"),
- (loan_doc.name).as_("payment_entry"),
- (loan_doc.reference_number).as_("reference_no"),
- (loan_doc.reference_date).as_("ref_date"),
- amount_field,
- posting_date,
- )
- .where(loan_doc.docstatus == 1)
- .where(account == filters.get("account"))
- .where(posting_date <= getdate(filters.get("report_date")))
- .where(ifnull(loan_doc.clearance_date, "4000-01-01") > getdate(filters.get("report_date")))
- )
-
- if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"):
- query = query.where((loan_doc.repay_from_salary == 0))
-
- entries = query.run(as_dict=1)
- loan_docs.extend(entries)
-
- return loan_docs
-
-
def get_amounts_not_reflected_in_system(filters):
+ amount = 0.0
+
+ # get amounts from all the apps
+ for method_name in frappe.get_hooks(
+ "get_amounts_not_reflected_in_system_for_bank_reconciliation_statement"
+ ):
+ amount += frappe.get_attr(method_name)(filters) or 0.0
+
+ return amount
+
+
+def get_amounts_not_reflected_in_system_for_bank_reconciliation_statement(filters):
je_amount = frappe.db.sql(
"""
select sum(jvd.debit_in_account_currency - jvd.credit_in_account_currency)
@@ -252,42 +228,7 @@
pe_amount = flt(pe_amount[0][0]) if pe_amount else 0.0
- loan_amount = get_loan_amount(filters)
-
- return je_amount + pe_amount + loan_amount
-
-
-def get_loan_amount(filters):
- total_amount = 0
- for doctype in ["Loan Disbursement", "Loan Repayment"]:
- loan_doc = frappe.qb.DocType(doctype)
- ifnull = CustomFunction("IFNULL", ["value", "default"])
-
- if doctype == "Loan Disbursement":
- amount_field = Sum(loan_doc.disbursed_amount)
- posting_date = (loan_doc.disbursement_date).as_("posting_date")
- account = loan_doc.disbursement_account
- else:
- amount_field = Sum(loan_doc.amount_paid)
- posting_date = (loan_doc.posting_date).as_("posting_date")
- account = loan_doc.payment_account
-
- query = (
- frappe.qb.from_(loan_doc)
- .select(amount_field)
- .where(loan_doc.docstatus == 1)
- .where(account == filters.get("account"))
- .where(posting_date > getdate(filters.get("report_date")))
- .where(ifnull(loan_doc.clearance_date, "4000-01-01") <= getdate(filters.get("report_date")))
- )
-
- if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"):
- query = query.where((loan_doc.repay_from_salary == 0))
-
- amount = query.run()[0][0]
- total_amount += flt(amount)
-
- return total_amount
+ return je_amount + pe_amount
def get_balance_row(label, amount, account_currency):
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py b/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py
index d7c8716..b1753ca 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py
+++ b/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py
@@ -4,28 +4,32 @@
import frappe
from frappe.tests.utils import FrappeTestCase
-from erpnext.accounts.doctype.bank_transaction.test_bank_transaction import (
- create_loan_and_repayment,
-)
from erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement import (
execute,
)
-from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts
+from erpnext.tests.utils import if_lending_app_installed
class TestBankReconciliationStatement(FrappeTestCase):
def setUp(self):
for dt in [
- "Loan Repayment",
- "Loan Disbursement",
"Journal Entry",
"Journal Entry Account",
"Payment Entry",
]:
frappe.db.delete(dt)
+ clear_loan_transactions()
+ @if_lending_app_installed
def test_loan_entries_in_bank_reco_statement(self):
+ from lending.loan_management.doctype.loan.test_loan import create_loan_accounts
+
+ from erpnext.accounts.doctype.bank_transaction.test_bank_transaction import (
+ create_loan_and_repayment,
+ )
+
create_loan_accounts()
+
repayment_entry = create_loan_and_repayment()
filters = frappe._dict(
@@ -38,3 +42,12 @@
result = execute(filters)
self.assertEqual(result[1][0].payment_entry, repayment_entry.name)
+
+
+@if_lending_app_installed
+def clear_loan_transactions():
+ for dt in [
+ "Loan Disbursement",
+ "Loan Repayment",
+ ]:
+ frappe.db.delete(dt)
diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py
index 40dcd0c..57339bf 100644
--- a/erpnext/controllers/subcontracting_controller.py
+++ b/erpnext/controllers/subcontracting_controller.py
@@ -173,50 +173,52 @@
self.qty_to_be_received[(row.item_code, row.parent)] += row.qty
def __get_transferred_items(self):
- fields = [
- f"`tabStock Entry`.`{self.subcontract_data.order_field}`",
- "`tabStock Entry`.`name` as voucher_no",
- ]
+ se = frappe.qb.DocType("Stock Entry")
+ se_detail = frappe.qb.DocType("Stock Entry Detail")
- alias_dict = {
- "item_code": "rm_item_code",
- "subcontracted_item": "main_item_code",
- "basic_rate": "rate",
- }
-
- child_table_fields = [
- "item_code",
- "item_name",
- "description",
- "qty",
- "basic_rate",
- "amount",
- "serial_no",
- "serial_and_batch_bundle",
- "uom",
- "subcontracted_item",
- "stock_uom",
- "batch_no",
- "conversion_factor",
- "s_warehouse",
- "t_warehouse",
- "item_group",
- self.subcontract_data.rm_detail_field,
- ]
+ query = (
+ frappe.qb.from_(se)
+ .inner_join(se_detail)
+ .on(se.name == se_detail.parent)
+ .select(
+ se[self.subcontract_data.order_field],
+ se.name.as_("voucher_no"),
+ se_detail.item_code.as_("rm_item_code"),
+ se_detail.item_name,
+ se_detail.description,
+ (
+ frappe.qb.terms.Case()
+ .when(((se.purpose == "Material Transfer") & (se.is_return == 1)), -1 * se_detail.qty)
+ .else_(se_detail.qty)
+ ).as_("qty"),
+ se_detail.basic_rate.as_("rate"),
+ se_detail.amount,
+ se_detail.serial_no,
+ se_detail.serial_and_batch_bundle,
+ se_detail.uom,
+ se_detail.subcontracted_item.as_("main_item_code"),
+ se_detail.stock_uom,
+ se_detail.batch_no,
+ se_detail.conversion_factor,
+ se_detail.s_warehouse,
+ se_detail.t_warehouse,
+ se_detail.item_group,
+ se_detail[self.subcontract_data.rm_detail_field],
+ )
+ .where(
+ (se.docstatus == 1)
+ & (se[self.subcontract_data.order_field].isin(self.subcontract_orders))
+ & (
+ (se.purpose == "Send to Subcontractor")
+ | ((se.purpose == "Material Transfer") & (se.is_return == 1))
+ )
+ )
+ )
if self.backflush_based_on == "BOM":
- child_table_fields.append("original_item")
+ query = query.select(se_detail.original_item)
- for field in child_table_fields:
- fields.append(f"`tabStock Entry Detail`.`{field}` As {alias_dict.get(field, field)}")
-
- filters = [
- ["Stock Entry", "docstatus", "=", 1],
- ["Stock Entry", "purpose", "=", "Send to Subcontractor"],
- ["Stock Entry", self.subcontract_data.order_field, "in", self.subcontract_orders],
- ]
-
- return frappe.get_all("Stock Entry", fields=fields, filters=filters)
+ return query.run(as_dict=True)
def __set_alternative_item_details(self, row):
if row.get("original_item"):
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index c821fcf..a6d939e 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -419,13 +419,10 @@
"daily_long": [
"erpnext.setup.doctype.email_digest.email_digest.send",
"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.auto_update_latest_price_in_all_boms",
- "erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall.create_process_loan_security_shortfall",
- "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_term_loans",
"erpnext.crm.utils.open_leads_opportunities_based_on_todays_event",
],
"monthly_long": [
"erpnext.accounts.deferred_revenue.process_deferred_accounting",
- "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_demand_loans",
],
}
@@ -471,9 +468,6 @@
"Payment Entry",
"Journal Entry",
"Purchase Invoice",
- "Sales Invoice",
- "Loan Repayment",
- "Loan Disbursement",
]
accounting_dimension_doctypes = [
@@ -521,11 +515,22 @@
"Account Closing Balance",
]
-# get matching queries for Bank Reconciliation
get_matching_queries = (
"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_matching_queries"
)
+get_matching_vouchers_for_bank_reconciliation = "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_matching_vouchers_for_bank_reconciliation"
+
+get_amounts_not_reflected_in_system_for_bank_reconciliation_statement = "erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement.get_amounts_not_reflected_in_system_for_bank_reconciliation_statement"
+
+get_payment_entries_for_bank_clearance = (
+ "erpnext.accounts.doctype.bank_clearance.bank_clearance.get_payment_entries_for_bank_clearance"
+)
+
+get_entries_for_bank_clearance_summary = "erpnext.accounts.report.bank_clearance_summary.bank_clearance_summary.get_entries_for_bank_clearance_summary"
+
+get_entries_for_bank_reconciliation_statement = "erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement.get_entries_for_bank_reconciliation_statement"
+
regional_overrides = {
"France": {
"erpnext.tests.test_regional.test_method": "erpnext.regional.france.utils.test_method"
@@ -593,7 +598,6 @@
{"doctype": "Branch", "index": 35},
{"doctype": "Department", "index": 36},
{"doctype": "Designation", "index": 38},
- {"doctype": "Loan", "index": 44},
{"doctype": "Maintenance Schedule", "index": 45},
{"doctype": "Maintenance Visit", "index": 46},
{"doctype": "Warranty Claim", "index": 47},
diff --git a/erpnext/loan_management/__init__.py b/erpnext/loan_management/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/dashboard_chart/loan_disbursements/loan_disbursements.json b/erpnext/loan_management/dashboard_chart/loan_disbursements/loan_disbursements.json
deleted file mode 100644
index b8abf21..0000000
--- a/erpnext/loan_management/dashboard_chart/loan_disbursements/loan_disbursements.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "based_on": "disbursement_date",
- "chart_name": "Loan Disbursements",
- "chart_type": "Sum",
- "creation": "2021-02-06 18:40:36.148470",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Loan Disbursement",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Disbursement\",\"docstatus\",\"=\",\"1\",false]]",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "modified": "2021-02-06 18:40:49.308663",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Disbursements",
- "number_of_groups": 0,
- "owner": "Administrator",
- "source": "",
- "time_interval": "Daily",
- "timeseries": 1,
- "timespan": "Last Month",
- "type": "Line",
- "use_report_chart": 0,
- "value_based_on": "disbursed_amount",
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/dashboard_chart/loan_interest_accrual/loan_interest_accrual.json b/erpnext/loan_management/dashboard_chart/loan_interest_accrual/loan_interest_accrual.json
deleted file mode 100644
index aa0f78a..0000000
--- a/erpnext/loan_management/dashboard_chart/loan_interest_accrual/loan_interest_accrual.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "based_on": "posting_date",
- "chart_name": "Loan Interest Accrual",
- "chart_type": "Sum",
- "color": "#39E4A5",
- "creation": "2021-02-18 20:07:04.843876",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Loan Interest Accrual",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Interest Accrual\",\"docstatus\",\"=\",\"1\",false]]",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "last_synced_on": "2021-02-21 21:01:26.022634",
- "modified": "2021-02-21 21:01:44.930712",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Interest Accrual",
- "number_of_groups": 0,
- "owner": "Administrator",
- "source": "",
- "time_interval": "Monthly",
- "timeseries": 1,
- "timespan": "Last Year",
- "type": "Line",
- "use_report_chart": 0,
- "value_based_on": "interest_amount",
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/dashboard_chart/new_loans/new_loans.json b/erpnext/loan_management/dashboard_chart/new_loans/new_loans.json
deleted file mode 100644
index 35bd43b..0000000
--- a/erpnext/loan_management/dashboard_chart/new_loans/new_loans.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "based_on": "creation",
- "chart_name": "New Loans",
- "chart_type": "Count",
- "color": "#449CF0",
- "creation": "2021-02-06 16:59:27.509170",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "Loan",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan\",\"docstatus\",\"=\",\"1\",false]]",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "last_synced_on": "2021-02-21 20:55:33.515025",
- "modified": "2021-02-21 21:00:33.900821",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "New Loans",
- "number_of_groups": 0,
- "owner": "Administrator",
- "source": "",
- "time_interval": "Daily",
- "timeseries": 1,
- "timespan": "Last Month",
- "type": "Bar",
- "use_report_chart": 0,
- "value_based_on": "",
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/dashboard_chart/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json b/erpnext/loan_management/dashboard_chart/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json
deleted file mode 100644
index 76c27b0..0000000
--- a/erpnext/loan_management/dashboard_chart/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "based_on": "",
- "chart_name": "Top 10 Pledged Loan Securities",
- "chart_type": "Custom",
- "color": "#EC864B",
- "creation": "2021-02-06 22:02:46.284479",
- "docstatus": 0,
- "doctype": "Dashboard Chart",
- "document_type": "",
- "dynamic_filters_json": "[]",
- "filters_json": "[]",
- "group_by_type": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "last_synced_on": "2021-02-21 21:00:57.043034",
- "modified": "2021-02-21 21:01:10.048623",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Top 10 Pledged Loan Securities",
- "number_of_groups": 0,
- "owner": "Administrator",
- "source": "Top 10 Pledged Loan Securities",
- "time_interval": "Yearly",
- "timeseries": 0,
- "timespan": "Last Year",
- "type": "Bar",
- "use_report_chart": 0,
- "value_based_on": "",
- "y_axis": []
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/__init__.py b/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.js b/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.js
deleted file mode 100644
index 5817941..0000000
--- a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.js
+++ /dev/null
@@ -1,14 +0,0 @@
-frappe.provide('frappe.dashboards.chart_sources');
-
-frappe.dashboards.chart_sources["Top 10 Pledged Loan Securities"] = {
- method: "erpnext.loan_management.dashboard_chart_source.top_10_pledged_loan_securities.top_10_pledged_loan_securities.get_data",
- filters: [
- {
- fieldname: "company",
- label: __("Company"),
- fieldtype: "Link",
- options: "Company",
- default: frappe.defaults.get_user_default("Company")
- }
- ]
-};
diff --git a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json b/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json
deleted file mode 100644
index 42c9b1c..0000000
--- a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "creation": "2021-02-06 22:01:01.332628",
- "docstatus": 0,
- "doctype": "Dashboard Chart Source",
- "idx": 0,
- "modified": "2021-02-06 22:01:01.332628",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Top 10 Pledged Loan Securities",
- "owner": "Administrator",
- "source_name": "Top 10 Pledged Loan Securities ",
- "timeseries": 0
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.py b/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.py
deleted file mode 100644
index aab3d8c..0000000
--- a/erpnext/loan_management/dashboard_chart_source/top_10_pledged_loan_securities/top_10_pledged_loan_securities.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-
-import frappe
-from frappe.utils.dashboard import cache_source
-
-from erpnext.loan_management.report.applicant_wise_loan_security_exposure.applicant_wise_loan_security_exposure import (
- get_loan_security_details,
-)
-
-
-@frappe.whitelist()
-@cache_source
-def get_data(
- chart_name=None,
- chart=None,
- no_cache=None,
- filters=None,
- from_date=None,
- to_date=None,
- timespan=None,
- time_interval=None,
- heatmap_year=None,
-):
- if chart_name:
- chart = frappe.get_doc("Dashboard Chart", chart_name)
- else:
- chart = frappe._dict(frappe.parse_json(chart))
-
- filters = {}
- current_pledges = {}
-
- if filters:
- filters = frappe.parse_json(filters)[0]
-
- conditions = ""
- labels = []
- values = []
-
- if filters.get("company"):
- conditions = "AND company = %(company)s"
-
- loan_security_details = get_loan_security_details()
-
- unpledges = frappe._dict(
- frappe.db.sql(
- """
- SELECT u.loan_security, sum(u.qty) as qty
- FROM `tabLoan Security Unpledge` up, `tabUnpledge` u
- WHERE u.parent = up.name
- AND up.status = 'Approved'
- {conditions}
- GROUP BY u.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_list=1,
- )
- )
-
- pledges = frappe._dict(
- frappe.db.sql(
- """
- SELECT p.loan_security, sum(p.qty) as qty
- FROM `tabLoan Security Pledge` lp, `tabPledge`p
- WHERE p.parent = lp.name
- AND lp.status = 'Pledged'
- {conditions}
- GROUP BY p.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_list=1,
- )
- )
-
- for security, qty in pledges.items():
- current_pledges.setdefault(security, qty)
- current_pledges[security] -= unpledges.get(security, 0.0)
-
- sorted_pledges = dict(sorted(current_pledges.items(), key=lambda item: item[1], reverse=True))
-
- count = 0
- for security, qty in sorted_pledges.items():
- values.append(qty * loan_security_details.get(security, {}).get("latest_price", 0))
- labels.append(security)
- count += 1
-
- ## Just need top 10 securities
- if count == 10:
- break
-
- return {
- "labels": labels,
- "datasets": [{"name": "Top 10 Securities", "chartType": "bar", "values": values}],
- }
diff --git a/erpnext/loan_management/doctype/__init__.py b/erpnext/loan_management/doctype/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan/__init__.py b/erpnext/loan_management/doctype/loan/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan/loan.js b/erpnext/loan_management/doctype/loan/loan.js
deleted file mode 100644
index 20e2b0b..0000000
--- a/erpnext/loan_management/doctype/loan/loan.js
+++ /dev/null
@@ -1,281 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan', {
- setup: function(frm) {
- frm.make_methods = {
- 'Loan Disbursement': function() { frm.trigger('make_loan_disbursement') },
- 'Loan Security Unpledge': function() { frm.trigger('create_loan_security_unpledge') },
- 'Loan Write Off': function() { frm.trigger('make_loan_write_off_entry') }
- }
- },
- onload: function (frm) {
- // Ignore loan security pledge on cancel of loan
- frm.ignore_doctypes_on_cancel_all = ["Loan Security Pledge"];
-
- frm.set_query("loan_application", function () {
- return {
- "filters": {
- "applicant": frm.doc.applicant,
- "docstatus": 1,
- "status": "Approved"
- }
- };
- });
-
- frm.set_query("loan_type", function () {
- return {
- "filters": {
- "docstatus": 1,
- "company": frm.doc.company
- }
- };
- });
-
- $.each(["penalty_income_account", "interest_income_account"], function(i, field) {
- frm.set_query(field, function () {
- return {
- "filters": {
- "company": frm.doc.company,
- "root_type": "Income",
- "is_group": 0
- }
- };
- });
- });
-
- $.each(["payment_account", "loan_account", "disbursement_account"], function (i, field) {
- frm.set_query(field, function () {
- return {
- "filters": {
- "company": frm.doc.company,
- "root_type": "Asset",
- "is_group": 0
- }
- };
- });
- })
-
- },
-
- refresh: function (frm) {
- if (frm.doc.repayment_schedule_type == "Pro-rated calendar months") {
- frm.set_df_property("repayment_start_date", "label", "Interest Calculation Start Date");
- }
-
- if (frm.doc.docstatus == 1) {
- if (["Disbursed", "Partially Disbursed"].includes(frm.doc.status) && (!frm.doc.repay_from_salary)) {
- frm.add_custom_button(__('Request Loan Closure'), function() {
- frm.trigger("request_loan_closure");
- },__('Status'));
-
- frm.add_custom_button(__('Loan Repayment'), function() {
- frm.trigger("make_repayment_entry");
- },__('Create'));
- }
-
- if (["Sanctioned", "Partially Disbursed"].includes(frm.doc.status)) {
- frm.add_custom_button(__('Loan Disbursement'), function() {
- frm.trigger("make_loan_disbursement");
- },__('Create'));
- }
-
- if (frm.doc.status == "Loan Closure Requested") {
- frm.add_custom_button(__('Loan Security Unpledge'), function() {
- frm.trigger("create_loan_security_unpledge");
- },__('Create'));
- }
-
- if (["Loan Closure Requested", "Disbursed", "Partially Disbursed"].includes(frm.doc.status)) {
- frm.add_custom_button(__('Loan Write Off'), function() {
- frm.trigger("make_loan_write_off_entry");
- },__('Create'));
-
- frm.add_custom_button(__('Loan Refund'), function() {
- frm.trigger("make_loan_refund");
- },__('Create'));
- }
-
- if (frm.doc.status == "Loan Closure Requested" && frm.doc.is_term_loan && !frm.doc.is_secured_loan) {
- frm.add_custom_button(__('Close Loan'), function() {
- frm.trigger("close_unsecured_term_loan");
- },__('Status'));
- }
- }
- frm.trigger("toggle_fields");
- },
-
- repayment_schedule_type: function(frm) {
- if (frm.doc.repayment_schedule_type == "Pro-rated calendar months") {
- frm.set_df_property("repayment_start_date", "label", "Interest Calculation Start Date");
- } else {
- frm.set_df_property("repayment_start_date", "label", "Repayment Start Date");
- }
- },
-
- loan_type: function(frm) {
- frm.toggle_reqd("repayment_method", frm.doc.is_term_loan);
- frm.toggle_display("repayment_method", frm.doc.is_term_loan);
- frm.toggle_display("repayment_periods", frm.doc.is_term_loan);
- },
-
-
- make_loan_disbursement: function (frm) {
- frappe.call({
- args: {
- "loan": frm.doc.name,
- "company": frm.doc.company,
- "applicant_type": frm.doc.applicant_type,
- "applicant": frm.doc.applicant,
- "pending_amount": frm.doc.loan_amount - frm.doc.disbursed_amount > 0 ?
- frm.doc.loan_amount - frm.doc.disbursed_amount : 0,
- "as_dict": 1
- },
- method: "erpnext.loan_management.doctype.loan.loan.make_loan_disbursement",
- callback: function (r) {
- if (r.message)
- var doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- })
- },
-
- make_repayment_entry: function(frm) {
- frappe.call({
- args: {
- "loan": frm.doc.name,
- "applicant_type": frm.doc.applicant_type,
- "applicant": frm.doc.applicant,
- "loan_type": frm.doc.loan_type,
- "company": frm.doc.company,
- "as_dict": 1
- },
- method: "erpnext.loan_management.doctype.loan.loan.make_repayment_entry",
- callback: function (r) {
- if (r.message)
- var doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- })
- },
-
- make_loan_write_off_entry: function(frm) {
- frappe.call({
- args: {
- "loan": frm.doc.name,
- "company": frm.doc.company,
- "as_dict": 1
- },
- method: "erpnext.loan_management.doctype.loan.loan.make_loan_write_off",
- callback: function (r) {
- if (r.message)
- var doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- })
- },
-
- make_loan_refund: function(frm) {
- frappe.call({
- args: {
- "loan": frm.doc.name
- },
- method: "erpnext.loan_management.doctype.loan.loan.make_refund_jv",
- callback: function (r) {
- if (r.message) {
- let doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- }
- })
- },
-
- close_unsecured_term_loan: function(frm) {
- frappe.call({
- args: {
- "loan": frm.doc.name
- },
- method: "erpnext.loan_management.doctype.loan.loan.close_unsecured_term_loan",
- callback: function () {
- frm.refresh();
- }
- })
- },
-
- request_loan_closure: function(frm) {
- frappe.confirm(__("Do you really want to close this loan"),
- function() {
- frappe.call({
- args: {
- 'loan': frm.doc.name
- },
- method: "erpnext.loan_management.doctype.loan.loan.request_loan_closure",
- callback: function() {
- frm.reload_doc();
- }
- });
- }
- );
- },
-
- create_loan_security_unpledge: function(frm) {
- frappe.call({
- method: "erpnext.loan_management.doctype.loan.loan.unpledge_security",
- args : {
- "loan": frm.doc.name,
- "as_dict": 1
- },
- callback: function(r) {
- if (r.message)
- var doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- })
- },
-
- loan_application: function (frm) {
- if(frm.doc.loan_application){
- return frappe.call({
- method: "erpnext.loan_management.doctype.loan.loan.get_loan_application",
- args: {
- "loan_application": frm.doc.loan_application
- },
- callback: function (r) {
- if (!r.exc && r.message) {
-
- let loan_fields = ["loan_type", "loan_amount", "repayment_method",
- "monthly_repayment_amount", "repayment_periods", "rate_of_interest", "is_secured_loan"]
-
- loan_fields.forEach(field => {
- frm.set_value(field, r.message[field]);
- });
-
- if (frm.doc.is_secured_loan) {
- $.each(r.message.proposed_pledges, function(i, d) {
- let row = frm.add_child("securities");
- row.loan_security = d.loan_security;
- row.qty = d.qty;
- row.loan_security_price = d.loan_security_price;
- row.amount = d.amount;
- row.haircut = d.haircut;
- });
-
- frm.refresh_fields("securities");
- }
- }
- }
- });
- }
- },
-
- repayment_method: function (frm) {
- frm.trigger("toggle_fields")
- },
-
- toggle_fields: function (frm) {
- frm.toggle_enable("monthly_repayment_amount", frm.doc.repayment_method == "Repay Fixed Amount per Period")
- frm.toggle_enable("repayment_periods", frm.doc.repayment_method == "Repay Over Number of Periods")
- }
-});
diff --git a/erpnext/loan_management/doctype/loan/loan.json b/erpnext/loan_management/doctype/loan/loan.json
deleted file mode 100644
index dc8b03e..0000000
--- a/erpnext/loan_management/doctype/loan/loan.json
+++ /dev/null
@@ -1,452 +0,0 @@
-{
- "actions": [],
- "allow_import": 1,
- "autoname": "ACC-LOAN-.YYYY.-.#####",
- "creation": "2022-01-25 10:30:02.294967",
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "applicant_type",
- "applicant",
- "applicant_name",
- "loan_application",
- "column_break_3",
- "company",
- "posting_date",
- "status",
- "section_break_8",
- "loan_type",
- "repayment_schedule_type",
- "loan_amount",
- "rate_of_interest",
- "is_secured_loan",
- "disbursement_date",
- "closure_date",
- "disbursed_amount",
- "column_break_11",
- "maximum_loan_amount",
- "repayment_method",
- "repayment_periods",
- "monthly_repayment_amount",
- "repayment_start_date",
- "is_term_loan",
- "accounting_dimensions_section",
- "cost_center",
- "account_info",
- "mode_of_payment",
- "disbursement_account",
- "payment_account",
- "column_break_9",
- "loan_account",
- "interest_income_account",
- "penalty_income_account",
- "section_break_15",
- "repayment_schedule",
- "section_break_17",
- "total_payment",
- "total_principal_paid",
- "written_off_amount",
- "refund_amount",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "is_npa",
- "column_break_19",
- "total_interest_payable",
- "total_amount_paid",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "reqd": 1
- },
- {
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_standard_filter": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "reqd": 1
- },
- {
- "fieldname": "applicant_name",
- "fieldtype": "Data",
- "in_global_search": 1,
- "label": "Applicant Name",
- "read_only": 1
- },
- {
- "fieldname": "loan_application",
- "fieldtype": "Link",
- "label": "Loan Application",
- "no_copy": 1,
- "options": "Loan Application"
- },
- {
- "fieldname": "loan_type",
- "fieldtype": "Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Loan Type",
- "options": "Loan Type",
- "reqd": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "default": "Today",
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date",
- "no_copy": 1,
- "reqd": 1
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "in_standard_filter": 1,
- "label": "Company",
- "options": "Company",
- "remember_last_selected_value": 1,
- "reqd": 1
- },
- {
- "default": "Sanctioned",
- "fieldname": "status",
- "fieldtype": "Select",
- "in_standard_filter": 1,
- "label": "Status",
- "no_copy": 1,
- "options": "Sanctioned\nPartially Disbursed\nDisbursed\nLoan Closure Requested\nClosed",
- "read_only": 1
- },
- {
- "fieldname": "section_break_8",
- "fieldtype": "Section Break",
- "label": "Loan Details"
- },
- {
- "fieldname": "loan_amount",
- "fieldtype": "Currency",
- "label": "Loan Amount",
- "non_negative": 1,
- "options": "Company:company:default_currency"
- },
- {
- "fetch_from": "loan_type.rate_of_interest",
- "fieldname": "rate_of_interest",
- "fieldtype": "Percent",
- "label": "Rate of Interest (%) / Year",
- "read_only": 1,
- "reqd": 1
- },
- {
- "depends_on": "eval:doc.status==\"Disbursed\"",
- "fieldname": "disbursement_date",
- "fieldtype": "Date",
- "label": "Disbursement Date",
- "no_copy": 1
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "repayment_start_date",
- "fieldtype": "Date",
- "label": "Repayment Start Date",
- "mandatory_depends_on": "is_term_loan"
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break"
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "repayment_method",
- "fieldtype": "Select",
- "label": "Repayment Method",
- "options": "\nRepay Fixed Amount per Period\nRepay Over Number of Periods"
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "repayment_periods",
- "fieldtype": "Int",
- "label": "Repayment Period in Months"
- },
- {
- "depends_on": "is_term_loan",
- "fetch_from": "loan_application.repayment_amount",
- "fetch_if_empty": 1,
- "fieldname": "monthly_repayment_amount",
- "fieldtype": "Currency",
- "label": "Monthly Repayment Amount",
- "options": "Company:company:default_currency"
- },
- {
- "collapsible": 1,
- "fieldname": "account_info",
- "fieldtype": "Section Break",
- "label": "Account Info"
- },
- {
- "fetch_from": "loan_type.mode_of_payment",
- "fieldname": "mode_of_payment",
- "fieldtype": "Link",
- "label": "Mode of Payment",
- "options": "Mode of Payment",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fetch_from": "loan_type.payment_account",
- "fieldname": "payment_account",
- "fieldtype": "Link",
- "label": "Payment Account",
- "options": "Account",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fieldname": "column_break_9",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan_type.loan_account",
- "fieldname": "loan_account",
- "fieldtype": "Link",
- "label": "Loan Account",
- "options": "Account",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fetch_from": "loan_type.interest_income_account",
- "fieldname": "interest_income_account",
- "fieldtype": "Link",
- "label": "Interest Income Account",
- "options": "Account",
- "read_only": 1,
- "reqd": 1
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "section_break_15",
- "fieldtype": "Section Break",
- "label": "Repayment Schedule"
- },
- {
- "allow_on_submit": 1,
- "depends_on": "eval:doc.is_term_loan == 1",
- "fieldname": "repayment_schedule",
- "fieldtype": "Table",
- "label": "Repayment Schedule",
- "no_copy": 1,
- "options": "Repayment Schedule",
- "read_only": 1
- },
- {
- "fieldname": "section_break_17",
- "fieldtype": "Section Break",
- "label": "Totals"
- },
- {
- "default": "0",
- "fieldname": "total_payment",
- "fieldtype": "Currency",
- "label": "Total Payable Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "column_break_19",
- "fieldtype": "Column Break"
- },
- {
- "default": "0",
- "depends_on": "is_term_loan",
- "fieldname": "total_interest_payable",
- "fieldtype": "Currency",
- "label": "Total Interest Payable",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "allow_on_submit": 1,
- "fieldname": "total_amount_paid",
- "fieldtype": "Currency",
- "label": "Total Amount Paid",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "default": "0",
- "fieldname": "is_secured_loan",
- "fieldtype": "Check",
- "label": "Is Secured Loan"
- },
- {
- "default": "0",
- "fetch_from": "loan_type.is_term_loan",
- "fieldname": "is_term_loan",
- "fieldtype": "Check",
- "label": "Is Term Loan",
- "read_only": 1
- },
- {
- "fetch_from": "loan_type.penalty_income_account",
- "fieldname": "penalty_income_account",
- "fieldtype": "Link",
- "label": "Penalty Income Account",
- "options": "Account",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fieldname": "total_principal_paid",
- "fieldtype": "Currency",
- "label": "Total Principal Paid",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "disbursed_amount",
- "fieldtype": "Currency",
- "label": "Disbursed Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "depends_on": "eval:doc.is_secured_loan",
- "fieldname": "maximum_loan_amount",
- "fieldtype": "Currency",
- "label": "Maximum Loan Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "written_off_amount",
- "fieldtype": "Currency",
- "label": "Written Off Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "closure_date",
- "fieldtype": "Date",
- "label": "Closure Date",
- "read_only": 1
- },
- {
- "fetch_from": "loan_type.disbursement_account",
- "fieldname": "disbursement_account",
- "fieldtype": "Link",
- "label": "Disbursement Account",
- "options": "Account",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fieldname": "refund_amount",
- "fieldtype": "Currency",
- "label": "Refund amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "credit_adjustment_amount",
- "fieldtype": "Currency",
- "label": "Credit Adjustment Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "debit_adjustment_amount",
- "fieldtype": "Currency",
- "label": "Debit Adjustment Amount",
- "options": "Company:company:default_currency"
- },
- {
- "default": "0",
- "description": "Mark Loan as a Nonperforming asset",
- "fieldname": "is_npa",
- "fieldtype": "Check",
- "label": "Is NPA"
- },
- {
- "depends_on": "is_term_loan",
- "fetch_from": "loan_type.repayment_schedule_type",
- "fieldname": "repayment_schedule_type",
- "fieldtype": "Data",
- "label": "Repayment Schedule Type",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-09-30 10:36:47.902903",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "read": 1,
- "role": "Employee"
- }
- ],
- "search_fields": "posting_date",
- "sort_field": "creation",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py
deleted file mode 100644
index 0c9c97f..0000000
--- a/erpnext/loan_management/doctype/loan/loan.py
+++ /dev/null
@@ -1,611 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import json
-import math
-
-import frappe
-from frappe import _
-from frappe.utils import (
- add_days,
- add_months,
- date_diff,
- flt,
- get_last_day,
- getdate,
- now_datetime,
- nowdate,
-)
-
-import erpnext
-from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import calculate_amounts
-from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpledge import (
- get_pledged_security_qty,
-)
-
-
-class Loan(AccountsController):
- def validate(self):
- self.set_loan_amount()
- self.validate_loan_amount()
- self.set_missing_fields()
- self.validate_cost_center()
- self.validate_accounts()
- self.check_sanctioned_amount_limit()
-
- if self.is_term_loan:
- validate_repayment_method(
- self.repayment_method,
- self.loan_amount,
- self.monthly_repayment_amount,
- self.repayment_periods,
- self.is_term_loan,
- )
- self.make_repayment_schedule()
- self.set_repayment_period()
-
- self.calculate_totals()
-
- def validate_accounts(self):
- for fieldname in [
- "payment_account",
- "loan_account",
- "interest_income_account",
- "penalty_income_account",
- ]:
- company = frappe.get_value("Account", self.get(fieldname), "company")
-
- if company != self.company:
- frappe.throw(
- _("Account {0} does not belongs to company {1}").format(
- frappe.bold(self.get(fieldname)), frappe.bold(self.company)
- )
- )
-
- def validate_cost_center(self):
- if not self.cost_center and self.rate_of_interest != 0.0:
- self.cost_center = frappe.db.get_value("Company", self.company, "cost_center")
-
- if not self.cost_center:
- frappe.throw(_("Cost center is mandatory for loans having rate of interest greater than 0"))
-
- def on_submit(self):
- self.link_loan_security_pledge()
- # Interest accrual for backdated term loans
- self.accrue_loan_interest()
-
- def on_cancel(self):
- self.unlink_loan_security_pledge()
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
-
- def set_missing_fields(self):
- if not self.company:
- self.company = erpnext.get_default_company()
-
- if not self.posting_date:
- self.posting_date = nowdate()
-
- if self.loan_type and not self.rate_of_interest:
- self.rate_of_interest = frappe.db.get_value("Loan Type", self.loan_type, "rate_of_interest")
-
- if self.repayment_method == "Repay Over Number of Periods":
- self.monthly_repayment_amount = get_monthly_repayment_amount(
- self.loan_amount, self.rate_of_interest, self.repayment_periods
- )
-
- def check_sanctioned_amount_limit(self):
- sanctioned_amount_limit = get_sanctioned_amount_limit(
- self.applicant_type, self.applicant, self.company
- )
- if sanctioned_amount_limit:
- total_loan_amount = get_total_loan_amount(self.applicant_type, self.applicant, self.company)
-
- if sanctioned_amount_limit and flt(self.loan_amount) + flt(total_loan_amount) > flt(
- sanctioned_amount_limit
- ):
- frappe.throw(
- _("Sanctioned Amount limit crossed for {0} {1}").format(
- self.applicant_type, frappe.bold(self.applicant)
- )
- )
-
- def make_repayment_schedule(self):
- if not self.repayment_start_date:
- frappe.throw(_("Repayment Start Date is mandatory for term loans"))
-
- schedule_type_details = frappe.db.get_value(
- "Loan Type", self.loan_type, ["repayment_schedule_type", "repayment_date_on"], as_dict=1
- )
-
- self.repayment_schedule = []
- payment_date = self.repayment_start_date
- balance_amount = self.loan_amount
-
- while balance_amount > 0:
- interest_amount, principal_amount, balance_amount, total_payment = self.get_amounts(
- payment_date,
- balance_amount,
- schedule_type_details.repayment_schedule_type,
- schedule_type_details.repayment_date_on,
- )
-
- if schedule_type_details.repayment_schedule_type == "Pro-rated calendar months":
- next_payment_date = get_last_day(payment_date)
- if schedule_type_details.repayment_date_on == "Start of the next month":
- next_payment_date = add_days(next_payment_date, 1)
-
- payment_date = next_payment_date
-
- self.add_repayment_schedule_row(
- payment_date, principal_amount, interest_amount, total_payment, balance_amount
- )
-
- if (
- schedule_type_details.repayment_schedule_type == "Monthly as per repayment start date"
- or schedule_type_details.repayment_date_on == "End of the current month"
- ):
- next_payment_date = add_single_month(payment_date)
- payment_date = next_payment_date
-
- def get_amounts(self, payment_date, balance_amount, schedule_type, repayment_date_on):
- if schedule_type == "Monthly as per repayment start date":
- days = 1
- months = 12
- else:
- expected_payment_date = get_last_day(payment_date)
- if repayment_date_on == "Start of the next month":
- expected_payment_date = add_days(expected_payment_date, 1)
-
- if expected_payment_date == payment_date:
- # using 30 days for calculating interest for all full months
- days = 30
- months = 365
- else:
- days = date_diff(get_last_day(payment_date), payment_date)
- months = 365
-
- interest_amount = flt(balance_amount * flt(self.rate_of_interest) * days / (months * 100))
- principal_amount = self.monthly_repayment_amount - interest_amount
- balance_amount = flt(balance_amount + interest_amount - self.monthly_repayment_amount)
- if balance_amount < 0:
- principal_amount += balance_amount
- balance_amount = 0.0
-
- total_payment = principal_amount + interest_amount
-
- return interest_amount, principal_amount, balance_amount, total_payment
-
- def add_repayment_schedule_row(
- self, payment_date, principal_amount, interest_amount, total_payment, balance_loan_amount
- ):
- self.append(
- "repayment_schedule",
- {
- "payment_date": payment_date,
- "principal_amount": principal_amount,
- "interest_amount": interest_amount,
- "total_payment": total_payment,
- "balance_loan_amount": balance_loan_amount,
- },
- )
-
- def set_repayment_period(self):
- if self.repayment_method == "Repay Fixed Amount per Period":
- repayment_periods = len(self.repayment_schedule)
-
- self.repayment_periods = repayment_periods
-
- def calculate_totals(self):
- self.total_payment = 0
- self.total_interest_payable = 0
- self.total_amount_paid = 0
-
- if self.is_term_loan:
- for data in self.repayment_schedule:
- self.total_payment += data.total_payment
- self.total_interest_payable += data.interest_amount
- else:
- self.total_payment = self.loan_amount
-
- def set_loan_amount(self):
- if self.loan_application and not self.loan_amount:
- self.loan_amount = frappe.db.get_value("Loan Application", self.loan_application, "loan_amount")
-
- def validate_loan_amount(self):
- if self.maximum_loan_amount and self.loan_amount > self.maximum_loan_amount:
- msg = _("Loan amount cannot be greater than {0}").format(self.maximum_loan_amount)
- frappe.throw(msg)
-
- if not self.loan_amount:
- frappe.throw(_("Loan amount is mandatory"))
-
- def link_loan_security_pledge(self):
- if self.is_secured_loan and self.loan_application:
- maximum_loan_value = frappe.db.get_value(
- "Loan Security Pledge",
- {"loan_application": self.loan_application, "status": "Requested"},
- "sum(maximum_loan_value)",
- )
-
- if maximum_loan_value:
- frappe.db.sql(
- """
- UPDATE `tabLoan Security Pledge`
- SET loan = %s, pledge_time = %s, status = 'Pledged'
- WHERE status = 'Requested' and loan_application = %s
- """,
- (self.name, now_datetime(), self.loan_application),
- )
-
- self.db_set("maximum_loan_amount", maximum_loan_value)
-
- def accrue_loan_interest(self):
- from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_term_loans,
- )
-
- if getdate(self.repayment_start_date) < getdate() and self.is_term_loan:
- process_loan_interest_accrual_for_term_loans(
- posting_date=getdate(), loan_type=self.loan_type, loan=self.name
- )
-
- def unlink_loan_security_pledge(self):
- pledges = frappe.get_all("Loan Security Pledge", fields=["name"], filters={"loan": self.name})
- pledge_list = [d.name for d in pledges]
- if pledge_list:
- frappe.db.sql(
- """UPDATE `tabLoan Security Pledge` SET
- loan = '', status = 'Unpledged'
- where name in (%s) """
- % (", ".join(["%s"] * len(pledge_list))),
- tuple(pledge_list),
- ) # nosec
-
-
-def update_total_amount_paid(doc):
- total_amount_paid = 0
- for data in doc.repayment_schedule:
- if data.paid:
- total_amount_paid += data.total_payment
- frappe.db.set_value("Loan", doc.name, "total_amount_paid", total_amount_paid)
-
-
-def get_total_loan_amount(applicant_type, applicant, company):
- pending_amount = 0
- loan_details = frappe.db.get_all(
- "Loan",
- filters={
- "applicant_type": applicant_type,
- "company": company,
- "applicant": applicant,
- "docstatus": 1,
- "status": ("!=", "Closed"),
- },
- fields=[
- "status",
- "total_payment",
- "disbursed_amount",
- "total_interest_payable",
- "total_principal_paid",
- "written_off_amount",
- ],
- )
-
- interest_amount = flt(
- frappe.db.get_value(
- "Loan Interest Accrual",
- {"applicant_type": applicant_type, "company": company, "applicant": applicant, "docstatus": 1},
- "sum(interest_amount - paid_interest_amount)",
- )
- )
-
- for loan in loan_details:
- if loan.status in ("Disbursed", "Loan Closure Requested"):
- pending_amount += (
- flt(loan.total_payment)
- - flt(loan.total_interest_payable)
- - flt(loan.total_principal_paid)
- - flt(loan.written_off_amount)
- )
- elif loan.status == "Partially Disbursed":
- pending_amount += (
- flt(loan.disbursed_amount)
- - flt(loan.total_interest_payable)
- - flt(loan.total_principal_paid)
- - flt(loan.written_off_amount)
- )
- elif loan.status == "Sanctioned":
- pending_amount += flt(loan.total_payment)
-
- pending_amount += interest_amount
-
- return pending_amount
-
-
-def get_sanctioned_amount_limit(applicant_type, applicant, company):
- return frappe.db.get_value(
- "Sanctioned Loan Amount",
- {"applicant_type": applicant_type, "company": company, "applicant": applicant},
- "sanctioned_amount_limit",
- )
-
-
-def validate_repayment_method(
- repayment_method, loan_amount, monthly_repayment_amount, repayment_periods, is_term_loan
-):
-
- if is_term_loan and not repayment_method:
- frappe.throw(_("Repayment Method is mandatory for term loans"))
-
- if repayment_method == "Repay Over Number of Periods" and not repayment_periods:
- frappe.throw(_("Please enter Repayment Periods"))
-
- if repayment_method == "Repay Fixed Amount per Period":
- if not monthly_repayment_amount:
- frappe.throw(_("Please enter repayment Amount"))
- if monthly_repayment_amount > loan_amount:
- frappe.throw(_("Monthly Repayment Amount cannot be greater than Loan Amount"))
-
-
-def get_monthly_repayment_amount(loan_amount, rate_of_interest, repayment_periods):
- if rate_of_interest:
- monthly_interest_rate = flt(rate_of_interest) / (12 * 100)
- monthly_repayment_amount = math.ceil(
- (loan_amount * monthly_interest_rate * (1 + monthly_interest_rate) ** repayment_periods)
- / ((1 + monthly_interest_rate) ** repayment_periods - 1)
- )
- else:
- monthly_repayment_amount = math.ceil(flt(loan_amount) / repayment_periods)
- return monthly_repayment_amount
-
-
-@frappe.whitelist()
-def request_loan_closure(loan, posting_date=None):
- if not posting_date:
- posting_date = getdate()
-
- amounts = calculate_amounts(loan, posting_date)
- pending_amount = (
- amounts["pending_principal_amount"]
- + amounts["unaccrued_interest"]
- + amounts["interest_amount"]
- + amounts["penalty_amount"]
- )
-
- loan_type = frappe.get_value("Loan", loan, "loan_type")
- write_off_limit = frappe.get_value("Loan Type", loan_type, "write_off_amount")
-
- if pending_amount and abs(pending_amount) < write_off_limit:
- # Auto create loan write off and update status as loan closure requested
- write_off = make_loan_write_off(loan)
- write_off.submit()
- elif pending_amount > 0:
- frappe.throw(_("Cannot close loan as there is an outstanding of {0}").format(pending_amount))
-
- frappe.db.set_value("Loan", loan, "status", "Loan Closure Requested")
-
-
-@frappe.whitelist()
-def get_loan_application(loan_application):
- loan = frappe.get_doc("Loan Application", loan_application)
- if loan:
- return loan.as_dict()
-
-
-@frappe.whitelist()
-def close_unsecured_term_loan(loan):
- loan_details = frappe.db.get_value(
- "Loan", {"name": loan}, ["status", "is_term_loan", "is_secured_loan"], as_dict=1
- )
-
- if (
- loan_details.status == "Loan Closure Requested"
- and loan_details.is_term_loan
- and not loan_details.is_secured_loan
- ):
- frappe.db.set_value("Loan", loan, "status", "Closed")
- else:
- frappe.throw(_("Cannot close this loan until full repayment"))
-
-
-def close_loan(loan, total_amount_paid):
- frappe.db.set_value("Loan", loan, "total_amount_paid", total_amount_paid)
- frappe.db.set_value("Loan", loan, "status", "Closed")
-
-
-@frappe.whitelist()
-def make_loan_disbursement(loan, company, applicant_type, applicant, pending_amount=0, as_dict=0):
- disbursement_entry = frappe.new_doc("Loan Disbursement")
- disbursement_entry.against_loan = loan
- disbursement_entry.applicant_type = applicant_type
- disbursement_entry.applicant = applicant
- disbursement_entry.company = company
- disbursement_entry.disbursement_date = nowdate()
- disbursement_entry.posting_date = nowdate()
-
- disbursement_entry.disbursed_amount = pending_amount
- if as_dict:
- return disbursement_entry.as_dict()
- else:
- return disbursement_entry
-
-
-@frappe.whitelist()
-def make_repayment_entry(loan, applicant_type, applicant, loan_type, company, as_dict=0):
- repayment_entry = frappe.new_doc("Loan Repayment")
- repayment_entry.against_loan = loan
- repayment_entry.applicant_type = applicant_type
- repayment_entry.applicant = applicant
- repayment_entry.company = company
- repayment_entry.loan_type = loan_type
- repayment_entry.posting_date = nowdate()
-
- if as_dict:
- return repayment_entry.as_dict()
- else:
- return repayment_entry
-
-
-@frappe.whitelist()
-def make_loan_write_off(loan, company=None, posting_date=None, amount=0, as_dict=0):
- if not company:
- company = frappe.get_value("Loan", loan, "company")
-
- if not posting_date:
- posting_date = getdate()
-
- amounts = calculate_amounts(loan, posting_date)
- pending_amount = amounts["pending_principal_amount"]
-
- if amount and (amount > pending_amount):
- frappe.throw(_("Write Off amount cannot be greater than pending loan amount"))
-
- if not amount:
- amount = pending_amount
-
- # get default write off account from company master
- write_off_account = frappe.get_value("Company", company, "write_off_account")
-
- write_off = frappe.new_doc("Loan Write Off")
- write_off.loan = loan
- write_off.posting_date = posting_date
- write_off.write_off_account = write_off_account
- write_off.write_off_amount = amount
- write_off.save()
-
- if as_dict:
- return write_off.as_dict()
- else:
- return write_off
-
-
-@frappe.whitelist()
-def unpledge_security(
- loan=None, loan_security_pledge=None, security_map=None, as_dict=0, save=0, submit=0, approve=0
-):
- # if no security_map is passed it will be considered as full unpledge
- if security_map and isinstance(security_map, str):
- security_map = json.loads(security_map)
-
- if loan:
- pledge_qty_map = security_map or get_pledged_security_qty(loan)
- loan_doc = frappe.get_doc("Loan", loan)
- unpledge_request = create_loan_security_unpledge(
- pledge_qty_map, loan_doc.name, loan_doc.company, loan_doc.applicant_type, loan_doc.applicant
- )
- # will unpledge qty based on loan security pledge
- elif loan_security_pledge:
- security_map = {}
- pledge_doc = frappe.get_doc("Loan Security Pledge", loan_security_pledge)
- for security in pledge_doc.securities:
- security_map.setdefault(security.loan_security, security.qty)
-
- unpledge_request = create_loan_security_unpledge(
- security_map,
- pledge_doc.loan,
- pledge_doc.company,
- pledge_doc.applicant_type,
- pledge_doc.applicant,
- )
-
- if save:
- unpledge_request.save()
-
- if submit:
- unpledge_request.submit()
-
- if approve:
- if unpledge_request.docstatus == 1:
- unpledge_request.status = "Approved"
- unpledge_request.save()
- else:
- frappe.throw(_("Only submittted unpledge requests can be approved"))
-
- if as_dict:
- return unpledge_request
- else:
- return unpledge_request
-
-
-def create_loan_security_unpledge(unpledge_map, loan, company, applicant_type, applicant):
- unpledge_request = frappe.new_doc("Loan Security Unpledge")
- unpledge_request.applicant_type = applicant_type
- unpledge_request.applicant = applicant
- unpledge_request.loan = loan
- unpledge_request.company = company
-
- for security, qty in unpledge_map.items():
- if qty:
- unpledge_request.append("securities", {"loan_security": security, "qty": qty})
-
- return unpledge_request
-
-
-@frappe.whitelist()
-def get_shortfall_applicants():
- loans = frappe.get_all("Loan Security Shortfall", {"status": "Pending"}, pluck="loan")
- applicants = set(frappe.get_all("Loan", {"name": ("in", loans)}, pluck="name"))
-
- return {"value": len(applicants), "fieldtype": "Int"}
-
-
-def add_single_month(date):
- if getdate(date) == get_last_day(date):
- return get_last_day(add_months(date, 1))
- else:
- return add_months(date, 1)
-
-
-@frappe.whitelist()
-def make_refund_jv(loan, amount=0, reference_number=None, reference_date=None, submit=0):
- loan_details = frappe.db.get_value(
- "Loan",
- loan,
- [
- "applicant_type",
- "applicant",
- "loan_account",
- "payment_account",
- "posting_date",
- "company",
- "name",
- "total_payment",
- "total_principal_paid",
- ],
- as_dict=1,
- )
-
- loan_details.doctype = "Loan"
- loan_details[loan_details.applicant_type.lower()] = loan_details.applicant
-
- if not amount:
- amount = flt(loan_details.total_principal_paid - loan_details.total_payment)
-
- if amount < 0:
- frappe.throw(_("No excess amount pending for refund"))
-
- refund_jv = get_payment_entry(
- loan_details,
- {
- "party_type": loan_details.applicant_type,
- "party_account": loan_details.loan_account,
- "amount_field_party": "debit_in_account_currency",
- "amount_field_bank": "credit_in_account_currency",
- "amount": amount,
- "bank_account": loan_details.payment_account,
- },
- )
-
- if reference_number:
- refund_jv.cheque_no = reference_number
-
- if reference_date:
- refund_jv.cheque_date = reference_date
-
- if submit:
- refund_jv.submit()
-
- return refund_jv
diff --git a/erpnext/loan_management/doctype/loan/loan_dashboard.py b/erpnext/loan_management/doctype/loan/loan_dashboard.py
deleted file mode 100644
index 971d545..0000000
--- a/erpnext/loan_management/doctype/loan/loan_dashboard.py
+++ /dev/null
@@ -1,19 +0,0 @@
-def get_data():
- return {
- "fieldname": "loan",
- "non_standard_fieldnames": {
- "Loan Disbursement": "against_loan",
- "Loan Repayment": "against_loan",
- },
- "transactions": [
- {"items": ["Loan Security Pledge", "Loan Security Shortfall", "Loan Disbursement"]},
- {
- "items": [
- "Loan Repayment",
- "Loan Interest Accrual",
- "Loan Write Off",
- "Loan Security Unpledge",
- ]
- },
- ],
- }
diff --git a/erpnext/loan_management/doctype/loan/loan_list.js b/erpnext/loan_management/doctype/loan/loan_list.js
deleted file mode 100644
index 6591b72..0000000
--- a/erpnext/loan_management/doctype/loan/loan_list.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.listview_settings['Loan'] = {
- get_indicator: function(doc) {
- var status_color = {
- "Draft": "red",
- "Sanctioned": "blue",
- "Disbursed": "orange",
- "Partially Disbursed": "yellow",
- "Loan Closure Requested": "green",
- "Closed": "green"
- };
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
- },
-};
diff --git a/erpnext/loan_management/doctype/loan/test_loan.py b/erpnext/loan_management/doctype/loan/test_loan.py
deleted file mode 100644
index 388e65d..0000000
--- a/erpnext/loan_management/doctype/loan/test_loan.py
+++ /dev/null
@@ -1,1433 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import (
- add_days,
- add_months,
- add_to_date,
- date_diff,
- flt,
- format_date,
- get_datetime,
- nowdate,
-)
-
-from erpnext.loan_management.doctype.loan.loan import (
- make_loan_write_off,
- request_loan_closure,
- unpledge_security,
-)
-from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
-from erpnext.loan_management.doctype.loan_disbursement.loan_disbursement import (
- get_disbursal_amount,
-)
-from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
- days_in_year,
-)
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import calculate_amounts
-from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpledge import (
- get_pledged_security_qty,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
- process_loan_interest_accrual_for_term_loans,
-)
-from erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall import (
- create_process_loan_security_shortfall,
-)
-from erpnext.selling.doctype.customer.test_customer import get_customer_dict
-from erpnext.setup.doctype.employee.test_employee import make_employee
-
-
-class TestLoan(unittest.TestCase):
- def setUp(self):
- create_loan_accounts()
- create_loan_type(
- "Personal Loan",
- 500000,
- 8.4,
- is_term_loan=1,
- mode_of_payment="Cash",
- disbursement_account="Disbursement Account - _TC",
- payment_account="Payment Account - _TC",
- loan_account="Loan Account - _TC",
- interest_income_account="Interest Income Account - _TC",
- penalty_income_account="Penalty Income Account - _TC",
- repayment_schedule_type="Monthly as per repayment start date",
- )
-
- create_loan_type(
- "Term Loan Type 1",
- 12000,
- 7.5,
- is_term_loan=1,
- mode_of_payment="Cash",
- disbursement_account="Disbursement Account - _TC",
- payment_account="Payment Account - _TC",
- loan_account="Loan Account - _TC",
- interest_income_account="Interest Income Account - _TC",
- penalty_income_account="Penalty Income Account - _TC",
- repayment_schedule_type="Monthly as per repayment start date",
- )
-
- create_loan_type(
- "Term Loan Type 2",
- 12000,
- 7.5,
- is_term_loan=1,
- mode_of_payment="Cash",
- disbursement_account="Disbursement Account - _TC",
- payment_account="Payment Account - _TC",
- loan_account="Loan Account - _TC",
- interest_income_account="Interest Income Account - _TC",
- penalty_income_account="Penalty Income Account - _TC",
- repayment_schedule_type="Pro-rated calendar months",
- repayment_date_on="Start of the next month",
- )
-
- create_loan_type(
- "Term Loan Type 3",
- 12000,
- 7.5,
- is_term_loan=1,
- mode_of_payment="Cash",
- disbursement_account="Disbursement Account - _TC",
- payment_account="Payment Account - _TC",
- loan_account="Loan Account - _TC",
- interest_income_account="Interest Income Account - _TC",
- penalty_income_account="Penalty Income Account - _TC",
- repayment_schedule_type="Pro-rated calendar months",
- repayment_date_on="End of the current month",
- )
-
- create_loan_type(
- "Stock Loan",
- 2000000,
- 13.5,
- 25,
- 1,
- 5,
- "Cash",
- "Disbursement Account - _TC",
- "Payment Account - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- repayment_schedule_type="Monthly as per repayment start date",
- )
-
- create_loan_type(
- "Demand Loan",
- 2000000,
- 13.5,
- 25,
- 0,
- 5,
- "Cash",
- "Disbursement Account - _TC",
- "Payment Account - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- )
-
- create_loan_security_type()
- create_loan_security()
-
- create_loan_security_price(
- "Test Security 1", 500, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))
- )
- create_loan_security_price(
- "Test Security 2", 250, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))
- )
-
- self.applicant1 = make_employee("robert_loan@loan.com")
- if not frappe.db.exists("Customer", "_Test Loan Customer"):
- frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Customer", "_Test Loan Customer 1"):
- frappe.get_doc(get_customer_dict("_Test Loan Customer 1")).insert(ignore_permissions=True)
-
- self.applicant2 = frappe.db.get_value("Customer", {"name": "_Test Loan Customer"}, "name")
- self.applicant3 = frappe.db.get_value("Customer", {"name": "_Test Loan Customer 1"}, "name")
-
- create_loan(self.applicant1, "Personal Loan", 280000, "Repay Over Number of Periods", 20)
-
- def test_loan(self):
- loan = frappe.get_doc("Loan", {"applicant": self.applicant1})
- self.assertEqual(loan.monthly_repayment_amount, 15052)
- self.assertEqual(flt(loan.total_interest_payable, 0), 21034)
- self.assertEqual(flt(loan.total_payment, 0), 301034)
-
- schedule = loan.repayment_schedule
-
- self.assertEqual(len(schedule), 20)
-
- for idx, principal_amount, interest_amount, balance_loan_amount in [
- [3, 13369, 1683, 227080],
- [19, 14941, 105, 0],
- [17, 14740, 312, 29785],
- ]:
- self.assertEqual(flt(schedule[idx].principal_amount, 0), principal_amount)
- self.assertEqual(flt(schedule[idx].interest_amount, 0), interest_amount)
- self.assertEqual(flt(schedule[idx].balance_loan_amount, 0), balance_loan_amount)
-
- loan.repayment_method = "Repay Fixed Amount per Period"
- loan.monthly_repayment_amount = 14000
- loan.save()
-
- self.assertEqual(len(loan.repayment_schedule), 22)
- self.assertEqual(flt(loan.total_interest_payable, 0), 22712)
- self.assertEqual(flt(loan.total_payment, 0), 302712)
-
- def test_loan_with_security(self):
-
- pledge = [
- {
- "loan_security": "Test Security 1",
- "qty": 4000.00,
- }
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledge, "Repay Over Number of Periods", 12
- )
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application
- )
- self.assertEqual(loan.loan_amount, 1000000)
-
- def test_loan_disbursement(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledge, "Repay Over Number of Periods", 12
- )
-
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application
- )
- self.assertEqual(loan.loan_amount, 1000000)
-
- loan.submit()
-
- loan_disbursement_entry1 = make_loan_disbursement_entry(loan.name, 500000)
- loan_disbursement_entry2 = make_loan_disbursement_entry(loan.name, 500000)
-
- loan = frappe.get_doc("Loan", loan.name)
- gl_entries1 = frappe.db.get_all(
- "GL Entry",
- fields=["name"],
- filters={"voucher_type": "Loan Disbursement", "voucher_no": loan_disbursement_entry1.name},
- )
-
- gl_entries2 = frappe.db.get_all(
- "GL Entry",
- fields=["name"],
- filters={"voucher_type": "Loan Disbursement", "voucher_no": loan_disbursement_entry2.name},
- )
-
- self.assertEqual(loan.status, "Disbursed")
- self.assertEqual(loan.disbursed_amount, 1000000)
- self.assertTrue(gl_entries1)
- self.assertTrue(gl_entries2)
-
- def test_sanctioned_amount_limit(self):
- # Clear loan docs before checking
- frappe.db.sql("DELETE FROM `tabLoan` where applicant = '_Test Loan Customer 1'")
- frappe.db.sql("DELETE FROM `tabLoan Application` where applicant = '_Test Loan Customer 1'")
- frappe.db.sql("DELETE FROM `tabLoan Security Pledge` where applicant = '_Test Loan Customer 1'")
-
- if not frappe.db.get_value(
- "Sanctioned Loan Amount",
- filters={
- "applicant_type": "Customer",
- "applicant": "_Test Loan Customer 1",
- "company": "_Test Company",
- },
- ):
- frappe.get_doc(
- {
- "doctype": "Sanctioned Loan Amount",
- "applicant_type": "Customer",
- "applicant": "_Test Loan Customer 1",
- "sanctioned_amount_limit": 1500000,
- "company": "_Test Company",
- }
- ).insert(ignore_permissions=True)
-
- # Make First Loan
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant3, "Demand Loan", pledge
- )
- create_pledge(loan_application)
- loan = create_demand_loan(
- self.applicant3, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- # Make second loan greater than the sanctioned amount
- loan_application = create_loan_application(
- "_Test Company", self.applicant3, "Demand Loan", pledge, do_not_save=True
- )
- self.assertRaises(frappe.ValidationError, loan_application.save)
-
- def test_regular_loan_repayment(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- accrued_interest_amount = flt(
- (loan.loan_amount * loan.rate_of_interest * no_of_days)
- / (days_in_year(get_datetime(first_date).year) * 100),
- 2,
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
-
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, add_days(last_date, 10), 111119
- )
- repayment_entry.save()
- repayment_entry.submit()
-
- penalty_amount = (accrued_interest_amount * 5 * 25) / 100
- self.assertEqual(flt(repayment_entry.penalty_amount, 0), flt(penalty_amount, 0))
-
- amounts = frappe.db.get_all(
- "Loan Interest Accrual", {"loan": loan.name}, ["paid_interest_amount"]
- )
-
- loan.load_from_db()
-
- total_interest_paid = amounts[0]["paid_interest_amount"] + amounts[1]["paid_interest_amount"]
- self.assertEqual(amounts[1]["paid_interest_amount"], repayment_entry.interest_payable)
- self.assertEqual(
- flt(loan.total_principal_paid, 0),
- flt(repayment_entry.amount_paid - penalty_amount - total_interest_paid, 0),
- )
-
- # Check Repayment Entry cancel
- repayment_entry.load_from_db()
- repayment_entry.cancel()
-
- loan.load_from_db()
- self.assertEqual(loan.total_principal_paid, 0)
- self.assertEqual(loan.total_principal_paid, 0)
-
- def test_loan_closure(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- # Adding 5 since repayment is made 5 days late after due date
- # and since payment type is loan closure so interest should be considered for those
- # 5 days as well though in grace period
- no_of_days += 5
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- repayment_entry = create_repayment_entry(
- loan.name,
- self.applicant2,
- add_days(last_date, 5),
- flt(loan.loan_amount + accrued_interest_amount),
- )
-
- repayment_entry.submit()
-
- amount = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name}, ["sum(paid_interest_amount)"]
- )
-
- self.assertEqual(flt(amount, 0), flt(accrued_interest_amount, 0))
- self.assertEqual(flt(repayment_entry.penalty_amount, 5), 0)
-
- request_loan_closure(loan.name)
- loan.load_from_db()
- self.assertEqual(loan.status, "Loan Closure Requested")
-
- def test_loan_repayment_for_term_loan(self):
- pledges = [
- {"loan_security": "Test Security 2", "qty": 4000.00},
- {"loan_security": "Test Security 1", "qty": 2000.00},
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledges, "Repay Over Number of Periods", 12
- )
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2,
- "Stock Loan",
- "Repay Over Number of Periods",
- 12,
- loan_application,
- posting_date=add_months(nowdate(), -1),
- )
-
- loan.submit()
-
- make_loan_disbursement_entry(
- loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1)
- )
-
- process_loan_interest_accrual_for_term_loans(posting_date=nowdate())
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, add_days(nowdate(), 5), 89768.75
- )
-
- repayment_entry.submit()
-
- amounts = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name}, ["paid_interest_amount", "paid_principal_amount"]
- )
-
- self.assertEqual(amounts[0], 11250.00)
- self.assertEqual(amounts[1], 78303.00)
-
- def test_repayment_schedule_update(self):
- loan = create_loan(
- self.applicant2,
- "Personal Loan",
- 200000,
- "Repay Over Number of Periods",
- 4,
- applicant_type="Customer",
- repayment_start_date="2021-04-30",
- posting_date="2021-04-01",
- )
-
- loan.submit()
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date="2021-04-01")
-
- process_loan_interest_accrual_for_term_loans(posting_date="2021-05-01")
- process_loan_interest_accrual_for_term_loans(posting_date="2021-06-01")
-
- repayment_entry = create_repayment_entry(loan.name, self.applicant2, "2021-06-05", 120000)
- repayment_entry.submit()
-
- loan.load_from_db()
-
- self.assertEqual(flt(loan.get("repayment_schedule")[3].principal_amount, 2), 41369.83)
- self.assertEqual(flt(loan.get("repayment_schedule")[3].interest_amount, 2), 289.59)
- self.assertEqual(flt(loan.get("repayment_schedule")[3].total_payment, 2), 41659.41)
- self.assertEqual(flt(loan.get("repayment_schedule")[3].balance_loan_amount, 2), 0)
-
- def test_security_shortfall(self):
- pledges = [
- {
- "loan_security": "Test Security 2",
- "qty": 8000.00,
- "haircut": 50,
- }
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledges, "Repay Over Number of Periods", 12
- )
-
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application
- )
- loan.submit()
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount)
-
- frappe.db.sql(
- """UPDATE `tabLoan Security Price` SET loan_security_price = 100
- where loan_security='Test Security 2'"""
- )
-
- create_process_loan_security_shortfall()
- loan_security_shortfall = frappe.get_doc("Loan Security Shortfall", {"loan": loan.name})
- self.assertTrue(loan_security_shortfall)
-
- self.assertEqual(loan_security_shortfall.loan_amount, 1000000.00)
- self.assertEqual(loan_security_shortfall.security_value, 800000.00)
- self.assertEqual(loan_security_shortfall.shortfall_amount, 600000.00)
-
- frappe.db.sql(
- """ UPDATE `tabLoan Security Price` SET loan_security_price = 250
- where loan_security='Test Security 2'"""
- )
-
- create_process_loan_security_shortfall()
- loan_security_shortfall = frappe.get_doc("Loan Security Shortfall", {"loan": loan.name})
- self.assertEqual(loan_security_shortfall.status, "Completed")
- self.assertEqual(loan_security_shortfall.shortfall_amount, 0)
-
- def test_loan_security_unpledge(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- no_of_days += 5
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- repayment_entry = create_repayment_entry(
- loan.name,
- self.applicant2,
- add_days(last_date, 5),
- flt(loan.loan_amount + accrued_interest_amount),
- )
- repayment_entry.submit()
-
- request_loan_closure(loan.name)
- loan.load_from_db()
- self.assertEqual(loan.status, "Loan Closure Requested")
-
- unpledge_request = unpledge_security(loan=loan.name, save=1)
- unpledge_request.submit()
- unpledge_request.status = "Approved"
- unpledge_request.save()
- loan.load_from_db()
-
- pledged_qty = get_pledged_security_qty(loan.name)
-
- self.assertEqual(loan.status, "Closed")
- self.assertEqual(sum(pledged_qty.values()), 0)
-
- amounts = amounts = calculate_amounts(loan.name, add_days(last_date, 5))
- self.assertEqual(amounts["pending_principal_amount"], 0)
- self.assertEqual(amounts["payable_principal_amount"], 0.0)
- self.assertEqual(amounts["interest_amount"], 0)
-
- def test_partial_loan_security_unpledge(self):
- pledge = [
- {"loan_security": "Test Security 1", "qty": 2000.00},
- {"loan_security": "Test Security 2", "qty": 4000.00},
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, add_days(last_date, 5), 600000
- )
- repayment_entry.submit()
-
- unpledge_map = {"Test Security 2": 2000}
-
- unpledge_request = unpledge_security(loan=loan.name, security_map=unpledge_map, save=1)
- unpledge_request.submit()
- unpledge_request.status = "Approved"
- unpledge_request.save()
- unpledge_request.submit()
- unpledge_request.load_from_db()
- self.assertEqual(unpledge_request.docstatus, 1)
-
- def test_sanctioned_loan_security_unpledge(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- unpledge_map = {"Test Security 1": 4000}
- unpledge_request = unpledge_security(loan=loan.name, security_map=unpledge_map, save=1)
- unpledge_request.submit()
- unpledge_request.status = "Approved"
- unpledge_request.save()
- unpledge_request.submit()
-
- def test_disbursal_check_with_shortfall(self):
- pledges = [
- {
- "loan_security": "Test Security 2",
- "qty": 8000.00,
- "haircut": 50,
- }
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledges, "Repay Over Number of Periods", 12
- )
-
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application
- )
- loan.submit()
-
- # Disbursing 7,00,000 from the allowed 10,00,000 according to security pledge
- make_loan_disbursement_entry(loan.name, 700000)
-
- frappe.db.sql(
- """UPDATE `tabLoan Security Price` SET loan_security_price = 100
- where loan_security='Test Security 2'"""
- )
-
- create_process_loan_security_shortfall()
- loan_security_shortfall = frappe.get_doc("Loan Security Shortfall", {"loan": loan.name})
- self.assertTrue(loan_security_shortfall)
-
- self.assertEqual(get_disbursal_amount(loan.name), 0)
-
- frappe.db.sql(
- """ UPDATE `tabLoan Security Price` SET loan_security_price = 250
- where loan_security='Test Security 2'"""
- )
-
- def test_disbursal_check_without_shortfall(self):
- pledges = [
- {
- "loan_security": "Test Security 2",
- "qty": 8000.00,
- "haircut": 50,
- }
- ]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Stock Loan", pledges, "Repay Over Number of Periods", 12
- )
-
- create_pledge(loan_application)
-
- loan = create_loan_with_security(
- self.applicant2, "Stock Loan", "Repay Over Number of Periods", 12, loan_application
- )
- loan.submit()
-
- # Disbursing 7,00,000 from the allowed 10,00,000 according to security pledge
- make_loan_disbursement_entry(loan.name, 700000)
-
- self.assertEqual(get_disbursal_amount(loan.name), 300000)
-
- def test_pending_loan_amount_after_closure_request(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- no_of_days += 5
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
-
- repayment_entry = create_repayment_entry(
- loan.name,
- self.applicant2,
- add_days(last_date, 5),
- flt(loan.loan_amount + accrued_interest_amount),
- )
- repayment_entry.submit()
-
- amounts = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name}, ["paid_interest_amount", "paid_principal_amount"]
- )
-
- request_loan_closure(loan.name)
- loan.load_from_db()
- self.assertEqual(loan.status, "Loan Closure Requested")
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
- self.assertEqual(amounts["pending_principal_amount"], 0.0)
-
- def test_partial_unaccrued_interest_payment(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- no_of_days += 5.5
-
- # get partial unaccrued interest amount
- paid_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, add_days(last_date, 5), paid_amount
- )
-
- repayment_entry.submit()
- repayment_entry.load_from_db()
-
- partial_accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * 5) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- interest_amount = flt(amounts["interest_amount"] + partial_accrued_interest_amount, 2)
- self.assertEqual(flt(repayment_entry.total_interest_paid, 0), flt(interest_amount, 0))
-
- def test_penalty(self):
- loan, amounts = create_loan_scenario_for_penalty(self)
- # 30 days - grace period
- penalty_days = 30 - 4
- penalty_applicable_amount = flt(amounts["interest_amount"] / 2)
- penalty_amount = flt((((penalty_applicable_amount * 25) / 100) * penalty_days), 2)
- process = process_loan_interest_accrual_for_demand_loans(posting_date="2019-11-30")
-
- calculated_penalty_amount = frappe.db.get_value(
- "Loan Interest Accrual",
- {"process_loan_interest_accrual": process, "loan": loan.name},
- "penalty_amount",
- )
-
- self.assertEqual(loan.loan_amount, 1000000)
- self.assertEqual(calculated_penalty_amount, penalty_amount)
-
- def test_penalty_repayment(self):
- loan, dummy = create_loan_scenario_for_penalty(self)
- amounts = calculate_amounts(loan.name, "2019-11-30 00:00:00")
-
- first_penalty = 10000
- second_penalty = amounts["penalty_amount"] - 10000
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, "2019-11-30 00:00:00", 10000
- )
- repayment_entry.submit()
-
- amounts = calculate_amounts(loan.name, "2019-11-30 00:00:01")
- self.assertEqual(amounts["penalty_amount"], second_penalty)
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant2, "2019-11-30 00:00:01", second_penalty
- )
- repayment_entry.submit()
-
- amounts = calculate_amounts(loan.name, "2019-11-30 00:00:02")
- self.assertEqual(amounts["penalty_amount"], 0)
-
- def test_loan_write_off_limit(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
- no_of_days += 5
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- # repay 50 less so that it can be automatically written off
- repayment_entry = create_repayment_entry(
- loan.name,
- self.applicant2,
- add_days(last_date, 5),
- flt(loan.loan_amount + accrued_interest_amount - 50),
- )
-
- repayment_entry.submit()
-
- amount = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name}, ["sum(paid_interest_amount)"]
- )
-
- self.assertEqual(flt(amount, 0), flt(accrued_interest_amount, 0))
- self.assertEqual(flt(repayment_entry.penalty_amount, 5), 0)
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
- self.assertEqual(flt(amounts["pending_principal_amount"], 0), 50)
-
- request_loan_closure(loan.name)
- loan.load_from_db()
- self.assertEqual(loan.status, "Loan Closure Requested")
-
- def test_loan_repayment_against_partially_disbursed_loan(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount / 2, disbursement_date=first_date)
-
- loan.load_from_db()
-
- self.assertEqual(loan.status, "Partially Disbursed")
- create_repayment_entry(
- loan.name, self.applicant2, add_days(last_date, 5), flt(loan.loan_amount / 3)
- )
-
- def test_loan_amount_write_off(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant2, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
- no_of_days += 5
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- # repay 100 less so that it can be automatically written off
- repayment_entry = create_repayment_entry(
- loan.name,
- self.applicant2,
- add_days(last_date, 5),
- flt(loan.loan_amount + accrued_interest_amount - 100),
- )
-
- repayment_entry.submit()
-
- amount = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name}, ["sum(paid_interest_amount)"]
- )
-
- self.assertEqual(flt(amount, 0), flt(accrued_interest_amount, 0))
- self.assertEqual(flt(repayment_entry.penalty_amount, 5), 0)
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
- self.assertEqual(flt(amounts["pending_principal_amount"], 0), 100)
-
- we = make_loan_write_off(loan.name, amount=amounts["pending_principal_amount"])
- we.submit()
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 5))
- self.assertEqual(flt(amounts["pending_principal_amount"], 0), 0)
-
- def test_term_loan_schedule_types(self):
- loan = create_loan(
- self.applicant1,
- "Term Loan Type 1",
- 12000,
- "Repay Over Number of Periods",
- 12,
- repayment_start_date="2022-10-17",
- )
-
- # Check for first, second and last installment date
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "17-10-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "17-11-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "17-09-2023"
- )
-
- loan.loan_type = "Term Loan Type 2"
- loan.save()
-
- # Check for first, second and last installment date
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "01-11-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "01-12-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "01-10-2023"
- )
-
- loan.loan_type = "Term Loan Type 3"
- loan.save()
-
- # Check for first, second and last installment date
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "31-10-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "30-11-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "30-09-2023"
- )
-
- loan.repayment_method = "Repay Fixed Amount per Period"
- loan.monthly_repayment_amount = 1042
- loan.save()
-
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[0].payment_date, "dd-MM-yyyy"), "31-10-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[1].payment_date, "dd-MM-yyyy"), "30-11-2022"
- )
- self.assertEqual(
- format_date(loan.get("repayment_schedule")[-1].payment_date, "dd-MM-yyyy"), "30-09-2023"
- )
-
-
-def create_loan_scenario_for_penalty(doc):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application("_Test Company", doc.applicant2, "Demand Loan", pledge)
- create_pledge(loan_application)
- loan = create_demand_loan(
- doc.applicant2, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
-
- amounts = calculate_amounts(loan.name, add_days(last_date, 1))
- paid_amount = amounts["interest_amount"] / 2
-
- repayment_entry = create_repayment_entry(
- loan.name, doc.applicant2, add_days(last_date, 5), paid_amount
- )
-
- repayment_entry.submit()
-
- return loan, amounts
-
-
-def create_loan_accounts():
- if not frappe.db.exists("Account", "Loans and Advances (Assets) - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "account_name": "Loans and Advances (Assets)",
- "company": "_Test Company",
- "root_type": "Asset",
- "report_type": "Balance Sheet",
- "currency": "INR",
- "parent_account": "Current Assets - _TC",
- "account_type": "Bank",
- "is_group": 1,
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Account", "Loan Account - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "company": "_Test Company",
- "account_name": "Loan Account",
- "root_type": "Asset",
- "report_type": "Balance Sheet",
- "currency": "INR",
- "parent_account": "Loans and Advances (Assets) - _TC",
- "account_type": "Bank",
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Account", "Payment Account - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "company": "_Test Company",
- "account_name": "Payment Account",
- "root_type": "Asset",
- "report_type": "Balance Sheet",
- "currency": "INR",
- "parent_account": "Bank Accounts - _TC",
- "account_type": "Bank",
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Account", "Disbursement Account - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "company": "_Test Company",
- "account_name": "Disbursement Account",
- "root_type": "Asset",
- "report_type": "Balance Sheet",
- "currency": "INR",
- "parent_account": "Bank Accounts - _TC",
- "account_type": "Bank",
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Account", "Interest Income Account - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "company": "_Test Company",
- "root_type": "Income",
- "account_name": "Interest Income Account",
- "report_type": "Profit and Loss",
- "currency": "INR",
- "parent_account": "Direct Income - _TC",
- "account_type": "Income Account",
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Account", "Penalty Income Account - _TC"):
- frappe.get_doc(
- {
- "doctype": "Account",
- "company": "_Test Company",
- "account_name": "Penalty Income Account",
- "root_type": "Income",
- "report_type": "Profit and Loss",
- "currency": "INR",
- "parent_account": "Direct Income - _TC",
- "account_type": "Income Account",
- }
- ).insert(ignore_permissions=True)
-
-
-def create_loan_type(
- loan_name,
- maximum_loan_amount,
- rate_of_interest,
- penalty_interest_rate=None,
- is_term_loan=None,
- grace_period_in_days=None,
- mode_of_payment=None,
- disbursement_account=None,
- payment_account=None,
- loan_account=None,
- interest_income_account=None,
- penalty_income_account=None,
- repayment_method=None,
- repayment_periods=None,
- repayment_schedule_type=None,
- repayment_date_on=None,
-):
-
- if not frappe.db.exists("Loan Type", loan_name):
- loan_type = frappe.get_doc(
- {
- "doctype": "Loan Type",
- "company": "_Test Company",
- "loan_name": loan_name,
- "is_term_loan": is_term_loan,
- "repayment_schedule_type": "Monthly as per repayment start date",
- "maximum_loan_amount": maximum_loan_amount,
- "rate_of_interest": rate_of_interest,
- "penalty_interest_rate": penalty_interest_rate,
- "grace_period_in_days": grace_period_in_days,
- "mode_of_payment": mode_of_payment,
- "disbursement_account": disbursement_account,
- "payment_account": payment_account,
- "loan_account": loan_account,
- "interest_income_account": interest_income_account,
- "penalty_income_account": penalty_income_account,
- "repayment_method": repayment_method,
- "repayment_periods": repayment_periods,
- "write_off_amount": 100,
- }
- )
-
- if loan_type.is_term_loan:
- loan_type.repayment_schedule_type = repayment_schedule_type
- if loan_type.repayment_schedule_type != "Monthly as per repayment start date":
- loan_type.repayment_date_on = repayment_date_on
-
- loan_type.insert()
- loan_type.submit()
-
-
-def create_loan_security_type():
- if not frappe.db.exists("Loan Security Type", "Stock"):
- frappe.get_doc(
- {
- "doctype": "Loan Security Type",
- "loan_security_type": "Stock",
- "unit_of_measure": "Nos",
- "haircut": 50.00,
- "loan_to_value_ratio": 50,
- }
- ).insert(ignore_permissions=True)
-
-
-def create_loan_security():
- if not frappe.db.exists("Loan Security", "Test Security 1"):
- frappe.get_doc(
- {
- "doctype": "Loan Security",
- "loan_security_type": "Stock",
- "loan_security_code": "532779",
- "loan_security_name": "Test Security 1",
- "unit_of_measure": "Nos",
- "haircut": 50.00,
- }
- ).insert(ignore_permissions=True)
-
- if not frappe.db.exists("Loan Security", "Test Security 2"):
- frappe.get_doc(
- {
- "doctype": "Loan Security",
- "loan_security_type": "Stock",
- "loan_security_code": "531335",
- "loan_security_name": "Test Security 2",
- "unit_of_measure": "Nos",
- "haircut": 50.00,
- }
- ).insert(ignore_permissions=True)
-
-
-def create_loan_security_pledge(applicant, pledges, loan_application=None, loan=None):
-
- lsp = frappe.new_doc("Loan Security Pledge")
- lsp.applicant_type = "Customer"
- lsp.applicant = applicant
- lsp.company = "_Test Company"
- lsp.loan_application = loan_application
-
- if loan:
- lsp.loan = loan
-
- for pledge in pledges:
- lsp.append("securities", {"loan_security": pledge["loan_security"], "qty": pledge["qty"]})
-
- lsp.save()
- lsp.submit()
-
- return lsp
-
-
-def make_loan_disbursement_entry(loan, amount, disbursement_date=None):
-
- loan_disbursement_entry = frappe.get_doc(
- {
- "doctype": "Loan Disbursement",
- "against_loan": loan,
- "disbursement_date": disbursement_date,
- "company": "_Test Company",
- "disbursed_amount": amount,
- "cost_center": "Main - _TC",
- }
- ).insert(ignore_permissions=True)
-
- loan_disbursement_entry.save()
- loan_disbursement_entry.submit()
-
- return loan_disbursement_entry
-
-
-def create_loan_security_price(loan_security, loan_security_price, uom, from_date, to_date):
-
- if not frappe.db.get_value(
- "Loan Security Price",
- {"loan_security": loan_security, "valid_from": ("<=", from_date), "valid_upto": (">=", to_date)},
- "name",
- ):
-
- lsp = frappe.get_doc(
- {
- "doctype": "Loan Security Price",
- "loan_security": loan_security,
- "loan_security_price": loan_security_price,
- "uom": uom,
- "valid_from": from_date,
- "valid_upto": to_date,
- }
- ).insert(ignore_permissions=True)
-
-
-def create_repayment_entry(loan, applicant, posting_date, paid_amount):
-
- lr = frappe.get_doc(
- {
- "doctype": "Loan Repayment",
- "against_loan": loan,
- "company": "_Test Company",
- "posting_date": posting_date or nowdate(),
- "applicant": applicant,
- "amount_paid": paid_amount,
- "loan_type": "Stock Loan",
- }
- ).insert(ignore_permissions=True)
-
- return lr
-
-
-def create_loan_application(
- company,
- applicant,
- loan_type,
- proposed_pledges,
- repayment_method=None,
- repayment_periods=None,
- posting_date=None,
- do_not_save=False,
-):
- loan_application = frappe.new_doc("Loan Application")
- loan_application.applicant_type = "Customer"
- loan_application.company = company
- loan_application.applicant = applicant
- loan_application.loan_type = loan_type
- loan_application.posting_date = posting_date or nowdate()
- loan_application.is_secured_loan = 1
-
- if repayment_method:
- loan_application.repayment_method = repayment_method
- loan_application.repayment_periods = repayment_periods
-
- for pledge in proposed_pledges:
- loan_application.append("proposed_pledges", pledge)
-
- if do_not_save:
- return loan_application
-
- loan_application.save()
- loan_application.submit()
-
- loan_application.status = "Approved"
- loan_application.save()
-
- return loan_application.name
-
-
-def create_loan(
- applicant,
- loan_type,
- loan_amount,
- repayment_method,
- repayment_periods,
- applicant_type=None,
- repayment_start_date=None,
- posting_date=None,
-):
-
- loan = frappe.get_doc(
- {
- "doctype": "Loan",
- "applicant_type": applicant_type or "Employee",
- "company": "_Test Company",
- "applicant": applicant,
- "loan_type": loan_type,
- "loan_amount": loan_amount,
- "repayment_method": repayment_method,
- "repayment_periods": repayment_periods,
- "repayment_start_date": repayment_start_date or nowdate(),
- "is_term_loan": 1,
- "posting_date": posting_date or nowdate(),
- }
- )
-
- loan.save()
- return loan
-
-
-def create_loan_with_security(
- applicant,
- loan_type,
- repayment_method,
- repayment_periods,
- loan_application,
- posting_date=None,
- repayment_start_date=None,
-):
- loan = frappe.get_doc(
- {
- "doctype": "Loan",
- "company": "_Test Company",
- "applicant_type": "Customer",
- "posting_date": posting_date or nowdate(),
- "loan_application": loan_application,
- "applicant": applicant,
- "loan_type": loan_type,
- "is_term_loan": 1,
- "is_secured_loan": 1,
- "repayment_method": repayment_method,
- "repayment_periods": repayment_periods,
- "repayment_start_date": repayment_start_date or nowdate(),
- "mode_of_payment": frappe.db.get_value("Mode of Payment", {"type": "Cash"}, "name"),
- "payment_account": "Payment Account - _TC",
- "loan_account": "Loan Account - _TC",
- "interest_income_account": "Interest Income Account - _TC",
- "penalty_income_account": "Penalty Income Account - _TC",
- }
- )
-
- loan.save()
-
- return loan
-
-
-def create_demand_loan(applicant, loan_type, loan_application, posting_date=None):
-
- loan = frappe.get_doc(
- {
- "doctype": "Loan",
- "company": "_Test Company",
- "applicant_type": "Customer",
- "posting_date": posting_date or nowdate(),
- "loan_application": loan_application,
- "applicant": applicant,
- "loan_type": loan_type,
- "is_term_loan": 0,
- "is_secured_loan": 1,
- "mode_of_payment": frappe.db.get_value("Mode of Payment", {"type": "Cash"}, "name"),
- "payment_account": "Payment Account - _TC",
- "loan_account": "Loan Account - _TC",
- "interest_income_account": "Interest Income Account - _TC",
- "penalty_income_account": "Penalty Income Account - _TC",
- }
- )
-
- loan.save()
-
- return loan
diff --git a/erpnext/loan_management/doctype/loan_application/__init__.py b/erpnext/loan_management/doctype/loan_application/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_application/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_application/loan_application.js b/erpnext/loan_management/doctype/loan_application/loan_application.js
deleted file mode 100644
index 5142178..0000000
--- a/erpnext/loan_management/doctype/loan_application/loan_application.js
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan Application', {
-
- setup: function(frm) {
- frm.make_methods = {
- 'Loan': function() { frm.trigger('create_loan') },
- 'Loan Security Pledge': function() { frm.trigger('create_loan_security_pledge') },
- }
- },
- refresh: function(frm) {
- frm.trigger("toggle_fields");
- frm.trigger("add_toolbar_buttons");
- frm.set_query('loan_type', () => {
- return {
- filters: {
- company: frm.doc.company
- }
- };
- });
- },
- repayment_method: function(frm) {
- frm.doc.repayment_amount = frm.doc.repayment_periods = "";
- frm.trigger("toggle_fields");
- frm.trigger("toggle_required");
- },
- toggle_fields: function(frm) {
- frm.toggle_enable("repayment_amount", frm.doc.repayment_method=="Repay Fixed Amount per Period")
- frm.toggle_enable("repayment_periods", frm.doc.repayment_method=="Repay Over Number of Periods")
- },
- toggle_required: function(frm){
- frm.toggle_reqd("repayment_amount", cint(frm.doc.repayment_method=='Repay Fixed Amount per Period'))
- frm.toggle_reqd("repayment_periods", cint(frm.doc.repayment_method=='Repay Over Number of Periods'))
- },
- add_toolbar_buttons: function(frm) {
- if (frm.doc.status == "Approved") {
-
- if (frm.doc.is_secured_loan) {
- frappe.db.get_value("Loan Security Pledge", {"loan_application": frm.doc.name, "docstatus": 1}, "name", (r) => {
- if (Object.keys(r).length === 0) {
- frm.add_custom_button(__('Loan Security Pledge'), function() {
- frm.trigger('create_loan_security_pledge');
- },__('Create'))
- }
- });
- }
-
- frappe.db.get_value("Loan", {"loan_application": frm.doc.name, "docstatus": 1}, "name", (r) => {
- if (Object.keys(r).length === 0) {
- frm.add_custom_button(__('Loan'), function() {
- frm.trigger('create_loan');
- },__('Create'))
- } else {
- frm.set_df_property('status', 'read_only', 1);
- }
- });
- }
- },
- create_loan: function(frm) {
- if (frm.doc.status != "Approved") {
- frappe.throw(__("Cannot create loan until application is approved"));
- }
-
- frappe.model.open_mapped_doc({
- method: 'erpnext.loan_management.doctype.loan_application.loan_application.create_loan',
- frm: frm
- });
- },
- create_loan_security_pledge: function(frm) {
-
- if(!frm.doc.is_secured_loan) {
- frappe.throw(__("Loan Security Pledge can only be created for secured loans"));
- }
-
- frappe.call({
- method: "erpnext.loan_management.doctype.loan_application.loan_application.create_pledge",
- args: {
- loan_application: frm.doc.name
- },
- callback: function(r) {
- frappe.set_route("Form", "Loan Security Pledge", r.message);
- }
- })
- },
- is_term_loan: function(frm) {
- frm.set_df_property('repayment_method', 'hidden', 1 - frm.doc.is_term_loan);
- frm.set_df_property('repayment_method', 'reqd', frm.doc.is_term_loan);
- },
- is_secured_loan: function(frm) {
- frm.set_df_property('proposed_pledges', 'reqd', frm.doc.is_secured_loan);
- },
-
- calculate_amounts: function(frm, cdt, cdn) {
- let row = locals[cdt][cdn];
- if (row.qty) {
- frappe.model.set_value(cdt, cdn, 'amount', row.qty * row.loan_security_price);
- frappe.model.set_value(cdt, cdn, 'post_haircut_amount', cint(row.amount - (row.amount * row.haircut/100)));
- } else if (row.amount) {
- frappe.model.set_value(cdt, cdn, 'qty', cint(row.amount / row.loan_security_price));
- frappe.model.set_value(cdt, cdn, 'amount', row.qty * row.loan_security_price);
- frappe.model.set_value(cdt, cdn, 'post_haircut_amount', cint(row.amount - (row.amount * row.haircut/100)));
- }
-
- let maximum_amount = 0;
-
- $.each(frm.doc.proposed_pledges || [], function(i, item){
- maximum_amount += item.post_haircut_amount;
- });
-
- if (flt(maximum_amount)) {
- frm.set_value('maximum_loan_amount', flt(maximum_amount));
- }
- }
-});
-
-frappe.ui.form.on("Proposed Pledge", {
- loan_security: function(frm, cdt, cdn) {
- let row = locals[cdt][cdn];
-
- if (row.loan_security) {
- frappe.call({
- method: "erpnext.loan_management.doctype.loan_security_price.loan_security_price.get_loan_security_price",
- args: {
- loan_security: row.loan_security
- },
- callback: function(r) {
- frappe.model.set_value(cdt, cdn, 'loan_security_price', r.message);
- frm.events.calculate_amounts(frm, cdt, cdn);
- }
- })
- }
- },
-
- amount: function(frm, cdt, cdn) {
- frm.events.calculate_amounts(frm, cdt, cdn);
- },
-
- qty: function(frm, cdt, cdn) {
- frm.events.calculate_amounts(frm, cdt, cdn);
- },
-})
diff --git a/erpnext/loan_management/doctype/loan_application/loan_application.json b/erpnext/loan_management/doctype/loan_application/loan_application.json
deleted file mode 100644
index f91fa07..0000000
--- a/erpnext/loan_management/doctype/loan_application/loan_application.json
+++ /dev/null
@@ -1,282 +0,0 @@
-{
- "actions": [],
- "autoname": "ACC-LOAP-.YYYY.-.#####",
- "creation": "2019-08-29 17:46:49.201740",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "applicant_type",
- "applicant",
- "applicant_name",
- "column_break_2",
- "company",
- "posting_date",
- "status",
- "section_break_4",
- "loan_type",
- "is_term_loan",
- "loan_amount",
- "is_secured_loan",
- "rate_of_interest",
- "column_break_7",
- "description",
- "loan_security_details_section",
- "proposed_pledges",
- "maximum_loan_amount",
- "repayment_info",
- "repayment_method",
- "total_payable_amount",
- "column_break_11",
- "repayment_periods",
- "repayment_amount",
- "total_payable_interest",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "reqd": 1
- },
- {
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_global_search": 1,
- "in_standard_filter": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "reqd": 1
- },
- {
- "depends_on": "applicant",
- "fieldname": "applicant_name",
- "fieldtype": "Data",
- "in_global_search": 1,
- "label": "Applicant Name",
- "read_only": 1
- },
- {
- "fieldname": "column_break_2",
- "fieldtype": "Column Break"
- },
- {
- "default": "Today",
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "label": "Posting Date"
- },
- {
- "allow_on_submit": 1,
- "fieldname": "status",
- "fieldtype": "Select",
- "label": "Status",
- "no_copy": 1,
- "options": "Open\nApproved\nRejected",
- "permlevel": 1
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "reqd": 1
- },
- {
- "fieldname": "section_break_4",
- "fieldtype": "Section Break",
- "label": "Loan Info"
- },
- {
- "fieldname": "loan_type",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Type",
- "options": "Loan Type",
- "reqd": 1
- },
- {
- "bold": 1,
- "fieldname": "loan_amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Loan Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "column_break_7",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "description",
- "fieldtype": "Small Text",
- "label": "Reason"
- },
- {
- "depends_on": "eval: doc.is_term_loan == 1",
- "fieldname": "repayment_info",
- "fieldtype": "Section Break",
- "label": "Repayment Info"
- },
- {
- "depends_on": "eval: doc.is_term_loan == 1",
- "fetch_if_empty": 1,
- "fieldname": "repayment_method",
- "fieldtype": "Select",
- "label": "Repayment Method",
- "options": "\nRepay Fixed Amount per Period\nRepay Over Number of Periods"
- },
- {
- "fetch_from": "loan_type.rate_of_interest",
- "fieldname": "rate_of_interest",
- "fieldtype": "Percent",
- "label": "Rate of Interest",
- "read_only": 1
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "total_payable_interest",
- "fieldtype": "Currency",
- "label": "Total Payable Interest",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break"
- },
- {
- "depends_on": "repayment_method",
- "fieldname": "repayment_amount",
- "fieldtype": "Currency",
- "label": "Monthly Repayment Amount",
- "options": "Company:company:default_currency"
- },
- {
- "depends_on": "repayment_method",
- "fieldname": "repayment_periods",
- "fieldtype": "Int",
- "label": "Repayment Period in Months"
- },
- {
- "fieldname": "total_payable_amount",
- "fieldtype": "Currency",
- "label": "Total Payable Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Application",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "default": "0",
- "fieldname": "is_secured_loan",
- "fieldtype": "Check",
- "label": "Is Secured Loan"
- },
- {
- "depends_on": "eval:doc.is_secured_loan == 1",
- "fieldname": "loan_security_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Security Details"
- },
- {
- "depends_on": "eval:doc.is_secured_loan == 1",
- "fieldname": "proposed_pledges",
- "fieldtype": "Table",
- "label": "Proposed Pledges",
- "options": "Proposed Pledge"
- },
- {
- "fieldname": "maximum_loan_amount",
- "fieldtype": "Currency",
- "label": "Maximum Loan Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "default": "0",
- "fetch_from": "loan_type.is_term_loan",
- "fieldname": "is_term_loan",
- "fieldtype": "Check",
- "label": "Is Term Loan",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-04-19 18:24:40.119647",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Application",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Employee",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "delete": 1,
- "email": 1,
- "export": 1,
- "permlevel": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- },
- {
- "email": 1,
- "export": 1,
- "permlevel": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Employee",
- "share": 1
- }
- ],
- "search_fields": "applicant_type, applicant, loan_type, loan_amount",
- "sort_field": "modified",
- "sort_order": "DESC",
- "timeline_field": "applicant",
- "title_field": "applicant",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_application/loan_application.py b/erpnext/loan_management/doctype/loan_application/loan_application.py
deleted file mode 100644
index 5f040e2..0000000
--- a/erpnext/loan_management/doctype/loan_application/loan_application.py
+++ /dev/null
@@ -1,257 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import json
-import math
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.model.mapper import get_mapped_doc
-from frappe.utils import cint, flt, rounded
-
-from erpnext.loan_management.doctype.loan.loan import (
- get_monthly_repayment_amount,
- get_sanctioned_amount_limit,
- get_total_loan_amount,
- validate_repayment_method,
-)
-from erpnext.loan_management.doctype.loan_security_price.loan_security_price import (
- get_loan_security_price,
-)
-
-
-class LoanApplication(Document):
- def validate(self):
- self.set_pledge_amount()
- self.set_loan_amount()
- self.validate_loan_amount()
-
- if self.is_term_loan:
- validate_repayment_method(
- self.repayment_method,
- self.loan_amount,
- self.repayment_amount,
- self.repayment_periods,
- self.is_term_loan,
- )
-
- self.validate_loan_type()
-
- self.get_repayment_details()
- self.check_sanctioned_amount_limit()
-
- def validate_loan_type(self):
- company = frappe.get_value("Loan Type", self.loan_type, "company")
- if company != self.company:
- frappe.throw(_("Please select Loan Type for company {0}").format(frappe.bold(self.company)))
-
- def validate_loan_amount(self):
- if not self.loan_amount:
- frappe.throw(_("Loan Amount is mandatory"))
-
- maximum_loan_limit = frappe.db.get_value("Loan Type", self.loan_type, "maximum_loan_amount")
- if maximum_loan_limit and self.loan_amount > maximum_loan_limit:
- frappe.throw(
- _("Loan Amount cannot exceed Maximum Loan Amount of {0}").format(maximum_loan_limit)
- )
-
- if self.maximum_loan_amount and self.loan_amount > self.maximum_loan_amount:
- frappe.throw(
- _("Loan Amount exceeds maximum loan amount of {0} as per proposed securities").format(
- self.maximum_loan_amount
- )
- )
-
- def check_sanctioned_amount_limit(self):
- sanctioned_amount_limit = get_sanctioned_amount_limit(
- self.applicant_type, self.applicant, self.company
- )
-
- if sanctioned_amount_limit:
- total_loan_amount = get_total_loan_amount(self.applicant_type, self.applicant, self.company)
-
- if sanctioned_amount_limit and flt(self.loan_amount) + flt(total_loan_amount) > flt(
- sanctioned_amount_limit
- ):
- frappe.throw(
- _("Sanctioned Amount limit crossed for {0} {1}").format(
- self.applicant_type, frappe.bold(self.applicant)
- )
- )
-
- def set_pledge_amount(self):
- for proposed_pledge in self.proposed_pledges:
-
- if not proposed_pledge.qty and not proposed_pledge.amount:
- frappe.throw(_("Qty or Amount is mandatroy for loan security"))
-
- proposed_pledge.loan_security_price = get_loan_security_price(proposed_pledge.loan_security)
-
- if not proposed_pledge.qty:
- proposed_pledge.qty = cint(proposed_pledge.amount / proposed_pledge.loan_security_price)
-
- proposed_pledge.amount = proposed_pledge.qty * proposed_pledge.loan_security_price
- proposed_pledge.post_haircut_amount = cint(
- proposed_pledge.amount - (proposed_pledge.amount * proposed_pledge.haircut / 100)
- )
-
- def get_repayment_details(self):
-
- if self.is_term_loan:
- if self.repayment_method == "Repay Over Number of Periods":
- self.repayment_amount = get_monthly_repayment_amount(
- self.loan_amount, self.rate_of_interest, self.repayment_periods
- )
-
- if self.repayment_method == "Repay Fixed Amount per Period":
- monthly_interest_rate = flt(self.rate_of_interest) / (12 * 100)
- if monthly_interest_rate:
- min_repayment_amount = self.loan_amount * monthly_interest_rate
- if self.repayment_amount - min_repayment_amount <= 0:
- frappe.throw(_("Repayment Amount must be greater than " + str(flt(min_repayment_amount, 2))))
- self.repayment_periods = math.ceil(
- (math.log(self.repayment_amount) - math.log(self.repayment_amount - min_repayment_amount))
- / (math.log(1 + monthly_interest_rate))
- )
- else:
- self.repayment_periods = self.loan_amount / self.repayment_amount
-
- self.calculate_payable_amount()
- else:
- self.total_payable_amount = self.loan_amount
-
- def calculate_payable_amount(self):
- balance_amount = self.loan_amount
- self.total_payable_amount = 0
- self.total_payable_interest = 0
-
- while balance_amount > 0:
- interest_amount = rounded(balance_amount * flt(self.rate_of_interest) / (12 * 100))
- balance_amount = rounded(balance_amount + interest_amount - self.repayment_amount)
-
- self.total_payable_interest += interest_amount
-
- self.total_payable_amount = self.loan_amount + self.total_payable_interest
-
- def set_loan_amount(self):
- if self.is_secured_loan and not self.proposed_pledges:
- frappe.throw(_("Proposed Pledges are mandatory for secured Loans"))
-
- if self.is_secured_loan and self.proposed_pledges:
- self.maximum_loan_amount = 0
- for security in self.proposed_pledges:
- self.maximum_loan_amount += flt(security.post_haircut_amount)
-
- if not self.loan_amount and self.is_secured_loan and self.proposed_pledges:
- self.loan_amount = self.maximum_loan_amount
-
-
-@frappe.whitelist()
-def create_loan(source_name, target_doc=None, submit=0):
- def update_accounts(source_doc, target_doc, source_parent):
- account_details = frappe.get_all(
- "Loan Type",
- fields=[
- "mode_of_payment",
- "payment_account",
- "loan_account",
- "interest_income_account",
- "penalty_income_account",
- ],
- filters={"name": source_doc.loan_type},
- )[0]
-
- if source_doc.is_secured_loan:
- target_doc.maximum_loan_amount = 0
-
- target_doc.mode_of_payment = account_details.mode_of_payment
- target_doc.payment_account = account_details.payment_account
- target_doc.loan_account = account_details.loan_account
- target_doc.interest_income_account = account_details.interest_income_account
- target_doc.penalty_income_account = account_details.penalty_income_account
- target_doc.loan_application = source_name
-
- doclist = get_mapped_doc(
- "Loan Application",
- source_name,
- {
- "Loan Application": {
- "doctype": "Loan",
- "validation": {"docstatus": ["=", 1]},
- "postprocess": update_accounts,
- }
- },
- target_doc,
- )
-
- if submit:
- doclist.submit()
-
- return doclist
-
-
-@frappe.whitelist()
-def create_pledge(loan_application, loan=None):
- loan_application_doc = frappe.get_doc("Loan Application", loan_application)
-
- lsp = frappe.new_doc("Loan Security Pledge")
- lsp.applicant_type = loan_application_doc.applicant_type
- lsp.applicant = loan_application_doc.applicant
- lsp.loan_application = loan_application_doc.name
- lsp.company = loan_application_doc.company
-
- if loan:
- lsp.loan = loan
-
- for pledge in loan_application_doc.proposed_pledges:
-
- lsp.append(
- "securities",
- {
- "loan_security": pledge.loan_security,
- "qty": pledge.qty,
- "loan_security_price": pledge.loan_security_price,
- "haircut": pledge.haircut,
- },
- )
-
- lsp.save()
- lsp.submit()
-
- message = _("Loan Security Pledge Created : {0}").format(lsp.name)
- frappe.msgprint(message)
-
- return lsp.name
-
-
-# This is a sandbox method to get the proposed pledges
-@frappe.whitelist()
-def get_proposed_pledge(securities):
- if isinstance(securities, str):
- securities = json.loads(securities)
-
- proposed_pledges = {"securities": []}
- maximum_loan_amount = 0
-
- for security in securities:
- security = frappe._dict(security)
- if not security.qty and not security.amount:
- frappe.throw(_("Qty or Amount is mandatroy for loan security"))
-
- security.loan_security_price = get_loan_security_price(security.loan_security)
-
- if not security.qty:
- security.qty = cint(security.amount / security.loan_security_price)
-
- security.amount = security.qty * security.loan_security_price
- security.post_haircut_amount = cint(security.amount - (security.amount * security.haircut / 100))
-
- maximum_loan_amount += security.post_haircut_amount
-
- proposed_pledges["securities"].append(security)
-
- proposed_pledges["maximum_loan_amount"] = maximum_loan_amount
-
- return proposed_pledges
diff --git a/erpnext/loan_management/doctype/loan_application/loan_application_dashboard.py b/erpnext/loan_management/doctype/loan_application/loan_application_dashboard.py
deleted file mode 100644
index 1d90e9b..0000000
--- a/erpnext/loan_management/doctype/loan_application/loan_application_dashboard.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def get_data():
- return {
- "fieldname": "loan_application",
- "transactions": [
- {"items": ["Loan", "Loan Security Pledge"]},
- ],
- }
diff --git a/erpnext/loan_management/doctype/loan_application/test_loan_application.py b/erpnext/loan_management/doctype/loan_application/test_loan_application.py
deleted file mode 100644
index 13bb4af..0000000
--- a/erpnext/loan_management/doctype/loan_application/test_loan_application.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-
-from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts, create_loan_type
-from erpnext.setup.doctype.employee.test_employee import make_employee
-
-
-class TestLoanApplication(unittest.TestCase):
- def setUp(self):
- create_loan_accounts()
- create_loan_type(
- "Home Loan",
- 500000,
- 9.2,
- 0,
- 1,
- 0,
- "Cash",
- "Disbursement Account - _TC",
- "Payment Account - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- "Repay Over Number of Periods",
- 18,
- )
- self.applicant = make_employee("kate_loan@loan.com", "_Test Company")
- self.create_loan_application()
-
- def create_loan_application(self):
- loan_application = frappe.new_doc("Loan Application")
- loan_application.update(
- {
- "applicant": self.applicant,
- "loan_type": "Home Loan",
- "rate_of_interest": 9.2,
- "loan_amount": 250000,
- "repayment_method": "Repay Over Number of Periods",
- "repayment_periods": 18,
- "company": "_Test Company",
- }
- )
- loan_application.insert()
-
- def test_loan_totals(self):
- loan_application = frappe.get_doc("Loan Application", {"applicant": self.applicant})
-
- self.assertEqual(loan_application.total_payable_interest, 18599)
- self.assertEqual(loan_application.total_payable_amount, 268599)
- self.assertEqual(loan_application.repayment_amount, 14923)
-
- loan_application.repayment_periods = 24
- loan_application.save()
- loan_application.reload()
-
- self.assertEqual(loan_application.total_payable_interest, 24657)
- self.assertEqual(loan_application.total_payable_amount, 274657)
- self.assertEqual(loan_application.repayment_amount, 11445)
diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/__init__.py b/erpnext/loan_management/doctype/loan_balance_adjustment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_balance_adjustment/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js
deleted file mode 100644
index 8aec63a..0000000
--- a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Balance Adjustment', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json
deleted file mode 100644
index 80c3389..0000000
--- a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json
+++ /dev/null
@@ -1,189 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-ADJ-.#####",
- "creation": "2022-06-28 14:48:47.736269",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan",
- "applicant_type",
- "applicant",
- "column_break_3",
- "company",
- "posting_date",
- "accounting_dimensions_section",
- "cost_center",
- "section_break_9",
- "adjustment_account",
- "column_break_11",
- "adjustment_type",
- "amount",
- "reference_number",
- "remarks",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan",
- "options": "Loan",
- "reqd": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "read_only": 1
- },
- {
- "fetch_from": "loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "label": "Applicant ",
- "options": "applicant_type",
- "read_only": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "read_only": 1,
- "reqd": 1
- },
- {
- "default": "Today",
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date",
- "reqd": 1
- },
- {
- "collapsible": 1,
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fieldname": "section_break_9",
- "fieldtype": "Section Break",
- "label": "Adjustment Details"
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "reference_number",
- "fieldtype": "Data",
- "label": "Reference Number"
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Balance Adjustment",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Balance Adjustment",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "adjustment_account",
- "fieldtype": "Link",
- "label": "Adjustment Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "amount",
- "fieldtype": "Currency",
- "label": "Amount",
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "adjustment_type",
- "fieldtype": "Select",
- "label": "Adjustment Type",
- "options": "Credit Adjustment\nDebit Adjustment",
- "reqd": 1
- },
- {
- "fieldname": "remarks",
- "fieldtype": "Data",
- "label": "Remarks"
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-07-08 16:48:54.480066",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Balance Adjustment",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py
deleted file mode 100644
index 514a5fc..0000000
--- a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, nowdate
-
-import erpnext
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
-)
-
-
-class LoanBalanceAdjustment(AccountsController):
- """
- Add credit/debit adjustments to loan ledger.
- """
-
- def validate(self):
- if self.amount == 0:
- frappe.throw(_("Amount cannot be zero"))
- if self.amount < 0:
- frappe.throw(_("Amount cannot be negative"))
- self.set_missing_values()
-
- def on_submit(self):
- self.set_status_and_amounts()
- self.make_gl_entries()
-
- def on_cancel(self):
- self.set_status_and_amounts(cancel=1)
- self.make_gl_entries(cancel=1)
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
-
- def set_missing_values(self):
- if not self.posting_date:
- self.posting_date = nowdate()
-
- if not self.cost_center:
- self.cost_center = erpnext.get_default_cost_center(self.company)
-
- def set_status_and_amounts(self, cancel=0):
- loan_details = frappe.db.get_value(
- "Loan",
- self.loan,
- [
- "loan_amount",
- "credit_adjustment_amount",
- "debit_adjustment_amount",
- "total_payment",
- "total_principal_paid",
- "total_interest_payable",
- "status",
- "is_term_loan",
- "is_secured_loan",
- ],
- as_dict=1,
- )
-
- if cancel:
- adjustment_amount = self.get_values_on_cancel(loan_details)
- else:
- adjustment_amount = self.get_values_on_submit(loan_details)
-
- if self.adjustment_type == "Credit Adjustment":
- adj_field = "credit_adjustment_amount"
- elif self.adjustment_type == "Debit Adjustment":
- adj_field = "debit_adjustment_amount"
-
- frappe.db.set_value("Loan", self.loan, {adj_field: adjustment_amount})
-
- def get_values_on_cancel(self, loan_details):
- if self.adjustment_type == "Credit Adjustment":
- adjustment_amount = loan_details.credit_adjustment_amount - self.amount
- elif self.adjustment_type == "Debit Adjustment":
- adjustment_amount = loan_details.debit_adjustment_amount - self.amount
-
- return adjustment_amount
-
- def get_values_on_submit(self, loan_details):
- if self.adjustment_type == "Credit Adjustment":
- adjustment_amount = loan_details.credit_adjustment_amount + self.amount
- elif self.adjustment_type == "Debit Adjustment":
- adjustment_amount = loan_details.debit_adjustment_amount + self.amount
-
- if loan_details.status in ("Disbursed", "Partially Disbursed") and not loan_details.is_term_loan:
- process_loan_interest_accrual_for_demand_loans(
- posting_date=add_days(self.posting_date, -1),
- loan=self.loan,
- accrual_type=self.adjustment_type,
- )
-
- return adjustment_amount
-
- def make_gl_entries(self, cancel=0, adv_adj=0):
- gle_map = []
- loan_account = frappe.db.get_value("Loan", self.loan, "loan_account")
- remarks = "{} against loan {}".format(self.adjustment_type.capitalize(), self.loan)
- if self.reference_number:
- remarks += " with reference no. {}".format(self.reference_number)
-
- loan_entry = {
- "account": loan_account,
- "against": self.adjustment_account,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _(remarks),
- "cost_center": self.cost_center,
- "party_type": self.applicant_type,
- "party": self.applicant,
- "posting_date": self.posting_date,
- }
- company_entry = {
- "account": self.adjustment_account,
- "against": loan_account,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _(remarks),
- "cost_center": self.cost_center,
- "posting_date": self.posting_date,
- }
- if self.adjustment_type == "Credit Adjustment":
- loan_entry["credit"] = self.amount
- loan_entry["credit_in_account_currency"] = self.amount
-
- company_entry["debit"] = self.amount
- company_entry["debit_in_account_currency"] = self.amount
-
- elif self.adjustment_type == "Debit Adjustment":
- loan_entry["debit"] = self.amount
- loan_entry["debit_in_account_currency"] = self.amount
-
- company_entry["credit"] = self.amount
- company_entry["credit_in_account_currency"] = self.amount
-
- gle_map.append(self.get_gl_dict(loan_entry))
-
- gle_map.append(self.get_gl_dict(company_entry))
-
- if gle_map:
- make_gl_entries(gle_map, cancel=cancel, adv_adj=adv_adj, merge_entries=False)
diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py b/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py
deleted file mode 100644
index 7658d7b..0000000
--- a/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-from frappe.tests.utils import FrappeTestCase
-
-
-class TestLoanBalanceAdjustment(FrappeTestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_disbursement/__init__.py b/erpnext/loan_management/doctype/loan_disbursement/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_disbursement/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.js b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.js
deleted file mode 100644
index 487ef23..0000000
--- a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan Disbursement', {
- refresh: function(frm) {
- frm.set_query('against_loan', function() {
- return {
- 'filters': {
- 'docstatus': 1,
- 'status': 'Sanctioned'
- }
- }
- })
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.json b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.json
deleted file mode 100644
index c7b5c03..0000000
--- a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.json
+++ /dev/null
@@ -1,231 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-DIS-.#####",
- "creation": "2019-09-07 12:44:49.125452",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "against_loan",
- "posting_date",
- "applicant_type",
- "column_break_4",
- "company",
- "applicant",
- "section_break_7",
- "disbursement_date",
- "clearance_date",
- "column_break_8",
- "disbursed_amount",
- "accounting_dimensions_section",
- "cost_center",
- "accounting_details",
- "disbursement_account",
- "column_break_16",
- "loan_account",
- "bank_account",
- "disbursement_references_section",
- "reference_date",
- "column_break_17",
- "reference_number",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "against_loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Against Loan ",
- "options": "Loan",
- "reqd": 1
- },
- {
- "fieldname": "disbursement_date",
- "fieldtype": "Date",
- "label": "Disbursement Date",
- "reqd": 1
- },
- {
- "fieldname": "disbursed_amount",
- "fieldtype": "Currency",
- "label": "Disbursed Amount",
- "non_negative": 1,
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Disbursement",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fetch_from": "against_loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fetch_from": "against_loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "read_only": 1,
- "reqd": 1
- },
- {
- "collapsible": 1,
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "hidden": 1,
- "label": "Posting Date",
- "read_only": 1
- },
- {
- "fieldname": "column_break_4",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "section_break_7",
- "fieldtype": "Section Break",
- "label": "Disbursement Details"
- },
- {
- "fetch_from": "against_loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "in_list_view": 1,
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fieldname": "bank_account",
- "fieldtype": "Link",
- "label": "Bank Account",
- "options": "Bank Account"
- },
- {
- "fieldname": "column_break_8",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "disbursement_references_section",
- "fieldtype": "Section Break",
- "label": "Disbursement References"
- },
- {
- "fieldname": "reference_date",
- "fieldtype": "Date",
- "label": "Reference Date"
- },
- {
- "fieldname": "column_break_17",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "reference_number",
- "fieldtype": "Data",
- "label": "Reference Number"
- },
- {
- "fieldname": "clearance_date",
- "fieldtype": "Date",
- "label": "Clearance Date",
- "no_copy": 1,
- "read_only": 1
- },
- {
- "fieldname": "accounting_details",
- "fieldtype": "Section Break",
- "label": "Accounting Details"
- },
- {
- "fetch_from": "against_loan.disbursement_account",
- "fetch_if_empty": 1,
- "fieldname": "disbursement_account",
- "fieldtype": "Link",
- "label": "Disbursement Account",
- "options": "Account"
- },
- {
- "fieldname": "column_break_16",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "against_loan.loan_account",
- "fieldname": "loan_account",
- "fieldtype": "Link",
- "label": "Loan Account",
- "options": "Account",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-08-04 17:16:04.922444",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Disbursement",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py
deleted file mode 100644
index 51bf327..0000000
--- a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py
+++ /dev/null
@@ -1,257 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, flt, get_datetime, nowdate
-
-import erpnext
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpledge import (
- get_pledged_security_qty,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
-)
-
-
-class LoanDisbursement(AccountsController):
- def validate(self):
- self.set_missing_values()
- self.validate_disbursal_amount()
-
- def on_submit(self):
- self.set_status_and_amounts()
- self.make_gl_entries()
-
- def on_cancel(self):
- self.set_status_and_amounts(cancel=1)
- self.make_gl_entries(cancel=1)
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
-
- def set_missing_values(self):
- if not self.disbursement_date:
- self.disbursement_date = nowdate()
-
- if not self.cost_center:
- self.cost_center = erpnext.get_default_cost_center(self.company)
-
- if not self.posting_date:
- self.posting_date = self.disbursement_date or nowdate()
-
- def validate_disbursal_amount(self):
- possible_disbursal_amount = get_disbursal_amount(self.against_loan)
-
- if self.disbursed_amount > possible_disbursal_amount:
- frappe.throw(_("Disbursed Amount cannot be greater than {0}").format(possible_disbursal_amount))
-
- def set_status_and_amounts(self, cancel=0):
- loan_details = frappe.get_all(
- "Loan",
- fields=[
- "loan_amount",
- "disbursed_amount",
- "total_payment",
- "total_principal_paid",
- "total_interest_payable",
- "status",
- "is_term_loan",
- "is_secured_loan",
- ],
- filters={"name": self.against_loan},
- )[0]
-
- if cancel:
- disbursed_amount, status, total_payment = self.get_values_on_cancel(loan_details)
- else:
- disbursed_amount, status, total_payment = self.get_values_on_submit(loan_details)
-
- frappe.db.set_value(
- "Loan",
- self.against_loan,
- {
- "disbursement_date": self.disbursement_date,
- "disbursed_amount": disbursed_amount,
- "status": status,
- "total_payment": total_payment,
- },
- )
-
- def get_values_on_cancel(self, loan_details):
- disbursed_amount = loan_details.disbursed_amount - self.disbursed_amount
- total_payment = loan_details.total_payment
-
- if loan_details.disbursed_amount > loan_details.loan_amount:
- topup_amount = loan_details.disbursed_amount - loan_details.loan_amount
- if topup_amount > self.disbursed_amount:
- topup_amount = self.disbursed_amount
-
- total_payment = total_payment - topup_amount
-
- if disbursed_amount == 0:
- status = "Sanctioned"
-
- elif disbursed_amount >= loan_details.loan_amount:
- status = "Disbursed"
- else:
- status = "Partially Disbursed"
-
- return disbursed_amount, status, total_payment
-
- def get_values_on_submit(self, loan_details):
- disbursed_amount = self.disbursed_amount + loan_details.disbursed_amount
- total_payment = loan_details.total_payment
-
- if loan_details.status in ("Disbursed", "Partially Disbursed") and not loan_details.is_term_loan:
- process_loan_interest_accrual_for_demand_loans(
- posting_date=add_days(self.disbursement_date, -1),
- loan=self.against_loan,
- accrual_type="Disbursement",
- )
-
- if disbursed_amount > loan_details.loan_amount:
- topup_amount = disbursed_amount - loan_details.loan_amount
-
- if topup_amount < 0:
- topup_amount = 0
-
- if topup_amount > self.disbursed_amount:
- topup_amount = self.disbursed_amount
-
- total_payment = total_payment + topup_amount
-
- if flt(disbursed_amount) >= loan_details.loan_amount:
- status = "Disbursed"
- else:
- status = "Partially Disbursed"
-
- return disbursed_amount, status, total_payment
-
- def make_gl_entries(self, cancel=0, adv_adj=0):
- gle_map = []
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.loan_account,
- "against": self.disbursement_account,
- "debit": self.disbursed_amount,
- "debit_in_account_currency": self.disbursed_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _("Disbursement against loan:") + self.against_loan,
- "cost_center": self.cost_center,
- "party_type": self.applicant_type,
- "party": self.applicant,
- "posting_date": self.disbursement_date,
- }
- )
- )
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.disbursement_account,
- "against": self.loan_account,
- "credit": self.disbursed_amount,
- "credit_in_account_currency": self.disbursed_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _("Disbursement against loan:") + self.against_loan,
- "cost_center": self.cost_center,
- "posting_date": self.disbursement_date,
- }
- )
- )
-
- if gle_map:
- make_gl_entries(gle_map, cancel=cancel, adv_adj=adv_adj)
-
-
-def get_total_pledged_security_value(loan):
- update_time = get_datetime()
-
- loan_security_price_map = frappe._dict(
- frappe.get_all(
- "Loan Security Price",
- fields=["loan_security", "loan_security_price"],
- filters={"valid_from": ("<=", update_time), "valid_upto": (">=", update_time)},
- as_list=1,
- )
- )
-
- hair_cut_map = frappe._dict(
- frappe.get_all("Loan Security", fields=["name", "haircut"], as_list=1)
- )
-
- security_value = 0.0
- pledged_securities = get_pledged_security_qty(loan)
-
- for security, qty in pledged_securities.items():
- after_haircut_percentage = 100 - hair_cut_map.get(security)
- security_value += (
- loan_security_price_map.get(security, 0) * qty * after_haircut_percentage
- ) / 100
-
- return security_value
-
-
-@frappe.whitelist()
-def get_disbursal_amount(loan, on_current_security_price=0):
- from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- get_pending_principal_amount,
- )
-
- loan_details = frappe.get_value(
- "Loan",
- loan,
- [
- "loan_amount",
- "disbursed_amount",
- "total_payment",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "refund_amount",
- "total_principal_paid",
- "total_interest_payable",
- "status",
- "is_term_loan",
- "is_secured_loan",
- "maximum_loan_amount",
- "written_off_amount",
- ],
- as_dict=1,
- )
-
- if loan_details.is_secured_loan and frappe.get_all(
- "Loan Security Shortfall", filters={"loan": loan, "status": "Pending"}
- ):
- return 0
-
- pending_principal_amount = get_pending_principal_amount(loan_details)
-
- security_value = 0.0
- if loan_details.is_secured_loan and on_current_security_price:
- security_value = get_total_pledged_security_value(loan)
-
- if loan_details.is_secured_loan and not on_current_security_price:
- security_value = get_maximum_amount_as_per_pledged_security(loan)
-
- if not security_value and not loan_details.is_secured_loan:
- security_value = flt(loan_details.loan_amount)
-
- disbursal_amount = flt(security_value) - flt(pending_principal_amount)
-
- if (
- loan_details.is_term_loan
- and (disbursal_amount + loan_details.loan_amount) > loan_details.loan_amount
- ):
- disbursal_amount = loan_details.loan_amount - loan_details.disbursed_amount
-
- return disbursal_amount
-
-
-def get_maximum_amount_as_per_pledged_security(loan):
- return flt(frappe.db.get_value("Loan Security Pledge", {"loan": loan}, "sum(maximum_loan_value)"))
diff --git a/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py b/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py
deleted file mode 100644
index 9cc6ec9..0000000
--- a/erpnext/loan_management/doctype/loan_disbursement/test_loan_disbursement.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import (
- add_days,
- add_to_date,
- date_diff,
- flt,
- get_datetime,
- get_first_day,
- get_last_day,
- nowdate,
-)
-
-from erpnext.loan_management.doctype.loan.test_loan import (
- create_demand_loan,
- create_loan_accounts,
- create_loan_application,
- create_loan_security,
- create_loan_security_pledge,
- create_loan_security_price,
- create_loan_security_type,
- create_loan_type,
- create_repayment_entry,
- make_loan_disbursement_entry,
-)
-from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
-from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
- days_in_year,
- get_per_day_interest,
-)
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import calculate_amounts
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
-)
-from erpnext.selling.doctype.customer.test_customer import get_customer_dict
-
-
-class TestLoanDisbursement(unittest.TestCase):
- def setUp(self):
- create_loan_accounts()
-
- create_loan_type(
- "Demand Loan",
- 2000000,
- 13.5,
- 25,
- 0,
- 5,
- "Cash",
- "Disbursement Account - _TC",
- "Payment Account - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- )
-
- create_loan_security_type()
- create_loan_security()
-
- create_loan_security_price(
- "Test Security 1", 500, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))
- )
- create_loan_security_price(
- "Test Security 2", 250, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))
- )
-
- if not frappe.db.exists("Customer", "_Test Loan Customer"):
- frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True)
-
- self.applicant = frappe.db.get_value("Customer", {"name": "_Test Loan Customer"}, "name")
-
- def test_loan_topup(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant, "Demand Loan", loan_application, posting_date=get_first_day(nowdate())
- )
-
- loan.submit()
-
- first_date = get_first_day(nowdate())
- last_date = get_last_day(nowdate())
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime().year) * 100
- )
-
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
-
- process_loan_interest_accrual_for_demand_loans(posting_date=add_days(last_date, 1))
-
- # Should not be able to create loan disbursement entry before repayment
- self.assertRaises(
- frappe.ValidationError, make_loan_disbursement_entry, loan.name, 500000, first_date
- )
-
- repayment_entry = create_repayment_entry(
- loan.name, self.applicant, add_days(get_last_day(nowdate()), 5), 611095.89
- )
-
- repayment_entry.submit()
- loan.reload()
-
- # After repayment loan disbursement entry should go through
- make_loan_disbursement_entry(loan.name, 500000, disbursement_date=add_days(last_date, 16))
-
- # check for disbursement accrual
- loan_interest_accrual = frappe.db.get_value(
- "Loan Interest Accrual", {"loan": loan.name, "accrual_type": "Disbursement"}
- )
-
- self.assertTrue(loan_interest_accrual)
-
- def test_loan_topup_with_additional_pledge(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant, "Demand Loan", pledge
- )
- create_pledge(loan_application)
-
- loan = create_demand_loan(
- self.applicant, "Demand Loan", loan_application, posting_date="2019-10-01"
- )
- loan.submit()
-
- self.assertEqual(loan.loan_amount, 1000000)
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- # Disbursed 10,00,000 amount
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
- amounts = calculate_amounts(loan.name, add_days(last_date, 1))
-
- previous_interest = amounts["interest_amount"]
-
- pledge1 = [{"loan_security": "Test Security 1", "qty": 2000.00}]
-
- create_loan_security_pledge(self.applicant, pledge1, loan=loan.name)
-
- # Topup 500000
- make_loan_disbursement_entry(loan.name, 500000, disbursement_date=add_days(last_date, 1))
- process_loan_interest_accrual_for_demand_loans(posting_date=add_days(last_date, 15))
- amounts = calculate_amounts(loan.name, add_days(last_date, 15))
-
- per_day_interest = get_per_day_interest(1500000, 13.5, "2019-10-30")
- interest = per_day_interest * 15
-
- self.assertEqual(amounts["pending_principal_amount"], 1500000)
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/__init__.py b/erpnext/loan_management/doctype/loan_interest_accrual/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_interest_accrual/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.js b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.js
deleted file mode 100644
index 177b235..0000000
--- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan Interest Accrual', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json
deleted file mode 100644
index 08dc98c..0000000
--- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json
+++ /dev/null
@@ -1,239 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-LIA-.#####",
- "creation": "2019-09-09 22:34:36.346812",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan",
- "applicant_type",
- "applicant",
- "interest_income_account",
- "loan_account",
- "column_break_4",
- "company",
- "posting_date",
- "accrual_type",
- "is_term_loan",
- "section_break_7",
- "pending_principal_amount",
- "payable_principal_amount",
- "paid_principal_amount",
- "column_break_14",
- "interest_amount",
- "total_pending_interest_amount",
- "paid_interest_amount",
- "penalty_amount",
- "section_break_15",
- "process_loan_interest_accrual",
- "repayment_schedule_name",
- "last_accrual_date",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Loan",
- "options": "Loan"
- },
- {
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date"
- },
- {
- "fieldname": "pending_principal_amount",
- "fieldtype": "Currency",
- "label": "Pending Principal Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "interest_amount",
- "fieldtype": "Currency",
- "label": "Interest Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Interest Accrual",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer"
- },
- {
- "fetch_from": "loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Applicant",
- "options": "applicant_type"
- },
- {
- "fieldname": "column_break_4",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan.interest_income_account",
- "fieldname": "interest_income_account",
- "fieldtype": "Data",
- "label": "Interest Income Account"
- },
- {
- "fetch_from": "loan.loan_account",
- "fieldname": "loan_account",
- "fieldtype": "Data",
- "label": "Loan Account"
- },
- {
- "fieldname": "section_break_7",
- "fieldtype": "Section Break",
- "label": "Amounts"
- },
- {
- "fetch_from": "loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company"
- },
- {
- "default": "0",
- "fetch_from": "loan.is_term_loan",
- "fieldname": "is_term_loan",
- "fieldtype": "Check",
- "label": "Is Term Loan",
- "read_only": 1
- },
- {
- "depends_on": "is_term_loan",
- "fieldname": "payable_principal_amount",
- "fieldtype": "Currency",
- "label": "Payable Principal Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "section_break_15",
- "fieldtype": "Section Break"
- },
- {
- "fieldname": "process_loan_interest_accrual",
- "fieldtype": "Link",
- "label": "Process Loan Interest Accrual",
- "options": "Process Loan Interest Accrual"
- },
- {
- "fieldname": "column_break_14",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "repayment_schedule_name",
- "fieldtype": "Data",
- "hidden": 1,
- "label": "Repayment Schedule Name",
- "read_only": 1
- },
- {
- "depends_on": "eval:doc.is_term_loan",
- "fieldname": "paid_principal_amount",
- "fieldtype": "Currency",
- "label": "Paid Principal Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "paid_interest_amount",
- "fieldtype": "Currency",
- "label": "Paid Interest Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "accrual_type",
- "fieldtype": "Select",
- "in_filter": 1,
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Accrual Type",
- "options": "Regular\nRepayment\nDisbursement\nCredit Adjustment\nDebit Adjustment\nRefund"
- },
- {
- "fieldname": "penalty_amount",
- "fieldtype": "Currency",
- "label": "Penalty Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "last_accrual_date",
- "fieldtype": "Date",
- "hidden": 1,
- "label": "Last Accrual Date",
- "read_only": 1
- },
- {
- "fieldname": "total_pending_interest_amount",
- "fieldtype": "Currency",
- "label": "Total Pending Interest Amount",
- "options": "Company:company:default_currency"
- }
- ],
- "in_create": 1,
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-06-30 11:51:31.911794",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Interest Accrual",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py
deleted file mode 100644
index ab4ea4c..0000000
--- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py
+++ /dev/null
@@ -1,331 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, cint, date_diff, flt, get_datetime, getdate, nowdate
-
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-
-
-class LoanInterestAccrual(AccountsController):
- def validate(self):
- if not self.loan:
- frappe.throw(_("Loan is mandatory"))
-
- if not self.posting_date:
- self.posting_date = nowdate()
-
- if not self.interest_amount and not self.payable_principal_amount:
- frappe.throw(_("Interest Amount or Principal Amount is mandatory"))
-
- if not self.last_accrual_date:
- self.last_accrual_date = get_last_accrual_date(self.loan, self.posting_date)
-
- def on_submit(self):
- self.make_gl_entries()
-
- def on_cancel(self):
- if self.repayment_schedule_name:
- self.update_is_accrued()
-
- self.make_gl_entries(cancel=1)
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
-
- def update_is_accrued(self):
- frappe.db.set_value("Repayment Schedule", self.repayment_schedule_name, "is_accrued", 0)
-
- def make_gl_entries(self, cancel=0, adv_adj=0):
- gle_map = []
-
- cost_center = frappe.db.get_value("Loan", self.loan, "cost_center")
-
- if self.interest_amount:
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.loan_account,
- "party_type": self.applicant_type,
- "party": self.applicant,
- "against": self.interest_income_account,
- "debit": self.interest_amount,
- "debit_in_account_currency": self.interest_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _("Interest accrued from {0} to {1} against loan: {2}").format(
- self.last_accrual_date, self.posting_date, self.loan
- ),
- "cost_center": cost_center,
- "posting_date": self.posting_date,
- }
- )
- )
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.interest_income_account,
- "against": self.loan_account,
- "credit": self.interest_amount,
- "credit_in_account_currency": self.interest_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": ("Interest accrued from {0} to {1} against loan: {2}").format(
- self.last_accrual_date, self.posting_date, self.loan
- ),
- "cost_center": cost_center,
- "posting_date": self.posting_date,
- }
- )
- )
-
- if gle_map:
- make_gl_entries(gle_map, cancel=cancel, adv_adj=adv_adj)
-
-
-# For Eg: If Loan disbursement date is '01-09-2019' and disbursed amount is 1000000 and
-# rate of interest is 13.5 then first loan interest accural will be on '01-10-2019'
-# which means interest will be accrued for 30 days which should be equal to 11095.89
-def calculate_accrual_amount_for_demand_loans(
- loan, posting_date, process_loan_interest, accrual_type
-):
- from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- calculate_amounts,
- get_pending_principal_amount,
- )
-
- no_of_days = get_no_of_days_for_interest_accural(loan, posting_date)
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- if no_of_days <= 0:
- return
-
- pending_principal_amount = get_pending_principal_amount(loan)
-
- interest_per_day = get_per_day_interest(
- pending_principal_amount, loan.rate_of_interest, posting_date
- )
- payable_interest = interest_per_day * no_of_days
-
- pending_amounts = calculate_amounts(loan.name, posting_date, payment_type="Loan Closure")
-
- args = frappe._dict(
- {
- "loan": loan.name,
- "applicant_type": loan.applicant_type,
- "applicant": loan.applicant,
- "interest_income_account": loan.interest_income_account,
- "loan_account": loan.loan_account,
- "pending_principal_amount": pending_principal_amount,
- "interest_amount": payable_interest,
- "total_pending_interest_amount": pending_amounts["interest_amount"],
- "penalty_amount": pending_amounts["penalty_amount"],
- "process_loan_interest": process_loan_interest,
- "posting_date": posting_date,
- "accrual_type": accrual_type,
- }
- )
-
- if flt(payable_interest, precision) > 0.0:
- make_loan_interest_accrual_entry(args)
-
-
-def make_accrual_interest_entry_for_demand_loans(
- posting_date, process_loan_interest, open_loans=None, loan_type=None, accrual_type="Regular"
-):
- query_filters = {
- "status": ("in", ["Disbursed", "Partially Disbursed"]),
- "docstatus": 1,
- "is_term_loan": 0,
- }
-
- if loan_type:
- query_filters.update({"loan_type": loan_type})
-
- if not open_loans:
- open_loans = frappe.get_all(
- "Loan",
- fields=[
- "name",
- "total_payment",
- "total_amount_paid",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "refund_amount",
- "loan_account",
- "interest_income_account",
- "loan_amount",
- "is_term_loan",
- "status",
- "disbursement_date",
- "disbursed_amount",
- "applicant_type",
- "applicant",
- "rate_of_interest",
- "total_interest_payable",
- "written_off_amount",
- "total_principal_paid",
- "repayment_start_date",
- ],
- filters=query_filters,
- )
-
- for loan in open_loans:
- calculate_accrual_amount_for_demand_loans(
- loan, posting_date, process_loan_interest, accrual_type
- )
-
-
-def make_accrual_interest_entry_for_term_loans(
- posting_date, process_loan_interest, term_loan=None, loan_type=None, accrual_type="Regular"
-):
- curr_date = posting_date or add_days(nowdate(), 1)
-
- term_loans = get_term_loans(curr_date, term_loan, loan_type)
-
- accrued_entries = []
-
- for loan in term_loans:
- accrued_entries.append(loan.payment_entry)
- args = frappe._dict(
- {
- "loan": loan.name,
- "applicant_type": loan.applicant_type,
- "applicant": loan.applicant,
- "interest_income_account": loan.interest_income_account,
- "loan_account": loan.loan_account,
- "interest_amount": loan.interest_amount,
- "payable_principal": loan.principal_amount,
- "process_loan_interest": process_loan_interest,
- "repayment_schedule_name": loan.payment_entry,
- "posting_date": posting_date,
- "accrual_type": accrual_type,
- }
- )
-
- make_loan_interest_accrual_entry(args)
-
- if accrued_entries:
- frappe.db.sql(
- """UPDATE `tabRepayment Schedule`
- SET is_accrued = 1 where name in (%s)""" # nosec
- % ", ".join(["%s"] * len(accrued_entries)),
- tuple(accrued_entries),
- )
-
-
-def get_term_loans(date, term_loan=None, loan_type=None):
- condition = ""
-
- if term_loan:
- condition += " AND l.name = %s" % frappe.db.escape(term_loan)
-
- if loan_type:
- condition += " AND l.loan_type = %s" % frappe.db.escape(loan_type)
-
- term_loans = frappe.db.sql(
- """SELECT l.name, l.total_payment, l.total_amount_paid, l.loan_account,
- l.interest_income_account, l.is_term_loan, l.disbursement_date, l.applicant_type, l.applicant,
- l.rate_of_interest, l.total_interest_payable, l.repayment_start_date, rs.name as payment_entry,
- rs.payment_date, rs.principal_amount, rs.interest_amount, rs.is_accrued , rs.balance_loan_amount
- FROM `tabLoan` l, `tabRepayment Schedule` rs
- WHERE rs.parent = l.name
- AND l.docstatus=1
- AND l.is_term_loan =1
- AND rs.payment_date <= %s
- AND rs.is_accrued=0 {0}
- AND rs.principal_amount > 0
- AND l.status = 'Disbursed'
- ORDER BY rs.payment_date""".format(
- condition
- ),
- (getdate(date)),
- as_dict=1,
- )
-
- return term_loans
-
-
-def make_loan_interest_accrual_entry(args):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- loan_interest_accrual = frappe.new_doc("Loan Interest Accrual")
- loan_interest_accrual.loan = args.loan
- loan_interest_accrual.applicant_type = args.applicant_type
- loan_interest_accrual.applicant = args.applicant
- loan_interest_accrual.interest_income_account = args.interest_income_account
- loan_interest_accrual.loan_account = args.loan_account
- loan_interest_accrual.pending_principal_amount = flt(args.pending_principal_amount, precision)
- loan_interest_accrual.interest_amount = flt(args.interest_amount, precision)
- loan_interest_accrual.total_pending_interest_amount = flt(
- args.total_pending_interest_amount, precision
- )
- loan_interest_accrual.penalty_amount = flt(args.penalty_amount, precision)
- loan_interest_accrual.posting_date = args.posting_date or nowdate()
- loan_interest_accrual.process_loan_interest_accrual = args.process_loan_interest
- loan_interest_accrual.repayment_schedule_name = args.repayment_schedule_name
- loan_interest_accrual.payable_principal_amount = args.payable_principal
- loan_interest_accrual.accrual_type = args.accrual_type
-
- loan_interest_accrual.save()
- loan_interest_accrual.submit()
-
-
-def get_no_of_days_for_interest_accural(loan, posting_date):
- last_interest_accrual_date = get_last_accrual_date(loan.name, posting_date)
-
- no_of_days = date_diff(posting_date or nowdate(), last_interest_accrual_date) + 1
-
- return no_of_days
-
-
-def get_last_accrual_date(loan, posting_date):
- last_posting_date = frappe.db.sql(
- """ SELECT MAX(posting_date) from `tabLoan Interest Accrual`
- WHERE loan = %s and docstatus = 1""",
- (loan),
- )
-
- if last_posting_date[0][0]:
- last_interest_accrual_date = last_posting_date[0][0]
- # interest for last interest accrual date is already booked, so add 1 day
- last_disbursement_date = get_last_disbursement_date(loan, posting_date)
-
- if last_disbursement_date and getdate(last_disbursement_date) > add_days(
- getdate(last_interest_accrual_date), 1
- ):
- last_interest_accrual_date = last_disbursement_date
-
- return add_days(last_interest_accrual_date, 1)
- else:
- return frappe.db.get_value("Loan", loan, "disbursement_date")
-
-
-def get_last_disbursement_date(loan, posting_date):
- last_disbursement_date = frappe.db.get_value(
- "Loan Disbursement",
- {"docstatus": 1, "against_loan": loan, "posting_date": ("<", posting_date)},
- "MAX(posting_date)",
- )
-
- return last_disbursement_date
-
-
-def days_in_year(year):
- days = 365
-
- if (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0):
- days = 366
-
- return days
-
-
-def get_per_day_interest(principal_amount, rate_of_interest, posting_date=None):
- if not posting_date:
- posting_date = getdate()
-
- return flt(
- (principal_amount * rate_of_interest) / (days_in_year(get_datetime(posting_date).year) * 100)
- )
diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py b/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py
deleted file mode 100644
index fd59393..0000000
--- a/erpnext/loan_management/doctype/loan_interest_accrual/test_loan_interest_accrual.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-
-import frappe
-from frappe.utils import add_to_date, date_diff, flt, get_datetime, get_first_day, nowdate
-
-from erpnext.loan_management.doctype.loan.test_loan import (
- create_demand_loan,
- create_loan_accounts,
- create_loan_application,
- create_loan_security,
- create_loan_security_price,
- create_loan_security_type,
- create_loan_type,
- make_loan_disbursement_entry,
-)
-from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
-from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
- days_in_year,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
-)
-from erpnext.selling.doctype.customer.test_customer import get_customer_dict
-
-
-class TestLoanInterestAccrual(unittest.TestCase):
- def setUp(self):
- create_loan_accounts()
-
- create_loan_type(
- "Demand Loan",
- 2000000,
- 13.5,
- 25,
- 0,
- 5,
- "Cash",
- "Disbursement Account - _TC",
- "Payment Account - _TC",
- "Loan Account - _TC",
- "Interest Income Account - _TC",
- "Penalty Income Account - _TC",
- )
-
- create_loan_security_type()
- create_loan_security()
-
- create_loan_security_price(
- "Test Security 1", 500, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))
- )
-
- if not frappe.db.exists("Customer", "_Test Loan Customer"):
- frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True)
-
- self.applicant = frappe.db.get_value("Customer", {"name": "_Test Loan Customer"}, "name")
-
- def test_loan_interest_accural(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant, "Demand Loan", pledge
- )
- create_pledge(loan_application)
- loan = create_demand_loan(
- self.applicant, "Demand Loan", loan_application, posting_date=get_first_day(nowdate())
- )
- loan.submit()
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
-
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
- loan_interest_accural = frappe.get_doc("Loan Interest Accrual", {"loan": loan.name})
-
- self.assertEqual(flt(loan_interest_accural.interest_amount, 0), flt(accrued_interest_amount, 0))
-
- def test_accumulated_amounts(self):
- pledge = [{"loan_security": "Test Security 1", "qty": 4000.00}]
-
- loan_application = create_loan_application(
- "_Test Company", self.applicant, "Demand Loan", pledge
- )
- create_pledge(loan_application)
- loan = create_demand_loan(
- self.applicant, "Demand Loan", loan_application, posting_date=get_first_day(nowdate())
- )
- loan.submit()
-
- first_date = "2019-10-01"
- last_date = "2019-10-30"
-
- no_of_days = date_diff(last_date, first_date) + 1
- accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
- make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
- process_loan_interest_accrual_for_demand_loans(posting_date=last_date)
- loan_interest_accrual = frappe.get_doc("Loan Interest Accrual", {"loan": loan.name})
-
- self.assertEqual(flt(loan_interest_accrual.interest_amount, 0), flt(accrued_interest_amount, 0))
-
- next_start_date = "2019-10-31"
- next_end_date = "2019-11-29"
-
- no_of_days = date_diff(next_end_date, next_start_date) + 1
- process = process_loan_interest_accrual_for_demand_loans(posting_date=next_end_date)
- new_accrued_interest_amount = (loan.loan_amount * loan.rate_of_interest * no_of_days) / (
- days_in_year(get_datetime(first_date).year) * 100
- )
-
- total_pending_interest_amount = flt(accrued_interest_amount + new_accrued_interest_amount, 0)
-
- loan_interest_accrual = frappe.get_doc(
- "Loan Interest Accrual", {"loan": loan.name, "process_loan_interest_accrual": process}
- )
- self.assertEqual(
- flt(loan_interest_accrual.total_pending_interest_amount, 0), total_pending_interest_amount
- )
diff --git a/erpnext/loan_management/doctype/loan_refund/__init__.py b/erpnext/loan_management/doctype/loan_refund/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_refund/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.js b/erpnext/loan_management/doctype/loan_refund/loan_refund.js
deleted file mode 100644
index f108bf7..0000000
--- a/erpnext/loan_management/doctype/loan_refund/loan_refund.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Refund', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.json b/erpnext/loan_management/doctype/loan_refund/loan_refund.json
deleted file mode 100644
index f78e55e..0000000
--- a/erpnext/loan_management/doctype/loan_refund/loan_refund.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-RF-.#####",
- "creation": "2022-06-24 15:51:03.165498",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan",
- "applicant_type",
- "applicant",
- "column_break_3",
- "company",
- "posting_date",
- "accounting_dimensions_section",
- "cost_center",
- "section_break_9",
- "refund_account",
- "column_break_11",
- "refund_amount",
- "reference_number",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan",
- "options": "Loan",
- "reqd": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "read_only": 1
- },
- {
- "fetch_from": "loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "label": "Applicant ",
- "options": "applicant_type",
- "read_only": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "read_only": 1,
- "reqd": 1
- },
- {
- "default": "Today",
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date",
- "reqd": 1
- },
- {
- "collapsible": 1,
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fieldname": "section_break_9",
- "fieldtype": "Section Break",
- "label": "Refund Details"
- },
- {
- "fieldname": "refund_account",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Refund Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "refund_amount",
- "fieldtype": "Currency",
- "label": "Refund Amount",
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Refund",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Refund",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "reference_number",
- "fieldtype": "Data",
- "label": "Reference Number"
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-06-24 16:13:48.793486",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Refund",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.py b/erpnext/loan_management/doctype/loan_refund/loan_refund.py
deleted file mode 100644
index d7ab54c..0000000
--- a/erpnext/loan_management/doctype/loan_refund/loan_refund.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _
-from frappe.utils import getdate
-
-import erpnext
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- get_pending_principal_amount,
-)
-
-
-class LoanRefund(AccountsController):
- """
- Add refund if total repayment is more than that is owed.
- """
-
- def validate(self):
- self.set_missing_values()
- self.validate_refund_amount()
-
- def set_missing_values(self):
- if not self.cost_center:
- self.cost_center = erpnext.get_default_cost_center(self.company)
-
- def validate_refund_amount(self):
- loan = frappe.get_doc("Loan", self.loan)
- pending_amount = get_pending_principal_amount(loan)
- if pending_amount >= 0:
- frappe.throw(_("No excess amount to refund."))
- else:
- excess_amount = pending_amount * -1
-
- if self.refund_amount > excess_amount:
- frappe.throw(_("Refund amount cannot be greater than excess amount {0}").format(excess_amount))
-
- def on_submit(self):
- self.update_outstanding_amount()
- self.make_gl_entries()
-
- def on_cancel(self):
- self.update_outstanding_amount(cancel=1)
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
- self.make_gl_entries(cancel=1)
-
- def update_outstanding_amount(self, cancel=0):
- refund_amount = frappe.db.get_value("Loan", self.loan, "refund_amount")
-
- if cancel:
- refund_amount -= self.refund_amount
- else:
- refund_amount += self.refund_amount
-
- frappe.db.set_value("Loan", self.loan, "refund_amount", refund_amount)
-
- def make_gl_entries(self, cancel=0):
- gl_entries = []
- loan_details = frappe.get_doc("Loan", self.loan)
-
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": self.refund_account,
- "against": loan_details.loan_account,
- "credit": self.refund_amount,
- "credit_in_account_currency": self.refund_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _("Against Loan:") + self.loan,
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": loan_details.loan_account,
- "party_type": loan_details.applicant_type,
- "party": loan_details.applicant,
- "against": self.refund_account,
- "debit": self.refund_amount,
- "debit_in_account_currency": self.refund_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _("Against Loan:") + self.loan,
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- make_gl_entries(gl_entries, cancel=cancel, merge_entries=False)
diff --git a/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py b/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py
deleted file mode 100644
index de2f9e1..0000000
--- a/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-from frappe.tests.utils import FrappeTestCase
-
-
-class TestLoanRefund(FrappeTestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_repayment/__init__.py b/erpnext/loan_management/doctype/loan_repayment/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_repayment/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.js b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.js
deleted file mode 100644
index 82a2d80..0000000
--- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan Repayment', {
- // refresh: function(frm) {
-
- // }
- onload: function(frm) {
- frm.set_query('against_loan', function() {
- return {
- 'filters': {
- 'docstatus': 1
- }
- };
- });
-
- if (frm.doc.against_loan && frm.doc.posting_date && frm.doc.docstatus == 0) {
- frm.trigger('calculate_repayment_amounts');
- }
- },
-
- posting_date : function(frm) {
- frm.trigger('calculate_repayment_amounts');
- },
-
- against_loan: function(frm) {
- if (frm.doc.posting_date) {
- frm.trigger('calculate_repayment_amounts');
- }
- },
-
- payment_type: function(frm) {
- if (frm.doc.posting_date) {
- frm.trigger('calculate_repayment_amounts');
- }
- },
-
- calculate_repayment_amounts: function(frm) {
- frappe.call({
- method: 'erpnext.loan_management.doctype.loan_repayment.loan_repayment.calculate_amounts',
- args: {
- 'against_loan': frm.doc.against_loan,
- 'posting_date': frm.doc.posting_date,
- 'payment_type': frm.doc.payment_type
- },
- callback: function(r) {
- let amounts = r.message;
- frm.set_value('amount_paid', 0.0);
- frm.set_df_property('amount_paid', 'read_only', frm.doc.payment_type == "Loan Closure" ? 1:0);
-
- frm.set_value('pending_principal_amount', amounts['pending_principal_amount']);
- if (frm.doc.is_term_loan || frm.doc.payment_type == "Loan Closure") {
- frm.set_value('payable_principal_amount', amounts['payable_principal_amount']);
- frm.set_value('amount_paid', amounts['payable_amount']);
- }
- frm.set_value('interest_payable', amounts['interest_amount']);
- frm.set_value('penalty_amount', amounts['penalty_amount']);
- frm.set_value('payable_amount', amounts['payable_amount']);
- }
- });
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json
deleted file mode 100644
index 3e7dc28..0000000
--- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json
+++ /dev/null
@@ -1,339 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-REP-.####",
- "creation": "2022-01-25 10:30:02.767941",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "against_loan",
- "applicant_type",
- "applicant",
- "loan_type",
- "column_break_3",
- "company",
- "posting_date",
- "clearance_date",
- "rate_of_interest",
- "is_term_loan",
- "payment_details_section",
- "due_date",
- "pending_principal_amount",
- "interest_payable",
- "payable_amount",
- "column_break_9",
- "shortfall_amount",
- "payable_principal_amount",
- "penalty_amount",
- "amount_paid",
- "accounting_dimensions_section",
- "cost_center",
- "references_section",
- "reference_number",
- "column_break_21",
- "reference_date",
- "principal_amount_paid",
- "total_penalty_paid",
- "total_interest_paid",
- "repayment_details",
- "amended_from",
- "accounting_details_section",
- "payment_account",
- "penalty_income_account",
- "column_break_36",
- "loan_account"
- ],
- "fields": [
- {
- "fieldname": "against_loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Against Loan",
- "options": "Loan",
- "reqd": 1
- },
- {
- "fieldname": "posting_date",
- "fieldtype": "Datetime",
- "in_list_view": 1,
- "label": "Posting Date",
- "reqd": 1
- },
- {
- "fieldname": "payment_details_section",
- "fieldtype": "Section Break",
- "label": "Payment Details"
- },
- {
- "fieldname": "penalty_amount",
- "fieldtype": "Currency",
- "label": "Penalty Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "interest_payable",
- "fieldtype": "Currency",
- "label": "Interest Payable",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "against_loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fetch_from": "against_loan.loan_type",
- "fieldname": "loan_type",
- "fieldtype": "Link",
- "label": "Loan Type",
- "options": "Loan Type",
- "read_only": 1
- },
- {
- "fieldname": "column_break_9",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "payable_amount",
- "fieldtype": "Currency",
- "label": "Payable Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "bold": 1,
- "fieldname": "amount_paid",
- "fieldtype": "Currency",
- "label": "Amount Paid",
- "non_negative": 1,
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Repayment",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fetch_from": "against_loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company",
- "read_only": 1
- },
- {
- "fieldname": "pending_principal_amount",
- "fieldtype": "Currency",
- "label": "Pending Principal Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "default": "0",
- "fetch_from": "against_loan.is_term_loan",
- "fieldname": "is_term_loan",
- "fieldtype": "Check",
- "label": "Is Term Loan",
- "read_only": 1
- },
- {
- "depends_on": "eval:doc.payment_type==\"Loan Closure\" || doc.is_term_loan",
- "fieldname": "payable_principal_amount",
- "fieldtype": "Currency",
- "label": "Payable Principal Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "references_section",
- "fieldtype": "Section Break",
- "label": "Payment References"
- },
- {
- "fieldname": "reference_number",
- "fieldtype": "Data",
- "label": "Reference Number"
- },
- {
- "fieldname": "reference_date",
- "fieldtype": "Date",
- "label": "Reference Date"
- },
- {
- "fieldname": "column_break_21",
- "fieldtype": "Column Break"
- },
- {
- "default": "0.0",
- "fieldname": "principal_amount_paid",
- "fieldtype": "Currency",
- "hidden": 1,
- "label": "Principal Amount Paid",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fetch_from": "against_loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "read_only": 1
- },
- {
- "fieldname": "due_date",
- "fieldtype": "Date",
- "label": "Due Date",
- "read_only": 1
- },
- {
- "fieldname": "repayment_details",
- "fieldtype": "Table",
- "hidden": 1,
- "label": "Repayment Details",
- "options": "Loan Repayment Detail"
- },
- {
- "fieldname": "total_interest_paid",
- "fieldtype": "Currency",
- "hidden": 1,
- "label": "Total Interest Paid",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fetch_from": "loan_type.rate_of_interest",
- "fieldname": "rate_of_interest",
- "fieldtype": "Percent",
- "label": "Rate Of Interest",
- "read_only": 1
- },
- {
- "fieldname": "shortfall_amount",
- "fieldtype": "Currency",
- "label": "Shortfall Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "total_penalty_paid",
- "fieldtype": "Currency",
- "hidden": 1,
- "label": "Total Penalty Paid",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "clearance_date",
- "fieldtype": "Date",
- "label": "Clearance Date",
- "no_copy": 1,
- "read_only": 1
- },
- {
- "fieldname": "accounting_details_section",
- "fieldtype": "Section Break",
- "label": "Accounting Details"
- },
- {
- "fetch_from": "against_loan.payment_account",
- "fetch_if_empty": 1,
- "fieldname": "payment_account",
- "fieldtype": "Link",
- "label": "Repayment Account",
- "options": "Account"
- },
- {
- "fieldname": "column_break_36",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "against_loan.loan_account",
- "fieldname": "loan_account",
- "fieldtype": "Link",
- "label": "Loan Account",
- "options": "Account",
- "read_only": 1
- },
- {
- "fetch_from": "against_loan.penalty_income_account",
- "fieldname": "penalty_income_account",
- "fieldtype": "Link",
- "hidden": 1,
- "label": "Penalty Income Account",
- "options": "Account"
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-08-04 17:13:51.964203",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Repayment",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py
deleted file mode 100644
index 82aab4a..0000000
--- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py
+++ /dev/null
@@ -1,777 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, cint, date_diff, flt, get_datetime, getdate
-
-import erpnext
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
- get_last_accrual_date,
- get_per_day_interest,
-)
-from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import (
- update_shortfall_status,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_demand_loans,
-)
-
-
-class LoanRepayment(AccountsController):
- def validate(self):
- amounts = calculate_amounts(self.against_loan, self.posting_date)
- self.set_missing_values(amounts)
- self.check_future_entries()
- self.validate_amount()
- self.allocate_amounts(amounts)
-
- def before_submit(self):
- self.book_unaccrued_interest()
-
- def on_submit(self):
- self.update_paid_amount()
- self.update_repayment_schedule()
- self.make_gl_entries()
-
- def on_cancel(self):
- self.check_future_accruals()
- self.update_repayment_schedule(cancel=1)
- self.mark_as_unpaid()
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
- self.make_gl_entries(cancel=1)
-
- def set_missing_values(self, amounts):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- if not self.posting_date:
- self.posting_date = get_datetime()
-
- if not self.cost_center:
- self.cost_center = erpnext.get_default_cost_center(self.company)
-
- if not self.interest_payable:
- self.interest_payable = flt(amounts["interest_amount"], precision)
-
- if not self.penalty_amount:
- self.penalty_amount = flt(amounts["penalty_amount"], precision)
-
- if not self.pending_principal_amount:
- self.pending_principal_amount = flt(amounts["pending_principal_amount"], precision)
-
- if not self.payable_principal_amount and self.is_term_loan:
- self.payable_principal_amount = flt(amounts["payable_principal_amount"], precision)
-
- if not self.payable_amount:
- self.payable_amount = flt(amounts["payable_amount"], precision)
-
- shortfall_amount = flt(
- frappe.db.get_value(
- "Loan Security Shortfall", {"loan": self.against_loan, "status": "Pending"}, "shortfall_amount"
- )
- )
-
- if shortfall_amount:
- self.shortfall_amount = shortfall_amount
-
- if amounts.get("due_date"):
- self.due_date = amounts.get("due_date")
-
- def check_future_entries(self):
- future_repayment_date = frappe.db.get_value(
- "Loan Repayment",
- {"posting_date": (">", self.posting_date), "docstatus": 1, "against_loan": self.against_loan},
- "posting_date",
- )
-
- if future_repayment_date:
- frappe.throw("Repayment already made till date {0}".format(get_datetime(future_repayment_date)))
-
- def validate_amount(self):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- if not self.amount_paid:
- frappe.throw(_("Amount paid cannot be zero"))
-
- def book_unaccrued_interest(self):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
- if flt(self.total_interest_paid, precision) > flt(self.interest_payable, precision):
- if not self.is_term_loan:
- # get last loan interest accrual date
- last_accrual_date = get_last_accrual_date(self.against_loan, self.posting_date)
-
- # get posting date upto which interest has to be accrued
- per_day_interest = get_per_day_interest(
- self.pending_principal_amount, self.rate_of_interest, self.posting_date
- )
-
- no_of_days = (
- flt(flt(self.total_interest_paid - self.interest_payable, precision) / per_day_interest, 0)
- - 1
- )
-
- posting_date = add_days(last_accrual_date, no_of_days)
-
- # book excess interest paid
- process = process_loan_interest_accrual_for_demand_loans(
- posting_date=posting_date, loan=self.against_loan, accrual_type="Repayment"
- )
-
- # get loan interest accrual to update paid amount
- lia = frappe.db.get_value(
- "Loan Interest Accrual",
- {"process_loan_interest_accrual": process},
- ["name", "interest_amount", "payable_principal_amount"],
- as_dict=1,
- )
-
- if lia:
- self.append(
- "repayment_details",
- {
- "loan_interest_accrual": lia.name,
- "paid_interest_amount": flt(self.total_interest_paid - self.interest_payable, precision),
- "paid_principal_amount": 0.0,
- "accrual_type": "Repayment",
- },
- )
-
- def update_paid_amount(self):
- loan = frappe.get_value(
- "Loan",
- self.against_loan,
- [
- "total_amount_paid",
- "total_principal_paid",
- "status",
- "is_secured_loan",
- "total_payment",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "refund_amount",
- "loan_amount",
- "disbursed_amount",
- "total_interest_payable",
- "written_off_amount",
- ],
- as_dict=1,
- )
-
- loan.update(
- {
- "total_amount_paid": loan.total_amount_paid + self.amount_paid,
- "total_principal_paid": loan.total_principal_paid + self.principal_amount_paid,
- }
- )
-
- pending_principal_amount = get_pending_principal_amount(loan)
- if not loan.is_secured_loan and pending_principal_amount <= 0:
- loan.update({"status": "Loan Closure Requested"})
-
- for payment in self.repayment_details:
- frappe.db.sql(
- """ UPDATE `tabLoan Interest Accrual`
- SET paid_principal_amount = `paid_principal_amount` + %s,
- paid_interest_amount = `paid_interest_amount` + %s
- WHERE name = %s""",
- (
- flt(payment.paid_principal_amount),
- flt(payment.paid_interest_amount),
- payment.loan_interest_accrual,
- ),
- )
-
- frappe.db.sql(
- """ UPDATE `tabLoan`
- SET total_amount_paid = %s, total_principal_paid = %s, status = %s
- WHERE name = %s """,
- (loan.total_amount_paid, loan.total_principal_paid, loan.status, self.against_loan),
- )
-
- update_shortfall_status(self.against_loan, self.principal_amount_paid)
-
- def mark_as_unpaid(self):
- loan = frappe.get_value(
- "Loan",
- self.against_loan,
- [
- "total_amount_paid",
- "total_principal_paid",
- "status",
- "is_secured_loan",
- "total_payment",
- "loan_amount",
- "disbursed_amount",
- "total_interest_payable",
- "written_off_amount",
- ],
- as_dict=1,
- )
-
- no_of_repayments = len(self.repayment_details)
-
- loan.update(
- {
- "total_amount_paid": loan.total_amount_paid - self.amount_paid,
- "total_principal_paid": loan.total_principal_paid - self.principal_amount_paid,
- }
- )
-
- if loan.status == "Loan Closure Requested":
- if loan.disbursed_amount >= loan.loan_amount:
- loan["status"] = "Disbursed"
- else:
- loan["status"] = "Partially Disbursed"
-
- for payment in self.repayment_details:
- frappe.db.sql(
- """ UPDATE `tabLoan Interest Accrual`
- SET paid_principal_amount = `paid_principal_amount` - %s,
- paid_interest_amount = `paid_interest_amount` - %s
- WHERE name = %s""",
- (payment.paid_principal_amount, payment.paid_interest_amount, payment.loan_interest_accrual),
- )
-
- # Cancel repayment interest accrual
- # checking idx as a preventive measure, repayment accrual will always be the last entry
- if payment.accrual_type == "Repayment" and payment.idx == no_of_repayments:
- lia_doc = frappe.get_doc("Loan Interest Accrual", payment.loan_interest_accrual)
- lia_doc.cancel()
-
- frappe.db.sql(
- """ UPDATE `tabLoan`
- SET total_amount_paid = %s, total_principal_paid = %s, status = %s
- WHERE name = %s """,
- (loan.total_amount_paid, loan.total_principal_paid, loan.status, self.against_loan),
- )
-
- def check_future_accruals(self):
- future_accrual_date = frappe.db.get_value(
- "Loan Interest Accrual",
- {"posting_date": (">", self.posting_date), "docstatus": 1, "loan": self.against_loan},
- "posting_date",
- )
-
- if future_accrual_date:
- frappe.throw(
- "Cannot cancel. Interest accruals already processed till {0}".format(
- get_datetime(future_accrual_date)
- )
- )
-
- def update_repayment_schedule(self, cancel=0):
- if self.is_term_loan and self.principal_amount_paid > self.payable_principal_amount:
- regenerate_repayment_schedule(self.against_loan, cancel)
-
- def allocate_amounts(self, repayment_details):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
- self.set("repayment_details", [])
- self.principal_amount_paid = 0
- self.total_penalty_paid = 0
- interest_paid = self.amount_paid
-
- if self.shortfall_amount and self.amount_paid > self.shortfall_amount:
- self.principal_amount_paid = self.shortfall_amount
- elif self.shortfall_amount:
- self.principal_amount_paid = self.amount_paid
-
- interest_paid -= self.principal_amount_paid
-
- if interest_paid > 0:
- if self.penalty_amount and interest_paid > self.penalty_amount:
- self.total_penalty_paid = flt(self.penalty_amount, precision)
- elif self.penalty_amount:
- self.total_penalty_paid = flt(interest_paid, precision)
-
- interest_paid -= self.total_penalty_paid
-
- if self.is_term_loan:
- interest_paid, updated_entries = self.allocate_interest_amount(interest_paid, repayment_details)
- self.allocate_principal_amount_for_term_loans(interest_paid, repayment_details, updated_entries)
- else:
- interest_paid, updated_entries = self.allocate_interest_amount(interest_paid, repayment_details)
- self.allocate_excess_payment_for_demand_loans(interest_paid, repayment_details)
-
- def allocate_interest_amount(self, interest_paid, repayment_details):
- updated_entries = {}
- self.total_interest_paid = 0
- idx = 1
-
- if interest_paid > 0:
- for lia, amounts in repayment_details.get("pending_accrual_entries", []).items():
- interest_amount = 0
- if amounts["interest_amount"] <= interest_paid:
- interest_amount = amounts["interest_amount"]
- self.total_interest_paid += interest_amount
- interest_paid -= interest_amount
- elif interest_paid:
- if interest_paid >= amounts["interest_amount"]:
- interest_amount = amounts["interest_amount"]
- self.total_interest_paid += interest_amount
- interest_paid = 0
- else:
- interest_amount = interest_paid
- self.total_interest_paid += interest_amount
- interest_paid = 0
-
- if interest_amount:
- self.append(
- "repayment_details",
- {
- "loan_interest_accrual": lia,
- "paid_interest_amount": interest_amount,
- "paid_principal_amount": 0,
- },
- )
- updated_entries[lia] = idx
- idx += 1
-
- return interest_paid, updated_entries
-
- def allocate_principal_amount_for_term_loans(
- self, interest_paid, repayment_details, updated_entries
- ):
- if interest_paid > 0:
- for lia, amounts in repayment_details.get("pending_accrual_entries", []).items():
- paid_principal = 0
- if amounts["payable_principal_amount"] <= interest_paid:
- paid_principal = amounts["payable_principal_amount"]
- self.principal_amount_paid += paid_principal
- interest_paid -= paid_principal
- elif interest_paid:
- if interest_paid >= amounts["payable_principal_amount"]:
- paid_principal = amounts["payable_principal_amount"]
- self.principal_amount_paid += paid_principal
- interest_paid = 0
- else:
- paid_principal = interest_paid
- self.principal_amount_paid += paid_principal
- interest_paid = 0
-
- if updated_entries.get(lia):
- idx = updated_entries.get(lia)
- self.get("repayment_details")[idx - 1].paid_principal_amount += paid_principal
- else:
- self.append(
- "repayment_details",
- {
- "loan_interest_accrual": lia,
- "paid_interest_amount": 0,
- "paid_principal_amount": paid_principal,
- },
- )
-
- if interest_paid > 0:
- self.principal_amount_paid += interest_paid
-
- def allocate_excess_payment_for_demand_loans(self, interest_paid, repayment_details):
- if repayment_details["unaccrued_interest"] and interest_paid > 0:
- # no of days for which to accrue interest
- # Interest can only be accrued for an entire day and not partial
- if interest_paid > repayment_details["unaccrued_interest"]:
- interest_paid -= repayment_details["unaccrued_interest"]
- self.total_interest_paid += repayment_details["unaccrued_interest"]
- else:
- # get no of days for which interest can be paid
- per_day_interest = get_per_day_interest(
- self.pending_principal_amount, self.rate_of_interest, self.posting_date
- )
-
- no_of_days = cint(interest_paid / per_day_interest)
- self.total_interest_paid += no_of_days * per_day_interest
- interest_paid -= no_of_days * per_day_interest
-
- if interest_paid > 0:
- self.principal_amount_paid += interest_paid
-
- def make_gl_entries(self, cancel=0, adv_adj=0):
- gle_map = []
- if self.shortfall_amount and self.amount_paid > self.shortfall_amount:
- remarks = "Shortfall repayment of {0}.<br>Repayment against loan {1}".format(
- self.shortfall_amount, self.against_loan
- )
- elif self.shortfall_amount:
- remarks = "Shortfall repayment of {0} against loan {1}".format(
- self.shortfall_amount, self.against_loan
- )
- else:
- remarks = "Repayment against loan " + self.against_loan
-
- if self.reference_number:
- remarks += " with reference no. {}".format(self.reference_number)
-
- if hasattr(self, "repay_from_salary") and self.repay_from_salary:
- payment_account = self.payroll_payable_account
- else:
- payment_account = self.payment_account
-
- if self.total_penalty_paid:
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.loan_account,
- "against": payment_account,
- "debit": self.total_penalty_paid,
- "debit_in_account_currency": self.total_penalty_paid,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _("Penalty against loan:") + self.against_loan,
- "cost_center": self.cost_center,
- "party_type": self.applicant_type,
- "party": self.applicant,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.penalty_income_account,
- "against": self.loan_account,
- "credit": self.total_penalty_paid,
- "credit_in_account_currency": self.total_penalty_paid,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _("Penalty against loan:") + self.against_loan,
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": payment_account,
- "against": self.loan_account + ", " + self.penalty_income_account,
- "debit": self.amount_paid,
- "debit_in_account_currency": self.amount_paid,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _(remarks),
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- gle_map.append(
- self.get_gl_dict(
- {
- "account": self.loan_account,
- "party_type": self.applicant_type,
- "party": self.applicant,
- "against": payment_account,
- "credit": self.amount_paid,
- "credit_in_account_currency": self.amount_paid,
- "against_voucher_type": "Loan",
- "against_voucher": self.against_loan,
- "remarks": _(remarks),
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- if gle_map:
- make_gl_entries(gle_map, cancel=cancel, adv_adj=adv_adj, merge_entries=False)
-
-
-def create_repayment_entry(
- loan,
- applicant,
- company,
- posting_date,
- loan_type,
- payment_type,
- interest_payable,
- payable_principal_amount,
- amount_paid,
- penalty_amount=None,
- payroll_payable_account=None,
-):
-
- lr = frappe.get_doc(
- {
- "doctype": "Loan Repayment",
- "against_loan": loan,
- "payment_type": payment_type,
- "company": company,
- "posting_date": posting_date,
- "applicant": applicant,
- "penalty_amount": penalty_amount,
- "interest_payable": interest_payable,
- "payable_principal_amount": payable_principal_amount,
- "amount_paid": amount_paid,
- "loan_type": loan_type,
- "payroll_payable_account": payroll_payable_account,
- }
- ).insert()
-
- return lr
-
-
-def get_accrued_interest_entries(against_loan, posting_date=None):
- if not posting_date:
- posting_date = getdate()
-
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- unpaid_accrued_entries = frappe.db.sql(
- """
- SELECT name, posting_date, interest_amount - paid_interest_amount as interest_amount,
- payable_principal_amount - paid_principal_amount as payable_principal_amount,
- accrual_type
- FROM
- `tabLoan Interest Accrual`
- WHERE
- loan = %s
- AND posting_date <= %s
- AND (interest_amount - paid_interest_amount > 0 OR
- payable_principal_amount - paid_principal_amount > 0)
- AND
- docstatus = 1
- ORDER BY posting_date
- """,
- (against_loan, posting_date),
- as_dict=1,
- )
-
- # Skip entries with zero interest amount & payable principal amount
- unpaid_accrued_entries = [
- d
- for d in unpaid_accrued_entries
- if flt(d.interest_amount, precision) > 0 or flt(d.payable_principal_amount, precision) > 0
- ]
-
- return unpaid_accrued_entries
-
-
-def get_penalty_details(against_loan):
- penalty_details = frappe.db.sql(
- """
- SELECT posting_date, (penalty_amount - total_penalty_paid) as pending_penalty_amount
- FROM `tabLoan Repayment` where posting_date >= (SELECT MAX(posting_date) from `tabLoan Repayment`
- where against_loan = %s) and docstatus = 1 and against_loan = %s
- """,
- (against_loan, against_loan),
- )
-
- if penalty_details:
- return penalty_details[0][0], flt(penalty_details[0][1])
- else:
- return None, 0
-
-
-def regenerate_repayment_schedule(loan, cancel=0):
- from erpnext.loan_management.doctype.loan.loan import (
- add_single_month,
- get_monthly_repayment_amount,
- )
-
- loan_doc = frappe.get_doc("Loan", loan)
- next_accrual_date = None
- accrued_entries = 0
- last_repayment_amount = None
- last_balance_amount = None
-
- for term in reversed(loan_doc.get("repayment_schedule")):
- if not term.is_accrued:
- next_accrual_date = term.payment_date
- loan_doc.remove(term)
- else:
- accrued_entries += 1
- if last_repayment_amount is None:
- last_repayment_amount = term.total_payment
- if last_balance_amount is None:
- last_balance_amount = term.balance_loan_amount
-
- loan_doc.save()
-
- balance_amount = get_pending_principal_amount(loan_doc)
-
- if loan_doc.repayment_method == "Repay Fixed Amount per Period":
- monthly_repayment_amount = flt(
- balance_amount / len(loan_doc.get("repayment_schedule")) - accrued_entries
- )
- else:
- repayment_period = loan_doc.repayment_periods - accrued_entries
- if not cancel and repayment_period > 0:
- monthly_repayment_amount = get_monthly_repayment_amount(
- balance_amount, loan_doc.rate_of_interest, repayment_period
- )
- else:
- monthly_repayment_amount = last_repayment_amount
- balance_amount = last_balance_amount
-
- payment_date = next_accrual_date
-
- while balance_amount > 0:
- interest_amount = flt(balance_amount * flt(loan_doc.rate_of_interest) / (12 * 100))
- principal_amount = monthly_repayment_amount - interest_amount
- balance_amount = flt(balance_amount + interest_amount - monthly_repayment_amount)
- if balance_amount < 0:
- principal_amount += balance_amount
- balance_amount = 0.0
-
- total_payment = principal_amount + interest_amount
- loan_doc.append(
- "repayment_schedule",
- {
- "payment_date": payment_date,
- "principal_amount": principal_amount,
- "interest_amount": interest_amount,
- "total_payment": total_payment,
- "balance_loan_amount": balance_amount,
- },
- )
- next_payment_date = add_single_month(payment_date)
- payment_date = next_payment_date
-
- loan_doc.save()
-
-
-def get_pending_principal_amount(loan):
- if loan.status in ("Disbursed", "Closed") or loan.disbursed_amount >= loan.loan_amount:
- pending_principal_amount = (
- flt(loan.total_payment)
- + flt(loan.debit_adjustment_amount)
- - flt(loan.credit_adjustment_amount)
- - flt(loan.total_principal_paid)
- - flt(loan.total_interest_payable)
- - flt(loan.written_off_amount)
- + flt(loan.refund_amount)
- )
- else:
- pending_principal_amount = (
- flt(loan.disbursed_amount)
- + flt(loan.debit_adjustment_amount)
- - flt(loan.credit_adjustment_amount)
- - flt(loan.total_principal_paid)
- - flt(loan.total_interest_payable)
- - flt(loan.written_off_amount)
- + flt(loan.refund_amount)
- )
-
- return pending_principal_amount
-
-
-# This function returns the amounts that are payable at the time of loan repayment based on posting date
-# So it pulls all the unpaid Loan Interest Accrual Entries and calculates the penalty if applicable
-
-
-def get_amounts(amounts, against_loan, posting_date):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- against_loan_doc = frappe.get_doc("Loan", against_loan)
- loan_type_details = frappe.get_doc("Loan Type", against_loan_doc.loan_type)
- accrued_interest_entries = get_accrued_interest_entries(against_loan_doc.name, posting_date)
-
- computed_penalty_date, pending_penalty_amount = get_penalty_details(against_loan)
- pending_accrual_entries = {}
-
- total_pending_interest = 0
- penalty_amount = 0
- payable_principal_amount = 0
- final_due_date = ""
- due_date = ""
-
- for entry in accrued_interest_entries:
- # Loan repayment due date is one day after the loan interest is accrued
- # no of late days are calculated based on loan repayment posting date
- # and if no_of_late days are positive then penalty is levied
-
- due_date = add_days(entry.posting_date, 1)
- due_date_after_grace_period = add_days(due_date, loan_type_details.grace_period_in_days)
-
- # Consider one day after already calculated penalty
- if computed_penalty_date and getdate(computed_penalty_date) >= due_date_after_grace_period:
- due_date_after_grace_period = add_days(computed_penalty_date, 1)
-
- no_of_late_days = date_diff(posting_date, due_date_after_grace_period) + 1
-
- if (
- no_of_late_days > 0
- and (
- not (hasattr(against_loan_doc, "repay_from_salary") and against_loan_doc.repay_from_salary)
- )
- and entry.accrual_type == "Regular"
- ):
- penalty_amount += (
- entry.interest_amount * (loan_type_details.penalty_interest_rate / 100) * no_of_late_days
- )
-
- total_pending_interest += entry.interest_amount
- payable_principal_amount += entry.payable_principal_amount
-
- pending_accrual_entries.setdefault(
- entry.name,
- {
- "interest_amount": flt(entry.interest_amount, precision),
- "payable_principal_amount": flt(entry.payable_principal_amount, precision),
- },
- )
-
- if due_date and not final_due_date:
- final_due_date = add_days(due_date, loan_type_details.grace_period_in_days)
-
- pending_principal_amount = get_pending_principal_amount(against_loan_doc)
-
- unaccrued_interest = 0
- if due_date:
- pending_days = date_diff(posting_date, due_date) + 1
- else:
- last_accrual_date = get_last_accrual_date(against_loan_doc.name, posting_date)
- pending_days = date_diff(posting_date, last_accrual_date) + 1
-
- if pending_days > 0:
- principal_amount = flt(pending_principal_amount, precision)
- per_day_interest = get_per_day_interest(
- principal_amount, loan_type_details.rate_of_interest, posting_date
- )
- unaccrued_interest += pending_days * per_day_interest
-
- amounts["pending_principal_amount"] = flt(pending_principal_amount, precision)
- amounts["payable_principal_amount"] = flt(payable_principal_amount, precision)
- amounts["interest_amount"] = flt(total_pending_interest, precision)
- amounts["penalty_amount"] = flt(penalty_amount + pending_penalty_amount, precision)
- amounts["payable_amount"] = flt(
- payable_principal_amount + total_pending_interest + penalty_amount, precision
- )
- amounts["pending_accrual_entries"] = pending_accrual_entries
- amounts["unaccrued_interest"] = flt(unaccrued_interest, precision)
- amounts["written_off_amount"] = flt(against_loan_doc.written_off_amount, precision)
-
- if final_due_date:
- amounts["due_date"] = final_due_date
-
- return amounts
-
-
-@frappe.whitelist()
-def calculate_amounts(against_loan, posting_date, payment_type=""):
- amounts = {
- "penalty_amount": 0.0,
- "interest_amount": 0.0,
- "pending_principal_amount": 0.0,
- "payable_principal_amount": 0.0,
- "payable_amount": 0.0,
- "unaccrued_interest": 0.0,
- "due_date": "",
- }
-
- amounts = get_amounts(amounts, against_loan, posting_date)
-
- # update values for closure
- if payment_type == "Loan Closure":
- amounts["payable_principal_amount"] = amounts["pending_principal_amount"]
- amounts["interest_amount"] += amounts["unaccrued_interest"]
- amounts["payable_amount"] = (
- amounts["payable_principal_amount"] + amounts["interest_amount"] + amounts["penalty_amount"]
- )
-
- return amounts
diff --git a/erpnext/loan_management/doctype/loan_repayment/test_loan_repayment.py b/erpnext/loan_management/doctype/loan_repayment/test_loan_repayment.py
deleted file mode 100644
index 98e5a0a..0000000
--- a/erpnext/loan_management/doctype/loan_repayment/test_loan_repayment.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanRepayment(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_repayment_detail/__init__.py b/erpnext/loan_management/doctype/loan_repayment_detail/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_repayment_detail/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.json b/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.json
deleted file mode 100644
index 4b9b191..0000000
--- a/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "actions": [],
- "creation": "2020-04-15 18:31:54.026923",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_interest_accrual",
- "paid_principal_amount",
- "paid_interest_amount",
- "accrual_type"
- ],
- "fields": [
- {
- "fieldname": "loan_interest_accrual",
- "fieldtype": "Link",
- "label": "Loan Interest Accrual",
- "options": "Loan Interest Accrual"
- },
- {
- "fieldname": "paid_principal_amount",
- "fieldtype": "Currency",
- "label": "Paid Principal Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "paid_interest_amount",
- "fieldtype": "Currency",
- "label": "Paid Interest Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fetch_from": "loan_interest_accrual.accrual_type",
- "fetch_if_empty": 1,
- "fieldname": "accrual_type",
- "fieldtype": "Select",
- "label": "Accrual Type",
- "options": "Regular\nRepayment\nDisbursement"
- }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2020-10-23 08:09:18.267030",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Repayment Detail",
- "owner": "Administrator",
- "permissions": [],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.py b/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.py
deleted file mode 100644
index 495b686..0000000
--- a/erpnext/loan_management/doctype/loan_repayment_detail/loan_repayment_detail.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class LoanRepaymentDetail(Document):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security/__init__.py b/erpnext/loan_management/doctype/loan_security/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security/loan_security.js b/erpnext/loan_management/doctype/loan_security/loan_security.js
deleted file mode 100644
index 0e815af..0000000
--- a/erpnext/loan_management/doctype/loan_security/loan_security.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/loan_security/loan_security.json b/erpnext/loan_management/doctype/loan_security/loan_security.json
deleted file mode 100644
index c698601..0000000
--- a/erpnext/loan_management/doctype/loan_security/loan_security.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "actions": [],
- "allow_rename": 1,
- "creation": "2019-09-02 15:07:08.885593",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security_name",
- "haircut",
- "loan_security_code",
- "column_break_3",
- "loan_security_type",
- "unit_of_measure",
- "disabled"
- ],
- "fields": [
- {
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "in_list_view": 1,
- "label": "Loan Security Name",
- "reqd": 1,
- "unique": 1
- },
- {
- "fetch_from": "loan_security_type.haircut",
- "fetch_if_empty": 1,
- "fieldname": "haircut",
- "fieldtype": "Percent",
- "label": "Haircut %"
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Security Type",
- "options": "Loan Security Type",
- "reqd": 1
- },
- {
- "fieldname": "loan_security_code",
- "fieldtype": "Data",
- "label": "Loan Security Code",
- "unique": 1
- },
- {
- "default": "0",
- "fieldname": "disabled",
- "fieldtype": "Check",
- "label": "Disabled"
- },
- {
- "fetch_from": "loan_security_type.unit_of_measure",
- "fieldname": "unit_of_measure",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Unit Of Measure",
- "options": "UOM",
- "read_only": 1,
- "reqd": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2020-10-26 07:34:48.601766",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "search_fields": "loan_security_code",
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security/loan_security.py b/erpnext/loan_management/doctype/loan_security/loan_security.py
deleted file mode 100644
index 8087fc5..0000000
--- a/erpnext/loan_management/doctype/loan_security/loan_security.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class LoanSecurity(Document):
- def autoname(self):
- self.name = self.loan_security_name
diff --git a/erpnext/loan_management/doctype/loan_security/loan_security_dashboard.py b/erpnext/loan_management/doctype/loan_security/loan_security_dashboard.py
deleted file mode 100644
index 1d96885..0000000
--- a/erpnext/loan_management/doctype/loan_security/loan_security_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def get_data():
- return {
- "fieldname": "loan_security",
- "transactions": [
- {"items": ["Loan Application", "Loan Security Price"]},
- {"items": ["Loan Security Pledge", "Loan Security Unpledge"]},
- ],
- }
diff --git a/erpnext/loan_management/doctype/loan_security/test_loan_security.py b/erpnext/loan_management/doctype/loan_security/test_loan_security.py
deleted file mode 100644
index 7e702ed..0000000
--- a/erpnext/loan_management/doctype/loan_security/test_loan_security.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurity(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/__init__.py b/erpnext/loan_management/doctype/loan_security_pledge/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.js b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.js
deleted file mode 100644
index 48ca392..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security Pledge', {
- calculate_amounts: function(frm, cdt, cdn) {
- let row = locals[cdt][cdn];
- frappe.model.set_value(cdt, cdn, 'amount', row.qty * row.loan_security_price);
- frappe.model.set_value(cdt, cdn, 'post_haircut_amount', cint(row.amount - (row.amount * row.haircut/100)));
-
- let amount = 0;
- let maximum_amount = 0;
- $.each(frm.doc.securities || [], function(i, item){
- amount += item.amount;
- maximum_amount += item.post_haircut_amount;
- });
-
- frm.set_value('total_security_value', amount);
- frm.set_value('maximum_loan_value', maximum_amount);
- }
-});
-
-frappe.ui.form.on("Pledge", {
- loan_security: function(frm, cdt, cdn) {
- let row = locals[cdt][cdn];
-
- if (row.loan_security) {
- frappe.call({
- method: "erpnext.loan_management.doctype.loan_security_price.loan_security_price.get_loan_security_price",
- args: {
- loan_security: row.loan_security
- },
- callback: function(r) {
- frappe.model.set_value(cdt, cdn, 'loan_security_price', r.message);
- frm.events.calculate_amounts(frm, cdt, cdn);
- }
- });
- }
- },
-
- qty: function(frm, cdt, cdn) {
- frm.events.calculate_amounts(frm, cdt, cdn);
- },
-});
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json
deleted file mode 100644
index 68bac8e..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.json
+++ /dev/null
@@ -1,245 +0,0 @@
-{
- "actions": [],
- "autoname": "LS-.{applicant}.-.#####",
- "creation": "2019-08-29 18:48:51.371674",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_details_section",
- "applicant_type",
- "applicant",
- "loan",
- "loan_application",
- "column_break_3",
- "company",
- "pledge_time",
- "status",
- "loan_security_details_section",
- "securities",
- "section_break_10",
- "total_security_value",
- "column_break_11",
- "maximum_loan_value",
- "more_information_section",
- "reference_no",
- "column_break_18",
- "description",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Security Pledge",
- "print_hide": 1,
- "read_only": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fetch_from": "loan_application.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "reqd": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "loan_security_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Security Details",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "label": "Loan",
- "options": "Loan",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "loan_application",
- "fieldtype": "Link",
- "label": "Loan Application",
- "options": "Loan Application",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "total_security_value",
- "fieldtype": "Currency",
- "label": "Total Security Value",
- "options": "Company:company:default_currency",
- "read_only": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "maximum_loan_value",
- "fieldtype": "Currency",
- "label": "Maximum Loan Value",
- "options": "Company:company:default_currency",
- "read_only": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "loan_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Details",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "default": "Requested",
- "fieldname": "status",
- "fieldtype": "Select",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Status",
- "options": "Requested\nUnpledged\nPledged\nPartially Pledged\nCancelled",
- "read_only": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "pledge_time",
- "fieldtype": "Datetime",
- "label": "Pledge Time",
- "read_only": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "securities",
- "fieldtype": "Table",
- "label": "Securities",
- "options": "Pledge",
- "reqd": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "section_break_10",
- "fieldtype": "Section Break",
- "label": "Totals",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company",
- "reqd": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "reqd": 1,
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "collapsible": 1,
- "fieldname": "more_information_section",
- "fieldtype": "Section Break",
- "label": "More Information",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "allow_on_submit": 1,
- "fieldname": "reference_no",
- "fieldtype": "Data",
- "label": "Reference No",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "fieldname": "column_break_18",
- "fieldtype": "Column Break",
- "show_days": 1,
- "show_seconds": 1
- },
- {
- "allow_on_submit": 1,
- "fieldname": "description",
- "fieldtype": "Text",
- "label": "Description",
- "show_days": 1,
- "show_seconds": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-06-29 17:15:16.082256",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Pledge",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "search_fields": "applicant",
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.py b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.py
deleted file mode 100644
index f0d5954..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge.py
+++ /dev/null
@@ -1,111 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import cint, now_datetime
-
-from erpnext.loan_management.doctype.loan_security_price.loan_security_price import (
- get_loan_security_price,
-)
-from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import (
- update_shortfall_status,
-)
-
-
-class LoanSecurityPledge(Document):
- def validate(self):
- self.set_pledge_amount()
- self.validate_duplicate_securities()
- self.validate_loan_security_type()
-
- def on_submit(self):
- if self.loan:
- self.db_set("status", "Pledged")
- self.db_set("pledge_time", now_datetime())
- update_shortfall_status(self.loan, self.total_security_value)
- update_loan(self.loan, self.maximum_loan_value)
-
- def on_cancel(self):
- if self.loan:
- self.db_set("status", "Cancelled")
- self.db_set("pledge_time", None)
- update_loan(self.loan, self.maximum_loan_value, cancel=1)
-
- def validate_duplicate_securities(self):
- security_list = []
- for security in self.securities:
- if security.loan_security not in security_list:
- security_list.append(security.loan_security)
- else:
- frappe.throw(
- _("Loan Security {0} added multiple times").format(frappe.bold(security.loan_security))
- )
-
- def validate_loan_security_type(self):
- existing_pledge = ""
-
- if self.loan:
- existing_pledge = frappe.db.get_value(
- "Loan Security Pledge", {"loan": self.loan, "docstatus": 1}, ["name"]
- )
-
- if existing_pledge:
- loan_security_type = frappe.db.get_value(
- "Pledge", {"parent": existing_pledge}, ["loan_security_type"]
- )
- else:
- loan_security_type = self.securities[0].loan_security_type
-
- ltv_ratio_map = frappe._dict(
- frappe.get_all("Loan Security Type", fields=["name", "loan_to_value_ratio"], as_list=1)
- )
-
- ltv_ratio = ltv_ratio_map.get(loan_security_type)
-
- for security in self.securities:
- if ltv_ratio_map.get(security.loan_security_type) != ltv_ratio:
- frappe.throw(_("Loan Securities with different LTV ratio cannot be pledged against one loan"))
-
- def set_pledge_amount(self):
- total_security_value = 0
- maximum_loan_value = 0
-
- for pledge in self.securities:
-
- if not pledge.qty and not pledge.amount:
- frappe.throw(_("Qty or Amount is mandatory for loan security!"))
-
- if not (self.loan_application and pledge.loan_security_price):
- pledge.loan_security_price = get_loan_security_price(pledge.loan_security)
-
- if not pledge.qty:
- pledge.qty = cint(pledge.amount / pledge.loan_security_price)
-
- pledge.amount = pledge.qty * pledge.loan_security_price
- pledge.post_haircut_amount = cint(pledge.amount - (pledge.amount * pledge.haircut / 100))
-
- total_security_value += pledge.amount
- maximum_loan_value += pledge.post_haircut_amount
-
- self.total_security_value = total_security_value
- self.maximum_loan_value = maximum_loan_value
-
-
-def update_loan(loan, maximum_value_against_pledge, cancel=0):
- maximum_loan_value = frappe.db.get_value("Loan", {"name": loan}, ["maximum_loan_amount"])
-
- if cancel:
- frappe.db.sql(
- """ UPDATE `tabLoan` SET maximum_loan_amount=%s
- WHERE name=%s""",
- (maximum_loan_value - maximum_value_against_pledge, loan),
- )
- else:
- frappe.db.sql(
- """ UPDATE `tabLoan` SET maximum_loan_amount=%s, is_secured_loan=1
- WHERE name=%s""",
- (maximum_loan_value + maximum_value_against_pledge, loan),
- )
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge_list.js b/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge_list.js
deleted file mode 100644
index 174d1b0..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/loan_security_pledge_list.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// render
-frappe.listview_settings['Loan Security Pledge'] = {
- add_fields: ["status"],
- get_indicator: function(doc) {
- var status_color = {
- "Unpledged": "orange",
- "Pledged": "green",
- "Partially Pledged": "green"
- };
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
- }
-};
diff --git a/erpnext/loan_management/doctype/loan_security_pledge/test_loan_security_pledge.py b/erpnext/loan_management/doctype/loan_security_pledge/test_loan_security_pledge.py
deleted file mode 100644
index b9d05c2..0000000
--- a/erpnext/loan_management/doctype/loan_security_pledge/test_loan_security_pledge.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurityPledge(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_price/__init__.py b/erpnext/loan_management/doctype/loan_security_price/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security_price/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.js b/erpnext/loan_management/doctype/loan_security_price/loan_security_price.js
deleted file mode 100644
index 31b4ec7..0000000
--- a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security Price', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.json b/erpnext/loan_management/doctype/loan_security_price/loan_security_price.json
deleted file mode 100644
index b6e8763..0000000
--- a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.json
+++ /dev/null
@@ -1,129 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-LSP-.####",
- "creation": "2019-09-03 18:20:31.382887",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security",
- "loan_security_name",
- "loan_security_type",
- "column_break_2",
- "uom",
- "section_break_4",
- "loan_security_price",
- "section_break_6",
- "valid_from",
- "column_break_8",
- "valid_upto"
- ],
- "fields": [
- {
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Security",
- "options": "Loan Security",
- "reqd": 1
- },
- {
- "fieldname": "column_break_2",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan_security.unit_of_measure",
- "fieldname": "uom",
- "fieldtype": "Link",
- "label": "UOM",
- "options": "UOM",
- "read_only": 1
- },
- {
- "fieldname": "section_break_4",
- "fieldtype": "Section Break"
- },
- {
- "fieldname": "loan_security_price",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Loan Security Price",
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "section_break_6",
- "fieldtype": "Section Break"
- },
- {
- "fieldname": "valid_from",
- "fieldtype": "Datetime",
- "in_list_view": 1,
- "label": "Valid From",
- "reqd": 1
- },
- {
- "fieldname": "column_break_8",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "valid_upto",
- "fieldtype": "Datetime",
- "in_list_view": 1,
- "label": "Valid Upto",
- "reqd": 1
- },
- {
- "fetch_from": "loan_security.loan_security_type",
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "label": "Loan Security Type",
- "options": "Loan Security Type",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_name",
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "label": "Loan Security Name",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2021-01-17 07:41:49.598086",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Price",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.py b/erpnext/loan_management/doctype/loan_security_price/loan_security_price.py
deleted file mode 100644
index 45c4459..0000000
--- a/erpnext/loan_management/doctype/loan_security_price/loan_security_price.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import get_datetime
-
-
-class LoanSecurityPrice(Document):
- def validate(self):
- self.validate_dates()
-
- def validate_dates(self):
-
- if self.valid_from > self.valid_upto:
- frappe.throw(_("Valid From Time must be lesser than Valid Upto Time."))
-
- existing_loan_security = frappe.db.sql(
- """ SELECT name from `tabLoan Security Price`
- WHERE loan_security = %s AND name != %s AND (valid_from BETWEEN %s and %s OR valid_upto BETWEEN %s and %s) """,
- (
- self.loan_security,
- self.name,
- self.valid_from,
- self.valid_upto,
- self.valid_from,
- self.valid_upto,
- ),
- )
-
- if existing_loan_security:
- frappe.throw(_("Loan Security Price overlapping with {0}").format(existing_loan_security[0][0]))
-
-
-@frappe.whitelist()
-def get_loan_security_price(loan_security, valid_time=None):
- if not valid_time:
- valid_time = get_datetime()
-
- loan_security_price = frappe.db.get_value(
- "Loan Security Price",
- {
- "loan_security": loan_security,
- "valid_from": ("<=", valid_time),
- "valid_upto": (">=", valid_time),
- },
- "loan_security_price",
- )
-
- if not loan_security_price:
- frappe.throw(_("No valid Loan Security Price found for {0}").format(frappe.bold(loan_security)))
- else:
- return loan_security_price
diff --git a/erpnext/loan_management/doctype/loan_security_price/test_loan_security_price.py b/erpnext/loan_management/doctype/loan_security_price/test_loan_security_price.py
deleted file mode 100644
index aa533d9..0000000
--- a/erpnext/loan_management/doctype/loan_security_price/test_loan_security_price.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurityPrice(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/__init__.py b/erpnext/loan_management/doctype/loan_security_shortfall/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security_shortfall/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.js b/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.js
deleted file mode 100644
index f26c138..0000000
--- a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security Shortfall', {
- refresh: function(frm) {
- frm.add_custom_button(__("Add Loan Security"), function() {
- frm.trigger('shortfall_action');
- });
- },
-
- shortfall_action: function(frm) {
- frappe.call({
- method: "erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall.add_security",
- args: {
- 'loan': frm.doc.loan
- },
- callback: function(r) {
- if (r.message) {
- let doc = frappe.model.sync(r.message)[0];
- frappe.set_route("Form", doc.doctype, doc.name);
- }
- }
- });
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json b/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json
deleted file mode 100644
index d4007cb..0000000
--- a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json
+++ /dev/null
@@ -1,159 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-LSS-.#####",
- "creation": "2019-09-06 11:33:34.709540",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan",
- "applicant_type",
- "applicant",
- "status",
- "column_break_3",
- "shortfall_time",
- "section_break_3",
- "loan_amount",
- "shortfall_amount",
- "column_break_8",
- "security_value",
- "shortfall_percentage",
- "section_break_8",
- "process_loan_security_shortfall"
- ],
- "fields": [
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Loan ",
- "options": "Loan",
- "read_only": 1
- },
- {
- "fieldname": "loan_amount",
- "fieldtype": "Currency",
- "label": "Loan Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "security_value",
- "fieldtype": "Currency",
- "label": "Security Value ",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "shortfall_amount",
- "fieldtype": "Currency",
- "label": "Shortfall Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "section_break_3",
- "fieldtype": "Section Break"
- },
- {
- "description": "America/New_York",
- "fieldname": "shortfall_time",
- "fieldtype": "Datetime",
- "label": "Shortfall Time",
- "read_only": 1
- },
- {
- "default": "Pending",
- "fieldname": "status",
- "fieldtype": "Select",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Status",
- "options": "\nPending\nCompleted",
- "read_only": 1
- },
- {
- "fieldname": "section_break_8",
- "fieldtype": "Section Break"
- },
- {
- "fieldname": "process_loan_security_shortfall",
- "fieldtype": "Link",
- "label": "Process Loan Security Shortfall",
- "options": "Process Loan Security Shortfall",
- "read_only": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "column_break_8",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "shortfall_percentage",
- "fieldtype": "Percent",
- "in_list_view": 1,
- "label": "Shortfall Percentage",
- "read_only": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer"
- },
- {
- "fetch_from": "loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Applicant",
- "options": "applicant_type"
- }
- ],
- "in_create": 1,
- "index_web_pages_for_search": 1,
- "links": [],
- "modified": "2022-06-30 11:57:09.378089",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Shortfall",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.py b/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.py
deleted file mode 100644
index b901e62..0000000
--- a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import flt, get_datetime
-
-from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpledge import (
- get_pledged_security_qty,
-)
-
-
-class LoanSecurityShortfall(Document):
- pass
-
-
-def update_shortfall_status(loan, security_value, on_cancel=0):
- loan_security_shortfall = frappe.db.get_value(
- "Loan Security Shortfall",
- {"loan": loan, "status": "Pending"},
- ["name", "shortfall_amount"],
- as_dict=1,
- )
-
- if not loan_security_shortfall:
- return
-
- if security_value >= loan_security_shortfall.shortfall_amount:
- frappe.db.set_value(
- "Loan Security Shortfall",
- loan_security_shortfall.name,
- {
- "status": "Completed",
- "shortfall_amount": loan_security_shortfall.shortfall_amount,
- "shortfall_percentage": 0,
- },
- )
- else:
- frappe.db.set_value(
- "Loan Security Shortfall",
- loan_security_shortfall.name,
- "shortfall_amount",
- loan_security_shortfall.shortfall_amount - security_value,
- )
-
-
-@frappe.whitelist()
-def add_security(loan):
- loan_details = frappe.db.get_value(
- "Loan", loan, ["applicant", "company", "applicant_type"], as_dict=1
- )
-
- loan_security_pledge = frappe.new_doc("Loan Security Pledge")
- loan_security_pledge.loan = loan
- loan_security_pledge.company = loan_details.company
- loan_security_pledge.applicant_type = loan_details.applicant_type
- loan_security_pledge.applicant = loan_details.applicant
-
- return loan_security_pledge.as_dict()
-
-
-def check_for_ltv_shortfall(process_loan_security_shortfall):
-
- update_time = get_datetime()
-
- loan_security_price_map = frappe._dict(
- frappe.get_all(
- "Loan Security Price",
- fields=["loan_security", "loan_security_price"],
- filters={"valid_from": ("<=", update_time), "valid_upto": (">=", update_time)},
- as_list=1,
- )
- )
-
- loans = frappe.get_all(
- "Loan",
- fields=[
- "name",
- "loan_amount",
- "total_principal_paid",
- "total_payment",
- "total_interest_payable",
- "disbursed_amount",
- "status",
- ],
- filters={"status": ("in", ["Disbursed", "Partially Disbursed"]), "is_secured_loan": 1},
- )
-
- loan_shortfall_map = frappe._dict(
- frappe.get_all(
- "Loan Security Shortfall", fields=["loan", "name"], filters={"status": "Pending"}, as_list=1
- )
- )
-
- loan_security_map = {}
-
- for loan in loans:
- if loan.status == "Disbursed":
- outstanding_amount = (
- flt(loan.total_payment) - flt(loan.total_interest_payable) - flt(loan.total_principal_paid)
- )
- else:
- outstanding_amount = (
- flt(loan.disbursed_amount) - flt(loan.total_interest_payable) - flt(loan.total_principal_paid)
- )
-
- pledged_securities = get_pledged_security_qty(loan.name)
- ltv_ratio = 0.0
- security_value = 0.0
-
- for security, qty in pledged_securities.items():
- if not ltv_ratio:
- ltv_ratio = get_ltv_ratio(security)
- security_value += flt(loan_security_price_map.get(security)) * flt(qty)
-
- current_ratio = (outstanding_amount / security_value) * 100 if security_value else 0
-
- if current_ratio > ltv_ratio:
- shortfall_amount = outstanding_amount - ((security_value * ltv_ratio) / 100)
- create_loan_security_shortfall(
- loan.name,
- outstanding_amount,
- security_value,
- shortfall_amount,
- current_ratio,
- process_loan_security_shortfall,
- )
- elif loan_shortfall_map.get(loan.name):
- shortfall_amount = outstanding_amount - ((security_value * ltv_ratio) / 100)
- if shortfall_amount <= 0:
- shortfall = loan_shortfall_map.get(loan.name)
- update_pending_shortfall(shortfall)
-
-
-def create_loan_security_shortfall(
- loan,
- loan_amount,
- security_value,
- shortfall_amount,
- shortfall_ratio,
- process_loan_security_shortfall,
-):
- existing_shortfall = frappe.db.get_value(
- "Loan Security Shortfall", {"loan": loan, "status": "Pending"}, "name"
- )
-
- if existing_shortfall:
- ltv_shortfall = frappe.get_doc("Loan Security Shortfall", existing_shortfall)
- else:
- ltv_shortfall = frappe.new_doc("Loan Security Shortfall")
- ltv_shortfall.loan = loan
-
- ltv_shortfall.shortfall_time = get_datetime()
- ltv_shortfall.loan_amount = loan_amount
- ltv_shortfall.security_value = security_value
- ltv_shortfall.shortfall_amount = shortfall_amount
- ltv_shortfall.shortfall_percentage = shortfall_ratio
- ltv_shortfall.process_loan_security_shortfall = process_loan_security_shortfall
- ltv_shortfall.save()
-
-
-def get_ltv_ratio(loan_security):
- loan_security_type = frappe.db.get_value("Loan Security", loan_security, "loan_security_type")
- ltv_ratio = frappe.db.get_value("Loan Security Type", loan_security_type, "loan_to_value_ratio")
- return ltv_ratio
-
-
-def update_pending_shortfall(shortfall):
- # Get all pending loan security shortfall
- frappe.db.set_value(
- "Loan Security Shortfall",
- shortfall,
- {"status": "Completed", "shortfall_amount": 0, "shortfall_percentage": 0},
- )
diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/test_loan_security_shortfall.py b/erpnext/loan_management/doctype/loan_security_shortfall/test_loan_security_shortfall.py
deleted file mode 100644
index 58bf974..0000000
--- a/erpnext/loan_management/doctype/loan_security_shortfall/test_loan_security_shortfall.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurityShortfall(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_type/__init__.py b/erpnext/loan_management/doctype/loan_security_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.js b/erpnext/loan_management/doctype/loan_security_type/loan_security_type.js
deleted file mode 100644
index 3a1e068..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security Type', {
- // refresh: function(frm) {
-
- // },
-});
diff --git a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.json b/erpnext/loan_management/doctype/loan_security_type/loan_security_type.json
deleted file mode 100644
index 871e825..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
- "actions": [],
- "autoname": "field:loan_security_type",
- "creation": "2019-08-29 18:46:07.322056",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security_type",
- "unit_of_measure",
- "haircut",
- "column_break_5",
- "loan_to_value_ratio",
- "disabled"
- ],
- "fields": [
- {
- "default": "0",
- "fieldname": "disabled",
- "fieldtype": "Check",
- "label": "Disabled"
- },
- {
- "fieldname": "loan_security_type",
- "fieldtype": "Data",
- "in_list_view": 1,
- "label": "Loan Security Type",
- "reqd": 1,
- "unique": 1
- },
- {
- "description": "Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.",
- "fieldname": "haircut",
- "fieldtype": "Percent",
- "label": "Haircut %"
- },
- {
- "fieldname": "unit_of_measure",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Unit Of Measure",
- "options": "UOM",
- "reqd": 1
- },
- {
- "fieldname": "column_break_5",
- "fieldtype": "Column Break"
- },
- {
- "description": "Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ",
- "fieldname": "loan_to_value_ratio",
- "fieldtype": "Percent",
- "label": "Loan To Value Ratio"
- }
- ],
- "links": [],
- "modified": "2020-05-16 09:38:45.988080",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Type",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.py b/erpnext/loan_management/doctype/loan_security_type/loan_security_type.py
deleted file mode 100644
index af87259..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/loan_security_type.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class LoanSecurityType(Document):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_type/loan_security_type_dashboard.py b/erpnext/loan_management/doctype/loan_security_type/loan_security_type_dashboard.py
deleted file mode 100644
index 8fc4520..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/loan_security_type_dashboard.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def get_data():
- return {
- "fieldname": "loan_security_type",
- "transactions": [
- {"items": ["Loan Security", "Loan Security Price"]},
- {"items": ["Loan Security Pledge", "Loan Security Unpledge"]},
- ],
- }
diff --git a/erpnext/loan_management/doctype/loan_security_type/test_loan_security_type.py b/erpnext/loan_management/doctype/loan_security_type/test_loan_security_type.py
deleted file mode 100644
index cf7a335..0000000
--- a/erpnext/loan_management/doctype/loan_security_type/test_loan_security_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurityType(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/__init__.py b/erpnext/loan_management/doctype/loan_security_unpledge/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.js b/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.js
deleted file mode 100644
index 8223206..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Security Unpledge', {
- refresh: function(frm) {
-
- if (frm.doc.docstatus == 1 && frm.doc.status == 'Approved') {
- frm.set_df_property('status', 'read_only', 1);
- }
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.json b/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.json
deleted file mode 100644
index 92923bb..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.json
+++ /dev/null
@@ -1,183 +0,0 @@
-{
- "actions": [],
- "autoname": "LSU-.{applicant}.-.#####",
- "creation": "2019-09-21 13:23:16.117028",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_details_section",
- "loan",
- "applicant_type",
- "applicant",
- "column_break_3",
- "company",
- "unpledge_time",
- "status",
- "loan_security_details_section",
- "securities",
- "more_information_section",
- "reference_no",
- "column_break_13",
- "description",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Details"
- },
- {
- "fetch_from": "loan_application.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "reqd": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "label": "Loan",
- "options": "Loan",
- "reqd": 1
- },
- {
- "allow_on_submit": 1,
- "default": "Requested",
- "depends_on": "eval:doc.docstatus == 1",
- "fieldname": "status",
- "fieldtype": "Select",
- "label": "Status",
- "options": "Requested\nApproved",
- "permlevel": 1
- },
- {
- "fieldname": "unpledge_time",
- "fieldtype": "Datetime",
- "label": "Unpledge Time",
- "read_only": 1
- },
- {
- "fieldname": "loan_security_details_section",
- "fieldtype": "Section Break",
- "label": "Loan Security Details"
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Security Unpledge",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "securities",
- "fieldtype": "Table",
- "label": "Securities",
- "options": "Unpledge",
- "reqd": 1
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company",
- "reqd": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "reqd": 1
- },
- {
- "collapsible": 1,
- "fieldname": "more_information_section",
- "fieldtype": "Section Break",
- "label": "More Information"
- },
- {
- "allow_on_submit": 1,
- "fieldname": "reference_no",
- "fieldtype": "Data",
- "label": "Reference No"
- },
- {
- "fieldname": "column_break_13",
- "fieldtype": "Column Break"
- },
- {
- "allow_on_submit": 1,
- "fieldname": "description",
- "fieldtype": "Text",
- "label": "Description"
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-04-19 18:12:01.401744",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Unpledge",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "delete": 1,
- "email": 1,
- "export": 1,
- "permlevel": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "search_fields": "applicant",
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.py b/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.py
deleted file mode 100644
index 15a9c4a..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge.py
+++ /dev/null
@@ -1,179 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-from frappe.utils import flt, get_datetime, getdate
-
-
-class LoanSecurityUnpledge(Document):
- def validate(self):
- self.validate_duplicate_securities()
- self.validate_unpledge_qty()
-
- def on_cancel(self):
- self.update_loan_status(cancel=1)
- self.db_set("status", "Requested")
-
- def validate_duplicate_securities(self):
- security_list = []
- for d in self.securities:
- if d.loan_security not in security_list:
- security_list.append(d.loan_security)
- else:
- frappe.throw(
- _("Row {0}: Loan Security {1} added multiple times").format(
- d.idx, frappe.bold(d.loan_security)
- )
- )
-
- def validate_unpledge_qty(self):
- from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- get_pending_principal_amount,
- )
- from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import (
- get_ltv_ratio,
- )
-
- pledge_qty_map = get_pledged_security_qty(self.loan)
-
- ltv_ratio_map = frappe._dict(
- frappe.get_all("Loan Security Type", fields=["name", "loan_to_value_ratio"], as_list=1)
- )
-
- loan_security_price_map = frappe._dict(
- frappe.get_all(
- "Loan Security Price",
- fields=["loan_security", "loan_security_price"],
- filters={"valid_from": ("<=", get_datetime()), "valid_upto": (">=", get_datetime())},
- as_list=1,
- )
- )
-
- loan_details = frappe.get_value(
- "Loan",
- self.loan,
- [
- "total_payment",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "refund_amount",
- "total_principal_paid",
- "loan_amount",
- "total_interest_payable",
- "written_off_amount",
- "disbursed_amount",
- "status",
- ],
- as_dict=1,
- )
-
- pending_principal_amount = get_pending_principal_amount(loan_details)
-
- security_value = 0
- unpledge_qty_map = {}
- ltv_ratio = 0
-
- for security in self.securities:
- pledged_qty = pledge_qty_map.get(security.loan_security, 0)
- if security.qty > pledged_qty:
- msg = _("Row {0}: {1} {2} of {3} is pledged against Loan {4}.").format(
- security.idx,
- pledged_qty,
- security.uom,
- frappe.bold(security.loan_security),
- frappe.bold(self.loan),
- )
- msg += "<br>"
- msg += _("You are trying to unpledge more.")
- frappe.throw(msg, title=_("Loan Security Unpledge Error"))
-
- unpledge_qty_map.setdefault(security.loan_security, 0)
- unpledge_qty_map[security.loan_security] += security.qty
-
- for security in pledge_qty_map:
- if not ltv_ratio:
- ltv_ratio = get_ltv_ratio(security)
-
- qty_after_unpledge = pledge_qty_map.get(security, 0) - unpledge_qty_map.get(security, 0)
- current_price = loan_security_price_map.get(security)
- security_value += qty_after_unpledge * current_price
-
- if not security_value and flt(pending_principal_amount, 2) > 0:
- self._throw(security_value, pending_principal_amount, ltv_ratio)
-
- if security_value and flt(pending_principal_amount / security_value) * 100 > ltv_ratio:
- self._throw(security_value, pending_principal_amount, ltv_ratio)
-
- def _throw(self, security_value, pending_principal_amount, ltv_ratio):
- msg = _("Loan Security Value after unpledge is {0}").format(frappe.bold(security_value))
- msg += "<br>"
- msg += _("Pending principal amount is {0}").format(frappe.bold(flt(pending_principal_amount, 2)))
- msg += "<br>"
- msg += _("Loan To Security Value ratio must always be {0}").format(frappe.bold(ltv_ratio))
- frappe.throw(msg, title=_("Loan To Value ratio breach"))
-
- def on_update_after_submit(self):
- self.approve()
-
- def approve(self):
- if self.status == "Approved" and not self.unpledge_time:
- self.update_loan_status()
- self.db_set("unpledge_time", get_datetime())
-
- def update_loan_status(self, cancel=0):
- if cancel:
- loan_status = frappe.get_value("Loan", self.loan, "status")
- if loan_status == "Closed":
- frappe.db.set_value("Loan", self.loan, "status", "Loan Closure Requested")
- else:
- pledged_qty = 0
- current_pledges = get_pledged_security_qty(self.loan)
-
- for security, qty in current_pledges.items():
- pledged_qty += qty
-
- if not pledged_qty:
- frappe.db.set_value("Loan", self.loan, {"status": "Closed", "closure_date": getdate()})
-
-
-@frappe.whitelist()
-def get_pledged_security_qty(loan):
-
- current_pledges = {}
-
- unpledges = frappe._dict(
- frappe.db.sql(
- """
- SELECT u.loan_security, sum(u.qty) as qty
- FROM `tabLoan Security Unpledge` up, `tabUnpledge` u
- WHERE up.loan = %s
- AND u.parent = up.name
- AND up.status = 'Approved'
- GROUP BY u.loan_security
- """,
- (loan),
- )
- )
-
- pledges = frappe._dict(
- frappe.db.sql(
- """
- SELECT p.loan_security, sum(p.qty) as qty
- FROM `tabLoan Security Pledge` lp, `tabPledge`p
- WHERE lp.loan = %s
- AND p.parent = lp.name
- AND lp.status = 'Pledged'
- GROUP BY p.loan_security
- """,
- (loan),
- )
- )
-
- for security, qty in pledges.items():
- current_pledges.setdefault(security, qty)
- current_pledges[security] -= unpledges.get(security, 0.0)
-
- return current_pledges
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge_list.js b/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge_list.js
deleted file mode 100644
index 196ebbb..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/loan_security_unpledge_list.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// render
-frappe.listview_settings['Loan Security Unpledge'] = {
- add_fields: ["status"],
- get_indicator: function(doc) {
- var status_color = {
- "Requested": "orange",
- "Approved": "green",
- };
- return [__(doc.status), status_color[doc.status], "status,=,"+doc.status];
- }
-};
diff --git a/erpnext/loan_management/doctype/loan_security_unpledge/test_loan_security_unpledge.py b/erpnext/loan_management/doctype/loan_security_unpledge/test_loan_security_unpledge.py
deleted file mode 100644
index 2f124e4..0000000
--- a/erpnext/loan_management/doctype/loan_security_unpledge/test_loan_security_unpledge.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanSecurityUnpledge(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_type/__init__.py b/erpnext/loan_management/doctype/loan_type/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_type/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_type/loan_type.js b/erpnext/loan_management/doctype/loan_type/loan_type.js
deleted file mode 100644
index 9f9137c..0000000
--- a/erpnext/loan_management/doctype/loan_type/loan_type.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Loan Type', {
- onload: function(frm) {
- $.each(["penalty_income_account", "interest_income_account"], function (i, field) {
- frm.set_query(field, function () {
- return {
- "filters": {
- "company": frm.doc.company,
- "root_type": "Income",
- "is_group": 0
- }
- };
- });
- });
-
- $.each(["payment_account", "loan_account", "disbursement_account"], function (i, field) {
- frm.set_query(field, function () {
- return {
- "filters": {
- "company": frm.doc.company,
- "root_type": "Asset",
- "is_group": 0
- }
- };
- });
- });
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_type/loan_type.json b/erpnext/loan_management/doctype/loan_type/loan_type.json
deleted file mode 100644
index 5cc9464..0000000
--- a/erpnext/loan_management/doctype/loan_type/loan_type.json
+++ /dev/null
@@ -1,215 +0,0 @@
-{
- "actions": [],
- "autoname": "field:loan_name",
- "creation": "2019-08-29 18:08:38.159726",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_name",
- "maximum_loan_amount",
- "rate_of_interest",
- "penalty_interest_rate",
- "grace_period_in_days",
- "write_off_amount",
- "column_break_2",
- "company",
- "is_term_loan",
- "disabled",
- "repayment_schedule_type",
- "repayment_date_on",
- "description",
- "account_details_section",
- "mode_of_payment",
- "disbursement_account",
- "payment_account",
- "column_break_12",
- "loan_account",
- "interest_income_account",
- "penalty_income_account",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan_name",
- "fieldtype": "Data",
- "in_list_view": 1,
- "label": "Loan Name",
- "reqd": 1,
- "unique": 1
- },
- {
- "fieldname": "maximum_loan_amount",
- "fieldtype": "Currency",
- "label": "Maximum Loan Amount",
- "options": "Company:company:default_currency"
- },
- {
- "default": "0",
- "fieldname": "rate_of_interest",
- "fieldtype": "Percent",
- "label": "Rate of Interest (%) Yearly",
- "reqd": 1
- },
- {
- "fieldname": "column_break_2",
- "fieldtype": "Column Break"
- },
- {
- "allow_on_submit": 1,
- "default": "0",
- "fieldname": "disabled",
- "fieldtype": "Check",
- "label": "Disabled"
- },
- {
- "fieldname": "description",
- "fieldtype": "Text",
- "label": "Description"
- },
- {
- "fieldname": "account_details_section",
- "fieldtype": "Section Break",
- "label": "Account Details"
- },
- {
- "fieldname": "mode_of_payment",
- "fieldtype": "Link",
- "label": "Mode of Payment",
- "options": "Mode of Payment",
- "reqd": 1
- },
- {
- "fieldname": "payment_account",
- "fieldtype": "Link",
- "label": "Repayment Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "loan_account",
- "fieldtype": "Link",
- "label": "Loan Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "column_break_12",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "interest_income_account",
- "fieldtype": "Link",
- "label": "Interest Income Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "penalty_income_account",
- "fieldtype": "Link",
- "label": "Penalty Income Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "default": "0",
- "fieldname": "is_term_loan",
- "fieldtype": "Check",
- "label": "Is Term Loan"
- },
- {
- "description": "Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ",
- "fieldname": "penalty_interest_rate",
- "fieldtype": "Percent",
- "label": "Penalty Interest Rate (%) Per Day"
- },
- {
- "description": "No. of days from due date until which penalty won't be charged in case of delay in loan repayment",
- "fieldname": "grace_period_in_days",
- "fieldtype": "Int",
- "label": "Grace Period in Days"
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Type",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company",
- "reqd": 1
- },
- {
- "allow_on_submit": 1,
- "description": "Loan Write Off will be automatically created on loan closure request if pending amount is below this limit",
- "fieldname": "write_off_amount",
- "fieldtype": "Currency",
- "label": "Auto Write Off Amount ",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "disbursement_account",
- "fieldtype": "Link",
- "label": "Disbursement Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "depends_on": "is_term_loan",
- "description": "The schedule type that will be used for generating the term loan schedules (will affect the payment date and monthly repayment amount)",
- "fieldname": "repayment_schedule_type",
- "fieldtype": "Select",
- "label": "Repayment Schedule Type",
- "mandatory_depends_on": "is_term_loan",
- "options": "\nMonthly as per repayment start date\nPro-rated calendar months"
- },
- {
- "depends_on": "eval:doc.repayment_schedule_type == \"Pro-rated calendar months\"",
- "description": "Select whether the repayment date should be the end of the current month or start of the upcoming month",
- "fieldname": "repayment_date_on",
- "fieldtype": "Select",
- "label": "Repayment Date On",
- "mandatory_depends_on": "eval:doc.repayment_schedule_type == \"Pro-rated calendar months\"",
- "options": "\nStart of the next month\nEnd of the current month"
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-10-22 17:43:03.954201",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Type",
- "naming_rule": "By fieldname",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "read": 1,
- "role": "Employee"
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": []
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_type/loan_type.py b/erpnext/loan_management/doctype/loan_type/loan_type.py
deleted file mode 100644
index 51ee05b..0000000
--- a/erpnext/loan_management/doctype/loan_type/loan_type.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class LoanType(Document):
- def validate(self):
- self.validate_accounts()
-
- def validate_accounts(self):
- for fieldname in [
- "payment_account",
- "loan_account",
- "interest_income_account",
- "penalty_income_account",
- ]:
- company = frappe.get_value("Account", self.get(fieldname), "company")
-
- if company and company != self.company:
- frappe.throw(
- _("Account {0} does not belong to company {1}").format(
- frappe.bold(self.get(fieldname)), frappe.bold(self.company)
- )
- )
-
- if self.get("loan_account") == self.get("payment_account"):
- frappe.throw(_("Loan Account and Payment Account cannot be same"))
diff --git a/erpnext/loan_management/doctype/loan_type/loan_type_dashboard.py b/erpnext/loan_management/doctype/loan_type/loan_type_dashboard.py
deleted file mode 100644
index e2467c6..0000000
--- a/erpnext/loan_management/doctype/loan_type/loan_type_dashboard.py
+++ /dev/null
@@ -1,5 +0,0 @@
-def get_data():
- return {
- "fieldname": "loan_type",
- "transactions": [{"items": ["Loan Repayment", "Loan"]}, {"items": ["Loan Application"]}],
- }
diff --git a/erpnext/loan_management/doctype/loan_type/test_loan_type.py b/erpnext/loan_management/doctype/loan_type/test_loan_type.py
deleted file mode 100644
index e3b51e8..0000000
--- a/erpnext/loan_management/doctype/loan_type/test_loan_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanType(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/loan_write_off/__init__.py b/erpnext/loan_management/doctype/loan_write_off/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/loan_write_off/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.js b/erpnext/loan_management/doctype/loan_write_off/loan_write_off.js
deleted file mode 100644
index 4e3319c..0000000
--- a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-{% include 'erpnext/loan_management/loan_common.js' %};
-
-frappe.ui.form.on('Loan Write Off', {
- loan: function(frm) {
- frm.trigger('show_pending_principal_amount');
- },
- onload: function(frm) {
- frm.trigger('show_pending_principal_amount');
- },
- refresh: function(frm) {
- frm.set_query('write_off_account', function(){
- return {
- filters: {
- 'company': frm.doc.company,
- 'root_type': 'Expense',
- 'is_group': 0
- }
- }
- });
- },
- show_pending_principal_amount: function(frm) {
- if (frm.doc.loan && frm.doc.docstatus === 0) {
- frappe.db.get_value('Loan', frm.doc.loan, ['total_payment', 'total_interest_payable',
- 'total_principal_paid', 'written_off_amount'], function(values) {
- frm.set_df_property('write_off_amount', 'description',
- "Pending principal amount is " + cstr(flt(values.total_payment - values.total_interest_payable
- - values.total_principal_paid - values.written_off_amount, 2)));
- frm.refresh_field('write_off_amount');
- });
-
- }
- }
-});
diff --git a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.json b/erpnext/loan_management/doctype/loan_write_off/loan_write_off.json
deleted file mode 100644
index 4ca9ef1..0000000
--- a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.json
+++ /dev/null
@@ -1,159 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-WO-.#####",
- "creation": "2020-10-16 11:09:14.495066",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan",
- "applicant_type",
- "applicant",
- "column_break_3",
- "company",
- "posting_date",
- "accounting_dimensions_section",
- "cost_center",
- "section_break_9",
- "write_off_account",
- "column_break_11",
- "write_off_amount",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan",
- "options": "Loan",
- "reqd": 1
- },
- {
- "default": "Today",
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date",
- "reqd": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "loan.company",
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "read_only": 1,
- "reqd": 1
- },
- {
- "fetch_from": "loan.applicant_type",
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "read_only": 1
- },
- {
- "fetch_from": "loan.applicant",
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "label": "Applicant ",
- "options": "applicant_type",
- "read_only": 1
- },
- {
- "collapsible": 1,
- "fieldname": "accounting_dimensions_section",
- "fieldtype": "Section Break",
- "label": "Accounting Dimensions"
- },
- {
- "fieldname": "cost_center",
- "fieldtype": "Link",
- "label": "Cost Center",
- "options": "Cost Center"
- },
- {
- "fieldname": "section_break_9",
- "fieldtype": "Section Break",
- "label": "Write Off Details"
- },
- {
- "fieldname": "write_off_account",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Write Off Account",
- "options": "Account",
- "reqd": 1
- },
- {
- "fieldname": "write_off_amount",
- "fieldtype": "Currency",
- "label": "Write Off Amount",
- "options": "Company:company:default_currency",
- "reqd": 1
- },
- {
- "fieldname": "column_break_11",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Loan Write Off",
- "print_hide": 1,
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2021-04-19 18:11:27.759862",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Write Off",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py b/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py
deleted file mode 100644
index ae483f9..0000000
--- a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import cint, flt, getdate
-
-import erpnext
-from erpnext.accounts.general_ledger import make_gl_entries
-from erpnext.controllers.accounts_controller import AccountsController
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- get_pending_principal_amount,
-)
-
-
-class LoanWriteOff(AccountsController):
- def validate(self):
- self.set_missing_values()
- self.validate_write_off_amount()
-
- def set_missing_values(self):
- if not self.cost_center:
- self.cost_center = erpnext.get_default_cost_center(self.company)
-
- def validate_write_off_amount(self):
- precision = cint(frappe.db.get_default("currency_precision")) or 2
-
- loan_details = frappe.get_value(
- "Loan",
- self.loan,
- [
- "total_payment",
- "debit_adjustment_amount",
- "credit_adjustment_amount",
- "refund_amount",
- "total_principal_paid",
- "loan_amount",
- "total_interest_payable",
- "written_off_amount",
- "disbursed_amount",
- "status",
- ],
- as_dict=1,
- )
-
- pending_principal_amount = flt(get_pending_principal_amount(loan_details), precision)
-
- if self.write_off_amount > pending_principal_amount:
- frappe.throw(_("Write off amount cannot be greater than pending principal amount"))
-
- def on_submit(self):
- self.update_outstanding_amount()
- self.make_gl_entries()
-
- def on_cancel(self):
- self.update_outstanding_amount(cancel=1)
- self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"]
- self.make_gl_entries(cancel=1)
-
- def update_outstanding_amount(self, cancel=0):
- written_off_amount = frappe.db.get_value("Loan", self.loan, "written_off_amount")
-
- if cancel:
- written_off_amount -= self.write_off_amount
- else:
- written_off_amount += self.write_off_amount
-
- frappe.db.set_value("Loan", self.loan, "written_off_amount", written_off_amount)
-
- def make_gl_entries(self, cancel=0):
- gl_entries = []
- loan_details = frappe.get_doc("Loan", self.loan)
-
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": self.write_off_account,
- "against": loan_details.loan_account,
- "debit": self.write_off_amount,
- "debit_in_account_currency": self.write_off_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _("Against Loan:") + self.loan,
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- gl_entries.append(
- self.get_gl_dict(
- {
- "account": loan_details.loan_account,
- "party_type": loan_details.applicant_type,
- "party": loan_details.applicant,
- "against": self.write_off_account,
- "credit": self.write_off_amount,
- "credit_in_account_currency": self.write_off_amount,
- "against_voucher_type": "Loan",
- "against_voucher": self.loan,
- "remarks": _("Against Loan:") + self.loan,
- "cost_center": self.cost_center,
- "posting_date": getdate(self.posting_date),
- }
- )
- )
-
- make_gl_entries(gl_entries, cancel=cancel, merge_entries=False)
diff --git a/erpnext/loan_management/doctype/loan_write_off/test_loan_write_off.py b/erpnext/loan_management/doctype/loan_write_off/test_loan_write_off.py
deleted file mode 100644
index 1494114..0000000
--- a/erpnext/loan_management/doctype/loan_write_off/test_loan_write_off.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestLoanWriteOff(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/pledge/__init__.py b/erpnext/loan_management/doctype/pledge/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/pledge/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/pledge/pledge.js b/erpnext/loan_management/doctype/pledge/pledge.js
deleted file mode 100644
index fb6ab10..0000000
--- a/erpnext/loan_management/doctype/pledge/pledge.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Pledge', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/pledge/pledge.json b/erpnext/loan_management/doctype/pledge/pledge.json
deleted file mode 100644
index c23479c..0000000
--- a/erpnext/loan_management/doctype/pledge/pledge.json
+++ /dev/null
@@ -1,110 +0,0 @@
-{
- "actions": [],
- "creation": "2019-09-09 17:06:16.756573",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security",
- "loan_security_name",
- "loan_security_type",
- "loan_security_code",
- "uom",
- "column_break_5",
- "qty",
- "haircut",
- "loan_security_price",
- "amount",
- "post_haircut_amount"
- ],
- "fields": [
- {
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Security",
- "options": "Loan Security",
- "reqd": 1
- },
- {
- "fetch_from": "loan_security.loan_security_type",
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "label": "Loan Security Type",
- "options": "Loan Security Type",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_code",
- "fieldname": "loan_security_code",
- "fieldtype": "Data",
- "label": "Loan Security Code"
- },
- {
- "fetch_from": "loan_security.unit_of_measure",
- "fieldname": "uom",
- "fieldtype": "Link",
- "label": "UOM",
- "options": "UOM"
- },
- {
- "fieldname": "qty",
- "fieldtype": "Float",
- "in_list_view": 1,
- "label": "Quantity",
- "non_negative": 1
- },
- {
- "fieldname": "loan_security_price",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Loan Security Price",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.haircut",
- "fieldname": "haircut",
- "fieldtype": "Percent",
- "label": "Haircut %",
- "read_only": 1
- },
- {
- "fieldname": "amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fieldname": "column_break_5",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "post_haircut_amount",
- "fieldtype": "Currency",
- "label": "Post Haircut Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_name",
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "label": "Loan Security Name",
- "read_only": 1
- }
- ],
- "istable": 1,
- "links": [],
- "modified": "2021-01-17 07:41:12.452514",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Pledge",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/pledge/pledge.py b/erpnext/loan_management/doctype/pledge/pledge.py
deleted file mode 100644
index f02ed95..0000000
--- a/erpnext/loan_management/doctype/pledge/pledge.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class Pledge(Document):
- pass
diff --git a/erpnext/loan_management/doctype/pledge/test_pledge.py b/erpnext/loan_management/doctype/pledge/test_pledge.py
deleted file mode 100644
index 2d3fd32..0000000
--- a/erpnext/loan_management/doctype/pledge/test_pledge.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestPledge(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/__init__.py b/erpnext/loan_management/doctype/process_loan_interest_accrual/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.js b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.js
deleted file mode 100644
index c596be2..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Process Loan Interest Accrual', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json
deleted file mode 100644
index 7fc4736..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-PLA-.#####",
- "creation": "2019-09-19 06:08:12.363640",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "posting_date",
- "loan_type",
- "loan",
- "process_type",
- "accrual_type",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "posting_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Posting Date",
- "reqd": 1
- },
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Process Loan Interest Accrual",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "loan_type",
- "fieldtype": "Link",
- "label": "Loan Type",
- "options": "Loan Type"
- },
- {
- "fieldname": "loan",
- "fieldtype": "Link",
- "label": "Loan ",
- "options": "Loan"
- },
- {
- "fieldname": "process_type",
- "fieldtype": "Data",
- "hidden": 1,
- "label": "Process Type",
- "read_only": 1
- },
- {
- "fieldname": "accrual_type",
- "fieldtype": "Select",
- "hidden": 1,
- "label": "Accrual Type",
- "options": "Regular\nRepayment\nDisbursement\nCredit Adjustment\nDebit Adjustment\nRefund",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "is_submittable": 1,
- "links": [],
- "modified": "2022-06-29 11:19:33.203088",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Process Loan Interest Accrual",
- "naming_rule": "Expression (old style)",
- "owner": "Administrator",
- "permissions": [
- {
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "states": [],
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py
deleted file mode 100644
index 25c72d9..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import nowdate
-
-from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import (
- make_accrual_interest_entry_for_demand_loans,
- make_accrual_interest_entry_for_term_loans,
-)
-
-
-class ProcessLoanInterestAccrual(Document):
- def on_submit(self):
- open_loans = []
-
- if self.loan:
- loan_doc = frappe.get_doc("Loan", self.loan)
- if loan_doc:
- open_loans.append(loan_doc)
-
- if (not self.loan or not loan_doc.is_term_loan) and self.process_type != "Term Loans":
- make_accrual_interest_entry_for_demand_loans(
- self.posting_date,
- self.name,
- open_loans=open_loans,
- loan_type=self.loan_type,
- accrual_type=self.accrual_type,
- )
-
- if (not self.loan or loan_doc.is_term_loan) and self.process_type != "Demand Loans":
- make_accrual_interest_entry_for_term_loans(
- self.posting_date,
- self.name,
- term_loan=self.loan,
- loan_type=self.loan_type,
- accrual_type=self.accrual_type,
- )
-
-
-def process_loan_interest_accrual_for_demand_loans(
- posting_date=None, loan_type=None, loan=None, accrual_type="Regular"
-):
- loan_process = frappe.new_doc("Process Loan Interest Accrual")
- loan_process.posting_date = posting_date or nowdate()
- loan_process.loan_type = loan_type
- loan_process.process_type = "Demand Loans"
- loan_process.loan = loan
- loan_process.accrual_type = accrual_type
-
- loan_process.submit()
-
- return loan_process.name
-
-
-def process_loan_interest_accrual_for_term_loans(posting_date=None, loan_type=None, loan=None):
-
- if not term_loan_accrual_pending(posting_date or nowdate(), loan=loan):
- return
-
- loan_process = frappe.new_doc("Process Loan Interest Accrual")
- loan_process.posting_date = posting_date or nowdate()
- loan_process.loan_type = loan_type
- loan_process.process_type = "Term Loans"
- loan_process.loan = loan
-
- loan_process.submit()
-
- return loan_process.name
-
-
-def term_loan_accrual_pending(date, loan=None):
- filters = {"payment_date": ("<=", date), "is_accrued": 0}
-
- if loan:
- filters.update({"parent": loan})
-
- pending_accrual = frappe.db.get_value("Repayment Schedule", filters)
-
- return pending_accrual
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual_dashboard.py b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual_dashboard.py
deleted file mode 100644
index ac85df7..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual_dashboard.py
+++ /dev/null
@@ -1,5 +0,0 @@
-def get_data():
- return {
- "fieldname": "process_loan_interest_accrual",
- "transactions": [{"items": ["Loan Interest Accrual"]}],
- }
diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/test_process_loan_interest_accrual.py b/erpnext/loan_management/doctype/process_loan_interest_accrual/test_process_loan_interest_accrual.py
deleted file mode 100644
index 1fb8c2e..0000000
--- a/erpnext/loan_management/doctype/process_loan_interest_accrual/test_process_loan_interest_accrual.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestProcessLoanInterestAccrual(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/__init__.py b/erpnext/loan_management/doctype/process_loan_security_shortfall/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.js b/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.js
deleted file mode 100644
index 645e3ad..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Process Loan Security Shortfall', {
- onload: function(frm) {
- frm.set_value('update_time', frappe.datetime.now_datetime());
- }
-});
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.json b/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.json
deleted file mode 100644
index 3feb305..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-PLS-.#####",
- "creation": "2019-09-19 06:43:26.742336",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "update_time",
- "amended_from"
- ],
- "fields": [
- {
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "label": "Amended From",
- "no_copy": 1,
- "options": "Process Loan Security Shortfall",
- "print_hide": 1,
- "read_only": 1
- },
- {
- "fieldname": "update_time",
- "fieldtype": "Datetime",
- "in_list_view": 1,
- "label": "Update Time",
- "read_only": 1,
- "reqd": 1
- }
- ],
- "is_submittable": 1,
- "links": [],
- "modified": "2021-01-17 03:59:14.494557",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Process Loan Security Shortfall",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "select": 1,
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "select": 1,
- "share": 1,
- "submit": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.py b/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.py
deleted file mode 100644
index fffc5d4..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe.model.document import Document
-from frappe.utils import get_datetime
-
-from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import (
- check_for_ltv_shortfall,
-)
-
-
-class ProcessLoanSecurityShortfall(Document):
- def onload(self):
- self.set_onload("update_time", get_datetime())
-
- def on_submit(self):
- check_for_ltv_shortfall(self.name)
-
-
-def create_process_loan_security_shortfall():
- if check_for_secured_loans():
- process = frappe.new_doc("Process Loan Security Shortfall")
- process.update_time = get_datetime()
- process.submit()
-
-
-def check_for_secured_loans():
- return frappe.db.count("Loan", {"docstatus": 1, "is_secured_loan": 1})
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall_dashboard.py b/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall_dashboard.py
deleted file mode 100644
index 4d7b163..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/process_loan_security_shortfall_dashboard.py
+++ /dev/null
@@ -1,5 +0,0 @@
-def get_data():
- return {
- "fieldname": "process_loan_security_shortfall",
- "transactions": [{"items": ["Loan Security Shortfall"]}],
- }
diff --git a/erpnext/loan_management/doctype/process_loan_security_shortfall/test_process_loan_security_shortfall.py b/erpnext/loan_management/doctype/process_loan_security_shortfall/test_process_loan_security_shortfall.py
deleted file mode 100644
index c743cf0..0000000
--- a/erpnext/loan_management/doctype/process_loan_security_shortfall/test_process_loan_security_shortfall.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestProcessLoanSecurityShortfall(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/proposed_pledge/__init__.py b/erpnext/loan_management/doctype/proposed_pledge/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/proposed_pledge/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.json b/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.json
deleted file mode 100644
index a0b3a79..0000000
--- a/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "actions": [],
- "creation": "2019-08-29 22:29:37.628178",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security",
- "loan_security_name",
- "qty",
- "loan_security_price",
- "amount",
- "haircut",
- "post_haircut_amount"
- ],
- "fields": [
- {
- "fieldname": "loan_security_price",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Loan Security Price",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fieldname": "amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Amount",
- "options": "Company:company:default_currency"
- },
- {
- "fetch_from": "loan_security.haircut",
- "fieldname": "haircut",
- "fieldtype": "Percent",
- "label": "Haircut %",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security_pledge.qty",
- "fieldname": "qty",
- "fieldtype": "Float",
- "in_list_view": 1,
- "label": "Quantity",
- "non_negative": 1
- },
- {
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Security",
- "options": "Loan Security"
- },
- {
- "fieldname": "post_haircut_amount",
- "fieldtype": "Currency",
- "label": "Post Haircut Amount",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_name",
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "label": "Loan Security Name",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-01-17 07:29:01.671722",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Proposed Pledge",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.py b/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.py
deleted file mode 100644
index ac2b7d2..0000000
--- a/erpnext/loan_management/doctype/proposed_pledge/proposed_pledge.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class ProposedPledge(Document):
- pass
diff --git a/erpnext/loan_management/doctype/repayment_schedule/__init__.py b/erpnext/loan_management/doctype/repayment_schedule/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/repayment_schedule/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.json b/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.json
deleted file mode 100644
index 7f71beb..0000000
--- a/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "creation": "2019-09-12 12:57:07.940159",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "payment_date",
- "principal_amount",
- "interest_amount",
- "total_payment",
- "balance_loan_amount",
- "is_accrued"
- ],
- "fields": [
- {
- "columns": 2,
- "fieldname": "payment_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Payment Date"
- },
- {
- "columns": 2,
- "fieldname": "principal_amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Principal Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "columns": 2,
- "fieldname": "interest_amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Interest Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "columns": 2,
- "fieldname": "total_payment",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Total Payment",
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "columns": 2,
- "fieldname": "balance_loan_amount",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Balance Loan Amount",
- "no_copy": 1,
- "options": "Company:company:default_currency",
- "read_only": 1
- },
- {
- "default": "0",
- "fieldname": "is_accrued",
- "fieldtype": "Check",
- "in_list_view": 1,
- "label": "Is Accrued",
- "read_only": 1
- }
- ],
- "istable": 1,
- "modified": "2019-09-12 12:57:07.940159",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Repayment Schedule",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.py b/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.py
deleted file mode 100644
index dc407e7..0000000
--- a/erpnext/loan_management/doctype/repayment_schedule/repayment_schedule.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class RepaymentSchedule(Document):
- pass
diff --git a/erpnext/loan_management/doctype/sanctioned_loan_amount/__init__.py b/erpnext/loan_management/doctype/sanctioned_loan_amount/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/sanctioned_loan_amount/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.js b/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.js
deleted file mode 100644
index 5361e7c..0000000
--- a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Sanctioned Loan Amount', {
- // refresh: function(frm) {
-
- // }
-});
diff --git a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.json b/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.json
deleted file mode 100644
index 0447cd9..0000000
--- a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "actions": [],
- "autoname": "LM-SLA-.####",
- "creation": "2019-11-23 10:19:06.179736",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "applicant_type",
- "applicant",
- "column_break_3",
- "company",
- "sanctioned_amount_limit"
- ],
- "fields": [
- {
- "fieldname": "applicant_type",
- "fieldtype": "Select",
- "in_list_view": 1,
- "label": "Applicant Type",
- "options": "Employee\nMember\nCustomer",
- "reqd": 1
- },
- {
- "fieldname": "applicant",
- "fieldtype": "Dynamic Link",
- "in_list_view": 1,
- "label": "Applicant",
- "options": "applicant_type",
- "reqd": 1
- },
- {
- "fieldname": "column_break_3",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "company",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Company",
- "options": "Company",
- "reqd": 1
- },
- {
- "fieldname": "sanctioned_amount_limit",
- "fieldtype": "Currency",
- "in_list_view": 1,
- "label": "Sanctioned Amount Limit",
- "options": "Company:company:default_currency",
- "reqd": 1
- }
- ],
- "links": [],
- "modified": "2020-02-25 05:10:52.421193",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Sanctioned Loan Amount",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Loan Manager",
- "share": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.py b/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.py
deleted file mode 100644
index e7487cb..0000000
--- a/erpnext/loan_management/doctype/sanctioned_loan_amount/sanctioned_loan_amount.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.model.document import Document
-
-
-class SanctionedLoanAmount(Document):
- def validate(self):
- sanctioned_doc = frappe.db.exists(
- "Sanctioned Loan Amount", {"applicant": self.applicant, "company": self.company}
- )
-
- if sanctioned_doc and sanctioned_doc != self.name:
- frappe.throw(
- _("Sanctioned Loan Amount already exists for {0} against company {1}").format(
- frappe.bold(self.applicant), frappe.bold(self.company)
- )
- )
diff --git a/erpnext/loan_management/doctype/sanctioned_loan_amount/test_sanctioned_loan_amount.py b/erpnext/loan_management/doctype/sanctioned_loan_amount/test_sanctioned_loan_amount.py
deleted file mode 100644
index 4d99086..0000000
--- a/erpnext/loan_management/doctype/sanctioned_loan_amount/test_sanctioned_loan_amount.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-# import frappe
-import unittest
-
-
-class TestSanctionedLoanAmount(unittest.TestCase):
- pass
diff --git a/erpnext/loan_management/doctype/unpledge/__init__.py b/erpnext/loan_management/doctype/unpledge/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/doctype/unpledge/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/doctype/unpledge/unpledge.json b/erpnext/loan_management/doctype/unpledge/unpledge.json
deleted file mode 100644
index 0091e6c..0000000
--- a/erpnext/loan_management/doctype/unpledge/unpledge.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "actions": [],
- "creation": "2019-09-21 13:22:19.793797",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "loan_security",
- "loan_security_name",
- "loan_security_type",
- "loan_security_code",
- "haircut",
- "uom",
- "column_break_5",
- "qty"
- ],
- "fields": [
- {
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Loan Security",
- "options": "Loan Security",
- "reqd": 1
- },
- {
- "fetch_from": "loan_security.loan_security_type",
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "label": "Loan Security Type",
- "options": "Loan Security Type",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_code",
- "fieldname": "loan_security_code",
- "fieldtype": "Data",
- "label": "Loan Security Code"
- },
- {
- "fetch_from": "loan_security.unit_of_measure",
- "fieldname": "uom",
- "fieldtype": "Link",
- "label": "UOM",
- "options": "UOM"
- },
- {
- "fieldname": "column_break_5",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "qty",
- "fieldtype": "Float",
- "in_list_view": 1,
- "label": "Quantity",
- "non_negative": 1,
- "reqd": 1
- },
- {
- "fetch_from": "loan_security.haircut",
- "fieldname": "haircut",
- "fieldtype": "Percent",
- "label": "Haircut",
- "read_only": 1
- },
- {
- "fetch_from": "loan_security.loan_security_name",
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "label": "Loan Security Name",
- "read_only": 1
- }
- ],
- "index_web_pages_for_search": 1,
- "istable": 1,
- "links": [],
- "modified": "2021-01-17 07:36:20.212342",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Unpledge",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/doctype/unpledge/unpledge.py b/erpnext/loan_management/doctype/unpledge/unpledge.py
deleted file mode 100644
index 403749b..0000000
--- a/erpnext/loan_management/doctype/unpledge/unpledge.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-# import frappe
-from frappe.model.document import Document
-
-
-class Unpledge(Document):
- pass
diff --git a/erpnext/loan_management/loan_common.js b/erpnext/loan_management/loan_common.js
deleted file mode 100644
index 247e30b..0000000
--- a/erpnext/loan_management/loan_common.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on(cur_frm.doctype, {
- refresh: function(frm) {
- if (['Loan Disbursement', 'Loan Repayment', 'Loan Interest Accrual', 'Loan Write Off'].includes(frm.doc.doctype)
- && frm.doc.docstatus > 0) {
-
- frm.add_custom_button(__("Accounting Ledger"), function() {
- frappe.route_options = {
- voucher_no: frm.doc.name,
- company: frm.doc.company,
- from_date: moment(frm.doc.posting_date).format('YYYY-MM-DD'),
- to_date: moment(frm.doc.modified).format('YYYY-MM-DD'),
- show_cancelled_entries: frm.doc.docstatus === 2
- };
-
- frappe.set_route("query-report", "General Ledger");
- },__("View"));
- }
- },
- applicant: function(frm) {
- if (!["Loan Application", "Loan"].includes(frm.doc.doctype)) {
- return;
- }
-
- if (frm.doc.applicant) {
- frappe.model.with_doc(frm.doc.applicant_type, frm.doc.applicant, function() {
- var applicant = frappe.model.get_doc(frm.doc.applicant_type, frm.doc.applicant);
- frm.set_value("applicant_name",
- applicant.employee_name || applicant.member_name);
- });
- }
- else {
- frm.set_value("applicant_name", null);
- }
- }
-});
diff --git a/erpnext/loan_management/loan_management_dashboard/loan_dashboard/loan_dashboard.json b/erpnext/loan_management/loan_management_dashboard/loan_dashboard/loan_dashboard.json
deleted file mode 100644
index e060253..0000000
--- a/erpnext/loan_management/loan_management_dashboard/loan_dashboard/loan_dashboard.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "cards": [
- {
- "card": "New Loans"
- },
- {
- "card": "Active Loans"
- },
- {
- "card": "Closed Loans"
- },
- {
- "card": "Total Disbursed"
- },
- {
- "card": "Open Loan Applications"
- },
- {
- "card": "New Loan Applications"
- },
- {
- "card": "Total Sanctioned Amount"
- },
- {
- "card": "Active Securities"
- },
- {
- "card": "Applicants With Unpaid Shortfall"
- },
- {
- "card": "Total Shortfall Amount"
- },
- {
- "card": "Total Repayment"
- },
- {
- "card": "Total Write Off"
- }
- ],
- "charts": [
- {
- "chart": "New Loans",
- "width": "Half"
- },
- {
- "chart": "Loan Disbursements",
- "width": "Half"
- },
- {
- "chart": "Top 10 Pledged Loan Securities",
- "width": "Half"
- },
- {
- "chart": "Loan Interest Accrual",
- "width": "Half"
- }
- ],
- "creation": "2021-02-06 16:52:43.484752",
- "dashboard_name": "Loan Dashboard",
- "docstatus": 0,
- "doctype": "Dashboard",
- "idx": 0,
- "is_default": 0,
- "is_standard": 1,
- "modified": "2021-02-21 20:53:47.531699",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Dashboard",
- "owner": "Administrator"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/active_loans/active_loans.json b/erpnext/loan_management/number_card/active_loans/active_loans.json
deleted file mode 100644
index 7e0db47..0000000
--- a/erpnext/loan_management/number_card/active_loans/active_loans.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-06 17:10:26.132493",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan\",\"docstatus\",\"=\",\"1\",false],[\"Loan\",\"status\",\"in\",[\"Disbursed\",\"Partially Disbursed\",null],false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Active Loans",
- "modified": "2021-02-06 17:29:20.304087",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Active Loans",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/active_securities/active_securities.json b/erpnext/loan_management/number_card/active_securities/active_securities.json
deleted file mode 100644
index 298e410..0000000
--- a/erpnext/loan_management/number_card/active_securities/active_securities.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-06 19:07:21.344199",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Security",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Security\",\"disabled\",\"=\",0,false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Active Securities",
- "modified": "2021-02-06 19:07:26.671516",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Active Securities",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/applicants_with_unpaid_shortfall/applicants_with_unpaid_shortfall.json b/erpnext/loan_management/number_card/applicants_with_unpaid_shortfall/applicants_with_unpaid_shortfall.json
deleted file mode 100644
index 3b9eba1..0000000
--- a/erpnext/loan_management/number_card/applicants_with_unpaid_shortfall/applicants_with_unpaid_shortfall.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2021-02-07 18:55:12.632616",
- "docstatus": 0,
- "doctype": "Number Card",
- "filters_json": "null",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Applicants With Unpaid Shortfall",
- "method": "erpnext.loan_management.doctype.loan.loan.get_shortfall_applicants",
- "modified": "2021-02-07 21:46:27.369795",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Applicants With Unpaid Shortfall",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Custom"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/closed_loans/closed_loans.json b/erpnext/loan_management/number_card/closed_loans/closed_loans.json
deleted file mode 100644
index c2f2244..0000000
--- a/erpnext/loan_management/number_card/closed_loans/closed_loans.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-21 19:51:49.261813",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan\",\"docstatus\",\"=\",\"1\",false],[\"Loan\",\"status\",\"=\",\"Closed\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Closed Loans",
- "modified": "2021-02-21 19:51:54.087903",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Closed Loans",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/last_interest_accrual/last_interest_accrual.json b/erpnext/loan_management/number_card/last_interest_accrual/last_interest_accrual.json
deleted file mode 100644
index 65c8ce6..0000000
--- a/erpnext/loan_management/number_card/last_interest_accrual/last_interest_accrual.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "creation": "2021-02-07 21:57:14.758007",
- "docstatus": 0,
- "doctype": "Number Card",
- "filters_json": "null",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Last Interest Accrual",
- "method": "erpnext.loan_management.doctype.loan.loan.get_last_accrual_date",
- "modified": "2021-02-07 21:59:47.525197",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Last Interest Accrual",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Custom"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/new_loan_applications/new_loan_applications.json b/erpnext/loan_management/number_card/new_loan_applications/new_loan_applications.json
deleted file mode 100644
index 7e655ff..0000000
--- a/erpnext/loan_management/number_card/new_loan_applications/new_loan_applications.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-06 17:59:10.051269",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Application",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Application\",\"docstatus\",\"=\",\"1\",false],[\"Loan Application\",\"creation\",\"Timespan\",\"today\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "New Loan Applications",
- "modified": "2021-02-06 17:59:21.880979",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "New Loan Applications",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/new_loans/new_loans.json b/erpnext/loan_management/number_card/new_loans/new_loans.json
deleted file mode 100644
index 424f0f1..0000000
--- a/erpnext/loan_management/number_card/new_loans/new_loans.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-06 17:56:34.624031",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan\",\"docstatus\",\"=\",\"1\",false],[\"Loan\",\"creation\",\"Timespan\",\"today\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "New Loans",
- "modified": "2021-02-06 17:58:20.209166",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "New Loans",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/open_loan_applications/open_loan_applications.json b/erpnext/loan_management/number_card/open_loan_applications/open_loan_applications.json
deleted file mode 100644
index 1d5e84e..0000000
--- a/erpnext/loan_management/number_card/open_loan_applications/open_loan_applications.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "",
- "creation": "2021-02-06 17:23:32.509899",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Application",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Application\",\"docstatus\",\"=\",\"1\",false],[\"Loan Application\",\"status\",\"=\",\"Open\",false]]",
- "function": "Count",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Open Loan Applications",
- "modified": "2021-02-06 17:29:09.761011",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Open Loan Applications",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/total_disbursed/total_disbursed.json b/erpnext/loan_management/number_card/total_disbursed/total_disbursed.json
deleted file mode 100644
index 4a3f869..0000000
--- a/erpnext/loan_management/number_card/total_disbursed/total_disbursed.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "disbursed_amount",
- "creation": "2021-02-06 16:52:19.505462",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Disbursement",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Disbursement\",\"docstatus\",\"=\",\"1\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Total Disbursed Amount",
- "modified": "2021-02-06 17:29:38.453870",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Total Disbursed",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/total_repayment/total_repayment.json b/erpnext/loan_management/number_card/total_repayment/total_repayment.json
deleted file mode 100644
index 38de42b..0000000
--- a/erpnext/loan_management/number_card/total_repayment/total_repayment.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "aggregate_function_based_on": "amount_paid",
- "color": "#29CD42",
- "creation": "2021-02-21 19:27:45.989222",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Repayment",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Repayment\",\"docstatus\",\"=\",\"1\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Total Repayment",
- "modified": "2021-02-21 19:34:59.656546",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Total Repayment",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/total_sanctioned_amount/total_sanctioned_amount.json b/erpnext/loan_management/number_card/total_sanctioned_amount/total_sanctioned_amount.json
deleted file mode 100644
index dfb9d24..0000000
--- a/erpnext/loan_management/number_card/total_sanctioned_amount/total_sanctioned_amount.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "loan_amount",
- "creation": "2021-02-06 17:05:04.704162",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan\",\"docstatus\",\"=\",\"1\",false],[\"Loan\",\"status\",\"=\",\"Sanctioned\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Total Sanctioned Amount",
- "modified": "2021-02-06 17:29:29.930557",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Total Sanctioned Amount",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Monthly",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/total_shortfall_amount/total_shortfall_amount.json b/erpnext/loan_management/number_card/total_shortfall_amount/total_shortfall_amount.json
deleted file mode 100644
index aa6b093..0000000
--- a/erpnext/loan_management/number_card/total_shortfall_amount/total_shortfall_amount.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "aggregate_function_based_on": "shortfall_amount",
- "creation": "2021-02-09 08:07:20.096995",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Security Shortfall",
- "dynamic_filters_json": "[]",
- "filters_json": "[]",
- "function": "Sum",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Total Unpaid Shortfall Amount",
- "modified": "2021-02-09 08:09:00.355547",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Total Shortfall Amount",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/number_card/total_write_off/total_write_off.json b/erpnext/loan_management/number_card/total_write_off/total_write_off.json
deleted file mode 100644
index c85169a..0000000
--- a/erpnext/loan_management/number_card/total_write_off/total_write_off.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "aggregate_function_based_on": "write_off_amount",
- "color": "#CB2929",
- "creation": "2021-02-21 19:48:29.004429",
- "docstatus": 0,
- "doctype": "Number Card",
- "document_type": "Loan Write Off",
- "dynamic_filters_json": "[]",
- "filters_json": "[[\"Loan Write Off\",\"docstatus\",\"=\",\"1\",false]]",
- "function": "Sum",
- "idx": 0,
- "is_public": 0,
- "is_standard": 1,
- "label": "Total Write Off",
- "modified": "2021-02-21 19:48:58.604159",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Total Write Off",
- "owner": "Administrator",
- "report_function": "Sum",
- "show_percentage_stats": 1,
- "stats_time_interval": "Daily",
- "type": "Document Type"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/__init__.py b/erpnext/loan_management/report/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/__init__.py b/erpnext/loan_management/report/applicant_wise_loan_security_exposure/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.js b/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.js
deleted file mode 100644
index 73d60c4..0000000
--- a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Applicant-Wise Loan Security Exposure"] = {
- "filters": [
- {
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
- }
- ]
-};
diff --git a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.json b/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.json
deleted file mode 100644
index a778cd7..0000000
--- a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 0,
- "columns": [],
- "creation": "2021-01-15 23:48:38.913514",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2021-01-15 23:48:38.913514",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Applicant-Wise Loan Security Exposure",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Loan Security",
- "report_name": "Applicant-Wise Loan Security Exposure",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "System Manager"
- },
- {
- "role": "Loan Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.py b/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.py
deleted file mode 100644
index 02da810..0000000
--- a/erpnext/loan_management/report/applicant_wise_loan_security_exposure/applicant_wise_loan_security_exposure.py
+++ /dev/null
@@ -1,236 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import flt
-
-import erpnext
-
-
-def execute(filters=None):
- columns = get_columns(filters)
- data = get_data(filters)
- return columns, data
-
-
-def get_columns(filters):
- columns = [
- {
- "label": _("Applicant Type"),
- "fieldname": "applicant_type",
- "options": "DocType",
- "width": 100,
- },
- {
- "label": _("Applicant Name"),
- "fieldname": "applicant_name",
- "fieldtype": "Dynamic Link",
- "options": "applicant_type",
- "width": 150,
- },
- {
- "label": _("Loan Security"),
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "options": "Loan Security",
- "width": 160,
- },
- {
- "label": _("Loan Security Code"),
- "fieldname": "loan_security_code",
- "fieldtype": "Data",
- "width": 100,
- },
- {
- "label": _("Loan Security Name"),
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "width": 150,
- },
- {"label": _("Haircut"), "fieldname": "haircut", "fieldtype": "Percent", "width": 100},
- {
- "label": _("Loan Security Type"),
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "options": "Loan Security Type",
- "width": 120,
- },
- {"label": _("Disabled"), "fieldname": "disabled", "fieldtype": "Check", "width": 80},
- {"label": _("Total Qty"), "fieldname": "total_qty", "fieldtype": "Float", "width": 100},
- {
- "label": _("Latest Price"),
- "fieldname": "latest_price",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Price Valid Upto"),
- "fieldname": "price_valid_upto",
- "fieldtype": "Datetime",
- "width": 100,
- },
- {
- "label": _("Current Value"),
- "fieldname": "current_value",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("% Of Applicant Portfolio"),
- "fieldname": "portfolio_percent",
- "fieldtype": "Percentage",
- "width": 100,
- },
- {
- "label": _("Currency"),
- "fieldname": "currency",
- "fieldtype": "Currency",
- "options": "Currency",
- "hidden": 1,
- "width": 100,
- },
- ]
-
- return columns
-
-
-def get_data(filters):
- data = []
- loan_security_details = get_loan_security_details()
- pledge_values, total_value_map, applicant_type_map = get_applicant_wise_total_loan_security_qty(
- filters, loan_security_details
- )
-
- currency = erpnext.get_company_currency(filters.get("company"))
-
- for key, qty in pledge_values.items():
- if qty:
- row = {}
- current_value = flt(qty * loan_security_details.get(key[1], {}).get("latest_price", 0))
- valid_upto = loan_security_details.get(key[1], {}).get("valid_upto")
-
- row.update(loan_security_details.get(key[1]))
- row.update(
- {
- "applicant_type": applicant_type_map.get(key[0]),
- "applicant_name": key[0],
- "total_qty": qty,
- "current_value": current_value,
- "price_valid_upto": valid_upto,
- "portfolio_percent": flt(current_value * 100 / total_value_map.get(key[0]), 2)
- if total_value_map.get(key[0])
- else 0.0,
- "currency": currency,
- }
- )
-
- data.append(row)
-
- return data
-
-
-def get_loan_security_details():
- security_detail_map = {}
- loan_security_price_map = {}
- lsp_validity_map = {}
-
- loan_security_prices = frappe.db.sql(
- """
- SELECT loan_security, loan_security_price, valid_upto
- FROM `tabLoan Security Price` t1
- WHERE valid_from >= (SELECT MAX(valid_from) FROM `tabLoan Security Price` t2
- WHERE t1.loan_security = t2.loan_security)
- """,
- as_dict=1,
- )
-
- for security in loan_security_prices:
- loan_security_price_map.setdefault(security.loan_security, security.loan_security_price)
- lsp_validity_map.setdefault(security.loan_security, security.valid_upto)
-
- loan_security_details = frappe.get_all(
- "Loan Security",
- fields=[
- "name as loan_security",
- "loan_security_code",
- "loan_security_name",
- "haircut",
- "loan_security_type",
- "disabled",
- ],
- )
-
- for security in loan_security_details:
- security.update(
- {
- "latest_price": flt(loan_security_price_map.get(security.loan_security)),
- "valid_upto": lsp_validity_map.get(security.loan_security),
- }
- )
-
- security_detail_map.setdefault(security.loan_security, security)
-
- return security_detail_map
-
-
-def get_applicant_wise_total_loan_security_qty(filters, loan_security_details):
- current_pledges = {}
- total_value_map = {}
- applicant_type_map = {}
- applicant_wise_unpledges = {}
- conditions = ""
-
- if filters.get("company"):
- conditions = "AND company = %(company)s"
-
- unpledges = frappe.db.sql(
- """
- SELECT up.applicant, u.loan_security, sum(u.qty) as qty
- FROM `tabLoan Security Unpledge` up, `tabUnpledge` u
- WHERE u.parent = up.name
- AND up.status = 'Approved'
- {conditions}
- GROUP BY up.applicant, u.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_dict=1,
- )
-
- for unpledge in unpledges:
- applicant_wise_unpledges.setdefault((unpledge.applicant, unpledge.loan_security), unpledge.qty)
-
- pledges = frappe.db.sql(
- """
- SELECT lp.applicant_type, lp.applicant, p.loan_security, sum(p.qty) as qty
- FROM `tabLoan Security Pledge` lp, `tabPledge`p
- WHERE p.parent = lp.name
- AND lp.status = 'Pledged'
- {conditions}
- GROUP BY lp.applicant, p.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_dict=1,
- )
-
- for security in pledges:
- current_pledges.setdefault((security.applicant, security.loan_security), security.qty)
- total_value_map.setdefault(security.applicant, 0.0)
- applicant_type_map.setdefault(security.applicant, security.applicant_type)
-
- current_pledges[(security.applicant, security.loan_security)] -= applicant_wise_unpledges.get(
- (security.applicant, security.loan_security), 0.0
- )
-
- total_value_map[security.applicant] += current_pledges.get(
- (security.applicant, security.loan_security)
- ) * loan_security_details.get(security.loan_security, {}).get("latest_price", 0)
-
- return current_pledges, total_value_map, applicant_type_map
diff --git a/erpnext/loan_management/report/loan_interest_report/__init__.py b/erpnext/loan_management/report/loan_interest_report/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/loan_interest_report/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.js b/erpnext/loan_management/report/loan_interest_report/loan_interest_report.js
deleted file mode 100644
index 458c79a..0000000
--- a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Loan Interest Report"] = {
- "filters": [
- {
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
- },
- {
- "fieldname":"applicant_type",
- "label": __("Applicant Type"),
- "fieldtype": "Select",
- "options": ["Customer", "Employee"],
- "reqd": 1,
- "default": "Customer",
- on_change: function() {
- frappe.query_report.set_filter_value('applicant', "");
- }
- },
- {
- "fieldname": "applicant",
- "label": __("Applicant"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var applicant_type = frappe.query_report.get_filter_value('applicant_type');
- var applicant = frappe.query_report.get_filter_value('applicant');
- if(applicant && !applicant_type) {
- frappe.throw(__("Please select Applicant Type first"));
- }
- return applicant_type;
- }
- },
- {
- "fieldname":"from_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- },
- {
- "fieldname":"to_date",
- "label": __("From Date"),
- "fieldtype": "Date",
- },
- ]
-};
diff --git a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.json b/erpnext/loan_management/report/loan_interest_report/loan_interest_report.json
deleted file mode 100644
index 321d606..0000000
--- a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 1,
- "columns": [],
- "creation": "2021-01-10 02:03:26.742693",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2021-01-10 02:03:26.742693",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Interest Report",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Loan Interest Accrual",
- "report_name": "Loan Interest Report",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "System Manager"
- },
- {
- "role": "Loan Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.py b/erpnext/loan_management/report/loan_interest_report/loan_interest_report.py
deleted file mode 100644
index 58a7880..0000000
--- a/erpnext/loan_management/report/loan_interest_report/loan_interest_report.py
+++ /dev/null
@@ -1,379 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-from frappe.utils import add_days, flt, getdate
-
-import erpnext
-from erpnext.loan_management.report.applicant_wise_loan_security_exposure.applicant_wise_loan_security_exposure import (
- get_loan_security_details,
-)
-
-
-def execute(filters=None):
- columns = get_columns()
- data = get_active_loan_details(filters)
- return columns, data
-
-
-def get_columns():
- columns = [
- {"label": _("Loan"), "fieldname": "loan", "fieldtype": "Link", "options": "Loan", "width": 160},
- {"label": _("Status"), "fieldname": "status", "fieldtype": "Data", "width": 160},
- {
- "label": _("Applicant Type"),
- "fieldname": "applicant_type",
- "options": "DocType",
- "width": 100,
- },
- {
- "label": _("Applicant Name"),
- "fieldname": "applicant_name",
- "fieldtype": "Dynamic Link",
- "options": "applicant_type",
- "width": 150,
- },
- {
- "label": _("Loan Type"),
- "fieldname": "loan_type",
- "fieldtype": "Link",
- "options": "Loan Type",
- "width": 100,
- },
- {
- "label": _("Sanctioned Amount"),
- "fieldname": "sanctioned_amount",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Disbursed Amount"),
- "fieldname": "disbursed_amount",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Penalty Amount"),
- "fieldname": "penalty",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Accrued Interest"),
- "fieldname": "accrued_interest",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Accrued Principal"),
- "fieldname": "accrued_principal",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Total Repayment"),
- "fieldname": "total_repayment",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Principal Outstanding"),
- "fieldname": "principal_outstanding",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Interest Outstanding"),
- "fieldname": "interest_outstanding",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Total Outstanding"),
- "fieldname": "total_outstanding",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Undue Booked Interest"),
- "fieldname": "undue_interest",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 120,
- },
- {
- "label": _("Interest %"),
- "fieldname": "rate_of_interest",
- "fieldtype": "Percent",
- "width": 100,
- },
- {
- "label": _("Penalty Interest %"),
- "fieldname": "penalty_interest",
- "fieldtype": "Percent",
- "width": 100,
- },
- {
- "label": _("Loan To Value Ratio"),
- "fieldname": "loan_to_value",
- "fieldtype": "Percent",
- "width": 100,
- },
- {
- "label": _("Currency"),
- "fieldname": "currency",
- "fieldtype": "Currency",
- "options": "Currency",
- "hidden": 1,
- "width": 100,
- },
- ]
-
- return columns
-
-
-def get_active_loan_details(filters):
- filter_obj = {
- "status": ("!=", "Closed"),
- "docstatus": 1,
- }
- if filters.get("company"):
- filter_obj.update({"company": filters.get("company")})
-
- if filters.get("applicant"):
- filter_obj.update({"applicant": filters.get("applicant")})
-
- loan_details = frappe.get_all(
- "Loan",
- fields=[
- "name as loan",
- "applicant_type",
- "applicant as applicant_name",
- "loan_type",
- "disbursed_amount",
- "rate_of_interest",
- "total_payment",
- "total_principal_paid",
- "total_interest_payable",
- "written_off_amount",
- "status",
- ],
- filters=filter_obj,
- )
-
- loan_list = [d.loan for d in loan_details]
-
- current_pledges = get_loan_wise_pledges(filters)
- loan_wise_security_value = get_loan_wise_security_value(filters, current_pledges)
-
- sanctioned_amount_map = get_sanctioned_amount_map()
- penal_interest_rate_map = get_penal_interest_rate_map()
- payments = get_payments(loan_list, filters)
- accrual_map = get_interest_accruals(loan_list, filters)
- currency = erpnext.get_company_currency(filters.get("company"))
-
- for loan in loan_details:
- total_payment = loan.total_payment if loan.status == "Disbursed" else loan.disbursed_amount
-
- loan.update(
- {
- "sanctioned_amount": flt(sanctioned_amount_map.get(loan.applicant_name)),
- "principal_outstanding": flt(total_payment)
- - flt(loan.total_principal_paid)
- - flt(loan.total_interest_payable)
- - flt(loan.written_off_amount),
- "total_repayment": flt(payments.get(loan.loan)),
- "accrued_interest": flt(accrual_map.get(loan.loan, {}).get("accrued_interest")),
- "accrued_principal": flt(accrual_map.get(loan.loan, {}).get("accrued_principal")),
- "interest_outstanding": flt(accrual_map.get(loan.loan, {}).get("interest_outstanding")),
- "penalty": flt(accrual_map.get(loan.loan, {}).get("penalty")),
- "penalty_interest": penal_interest_rate_map.get(loan.loan_type),
- "undue_interest": flt(accrual_map.get(loan.loan, {}).get("undue_interest")),
- "loan_to_value": 0.0,
- "currency": currency,
- }
- )
-
- loan["total_outstanding"] = (
- loan["principal_outstanding"] + loan["interest_outstanding"] + loan["penalty"]
- )
-
- if loan_wise_security_value.get(loan.loan):
- loan["loan_to_value"] = flt(
- (loan["principal_outstanding"] * 100) / loan_wise_security_value.get(loan.loan)
- )
-
- return loan_details
-
-
-def get_sanctioned_amount_map():
- return frappe._dict(
- frappe.get_all(
- "Sanctioned Loan Amount", fields=["applicant", "sanctioned_amount_limit"], as_list=1
- )
- )
-
-
-def get_payments(loans, filters):
- query_filters = {"against_loan": ("in", loans)}
-
- if filters.get("from_date"):
- query_filters.update({"posting_date": (">=", filters.get("from_date"))})
-
- if filters.get("to_date"):
- query_filters.update({"posting_date": ("<=", filters.get("to_date"))})
-
- return frappe._dict(
- frappe.get_all(
- "Loan Repayment",
- fields=["against_loan", "sum(amount_paid)"],
- filters=query_filters,
- group_by="against_loan",
- as_list=1,
- )
- )
-
-
-def get_interest_accruals(loans, filters):
- accrual_map = {}
- query_filters = {"loan": ("in", loans)}
-
- if filters.get("from_date"):
- query_filters.update({"posting_date": (">=", filters.get("from_date"))})
-
- if filters.get("to_date"):
- query_filters.update({"posting_date": ("<=", filters.get("to_date"))})
-
- interest_accruals = frappe.get_all(
- "Loan Interest Accrual",
- fields=[
- "loan",
- "interest_amount",
- "posting_date",
- "penalty_amount",
- "paid_interest_amount",
- "accrual_type",
- "payable_principal_amount",
- ],
- filters=query_filters,
- order_by="posting_date desc",
- )
-
- for entry in interest_accruals:
- accrual_map.setdefault(
- entry.loan,
- {
- "accrued_interest": 0.0,
- "accrued_principal": 0.0,
- "undue_interest": 0.0,
- "interest_outstanding": 0.0,
- "last_accrual_date": "",
- "due_date": "",
- },
- )
-
- if entry.accrual_type == "Regular":
- if not accrual_map[entry.loan]["due_date"]:
- accrual_map[entry.loan]["due_date"] = add_days(entry.posting_date, 1)
- if not accrual_map[entry.loan]["last_accrual_date"]:
- accrual_map[entry.loan]["last_accrual_date"] = entry.posting_date
-
- due_date = accrual_map[entry.loan]["due_date"]
- last_accrual_date = accrual_map[entry.loan]["last_accrual_date"]
-
- if due_date and getdate(entry.posting_date) < getdate(due_date):
- accrual_map[entry.loan]["interest_outstanding"] += (
- entry.interest_amount - entry.paid_interest_amount
- )
- else:
- accrual_map[entry.loan]["undue_interest"] += entry.interest_amount - entry.paid_interest_amount
-
- accrual_map[entry.loan]["accrued_interest"] += entry.interest_amount
- accrual_map[entry.loan]["accrued_principal"] += entry.payable_principal_amount
-
- if last_accrual_date and getdate(entry.posting_date) == last_accrual_date:
- accrual_map[entry.loan]["penalty"] = entry.penalty_amount
-
- return accrual_map
-
-
-def get_penal_interest_rate_map():
- return frappe._dict(
- frappe.get_all("Loan Type", fields=["name", "penalty_interest_rate"], as_list=1)
- )
-
-
-def get_loan_wise_pledges(filters):
- loan_wise_unpledges = {}
- current_pledges = {}
-
- conditions = ""
-
- if filters.get("company"):
- conditions = "AND company = %(company)s"
-
- unpledges = frappe.db.sql(
- """
- SELECT up.loan, u.loan_security, sum(u.qty) as qty
- FROM `tabLoan Security Unpledge` up, `tabUnpledge` u
- WHERE u.parent = up.name
- AND up.status = 'Approved'
- {conditions}
- GROUP BY up.loan, u.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_dict=1,
- )
-
- for unpledge in unpledges:
- loan_wise_unpledges.setdefault((unpledge.loan, unpledge.loan_security), unpledge.qty)
-
- pledges = frappe.db.sql(
- """
- SELECT lp.loan, p.loan_security, sum(p.qty) as qty
- FROM `tabLoan Security Pledge` lp, `tabPledge`p
- WHERE p.parent = lp.name
- AND lp.status = 'Pledged'
- {conditions}
- GROUP BY lp.loan, p.loan_security
- """.format(
- conditions=conditions
- ),
- filters,
- as_dict=1,
- )
-
- for security in pledges:
- current_pledges.setdefault((security.loan, security.loan_security), security.qty)
- current_pledges[(security.loan, security.loan_security)] -= loan_wise_unpledges.get(
- (security.loan, security.loan_security), 0.0
- )
-
- return current_pledges
-
-
-def get_loan_wise_security_value(filters, current_pledges):
- loan_security_details = get_loan_security_details()
- loan_wise_security_value = {}
-
- for key in current_pledges:
- qty = current_pledges.get(key)
- loan_wise_security_value.setdefault(key[0], 0.0)
- loan_wise_security_value[key[0]] += flt(
- qty * loan_security_details.get(key[1], {}).get("latest_price", 0)
- )
-
- return loan_wise_security_value
diff --git a/erpnext/loan_management/report/loan_repayment_and_closure/__init__.py b/erpnext/loan_management/report/loan_repayment_and_closure/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/loan_repayment_and_closure/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.js b/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.js
deleted file mode 100644
index ed5e937..0000000
--- a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Loan Repayment and Closure"] = {
- "filters": [
- {
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")
- },
- {
- "fieldname":"applicant_type",
- "label": __("Applicant Type"),
- "fieldtype": "Select",
- "options": ["Customer", "Employee"],
- "reqd": 1,
- "default": "Customer",
- on_change: function() {
- frappe.query_report.set_filter_value('applicant', "");
- }
- },
- {
- "fieldname": "applicant",
- "label": __("Applicant"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var applicant_type = frappe.query_report.get_filter_value('applicant_type');
- var applicant = frappe.query_report.get_filter_value('applicant');
- if(applicant && !applicant_type) {
- frappe.throw(__("Please select Applicant Type first"));
- }
- return applicant_type;
- }
-
- },
- ]
-};
diff --git a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.json b/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.json
deleted file mode 100644
index 52d5b2c..0000000
--- a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 0,
- "creation": "2019-09-03 16:54:55.616593",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2020-02-25 07:16:47.696994",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Repayment and Closure",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Loan Repayment",
- "report_name": "Loan Repayment and Closure",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "System Manager"
- },
- {
- "role": "Loan Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.py b/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.py
deleted file mode 100644
index 253b994..0000000
--- a/erpnext/loan_management/report/loan_repayment_and_closure/loan_repayment_and_closure.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
- columns = get_columns()
- data = get_data(filters)
- return columns, data
-
-
-def get_columns():
- return [
- {"label": _("Posting Date"), "fieldtype": "Date", "fieldname": "posting_date", "width": 100},
- {
- "label": _("Loan Repayment"),
- "fieldtype": "Link",
- "fieldname": "loan_repayment",
- "options": "Loan Repayment",
- "width": 100,
- },
- {
- "label": _("Against Loan"),
- "fieldtype": "Link",
- "fieldname": "against_loan",
- "options": "Loan",
- "width": 200,
- },
- {"label": _("Applicant"), "fieldtype": "Data", "fieldname": "applicant", "width": 150},
- {"label": _("Payment Type"), "fieldtype": "Data", "fieldname": "payment_type", "width": 150},
- {
- "label": _("Principal Amount"),
- "fieldtype": "Currency",
- "fieldname": "principal_amount",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Interest Amount"),
- "fieldtype": "Currency",
- "fieldname": "interest",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Penalty Amount"),
- "fieldtype": "Currency",
- "fieldname": "penalty",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Payable Amount"),
- "fieldtype": "Currency",
- "fieldname": "payable_amount",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Paid Amount"),
- "fieldtype": "Currency",
- "fieldname": "paid_amount",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Currency"),
- "fieldtype": "Link",
- "fieldname": "currency",
- "options": "Currency",
- "width": 100,
- },
- ]
-
-
-def get_data(filters):
- data = []
-
- query_filters = {
- "docstatus": 1,
- "company": filters.get("company"),
- }
-
- if filters.get("applicant"):
- query_filters.update({"applicant": filters.get("applicant")})
-
- loan_repayments = frappe.get_all(
- "Loan Repayment",
- filters=query_filters,
- fields=[
- "posting_date",
- "applicant",
- "name",
- "against_loan",
- "payable_amount",
- "pending_principal_amount",
- "interest_payable",
- "penalty_amount",
- "amount_paid",
- ],
- )
-
- default_currency = frappe.get_cached_value("Company", filters.get("company"), "default_currency")
-
- for repayment in loan_repayments:
- row = {
- "posting_date": repayment.posting_date,
- "loan_repayment": repayment.name,
- "applicant": repayment.applicant,
- "payment_type": repayment.payment_type,
- "against_loan": repayment.against_loan,
- "principal_amount": repayment.pending_principal_amount,
- "interest": repayment.interest_payable,
- "penalty": repayment.penalty_amount,
- "payable_amount": repayment.payable_amount,
- "paid_amount": repayment.amount_paid,
- "currency": default_currency,
- }
-
- data.append(row)
-
- return data
diff --git a/erpnext/loan_management/report/loan_security_exposure/__init__.py b/erpnext/loan_management/report/loan_security_exposure/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/loan_security_exposure/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.js b/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.js
deleted file mode 100644
index 777f296..0000000
--- a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Loan Security Exposure"] = {
- "filters": [
- {
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "default": frappe.defaults.get_user_default("Company"),
- "reqd": 1
- }
- ]
-};
diff --git a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.json b/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.json
deleted file mode 100644
index d4dca08..0000000
--- a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "add_total_row": 0,
- "columns": [],
- "creation": "2021-01-16 08:08:01.694583",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2021-01-16 08:08:01.694583",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Exposure",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Loan Security",
- "report_name": "Loan Security Exposure",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "System Manager"
- },
- {
- "role": "Loan Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.py b/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.py
deleted file mode 100644
index a92f960..0000000
--- a/erpnext/loan_management/report/loan_security_exposure/loan_security_exposure.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-from frappe import _
-from frappe.utils import flt
-
-import erpnext
-from erpnext.loan_management.report.applicant_wise_loan_security_exposure.applicant_wise_loan_security_exposure import (
- get_applicant_wise_total_loan_security_qty,
- get_loan_security_details,
-)
-
-
-def execute(filters=None):
- columns = get_columns(filters)
- data = get_data(filters)
- return columns, data
-
-
-def get_columns(filters):
- columns = [
- {
- "label": _("Loan Security"),
- "fieldname": "loan_security",
- "fieldtype": "Link",
- "options": "Loan Security",
- "width": 160,
- },
- {
- "label": _("Loan Security Code"),
- "fieldname": "loan_security_code",
- "fieldtype": "Data",
- "width": 100,
- },
- {
- "label": _("Loan Security Name"),
- "fieldname": "loan_security_name",
- "fieldtype": "Data",
- "width": 150,
- },
- {"label": _("Haircut"), "fieldname": "haircut", "fieldtype": "Percent", "width": 100},
- {
- "label": _("Loan Security Type"),
- "fieldname": "loan_security_type",
- "fieldtype": "Link",
- "options": "Loan Security Type",
- "width": 120,
- },
- {"label": _("Disabled"), "fieldname": "disabled", "fieldtype": "Check", "width": 80},
- {"label": _("Total Qty"), "fieldname": "total_qty", "fieldtype": "Float", "width": 100},
- {
- "label": _("Latest Price"),
- "fieldname": "latest_price",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("Price Valid Upto"),
- "fieldname": "price_valid_upto",
- "fieldtype": "Datetime",
- "width": 100,
- },
- {
- "label": _("Current Value"),
- "fieldname": "current_value",
- "fieldtype": "Currency",
- "options": "currency",
- "width": 100,
- },
- {
- "label": _("% Of Total Portfolio"),
- "fieldname": "portfolio_percent",
- "fieldtype": "Percentage",
- "width": 100,
- },
- {
- "label": _("Pledged Applicant Count"),
- "fieldname": "pledged_applicant_count",
- "fieldtype": "Percentage",
- "width": 100,
- },
- {
- "label": _("Currency"),
- "fieldname": "currency",
- "fieldtype": "Currency",
- "options": "Currency",
- "hidden": 1,
- "width": 100,
- },
- ]
-
- return columns
-
-
-def get_data(filters):
- data = []
- loan_security_details = get_loan_security_details()
- current_pledges, total_portfolio_value = get_company_wise_loan_security_details(
- filters, loan_security_details
- )
- currency = erpnext.get_company_currency(filters.get("company"))
-
- for security, value in current_pledges.items():
- if value.get("qty"):
- row = {}
- current_value = flt(
- value.get("qty", 0) * loan_security_details.get(security, {}).get("latest_price", 0)
- )
- valid_upto = loan_security_details.get(security, {}).get("valid_upto")
-
- row.update(loan_security_details.get(security))
- row.update(
- {
- "total_qty": value.get("qty"),
- "current_value": current_value,
- "price_valid_upto": valid_upto,
- "portfolio_percent": flt(current_value * 100 / total_portfolio_value, 2),
- "pledged_applicant_count": value.get("applicant_count"),
- "currency": currency,
- }
- )
-
- data.append(row)
-
- return data
-
-
-def get_company_wise_loan_security_details(filters, loan_security_details):
- pledge_values, total_value_map, applicant_type_map = get_applicant_wise_total_loan_security_qty(
- filters, loan_security_details
- )
-
- total_portfolio_value = 0
- security_wise_map = {}
- for key, qty in pledge_values.items():
- security_wise_map.setdefault(key[1], {"qty": 0.0, "applicant_count": 0.0})
-
- security_wise_map[key[1]]["qty"] += qty
- if qty:
- security_wise_map[key[1]]["applicant_count"] += 1
-
- total_portfolio_value += flt(qty * loan_security_details.get(key[1], {}).get("latest_price", 0))
-
- return security_wise_map, total_portfolio_value
diff --git a/erpnext/loan_management/report/loan_security_status/__init__.py b/erpnext/loan_management/report/loan_security_status/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/loan_management/report/loan_security_status/__init__.py
+++ /dev/null
diff --git a/erpnext/loan_management/report/loan_security_status/loan_security_status.js b/erpnext/loan_management/report/loan_security_status/loan_security_status.js
deleted file mode 100644
index 6e6191c..0000000
--- a/erpnext/loan_management/report/loan_security_status/loan_security_status.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-/* eslint-disable */
-
-frappe.query_reports["Loan Security Status"] = {
- "filters": [
- {
- "fieldname":"company",
- "label": __("Company"),
- "fieldtype": "Link",
- "options": "Company",
- "reqd": 1,
- "default": frappe.defaults.get_user_default("Company")
- },
- {
- "fieldname":"applicant_type",
- "label": __("Applicant Type"),
- "fieldtype": "Select",
- "options": ["Customer", "Employee"],
- "reqd": 1,
- "default": "Customer",
- on_change: function() {
- frappe.query_report.set_filter_value('applicant', "");
- }
- },
- {
- "fieldname": "applicant",
- "label": __("Applicant"),
- "fieldtype": "Dynamic Link",
- "get_options": function() {
- var applicant_type = frappe.query_report.get_filter_value('applicant_type');
- var applicant = frappe.query_report.get_filter_value('applicant');
- if(applicant && !applicant_type) {
- frappe.throw(__("Please select Applicant Type first"));
- }
- return applicant_type;
- }
- },
- {
- "fieldname":"pledge_status",
- "label": __("Pledge Status"),
- "fieldtype": "Select",
- "options": ["", "Requested", "Pledged", "Partially Pledged", "Unpledged"],
- },
- ]
-};
diff --git a/erpnext/loan_management/report/loan_security_status/loan_security_status.json b/erpnext/loan_management/report/loan_security_status/loan_security_status.json
deleted file mode 100644
index 9eb948d..0000000
--- a/erpnext/loan_management/report/loan_security_status/loan_security_status.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "add_total_row": 1,
- "creation": "2019-10-07 05:57:33.435705",
- "disable_prepared_report": 0,
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "idx": 0,
- "is_standard": "Yes",
- "modified": "2019-10-07 13:45:46.793949",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loan Security Status",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Loan Security",
- "report_name": "Loan Security Status",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "System Manager"
- },
- {
- "role": "Loan Manager"
- }
- ]
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/report/loan_security_status/loan_security_status.py b/erpnext/loan_management/report/loan_security_status/loan_security_status.py
deleted file mode 100644
index 9a5a180..0000000
--- a/erpnext/loan_management/report/loan_security_status/loan_security_status.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-
-import frappe
-from frappe import _
-
-
-def execute(filters=None):
- columns = get_columns(filters)
- data = get_data(filters)
- return columns, data
-
-
-def get_columns(filters):
- columns = [
- {
- "label": _("Loan Security Pledge"),
- "fieldtype": "Link",
- "fieldname": "loan_security_pledge",
- "options": "Loan Security Pledge",
- "width": 200,
- },
- {"label": _("Loan"), "fieldtype": "Link", "fieldname": "loan", "options": "Loan", "width": 200},
- {"label": _("Applicant"), "fieldtype": "Data", "fieldname": "applicant", "width": 200},
- {"label": _("Status"), "fieldtype": "Data", "fieldname": "status", "width": 100},
- {"label": _("Pledge Time"), "fieldtype": "Data", "fieldname": "pledge_time", "width": 150},
- {
- "label": _("Loan Security"),
- "fieldtype": "Link",
- "fieldname": "loan_security",
- "options": "Loan Security",
- "width": 150,
- },
- {"label": _("Quantity"), "fieldtype": "Float", "fieldname": "qty", "width": 100},
- {
- "label": _("Loan Security Price"),
- "fieldtype": "Currency",
- "fieldname": "loan_security_price",
- "options": "currency",
- "width": 200,
- },
- {
- "label": _("Loan Security Value"),
- "fieldtype": "Currency",
- "fieldname": "loan_security_value",
- "options": "currency",
- "width": 200,
- },
- {
- "label": _("Currency"),
- "fieldtype": "Link",
- "fieldname": "currency",
- "options": "Currency",
- "width": 50,
- "hidden": 1,
- },
- ]
-
- return columns
-
-
-def get_data(filters):
-
- data = []
- conditions = get_conditions(filters)
-
- loan_security_pledges = frappe.db.sql(
- """
- SELECT
- p.name, p.applicant, p.loan, p.status, p.pledge_time,
- c.loan_security, c.qty, c.loan_security_price, c.amount
- FROM
- `tabLoan Security Pledge` p, `tabPledge` c
- WHERE
- p.docstatus = 1
- AND c.parent = p.name
- AND p.company = %(company)s
- {conditions}
- """.format(
- conditions=conditions
- ),
- (filters),
- as_dict=1,
- ) # nosec
-
- default_currency = frappe.get_cached_value("Company", filters.get("company"), "default_currency")
-
- for pledge in loan_security_pledges:
- row = {}
- row["loan_security_pledge"] = pledge.name
- row["loan"] = pledge.loan
- row["applicant"] = pledge.applicant
- row["status"] = pledge.status
- row["pledge_time"] = pledge.pledge_time
- row["loan_security"] = pledge.loan_security
- row["qty"] = pledge.qty
- row["loan_security_price"] = pledge.loan_security_price
- row["loan_security_value"] = pledge.amount
- row["currency"] = default_currency
-
- data.append(row)
-
- return data
-
-
-def get_conditions(filters):
- conditions = []
-
- if filters.get("applicant"):
- conditions.append("p.applicant = %(applicant)s")
-
- if filters.get("pledge_status"):
- conditions.append(" p.status = %(pledge_status)s")
-
- return "AND {}".format(" AND ".join(conditions)) if conditions else ""
diff --git a/erpnext/loan_management/workspace/loan_management/loan_management.json b/erpnext/loan_management/workspace/loan_management/loan_management.json
deleted file mode 100644
index b08a85e..0000000
--- a/erpnext/loan_management/workspace/loan_management/loan_management.json
+++ /dev/null
@@ -1,273 +0,0 @@
-{
- "charts": [],
- "content": "[{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Your Shortcuts</b></span>\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Loan Application\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Loan\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Reports & Masters</b></span>\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Loan\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Loan Processes\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Disbursement and Repayment\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Loan Security\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}}]",
- "creation": "2020-03-12 16:35:55.299820",
- "docstatus": 0,
- "doctype": "Workspace",
- "for_user": "",
- "hide_custom": 0,
- "icon": "loan",
- "idx": 0,
- "label": "Loans",
- "links": [
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Type",
- "link_count": 0,
- "link_to": "Loan Type",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Application",
- "link_count": 0,
- "link_to": "Loan Application",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan",
- "link_count": 0,
- "link_to": "Loan",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Processes",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Process Loan Security Shortfall",
- "link_count": 0,
- "link_to": "Process Loan Security Shortfall",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Process Loan Interest Accrual",
- "link_count": 0,
- "link_to": "Process Loan Interest Accrual",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Disbursement and Repayment",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Disbursement",
- "link_count": 0,
- "link_to": "Loan Disbursement",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Repayment",
- "link_count": 0,
- "link_to": "Loan Repayment",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Write Off",
- "link_count": 0,
- "link_to": "Loan Write Off",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Interest Accrual",
- "link_count": 0,
- "link_to": "Loan Interest Accrual",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Type",
- "link_count": 0,
- "link_to": "Loan Security Type",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Price",
- "link_count": 0,
- "link_to": "Loan Security Price",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security",
- "link_count": 0,
- "link_to": "Loan Security",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Pledge",
- "link_count": 0,
- "link_to": "Loan Security Pledge",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Unpledge",
- "link_count": 0,
- "link_to": "Loan Security Unpledge",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Shortfall",
- "link_count": 0,
- "link_to": "Loan Security Shortfall",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Reports",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Repayment and Closure",
- "link_count": 0,
- "link_to": "Loan Repayment and Closure",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Security Status",
- "link_count": 0,
- "link_to": "Loan Security Status",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- }
- ],
- "modified": "2022-01-13 17:39:16.790152",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loans",
- "owner": "Administrator",
- "parent_page": "",
- "public": 1,
- "restrict_to_domain": "",
- "roles": [],
- "sequence_id": 16.0,
- "shortcuts": [
- {
- "color": "Green",
- "format": "{} Open",
- "label": "Loan Application",
- "link_to": "Loan Application",
- "stats_filter": "{ \"status\": \"Open\" }",
- "type": "DocType"
- },
- {
- "label": "Loan",
- "link_to": "Loan",
- "type": "DocType"
- },
- {
- "doc_view": "",
- "label": "Dashboard",
- "link_to": "Loan Dashboard",
- "type": "Dashboard"
- }
- ],
- "title": "Loans"
-}
\ No newline at end of file
diff --git a/erpnext/loan_management/workspace/loans/loans.json b/erpnext/loan_management/workspace/loans/loans.json
deleted file mode 100644
index c25f4d3..0000000
--- a/erpnext/loan_management/workspace/loans/loans.json
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "charts": [],
- "content": "[{\"id\":\"_38WStznya\",\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Your Shortcuts</b></span>\",\"col\":12}},{\"id\":\"t7o_K__1jB\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Loan Application\",\"col\":3}},{\"id\":\"IRiNDC6w1p\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Loan\",\"col\":3}},{\"id\":\"xbbo0FYbq0\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"id\":\"7ZL4Bro-Vi\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"yhyioTViZ3\",\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Reports & Masters</b></span>\",\"col\":12}},{\"id\":\"oYFn4b1kSw\",\"type\":\"card\",\"data\":{\"card_name\":\"Loan\",\"col\":4}},{\"id\":\"vZepJF5tl9\",\"type\":\"card\",\"data\":{\"card_name\":\"Loan Processes\",\"col\":4}},{\"id\":\"k-393Mjhqe\",\"type\":\"card\",\"data\":{\"card_name\":\"Disbursement and Repayment\",\"col\":4}},{\"id\":\"6crJ0DBiBJ\",\"type\":\"card\",\"data\":{\"card_name\":\"Loan Security\",\"col\":4}},{\"id\":\"Um5YwxVLRJ\",\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}}]",
- "creation": "2020-03-12 16:35:55.299820",
- "custom_blocks": [],
- "docstatus": 0,
- "doctype": "Workspace",
- "for_user": "",
- "hide_custom": 0,
- "icon": "loan",
- "idx": 0,
- "is_hidden": 0,
- "label": "Loans",
- "links": [
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Type",
- "link_count": 0,
- "link_to": "Loan Type",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Application",
- "link_count": 0,
- "link_to": "Loan Application",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan",
- "link_count": 0,
- "link_to": "Loan",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Processes",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Process Loan Security Shortfall",
- "link_count": 0,
- "link_to": "Process Loan Security Shortfall",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Process Loan Interest Accrual",
- "link_count": 0,
- "link_to": "Process Loan Interest Accrual",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Disbursement and Repayment",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Disbursement",
- "link_count": 0,
- "link_to": "Loan Disbursement",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Repayment",
- "link_count": 0,
- "link_to": "Loan Repayment",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Write Off",
- "link_count": 0,
- "link_to": "Loan Write Off",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Interest Accrual",
- "link_count": 0,
- "link_to": "Loan Interest Accrual",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security",
- "link_count": 0,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Type",
- "link_count": 0,
- "link_to": "Loan Security Type",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Price",
- "link_count": 0,
- "link_to": "Loan Security Price",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security",
- "link_count": 0,
- "link_to": "Loan Security",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Pledge",
- "link_count": 0,
- "link_to": "Loan Security Pledge",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Unpledge",
- "link_count": 0,
- "link_to": "Loan Security Unpledge",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 0,
- "label": "Loan Security Shortfall",
- "link_count": 0,
- "link_to": "Loan Security Shortfall",
- "link_type": "DocType",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 0,
- "label": "Reports",
- "link_count": 6,
- "onboard": 0,
- "type": "Card Break"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Repayment and Closure",
- "link_count": 0,
- "link_to": "Loan Repayment and Closure",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "dependencies": "",
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Security Status",
- "link_count": 0,
- "link_to": "Loan Security Status",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Interest Report",
- "link_count": 0,
- "link_to": "Loan Interest Report",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Security Exposure",
- "link_count": 0,
- "link_to": "Loan Security Exposure",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 1,
- "label": "Applicant-Wise Loan Security Exposure",
- "link_count": 0,
- "link_to": "Applicant-Wise Loan Security Exposure",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- },
- {
- "hidden": 0,
- "is_query_report": 1,
- "label": "Loan Security Status",
- "link_count": 0,
- "link_to": "Loan Security Status",
- "link_type": "Report",
- "onboard": 0,
- "type": "Link"
- }
- ],
- "modified": "2023-05-24 14:47:24.109945",
- "modified_by": "Administrator",
- "module": "Loan Management",
- "name": "Loans",
- "number_cards": [],
- "owner": "Administrator",
- "parent_page": "",
- "public": 1,
- "quick_lists": [],
- "restrict_to_domain": "",
- "roles": [],
- "sequence_id": 15.0,
- "shortcuts": [
- {
- "color": "Green",
- "format": "{} Open",
- "label": "Loan Application",
- "link_to": "Loan Application",
- "stats_filter": "{ \"status\": \"Open\" }",
- "type": "DocType"
- },
- {
- "label": "Loan",
- "link_to": "Loan",
- "type": "DocType"
- },
- {
- "doc_view": "",
- "label": "Dashboard",
- "link_to": "Loan Dashboard",
- "type": "Dashboard"
- }
- ],
- "title": "Loans"
-}
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.json b/erpnext/manufacturing/doctype/job_card/job_card.json
index 5d912fa..0f01704 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.json
+++ b/erpnext/manufacturing/doctype/job_card/job_card.json
@@ -9,39 +9,40 @@
"naming_series",
"work_order",
"bom_no",
+ "production_item",
+ "employee",
"column_break_4",
"posting_date",
"company",
- "production_section",
- "production_item",
- "item_name",
"for_quantity",
- "serial_and_batch_bundle",
- "serial_no",
- "column_break_12",
- "wip_warehouse",
- "quality_inspection_template",
- "quality_inspection",
- "project",
- "batch_no",
- "operation_section_section",
- "operation",
- "operation_row_number",
- "column_break_18",
- "workstation_type",
- "workstation",
- "employee",
- "section_break_21",
- "sub_operations",
- "timing_detail",
- "expected_start_date",
- "expected_end_date",
- "time_logs",
- "section_break_13",
"total_completed_qty",
"process_loss_qty",
- "column_break_15",
+ "scheduled_time_section",
+ "expected_start_date",
+ "time_required",
+ "column_break_jkir",
+ "expected_end_date",
+ "section_break_05am",
+ "scheduled_time_logs",
+ "timing_detail",
+ "time_logs",
+ "section_break_13",
+ "actual_start_date",
"total_time_in_mins",
+ "column_break_15",
+ "actual_end_date",
+ "production_section",
+ "operation",
+ "wip_warehouse",
+ "column_break_12",
+ "workstation_type",
+ "workstation",
+ "quality_inspection_section",
+ "quality_inspection_template",
+ "column_break_fcmp",
+ "quality_inspection",
+ "section_break_21",
+ "sub_operations",
"section_break_8",
"items",
"scrap_items_section",
@@ -53,18 +54,25 @@
"hour_rate",
"for_operation",
"more_information",
- "operation_id",
- "sequence_id",
+ "project",
+ "item_name",
"transferred_qty",
"requested_qty",
"status",
"column_break_20",
+ "operation_row_number",
+ "operation_id",
+ "sequence_id",
"remarks",
+ "serial_and_batch_bundle",
+ "batch_no",
+ "serial_no",
"barcode",
"job_started",
"started_time",
"current_time",
- "amended_from"
+ "amended_from",
+ "connections_tab"
],
"fields": [
{
@@ -134,7 +142,7 @@
{
"fieldname": "timing_detail",
"fieldtype": "Section Break",
- "label": "Timing Detail"
+ "label": "Actual Time"
},
{
"allow_bulk_edit": 1,
@@ -167,7 +175,7 @@
},
{
"fieldname": "section_break_8",
- "fieldtype": "Section Break",
+ "fieldtype": "Tab Break",
"label": "Raw Materials"
},
{
@@ -179,7 +187,7 @@
{
"collapsible": 1,
"fieldname": "more_information",
- "fieldtype": "Section Break",
+ "fieldtype": "Tab Break",
"label": "More Information"
},
{
@@ -264,10 +272,9 @@
"reqd": 1
},
{
- "collapsible": 1,
"fieldname": "production_section",
- "fieldtype": "Section Break",
- "label": "Production"
+ "fieldtype": "Tab Break",
+ "label": "Operation & Workstation"
},
{
"fieldname": "column_break_12",
@@ -332,18 +339,10 @@
"read_only": 1
},
{
- "fieldname": "operation_section_section",
- "fieldtype": "Section Break",
- "label": "Operation Section"
- },
- {
- "fieldname": "column_break_18",
- "fieldtype": "Column Break"
- },
- {
"fieldname": "section_break_21",
- "fieldtype": "Section Break",
- "hide_border": 1
+ "fieldtype": "Tab Break",
+ "hide_border": 1,
+ "label": "Sub Operations"
},
{
"depends_on": "is_corrective_job_card",
@@ -355,7 +354,7 @@
"collapsible": 1,
"depends_on": "is_corrective_job_card",
"fieldname": "corrective_operation_section",
- "fieldtype": "Section Break",
+ "fieldtype": "Tab Break",
"label": "Corrective Operation"
},
{
@@ -408,7 +407,7 @@
{
"collapsible": 1,
"fieldname": "scrap_items_section",
- "fieldtype": "Section Break",
+ "fieldtype": "Tab Break",
"label": "Scrap Items"
},
{
@@ -451,15 +450,68 @@
"print_hide": 1
},
{
+ "depends_on": "process_loss_qty",
"fieldname": "process_loss_qty",
"fieldtype": "Float",
"label": "Process Loss Qty",
"read_only": 1
+ },
+ {
+ "fieldname": "connections_tab",
+ "fieldtype": "Tab Break",
+ "label": "Connections",
+ "show_dashboard": 1
+ },
+ {
+ "fieldname": "scheduled_time_section",
+ "fieldtype": "Section Break",
+ "label": "Scheduled Time"
+ },
+ {
+ "fieldname": "column_break_jkir",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "time_required",
+ "fieldtype": "Float",
+ "label": "Expected Time Required (In Mins)"
+ },
+ {
+ "fieldname": "section_break_05am",
+ "fieldtype": "Section Break"
+ },
+ {
+ "fieldname": "scheduled_time_logs",
+ "fieldtype": "Table",
+ "label": "Scheduled Time Logs",
+ "options": "Job Card Scheduled Time",
+ "read_only": 1
+ },
+ {
+ "fieldname": "actual_start_date",
+ "fieldtype": "Datetime",
+ "label": "Actual Start Date",
+ "read_only": 1
+ },
+ {
+ "fieldname": "actual_end_date",
+ "fieldtype": "Datetime",
+ "label": "Actual End Date",
+ "read_only": 1
+ },
+ {
+ "fieldname": "quality_inspection_section",
+ "fieldtype": "Section Break",
+ "label": "Quality Inspection"
+ },
+ {
+ "fieldname": "column_break_fcmp",
+ "fieldtype": "Column Break"
}
],
"is_submittable": 1,
"links": [],
- "modified": "2023-06-09 12:04:55.534264",
+ "modified": "2023-06-28 19:23:14.345214",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Job Card",
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py
index 2c17568..80bdfd5 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/job_card.py
@@ -2,7 +2,7 @@
# For license information, please see license.txt
import datetime
import json
-from typing import Optional
+from collections import OrderedDict
import frappe
from frappe import _, bold
@@ -164,10 +164,40 @@
self.total_completed_qty += row.completed_qty
def get_overlap_for(self, args, check_next_available_slot=False):
- production_capacity = 1
+ time_logs = []
+ time_logs.extend(self.get_time_logs(args, "Job Card Time Log", check_next_available_slot))
+
+ time_logs.extend(self.get_time_logs(args, "Job Card Scheduled Time", check_next_available_slot))
+
+ if not time_logs:
+ return {}
+
+ time_logs = sorted(time_logs, key=lambda x: x.get("to_time"))
+
+ production_capacity = 1
+ if self.workstation:
+ production_capacity = (
+ frappe.get_cached_value("Workstation", self.workstation, "production_capacity") or 1
+ )
+
+ if args.get("employee"):
+ # override capacity for employee
+ production_capacity = 1
+
+ if time_logs and production_capacity > len(time_logs):
+ return {}
+
+ if self.workstation_type and time_logs:
+ if workstation_time := self.get_workstation_based_on_available_slot(time_logs):
+ self.workstation = workstation_time.get("workstation")
+ return workstation_time
+
+ return time_logs[-1]
+
+ def get_time_logs(self, args, doctype, check_next_available_slot=False):
jc = frappe.qb.DocType("Job Card")
- jctl = frappe.qb.DocType("Job Card Time Log")
+ jctl = frappe.qb.DocType(doctype)
time_conditions = [
((jctl.from_time < args.from_time) & (jctl.to_time > args.from_time)),
@@ -181,7 +211,7 @@
query = (
frappe.qb.from_(jctl)
.from_(jc)
- .select(jc.name.as_("name"), jctl.to_time, jc.workstation, jc.workstation_type)
+ .select(jc.name.as_("name"), jctl.from_time, jctl.to_time, jc.workstation, jc.workstation_type)
.where(
(jctl.parent == jc.name)
& (Criterion.any(time_conditions))
@@ -189,42 +219,51 @@
& (jc.name != f"{args.parent or 'No Name'}")
& (jc.docstatus < 2)
)
- .orderby(jctl.to_time, order=frappe.qb.desc)
+ .orderby(jctl.to_time)
)
if self.workstation_type:
query = query.where(jc.workstation_type == self.workstation_type)
if self.workstation:
- production_capacity = (
- frappe.get_cached_value("Workstation", self.workstation, "production_capacity") or 1
- )
query = query.where(jc.workstation == self.workstation)
- if args.get("employee"):
- # override capacity for employee
- production_capacity = 1
+ if args.get("employee") and doctype == "Job Card Time Log":
query = query.where(jctl.employee == args.get("employee"))
- existing = query.run(as_dict=True)
+ if doctype != "Job Card Time Log":
+ query = query.where(jc.total_time_in_mins == 0)
- if existing and production_capacity > len(existing):
- return
+ time_logs = query.run(as_dict=True)
- if self.workstation_type:
- if workstation := self.get_workstation_based_on_available_slot(existing):
- self.workstation = workstation
- return None
+ return time_logs
- return existing[0] if existing else None
-
- def get_workstation_based_on_available_slot(self, existing) -> Optional[str]:
+ def get_workstation_based_on_available_slot(self, existing_time_logs) -> dict:
workstations = get_workstations(self.workstation_type)
if workstations:
- busy_workstations = [row.workstation for row in existing]
- for workstation in workstations:
- if workstation not in busy_workstations:
- return workstation
+ busy_workstations = self.time_slot_wise_busy_workstations(existing_time_logs)
+ for time_slot in busy_workstations:
+ available_workstations = sorted(list(set(workstations) - set(busy_workstations[time_slot])))
+ if available_workstations:
+ return frappe._dict(
+ {
+ "workstation": available_workstations[0],
+ "planned_start_time": get_datetime(time_slot[0]),
+ "to_time": get_datetime(time_slot[1]),
+ }
+ )
+
+ return frappe._dict({})
+
+ @staticmethod
+ def time_slot_wise_busy_workstations(existing_time_logs) -> dict:
+ time_slot = OrderedDict()
+ for row in existing_time_logs:
+ from_time = get_datetime(row.from_time).strftime("%Y-%m-%d %H:%M")
+ to_time = get_datetime(row.to_time).strftime("%Y-%m-%d %H:%M")
+ time_slot.setdefault((from_time, to_time), []).append(row.workstation)
+
+ return time_slot
def schedule_time_logs(self, row):
row.remaining_time_in_mins = row.time_in_mins
@@ -237,11 +276,17 @@
def validate_overlap_for_workstation(self, args, row):
# get the last record based on the to time from the job card
data = self.get_overlap_for(args, check_next_available_slot=True)
- if data:
- if not self.workstation:
- self.workstation = data.workstation
+ if not self.workstation:
+ workstations = get_workstations(self.workstation_type)
+ if workstations:
+ # Get the first workstation
+ self.workstation = workstations[0]
- row.planned_start_time = get_datetime(data.to_time + get_mins_between_operations())
+ if data:
+ if data.get("planned_start_time"):
+ row.planned_start_time = get_datetime(data.planned_start_time)
+ else:
+ row.planned_start_time = get_datetime(data.to_time + get_mins_between_operations())
def check_workstation_time(self, row):
workstation_doc = frappe.get_cached_doc("Workstation", self.workstation)
@@ -410,7 +455,7 @@
def update_time_logs(self, row):
self.append(
- "time_logs",
+ "scheduled_time_logs",
{
"from_time": row.planned_start_time,
"to_time": row.planned_end_time,
@@ -452,6 +497,7 @@
)
def before_save(self):
+ self.set_expected_and_actual_time()
self.set_process_loss()
def on_submit(self):
@@ -510,6 +556,32 @@
)
)
+ def set_expected_and_actual_time(self):
+ for child_table, start_field, end_field, time_required in [
+ ("scheduled_time_logs", "expected_start_date", "expected_end_date", "time_required"),
+ ("time_logs", "actual_start_date", "actual_end_date", "total_time_in_mins"),
+ ]:
+ if not self.get(child_table):
+ continue
+
+ time_list = []
+ time_in_mins = 0.0
+ for row in self.get(child_table):
+ time_in_mins += flt(row.get("time_in_mins"))
+ for field in ["from_time", "to_time"]:
+ if row.get(field):
+ time_list.append(get_datetime(row.get(field)))
+
+ if time_list:
+ self.set(start_field, min(time_list))
+ if end_field == "actual_end_date" and not self.time_logs[-1].to_time:
+ self.set(end_field, "")
+ return
+
+ self.set(end_field, max(time_list))
+
+ self.set(time_required, time_in_mins)
+
def set_process_loss(self):
precision = self.precision("total_completed_qty")
diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py
index e7fbcda..bde0548 100644
--- a/erpnext/manufacturing/doctype/job_card/test_job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py
@@ -541,6 +541,16 @@
)[0].name
jc = frappe.get_doc("Job Card", first_job_card)
+ for row in jc.scheduled_time_logs:
+ jc.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
+
jc.time_logs[0].completed_qty = 8
jc.save()
jc.submit()
@@ -557,11 +567,30 @@
)[0].name
jc2 = frappe.get_doc("Job Card", second_job_card)
+ for row in jc2.scheduled_time_logs:
+ jc2.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
jc2.time_logs[0].completed_qty = 10
self.assertRaises(frappe.ValidationError, jc2.save)
jc2.load_from_db()
+ for row in jc2.scheduled_time_logs:
+ jc2.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
+
jc2.time_logs[0].completed_qty = 8
jc2.save()
jc2.submit()
diff --git a/erpnext/loan_management/dashboard_chart_source/__init__.py b/erpnext/manufacturing/doctype/job_card_scheduled_time/__init__.py
similarity index 100%
rename from erpnext/loan_management/dashboard_chart_source/__init__.py
rename to erpnext/manufacturing/doctype/job_card_scheduled_time/__init__.py
diff --git a/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.json b/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.json
new file mode 100644
index 0000000..522cfa3
--- /dev/null
+++ b/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.json
@@ -0,0 +1,45 @@
+{
+ "actions": [],
+ "allow_rename": 1,
+ "creation": "2023-06-14 15:23:54.673262",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "from_time",
+ "to_time",
+ "time_in_mins"
+ ],
+ "fields": [
+ {
+ "fieldname": "from_time",
+ "fieldtype": "Datetime",
+ "in_list_view": 1,
+ "label": "From Time"
+ },
+ {
+ "fieldname": "to_time",
+ "fieldtype": "Datetime",
+ "in_list_view": 1,
+ "label": "To Time"
+ },
+ {
+ "fieldname": "time_in_mins",
+ "fieldtype": "Float",
+ "in_list_view": 1,
+ "label": "Time (In Mins)"
+ }
+ ],
+ "index_web_pages_for_search": 1,
+ "istable": 1,
+ "links": [],
+ "modified": "2023-06-14 15:27:03.203045",
+ "modified_by": "Administrator",
+ "module": "Manufacturing",
+ "name": "Job Card Scheduled Time",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "states": []
+}
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.py b/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.py
new file mode 100644
index 0000000..e50b153
--- /dev/null
+++ b/erpnext/manufacturing/doctype/job_card_scheduled_time/job_card_scheduled_time.py
@@ -0,0 +1,9 @@
+# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+# import frappe
+from frappe.model.document import Document
+
+
+class JobCardScheduledTime(Document):
+ pass
diff --git a/erpnext/manufacturing/doctype/routing/test_routing.py b/erpnext/manufacturing/doctype/routing/test_routing.py
index a37ff28..e069aea 100644
--- a/erpnext/manufacturing/doctype/routing/test_routing.py
+++ b/erpnext/manufacturing/doctype/routing/test_routing.py
@@ -38,6 +38,16 @@
"Job Card", filters={"work_order": wo_doc.name}, order_by="sequence_id desc"
):
job_card_doc = frappe.get_doc("Job Card", data.name)
+ for row in job_card_doc.scheduled_time_logs:
+ job_card_doc.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
+
job_card_doc.time_logs[0].completed_qty = 10
if job_card_doc.sequence_id != 1:
self.assertRaises(OperationSequenceError, job_card_doc.save)
diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py
index 690fe47..c828c87 100644
--- a/erpnext/manufacturing/doctype/work_order/test_work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py
@@ -487,6 +487,16 @@
for i, job_card in enumerate(job_cards):
doc = frappe.get_doc("Job Card", job_card)
+ for row in doc.scheduled_time_logs:
+ doc.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
+
doc.time_logs[0].completed_qty = 1
doc.submit()
@@ -957,7 +967,7 @@
item=item, company=company, planned_start_date=add_days(now(), 60), qty=20, skip_transfer=1
)
job_card = frappe.db.get_value("Job Card", {"work_order": wo_order.name}, "name")
- update_job_card(job_card, 10)
+ update_job_card(job_card, 10, 1)
stock_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 10))
for row in stock_entry.items:
@@ -975,7 +985,7 @@
make_job_card(wo_order.name, operations)
job_card = frappe.db.get_value("Job Card", {"work_order": wo_order.name, "docstatus": 0}, "name")
- update_job_card(job_card, 10)
+ update_job_card(job_card, 10, 2)
stock_entry = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 10))
for row in stock_entry.items:
@@ -1671,9 +1681,32 @@
)
job_card = frappe.db.get_value("Job Card", {"work_order": wo_order.name}, "name")
job_card_doc = frappe.get_doc("Job Card", job_card)
+ for row in job_card_doc.scheduled_time_logs:
+ job_card_doc.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ "completed_qty": 20,
+ },
+ )
+
+ job_card_doc.save()
# Make another Job Card for the same Work Order
job_card2 = frappe.copy_doc(job_card_doc)
+ job_card2.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "time_in_mins": row.time_in_mins,
+ },
+ )
+
+ job_card2.time_logs[0].completed_qty = 20
+
self.assertRaises(frappe.ValidationError, job_card2.save)
frappe.db.set_single_value(
@@ -1841,7 +1874,7 @@
make_bom(item=item.name, source_warehouse="Stores - _TC", raw_materials=[sn_batch_item_doc.name])
-def update_job_card(job_card, jc_qty=None):
+def update_job_card(job_card, jc_qty=None, days=None):
employee = frappe.db.get_value("Employee", {"status": "Active"}, "name")
job_card_doc = frappe.get_doc("Job Card", job_card)
job_card_doc.set(
@@ -1855,15 +1888,32 @@
if jc_qty:
job_card_doc.for_quantity = jc_qty
- job_card_doc.append(
- "time_logs",
- {
- "from_time": now(),
- "employee": employee,
- "time_in_mins": 60,
- "completed_qty": job_card_doc.for_quantity,
- },
- )
+ for row in job_card_doc.scheduled_time_logs:
+ job_card_doc.append(
+ "time_logs",
+ {
+ "from_time": row.from_time,
+ "to_time": row.to_time,
+ "employee": employee,
+ "time_in_mins": 60,
+ "completed_qty": 0.0,
+ },
+ )
+
+ if not job_card_doc.time_logs and days:
+ planned_start_time = add_days(now(), days=days)
+ job_card_doc.append(
+ "time_logs",
+ {
+ "from_time": planned_start_time,
+ "to_time": add_to_date(planned_start_time, minutes=60),
+ "employee": employee,
+ "time_in_mins": 60,
+ "completed_qty": 0.0,
+ },
+ )
+
+ job_card_doc.time_logs[0].completed_qty = job_card_doc.for_quantity
job_card_doc.submit()
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index bfdcf61..79b1e79 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -519,8 +519,8 @@
)
if enable_capacity_planning and job_card_doc:
- row.planned_start_time = job_card_doc.time_logs[-1].from_time
- row.planned_end_time = job_card_doc.time_logs[-1].to_time
+ row.planned_start_time = job_card_doc.scheduled_time_logs[-1].from_time
+ row.planned_end_time = job_card_doc.scheduled_time_logs[-1].to_time
if date_diff(row.planned_start_time, original_start_time) > plan_days:
frappe.message_log.pop()
diff --git a/erpnext/manufacturing/doctype/workstation_type/workstation_type.py b/erpnext/manufacturing/doctype/workstation_type/workstation_type.py
index 348f4f8..8c1e230 100644
--- a/erpnext/manufacturing/doctype/workstation_type/workstation_type.py
+++ b/erpnext/manufacturing/doctype/workstation_type/workstation_type.py
@@ -20,6 +20,8 @@
def get_workstations(workstation_type):
- workstations = frappe.get_all("Workstation", filters={"workstation_type": workstation_type})
+ workstations = frappe.get_all(
+ "Workstation", filters={"workstation_type": workstation_type}, order_by="creation"
+ )
return [workstation.name for workstation in workstations]
diff --git a/erpnext/modules.txt b/erpnext/modules.txt
index af96297..dcb4212 100644
--- a/erpnext/modules.txt
+++ b/erpnext/modules.txt
@@ -15,7 +15,6 @@
ERPNext Integrations
Quality Management
Communication
-Loan Management
Telephony
Bulk Transaction
E-commerce
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index fe6346e..dc05663 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -105,7 +105,6 @@
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart')
execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field')
erpnext.patches.v12_0.remove_bank_remittance_custom_fields
-execute:frappe.delete_doc_if_exists("Report", "Loan Repayment")
erpnext.patches.v12_0.move_credit_limit_to_customer_credit_limit
erpnext.patches.v12_0.add_variant_of_in_item_attribute_table
erpnext.patches.v12_0.rename_bank_account_field_in_journal_entry_account
@@ -145,7 +144,6 @@
execute:frappe.rename_doc("Desk Page", "Getting Started", "Home", force=True)
erpnext.patches.v12_0.unset_customer_supplier_based_on_type_of_item_price
erpnext.patches.v12_0.set_valid_till_date_in_supplier_quotation
-erpnext.patches.v13_0.update_old_loans
erpnext.patches.v12_0.set_serial_no_status #2020-05-21
erpnext.patches.v12_0.update_price_list_currency_in_bom
execute:frappe.reload_doctype('Dashboard')
@@ -154,7 +152,6 @@
erpnext.patches.v13_0.update_actual_start_and_end_date_in_wo
erpnext.patches.v12_0.update_bom_in_so_mr
execute:frappe.delete_doc("Report", "Department Analytics")
-execute:frappe.rename_doc("Desk Page", "Loan Management", "Loan", force=True)
erpnext.patches.v12_0.update_uom_conversion_factor
erpnext.patches.v13_0.replace_pos_page_with_point_of_sale_page
erpnext.patches.v13_0.delete_old_purchase_reports
@@ -187,7 +184,6 @@
erpnext.patches.v13_0.update_pos_closing_entry_in_merge_log
erpnext.patches.v13_0.add_po_to_global_search
erpnext.patches.v13_0.update_returned_qty_in_pr_dn
-execute:frappe.rename_doc("Workspace", "Loan", "Loan Management", ignore_if_exists=True, force=True)
erpnext.patches.v13_0.create_uae_pos_invoice_fields
erpnext.patches.v13_0.update_project_template_tasks
erpnext.patches.v13_0.convert_qi_parameter_to_link_field
@@ -204,7 +200,6 @@
erpnext.patches.v13_0.update_shipment_status
erpnext.patches.v13_0.remove_attribute_field_from_item_variant_setting
erpnext.patches.v13_0.set_pos_closing_as_failed
-execute:frappe.rename_doc("Workspace", "Loan Management", "Loans", force=True)
erpnext.patches.v13_0.update_timesheet_changes
erpnext.patches.v13_0.add_doctype_to_sla #14-06-2021
erpnext.patches.v13_0.bill_for_rejected_quantity_in_purchase_invoice
@@ -266,6 +261,7 @@
erpnext.patches.v14_0.update_reference_due_date_in_journal_entry
erpnext.patches.v15_0.saudi_depreciation_warning
erpnext.patches.v15_0.delete_saudi_doctypes
+erpnext.patches.v14_0.show_loan_management_deprecation_warning
[post_model_sync]
execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings')
@@ -282,16 +278,13 @@
erpnext.patches.v14_0.migrate_cost_center_allocations
erpnext.patches.v13_0.convert_to_website_item_in_item_card_group_template
erpnext.patches.v13_0.shopping_cart_to_ecommerce
-erpnext.patches.v13_0.update_disbursement_account
erpnext.patches.v13_0.update_reserved_qty_closed_wo
erpnext.patches.v13_0.update_exchange_rate_settings
erpnext.patches.v14_0.delete_amazon_mws_doctype
erpnext.patches.v13_0.set_work_order_qty_in_so_from_mr
-erpnext.patches.v13_0.update_accounts_in_loan_docs
erpnext.patches.v13_0.item_reposting_for_incorrect_sl_and_gl
erpnext.patches.v14_0.update_batch_valuation_flag
erpnext.patches.v14_0.delete_non_profit_doctypes
-erpnext.patches.v13_0.add_cost_center_in_loans
erpnext.patches.v13_0.set_return_against_in_pos_invoice_references
erpnext.patches.v13_0.remove_unknown_links_to_prod_plan_items # 24-03-2022
erpnext.patches.v13_0.copy_custom_field_filters_to_website_item
@@ -311,7 +304,6 @@
erpnext.patches.v14_0.fix_crm_no_of_employees
erpnext.patches.v14_0.create_accounting_dimensions_in_subcontracting_doctypes
erpnext.patches.v14_0.fix_subcontracting_receipt_gl_entries
-erpnext.patches.v13_0.update_schedule_type_in_loans
erpnext.patches.v13_0.drop_unused_sle_index_parts
erpnext.patches.v14_0.create_accounting_dimensions_for_asset_capitalization
erpnext.patches.v14_0.update_partial_tds_fields
@@ -339,5 +331,6 @@
execute:frappe.delete_doc('DocType', 'Cash Flow Mapping Template', ignore_missing=True)
execute:frappe.delete_doc('DocType', 'Cash Flow Mapping Accounts', ignore_missing=True)
erpnext.patches.v14_0.cleanup_workspaces
+erpnext.patches.v15_0.remove_loan_management_module
erpnext.patches.v14_0.set_report_in_process_SOA
-erpnext.buying.doctype.supplier.patches.migrate_supplier_portal_users
+erpnext.buying.doctype.supplier.patches.migrate_supplier_portal_users
\ No newline at end of file
diff --git a/erpnext/patches/v13_0/add_cost_center_in_loans.py b/erpnext/patches/v13_0/add_cost_center_in_loans.py
deleted file mode 100644
index e293cf2..0000000
--- a/erpnext/patches/v13_0/add_cost_center_in_loans.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import frappe
-
-
-def execute():
- frappe.reload_doc("loan_management", "doctype", "loan")
- loan = frappe.qb.DocType("Loan")
-
- for company in frappe.get_all("Company", pluck="name"):
- default_cost_center = frappe.db.get_value("Company", company, "cost_center")
- frappe.qb.update(loan).set(loan.cost_center, default_cost_center).where(
- loan.company == company
- ).run()
diff --git a/erpnext/patches/v13_0/update_accounts_in_loan_docs.py b/erpnext/patches/v13_0/update_accounts_in_loan_docs.py
deleted file mode 100644
index bf98e9e..0000000
--- a/erpnext/patches/v13_0/update_accounts_in_loan_docs.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import frappe
-
-
-def execute():
- ld = frappe.qb.DocType("Loan Disbursement").as_("ld")
- lr = frappe.qb.DocType("Loan Repayment").as_("lr")
- loan = frappe.qb.DocType("Loan")
-
- frappe.qb.update(ld).inner_join(loan).on(loan.name == ld.against_loan).set(
- ld.disbursement_account, loan.disbursement_account
- ).set(ld.loan_account, loan.loan_account).where(ld.docstatus < 2).run()
-
- frappe.qb.update(lr).inner_join(loan).on(loan.name == lr.against_loan).set(
- lr.payment_account, loan.payment_account
- ).set(lr.loan_account, loan.loan_account).set(
- lr.penalty_income_account, loan.penalty_income_account
- ).where(
- lr.docstatus < 2
- ).run()
diff --git a/erpnext/patches/v13_0/update_disbursement_account.py b/erpnext/patches/v13_0/update_disbursement_account.py
deleted file mode 100644
index d6aba47..0000000
--- a/erpnext/patches/v13_0/update_disbursement_account.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import frappe
-
-
-def execute():
-
- frappe.reload_doc("loan_management", "doctype", "loan_type")
- frappe.reload_doc("loan_management", "doctype", "loan")
-
- loan_type = frappe.qb.DocType("Loan Type")
- loan = frappe.qb.DocType("Loan")
-
- frappe.qb.update(loan_type).set(loan_type.disbursement_account, loan_type.payment_account).run()
-
- frappe.qb.update(loan).set(loan.disbursement_account, loan.payment_account).run()
diff --git a/erpnext/patches/v13_0/update_old_loans.py b/erpnext/patches/v13_0/update_old_loans.py
deleted file mode 100644
index 0bd3fcd..0000000
--- a/erpnext/patches/v13_0/update_old_loans.py
+++ /dev/null
@@ -1,200 +0,0 @@
-import frappe
-from frappe import _
-from frappe.model.naming import make_autoname
-from frappe.utils import flt, nowdate
-
-from erpnext.accounts.doctype.account.test_account import create_account
-from erpnext.loan_management.doctype.loan_repayment.loan_repayment import (
- get_accrued_interest_entries,
-)
-from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
- process_loan_interest_accrual_for_term_loans,
-)
-
-
-def execute():
-
- # Create a penalty account for loan types
-
- frappe.reload_doc("loan_management", "doctype", "loan_type")
- frappe.reload_doc("loan_management", "doctype", "loan")
- frappe.reload_doc("loan_management", "doctype", "repayment_schedule")
- frappe.reload_doc("loan_management", "doctype", "process_loan_interest_accrual")
- frappe.reload_doc("loan_management", "doctype", "loan_repayment")
- frappe.reload_doc("loan_management", "doctype", "loan_repayment_detail")
- frappe.reload_doc("loan_management", "doctype", "loan_interest_accrual")
- frappe.reload_doc("accounts", "doctype", "gl_entry")
- frappe.reload_doc("accounts", "doctype", "journal_entry_account")
-
- updated_loan_types = []
- loans_to_close = []
-
- # Update old loan status as closed
- if frappe.db.has_column("Repayment Schedule", "paid"):
- loans_list = frappe.db.sql(
- """SELECT distinct parent from `tabRepayment Schedule`
- where paid = 0 and docstatus = 1""",
- as_dict=1,
- )
-
- loans_to_close = [d.parent for d in loans_list]
-
- if loans_to_close:
- frappe.db.sql(
- "UPDATE `tabLoan` set status = 'Closed' where name not in (%s)"
- % (", ".join(["%s"] * len(loans_to_close))),
- tuple(loans_to_close),
- )
-
- loans = frappe.get_all(
- "Loan",
- fields=[
- "name",
- "loan_type",
- "company",
- "status",
- "mode_of_payment",
- "applicant_type",
- "applicant",
- "loan_account",
- "payment_account",
- "interest_income_account",
- ],
- filters={"docstatus": 1, "status": ("!=", "Closed")},
- )
-
- for loan in loans:
- # Update details in Loan Types and Loan
- loan_type_company = frappe.db.get_value("Loan Type", loan.loan_type, "company")
- loan_type = loan.loan_type
-
- group_income_account = frappe.get_value(
- "Account",
- {
- "company": loan.company,
- "is_group": 1,
- "root_type": "Income",
- "account_name": _("Indirect Income"),
- },
- )
-
- if not group_income_account:
- group_income_account = frappe.get_value(
- "Account", {"company": loan.company, "is_group": 1, "root_type": "Income"}
- )
-
- penalty_account = create_account(
- company=loan.company,
- account_type="Income Account",
- account_name="Penalty Account",
- parent_account=group_income_account,
- )
-
- # Same loan type used for multiple companies
- if loan_type_company and loan_type_company != loan.company:
- # get loan type for appropriate company
- loan_type_name = frappe.get_value(
- "Loan Type",
- {
- "company": loan.company,
- "mode_of_payment": loan.mode_of_payment,
- "loan_account": loan.loan_account,
- "payment_account": loan.payment_account,
- "disbursement_account": loan.payment_account,
- "interest_income_account": loan.interest_income_account,
- "penalty_income_account": loan.penalty_income_account,
- },
- "name",
- )
-
- if not loan_type_name:
- loan_type_name = create_loan_type(loan, loan_type_name, penalty_account)
-
- # update loan type in loan
- frappe.db.sql(
- "UPDATE `tabLoan` set loan_type = %s where name = %s", (loan_type_name, loan.name)
- )
-
- loan_type = loan_type_name
- if loan_type_name not in updated_loan_types:
- updated_loan_types.append(loan_type_name)
-
- elif not loan_type_company:
- loan_type_doc = frappe.get_doc("Loan Type", loan.loan_type)
- loan_type_doc.is_term_loan = 1
- loan_type_doc.company = loan.company
- loan_type_doc.mode_of_payment = loan.mode_of_payment
- loan_type_doc.payment_account = loan.payment_account
- loan_type_doc.loan_account = loan.loan_account
- loan_type_doc.interest_income_account = loan.interest_income_account
- loan_type_doc.penalty_income_account = penalty_account
- loan_type_doc.submit()
- updated_loan_types.append(loan.loan_type)
- loan_type = loan.loan_type
-
- if loan_type in updated_loan_types:
- if loan.status == "Fully Disbursed":
- status = "Disbursed"
- elif loan.status == "Repaid/Closed":
- status = "Closed"
- else:
- status = loan.status
-
- frappe.db.set_value(
- "Loan",
- loan.name,
- {"is_term_loan": 1, "penalty_income_account": penalty_account, "status": status},
- )
-
- process_loan_interest_accrual_for_term_loans(
- posting_date=nowdate(), loan_type=loan_type, loan=loan.name
- )
-
- if frappe.db.has_column("Repayment Schedule", "paid"):
- total_principal, total_interest = frappe.db.get_value(
- "Repayment Schedule",
- {"paid": 1, "parent": loan.name},
- ["sum(principal_amount) as total_principal", "sum(interest_amount) as total_interest"],
- )
-
- accrued_entries = get_accrued_interest_entries(loan.name)
- for entry in accrued_entries:
- interest_paid = 0
- principal_paid = 0
-
- if flt(total_interest) > flt(entry.interest_amount):
- interest_paid = flt(entry.interest_amount)
- else:
- interest_paid = flt(total_interest)
-
- if flt(total_principal) > flt(entry.payable_principal_amount):
- principal_paid = flt(entry.payable_principal_amount)
- else:
- principal_paid = flt(total_principal)
-
- frappe.db.sql(
- """ UPDATE `tabLoan Interest Accrual`
- SET paid_principal_amount = `paid_principal_amount` + %s,
- paid_interest_amount = `paid_interest_amount` + %s
- WHERE name = %s""",
- (principal_paid, interest_paid, entry.name),
- )
-
- total_principal = flt(total_principal) - principal_paid
- total_interest = flt(total_interest) - interest_paid
-
-
-def create_loan_type(loan, loan_type_name, penalty_account):
- loan_type_doc = frappe.new_doc("Loan Type")
- loan_type_doc.loan_name = make_autoname("Loan Type-.####")
- loan_type_doc.is_term_loan = 1
- loan_type_doc.company = loan.company
- loan_type_doc.mode_of_payment = loan.mode_of_payment
- loan_type_doc.payment_account = loan.payment_account
- loan_type_doc.disbursement_account = loan.payment_account
- loan_type_doc.loan_account = loan.loan_account
- loan_type_doc.interest_income_account = loan.interest_income_account
- loan_type_doc.penalty_income_account = penalty_account
- loan_type_doc.submit()
-
- return loan_type_doc.name
diff --git a/erpnext/patches/v13_0/update_schedule_type_in_loans.py b/erpnext/patches/v13_0/update_schedule_type_in_loans.py
deleted file mode 100644
index e5b5f64..0000000
--- a/erpnext/patches/v13_0/update_schedule_type_in_loans.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import frappe
-
-
-def execute():
- loan = frappe.qb.DocType("Loan")
- loan_type = frappe.qb.DocType("Loan Type")
-
- frappe.qb.update(loan_type).set(
- loan_type.repayment_schedule_type, "Monthly as per repayment start date"
- ).where(loan_type.is_term_loan == 1).run()
-
- frappe.qb.update(loan).set(
- loan.repayment_schedule_type, "Monthly as per repayment start date"
- ).where(loan.is_term_loan == 1).run()
diff --git a/erpnext/patches/v14_0/show_loan_management_deprecation_warning.py b/erpnext/patches/v14_0/show_loan_management_deprecation_warning.py
new file mode 100644
index 0000000..af87c0f
--- /dev/null
+++ b/erpnext/patches/v14_0/show_loan_management_deprecation_warning.py
@@ -0,0 +1,16 @@
+import click
+import frappe
+
+
+def execute():
+ if "lending" in frappe.get_installed_apps():
+ return
+
+ click.secho(
+ "Loan Management module has been moved to a separate app"
+ " and will be removed from ERPNext in Version 15."
+ " Please install the Lending app when upgrading to Version 15"
+ " to continue using the Loan Management module:\n"
+ "https://github.com/frappe/lending",
+ fg="yellow",
+ )
diff --git a/erpnext/patches/v15_0/remove_loan_management_module.py b/erpnext/patches/v15_0/remove_loan_management_module.py
new file mode 100644
index 0000000..6f08c36
--- /dev/null
+++ b/erpnext/patches/v15_0/remove_loan_management_module.py
@@ -0,0 +1,48 @@
+import frappe
+
+
+def execute():
+ if "lending" in frappe.get_installed_apps():
+ return
+
+ frappe.delete_doc("Module Def", "Loan Management", ignore_missing=True, force=True)
+
+ frappe.delete_doc("Workspace", "Loan Management", ignore_missing=True, force=True)
+
+ print_formats = frappe.get_all(
+ "Print Format", {"module": "Loan Management", "standard": "Yes"}, pluck="name"
+ )
+ for print_format in print_formats:
+ frappe.delete_doc("Print Format", print_format, ignore_missing=True, force=True)
+
+ reports = frappe.get_all(
+ "Report", {"module": "Loan Management", "is_standard": "Yes"}, pluck="name"
+ )
+ for report in reports:
+ frappe.delete_doc("Report", report, ignore_missing=True, force=True)
+
+ doctypes = frappe.get_all("DocType", {"module": "Loan Management", "custom": 0}, pluck="name")
+ for doctype in doctypes:
+ frappe.delete_doc("DocType", doctype, ignore_missing=True, force=True)
+
+ notifications = frappe.get_all(
+ "Notification", {"module": "Loan Management", "is_standard": 1}, pluck="name"
+ )
+ for notifcation in notifications:
+ frappe.delete_doc("Notification", notifcation, ignore_missing=True, force=True)
+
+ for dt in ["Web Form", "Dashboard", "Dashboard Chart", "Number Card"]:
+ records = frappe.get_all(dt, {"module": "Loan Management", "is_standard": 1}, pluck="name")
+ for record in records:
+ frappe.delete_doc(dt, record, ignore_missing=True, force=True)
+
+ custom_fields = {
+ "Loan": ["repay_from_salary"],
+ "Loan Repayment": ["repay_from_salary", "payroll_payable_account"],
+ }
+
+ for doc, fields in custom_fields.items():
+ filters = {"dt": doc, "fieldname": ["in", fields]}
+ records = frappe.get_all("Custom Field", filters=filters, pluck="name")
+ for record in records:
+ frappe.delete_doc("Custom Field", record, ignore_missing=True, force=True)
diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
index 57bb71e..2776a74 100644
--- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
+++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
@@ -1312,7 +1312,10 @@
batch_ledger.warehouse,
Sum(batch_ledger.qty).as_("qty"),
)
- .where(((batch_table.expiry_date >= today()) | (batch_table.expiry_date.isnull())))
+ .where(
+ (batch_table.disabled == 0)
+ & ((batch_table.expiry_date >= today()) | (batch_table.expiry_date.isnull()))
+ )
.where(stock_ledger_entry.is_cancelled == 0)
.groupby(batch_ledger.batch_no, batch_ledger.warehouse)
)
diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py
index 3919733..0b14d4d 100644
--- a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py
+++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py
@@ -163,9 +163,10 @@
elif self.per_received > 0 and self.per_received < 100:
status = "Partially Received"
for item in self.supplied_items:
- if item.returned_qty:
- status = "Closed"
+ if not item.returned_qty or (item.supplied_qty - item.consumed_qty - item.returned_qty) > 0:
break
+ else:
+ status = "Closed"
else:
total_required_qty = total_supplied_qty = 0
for item in self.supplied_items:
diff --git a/erpnext/tests/utils.py b/erpnext/tests/utils.py
index 159ce70..b553a7c 100644
--- a/erpnext/tests/utils.py
+++ b/erpnext/tests/utils.py
@@ -94,3 +94,25 @@
except Exception:
print(f"Report failed to execute with filters: {test_filter}")
raise
+
+
+def if_lending_app_installed(function):
+ """Decorator to check if lending app is installed"""
+
+ def wrapper(*args, **kwargs):
+ if "lending" in frappe.get_installed_apps():
+ return function(*args, **kwargs)
+ return
+
+ return wrapper
+
+
+def if_lending_app_not_installed(function):
+ """Decorator to check if lending app is not installed"""
+
+ def wrapper(*args, **kwargs):
+ if "lending" not in frappe.get_installed_apps():
+ return function(*args, **kwargs)
+ return
+
+ return wrapper
diff --git a/erpnext/translations/af.csv b/erpnext/translations/af.csv
index bbfcd23..68f8cce 100644
--- a/erpnext/translations/af.csv
+++ b/erpnext/translations/af.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Van toepassing as die onderneming SpA, SApA of SRL is",
Applicable if the company is a limited liability company,Van toepassing indien die maatskappy 'n maatskappy met beperkte aanspreeklikheid is,
Applicable if the company is an Individual or a Proprietorship,Van toepassing indien die onderneming 'n individu of 'n eiendomsreg is,
-Applicant,aansoeker,
-Applicant Type,Aansoeker Tipe,
Application of Funds (Assets),Toepassing van fondse (bates),
Application period cannot be across two allocation records,Aansoekperiode kan nie oor twee toekenningsrekords wees nie,
Application period cannot be outside leave allocation period,Aansoek tydperk kan nie buite verlof toekenning tydperk,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Lys van beskikbare Aandeelhouers met folio nommers,
Loading Payment System,Laai betaalstelsel,
Loan,lening,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Lening Bedrag kan nie Maksimum Lening Bedrag van {0},
-Loan Application,Leningsaansoek,
-Loan Management,Leningbestuur,
-Loan Repayment,Lening Terugbetaling,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Die begindatum van die lening en die leningstydperk is verpligtend om die faktuurdiskontering te bespaar,
Loans (Liabilities),Lenings (laste),
Loans and Advances (Assets),Lenings en voorskotte (bates),
@@ -1611,7 +1605,6 @@
Monday,Maandag,
Monthly,maandelikse,
Monthly Distribution,Maandelikse Verspreiding,
-Monthly Repayment Amount cannot be greater than Loan Amount,Maandelikse Terugbetalingsbedrag kan nie groter wees as Leningbedrag nie,
More,meer,
More Information,Meer inligting,
More than one selection for {0} not allowed,Meer as een keuse vir {0} word nie toegelaat nie,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Betaal {0} {1},
Payable,betaalbaar,
Payable Account,Betaalbare rekening,
-Payable Amount,Betaalbare bedrag,
Payment,betaling,
Payment Cancelled. Please check your GoCardless Account for more details,Betaling gekanselleer. Gaan asseblief jou GoCardless rekening vir meer besonderhede,
Payment Confirmation,Bevestiging van betaling,
-Payment Date,Betaaldatum,
Payment Days,Betalingsdae,
Payment Document,Betalingsdokument,
Payment Due Date,Betaaldatum,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Voer asseblief eers Aankoop Ontvangst in,
Please enter Receipt Document,Vul asseblief die kwitansie dokument in,
Please enter Reference date,Voer asseblief Verwysingsdatum in,
-Please enter Repayment Periods,Voer asseblief terugbetalingsperiodes in,
Please enter Reqd by Date,Voer asseblief Reqd by Date in,
Please enter Woocommerce Server URL,Voer asseblief die Woocommerce-bediener-URL in,
Please enter Write Off Account,Voer asseblief 'Skryf 'n rekening in,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Voer asseblief ouer koste sentrum in,
Please enter quantity for Item {0},Gee asseblief die hoeveelheid vir item {0},
Please enter relieving date.,Vul asseblief die verlig datum in.,
-Please enter repayment Amount,Voer asseblief terugbetalingsbedrag in,
Please enter valid Financial Year Start and End Dates,Voer asseblief geldige finansiële jaar se begin- en einddatums in,
Please enter valid email address,Voer asseblief 'n geldige e-posadres in,
Please enter {0} first,Voer asseblief eers {0} in,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Prysreëls word verder gefiltreer op grond van hoeveelheid.,
Primary Address Details,Primêre adresbesonderhede,
Primary Contact Details,Primêre kontakbesonderhede,
-Principal Amount,Hoofbedrag,
Print Format,Drukformaat,
Print IRS 1099 Forms,Druk IRS 1099-vorms uit,
Print Report Card,Druk verslagkaart,
@@ -2550,7 +2538,6 @@
Sample Collection,Voorbeeld versameling,
Sample quantity {0} cannot be more than received quantity {1},Voorbeeldhoeveelheid {0} kan nie meer wees as die hoeveelheid ontvang nie {1},
Sanctioned,beboet,
-Sanctioned Amount,Beperkte bedrag,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Gekonfekteerde bedrag kan nie groter wees as eisbedrag in ry {0} nie.,
Sand,sand,
Saturday,Saterdag,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} het reeds 'n ouerprosedure {1}.,
API,API,
Annual,jaarlikse,
-Approved,goedgekeur,
Change,verandering,
Contact Email,Kontak e-pos,
Export Type,Uitvoer Tipe,
@@ -3571,7 +3557,6 @@
Account Value,Rekeningwaarde,
Account is mandatory to get payment entries,Rekeninge is verpligtend om betalingsinskrywings te kry,
Account is not set for the dashboard chart {0},Die rekening is nie opgestel vir die paneelkaart {0},
-Account {0} does not belong to company {1},Rekening {0} behoort nie aan die maatskappy {1},
Account {0} does not exists in the dashboard chart {1},Rekening {0} bestaan nie in die paneelkaart {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Rekening: <b>{0}</b> is kapitaal Werk aan die gang en kan nie deur die joernaalinskrywing bygewerk word nie,
Account: {0} is not permitted under Payment Entry,Rekening: {0} is nie toegelaat onder betalingstoelae nie,
@@ -3582,7 +3567,6 @@
Activity,aktiwiteit,
Add / Manage Email Accounts.,Voeg / Bestuur e-pos rekeninge.,
Add Child,Voeg kind by,
-Add Loan Security,Voeg leningsekuriteit by,
Add Multiple,Voeg meerdere by,
Add Participants,Voeg Deelnemers by,
Add to Featured Item,Voeg by die voorgestelde artikel,
@@ -3593,15 +3577,12 @@
Address Line 1,Adres Lyn 1,
Addresses,adresse,
Admission End Date should be greater than Admission Start Date.,Einddatum vir toelating moet groter wees as die aanvangsdatum vir toelating.,
-Against Loan,Teen lening,
-Against Loan:,Teen lening:,
All,Almal,
All bank transactions have been created,Alle banktransaksies is geskep,
All the depreciations has been booked,Al die waardevermindering is bespreek,
Allocation Expired!,Toekenning verval!,
Allow Resetting Service Level Agreement from Support Settings.,Laat die diensvlakooreenkoms weer instel van ondersteuninginstellings.,
Amount of {0} is required for Loan closure,Bedrag van {0} is nodig vir leningsluiting,
-Amount paid cannot be zero,Bedrag betaal kan nie nul wees nie,
Applied Coupon Code,Toegepaste koeponkode,
Apply Coupon Code,Pas koeponkode toe,
Appointment Booking,Aanstellings bespreking,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Kan nie die aankomstyd bereken nie, aangesien die adres van die bestuurder ontbreek.",
Cannot Optimize Route as Driver Address is Missing.,"Kan nie die roete optimaliseer nie, aangesien die bestuurder se adres ontbreek.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Kan nie taak {0} voltooi nie, want die afhanklike taak {1} is nie saamgevoeg / gekanselleer nie.",
-Cannot create loan until application is approved,Kan nie 'n lening maak totdat die aansoek goedgekeur is nie,
Cannot find a matching Item. Please select some other value for {0}.,Kan nie 'n ooreenstemmende item vind nie. Kies asseblief 'n ander waarde vir {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Kan nie meer as {2} oor item {0} in ry {1} oorkoop nie. Om oorfakturering toe te laat, stel asseblief toelae in rekeninginstellings",
"Capacity Planning Error, planned start time can not be same as end time","Kapasiteitsbeplanningsfout, beplande begintyd kan nie dieselfde wees as eindtyd nie",
@@ -3812,20 +3792,9 @@
Less Than Amount,Minder as die bedrag,
Liabilities,laste,
Loading...,Laai ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Leningsbedrag oorskry die maksimum leningsbedrag van {0} volgens voorgestelde sekuriteite,
Loan Applications from customers and employees.,Leningsaansoeke van kliënte en werknemers.,
-Loan Disbursement,Leninguitbetaling,
Loan Processes,Leningsprosesse,
-Loan Security,Leningsekuriteit,
-Loan Security Pledge,Veiligheidsbelofte vir lenings,
-Loan Security Pledge Created : {0},Veiligheidsbelofte vir lenings geskep: {0},
-Loan Security Price,Leningsprys,
-Loan Security Price overlapping with {0},Lening-sekuriteitsprys wat met {0} oorvleuel,
-Loan Security Unpledge,Uitleen van sekuriteitslenings,
-Loan Security Value,Leningsekuriteitswaarde,
Loan Type for interest and penalty rates,Tipe lening vir rente en boetes,
-Loan amount cannot be greater than {0},Leningsbedrag kan nie groter wees as {0},
-Loan is mandatory,Lening is verpligtend,
Loans,lenings,
Loans provided to customers and employees.,Lenings aan kliënte en werknemers.,
Location,plek,
@@ -3894,7 +3863,6 @@
Pay,betaal,
Payment Document Type,Betaaldokumenttipe,
Payment Name,Betaalnaam,
-Penalty Amount,Strafbedrag,
Pending,hangende,
Performance,Optrede,
Period based On,Tydperk gebaseer op,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Meld asseblief aan as 'n Marketplace-gebruiker om hierdie artikel te wysig.,
Please login as a Marketplace User to report this item.,Meld u as 'n Marketplace-gebruiker aan om hierdie item te rapporteer.,
Please select <b>Template Type</b> to download template,Kies <b>Sjabloontipe</b> om die sjabloon af te laai,
-Please select Applicant Type first,Kies eers die aansoeker tipe,
Please select Customer first,Kies eers kliënt,
Please select Item Code first,Kies eers die itemkode,
-Please select Loan Type for company {0},Kies leningstipe vir maatskappy {0},
Please select a Delivery Note,Kies 'n afleweringsnota,
Please select a Sales Person for item: {0},Kies 'n verkoopspersoon vir item: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Kies asseblief 'n ander betaalmetode. Stripe ondersteun nie transaksies in valuta '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Stel asseblief 'n standaardbankrekening vir maatskappy {0} op,
Please specify,Spesifiseer asseblief,
Please specify a {0},Spesifiseer asseblief 'n {0},lead
-Pledge Status,Belofte status,
-Pledge Time,Beloftetyd,
Printing,druk,
Priority,prioriteit,
Priority has been changed to {0}.,Prioriteit is verander na {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Verwerk XML-lêers,
Profitability,winsgewendheid,
Project,projek,
-Proposed Pledges are mandatory for secured Loans,Voorgestelde pandjies is verpligtend vir versekerde lenings,
Provide the academic year and set the starting and ending date.,Voorsien die akademiese jaar en stel die begin- en einddatum vas.,
Public token is missing for this bank,Daar is 'n openbare teken vir hierdie bank ontbreek,
Publish,publiseer,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,Die aankoopbewys het geen item waarvoor die behoudmonster geaktiveer is nie.,
Purchase Return,Koop opgawe,
Qty of Finished Goods Item,Aantal eindprodukte,
-Qty or Amount is mandatroy for loan security,Aantal of Bedrag is verpligtend vir leningsekuriteit,
Quality Inspection required for Item {0} to submit,Kwaliteitinspeksie benodig vir indiening van item {0},
Quantity to Manufacture,Hoeveelheid te vervaardig,
Quantity to Manufacture can not be zero for the operation {0},Hoeveelheid te vervaardig kan nie nul wees vir die bewerking {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Verligtingsdatum moet groter wees as of gelyk wees aan die Datum van aansluiting,
Rename,hernoem,
Rename Not Allowed,Hernoem nie toegelaat nie,
-Repayment Method is mandatory for term loans,Terugbetalingsmetode is verpligtend vir termynlenings,
-Repayment Start Date is mandatory for term loans,Aanvangsdatum vir terugbetaling is verpligtend vir termynlenings,
Report Item,Rapporteer item,
Report this Item,Rapporteer hierdie item,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Gereserveerde hoeveelheid vir subkontrakte: hoeveelheid grondstowwe om onderaangekoopte items te maak.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Ry ({0}): {1} is alreeds afslag op {2},
Rows Added in {0},Rye bygevoeg in {0},
Rows Removed in {0},Rye is verwyder in {0},
-Sanctioned Amount limit crossed for {0} {1},Die goedgekeurde hoeveelheid limiete is gekruis vir {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Bestaande leningsbedrag bestaan reeds vir {0} teen maatskappy {1},
Save,Save,
Save Item,Stoor item,
Saved Items,Gestoorde items,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Gebruiker {0} is gedeaktiveer,
Users and Permissions,Gebruikers en toestemmings,
Vacancies cannot be lower than the current openings,Vakatures kan nie laer wees as die huidige openings nie,
-Valid From Time must be lesser than Valid Upto Time.,Geldig vanaf tyd moet kleiner wees as geldig tot tyd.,
Valuation Rate required for Item {0} at row {1},Waardasietempo benodig vir item {0} op ry {1},
Values Out Of Sync,Waardes buite sinchronisasie,
Vehicle Type is required if Mode of Transport is Road,Die voertuigtipe word benodig as die manier van vervoer op pad is,
@@ -4211,7 +4168,6 @@
Add to Cart,Voeg by die winkelwagen,
Days Since Last Order,Dae sedert die laaste bestelling,
In Stock,Op voorraad,
-Loan Amount is mandatory,Leningsbedrag is verpligtend,
Mode Of Payment,Betaalmetode,
No students Found,Geen studente gevind nie,
Not in Stock,Nie in voorraad nie,
@@ -4240,7 +4196,6 @@
Group by,Groep By,
In stock,In voorraad,
Item name,Item naam,
-Loan amount is mandatory,Leningsbedrag is verpligtend,
Minimum Qty,Minimum Aantal,
More details,Meer besonderhede,
Nature of Supplies,Aard van voorrade,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Totale voltooide hoeveelheid,
Qty to Manufacture,Hoeveelheid om te vervaardig,
Repay From Salary can be selected only for term loans,Terugbetaling uit salaris kan slegs vir termynlenings gekies word,
-No valid Loan Security Price found for {0},Geen geldige sekuriteitsprys vir lenings gevind vir {0},
-Loan Account and Payment Account cannot be same,Leningrekening en betaalrekening kan nie dieselfde wees nie,
-Loan Security Pledge can only be created for secured loans,Leningversekeringsbelofte kan slegs vir veilige lenings aangegaan word,
Social Media Campaigns,Sosiale media-veldtogte,
From Date can not be greater than To Date,Vanaf datum kan nie groter wees as tot op datum nie,
Please set a Customer linked to the Patient,Stel 'n kliënt in wat aan die pasiënt gekoppel is,
@@ -6437,7 +6389,6 @@
HR User,HR gebruiker,
Appointment Letter,Aanstellingsbrief,
Job Applicant,Werksaansoeker,
-Applicant Name,Aansoeker Naam,
Appointment Date,Aanstellingsdatum,
Appointment Letter Template,Aanstellingsbriefsjabloon,
Body,liggaam,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sinkroniseer in voortsetting,
Hub Seller Name,Hub Verkoper Naam,
Custom Data,Aangepaste data,
-Member,lid,
-Partially Disbursed,Gedeeltelik uitbetaal,
-Loan Closure Requested,Leningsluiting gevra,
Repay From Salary,Terugbetaal van Salaris,
-Loan Details,Leningsbesonderhede,
-Loan Type,Lening Tipe,
-Loan Amount,Leningsbedrag,
-Is Secured Loan,Is versekerde lening,
-Rate of Interest (%) / Year,Rentekoers (%) / Jaar,
-Disbursement Date,Uitbetalingsdatum,
-Disbursed Amount,Uitbetaalde bedrag,
-Is Term Loan,Is termynlening,
-Repayment Method,Terugbetaling Metode,
-Repay Fixed Amount per Period,Herstel vaste bedrag per Periode,
-Repay Over Number of Periods,Terugbetaling oor aantal periodes,
-Repayment Period in Months,Terugbetalingsperiode in maande,
-Monthly Repayment Amount,Maandelikse Terugbetalingsbedrag,
-Repayment Start Date,Terugbetaling Begin Datum,
-Loan Security Details,Leningsekuriteitsbesonderhede,
-Maximum Loan Value,Maksimum leningswaarde,
-Account Info,Rekeninginligting,
-Loan Account,Leningsrekening,
-Interest Income Account,Rente Inkomsterekening,
-Penalty Income Account,Boete-inkomsterekening,
-Repayment Schedule,Terugbetalingskedule,
-Total Payable Amount,Totale betaalbare bedrag,
-Total Principal Paid,Totale hoofbetaal,
-Total Interest Payable,Totale rente betaalbaar,
-Total Amount Paid,Totale bedrag betaal,
-Loan Manager,Leningsbestuurder,
-Loan Info,Leningsinligting,
-Rate of Interest,Rentekoers,
-Proposed Pledges,Voorgestelde beloftes,
-Maximum Loan Amount,Maksimum leningsbedrag,
-Repayment Info,Terugbetalingsinligting,
-Total Payable Interest,Totale betaalbare rente,
-Against Loan ,Teen lening,
-Loan Interest Accrual,Toeval van lenings,
-Amounts,bedrae,
-Pending Principal Amount,Hangende hoofbedrag,
-Payable Principal Amount,Hoofbedrag betaalbaar,
-Paid Principal Amount,Betaalde hoofbedrag,
-Paid Interest Amount,Betaalde rente bedrag,
-Process Loan Interest Accrual,Verwerking van lening rente,
-Repayment Schedule Name,Terugbetalingskedule Naam,
Regular Payment,Gereelde betaling,
Loan Closure,Leningsluiting,
-Payment Details,Betaling besonderhede,
-Interest Payable,Rente betaalbaar,
-Amount Paid,Bedrag betaal,
-Principal Amount Paid,Hoofbedrag betaal,
-Repayment Details,Terugbetalingsbesonderhede,
-Loan Repayment Detail,Terugbetaling van lening,
-Loan Security Name,Leningsekuriteitsnaam,
-Unit Of Measure,Maateenheid,
-Loan Security Code,Leningsekuriteitskode,
-Loan Security Type,Tipe lenings,
-Haircut %,Haarknip%,
-Loan Details,Leningsbesonderhede,
-Unpledged,Unpledged,
-Pledged,belowe,
-Partially Pledged,Gedeeltelik belowe,
-Securities,sekuriteite,
-Total Security Value,Totale sekuriteitswaarde,
-Loan Security Shortfall,Tekort aan leningsekuriteit,
-Loan ,lening,
-Shortfall Time,Tekort tyd,
-America/New_York,Amerika / New_York,
-Shortfall Amount,Tekortbedrag,
-Security Value ,Sekuriteitswaarde,
-Process Loan Security Shortfall,Verwerk leningsekuriteit,
-Loan To Value Ratio,Lening tot Waardeverhouding,
-Unpledge Time,Unpedge-tyd,
-Loan Name,Lening Naam,
Rate of Interest (%) Yearly,Rentekoers (%) Jaarliks,
-Penalty Interest Rate (%) Per Day,Boete rentekoers (%) per dag,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Boete word op 'n daaglikse basis op die hangende rentebedrag gehef in geval van uitgestelde terugbetaling,
-Grace Period in Days,Genade tydperk in dae,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Aantal dae vanaf die vervaldatum totdat die boete nie gehef sal word in geval van vertraging in die terugbetaling van die lening nie,
-Pledge,belofte,
-Post Haircut Amount,Bedrag na kapsel,
-Process Type,Proses tipe,
-Update Time,Opdateringstyd,
-Proposed Pledge,Voorgestelde belofte,
-Total Payment,Totale betaling,
-Balance Loan Amount,Saldo Lening Bedrag,
-Is Accrued,Opgeloop,
Salary Slip Loan,Salaris Slip Lening,
Loan Repayment Entry,Terugbetaling van lenings,
-Sanctioned Loan Amount,Goedgekeurde leningsbedrag,
-Sanctioned Amount Limit,Sanktiewe Bedraglimiet,
-Unpledge,Unpledge,
-Haircut,haarsny,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Genereer skedule,
Schedules,skedules,
@@ -7885,7 +7749,6 @@
Update Series,Update Series,
Change the starting / current sequence number of an existing series.,Verander die begin- / huidige volgordenommer van 'n bestaande reeks.,
Prefix,voorvoegsel,
-Current Value,Huidige waarde,
This is the number of the last created transaction with this prefix,Dit is die nommer van die laaste geskep transaksie met hierdie voorvoegsel,
Update Series Number,Werk reeksnommer,
Quotation Lost Reason,Kwotasie Verlore Rede,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Recommended Reorder Level,
Lead Details,Loodbesonderhede,
Lead Owner Efficiency,Leier Eienaar Efficiency,
-Loan Repayment and Closure,Terugbetaling en sluiting van lenings,
-Loan Security Status,Leningsekuriteitstatus,
Lost Opportunity,Geleë geleentheid verloor,
Maintenance Schedules,Onderhoudskedules,
Material Requests for which Supplier Quotations are not created,Materiële Versoeke waarvoor Verskaffer Kwotasies nie geskep word nie,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Getal getel: {0},
Payment Account is mandatory,Betaalrekening is verpligtend,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","As dit gekontroleer word, sal die volle bedrag van die belasbare inkomste afgetrek word voordat inkomstebelasting bereken word sonder enige verklaring of bewys.",
-Disbursement Details,Uitbetalingsbesonderhede,
Material Request Warehouse,Materiaalversoekpakhuis,
Select warehouse for material requests,Kies pakhuis vir materiaalversoeke,
Transfer Materials For Warehouse {0},Oordragmateriaal vir pakhuis {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Betaal onopgeëiste bedrag terug van die salaris,
Deduction from salary,Aftrekking van salaris,
Expired Leaves,Verlore blare,
-Reference No,Verwysingsnommer,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Kapselpersentasie is die persentasieverskil tussen die markwaarde van die Leningsekuriteit en die waarde wat aan die Leningsekuriteit toegeskryf word wanneer dit as waarborg vir daardie lening gebruik word.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,Lening-tot-waarde-verhouding druk die verhouding tussen die leningsbedrag en die waarde van die verpande sekuriteit uit. 'N Tekort aan leningsekuriteit sal veroorsaak word as dit onder die gespesifiseerde waarde vir 'n lening val,
If this is not checked the loan by default will be considered as a Demand Loan,"As dit nie gekontroleer word nie, sal die lening by verstek as 'n vraaglening beskou word",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Hierdie rekening word gebruik om lenings van die lener terug te betaal en ook om lenings aan die lener uit te betaal,
This account is capital account which is used to allocate capital for loan disbursal account ,Hierdie rekening is 'n kapitaalrekening wat gebruik word om kapitaal toe te ken vir die uitbetaling van lenings,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Handeling {0} behoort nie tot die werkbestelling nie {1},
Print UOM after Quantity,Druk UOM na hoeveelheid uit,
Set default {0} account for perpetual inventory for non stock items,Stel die standaard {0} -rekening vir permanente voorraad vir nie-voorraaditems,
-Loan Security {0} added multiple times,Leningsekuriteit {0} is verskeie kere bygevoeg,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Leningsekuriteite met verskillende LTV-verhoudings kan nie teen een lening verpand word nie,
-Qty or Amount is mandatory for loan security!,Aantal of bedrag is verpligtend vir leningsekuriteit!,
-Only submittted unpledge requests can be approved,Slegs ingediende onversekeringsversoeke kan goedgekeur word,
-Interest Amount or Principal Amount is mandatory,Rentebedrag of hoofbedrag is verpligtend,
-Disbursed Amount cannot be greater than {0},Uitbetaalde bedrag mag nie groter as {0} wees nie,
-Row {0}: Loan Security {1} added multiple times,Ry {0}: Leningsekuriteit {1} is verskeie kere bygevoeg,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Ry # {0}: Kinditem mag nie 'n produkbundel wees nie. Verwyder asseblief item {1} en stoor,
Credit limit reached for customer {0},Kredietlimiet vir kliënt {0} bereik,
Could not auto create Customer due to the following missing mandatory field(s):,Kon nie kliënt outomaties skep nie weens die volgende ontbrekende verpligte veld (e):,
diff --git a/erpnext/translations/am.csv b/erpnext/translations/am.csv
index a57f0aa..a9db089 100644
--- a/erpnext/translations/am.csv
+++ b/erpnext/translations/am.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL",ኩባንያው ስፓ ፣ ኤስ.ኤስ.ኤ ወይም ኤስ.ኤ.አር. ከሆነ የሚመለከተው,
Applicable if the company is a limited liability company,ኩባንያው ውስን የኃላፊነት ኩባንያ ከሆነ ተፈጻሚ ይሆናል ፡፡,
Applicable if the company is an Individual or a Proprietorship,ኩባንያው የግለሰባዊ ወይም የግል ባለቤት ከሆነ የሚመለከተው።,
-Applicant,አመልካች,
-Applicant Type,የአመልካች ዓይነት,
Application of Funds (Assets),ፈንድ (ንብረት) ውስጥ ማመልከቻ,
Application period cannot be across two allocation records,የመመዝገቢያ ጊዜ በሁለት የምደባ መዛግብት ውስጥ ሊገኝ አይችልም,
Application period cannot be outside leave allocation period,የማመልከቻው ወቅት ውጪ ፈቃድ አመዳደብ ጊዜ ሊሆን አይችልም,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,ሊገኙ የሚችሉ አክሲዮኖችን ዝርዝር በ folio ቁጥሮች,
Loading Payment System,የክፍያ ስርዓት በመጫን ላይ,
Loan,ብድር,
-Loan Amount cannot exceed Maximum Loan Amount of {0},የብድር መጠን ከፍተኛ የብድር መጠን መብለጥ አይችልም {0},
-Loan Application,የብድር ማመልከቻ,
-Loan Management,የብድር አስተዳደር,
-Loan Repayment,ብድር ብድር መክፈል,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,የብድር የመጀመሪያ ቀን እና የብድር ወቅት የክፍያ መጠየቂያ ቅነሳን ለማዳን ግዴታ ናቸው።,
Loans (Liabilities),ብድር (ተጠያቂነቶች),
Loans and Advances (Assets),ብድር እና እድገት (እሴቶች),
@@ -1611,7 +1605,6 @@
Monday,ሰኞ,
Monthly,ወርሃዊ,
Monthly Distribution,ወርሃዊ ስርጭት,
-Monthly Repayment Amount cannot be greater than Loan Amount,ወርሃዊ የሚያየን መጠን ብድር መጠን በላይ ሊሆን አይችልም,
More,ይበልጥ,
More Information,ተጨማሪ መረጃ,
More than one selection for {0} not allowed,ከአንድ በላይ ምርጫ ለ {0} አይፈቀድም።,
@@ -1884,11 +1877,9 @@
Pay {0} {1},ይክፈሉ {0} {1},
Payable,ትርፍ የሚያስገኝ,
Payable Account,የሚከፈለው መለያ,
-Payable Amount,የሚከፈል መጠን,
Payment,ክፍያ,
Payment Cancelled. Please check your GoCardless Account for more details,ክፍያ ተሰርዟል. ለተጨማሪ ዝርዝሮች እባክዎ የ GoCardless መለያዎን ይመልከቱ,
Payment Confirmation,የክፍያ ማረጋገጫ,
-Payment Date,የክፍያ ቀን,
Payment Days,የክፍያ ቀኖች,
Payment Document,የክፍያ ሰነድ,
Payment Due Date,ክፍያ መጠናቀቅ ያለበት ቀን,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,በመጀመሪያ የግዢ ደረሰኝ ያስገቡ,
Please enter Receipt Document,ደረሰኝ ሰነድ ያስገቡ,
Please enter Reference date,የማጣቀሻ ቀን ያስገቡ,
-Please enter Repayment Periods,የሚያየን ክፍለ ጊዜዎች ያስገቡ,
Please enter Reqd by Date,እባክዎ በቀን Reqd ያስገባሉ,
Please enter Woocommerce Server URL,እባክዎ የ Woocommerce አገልጋይ ዩ አር ኤል ያስገቡ,
Please enter Write Off Account,መለያ ጠፍቷል ይጻፉ ያስገቡ,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,ወላጅ የወጪ ማዕከል ያስገቡ,
Please enter quantity for Item {0},ንጥል ለ ብዛት ያስገቡ {0},
Please enter relieving date.,ቀን ማስታገሻ ያስገቡ.,
-Please enter repayment Amount,ብድር መክፈል መጠን ያስገቡ,
Please enter valid Financial Year Start and End Dates,ልክ የፋይናንስ ዓመት የመጀመሪያ እና መጨረሻ ቀኖች ያስገቡ,
Please enter valid email address,ልክ የሆነ የኢሜይል አድራሻ ያስገቡ,
Please enter {0} first,በመጀመሪያ {0} ያስገቡ,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,የዋጋ ደንቦች ተጨማሪ በብዛት ላይ ተመስርተው ይጣራሉ.,
Primary Address Details,ዋና አድራሻዎች ዝርዝሮች,
Primary Contact Details,ዋና እውቂያ ዝርዝሮች,
-Principal Amount,ዋና ዋና መጠን,
Print Format,አትም ቅርጸት,
Print IRS 1099 Forms,IRS 1099 ቅጾችን ያትሙ ፡፡,
Print Report Card,የህትመት ሪፖርት ካርድ,
@@ -2550,7 +2538,6 @@
Sample Collection,የናሙና ስብስብ,
Sample quantity {0} cannot be more than received quantity {1},የናሙና መጠን {0} ከተላከ በላይ መሆን አይሆንም {1},
Sanctioned,ማዕቀብ,
-Sanctioned Amount,ማዕቀብ መጠን,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,ማዕቀብ መጠን ረድፍ ውስጥ የይገባኛል ጥያቄ መጠን መብለጥ አይችልም {0}.,
Sand,አሸዋ,
Saturday,ቅዳሜ,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} ቀድሞውኑ የወላጅ አሰራር ሂደት አለው {1}።,
API,ኤ ፒ አይ,
Annual,ዓመታዊ,
-Approved,ጸድቋል,
Change,ለዉጥ,
Contact Email,የዕውቂያ ኢሜይል,
Export Type,ወደ ውጪ ላክ,
@@ -3571,7 +3557,6 @@
Account Value,የመለያ ዋጋ,
Account is mandatory to get payment entries,የክፍያ ግቤቶችን ለማግኘት መለያ ግዴታ ነው,
Account is not set for the dashboard chart {0},መለያ ለዳሽቦርድ ገበታ {0} አልተዘጋጀም,
-Account {0} does not belong to company {1},መለያ {0} ኩባንያ የእርሱ ወገን አይደለም {1},
Account {0} does not exists in the dashboard chart {1},መለያ {0} በዳሽቦርዱ ገበታ ላይ አይገኝም {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,መለያ <b>{0}</b> በሂደት ላይ ያለ የካፒታል ስራ ነው እናም በጆርናል ግቤት ሊዘመን አይችልም።,
Account: {0} is not permitted under Payment Entry,መለያ {0} በክፍያ መግቢያ ስር አይፈቀድም።,
@@ -3582,7 +3567,6 @@
Activity,ሥራ,
Add / Manage Email Accounts.,የኢሜይል መለያዎችን ያቀናብሩ / ያክሉ.,
Add Child,የልጅ አክል,
-Add Loan Security,የብድር ደህንነት ያክሉ,
Add Multiple,በርካታ ያክሉ,
Add Participants,ተሳታፊዎችን ያክሉ,
Add to Featured Item,ወደ ተለይቶ የቀረበ ንጥል ያክሉ።,
@@ -3593,15 +3577,12 @@
Address Line 1,አድራሻ መስመር 1,
Addresses,አድራሻዎች,
Admission End Date should be greater than Admission Start Date.,የመግቢያ ማለቂያ ቀን ከማስታወቂያ መጀመሪያ ቀን የበለጠ መሆን አለበት።,
-Against Loan,በብድር ላይ,
-Against Loan:,በብድር ላይ:,
All,ሁሉም,
All bank transactions have been created,ሁሉም የባንክ ግብይቶች ተፈጥረዋል።,
All the depreciations has been booked,ሁሉም ዋጋዎች ቀጠሮ ተይዘዋል።,
Allocation Expired!,ምደባው ጊዜው አብቅቷል!,
Allow Resetting Service Level Agreement from Support Settings.,ከድጋፍ ቅንጅቶች እንደገና ማስጀመር የአገልግሎት ደረጃ ስምምነትን ይፍቀዱ።,
Amount of {0} is required for Loan closure,የብድር መዘጋት የ {0} መጠን ያስፈልጋል,
-Amount paid cannot be zero,የተከፈለበት መጠን ዜሮ ሊሆን አይችልም,
Applied Coupon Code,የተተገበረ የኩፖን ኮድ,
Apply Coupon Code,የኩፖን ኮድ ይተግብሩ,
Appointment Booking,የቀጠሮ ቦታ ማስያዝ,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,የአሽከርካሪው አድራሻ የጠፋ እንደመሆኑ የመድረሻ ሰዓቱን ማስላት አይቻልም።,
Cannot Optimize Route as Driver Address is Missing.,የአሽከርካሪ አድራሻ የጎደለው ስለሆነ መንገድን ማመቻቸት አይቻልም ፡፡,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,ተግባሩን ማጠናቀቅ አልተቻለም {0} እንደ ጥገኛ ተግባሩ {1} አልተጠናቀቀም / ተሰር .ል።,
-Cannot create loan until application is approved,ትግበራ እስኪፀድቅ ድረስ ብድር መፍጠር አይቻልም,
Cannot find a matching Item. Please select some other value for {0}.,አንድ ተዛማጅ ንጥል ማግኘት አልተቻለም. ለ {0} ሌላ ዋጋ ይምረጡ.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",በንጥል {0} በተከታታይ {1} ከ {2} በላይ መብለጥ አይቻልም። ከመጠን በላይ ክፍያ መጠየቅን ለመፍቀድ እባክዎ በመለያዎች ቅንብሮች ውስጥ አበል ያዘጋጁ,
"Capacity Planning Error, planned start time can not be same as end time",የአቅም ዕቅድ ስህተት ፣ የታቀደ የመጀመሪያ ጊዜ ልክ እንደ መጨረሻ ጊዜ ተመሳሳይ ሊሆን አይችልም,
@@ -3812,20 +3792,9 @@
Less Than Amount,ከዕድሜ በታች,
Liabilities,ግዴታዎች,
Loading...,በመጫን ላይ ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,የብድር መጠን ከታቀዱት ዋስትናዎች አንጻር ከሚፈቀደው ከፍተኛ የብድር መጠን ከ {0} ይበልጣል,
Loan Applications from customers and employees.,የብድር ማመልከቻዎች ከደንበኞች እና ከሠራተኞች ፡፡,
-Loan Disbursement,የብድር ክፍያ,
Loan Processes,የብድር ሂደቶች,
-Loan Security,የብድር ደህንነት,
-Loan Security Pledge,የብድር ዋስትና ቃል,
-Loan Security Pledge Created : {0},የብድር ዋስትና ቃል ተፈጥረዋል: {0},
-Loan Security Price,የብድር ደህንነት ዋጋ,
-Loan Security Price overlapping with {0},የብድር ደህንነት ዋጋ ከ {0} ጋር መደራረብ,
-Loan Security Unpledge,የብድር ደህንነት ማራገፊያ,
-Loan Security Value,የብድር ደህንነት እሴት,
Loan Type for interest and penalty rates,የብድር አይነት ለወለድ እና ለቅጣት ተመኖች,
-Loan amount cannot be greater than {0},የብድር መጠን ከ {0} መብለጥ አይችልም,
-Loan is mandatory,ብድር ግዴታ ነው,
Loans,ብድሮች,
Loans provided to customers and employees.,ለደንበኞች እና ለሠራተኞች የሚሰጡ ብድሮች ፡፡,
Location,አካባቢ,
@@ -3894,7 +3863,6 @@
Pay,ይክፈሉ,
Payment Document Type,የክፍያ ሰነድ ዓይነት።,
Payment Name,የክፍያ ስም,
-Penalty Amount,የቅጣት መጠን,
Pending,በመጠባበቅ ላይ,
Performance,አፈፃፀም ፡፡,
Period based On,በ ላይ የተመሠረተ ጊዜ።,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,ይህንን ንጥል ለማርትዕ እባክዎ እንደ የገቢያ ቦታ ተጠቃሚ ይግቡ ፡፡,
Please login as a Marketplace User to report this item.,ይህንን ንጥል ሪፖርት ለማድረግ እባክዎ እንደ የገቢያ ቦታ ተጠቃሚ ይግቡ ፡፡,
Please select <b>Template Type</b> to download template,አብነት ለማውረድ እባክዎ <b>የአብነት አይነት</b> ይምረጡ,
-Please select Applicant Type first,እባክዎ መጀመሪያ የአመልካች ዓይነት ይምረጡ,
Please select Customer first,እባክዎ መጀመሪያ ደንበኛውን ይምረጡ።,
Please select Item Code first,እባክዎን የእቃ ኮዱን በመጀመሪያ ይምረጡ,
-Please select Loan Type for company {0},እባክዎን ለድርጅት የብድር አይነት ይምረጡ {0},
Please select a Delivery Note,እባክዎን የማስረከቢያ ማስታወሻ ይምረጡ ፡፡,
Please select a Sales Person for item: {0},እባክዎ ለንጥል የሽያጭ ሰው ይምረጡ {{}},
Please select another payment method. Stripe does not support transactions in currency '{0}',ሌላ የክፍያ ስልት ይምረጡ. ግርፋት «{0}» ምንዛሬ ግብይቶችን አይደግፍም,
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},እባክዎ ለኩባንያ ነባሪ የባንክ ሂሳብ ያቀናብሩ {0},
Please specify,እባክዎን ይግለጹ,
Please specify a {0},ይጥቀሱ እባክዎ {0},lead
-Pledge Status,የዋስትና ሁኔታ,
-Pledge Time,የዋስትና ጊዜ,
Printing,ማተም,
Priority,ቅድሚያ,
Priority has been changed to {0}.,ቅድሚያ የተሰጠው ወደ {0} ተለው hasል።,
@@ -3944,7 +3908,6 @@
Processing XML Files,XML ፋይሎችን በመስራት ላይ,
Profitability,ትርፋማነት።,
Project,ፕሮጀክት,
-Proposed Pledges are mandatory for secured Loans,የታቀደው ቃል ኪዳኖች አስተማማኝ ዋስትና ላላቸው ብድሮች አስገዳጅ ናቸው,
Provide the academic year and set the starting and ending date.,የትምህርት ዓመቱን ያቅርቡ እና የመጀመሪያ እና የመጨረሻ ቀን ያዘጋጁ።,
Public token is missing for this bank,ለዚህ ባንክ ይፋዊ ምልክት የለም,
Publish,አትም,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,የግ Rece ደረሰኝ Retain Sample የሚነቃበት ምንም ንጥል የለውም።,
Purchase Return,የግዢ ተመለስ,
Qty of Finished Goods Item,የተጠናቀቁ ዕቃዎች ንጥል ነገር።,
-Qty or Amount is mandatroy for loan security,ጫን ወይም መጠን ለድርድር ብድር ዋስትና ግዴታ ነው,
Quality Inspection required for Item {0} to submit,ለማቅረብ ንጥል (0 0) የጥራት ምርመራ ያስፈልጋል {0} ፡፡,
Quantity to Manufacture,ብዛት ወደ አምራች,
Quantity to Manufacture can not be zero for the operation {0},ለምርት ለማምረት ብዛቱ ዜሮ መሆን አይችልም {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,የመልሶ ማግኛ ቀን ከተቀላቀለበት ቀን የሚበልጥ ወይም እኩል መሆን አለበት,
Rename,ዳግም ሰይም,
Rename Not Allowed,ዳግም መሰየም አልተፈቀደም።,
-Repayment Method is mandatory for term loans,የመክፈያ ዘዴ ለጊዜ ብድሮች አስገዳጅ ነው,
-Repayment Start Date is mandatory for term loans,የመክፈያ መጀመሪያ ቀን ለአበዳሪ ብድሮች አስገዳጅ ነው,
Report Item,ንጥል ሪፖርት ያድርጉ ፡፡,
Report this Item,ይህንን ንጥል ሪፖርት ያድርጉ,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,የተያዙ ዕቃዎች ለንዑስ-ኮንትራክተር-የተዋረዱ እቃዎችን ለመስራት ጥሬ ዕቃዎች ብዛት።,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},ረድፍ ({0}): {1} በ {2} ውስጥ ቀድሞውኑ ቅናሽ ተደርጓል,
Rows Added in {0},ረድፎች በ {0} ውስጥ ታክለዋል,
Rows Removed in {0},በ {0} ረድፎች ተወግደዋል,
-Sanctioned Amount limit crossed for {0} {1},ለ {0} {1} የታገደ የገንዘብ መጠን ተገድቧል,
-Sanctioned Loan Amount already exists for {0} against company {1},የተጣራ የብድር መጠን ቀድሞውኑ ከድርጅት {1} ጋር {0},
Save,አስቀምጥ,
Save Item,ንጥል አስቀምጥ።,
Saved Items,የተቀመጡ ዕቃዎች,
@@ -4135,7 +4093,6 @@
User {0} is disabled,አባል {0} ተሰናክሏል,
Users and Permissions,ተጠቃሚዎች እና ፈቃዶች,
Vacancies cannot be lower than the current openings,ክፍት ቦታዎች ከአሁኑ ክፍት ቦታዎች በታች መሆን አይችሉም ፡፡,
-Valid From Time must be lesser than Valid Upto Time.,ከጊዜ ጊዜ ልክ የሆነ ከሚተገበር የቶቶ ሰዓት ያነሰ መሆን አለበት።,
Valuation Rate required for Item {0} at row {1},በእቃው {0} ረድፍ {1} ላይ የዋጋ ዋጋ ይፈለጋል,
Values Out Of Sync,ዋጋዎች ከማመሳሰል ውጭ,
Vehicle Type is required if Mode of Transport is Road,የመጓጓዣ ሁኔታ መንገድ ከሆነ የተሽከርካሪ ዓይነት ያስፈልጋል።,
@@ -4211,7 +4168,6 @@
Add to Cart,ወደ ግዢው ቅርጫት ጨምር,
Days Since Last Order,ከመጨረሻው ትእዛዝ ጀምሮ ቀናት,
In Stock,ለሽያጭ የቀረበ እቃ,
-Loan Amount is mandatory,የብድር መጠን አስገዳጅ ነው,
Mode Of Payment,የክፍያ ዘዴ,
No students Found,ምንም ተማሪዎች አልተገኙም,
Not in Stock,አይደለም የክምችት ውስጥ,
@@ -4240,7 +4196,6 @@
Group by,ቡድን በ,
In stock,ለሽያጭ የቀረበ እቃ,
Item name,ንጥል ስም,
-Loan amount is mandatory,የብድር መጠን አስገዳጅ ነው,
Minimum Qty,አነስተኛ ሂሳብ,
More details,ተጨማሪ ዝርዝሮች,
Nature of Supplies,የችግሮች አይነት,
@@ -4409,9 +4364,6 @@
Total Completed Qty,ጠቅላላ ተጠናቋል,
Qty to Manufacture,ለማምረት ብዛት,
Repay From Salary can be selected only for term loans,ከደመወዝ ክፍያ መመለስ ለጊዜ ብድሮች ብቻ ሊመረጥ ይችላል,
-No valid Loan Security Price found for {0},ለ {0} የሚሰራ የብድር ዋስትና ዋጋ አልተገኘም,
-Loan Account and Payment Account cannot be same,የብድር ሂሳብ እና የክፍያ ሂሳብ አንድ ሊሆኑ አይችሉም,
-Loan Security Pledge can only be created for secured loans,የብድር ዋስትና ቃል ኪዳን ሊፈጠር የሚችለው ዋስትና ላላቸው ብድሮች ብቻ ነው,
Social Media Campaigns,የማኅበራዊ ሚዲያ ዘመቻዎች,
From Date can not be greater than To Date,ከቀን ከዛሬ የበለጠ ሊሆን አይችልም,
Please set a Customer linked to the Patient,እባክዎ ከሕመምተኛው ጋር የተገናኘ ደንበኛ ያዘጋጁ,
@@ -6437,7 +6389,6 @@
HR User,የሰው ሀይል ተጠቃሚ,
Appointment Letter,የቀጠሮ ደብዳቤ,
Job Applicant,ሥራ አመልካች,
-Applicant Name,የአመልካች ስም,
Appointment Date,የቀጠሮ ቀን,
Appointment Letter Template,የቀጠሮ ደብዳቤ አብነት,
Body,አካል,
@@ -7059,99 +7010,12 @@
Sync in Progress,ማመሳሰል በሂደት ላይ,
Hub Seller Name,የሆብ ሻጭ ስም,
Custom Data,ብጁ ውሂብ,
-Member,አባል,
-Partially Disbursed,በከፊል በመገኘቱ,
-Loan Closure Requested,የብድር መዝጊያ ተጠይቋል,
Repay From Salary,ደመወዝ ከ ልከፍለው,
-Loan Details,ብድር ዝርዝሮች,
-Loan Type,የብድር አይነት,
-Loan Amount,የብድር መጠን,
-Is Secured Loan,ደህንነቱ የተጠበቀ ብድር ነው,
-Rate of Interest (%) / Year,በፍላጎት ላይ (%) / የዓመቱ ይስጡት,
-Disbursement Date,ከተዛወሩ ቀን,
-Disbursed Amount,የተከፋፈለ መጠን,
-Is Term Loan,የጊዜ ብድር ነው,
-Repayment Method,ብድር መክፈል ስልት,
-Repay Fixed Amount per Period,ክፍለ ጊዜ በአንድ ቋሚ መጠን ብድራትን,
-Repay Over Number of Periods,ጊዜዎች በላይ ቁጥር ብድራትን,
-Repayment Period in Months,ወራት ውስጥ ብድር መክፈል ክፍለ ጊዜ,
-Monthly Repayment Amount,ወርሃዊ የሚያየን መጠን,
-Repayment Start Date,የክፍያ ቀን ጅምር,
-Loan Security Details,የብድር ደህንነት ዝርዝሮች,
-Maximum Loan Value,ከፍተኛ የብድር ዋጋ,
-Account Info,የመለያ መረጃ,
-Loan Account,የብድር መለያን,
-Interest Income Account,የወለድ ገቢ መለያ,
-Penalty Income Account,የቅጣት ገቢ ሂሳብ,
-Repayment Schedule,ብድር መክፈል ፕሮግራም,
-Total Payable Amount,ጠቅላላ የሚከፈል መጠን,
-Total Principal Paid,ጠቅላላ ዋና ክፍያ ተከፍሏል,
-Total Interest Payable,ተከፋይ ጠቅላላ የወለድ,
-Total Amount Paid,ጠቅላላ መጠን የተከፈለ,
-Loan Manager,የብድር አስተዳዳሪ,
-Loan Info,ብድር መረጃ,
-Rate of Interest,የወለድ ተመን,
-Proposed Pledges,የታቀደ ቃል,
-Maximum Loan Amount,ከፍተኛ የብድር መጠን,
-Repayment Info,ብድር መክፈል መረጃ,
-Total Payable Interest,ጠቅላላ የሚከፈል የወለድ,
-Against Loan ,በብድር ላይ,
-Loan Interest Accrual,የብድር ወለድ ክፍያ,
-Amounts,መጠን,
-Pending Principal Amount,በመጠባበቅ ላይ ያለ ዋና ገንዘብ መጠን,
-Payable Principal Amount,የሚከፈል ፕሪሚየም ገንዘብ መጠን,
-Paid Principal Amount,የተከፈለበት የዋና ገንዘብ መጠን,
-Paid Interest Amount,የተከፈለ የወለድ መጠን,
-Process Loan Interest Accrual,የሂሳብ ብድር የወለድ ሂሳብ,
-Repayment Schedule Name,የክፍያ መርሃ ግብር ስም,
Regular Payment,መደበኛ ክፍያ,
Loan Closure,የብድር መዘጋት,
-Payment Details,የክፍያ ዝርዝሮች,
-Interest Payable,የወለድ ክፍያ,
-Amount Paid,መጠን የሚከፈልበት,
-Principal Amount Paid,የዋና ገንዘብ ክፍያ ተከፍሏል,
-Repayment Details,የክፍያ ዝርዝሮች,
-Loan Repayment Detail,የብድር ክፍያ ዝርዝር,
-Loan Security Name,የብድር ደህንነት ስም,
-Unit Of Measure,የመለኪያ አሃድ,
-Loan Security Code,የብድር ደህንነት ኮድ,
-Loan Security Type,የብድር ደህንነት አይነት,
-Haircut %,የፀጉር ቀለም%,
-Loan Details,የብድር ዝርዝሮች,
-Unpledged,ያልደፈረ,
-Pledged,ተጭኗል,
-Partially Pledged,በከፊል ተጭኗል,
-Securities,ደህንነቶች,
-Total Security Value,አጠቃላይ የደህንነት እሴት,
-Loan Security Shortfall,የብድር ደህንነት እጥረት,
-Loan ,ብድር,
-Shortfall Time,የአጭር ጊዜ ጊዜ,
-America/New_York,አሜሪካ / New_York,
-Shortfall Amount,የአጭር ጊዜ ብዛት,
-Security Value ,የደህንነት እሴት,
-Process Loan Security Shortfall,የሂሳብ ብድር ደህንነት እጥረት,
-Loan To Value Ratio,ብድር ዋጋን ለመለየት ብድር,
-Unpledge Time,ማራገፊያ ጊዜ,
-Loan Name,ብድር ስም,
Rate of Interest (%) Yearly,የወለድ ምጣኔ (%) ዓመታዊ,
-Penalty Interest Rate (%) Per Day,የቅጣት የወለድ መጠን (%) በቀን,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,የክፍያ ጊዜ መዘግየት ቢዘገይ የቅጣቱ የወለድ መጠን በየቀኑ በሚጠባበቅ ወለድ ወለድ ላይ ይቀጣል,
-Grace Period in Days,በቀናት ውስጥ የችሮታ ጊዜ,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,የብድር ክፍያ መዘግየት ቢከሰት ከሚከፈለው ቀን ጀምሮ እስከየትኛው ቅጣት አይከሰስም,
-Pledge,ቃል ገባ,
-Post Haircut Amount,የፀጉር ቀለም መጠንን ይለጥፉ,
-Process Type,የሂደት ዓይነት,
-Update Time,የጊዜ አዘምን,
-Proposed Pledge,የታቀደው ቃል ኪዳኖች,
-Total Payment,ጠቅላላ ክፍያ,
-Balance Loan Amount,ቀሪ የብድር መጠን,
-Is Accrued,ተሰብስቧል,
Salary Slip Loan,የደመወዝ ወረቀት ብድር,
Loan Repayment Entry,የብድር ክፍያ ምዝገባ,
-Sanctioned Loan Amount,የተጣራ የብድር መጠን,
-Sanctioned Amount Limit,የተቀነሰ የገንዘብ መጠን,
-Unpledge,ማራገፊያ,
-Haircut,የፀጉር ቀለም,
MAT-MSH-.YYYY.-,MAT-MSH-yYYY.-,
Generate Schedule,መርሐግብር አመንጭ,
Schedules,መርሐግብሮች,
@@ -7885,7 +7749,6 @@
Update Series,አዘምን ተከታታይ,
Change the starting / current sequence number of an existing series.,አንድ ነባር ተከታታይ ጀምሮ / የአሁኑ ቅደም ተከተል ቁጥር ለውጥ.,
Prefix,ባዕድ መነሻ,
-Current Value,የአሁኑ ዋጋ,
This is the number of the last created transaction with this prefix,ይህ የዚህ ቅጥያ ጋር የመጨረሻ የፈጠረው የግብይት ቁጥር ነው,
Update Series Number,አዘምን ተከታታይ ቁጥር,
Quotation Lost Reason,ጥቅስ የጠፋ ምክንያት,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise አስይዝ ደረጃ የሚመከር,
Lead Details,ቀዳሚ ዝርዝሮች,
Lead Owner Efficiency,ቀዳሚ ባለቤት ቅልጥፍና,
-Loan Repayment and Closure,የብድር ክፍያ እና መዝጊያ,
-Loan Security Status,የብድር ደህንነት ሁኔታ,
Lost Opportunity,የጠፋ ዕድል ፡፡,
Maintenance Schedules,ጥገና ፕሮግራም,
Material Requests for which Supplier Quotations are not created,አቅራቢው ጥቅሶች የተፈጠሩ አይደሉም ይህም ቁሳዊ ጥያቄዎች,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},የታለሙ ቆጠራዎች {0},
Payment Account is mandatory,የክፍያ ሂሳብ ግዴታ ነው,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.",ከተመረመረ ሙሉው መጠን ያለማወቂያ ወይም ማረጋገጫ ማቅረቢያ የገቢ ግብርን ከማስላት በፊት ከታክስ ከሚከፈልበት ገቢ ላይ ይቀነሳል ፡፡,
-Disbursement Details,የሥርጭት ዝርዝሮች,
Material Request Warehouse,የቁሳቁስ ጥያቄ መጋዘን,
Select warehouse for material requests,ለቁሳዊ ጥያቄዎች መጋዘን ይምረጡ,
Transfer Materials For Warehouse {0},ቁሳቁሶችን ለመጋዘን ያስተላልፉ {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,ከደመወዝ ያልተጠየቀውን መጠን ይክፈሉ,
Deduction from salary,ከደመወዝ መቀነስ,
Expired Leaves,ጊዜው ያለፈባቸው ቅጠሎች,
-Reference No,ማጣቀሻ ቁጥር,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,የፀጉር አቆራረጥ መቶኛ በብድር ዋስትና (የገቢያ ዋጋ) ዋጋ እና ለዚያ ብድር ዋስትና በሚውልበት ጊዜ ለዚያ ብድር ዋስትና በሚሰጠው እሴት መካከል ያለው የመቶኛ ልዩነት ነው።,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,የብድር መጠን ዋጋ የብድር መጠን ቃል ከተገባው ዋስትና ዋጋ ጋር ያለውን ድርሻ ያሳያል። ለማንኛውም ብድር ከተጠቀሰው እሴት በታች ቢወድቅ የብድር ዋስትና ጉድለት ይነሳል,
If this is not checked the loan by default will be considered as a Demand Loan,ይህ ካልተረጋገጠ ብድሩ በነባሪነት እንደ ብድር ይቆጠራል,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ይህ ሂሳብ ከተበዳሪው የብድር ክፍያዎችን ለማስያዝ እና እንዲሁም ለተበዳሪው ብድሮችን ለማሰራጨት ያገለግላል,
This account is capital account which is used to allocate capital for loan disbursal account ,ይህ አካውንት ለብድር ማስከፈያ ሂሳብ ካፒታል ለመመደብ የሚያገለግል የካፒታል ሂሳብ ነው,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},ክዋኔ {0} የሥራ ትዕዛዝ አይደለም {1},
Print UOM after Quantity,ከቁጥር በኋላ UOM ን ያትሙ,
Set default {0} account for perpetual inventory for non stock items,ለክምችት ያልሆኑ ዕቃዎች ለዘለዓለም ክምችት ነባሪ የ {0} መለያ ያዘጋጁ,
-Loan Security {0} added multiple times,የብድር ደህንነት {0} ብዙ ጊዜ ታክሏል,
-Loan Securities with different LTV ratio cannot be pledged against one loan,የተለያዩ የኤልቲቪ ሬሾ ያላቸው የብድር ዋስትናዎች በአንድ ብድር ላይ ቃል ሊገቡ አይችሉም,
-Qty or Amount is mandatory for loan security!,ለብድር ዋስትና ኪቲ ወይም መጠን ግዴታ ነው!,
-Only submittted unpledge requests can be approved,የገቡት ያልተሞከሩ ጥያቄዎች ብቻ ሊፀድቁ ይችላሉ,
-Interest Amount or Principal Amount is mandatory,የወለድ መጠን ወይም የዋናው መጠን ግዴታ ነው,
-Disbursed Amount cannot be greater than {0},የተከፋፈለ መጠን ከ {0} ሊበልጥ አይችልም,
-Row {0}: Loan Security {1} added multiple times,ረድፍ {0} የብድር ደህንነት {1} ብዙ ጊዜ ታክሏል,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,ረድፍ # {0} የልጆች እቃ የምርት ቅርቅብ መሆን የለበትም። እባክዎ ንጥል {1} ን ያስወግዱ እና ያስቀምጡ,
Credit limit reached for customer {0},ለደንበኛ የብድር ገደብ ደርሷል {0},
Could not auto create Customer due to the following missing mandatory field(s):,በሚቀጥሉት አስገዳጅ መስክ (ዶች) ምክንያት ደንበኛን በራስ ሰር መፍጠር አልተቻለም-,
diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv
index 3cbaba9..1020351 100644
--- a/erpnext/translations/ar.csv
+++ b/erpnext/translations/ar.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL",قابل للتطبيق إذا كانت الشركة SpA أو SApA أو SRL,
Applicable if the company is a limited liability company,قابل للتطبيق إذا كانت الشركة شركة ذات مسؤولية محدودة,
Applicable if the company is an Individual or a Proprietorship,قابل للتطبيق إذا كانت الشركة فردية أو مملوكة,
-Applicant,مقدم الطلب,
-Applicant Type,نوع مقدم الطلب,
Application of Funds (Assets),استخدام الاموال (الأصول),
Application period cannot be across two allocation records,فترة الطلب لا يمكن ان تكون خلال سجلين مخصصين,
Application period cannot be outside leave allocation period,فترة الاجازة لا يمكن أن تكون خارج فترة الاجازة المسموحة للموظف.\n<br>\nApplication period cannot be outside leave allocation period,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,قائمة المساهمين المتاحين بأرقام الأوراق,
Loading Payment System,تحميل نظام الدفع,
Loan,قرض,
-Loan Amount cannot exceed Maximum Loan Amount of {0},مبلغ القرض لا يمكن أن يتجاوز الحد الأقصى للقرض {0}\n<br>\nLoan Amount cannot exceed Maximum Loan Amount of {0},
-Loan Application,طلب القرض,
-Loan Management,إدارة القروض,
-Loan Repayment,سداد القروض,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,تاريخ بدء القرض وفترة القرض إلزامية لحفظ خصم الفاتورة,
Loans (Liabilities),القروض (الخصوم),
Loans and Advances (Assets),القروض والسلفيات (الأصول),
@@ -1611,7 +1605,6 @@
Monday,يوم الاثنين,
Monthly,شهريا,
Monthly Distribution,التوزيع الشهري,
-Monthly Repayment Amount cannot be greater than Loan Amount,قيمة السداد الشهري لا يمكن أن يكون أكبر من قيمة القرض,
More,أكثر,
More Information,المزيد من المعلومات,
More than one selection for {0} not allowed,أكثر من اختيار واحد لـ {0} غير مسموح به,
@@ -1884,11 +1877,9 @@
Pay {0} {1},ادفع {0} {1},
Payable,واجب الدفع,
Payable Account,حساب الدائنين,
-Payable Amount,المبلغ المستحق,
Payment,دفع,
Payment Cancelled. Please check your GoCardless Account for more details,دفع ملغى. يرجى التحقق من حسابك في GoCardless لمزيد من التفاصيل,
Payment Confirmation,تأكيد الدفعة,
-Payment Date,تاريخ الدفعة,
Payment Days,أيام الدفع,
Payment Document,وثيقة الدفع,
Payment Due Date,تاريخ استحقاق السداد,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,الرجاء إدخال إيصال الشراء أولا\n<br>\nPlease enter Purchase Receipt first,
Please enter Receipt Document,الرجاء إدخال مستند الاستلام\n<br>\nPlease enter Receipt Document,
Please enter Reference date,الرجاء إدخال تاريخ المرجع\n<br>\nPlease enter Reference date,
-Please enter Repayment Periods,الرجاء إدخال فترات السداد,
Please enter Reqd by Date,الرجاء إدخال ريد حسب التاريخ,
Please enter Woocommerce Server URL,الرجاء إدخال عنوان URL لخادم Woocommerce,
Please enter Write Off Account,الرجاء إدخال حساب الشطب,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,الرجاء إدخال مركز تكلفة الأب,
Please enter quantity for Item {0},الرجاء إدخال الكمية للعنصر {0},
Please enter relieving date.,من فضلك ادخل تاريخ ترك العمل.,
-Please enter repayment Amount,الرجاء إدخال مبلغ السداد\n<br>\nPlease enter repayment Amount,
Please enter valid Financial Year Start and End Dates,الرجاء إدخال تاريخ بداية السنة المالية وتاريخ النهاية,
Please enter valid email address,الرجاء إدخال عنوان بريد إلكتروني صالح,
Please enter {0} first,الرجاء إدخال {0} أولاً,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,كما تتم فلترت قواعد التسعير على أساس الكمية.,
Primary Address Details,تفاصيل العنوان الرئيسي,
Primary Contact Details,تفاصيل الاتصال الأساسية,
-Principal Amount,المبلغ الرئيسي,
Print Format,تنسيق الطباعة,
Print IRS 1099 Forms,طباعة نماذج مصلحة الضرائب 1099,
Print Report Card,طباعة بطاقة التقرير,
@@ -2550,7 +2538,6 @@
Sample Collection,جمع العينات,
Sample quantity {0} cannot be more than received quantity {1},كمية العينة {0} لا يمكن أن تكون أكثر من الكمية المستلمة {1},
Sanctioned,مقرر,
-Sanctioned Amount,القيمة المقرر صرفه,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,لا يمكن أن يكون المبلغ الموافق عليه أكبر من مبلغ المطالبة في الصف {0}.,
Sand,رمل,
Saturday,السبت,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} يحتوي بالفعل على إجراء الأصل {1}.,
API,API,
Annual,سنوي,
-Approved,موافق عليه,
Change,تغيير,
Contact Email,عنوان البريد الإلكتروني,
Export Type,نوع التصدير,
@@ -3571,7 +3557,6 @@
Account Value,قيمة الحساب,
Account is mandatory to get payment entries,الحساب إلزامي للحصول على إدخالات الدفع,
Account is not set for the dashboard chart {0},لم يتم تعيين الحساب لمخطط لوحة المعلومات {0},
-Account {0} does not belong to company {1},الحساب {0} لا ينتمي إلى شركة {1},
Account {0} does not exists in the dashboard chart {1},الحساب {0} غير موجود في مخطط لوحة المعلومات {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,الحساب: <b>{0}</b> عبارة "Capital work" قيد التقدم ولا يمكن تحديثها بواسطة "إدخال دفتر اليومية",
Account: {0} is not permitted under Payment Entry,الحساب: {0} غير مسموح به بموجب إدخال الدفع,
@@ -3582,7 +3567,6 @@
Activity,نشاط,
Add / Manage Email Accounts.,إضافة / إدارة حسابات البريد الإلكتروني.,
Add Child,إضافة الطفل,
-Add Loan Security,إضافة قرض الضمان,
Add Multiple,إضافة متعددة,
Add Participants,أضف مشاركين,
Add to Featured Item,إضافة إلى البند المميز,
@@ -3593,15 +3577,12 @@
Address Line 1,العنوان سطر 1,
Addresses,عناوين,
Admission End Date should be greater than Admission Start Date.,يجب أن يكون تاريخ انتهاء القبول أكبر من تاريخ بدء القبول.,
-Against Loan,ضد القرض,
-Against Loan:,ضد القرض:,
All,الكل,
All bank transactions have been created,تم إنشاء جميع المعاملات المصرفية,
All the depreciations has been booked,تم حجز جميع الإهلاكات,
Allocation Expired!,تخصيص انتهت!,
Allow Resetting Service Level Agreement from Support Settings.,السماح بإعادة ضبط اتفاقية مستوى الخدمة من إعدادات الدعم.,
Amount of {0} is required for Loan closure,المبلغ {0} مطلوب لإغلاق القرض,
-Amount paid cannot be zero,لا يمكن أن يكون المبلغ المدفوع صفرًا,
Applied Coupon Code,رمز القسيمة المطبق,
Apply Coupon Code,تطبيق رمز القسيمة,
Appointment Booking,حجز موعد,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,لا يمكن حساب وقت الوصول حيث أن عنوان برنامج التشغيل مفقود.,
Cannot Optimize Route as Driver Address is Missing.,لا يمكن تحسين المسار لأن عنوان برنامج التشغيل مفقود.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,لا يمكن إكمال المهمة {0} لأن المهمة التابعة {1} ليست مكتملة / ملغاة.,
-Cannot create loan until application is approved,لا يمكن إنشاء قرض حتى تتم الموافقة على الطلب,
Cannot find a matching Item. Please select some other value for {0}.,لا يمكن العثور على بند مطابق. يرجى اختيار قيمة أخرى ل {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",لا يمكن زيادة حجم العنصر {0} في الصف {1} أكثر من {2}. للسماح بالإفراط في الفوترة ، يرجى تعيين بدل في إعدادات الحسابات,
"Capacity Planning Error, planned start time can not be same as end time",خطأ في تخطيط السعة ، لا يمكن أن يكون وقت البدء المخطط له هو نفسه وقت الانتهاء,
@@ -3812,20 +3792,9 @@
Less Than Amount,أقل من المبلغ,
Liabilities,المطلوبات,
Loading...,تحميل ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,يتجاوز مبلغ القرض الحد الأقصى لمبلغ القرض {0} وفقًا للأوراق المالية المقترحة,
Loan Applications from customers and employees.,طلبات القروض من العملاء والموظفين.,
-Loan Disbursement,إنفاق تمويل,
Loan Processes,عمليات القرض,
-Loan Security,ضمان القرض,
-Loan Security Pledge,تعهد ضمان القرض,
-Loan Security Pledge Created : {0},تعهد ضمان القرض: {0},
-Loan Security Price,سعر ضمان القرض,
-Loan Security Price overlapping with {0},سعر ضمان القرض متداخل مع {0},
-Loan Security Unpledge,قرض ضمان unpledge,
-Loan Security Value,قيمة ضمان القرض,
Loan Type for interest and penalty rates,نوع القرض لأسعار الفائدة والعقوبة,
-Loan amount cannot be greater than {0},لا يمكن أن يكون مبلغ القرض أكبر من {0},
-Loan is mandatory,القرض إلزامي,
Loans,القروض,
Loans provided to customers and employees.,القروض المقدمة للعملاء والموظفين.,
Location,الموقع,
@@ -3894,7 +3863,6 @@
Pay,دفع,
Payment Document Type,نوع مستند الدفع,
Payment Name,اسم الدفع,
-Penalty Amount,مبلغ العقوبة,
Pending,معلق,
Performance,أداء,
Period based On,فترة بناء على,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,الرجاء تسجيل الدخول كمستخدم Marketplace لتعديل هذا العنصر.,
Please login as a Marketplace User to report this item.,يرجى تسجيل الدخول كمستخدم Marketplace للإبلاغ عن هذا العنصر.,
Please select <b>Template Type</b> to download template,يرجى تحديد <b>نوع</b> القالب لتنزيل القالب,
-Please select Applicant Type first,يرجى اختيار نوع مقدم الطلب أولاً,
Please select Customer first,يرجى اختيار العميل أولا,
Please select Item Code first,يرجى اختيار رمز البند أولاً,
-Please select Loan Type for company {0},يرجى اختيار نوع القرض للشركة {0},
Please select a Delivery Note,يرجى اختيار مذكرة التسليم,
Please select a Sales Person for item: {0},يرجى اختيار مندوب مبيعات للعنصر: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',يرجى تحديد طريقة دفع أخرى. Stripe لا يدعم المعاملات بالعملة '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},يرجى إعداد حساب بنكي افتراضي للشركة {0},
Please specify,رجاء حدد,
Please specify a {0},الرجاء تحديد {0},lead
-Pledge Status,حالة التعهد,
-Pledge Time,وقت التعهد,
Printing,طبع,
Priority,أفضلية,
Priority has been changed to {0}.,تم تغيير الأولوية إلى {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,معالجة ملفات XML,
Profitability,الربحية,
Project,مشروع,
-Proposed Pledges are mandatory for secured Loans,التعهدات المقترحة إلزامية للقروض المضمونة,
Provide the academic year and set the starting and ending date.,تقديم السنة الدراسية وتحديد تاريخ البداية والنهاية.,
Public token is missing for this bank,الرمز العام مفقود لهذا البنك,
Publish,نشر,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,لا يحتوي إيصال الشراء على أي عنصر تم تمكين الاحتفاظ عينة به.,
Purchase Return,شراء العودة,
Qty of Finished Goods Item,الكمية من السلع تامة الصنع,
-Qty or Amount is mandatroy for loan security,الكمية أو المبلغ هو mandatroy لضمان القرض,
Quality Inspection required for Item {0} to submit,فحص الجودة مطلوب للبند {0} لتقديمه,
Quantity to Manufacture,كمية لتصنيع,
Quantity to Manufacture can not be zero for the operation {0},لا يمكن أن تكون الكمية للتصنيع صفراً للتشغيل {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,يجب أن يكون تاريخ التخفيف أكبر من أو يساوي تاريخ الانضمام,
Rename,إعادة تسمية,
Rename Not Allowed,إعادة تسمية غير مسموح به,
-Repayment Method is mandatory for term loans,طريقة السداد إلزامية للقروض لأجل,
-Repayment Start Date is mandatory for term loans,تاريخ بدء السداد إلزامي للقروض لأجل,
Report Item,بلغ عن شيء,
Report this Item,الإبلاغ عن هذا البند,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,الكمية المحجوزة للعقد من الباطن: كمية المواد الخام اللازمة لصنع سلع من الباطن.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},الصف ({0}): {1} مخصوم بالفعل في {2},
Rows Added in {0},تمت إضافة الصفوف في {0},
Rows Removed in {0},تمت إزالة الصفوف في {0},
-Sanctioned Amount limit crossed for {0} {1},تم تجاوز حد المبلغ المعتمد لـ {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},مبلغ القرض المعتمد موجود بالفعل لـ {0} ضد الشركة {1},
Save,حفظ,
Save Item,حفظ البند,
Saved Items,العناصر المحفوظة,
@@ -4135,7 +4093,6 @@
User {0} is disabled,المستخدم {0} تم تعطيل,
Users and Permissions,المستخدمين والصلاحيات,
Vacancies cannot be lower than the current openings,لا يمكن أن تكون الوظائف الشاغرة أقل من الفتحات الحالية,
-Valid From Time must be lesser than Valid Upto Time.,يجب أن يكون "صالح من الوقت" أقل من "وقت صلاحية صالح".,
Valuation Rate required for Item {0} at row {1},معدل التقييم مطلوب للبند {0} في الصف {1},
Values Out Of Sync,القيم خارج المزامنة,
Vehicle Type is required if Mode of Transport is Road,نوع المركبة مطلوب إذا كان وضع النقل هو الطريق,
@@ -4211,7 +4168,6 @@
Add to Cart,أضف إلى السلة,
Days Since Last Order,أيام منذ آخر طلب,
In Stock,متوفر,
-Loan Amount is mandatory,مبلغ القرض إلزامي,
Mode Of Payment,طريقة الدفع,
No students Found,لم يتم العثور على الطلاب,
Not in Stock,غير متوفر,
@@ -4240,7 +4196,6 @@
Group by,المجموعة حسب,
In stock,في المخزن,
Item name,اسم السلعة,
-Loan amount is mandatory,مبلغ القرض إلزامي,
Minimum Qty,الكمية الدنيا,
More details,مزيد من التفاصيل,
Nature of Supplies,طبيعة الامدادات,
@@ -4409,9 +4364,6 @@
Total Completed Qty,إجمالي الكمية المكتملة,
Qty to Manufacture,الكمية للتصنيع,
Repay From Salary can be selected only for term loans,يمكن اختيار السداد من الراتب للقروض لأجل فقط,
-No valid Loan Security Price found for {0},لم يتم العثور على سعر ضمان قرض صالح لـ {0},
-Loan Account and Payment Account cannot be same,لا يمكن أن يكون حساب القرض وحساب الدفع متماثلين,
-Loan Security Pledge can only be created for secured loans,لا يمكن إنشاء تعهد ضمان القرض إلا للقروض المضمونة,
Social Media Campaigns,حملات التواصل الاجتماعي,
From Date can not be greater than To Date,لا يمكن أن يكون من تاريخ أكبر من تاريخ,
Please set a Customer linked to the Patient,يرجى تعيين عميل مرتبط بالمريض,
@@ -6437,7 +6389,6 @@
HR User,مستخدم الموارد البشرية,
Appointment Letter,رسالة موعد,
Job Applicant,طالب الوظيفة,
-Applicant Name,اسم طالب الوظيفة,
Appointment Date,تاريخ الموعد,
Appointment Letter Template,قالب رسالة التعيين,
Body,الجسم,
@@ -7059,99 +7010,12 @@
Sync in Progress,المزامنة قيد التقدم,
Hub Seller Name,اسم البائع المحور,
Custom Data,البيانات المخصصة,
-Member,عضو,
-Partially Disbursed,صرف جزئ,
-Loan Closure Requested,مطلوب قرض الإغلاق,
Repay From Salary,سداد من الراتب,
-Loan Details,تفاصيل القرض,
-Loan Type,نوع القرض,
-Loan Amount,قيمة القرض,
-Is Secured Loan,هو قرض مضمون,
-Rate of Interest (%) / Year,معدل الفائدة (٪) / السنة,
-Disbursement Date,تاريخ الصرف,
-Disbursed Amount,المبلغ المصروف,
-Is Term Loan,هو قرض لأجل,
-Repayment Method,طريقة السداد,
-Repay Fixed Amount per Period,سداد قيمة ثابتة لكل فترة,
-Repay Over Number of Periods,سداد على عدد فترات,
-Repayment Period in Months,فترة السداد بالأشهر,
-Monthly Repayment Amount,قيمة السداد الشهري,
-Repayment Start Date,تاريخ بداية السداد,
-Loan Security Details,تفاصيل ضمان القرض,
-Maximum Loan Value,الحد الأقصى لقيمة القرض,
-Account Info,معلومات الحساب,
-Loan Account,حساب القرض,
-Interest Income Account,الحساب الخاص بإيرادات الفائدة,
-Penalty Income Account,حساب دخل الجزاء,
-Repayment Schedule,الجدول الزمني للسداد,
-Total Payable Amount,المبلغ الكلي المستحق,
-Total Principal Paid,إجمالي المبلغ المدفوع,
-Total Interest Payable,مجموع الفائدة الواجب دفعها,
-Total Amount Paid,مجموع المبلغ المدفوع,
-Loan Manager,مدير القرض,
-Loan Info,معلومات قرض,
-Rate of Interest,معدل الفائدة,
-Proposed Pledges,التعهدات المقترحة,
-Maximum Loan Amount,أعلى قيمة للقرض,
-Repayment Info,معلومات السداد,
-Total Payable Interest,مجموع الفوائد الدائنة,
-Against Loan ,مقابل القرض,
-Loan Interest Accrual,استحقاق فائدة القرض,
-Amounts,مبالغ,
-Pending Principal Amount,في انتظار المبلغ الرئيسي,
-Payable Principal Amount,المبلغ الرئيسي المستحق,
-Paid Principal Amount,المبلغ الأساسي المدفوع,
-Paid Interest Amount,مبلغ الفائدة المدفوعة,
-Process Loan Interest Accrual,استحقاق الفائدة من قرض العملية,
-Repayment Schedule Name,اسم جدول السداد,
Regular Payment,الدفع المنتظم,
Loan Closure,إغلاق القرض,
-Payment Details,تفاصيل الدفع,
-Interest Payable,الفوائد المستحقة الدفع,
-Amount Paid,القيمة المدفوعة,
-Principal Amount Paid,المبلغ الرئيسي المدفوع,
-Repayment Details,تفاصيل السداد,
-Loan Repayment Detail,تفاصيل سداد القرض,
-Loan Security Name,اسم ضمان القرض,
-Unit Of Measure,وحدة القياس,
-Loan Security Code,رمز ضمان القرض,
-Loan Security Type,نوع ضمان القرض,
-Haircut %,حلاقة شعر ٪,
-Loan Details,تفاصيل القرض,
-Unpledged,Unpledged,
-Pledged,تعهد,
-Partially Pledged,تعهد جزئي,
-Securities,ضمانات,
-Total Security Value,إجمالي قيمة الأمن,
-Loan Security Shortfall,قرض أمن النقص,
-Loan ,قرض,
-Shortfall Time,وقت العجز,
-America/New_York,أمريكا / نيويورك,
-Shortfall Amount,عجز المبلغ,
-Security Value ,قيمة الأمن,
-Process Loan Security Shortfall,النقص في عملية قرض القرض,
-Loan To Value Ratio,نسبة القروض إلى قيمة,
-Unpledge Time,الوقت unpledge,
-Loan Name,اسم قرض,
Rate of Interest (%) Yearly,معدل الفائدة (٪) سنوي,
-Penalty Interest Rate (%) Per Day,عقوبة سعر الفائدة (٪) في اليوم الواحد,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,يتم فرض معدل الفائدة الجزائية على مبلغ الفائدة المعلق على أساس يومي في حالة التأخر في السداد,
-Grace Period in Days,فترة السماح بالأيام,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,عدد الأيام من تاريخ الاستحقاق التي لن يتم فرض غرامة عليها في حالة التأخير في سداد القرض,
-Pledge,التعهد,
-Post Haircut Amount,بعد قص شعر,
-Process Type,نوع العملية,
-Update Time,تحديث الوقت,
-Proposed Pledge,التعهد المقترح,
-Total Payment,إجمالي الدفعة,
-Balance Loan Amount,رصيد مبلغ القرض,
-Is Accrued,المستحقة,
Salary Slip Loan,قرض كشف الراتب,
Loan Repayment Entry,إدخال سداد القرض,
-Sanctioned Loan Amount,مبلغ القرض المحكوم عليه,
-Sanctioned Amount Limit,الحد الأقصى للعقوبة,
-Unpledge,Unpledge,
-Haircut,حلاقة شعر,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,إنشاء جدول,
Schedules,جداول,
@@ -7885,7 +7749,6 @@
Update Series,تحديث الرقم المتسلسل,
Change the starting / current sequence number of an existing series.,تغيير رقم تسلسل بدء / الحالي من سلسلة الموجودة.,
Prefix,بادئة,
-Current Value,القيمة الحالية,
This is the number of the last created transaction with this prefix,هذا هو عدد المعاملات التي تم إنشاؤها باستخدام مشاركة هذه البادئة,
Update Series Number,تحديث الرقم المتسلسل,
Quotation Lost Reason,سبب خسارة المناقصة,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,مستوى إعادة ترتيب يوصى به وفقاً للصنف,
Lead Details,تفاصيل الزبون المحتمل,
Lead Owner Efficiency,يؤدي كفاءة المالك,
-Loan Repayment and Closure,سداد القرض وإغلاقه,
-Loan Security Status,حالة ضمان القرض,
Lost Opportunity,فرصة ضائعة,
Maintenance Schedules,جداول الصيانة,
Material Requests for which Supplier Quotations are not created,طلبات المواد التي لم ينشأ لها عروض أسعار من الموردين,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},الأعداد المستهدفة: {0},
Payment Account is mandatory,حساب الدفع إلزامي,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.",إذا تم تحديده ، فسيتم خصم المبلغ بالكامل من الدخل الخاضع للضريبة قبل حساب ضريبة الدخل دون تقديم أي إعلان أو إثبات.,
-Disbursement Details,تفاصيل الصرف,
Material Request Warehouse,مستودع طلب المواد,
Select warehouse for material requests,حدد المستودع لطلبات المواد,
Transfer Materials For Warehouse {0},نقل المواد للمستودع {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,سداد المبلغ غير المطالب به من الراتب,
Deduction from salary,خصم من الراتب,
Expired Leaves,أوراق منتهية الصلاحية,
-Reference No,رقم المرجع,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,نسبة الحلاقة هي النسبة المئوية للفرق بين القيمة السوقية لسند القرض والقيمة المنسوبة إلى ضمان القرض هذا عند استخدامها كضمان لهذا القرض.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,تعبر نسبة القرض إلى القيمة عن نسبة مبلغ القرض إلى قيمة الضمان المرهون. سيحدث عجز في تأمين القرض إذا انخفض عن القيمة المحددة لأي قرض,
If this is not checked the loan by default will be considered as a Demand Loan,إذا لم يتم التحقق من ذلك ، فسيتم اعتبار القرض بشكل افتراضي كقرض تحت الطلب,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,يستخدم هذا الحساب لحجز أقساط سداد القرض من المقترض وأيضًا صرف القروض للمقترض,
This account is capital account which is used to allocate capital for loan disbursal account ,هذا الحساب هو حساب رأس المال الذي يستخدم لتخصيص رأس المال لحساب صرف القرض,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},العملية {0} لا تنتمي إلى أمر العمل {1},
Print UOM after Quantity,اطبع UOM بعد الكمية,
Set default {0} account for perpetual inventory for non stock items,تعيين حساب {0} الافتراضي للمخزون الدائم للعناصر غير المخزنة,
-Loan Security {0} added multiple times,تمت إضافة ضمان القرض {0} عدة مرات,
-Loan Securities with different LTV ratio cannot be pledged against one loan,لا يمكن رهن سندات القرض ذات نسبة القيمة الدائمة المختلفة لقرض واحد,
-Qty or Amount is mandatory for loan security!,الكمية أو المبلغ إلزامي لضمان القرض!,
-Only submittted unpledge requests can be approved,يمكن الموافقة على طلبات إلغاء التعهد المقدمة فقط,
-Interest Amount or Principal Amount is mandatory,مبلغ الفائدة أو المبلغ الأساسي إلزامي,
-Disbursed Amount cannot be greater than {0},لا يمكن أن يكون المبلغ المصروف أكبر من {0},
-Row {0}: Loan Security {1} added multiple times,الصف {0}: تمت إضافة ضمان القرض {1} عدة مرات,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,الصف رقم {0}: يجب ألا يكون العنصر الفرعي عبارة عن حزمة منتج. يرجى إزالة العنصر {1} وحفظه,
Credit limit reached for customer {0},تم بلوغ حد الائتمان للعميل {0},
Could not auto create Customer due to the following missing mandatory field(s):,تعذر إنشاء العميل تلقائيًا بسبب الحقول الإلزامية التالية المفقودة:,
diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv
index 964a9f8..e909e4b 100644
--- a/erpnext/translations/bg.csv
+++ b/erpnext/translations/bg.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Приложимо, ако компанията е SpA, SApA или SRL",
Applicable if the company is a limited liability company,"Приложимо, ако дружеството е дружество с ограничена отговорност",
Applicable if the company is an Individual or a Proprietorship,"Приложимо, ако дружеството е физическо лице или собственик",
-Applicant,кандидат,
-Applicant Type,Тип на кандидата,
Application of Funds (Assets),Прилагане на средства (активи),
Application period cannot be across two allocation records,Периодът на кандидатстване не може да бъде в две записи за разпределение,
Application period cannot be outside leave allocation period,Срок за кандидатстване не може да бъде извън отпуск период на разпределение,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Списък на наличните акционери с номера на фолиото,
Loading Payment System,Зареждане на платежна система,
Loan,заем,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Размер на кредита не може да надвишава сума на максимален заем {0},
-Loan Application,Искане за кредит,
-Loan Management,Управление на заемите,
-Loan Repayment,Погасяване на кредита,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Началната дата на кредита и Периодът на заема са задължителни за запазване на отстъпката от фактури,
Loans (Liabilities),Заеми (пасиви),
Loans and Advances (Assets),Кредити и аванси (активи),
@@ -1611,7 +1605,6 @@
Monday,Понеделник,
Monthly,Месечно,
Monthly Distribution,Месечно разпределение,
-Monthly Repayment Amount cannot be greater than Loan Amount,Месечна погасителна сума не може да бъде по-голяма от Размер на заема,
More,Още,
More Information,Повече информация,
More than one selection for {0} not allowed,Повече от един избор за {0} не е разрешен,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Платете {0} {1},
Payable,платим,
Payable Account,Платими Акаунт,
-Payable Amount,Дължима сума,
Payment,плащане,
Payment Cancelled. Please check your GoCardless Account for more details,"Плащането е отменено. Моля, проверете профила си в GoCardless за повече подробности",
Payment Confirmation,Потвърждение за плащане,
-Payment Date,Дата за плащане,
Payment Days,Плащане Дни,
Payment Document,платежен документ,
Payment Due Date,Дължимото плащане Дата,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,"Моля, въведете Покупка Квитанция първия",
Please enter Receipt Document,"Моля, въведете Получаване на документация",
Please enter Reference date,"Моля, въведете референтна дата",
-Please enter Repayment Periods,"Моля, въведете Възстановяване Периоди",
Please enter Reqd by Date,"Моля, въведете Reqd по дата",
Please enter Woocommerce Server URL,"Моля, въведете URL адреса на Woocommerce Server",
Please enter Write Off Account,"Моля, въведете отпишат Акаунт",
@@ -1994,7 +1984,6 @@
Please enter parent cost center,"Моля, въведете разходен център майка",
Please enter quantity for Item {0},"Моля, въведете количество за т {0}",
Please enter relieving date.,"Моля, въведете облекчаване дата.",
-Please enter repayment Amount,"Моля, въведете погасяване сума",
Please enter valid Financial Year Start and End Dates,"Моля, въведете валидни начални и крайни дати за финансова година",
Please enter valid email address,"Моля, въведете валиден имейл адрес",
Please enter {0} first,"Моля, въведете {0} първо",
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Правилата за ценообразуване са допълнително филтрирани въз основа на количеството.,
Primary Address Details,Основни данни за адреса,
Primary Contact Details,Основни данни за контакт,
-Principal Amount,Размер на главницата,
Print Format,Print Format,
Print IRS 1099 Forms,Печат IRS 1099 Форми,
Print Report Card,Отпечатайте отчетната карта,
@@ -2550,7 +2538,6 @@
Sample Collection,Колекция от проби,
Sample quantity {0} cannot be more than received quantity {1},Количеството на пробата {0} не може да бъде повече от полученото количество {1},
Sanctioned,санкционирана,
-Sanctioned Amount,Санкционирани Сума,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Санкционирани сума не може да бъде по-голяма от претенция Сума в Row {0}.,
Sand,Пясък,
Saturday,Събота,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} вече има родителска процедура {1}.,
API,API,
Annual,Годишен,
-Approved,Одобрен,
Change,Промяна,
Contact Email,Контакт Email,
Export Type,Тип експорт,
@@ -3571,7 +3557,6 @@
Account Value,Стойност на сметката,
Account is mandatory to get payment entries,Сметката е задължителна за получаване на плащания,
Account is not set for the dashboard chart {0},Профилът не е зададен за таблицата на таблото {0},
-Account {0} does not belong to company {1},Сметка {0} не принадлежи към Фирма {1},
Account {0} does not exists in the dashboard chart {1},Акаунт {0} не съществува в таблицата на таблото {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Акаунт: <b>{0}</b> е капитал Незавършено производство и не може да бъде актуализиран от Entry Entry,
Account: {0} is not permitted under Payment Entry,Акаунт: {0} не е разрешено при въвеждане на плащане,
@@ -3582,7 +3567,6 @@
Activity,Дейност,
Add / Manage Email Accounts.,Добавяне / Управление на имейл акаунти.,
Add Child,Добави Поделемент,
-Add Loan Security,Добавете Заемна гаранция,
Add Multiple,Добави няколко,
Add Participants,Добавете участници,
Add to Featured Item,Добавяне към Featured Item,
@@ -3593,15 +3577,12 @@
Address Line 1,Адрес - Ред 1,
Addresses,Адреси,
Admission End Date should be greater than Admission Start Date.,Крайната дата на приемане трябва да бъде по-голяма от началната дата на приемане.,
-Against Loan,Срещу заем,
-Against Loan:,Срещу заем:,
All,всичко,
All bank transactions have been created,Всички банкови транзакции са създадени,
All the depreciations has been booked,Всички амортизации са записани,
Allocation Expired!,Разпределението изтече!,
Allow Resetting Service Level Agreement from Support Settings.,Разрешаване на нулиране на споразумението за ниво на обслужване от настройките за поддръжка.,
Amount of {0} is required for Loan closure,Сума от {0} е необходима за закриване на заем,
-Amount paid cannot be zero,Изплатената сума не може да бъде нула,
Applied Coupon Code,Приложен купонов код,
Apply Coupon Code,Приложете купонния код,
Appointment Booking,Резервация за назначение,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Не може да се изчисли времето на пристигане, тъй като адресът на водача липсва.",
Cannot Optimize Route as Driver Address is Missing.,"Не може да се оптимизира маршрута, тъй като адресът на драйвера липсва.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Не може да се изпълни задача {0}, тъй като нейната зависима задача {1} не е завършена / анулирана.",
-Cannot create loan until application is approved,"Не може да се създаде заем, докато заявлението не бъде одобрено",
Cannot find a matching Item. Please select some other value for {0}.,Няма съвпадащи записи. Моля изберете някоя друга стойност за {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Не може да се таксува за елемент {0} в ред {1} повече от {2}. За да разрешите надплащането, моля, задайте квота в Настройки на акаунти",
"Capacity Planning Error, planned start time can not be same as end time","Грешка при планиране на капацитета, планираното начално време не може да бъде същото като крайното време",
@@ -3812,20 +3792,9 @@
Less Than Amount,По-малко от сумата,
Liabilities,пасив,
Loading...,Зарежда се ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Заемът надвишава максималния размер на заема от {0} според предложените ценни книжа,
Loan Applications from customers and employees.,Заявления за заем от клиенти и служители.,
-Loan Disbursement,Изплащане на заем,
Loan Processes,Заемни процеси,
-Loan Security,Заемна гаранция,
-Loan Security Pledge,Залог за заем на заем,
-Loan Security Pledge Created : {0},Залог за заем на заем създаден: {0},
-Loan Security Price,Цена на заемна гаранция,
-Loan Security Price overlapping with {0},Цената на заемната гаранция се припокрива с {0},
-Loan Security Unpledge,Отстраняване на сигурността на заема,
-Loan Security Value,Стойност на сигурността на кредита,
Loan Type for interest and penalty rates,Тип заем за лихви и наказателни лихви,
-Loan amount cannot be greater than {0},Сумата на заема не може да бъде по-голяма от {0},
-Loan is mandatory,Заемът е задължителен,
Loans,Кредити,
Loans provided to customers and employees.,"Кредити, предоставяни на клиенти и служители.",
Location,Местоположение,
@@ -3894,7 +3863,6 @@
Pay,Плащане,
Payment Document Type,Тип на документа за плащане,
Payment Name,Име на плащане,
-Penalty Amount,Сума на наказанието,
Pending,В очакване на,
Performance,производителност,
Period based On,"Период, базиран на",
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,"Моля, влезте като потребител на Marketplace, за да редактирате този елемент.",
Please login as a Marketplace User to report this item.,"Моля, влезте като потребител на Marketplace, за да докладвате за този артикул.",
Please select <b>Template Type</b> to download template,"Моля, изберете <b>Тип шаблон</b> за изтегляне на шаблон",
-Please select Applicant Type first,"Моля, първо изберете типа кандидат",
Please select Customer first,"Моля, първо изберете клиента",
Please select Item Code first,"Моля, първо изберете кода на артикула",
-Please select Loan Type for company {0},"Моля, изберете тип заем за компания {0}",
Please select a Delivery Note,"Моля, изберете Бележка за доставка",
Please select a Sales Person for item: {0},"Моля, изберете продавач за артикул: {0}",
Please select another payment method. Stripe does not support transactions in currency '{0}',"Моля, изберете друг начин на плащане. Слоя не поддържа транзакции във валута "{0}"",
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},"Моля, настройте банкова сметка по подразбиране за компания {0}",
Please specify,"Моля, посочете",
Please specify a {0},"Моля, посочете {0}",lead
-Pledge Status,Статус на залог,
-Pledge Time,Време за залог,
Printing,Печатане,
Priority,Приоритет,
Priority has been changed to {0}.,Приоритетът е променен на {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Обработка на XML файлове,
Profitability,Доходност,
Project,Проект,
-Proposed Pledges are mandatory for secured Loans,Предложените залози са задължителни за обезпечените заеми,
Provide the academic year and set the starting and ending date.,Посочете учебната година и задайте началната и крайната дата.,
Public token is missing for this bank,Публичен маркер липсва за тази банка,
Publish,публикувам,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Покупка на разписка няма артикул, за който е активирана задържана проба.",
Purchase Return,Покупка Return,
Qty of Finished Goods Item,Брой готови стоки,
-Qty or Amount is mandatroy for loan security,Количеството или сумата е мандатрой за гаранция на заема,
Quality Inspection required for Item {0} to submit,"Проверка на качеството, необходима за изпращане на артикул {0}",
Quantity to Manufacture,Количество за производство,
Quantity to Manufacture can not be zero for the operation {0},Количеството за производство не може да бъде нула за операцията {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Дата на освобождаване трябва да бъде по-голяма или равна на датата на присъединяване,
Rename,Преименувай,
Rename Not Allowed,Преименуването не е позволено,
-Repayment Method is mandatory for term loans,Методът на погасяване е задължителен за срочните заеми,
-Repayment Start Date is mandatory for term loans,Началната дата на погасяване е задължителна за срочните заеми,
Report Item,Елемент на отчета,
Report this Item,Подайте сигнал за този елемент,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,"Количество, запазено за подизпълнение: Количеството суровини за изработка на артикули, възложени на подизпълнители.",
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Ред ({0}): {1} вече се отстъпва от {2},
Rows Added in {0},Редове добавени в {0},
Rows Removed in {0},Редовете са премахнати в {0},
-Sanctioned Amount limit crossed for {0} {1},Пределно ограничената сума е пресечена за {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Сумата на санкционирания заем вече съществува за {0} срещу компания {1},
Save,Запази,
Save Item,Запазване на елемент,
Saved Items,Запазени елементи,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Потребителят {0} е деактивиран,
Users and Permissions,Потребители и права,
Vacancies cannot be lower than the current openings,Свободните места не могат да бъдат по-ниски от сегашните отвори,
-Valid From Time must be lesser than Valid Upto Time.,Валидно от времето трябва да е по-малко от валидното до време.,
Valuation Rate required for Item {0} at row {1},"Степен на оценка, необходим за позиция {0} в ред {1}",
Values Out Of Sync,Стойности извън синхронизирането,
Vehicle Type is required if Mode of Transport is Road,"Тип превозно средство се изисква, ако начинът на транспорт е път",
@@ -4211,7 +4168,6 @@
Add to Cart,Добави в кошницата,
Days Since Last Order,Дни от последната поръчка,
In Stock,В наличност,
-Loan Amount is mandatory,Размерът на заема е задължителен,
Mode Of Payment,Начин на плащане,
No students Found,Няма намерени ученици,
Not in Stock,Не е в наличност,
@@ -4240,7 +4196,6 @@
Group by,Групирай по,
In stock,В наличност,
Item name,Име на артикул,
-Loan amount is mandatory,Размерът на заема е задължителен,
Minimum Qty,Минимален брой,
More details,Повече детайли,
Nature of Supplies,Природа на консумативите,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Общо завършен брой,
Qty to Manufacture,Количество за производство,
Repay From Salary can be selected only for term loans,Погасяване от заплата може да бъде избрано само за срочни заеми,
-No valid Loan Security Price found for {0},Не е намерена валидна цена за сигурност на заема за {0},
-Loan Account and Payment Account cannot be same,Заемната сметка и платежната сметка не могат да бъдат еднакви,
-Loan Security Pledge can only be created for secured loans,Залогът за обезпечение на кредита може да бъде създаден само за обезпечени заеми,
Social Media Campaigns,Кампании в социалните медии,
From Date can not be greater than To Date,От дата не може да бъде по-голяма от до дата,
Please set a Customer linked to the Patient,"Моля, задайте клиент, свързан с пациента",
@@ -6437,7 +6389,6 @@
HR User,ЧР потребителя,
Appointment Letter,Писмо за уговаряне на среща,
Job Applicant,Кандидат За Работа,
-Applicant Name,Заявител Име,
Appointment Date,Дата на назначаване,
Appointment Letter Template,Шаблон писмо за назначаване,
Body,тяло,
@@ -7059,99 +7010,12 @@
Sync in Progress,Синхронизиране в процес,
Hub Seller Name,Име на продавача,
Custom Data,Персонализирани данни,
-Member,Член,
-Partially Disbursed,Частично Изплатени,
-Loan Closure Requested,Изисквано закриване на заем,
Repay From Salary,Погасяване от Заплата,
-Loan Details,Заем - Детайли,
-Loan Type,Вид на кредита,
-Loan Amount,Заета сума,
-Is Secured Loan,Осигурен е заем,
-Rate of Interest (%) / Year,Лихвен процент (%) / Година,
-Disbursement Date,Изплащане - Дата,
-Disbursed Amount,Изплатена сума,
-Is Term Loan,Термин заем ли е,
-Repayment Method,Възстановяване Метод,
-Repay Fixed Amount per Period,Погасяване фиксирана сума за Период,
-Repay Over Number of Periods,Погасяване Над брой периоди,
-Repayment Period in Months,Възстановяването Период в месеци,
-Monthly Repayment Amount,Месечна погасителна сума,
-Repayment Start Date,Начална дата на погасяване,
-Loan Security Details,Детайли за сигурност на заема,
-Maximum Loan Value,Максимална стойност на кредита,
-Account Info,Информация за профила,
-Loan Account,Кредитна сметка,
-Interest Income Account,Сметка Приходи от лихви,
-Penalty Income Account,Сметка за доходи от санкции,
-Repayment Schedule,погасителен план,
-Total Payable Amount,Общо Задължения Сума,
-Total Principal Paid,Общо платена главница,
-Total Interest Payable,"Общо дължима лихва,",
-Total Amount Paid,Обща платена сума,
-Loan Manager,Кредитен мениджър,
-Loan Info,Заем - Информация,
-Rate of Interest,Размерът на лихвата,
-Proposed Pledges,Предложени обещания,
-Maximum Loan Amount,Максимален Размер на заема,
-Repayment Info,Възстановяване Info,
-Total Payable Interest,Общо дължими лихви,
-Against Loan ,Срещу заем,
-Loan Interest Accrual,Начисляване на лихви по заеми,
-Amounts,суми,
-Pending Principal Amount,Висяща главна сума,
-Payable Principal Amount,Дължима главна сума,
-Paid Principal Amount,Платена главница,
-Paid Interest Amount,Платена лихва,
-Process Loan Interest Accrual,Начисляване на лихви по заемни процеси,
-Repayment Schedule Name,Име на графика за погасяване,
Regular Payment,Редовно плащане,
Loan Closure,Закриване на заем,
-Payment Details,Подробности на плащане,
-Interest Payable,Дължими лихви,
-Amount Paid,"Сума, платена",
-Principal Amount Paid,Основна изплатена сума,
-Repayment Details,Подробности за погасяване,
-Loan Repayment Detail,Подробности за изплащането на заема,
-Loan Security Name,Име на сигурността на заема,
-Unit Of Measure,Мерна единица,
-Loan Security Code,Код за сигурност на заема,
-Loan Security Type,Тип на заема,
-Haircut %,Прическа%,
-Loan Details,Подробности за заема,
-Unpledged,Unpledged,
-Pledged,Заложените,
-Partially Pledged,Частично заложено,
-Securities,ценни книжа,
-Total Security Value,Обща стойност на сигурността,
-Loan Security Shortfall,Недостиг на кредитна сигурност,
-Loan ,заем,
-Shortfall Time,Време за недостиг,
-America/New_York,Америка / New_York,
-Shortfall Amount,Сума на недостиг,
-Security Value ,Стойност на сигурността,
-Process Loan Security Shortfall,Дефицит по сигурността на заемния процес,
-Loan To Value Ratio,Съотношение заем към стойност,
-Unpledge Time,Време за сваляне,
-Loan Name,Заем - Име,
Rate of Interest (%) Yearly,Лихвен процент (%) Годишен,
-Penalty Interest Rate (%) Per Day,Наказателна лихва (%) на ден,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Наказателната лихва се начислява ежедневно върху чакащата лихва в случай на забавено погасяване,
-Grace Period in Days,Грейс период за дни,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Брой дни от датата на падежа, до която неустойката няма да бъде начислена в случай на забавяне на изплащането на заема",
-Pledge,залог,
-Post Haircut Amount,Сума на прическата след публикуване,
-Process Type,Тип процес,
-Update Time,Време за актуализация,
-Proposed Pledge,Предложен залог,
-Total Payment,Общо плащане,
-Balance Loan Amount,Баланс на заема,
-Is Accrued,Начислява се,
Salary Slip Loan,Кредит за заплащане,
Loan Repayment Entry,Вписване за погасяване на заем,
-Sanctioned Loan Amount,Санкционирана сума на заема,
-Sanctioned Amount Limit,Ограничен размер на санкционираната сума,
-Unpledge,Unpledge,
-Haircut,подстригване,
MAT-MSH-.YYYY.-,МАТ-MSH-.YYYY.-,
Generate Schedule,Генериране на график,
Schedules,Графици,
@@ -7885,7 +7749,6 @@
Update Series,Актуализация Номериране,
Change the starting / current sequence number of an existing series.,Промяна на изходния / текущия номер за последователност на съществуваща серия.,
Prefix,Префикс,
-Current Value,Текуща стойност,
This is the number of the last created transaction with this prefix,Това е поредният номер на последната създадена сделката с този префикс,
Update Series Number,Актуализация на номер за номериране,
Quotation Lost Reason,Оферта Причина за загубване,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Препоръчано Пренареждане Level,
Lead Details,Потенциален клиент - Детайли,
Lead Owner Efficiency,Водеща ефективност на собственика,
-Loan Repayment and Closure,Погасяване и закриване на заем,
-Loan Security Status,Състояние на сигурността на кредита,
Lost Opportunity,Изгубена възможност,
Maintenance Schedules,Графици за поддръжка,
Material Requests for which Supplier Quotations are not created,Материал Исканията за които не са създадени Доставчик Цитати,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Насочени бройки: {0},
Payment Account is mandatory,Платежната сметка е задължителна,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Ако е отметнато, пълната сума ще бъде приспадната от облагаемия доход, преди да се изчисли данък върху дохода, без да се подават декларация или доказателство.",
-Disbursement Details,Подробности за изплащане,
Material Request Warehouse,Склад за заявки за материали,
Select warehouse for material requests,Изберете склад за заявки за материали,
Transfer Materials For Warehouse {0},Прехвърляне на материали за склад {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Изплатете непотърсена сума от заплата,
Deduction from salary,Приспадане от заплата,
Expired Leaves,Листа с изтекъл срок на годност,
-Reference No,Референтен номер,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,"Процентът на подстригване е процентната разлика между пазарната стойност на обезпечението на заема и стойността, приписана на тази заемна гаранция, когато се използва като обезпечение за този заем.",
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Съотношението заем към стойност изразява съотношението на сумата на заема към стойността на заложената гаранция. Дефицит на обезпечение на заема ще се задейства, ако той падне под определената стойност за който и да е заем",
If this is not checked the loan by default will be considered as a Demand Loan,"Ако това не е отметнато, заемът по подразбиране ще се счита за кредит за търсене",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Тази сметка се използва за резервиране на изплащане на заеми от кредитополучателя, както и за изплащане на заеми на кредитополучателя",
This account is capital account which is used to allocate capital for loan disbursal account ,"Тази сметка е капиталова сметка, която се използва за разпределяне на капитал за сметка за оттегляне на заеми",
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Операция {0} не принадлежи към работната поръчка {1},
Print UOM after Quantity,Отпечатайте UOM след Количество,
Set default {0} account for perpetual inventory for non stock items,"Задайте по подразбиране {0} акаунт за непрекъснат инвентар за артикули, които не са на склад",
-Loan Security {0} added multiple times,Защита на заема {0} добавена няколко пъти,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Заемни ценни книжа с различно съотношение LTV не могат да бъдат заложени срещу един заем,
-Qty or Amount is mandatory for loan security!,Количеството или сумата са задължителни за обезпечение на заема!,
-Only submittted unpledge requests can be approved,Могат да бъдат одобрени само подадени заявки за необвързване,
-Interest Amount or Principal Amount is mandatory,Сумата на лихвата или главницата е задължителна,
-Disbursed Amount cannot be greater than {0},Изплатената сума не може да бъде по-голяма от {0},
-Row {0}: Loan Security {1} added multiple times,Ред {0}: Заем за сигурност {1} е добавен няколко пъти,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,"Ред № {0}: Дочерният елемент не трябва да бъде продуктов пакет. Моля, премахнете елемент {1} и запазете",
Credit limit reached for customer {0},Достигнат е кредитен лимит за клиент {0},
Could not auto create Customer due to the following missing mandatory field(s):,Не можа да се създаде автоматично клиент поради следните липсващи задължителни полета:,
diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv
index 2058bde..af6c1b9 100644
--- a/erpnext/translations/bn.csv
+++ b/erpnext/translations/bn.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","প্রযোজ্য যদি সংস্থাটি স্পা, এসএপিএ বা এসআরএল হয়",
Applicable if the company is a limited liability company,প্রযোজ্য যদি সংস্থাটি একটি সীমাবদ্ধ দায়বদ্ধ সংস্থা হয়,
Applicable if the company is an Individual or a Proprietorship,প্রযোজ্য যদি সংস্থাটি ব্যক্তিগত বা স্বত্বাধিকারী হয়,
-Applicant,আবেদক,
-Applicant Type,আবেদনকারী প্রকার,
Application of Funds (Assets),ফান্ডস (সম্পদ) এর আবেদন,
Application period cannot be across two allocation records,অ্যাপ্লিকেশন সময়সীমা দুটি বরাদ্দ রেকর্ড জুড়ে হতে পারে না,
Application period cannot be outside leave allocation period,আবেদনের সময় বাইরে ছুটি বরাদ্দ সময়ের হতে পারে না,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,ফোলিও নম্বরগুলি সহ উপলব্ধ অংশীদারদের তালিকা,
Loading Payment System,পেমেন্ট সিস্টেম লোড হচ্ছে,
Loan,ঋণ,
-Loan Amount cannot exceed Maximum Loan Amount of {0},ঋণের পরিমাণ সর্বোচ্চ ঋণের পরিমাণ বেশি হতে পারে না {0},
-Loan Application,ঋণ আবেদন,
-Loan Management,ঋণ ব্যবস্থাপনা,
-Loan Repayment,ঋণ পরিশোধ,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,চালানের ছাড় ছাড়ের জন্য anণ শুরুর তারিখ এবং Perণের সময়কাল বাধ্যতামূলক,
Loans (Liabilities),ঋণ (দায়),
Loans and Advances (Assets),ঋণ ও অগ্রিমের (সম্পদ),
@@ -1611,7 +1605,6 @@
Monday,সোমবার,
Monthly,মাসিক,
Monthly Distribution,মাসিক বন্টন,
-Monthly Repayment Amount cannot be greater than Loan Amount,মাসিক পরিশোধ পরিমাণ ঋণের পরিমাণ তার চেয়ে অনেক বেশী হতে পারে না,
More,অধিক,
More Information,অধিক তথ্য,
More than one selection for {0} not allowed,{0} এর জন্য একাধিক নির্বাচন অনুমোদিত নয়,
@@ -1884,11 +1877,9 @@
Pay {0} {1},{0} {1} পে,
Payable,প্রদেয়,
Payable Account,প্রদেয় অ্যাকাউন্ট,
-Payable Amount,প্রদেয় পরিমান,
Payment,প্রদান,
Payment Cancelled. Please check your GoCardless Account for more details,পেমেন্ট বাতিল আরো তথ্যের জন্য আপনার GoCardless অ্যাকাউন্ট চেক করুন,
Payment Confirmation,বিল প্রদানের সত্ততা,
-Payment Date,টাকা প্রদানের তারিখ,
Payment Days,পেমেন্ট দিন,
Payment Document,পেমেন্ট ডকুমেন্ট,
Payment Due Date,পরিশোধযোগ্য তারিখ,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,প্রথম কেনার রসিদ লিখুন দয়া করে,
Please enter Receipt Document,রশিদ ডকুমেন্ট লিখুন দয়া করে,
Please enter Reference date,রেফারেন্স তারিখ লিখুন দয়া করে,
-Please enter Repayment Periods,পরিশোধ সময়কাল প্রবেশ করুন,
Please enter Reqd by Date,তারিখ দ্বারা Reqd লিখুন দয়া করে,
Please enter Woocommerce Server URL,দয়া করে Woocommerce সার্ভার URL প্রবেশ করুন,
Please enter Write Off Account,"অ্যাকাউন্ট বন্ধ লিখতে লিখতে, অনুগ্রহ করে",
@@ -1994,7 +1984,6 @@
Please enter parent cost center,ঊর্ধ্বতন খরচ কেন্দ্র লিখুন দয়া করে,
Please enter quantity for Item {0},আইটেমের জন্য পরিমাণ লিখুন দয়া করে {0},
Please enter relieving date.,তারিখ মুক্তিদান লিখুন.,
-Please enter repayment Amount,ঋণ পরিশোধের পরিমাণ প্রবেশ করুন,
Please enter valid Financial Year Start and End Dates,বৈধ আর্থিক বছরের শুরু এবং শেষ তারিখগুলি লিখুন দয়া করে,
Please enter valid email address,বৈধ ইমেইল ঠিকানা লিখুন,
Please enter {0} first,প্রথম {0} লিখুন দয়া করে,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,দামে আরও পরিমাণের উপর ভিত্তি করে ফিল্টার করা হয়.,
Primary Address Details,প্রাথমিক ঠিকানা বিবরণ,
Primary Contact Details,প্রাথমিক যোগাযোগের বিবরণ,
-Principal Amount,প্রধান পরিমাণ,
Print Format,মুদ্রণ বিন্যাস,
Print IRS 1099 Forms,আইআরএস 1099 ফর্মগুলি মুদ্রণ করুন,
Print Report Card,রিপোর্ট কার্ড মুদ্রণ করুন,
@@ -2550,7 +2538,6 @@
Sample Collection,নমুনা সংগ্রহ,
Sample quantity {0} cannot be more than received quantity {1},নমুনা পরিমাণ {0} প্রাপ্ত পরিমাণের চেয়ে বেশি হতে পারে না {1},
Sanctioned,অনুমোদিত,
-Sanctioned Amount,অনুমোদিত পরিমাণ,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,অনুমোদিত পরিমাণ সারি মধ্যে দাবি করে বেশি পরিমাণে হতে পারে না {0}.,
Sand,বালি,
Saturday,শনিবার,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} ইতিমধ্যে একটি মূল পদ্ধতি আছে {1}।,
API,এপিআই,
Annual,বার্ষিক,
-Approved,অনুমোদিত,
Change,পরিবর্তন,
Contact Email,যোগাযোগের ই - মেইল,
Export Type,রপ্তানি প্রকার,
@@ -3571,7 +3557,6 @@
Account Value,অ্যাকাউন্টের মান,
Account is mandatory to get payment entries,পেমেন্ট এন্ট্রি পেতে অ্যাকাউন্ট বাধ্যতামূলক,
Account is not set for the dashboard chart {0},ড্যাশবোর্ড চার্টের জন্য অ্যাকাউন্ট সেট করা নেই {0},
-Account {0} does not belong to company {1},অ্যাকাউন্ট {0} কোম্পানি অন্তর্গত নয় {1},
Account {0} does not exists in the dashboard chart {1},অ্যাকাউন্ট {0 the ড্যাশবোর্ড চার্টে বিদ্যমান নেই {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,অ্যাকাউন্ট: <b>{0</b> মূলধন কাজ চলছে এবং জার্নাল এন্ট্রি দ্বারা আপডেট করা যাবে না,
Account: {0} is not permitted under Payment Entry,অ্যাকাউন্ট: Ent 0 Pay পেমেন্ট এন্ট্রি অধীনে অনুমোদিত নয়,
@@ -3582,7 +3567,6 @@
Activity,কার্যকলাপ,
Add / Manage Email Accounts.,ইমেইল একাউন্ট পরিচালনা / যুক্ত করো.,
Add Child,শিশু করো,
-Add Loan Security,Securityণ সুরক্ষা যুক্ত করুন,
Add Multiple,একাধিক যোগ করুন,
Add Participants,অংশগ্রহণকারীদের যোগ করুন,
Add to Featured Item,বৈশিষ্ট্যযুক্ত আইটেম যোগ করুন,
@@ -3593,15 +3577,12 @@
Address Line 1,ঠিকানা লাইন 1,
Addresses,ঠিকানা,
Admission End Date should be greater than Admission Start Date.,ভর্তির সমাপ্তির তারিখ ভর্তি শুরুর তারিখের চেয়ে বেশি হওয়া উচিত।,
-Against Loan,Anণের বিপরীতে,
-Against Loan:,Anণের বিপরীতে:,
All,সব,
All bank transactions have been created,সমস্ত ব্যাংক লেনদেন তৈরি করা হয়েছে,
All the depreciations has been booked,সমস্ত অবমূল্যায়ন বুক করা হয়েছে,
Allocation Expired!,বরাদ্দের মেয়াদ শেষ!,
Allow Resetting Service Level Agreement from Support Settings.,সহায়তা সেটিংস থেকে পরিষেবা স্তরের চুক্তি পুনরায় সেট করার অনুমতি দিন।,
Amount of {0} is required for Loan closure,Closureণ বন্ধের জন্য {0} পরিমাণ প্রয়োজন,
-Amount paid cannot be zero,প্রদত্ত পরিমাণ শূন্য হতে পারে না,
Applied Coupon Code,প্রয়োগকৃত কুপন কোড,
Apply Coupon Code,কুপন কোড প্রয়োগ করুন,
Appointment Booking,অ্যাপয়েন্টমেন্ট বুকিং,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,ড্রাইভার ঠিকানা অনুপস্থিত থাকায় আগমনের সময় গণনা করা যায় না।,
Cannot Optimize Route as Driver Address is Missing.,ড্রাইভারের ঠিকানা মিস হওয়ায় রুটটি অনুকূল করা যায় না।,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,Dependent 1 its এর নির্ভরশীল টাস্ক com 1 c কমপ্লিট / বাতিল না হওয়ায় কাজটি সম্পূর্ণ করতে পারবেন না।,
-Cannot create loan until application is approved,আবেদন অনুমোদিত না হওয়া পর্যন্ত loanণ তৈরি করতে পারবেন না,
Cannot find a matching Item. Please select some other value for {0}.,একটি মিল খুঁজে খুঁজে পাচ্ছেন না. জন্য {0} অন্য কোনো মান নির্বাচন করুন.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","আইটেম for 0 row সারিতে {1} {2} এর বেশি ওভারবিল করতে পারে না} অতিরিক্ত বিলিংয়ের অনুমতি দেওয়ার জন্য, দয়া করে অ্যাকাউন্ট সেটিংসে ভাতা সেট করুন",
"Capacity Planning Error, planned start time can not be same as end time","সক্ষমতা পরিকল্পনার ত্রুটি, পরিকল্পিত শুরুর সময় শেষ সময়ের মতো হতে পারে না",
@@ -3812,20 +3792,9 @@
Less Than Amount,পরিমাণের চেয়ে কম,
Liabilities,দায়,
Loading...,লোড হচ্ছে ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,প্রস্তাবিত সিকিওরিটি অনুযায়ী anণের পরিমাণ 0। সর্বাধিক loanণের পরিমাণ অতিক্রম করে,
Loan Applications from customers and employees.,গ্রাহক ও কর্মচারীদের কাছ থেকে Applicationsণের আবেদন।,
-Loan Disbursement,Bণ বিতরণ,
Loan Processes,Anণ প্রক্রিয়া,
-Loan Security,Securityণ সুরক্ষা,
-Loan Security Pledge,Securityণ সুরক্ষা প্রতিশ্রুতি,
-Loan Security Pledge Created : {0},Securityণ সুরক্ষা প্রতিশ্রুতি তৈরি: {0},
-Loan Security Price,Securityণ সুরক্ষা মূল্য,
-Loan Security Price overlapping with {0},Security 0 with দিয়ে Securityণ সুরক্ষা মূল্য ওভারল্যাপিং,
-Loan Security Unpledge,Securityণ সুরক্ষা আনপ্লেজ,
-Loan Security Value,Securityণ সুরক্ষা মান,
Loan Type for interest and penalty rates,সুদের এবং জরিমানার হারের জন্য Typeণের ধরণ,
-Loan amount cannot be greater than {0},Anণের পরিমাণ {0 than এর বেশি হতে পারে না,
-Loan is mandatory,Anণ বাধ্যতামূলক,
Loans,ঋণ,
Loans provided to customers and employees.,গ্রাহক এবং কর্মচারীদের প্রদান .ণ।,
Location,অবস্থান,
@@ -3894,7 +3863,6 @@
Pay,বেতন,
Payment Document Type,পেমেন্ট ডকুমেন্ট প্রকার,
Payment Name,পেমেন্ট নাম,
-Penalty Amount,জরিমানার পরিমাণ,
Pending,বিচারাধীন,
Performance,কর্মক্ষমতা,
Period based On,পিরিয়ড ভিত্তিক,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,এই আইটেমটি সম্পাদনা করতে দয়া করে মার্কেটপ্লেস ব্যবহারকারী হিসাবে লগইন করুন।,
Please login as a Marketplace User to report this item.,এই আইটেমটি রিপোর্ট করতে দয়া করে একটি মার্কেটপ্লেস ব্যবহারকারী হিসাবে লগইন করুন।,
Please select <b>Template Type</b> to download template,<b>টেমপ্লেট</b> ডাউনলোড করতে দয়া করে <b>টেম্পলেট টাইপ</b> নির্বাচন করুন,
-Please select Applicant Type first,প্রথমে আবেদনকারী প্রকারটি নির্বাচন করুন,
Please select Customer first,প্রথমে গ্রাহক নির্বাচন করুন,
Please select Item Code first,প্রথমে আইটেম কোডটি নির্বাচন করুন,
-Please select Loan Type for company {0},দয়া করে সংস্থার জন্য anণ প্রকার নির্বাচন করুন {0,
Please select a Delivery Note,একটি বিতরণ নোট নির্বাচন করুন,
Please select a Sales Person for item: {0},আইটেমের জন্য দয়া করে বিক্রয় ব্যক্তি নির্বাচন করুন: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',দয়া করে অন্য একটি অর্থ প্রদানের পদ্ধতি নির্বাচন করুন। ডোরা মুদ্রায় লেনদেন অবলম্বন পাওয়া যায়নি '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},দয়া করে সংস্থার জন্য একটি ডিফল্ট ব্যাংক অ্যাকাউন্ট সেটআপ করুন {0},
Please specify,অনুগ্রহ করে নির্দিষ্ট করুন,
Please specify a {0},দয়া করে একটি {0} নির্দিষ্ট করুন,lead
-Pledge Status,অঙ্গীকার স্থিতি,
-Pledge Time,প্রতিশ্রুতি সময়,
Printing,মুদ্রণ,
Priority,অগ্রাধিকার,
Priority has been changed to {0}.,অগ্রাধিকার পরিবর্তন করে {0} করা হয়েছে},
@@ -3944,7 +3908,6 @@
Processing XML Files,এক্সএমএল ফাইলগুলি প্রক্রিয়া করা হচ্ছে,
Profitability,লাভযোগ্যতা,
Project,প্রকল্প,
-Proposed Pledges are mandatory for secured Loans,সুরক্ষিত forণের জন্য প্রস্তাবিত প্রতিশ্রুতি বাধ্যতামূলক,
Provide the academic year and set the starting and ending date.,শিক্ষাগত বছর সরবরাহ করুন এবং শুরুর এবং শেষের তারিখটি সেট করুন।,
Public token is missing for this bank,এই ব্যাংকের জন্য সর্বজনীন টোকেন অনুপস্থিত,
Publish,প্রকাশ করা,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,ক্রয়ের রশিদে কোনও আইটেম নেই যার জন্য পুনরায় ধরে রাখার নমুনা সক্ষম করা আছে।,
Purchase Return,ক্রয় প্রত্যাবর্তন,
Qty of Finished Goods Item,সমাপ্ত জিনিস আইটেম পরিমাণ,
-Qty or Amount is mandatroy for loan security,পরিমাণ বা পরিমাণ loanণ সুরক্ষার জন্য মানডট্রয়,
Quality Inspection required for Item {0} to submit,আইটেম জমা দেওয়ার জন্য গুণমান পরিদর্শন প্রয়োজন {0।,
Quantity to Manufacture,উত্পাদন পরিমাণ,
Quantity to Manufacture can not be zero for the operation {0},উত্পাদন পরিমাণ {0 operation অপারেশন জন্য শূন্য হতে পারে না,
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,মুক্তির তারিখ অবশ্যই যোগদানের তারিখের চেয়ে বড় বা সমান হতে হবে,
Rename,পুনঃনামকরণ,
Rename Not Allowed,পুনঃনামকরণ অনুমোদিত নয়,
-Repayment Method is mandatory for term loans,মেয়াদী loansণের জন্য পরিশোধের পদ্ধতি বাধ্যতামূলক,
-Repayment Start Date is mandatory for term loans,মেয়াদী loansণের জন্য পরিশোধ পরিশোধের তারিখ বাধ্যতামূলক,
Report Item,আইটেম প্রতিবেদন করুন,
Report this Item,এই আইটেমটি রিপোর্ট করুন,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,সাবকন্ট্রাক্টের জন্য সংরক্ষিত পরিমাণ: উপকন্ট্রাক্ট আইটেমগুলি তৈরি করতে কাঁচামাল পরিমাণ।,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},সারি ({0}): already 1 ইতিমধ্যে {2 ounted এ ছাড় রয়েছে,
Rows Added in {0},সারিগুলি {0 in এ যুক্ত হয়েছে,
Rows Removed in {0},সারিগুলি {0 in এ সরানো হয়েছে,
-Sanctioned Amount limit crossed for {0} {1},অনুমোদিত পরিমাণের সীমাটি {0} {1 for এর জন্য অতিক্রম করেছে,
-Sanctioned Loan Amount already exists for {0} against company {1},অনুমোদিত anণের পরিমাণ ইতিমধ্যে কোম্পানির বিরুদ্ধে {0 for এর জন্য বিদ্যমান {1},
Save,সংরক্ষণ,
Save Item,আইটেম সংরক্ষণ করুন,
Saved Items,সংরক্ষিত আইটেম,
@@ -4135,7 +4093,6 @@
User {0} is disabled,ব্যবহারকারী {0} নিষ্ক্রিয় করা হয়,
Users and Permissions,ব্যবহারকারী এবং অনুমতি,
Vacancies cannot be lower than the current openings,শূন্যপদগুলি বর্তমান খোলার চেয়ে কম হতে পারে না,
-Valid From Time must be lesser than Valid Upto Time.,সময় থেকে বৈধ অবধি বৈধ আপ সময়ের চেয়ে কম হতে হবে।,
Valuation Rate required for Item {0} at row {1},আইটেম for 0 row সারিতে {1} মূল্য মূল্য নির্ধারণ করতে হবে,
Values Out Of Sync,সিঙ্কের বাইরে মানগুলি,
Vehicle Type is required if Mode of Transport is Road,পরিবহনের মোডটি যদি রাস্তা হয় তবে যানবাহনের প্রকারের প্রয়োজন,
@@ -4211,7 +4168,6 @@
Add to Cart,কার্ট যোগ করুন,
Days Since Last Order,শেষ আদেশের দিনগুলি,
In Stock,স্টক ইন,
-Loan Amount is mandatory,Anণের পরিমাণ বাধ্যতামূলক,
Mode Of Payment,পেমেন্ট মোড,
No students Found,কোন ছাত্র পাওয়া যায় নি,
Not in Stock,মজুদ নাই,
@@ -4240,7 +4196,6 @@
Group by,গ্রুপ দ্বারা,
In stock,স্টক ইন,
Item name,আইটেম নাম,
-Loan amount is mandatory,Anণের পরিমাণ বাধ্যতামূলক,
Minimum Qty,ন্যূনতম Qty,
More details,আরো বিস্তারিত,
Nature of Supplies,সরবরাহ প্রকৃতি,
@@ -4409,9 +4364,6 @@
Total Completed Qty,মোট সম্পূর্ণ পরিমাণ,
Qty to Manufacture,উত্পাদনপ্রণালী Qty,
Repay From Salary can be selected only for term loans,বেতন থেকে পরিশোধ কেবল মেয়াদী loansণের জন্য নির্বাচন করা যেতে পারে,
-No valid Loan Security Price found for {0},Valid 0 for এর জন্য কোনও বৈধ Loণ সুরক্ষা মূল্য পাওয়া যায়নি,
-Loan Account and Payment Account cannot be same,Accountণ অ্যাকাউন্ট এবং পেমেন্ট অ্যাকাউন্ট এক হতে পারে না,
-Loan Security Pledge can only be created for secured loans,সুরক্ষিত onlyণের জন্য Securityণ সুরক্ষা প্রতিশ্রুতি তৈরি করা যেতে পারে,
Social Media Campaigns,সামাজিক মিডিয়া প্রচারণা,
From Date can not be greater than To Date,তারিখ থেকে তারিখের চেয়ে বড় হতে পারে না,
Please set a Customer linked to the Patient,দয়া করে রোগীর সাথে সংযুক্ত কোনও গ্রাহক সেট করুন,
@@ -6437,7 +6389,6 @@
HR User,এইচআর ব্যবহারকারী,
Appointment Letter,নিয়োগপত্র,
Job Applicant,কাজ আবেদনকারী,
-Applicant Name,আবেদনকারীর নাম,
Appointment Date,সাক্ষাৎকারের তারিখ,
Appointment Letter Template,অ্যাপয়েন্টমেন্ট লেটার টেম্পলেট,
Body,শরীর,
@@ -7059,99 +7010,12 @@
Sync in Progress,অগ্রগতিতে সিঙ্ক,
Hub Seller Name,হাব বিক্রেতা নাম,
Custom Data,কাস্টম ডেটা,
-Member,সদস্য,
-Partially Disbursed,আংশিকভাবে বিতরণ,
-Loan Closure Requested,Cণ বন্ধের অনুরোধ করা হয়েছে,
Repay From Salary,বেতন থেকে শুধা,
-Loan Details,ঋণ বিবরণ,
-Loan Type,ঋণ প্রকার,
-Loan Amount,ঋণের পরিমাণ,
-Is Secured Loan,সুরক্ষিত .ণ,
-Rate of Interest (%) / Year,ইন্টারেস্ট (%) / বর্ষসেরা হার,
-Disbursement Date,ব্যয়ন তারিখ,
-Disbursed Amount,বিতরণকৃত পরিমাণ,
-Is Term Loan,ইজ টার্ম লোন,
-Repayment Method,পরিশোধ পদ্ধতি,
-Repay Fixed Amount per Period,শোধ সময়কাল প্রতি নির্দিষ্ট পরিমাণ,
-Repay Over Number of Periods,শোধ ওভার পর্যায়কাল সংখ্যা,
-Repayment Period in Months,মাস মধ্যে ঋণ পরিশোধের সময় সীমা,
-Monthly Repayment Amount,মাসিক পরিশোধ পরিমাণ,
-Repayment Start Date,ফেরত শুরুর তারিখ,
-Loan Security Details,Securityণ সুরক্ষা বিবরণ,
-Maximum Loan Value,সর্বাধিক .ণের মান,
-Account Info,অ্যাকাউন্ট তথ্য,
-Loan Account,ঋণ অ্যাকাউন্ট,
-Interest Income Account,সুদ আয় অ্যাকাউন্ট,
-Penalty Income Account,পেনাল্টি আয় অ্যাকাউন্ট,
-Repayment Schedule,ঋণ পরিশোধের সময় নির্ধারণ,
-Total Payable Amount,মোট প্রদেয় টাকার পরিমাণ,
-Total Principal Paid,মোট অধ্যক্ষ প্রদেয়,
-Total Interest Payable,প্রদেয় মোট সুদ,
-Total Amount Paid,মোট পরিমাণ পরিশোধ,
-Loan Manager,Managerণ ব্যবস্থাপক,
-Loan Info,ঋণ তথ্য,
-Rate of Interest,সুদের হার,
-Proposed Pledges,প্রস্তাবিত প্রতিশ্রুতি,
-Maximum Loan Amount,সর্বোচ্চ ঋণের পরিমাণ,
-Repayment Info,ঋণ পরিশোধের তথ্য,
-Total Payable Interest,মোট প্রদেয় সুদের,
-Against Loan ,Anণের বিপরীতে,
-Loan Interest Accrual,Interestণের সুদের পরিমাণ,
-Amounts,রাশি,
-Pending Principal Amount,মুলতুবি অধ্যক্ষের পরিমাণ,
-Payable Principal Amount,প্রদেয় অধ্যক্ষের পরিমাণ,
-Paid Principal Amount,প্রদত্ত অধ্যক্ষের পরিমাণ,
-Paid Interest Amount,প্রদত্ত সুদের পরিমাণ,
-Process Loan Interest Accrual,প্রক্রিয়া Interestণ সুদের আদায়,
-Repayment Schedule Name,পরিশোধের সময়সূচীর নাম,
Regular Payment,নিয়মিত পেমেন্ট,
Loan Closure,Cণ বন্ধ,
-Payment Details,অর্থ প্রদানের বিবরণ,
-Interest Payable,প্রদেয় সুদ,
-Amount Paid,পরিমাণ অর্থ প্রদান করা,
-Principal Amount Paid,অধ্যক্ষের পরিমাণ পরিশোধিত,
-Repayment Details,Ayণ পরিশোধের বিশদ,
-Loan Repayment Detail,Repণ পরিশোধের বিশদ,
-Loan Security Name,Securityণ সুরক্ষার নাম,
-Unit Of Measure,পরিমাপের একক,
-Loan Security Code,Securityণ সুরক্ষা কোড,
-Loan Security Type,Securityণ সুরক্ষা প্রকার,
-Haircut %,কেশকর্তন %,
-Loan Details,.ণের বিশদ,
-Unpledged,অপ্রতিশ্রুতিবদ্ধ,
-Pledged,প্রতিশ্রুত,
-Partially Pledged,আংশিক প্রতিশ্রুতিবদ্ধ,
-Securities,সিকিউরিটিজ,
-Total Security Value,মোট সুরক্ষা মান,
-Loan Security Shortfall,Securityণ সুরক্ষার ঘাটতি,
-Loan ,ঋণ,
-Shortfall Time,সংক্ষিপ্ত সময়ের,
-America/New_York,আমেরিকা / New_York,
-Shortfall Amount,সংক্ষিপ্ত পরিমাণ,
-Security Value ,সুরক্ষা মান,
-Process Loan Security Shortfall,প্রক্রিয়া Securityণ সুরক্ষা ঘাটতি,
-Loan To Value Ratio,মূল্য অনুপাত Loণ,
-Unpledge Time,আনপ্লেজ সময়,
-Loan Name,ঋণ নাম,
Rate of Interest (%) Yearly,সুদের হার (%) বাত্সরিক,
-Penalty Interest Rate (%) Per Day,পেনাল্টি সুদের হার (%) প্রতি দিন,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,বিলম্বিত ayণ পরিশোধের ক্ষেত্রে পেনাল্টি সুদের হার দৈনিক ভিত্তিতে মুলতুবি সুদের পরিমাণের উপর ধার্য করা হয়,
-Grace Period in Days,দিনগুলিতে গ্রেস পিরিয়ড,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,নির্ধারিত তারিখ থেকে দিন পর্যন্ত penaltyণ পরিশোধে বিলম্বের ক্ষেত্রে জরিমানা আদায় করা হবে না,
-Pledge,অঙ্গীকার,
-Post Haircut Amount,চুল কাটার পরিমাণ পোস্ট করুন,
-Process Type,প্রক্রিয়া প্রকার,
-Update Time,আপডেটের সময়,
-Proposed Pledge,প্রস্তাবিত প্রতিশ্রুতি,
-Total Payment,মোট পরিশোধ,
-Balance Loan Amount,ব্যালেন্স ঋণের পরিমাণ,
-Is Accrued,জমা হয়,
Salary Slip Loan,বেতন স্লিপ ঋণ,
Loan Repayment Entry,Anণ পরিশোধের প্রবেশ,
-Sanctioned Loan Amount,অনুমোদিত anণের পরিমাণ,
-Sanctioned Amount Limit,অনুমোদিত পরিমাণ সীমা,
-Unpledge,Unpledge,
-Haircut,কেশকর্তন,
MAT-MSH-.YYYY.-,Mat-msh-.YYYY.-,
Generate Schedule,সূচি নির্মাণ,
Schedules,সূচী,
@@ -7885,7 +7749,6 @@
Update Series,আপডেট সিরিজ,
Change the starting / current sequence number of an existing series.,একটি বিদ্যমান সিরিজের শুরু / বর্তমান ক্রম সংখ্যা পরিবর্তন করুন.,
Prefix,উপসর্গ,
-Current Value,বর্তমান মূল্য,
This is the number of the last created transaction with this prefix,এই উপসর্গবিশিষ্ট সর্বশেষ নির্মিত লেনদেনের সংখ্যা,
Update Series Number,আপডেট সিরিজ সংখ্যা,
Quotation Lost Reason,উদ্ধৃতি লস্ট কারণ,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise রেকর্ডার শ্রেনী প্রস্তাবিত,
Lead Details,সীসা বিবরণ,
Lead Owner Efficiency,লিড মালিক দক্ষতা,
-Loan Repayment and Closure,Anণ পরিশোধ এবং বন্ধ,
-Loan Security Status,Securityণের সুরক্ষা স্থিতি,
Lost Opportunity,হারানো সুযোগ,
Maintenance Schedules,রক্ষণাবেক্ষণ সময়সূচী,
Material Requests for which Supplier Quotations are not created,"সরবরাহকারী এবার তৈরি করা যাবে না, যার জন্য উপাদান অনুরোধ",
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},লক্ষ্য হিসাবে গণনা: {0},
Payment Account is mandatory,পেমেন্ট অ্যাকাউন্ট বাধ্যতামূলক,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","যদি যাচাই করা হয়, কোনও ঘোষণা বা প্রমাণ জমা না দিয়ে আয়কর গণনার আগে করযোগ্য আয় থেকে পুরো পরিমাণটি কেটে নেওয়া হবে।",
-Disbursement Details,বিতরণ বিশদ,
Material Request Warehouse,উপাদান অনুরোধ গুদাম,
Select warehouse for material requests,উপাদান অনুরোধের জন্য গুদাম নির্বাচন করুন,
Transfer Materials For Warehouse {0},গুদাম {0 For জন্য উপাদান স্থানান্তর,
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,বেতন থেকে দায়হীন পরিমাণ পরিশোধ করুন ay,
Deduction from salary,বেতন থেকে ছাড়,
Expired Leaves,মেয়াদ শেষ হয়ে গেছে,
-Reference No,রেফারেন্স নং,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,চুল কাটা শতাংশ হ'ল Securityণ সুরক্ষার বাজার মূল্য এবং সেই Securityণ সুরক্ষার জন্য স্বীকৃত মানের মধ্যে loan শতাংশের পার্থক্য যখন loanণের জন্য জামানত হিসাবে ব্যবহৃত হয়।,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,Toণ থেকে মূল্য অনুপাতটি প্রতিশ্রুতিবদ্ধ জামানতের মান হিসাবে loanণের পরিমাণের অনুপাত প্রকাশ করে। যদি এটি কোনও loanণের জন্য নির্দিষ্ট মূল্যের নিচে পড়ে তবে একটি loanণ সুরক্ষার ঘাটতি সৃষ্টি হবে,
If this is not checked the loan by default will be considered as a Demand Loan,এটি যদি চেক না করা হয় তবে ডিফল্ট হিসাবে loanণকে ডিমান্ড anণ হিসাবে বিবেচনা করা হবে,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,এই অ্যাকাউন্টটি orণগ্রহীতা থেকে repণ পরিশোধের বুকিং এবং orণগ্রহীতাকে loansণ বিতরণের জন্য ব্যবহৃত হয়,
This account is capital account which is used to allocate capital for loan disbursal account ,এই অ্যাকাউন্টটি মূলধন অ্যাকাউন্ট যা disণ বিতরণ অ্যাকাউন্টের জন্য মূলধন বরাদ্দ করতে ব্যবহৃত হয়,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},অপারেশন {0 the কাজের আদেশের সাথে সম্পর্কিত নয় {1},
Print UOM after Quantity,পরিমাণের পরে ইউওএম প্রিন্ট করুন,
Set default {0} account for perpetual inventory for non stock items,স্টক নন আইটেমগুলির জন্য স্থায়ী ইনভেন্টরির জন্য ডিফল্ট {0} অ্যাকাউন্ট সেট করুন,
-Loan Security {0} added multiple times,Securityণ সুরক্ষা {0 multiple একাধিকবার যুক্ত হয়েছে,
-Loan Securities with different LTV ratio cannot be pledged against one loan,বিভিন্ন এলটিভি অনুপাত সহ anণ সিকিওরিটিগুলি একটি againstণের বিপরীতে প্রতিজ্ঞা করা যায় না,
-Qty or Amount is mandatory for loan security!,Loanণ সুরক্ষার জন্য পরিমাণ বা পরিমাণ বাধ্যতামূলক!,
-Only submittted unpledge requests can be approved,কেবল জমা দেওয়া আনপ্লেজ অনুরোধগুলি অনুমোদিত হতে পারে,
-Interest Amount or Principal Amount is mandatory,সুদের পরিমাণ বা প্রধান পরিমাণ বাধ্যতামূলক,
-Disbursed Amount cannot be greater than {0},বিতরণকৃত পরিমাণ {0 than এর চেয়ে বেশি হতে পারে না,
-Row {0}: Loan Security {1} added multiple times,সারি {0}: Securityণ সুরক্ষা {1 multiple একাধিকবার যুক্ত হয়েছে,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,সারি # {0}: শিশু আইটেম কোনও পণ্য বান্ডেল হওয়া উচিত নয়। আইটেম remove 1 remove এবং সংরক্ষণ করুন দয়া করে,
Credit limit reached for customer {0},গ্রাহকের জন্য Creditণ সীমা পৌঁছেছে {0},
Could not auto create Customer due to the following missing mandatory field(s):,নিম্নলিখিত অনুপস্থিত বাধ্যতামূলক ক্ষেত্রগুলির কারণে গ্রাহককে স্বয়ংক্রিয় তৈরি করতে পারেনি:,
diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv
index 8af5475..7b01c27 100644
--- a/erpnext/translations/bs.csv
+++ b/erpnext/translations/bs.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Primjenjivo ako je tvrtka SpA, SApA ili SRL",
Applicable if the company is a limited liability company,Primjenjivo ako je društvo s ograničenom odgovornošću,
Applicable if the company is an Individual or a Proprietorship,Primjenjivo ako je kompanija fizička osoba ili vlasništvo,
-Applicant,Podnosilac prijave,
-Applicant Type,Tip podnosioca zahteva,
Application of Funds (Assets),Primjena sredstava ( aktiva ),
Application period cannot be across two allocation records,Period primene ne može biti preko dve evidencije alokacije,
Application period cannot be outside leave allocation period,Period aplikacija ne može biti razdoblje raspodjele izvan odsustva,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Spisak dostupnih akcionara sa brojevima folije,
Loading Payment System,Uplata platnog sistema,
Loan,Loan,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Iznos kredita ne može biti veći od Maksimalni iznos kredita od {0},
-Loan Application,Aplikacija za kredit,
-Loan Management,Upravljanje zajmovima,
-Loan Repayment,Otplata kredita,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Datum početka i Period zajma su obavezni da biste spremili popust na računu,
Loans (Liabilities),Zajmovi (pasiva),
Loans and Advances (Assets),Zajmovi i predujmovi (aktiva),
@@ -1611,7 +1605,6 @@
Monday,Ponedjeljak,
Monthly,Mjesečno,
Monthly Distribution,Mjesečni Distribucija,
-Monthly Repayment Amount cannot be greater than Loan Amount,Mjesečna otplate iznos ne može biti veći od iznos kredita,
More,Više,
More Information,Više informacija,
More than one selection for {0} not allowed,Više od jednog izbora za {0} nije dozvoljeno,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Plaćajte {0} {1},
Payable,Plativ,
Payable Account,Račun se plaća,
-Payable Amount,Iznos koji treba platiti,
Payment,Plaćanje,
Payment Cancelled. Please check your GoCardless Account for more details,Plaćanje je otkazano. Molimo provjerite svoj GoCardless račun za više detalja,
Payment Confirmation,Potvrda o plaćanju,
-Payment Date,Datum plaćanja,
Payment Days,Plaćanja Dana,
Payment Document,plaćanje Document,
Payment Due Date,Plaćanje Due Date,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Molimo prvo unesite Kupovina prijem,
Please enter Receipt Document,Unesite dokument o prijemu,
Please enter Reference date,Unesite referentni datum,
-Please enter Repayment Periods,Unesite rokovi otplate,
Please enter Reqd by Date,Molimo unesite Reqd po datumu,
Please enter Woocommerce Server URL,Molimo unesite URL adresu Woocommerce Servera,
Please enter Write Off Account,Unesite otpis račun,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Unesite roditelj troška,
Please enter quantity for Item {0},Molimo unesite količinu za točku {0},
Please enter relieving date.,Unesite olakšavanja datum .,
-Please enter repayment Amount,Unesite iznos otplate,
Please enter valid Financial Year Start and End Dates,Molimo vas da unesete važeću finansijsku godinu datume početka i završetka,
Please enter valid email address,Molimo vas da unesete važeću e-mail adresu,
Please enter {0} first,Unesite {0} prvi,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Pravilnik o određivanju cijena dodatno se filtrira na temelju količine.,
Primary Address Details,Primarne adrese,
Primary Contact Details,Primarni kontakt podaci,
-Principal Amount,iznos glavnice,
Print Format,Format ispisa,
Print IRS 1099 Forms,Ispiši obrasce IRS 1099,
Print Report Card,Štampaj izveštaj karticu,
@@ -2550,7 +2538,6 @@
Sample Collection,Prikupljanje uzoraka,
Sample quantity {0} cannot be more than received quantity {1},Količina uzorka {0} ne može biti veća od primljene količine {1},
Sanctioned,sankcionisani,
-Sanctioned Amount,Iznos kažnjeni,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Sankcionisano Iznos ne može biti veći od potraživanja Iznos u nizu {0}.,
Sand,Pesak,
Saturday,Subota,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} već ima roditeljsku proceduru {1}.,
API,API,
Annual,godišnji,
-Approved,Odobreno,
Change,Promjena,
Contact Email,Kontakt email,
Export Type,Tip izvoza,
@@ -3571,7 +3557,6 @@
Account Value,Vrijednost računa,
Account is mandatory to get payment entries,Račun je obavezan za unos plaćanja,
Account is not set for the dashboard chart {0},Za grafikon nadzorne ploče nije postavljen račun {0},
-Account {0} does not belong to company {1},Konto {0} ne pripada preduzeću {1},
Account {0} does not exists in the dashboard chart {1},Račun {0} ne postoji u grafikonu nadzorne ploče {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Račun: <b>{0}</b> je kapital Ne radi se i ne može se ažurirati unos u časopisu,
Account: {0} is not permitted under Payment Entry,Račun: {0} nije dozvoljen unosom plaćanja,
@@ -3582,7 +3567,6 @@
Activity,Aktivnost,
Add / Manage Email Accounts.,Dodaj / Upravljanje Email Accounts.,
Add Child,Dodaj podređenu stavku,
-Add Loan Security,Dodajte osiguranje kredita,
Add Multiple,dodavanje više,
Add Participants,Dodajte Učesnike,
Add to Featured Item,Dodaj u istaknuti artikl,
@@ -3593,15 +3577,12 @@
Address Line 1,Adresa - linija 1,
Addresses,Adrese,
Admission End Date should be greater than Admission Start Date.,Datum završetka prijema trebao bi biti veći od datuma početka upisa.,
-Against Loan,Protiv zajma,
-Against Loan:,Protiv zajma:,
All,Sve,
All bank transactions have been created,Sve bankarske transakcije su stvorene,
All the depreciations has been booked,Sve amortizacije su knjižene,
Allocation Expired!,Raspored je istekao!,
Allow Resetting Service Level Agreement from Support Settings.,Dopustite resetiranje sporazuma o nivou usluge iz postavki podrške.,
Amount of {0} is required for Loan closure,Za zatvaranje zajma potreban je iznos {0},
-Amount paid cannot be zero,Plaćeni iznos ne može biti nula,
Applied Coupon Code,Primenjeni kod kupona,
Apply Coupon Code,Primijenite kupon kod,
Appointment Booking,Rezervacija termina,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,Ne mogu izračunati vrijeme dolaska jer nedostaje adresa vozača.,
Cannot Optimize Route as Driver Address is Missing.,Ruta ne može da se optimizira jer nedostaje adresa vozača.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,Ne mogu dovršiti zadatak {0} jer njegov ovisni zadatak {1} nije dovršen / otkazan.,
-Cannot create loan until application is approved,Nije moguće kreiranje zajma dok aplikacija ne bude odobrena,
Cannot find a matching Item. Please select some other value for {0}.,Ne možete pronaći stavku koja se podudara. Molimo odaberite neki drugi vrijednost za {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Ne mogu se preplatiti za stavku {0} u redu {1} više od {2}. Da biste omogućili prekomerno naplaćivanje, molimo postavite dodatak u Postavkama računa",
"Capacity Planning Error, planned start time can not be same as end time","Pogreška planiranja kapaciteta, planirano vrijeme početka ne može biti isto koliko i vrijeme završetka",
@@ -3812,20 +3792,9 @@
Less Than Amount,Manje od iznosa,
Liabilities,Obaveze,
Loading...,Učitavanje ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Iznos zajma premašuje maksimalni iznos zajma od {0} po predloženim vrijednosnim papirima,
Loan Applications from customers and employees.,Prijave za zajmove od kupaca i zaposlenih.,
-Loan Disbursement,Isplata zajma,
Loan Processes,Procesi zajma,
-Loan Security,Zajam zajma,
-Loan Security Pledge,Zalog za zajam kredita,
-Loan Security Pledge Created : {0},Stvoreno jamstvo zajma: {0},
-Loan Security Price,Cijena garancije zajma,
-Loan Security Price overlapping with {0},Cijena osiguranja zajma se preklapa s {0},
-Loan Security Unpledge,Bez plaćanja zajma,
-Loan Security Value,Vrijednost zajma kredita,
Loan Type for interest and penalty rates,Vrsta kredita za kamate i zatezne stope,
-Loan amount cannot be greater than {0},Iznos zajma ne može biti veći od {0},
-Loan is mandatory,Zajam je obavezan,
Loans,Krediti,
Loans provided to customers and employees.,Krediti kupcima i zaposlenima.,
Location,Lokacija,
@@ -3894,7 +3863,6 @@
Pay,Platiti,
Payment Document Type,Vrsta dokumenta plaćanja,
Payment Name,Naziv plaćanja,
-Penalty Amount,Iznos kazne,
Pending,Čekanje,
Performance,Performanse,
Period based On,Period zasnovan na,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Prijavite se kao Korisnik Marketplace-a da biste uredili ovu stavku.,
Please login as a Marketplace User to report this item.,Prijavite se kao korisnik Marketplacea kako biste prijavili ovu stavku.,
Please select <b>Template Type</b> to download template,Molimo odaberite <b>Vrsta predloška</b> za preuzimanje predloška,
-Please select Applicant Type first,Prvo odaberite vrstu prijavitelja,
Please select Customer first,Prvo odaberite kupca,
Please select Item Code first,Prvo odaberite šifru predmeta,
-Please select Loan Type for company {0},Molimo odaberite vrstu kredita za kompaniju {0},
Please select a Delivery Note,Odaberite bilješku o dostavi,
Please select a Sales Person for item: {0},Izaberite prodajnu osobu za predmet: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Odaberite drugi način plaćanja. Pruga ne podržava transakcije u valuti '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Postavite zadani bankovni račun za kompaniju {0},
Please specify,Navedite,
Please specify a {0},Navedite {0},lead
-Pledge Status,Status zaloga,
-Pledge Time,Vreme zaloga,
Printing,Štampanje,
Priority,Prioritet,
Priority has been changed to {0}.,Prioritet je promijenjen u {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Obrada XML datoteka,
Profitability,Profitabilnost,
Project,Projekat,
-Proposed Pledges are mandatory for secured Loans,Predložene zaloge su obavezne za osigurane zajmove,
Provide the academic year and set the starting and ending date.,Navedite akademsku godinu i postavite datum početka i završetka.,
Public token is missing for this bank,Javni token nedostaje za ovu banku,
Publish,Objavite,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,Kupoprodajna potvrda nema stavku za koju je omogućen zadržati uzorak.,
Purchase Return,Kupnja Povratak,
Qty of Finished Goods Item,Količina proizvoda gotove robe,
-Qty or Amount is mandatroy for loan security,Količina ili iznos je mandatroy za osiguranje kredita,
Quality Inspection required for Item {0} to submit,Inspekcija kvaliteta potrebna za podnošenje predmeta {0},
Quantity to Manufacture,Količina za proizvodnju,
Quantity to Manufacture can not be zero for the operation {0},Količina za proizvodnju ne može biti nula za operaciju {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Datum oslobađanja mora biti veći ili jednak datumu pridruživanja,
Rename,preimenovati,
Rename Not Allowed,Preimenovanje nije dozvoljeno,
-Repayment Method is mandatory for term loans,Način otplate je obavezan za oročene kredite,
-Repayment Start Date is mandatory for term loans,Datum početka otplate je obavezan za oročene kredite,
Report Item,Izvještaj,
Report this Item,Prijavi ovu stavku,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Količina rezervisanog za podugovor: Količina sirovina za izradu predmeta koji su predmet podugovora.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Red ({0}): {1} već je diskontiran u {2},
Rows Added in {0},Redovi dodani u {0},
Rows Removed in {0},Redovi su uklonjeni za {0},
-Sanctioned Amount limit crossed for {0} {1},Granica sankcionisanog iznosa pređena za {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Već postoji sankcionirani iznos zajma za {0} protiv kompanije {1},
Save,Snimi,
Save Item,Spremi stavku,
Saved Items,Spremljene stavke,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Korisnik {0} je onemogućen,
Users and Permissions,Korisnici i dozvole,
Vacancies cannot be lower than the current openings,Slobodna radna mjesta ne mogu biti niža od postojećih,
-Valid From Time must be lesser than Valid Upto Time.,Vrijedi od vremena mora biti kraće od Važećeg vremena uputa.,
Valuation Rate required for Item {0} at row {1},Stopa vrednovanja potrebna za poziciju {0} u retku {1},
Values Out Of Sync,Vrijednosti van sinkronizacije,
Vehicle Type is required if Mode of Transport is Road,Vrsta vozila je obavezna ako je način prevoza cestovni,
@@ -4211,7 +4168,6 @@
Add to Cart,Dodaj u košaricu,
Days Since Last Order,Dani od poslednje narudžbe,
In Stock,U Stock,
-Loan Amount is mandatory,Iznos zajma je obavezan,
Mode Of Payment,Način plaćanja,
No students Found,Nije pronađen nijedan student,
Not in Stock,Nije raspoloživo,
@@ -4240,7 +4196,6 @@
Group by,Group By,
In stock,Na zalihama,
Item name,Naziv artikla,
-Loan amount is mandatory,Iznos zajma je obavezan,
Minimum Qty,Minimalni količina,
More details,Više informacija,
Nature of Supplies,Nature of Supplies,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Ukupno završeno Količina,
Qty to Manufacture,Količina za proizvodnju,
Repay From Salary can be selected only for term loans,Otplata plaće može se odabrati samo za oročene kredite,
-No valid Loan Security Price found for {0},Nije pronađena valjana cijena osiguranja zajma za {0},
-Loan Account and Payment Account cannot be same,Račun zajma i račun za plaćanje ne mogu biti isti,
-Loan Security Pledge can only be created for secured loans,Zalog osiguranja kredita može se stvoriti samo za osigurane kredite,
Social Media Campaigns,Kampanje na društvenim mrežama,
From Date can not be greater than To Date,Od datuma ne može biti veći od datuma,
Please set a Customer linked to the Patient,Postavite kupca povezanog s pacijentom,
@@ -6437,7 +6389,6 @@
HR User,HR korisnika,
Appointment Letter,Pismo o imenovanju,
Job Applicant,Posao podnositelj,
-Applicant Name,Podnositelj zahtjeva Ime,
Appointment Date,Datum imenovanja,
Appointment Letter Template,Predložak pisma o imenovanju,
Body,Telo,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sinhronizacija u toku,
Hub Seller Name,Hub Ime prodavca,
Custom Data,Korisnički podaci,
-Member,Član,
-Partially Disbursed,djelomično Isplaćeno,
-Loan Closure Requested,Zatraženo zatvaranje zajma,
Repay From Salary,Otplatiti iz Plata,
-Loan Details,kredit Detalji,
-Loan Type,Vrsta kredita,
-Loan Amount,Iznos kredita,
-Is Secured Loan,Zajam je osiguran,
-Rate of Interest (%) / Year,Kamatnu stopu (%) / godina,
-Disbursement Date,datuma isplate,
-Disbursed Amount,Izplaćena suma,
-Is Term Loan,Term zajam,
-Repayment Method,otplata Način,
-Repay Fixed Amount per Period,Otplatiti fiksni iznos po periodu,
-Repay Over Number of Periods,Otplatiti Preko broj perioda,
-Repayment Period in Months,Rok otplate u mjesecima,
-Monthly Repayment Amount,Mjesečna otplate Iznos,
-Repayment Start Date,Datum početka otplate,
-Loan Security Details,Pojedinosti o zajmu,
-Maximum Loan Value,Maksimalna vrijednost zajma,
-Account Info,Account Info,
-Loan Account,Račun zajma,
-Interest Income Account,Prihod od kamata računa,
-Penalty Income Account,Račun primanja penala,
-Repayment Schedule,otplata Raspored,
-Total Payable Amount,Ukupan iznos,
-Total Principal Paid,Ukupno plaćeno glavnice,
-Total Interest Payable,Ukupno kamata,
-Total Amount Paid,Ukupan iznos plaćen,
-Loan Manager,Menadžer kredita,
-Loan Info,kredit Info,
-Rate of Interest,Kamatna stopa,
-Proposed Pledges,Predložena obećanja,
-Maximum Loan Amount,Maksimalni iznos kredita,
-Repayment Info,otplata Info,
-Total Payable Interest,Ukupno plaćaju interesa,
-Against Loan ,Protiv zajma,
-Loan Interest Accrual,Prihodi od kamata na zajmove,
-Amounts,Iznosi,
-Pending Principal Amount,Na čekanju glavni iznos,
-Payable Principal Amount,Plativi glavni iznos,
-Paid Principal Amount,Plaćeni iznos glavnice,
-Paid Interest Amount,Iznos plaćene kamate,
-Process Loan Interest Accrual,Proces obračuna kamata na zajmove,
-Repayment Schedule Name,Naziv rasporeda otplate,
Regular Payment,Redovna uplata,
Loan Closure,Zatvaranje zajma,
-Payment Details,Detalji plaćanja,
-Interest Payable,Kamata se plaća,
-Amount Paid,Plaćeni iznos,
-Principal Amount Paid,Iznos glavnice,
-Repayment Details,Detalji otplate,
-Loan Repayment Detail,Detalji otplate zajma,
-Loan Security Name,Naziv osiguranja zajma,
-Unit Of Measure,Jedinica mjere,
-Loan Security Code,Kôd za sigurnost kredita,
-Loan Security Type,Vrsta osiguranja zajma,
-Haircut %,Šišanje%,
-Loan Details,Detalji o zajmu,
-Unpledged,Nepotpunjeno,
-Pledged,Založeno,
-Partially Pledged,Djelomično založeno,
-Securities,Hartije od vrednosti,
-Total Security Value,Ukupna vrednost sigurnosti,
-Loan Security Shortfall,Nedostatak osiguranja zajma,
-Loan ,Loan,
-Shortfall Time,Vreme kraćenja,
-America/New_York,Amerika / New_York,
-Shortfall Amount,Iznos manjka,
-Security Value ,Vrijednost sigurnosti,
-Process Loan Security Shortfall,Nedostatak sigurnosti zajma u procesu,
-Loan To Value Ratio,Odnos zajma do vrijednosti,
-Unpledge Time,Vreme odvrtanja,
-Loan Name,kredit ime,
Rate of Interest (%) Yearly,Kamatnu stopu (%) Godišnji,
-Penalty Interest Rate (%) Per Day,Kamatna stopa (%) po danu,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Zatezna kamata se svakodnevno obračunava na viši iznos kamate u slučaju kašnjenja sa otplatom,
-Grace Period in Days,Grace period u danima,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Broj dana od datuma dospijeća do kojeg se kazna neće naplatiti u slučaju kašnjenja u otplati kredita,
-Pledge,Zalog,
-Post Haircut Amount,Iznos pošiljanja frizure,
-Process Type,Tip procesa,
-Update Time,Vreme ažuriranja,
-Proposed Pledge,Predloženo založno pravo,
-Total Payment,Ukupna uplata,
-Balance Loan Amount,Balance Iznos kredita,
-Is Accrued,Je nagomilano,
Salary Slip Loan,Loan Slip Loan,
Loan Repayment Entry,Otplata zajma,
-Sanctioned Loan Amount,Iznos sankcije zajma,
-Sanctioned Amount Limit,Limitirani iznos ograničenja,
-Unpledge,Unpledge,
-Haircut,Šišanje,
MAT-MSH-.YYYY.-,MAT-MSH-YYYY.-,
Generate Schedule,Generiranje Raspored,
Schedules,Rasporedi,
@@ -7885,7 +7749,6 @@
Update Series,Update serija,
Change the starting / current sequence number of an existing series.,Promjena polaznu / tekući redni broj postojeće serije.,
Prefix,Prefiks,
-Current Value,Trenutna vrijednost,
This is the number of the last created transaction with this prefix,To je broj zadnjeg stvorio transakcije s ovim prefiksom,
Update Series Number,Update serije Broj,
Quotation Lost Reason,Razlog nerealizirane ponude,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Preporučio redoslijeda Level,
Lead Details,Detalji potenciajalnog kupca,
Lead Owner Efficiency,Lead Vlasnik efikasnost,
-Loan Repayment and Closure,Otplata i zatvaranje zajma,
-Loan Security Status,Status osiguranja kredita,
Lost Opportunity,Izgubljena prilika,
Maintenance Schedules,Rasporedi održavanja,
Material Requests for which Supplier Quotations are not created,Materijalni Zahtjevi za koje Supplier Citati nisu stvorene,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Broj ciljanih brojeva: {0},
Payment Account is mandatory,Račun za plaćanje je obavezan,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Ako se označi, puni iznos odbit će se od oporezivog dohotka prije izračuna poreza na dohodak bez ikakve izjave ili podnošenja dokaza.",
-Disbursement Details,Detalji isplate,
Material Request Warehouse,Skladište zahtjeva za materijalom,
Select warehouse for material requests,Odaberite skladište za zahtjeve za materijalom,
Transfer Materials For Warehouse {0},Transfer materijala za skladište {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Otplatite neiskorišteni iznos iz plate,
Deduction from salary,Odbitak od plate,
Expired Leaves,Isteklo lišće,
-Reference No,Referenca br,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Procenat šišanja je procentualna razlika između tržišne vrijednosti zajma zajma i vrijednosti koja se pripisuje tom zajmu kada se koristi kao kolateral za taj zajam.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,Odnos zajma i vrijednosti izražava odnos iznosa zajma prema vrijednosti založenog vrijednosnog papira. Propust osiguranja zajma pokrenut će se ako padne ispod navedene vrijednosti za bilo koji zajam,
If this is not checked the loan by default will be considered as a Demand Loan,"Ako ovo nije potvrđeno, zajam će se prema zadanim postavkama smatrati zajmom na zahtjev",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ovaj račun koristi se za rezerviranje otplate zajma od zajmoprimca i za isplatu zajmova zajmoprimcu,
This account is capital account which is used to allocate capital for loan disbursal account ,Ovaj račun je račun kapitala koji se koristi za alokaciju kapitala za račun izdvajanja kredita,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Operacija {0} ne pripada radnom nalogu {1},
Print UOM after Quantity,Ispis UOM nakon količine,
Set default {0} account for perpetual inventory for non stock items,Postavite zadani {0} račun za vječni inventar za stavke koje nisu na zalihi,
-Loan Security {0} added multiple times,Sigurnost kredita {0} dodana je više puta,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Garancije zajma sa različitim odnosom LTV ne mogu se založiti za jedan zajam,
-Qty or Amount is mandatory for loan security!,Količina ili iznos je obavezan za osiguranje kredita!,
-Only submittted unpledge requests can be approved,Mogu se odobriti samo podneseni zahtjevi za neupitništvo,
-Interest Amount or Principal Amount is mandatory,Iznos kamate ili iznos glavnice je obavezan,
-Disbursed Amount cannot be greater than {0},Isplaćeni iznos ne može biti veći od {0},
-Row {0}: Loan Security {1} added multiple times,Red {0}: Sigurnost zajma {1} dodan je više puta,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Redak {0}: Podređena stavka ne bi trebala biti paket proizvoda. Uklonite stavku {1} i spremite,
Credit limit reached for customer {0},Dosegnuto kreditno ograničenje za kupca {0},
Could not auto create Customer due to the following missing mandatory field(s):,Nije moguće automatski kreirati kupca zbog sljedećih obaveznih polja koja nedostaju:,
diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv
index 44538e9..796379c 100644
--- a/erpnext/translations/ca.csv
+++ b/erpnext/translations/ca.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Aplicable si l'empresa és SpA, SApA o SRL",
Applicable if the company is a limited liability company,Aplicable si l'empresa és una societat de responsabilitat limitada,
Applicable if the company is an Individual or a Proprietorship,Aplicable si l'empresa és una persona física o privada,
-Applicant,Sol · licitant,
-Applicant Type,Tipus de sol·licitant,
Application of Funds (Assets),Aplicació de fons (actius),
Application period cannot be across two allocation records,El període d'aplicació no pot estar en dos registres d'assignació,
Application period cannot be outside leave allocation period,Període d'aplicació no pot ser període d'assignació llicència fos,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Llista d'accionistes disponibles amb números de foli,
Loading Payment System,S'està carregant el sistema de pagament,
Loan,Préstec,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Suma del préstec no pot excedir quantitat màxima del préstec de {0},
-Loan Application,Sol·licitud de préstec,
-Loan Management,Gestió de préstecs,
-Loan Repayment,reemborsament dels préstecs,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,La data d’inici del préstec i el període de préstec són obligatoris per guardar el descompte de la factura,
Loans (Liabilities),Préstecs (passius),
Loans and Advances (Assets),Préstecs i bestretes (Actius),
@@ -1611,7 +1605,6 @@
Monday,Dilluns,
Monthly,Mensual,
Monthly Distribution,Distribució mensual,
-Monthly Repayment Amount cannot be greater than Loan Amount,Quantitat Mensual La devolució no pot ser més gran que Suma del préstec,
More,Més,
More Information,Més informació,
More than one selection for {0} not allowed,No s’admeten més d’una selecció per a {0},
@@ -1884,11 +1877,9 @@
Pay {0} {1},Pagueu {0} {1},
Payable,Pagador,
Payable Account,Compte per Pagar,
-Payable Amount,Import pagable,
Payment,Pagament,
Payment Cancelled. Please check your GoCardless Account for more details,"Pagament cancel·lat. Si us plau, consulteu el vostre compte GoCardless per obtenir més detalls",
Payment Confirmation,Confirmació de pagament,
-Payment Date,Data de pagament,
Payment Days,Dies de pagament,
Payment Document,El pagament del document,
Payment Due Date,Data de pagament,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Si us plau primer entra el rebut de compra,
Please enter Receipt Document,"Si us plau, introdueixi recepció de documents",
Please enter Reference date,"Si us plau, introduïu la data de referència",
-Please enter Repayment Periods,"Si us plau, introdueixi terminis d'amortització",
Please enter Reqd by Date,Introduïu Reqd per data,
Please enter Woocommerce Server URL,Introduïu l'URL del servidor Woocommerce,
Please enter Write Off Account,Si us plau indica el Compte d'annotació,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,"Si us plau, introduïu el centre de cost dels pares",
Please enter quantity for Item {0},Introduïu la quantitat d'articles per {0},
Please enter relieving date.,Please enter relieving date.,
-Please enter repayment Amount,"Si us plau, ingressi la suma d'amortització",
Please enter valid Financial Year Start and End Dates,"Si us plau, introdueixi Any vàlida Financera dates inicial i final",
Please enter valid email address,"Si us plau, introdueixi l'adreça de correu electrònic vàlida",
Please enter {0} first,"Si us plau, introdueixi {0} primer",
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Regles de les tarifes es filtren més basat en la quantitat.,
Primary Address Details,Detalls de l'adreça principal,
Primary Contact Details,Detalls de contacte primaris,
-Principal Amount,Suma de Capital,
Print Format,Format d'impressió,
Print IRS 1099 Forms,Imprimeix formularis IRS 1099,
Print Report Card,Impressió de la targeta d'informe,
@@ -2550,7 +2538,6 @@
Sample Collection,Col.lecció de mostres,
Sample quantity {0} cannot be more than received quantity {1},La quantitat de mostra {0} no pot ser més de la quantitat rebuda {1},
Sanctioned,sancionada,
-Sanctioned Amount,Sanctioned Amount,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Import sancionat no pot ser major que la reclamació Quantitat a la fila {0}.,
Sand,Sorra,
Saturday,Dissabte,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} ja té un procediment progenitor {1}.,
API,API,
Annual,Anual,
-Approved,Aprovat,
Change,Canvi,
Contact Email,Correu electrònic de contacte,
Export Type,Tipus d'exportació,
@@ -3571,7 +3557,6 @@
Account Value,Valor del compte,
Account is mandatory to get payment entries,El compte és obligatori per obtenir entrades de pagament,
Account is not set for the dashboard chart {0},El compte no està definit per al gràfic de tauler {0},
-Account {0} does not belong to company {1},El compte {0} no pertany a l'empresa {1},
Account {0} does not exists in the dashboard chart {1},El compte {0} no existeix al gràfic de tauler {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Compte: <b>{0}</b> és un treball capital en curs i no pot ser actualitzat per Journal Entry,
Account: {0} is not permitted under Payment Entry,Compte: {0} no està permès a l'entrada de pagament,
@@ -3582,7 +3567,6 @@
Activity,Activitat,
Add / Manage Email Accounts.,Afegir / Administrar comptes de correu electrònic.,
Add Child,Afegir Nen,
-Add Loan Security,Afegir seguretat de préstec,
Add Multiple,Afegir múltiple,
Add Participants,Afegeix participants,
Add to Featured Item,Afegeix a l'element destacat,
@@ -3593,15 +3577,12 @@
Address Line 1,Adreça Línia 1,
Addresses,Direccions,
Admission End Date should be greater than Admission Start Date.,La data de finalització de l’entrada ha de ser superior a la data d’inici d’entrada.,
-Against Loan,Contra el préstec,
-Against Loan:,Contra el préstec:,
All,Tots,
All bank transactions have been created,S'han creat totes les transaccions bancàries,
All the depreciations has been booked,S'han reservat totes les depreciacions,
Allocation Expired!,Assignació caducada!,
Allow Resetting Service Level Agreement from Support Settings.,Permet restablir l'Acord de nivell de servei des de la configuració de suport.,
Amount of {0} is required for Loan closure,Es necessita una quantitat de {0} per al tancament del préstec,
-Amount paid cannot be zero,La quantitat pagada no pot ser zero,
Applied Coupon Code,Codi de cupó aplicat,
Apply Coupon Code,Apliqueu el codi de cupó,
Appointment Booking,Reserva de cites,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,No es pot calcular l'hora d'arribada perquè falta l'adreça del conductor.,
Cannot Optimize Route as Driver Address is Missing.,No es pot optimitzar la ruta com a adreça del conductor.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,No es pot completar / cancel·lar la tasca {0} com a tasca depenent {1}.,
-Cannot create loan until application is approved,No es pot crear préstec fins que no s'aprovi l'aplicació,
Cannot find a matching Item. Please select some other value for {0}.,Si no troba un article a joc. Si us plau seleccioni un altre valor per {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","No es pot generar l'excés de l'element {0} a la fila {1} més de {2}. Per permetre l'excés de facturació, establiu la quantitat a la configuració del compte",
"Capacity Planning Error, planned start time can not be same as end time","Error de planificació de la capacitat, l'hora d'inici planificada no pot ser el mateix que el de finalització",
@@ -3812,20 +3792,9 @@
Less Than Amount,Menys que Quantitat,
Liabilities,Passiu,
Loading...,Carregant ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,L'import del préstec supera l'import màxim del préstec de {0} segons els valors proposats,
Loan Applications from customers and employees.,Sol·licituds de préstecs de clients i empleats.,
-Loan Disbursement,Desemborsament de préstecs,
Loan Processes,Processos de préstec,
-Loan Security,Seguretat del préstec,
-Loan Security Pledge,Préstec de seguretat,
-Loan Security Pledge Created : {0},Seguretat de préstec creat: {0},
-Loan Security Price,Preu de seguretat de préstec,
-Loan Security Price overlapping with {0},Preu de seguretat de préstec sobreposat amb {0},
-Loan Security Unpledge,Desconnexió de seguretat del préstec,
-Loan Security Value,Valor de seguretat del préstec,
Loan Type for interest and penalty rates,Tipus de préstec per als tipus d’interès i penalitzacions,
-Loan amount cannot be greater than {0},La quantitat de préstec no pot ser superior a {0},
-Loan is mandatory,El préstec és obligatori,
Loans,Préstecs,
Loans provided to customers and employees.,Préstecs proporcionats a clients i empleats.,
Location,Ubicació,
@@ -3894,7 +3863,6 @@
Pay,Pagar,
Payment Document Type,Tipus de document de pagament,
Payment Name,Nom de pagament,
-Penalty Amount,Import de la sanció,
Pending,Pendent,
Performance,Rendiment,
Period based On,Període basat en,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Inicieu la sessió com a usuari del Marketplace per editar aquest article.,
Please login as a Marketplace User to report this item.,Inicieu la sessió com a usuari del Marketplace per informar d'aquest article.,
Please select <b>Template Type</b> to download template,Seleccioneu <b>Tipus de plantilla</b> per baixar la plantilla,
-Please select Applicant Type first,Seleccioneu primer el tipus d’aplicant,
Please select Customer first,Seleccioneu primer el client,
Please select Item Code first,Seleccioneu primer el Codi de l’element,
-Please select Loan Type for company {0},Seleccioneu Tipus de préstec per a l'empresa {0},
Please select a Delivery Note,Seleccioneu un albarà,
Please select a Sales Person for item: {0},Seleccioneu una persona de vendes per a l'article: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Si us plau seleccioneu un altre mètode de pagament. Raya no admet transaccions en moneda '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Configureu un compte bancari predeterminat per a l'empresa {0},
Please specify,"Si us plau, especifiqui",
Please specify a {0},Especifiqueu un {0},lead
-Pledge Status,Estat de la promesa,
-Pledge Time,Temps de promesa,
Printing,Impressió,
Priority,Prioritat,
Priority has been changed to {0}.,La prioritat s'ha canviat a {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Processament de fitxers XML,
Profitability,Rendibilitat,
Project,Projecte,
-Proposed Pledges are mandatory for secured Loans,Els compromisos proposats són obligatoris per a préstecs garantits,
Provide the academic year and set the starting and ending date.,Proporciona el curs acadèmic i estableix la data d’inici i finalització.,
Public token is missing for this bank,Falta un testimoni públic per a aquest banc,
Publish,Publica,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,El rebut de compra no té cap element per al qual estigui habilitat la conservació de l'exemple.,
Purchase Return,Devolució de compra,
Qty of Finished Goods Item,Quantitat d'articles de productes acabats,
-Qty or Amount is mandatroy for loan security,Quantitat o import és mandatroy per a la seguretat del préstec,
Quality Inspection required for Item {0} to submit,Inspecció de qualitat necessària per enviar l'article {0},
Quantity to Manufacture,Quantitat a la fabricació,
Quantity to Manufacture can not be zero for the operation {0},La quantitat a la fabricació no pot ser zero per a l'operació {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,La data de alleujament ha de ser superior o igual a la data d'adhesió,
Rename,Canviar el nom,
Rename Not Allowed,Canvia de nom no permès,
-Repayment Method is mandatory for term loans,El mètode de reemborsament és obligatori per a préstecs a termini,
-Repayment Start Date is mandatory for term loans,La data d’inici del reemborsament és obligatòria per als préstecs a termini,
Report Item,Informe,
Report this Item,Informa d'aquest element,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Quantitat reservada per a subcontractes: quantitat de matèries primeres per fabricar articles subcontractats.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Fila ({0}): {1} ja es descompta a {2},
Rows Added in {0},Línies afegides a {0},
Rows Removed in {0},Línies suprimides a {0},
-Sanctioned Amount limit crossed for {0} {1},Límit de quantitat sancionat traspassat per {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},La quantitat de préstec sancionat ja existeix per a {0} contra l'empresa {1},
Save,Guardar,
Save Item,Desa l'element,
Saved Items,Elements desats,
@@ -4135,7 +4093,6 @@
User {0} is disabled,L'usuari {0} està deshabilitat,
Users and Permissions,Usuaris i permisos,
Vacancies cannot be lower than the current openings,Les places vacants no poden ser inferiors a les obertures actuals,
-Valid From Time must be lesser than Valid Upto Time.,Valid From Time ha de ser inferior al Valid Upto Time.,
Valuation Rate required for Item {0} at row {1},Taxa de valoració necessària per a l’element {0} a la fila {1},
Values Out Of Sync,Valors fora de sincronització,
Vehicle Type is required if Mode of Transport is Road,El tipus de vehicle és obligatori si el mode de transport és per carretera,
@@ -4211,7 +4168,6 @@
Add to Cart,Afegir a la cistella,
Days Since Last Order,Dies des de la darrera comanda,
In Stock,En estoc,
-Loan Amount is mandatory,La quantitat de préstec és obligatòria,
Mode Of Payment,Forma de pagament,
No students Found,No s’han trobat estudiants,
Not in Stock,No en Stock,
@@ -4240,7 +4196,6 @@
Group by,Agrupar per,
In stock,En estoc,
Item name,Nom de l'article,
-Loan amount is mandatory,La quantitat de préstec és obligatòria,
Minimum Qty,Quantitat mínima,
More details,Més detalls,
Nature of Supplies,Natura dels subministraments,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Quantitat total completada,
Qty to Manufacture,Quantitat a fabricar,
Repay From Salary can be selected only for term loans,La devolució del salari només es pot seleccionar per a préstecs a termini,
-No valid Loan Security Price found for {0},No s'ha trobat cap preu de seguretat de préstec vàlid per a {0},
-Loan Account and Payment Account cannot be same,El compte de préstec i el compte de pagament no poden ser els mateixos,
-Loan Security Pledge can only be created for secured loans,La promesa de seguretat de préstecs només es pot crear per a préstecs garantits,
Social Media Campaigns,Campanyes de xarxes socials,
From Date can not be greater than To Date,Des de la data no pot ser superior a fins a la data,
Please set a Customer linked to the Patient,Configureu un client vinculat al pacient,
@@ -6437,7 +6389,6 @@
HR User,HR User,
Appointment Letter,Carta de cita,
Job Applicant,Job Applicant,
-Applicant Name,Nom del sol·licitant,
Appointment Date,Data de citació,
Appointment Letter Template,Plantilla de carta de cites,
Body,Cos,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sincronització en progrés,
Hub Seller Name,Nom del venedor del concentrador,
Custom Data,Dades personalitzades,
-Member,Membre,
-Partially Disbursed,parcialment Desemborsament,
-Loan Closure Requested,Sol·licitud de tancament del préstec,
Repay From Salary,Pagar del seu sou,
-Loan Details,Detalls de préstec,
-Loan Type,Tipus de préstec,
-Loan Amount,Total del préstec,
-Is Secured Loan,El préstec està garantit,
-Rate of Interest (%) / Year,Taxa d'interès (%) / Any,
-Disbursement Date,Data de desemborsament,
-Disbursed Amount,Import desemborsat,
-Is Term Loan,És préstec a termini,
-Repayment Method,Mètode d'amortització,
-Repay Fixed Amount per Period,Pagar una quantitat fixa per Període,
-Repay Over Number of Periods,Retornar al llarg Nombre de períodes,
-Repayment Period in Months,Termini de devolució en Mesos,
-Monthly Repayment Amount,Quantitat de pagament mensual,
-Repayment Start Date,Data d'inici del reemborsament,
-Loan Security Details,Detalls de seguretat del préstec,
-Maximum Loan Value,Valor màxim del préstec,
-Account Info,Informació del compte,
-Loan Account,Compte de préstec,
-Interest Income Account,Compte d'Utilitat interès,
-Penalty Income Account,Compte d'ingressos sancionadors,
-Repayment Schedule,Calendari de reemborsament,
-Total Payable Amount,La quantitat total a pagar,
-Total Principal Paid,Principal principal pagat,
-Total Interest Payable,L'interès total a pagar,
-Total Amount Paid,Import total pagat,
-Loan Manager,Gestor de préstecs,
-Loan Info,Informació sobre préstecs,
-Rate of Interest,Tipus d'interès,
-Proposed Pledges,Promesos proposats,
-Maximum Loan Amount,La quantitat màxima del préstec,
-Repayment Info,Informació de la devolució,
-Total Payable Interest,L'interès total a pagar,
-Against Loan ,Contra el préstec,
-Loan Interest Accrual,Meritació d’interès de préstec,
-Amounts,Quantitats,
-Pending Principal Amount,Import pendent principal,
-Payable Principal Amount,Import principal pagable,
-Paid Principal Amount,Import principal pagat,
-Paid Interest Amount,Import d’interès pagat,
-Process Loan Interest Accrual,Compra d’interessos de préstec de procés,
-Repayment Schedule Name,Nom de l’horari d’amortització,
Regular Payment,Pagament regular,
Loan Closure,Tancament del préstec,
-Payment Details,Detalls del pagament,
-Interest Payable,Interessos a pagar,
-Amount Paid,Quantitat pagada,
-Principal Amount Paid,Import principal pagat,
-Repayment Details,Detalls de la devolució,
-Loan Repayment Detail,Detall de l’amortització del préstec,
-Loan Security Name,Nom de seguretat del préstec,
-Unit Of Measure,Unitat de mesura,
-Loan Security Code,Codi de seguretat del préstec,
-Loan Security Type,Tipus de seguretat del préstec,
-Haircut %,Tall de cabell %,
-Loan Details,Detalls del préstec,
-Unpledged,No inclòs,
-Pledged,Prometut,
-Partially Pledged,Parcialment compromès,
-Securities,Valors,
-Total Security Value,Valor de seguretat total,
-Loan Security Shortfall,Falta de seguretat del préstec,
-Loan ,Préstec,
-Shortfall Time,Temps de falta,
-America/New_York,Amèrica / New_York,
-Shortfall Amount,Import de la falta,
-Security Value ,Valor de seguretat,
-Process Loan Security Shortfall,Fallada de seguretat del préstec de procés,
-Loan To Value Ratio,Ràtio de préstec al valor,
-Unpledge Time,Temps de desunió,
-Loan Name,Nom del préstec,
Rate of Interest (%) Yearly,Taxa d'interès (%) anual,
-Penalty Interest Rate (%) Per Day,Tipus d’interès de penalització (%) per dia,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,El tipus d’interès de penalització es percep sobre l’import de l’interès pendent diàriament en cas d’amortització retardada,
-Grace Period in Days,Període de gràcia en dies,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Nombre de dies des de la data de venciment fins a la qual no es cobrarà cap penalització en cas de retard en la devolució del préstec,
-Pledge,Compromís,
-Post Haircut Amount,Publicar la quantitat de tall de cabell,
-Process Type,Tipus de procés,
-Update Time,Hora d’actualització,
-Proposed Pledge,Promesa proposada,
-Total Payment,El pagament total,
-Balance Loan Amount,Saldo del Préstec Monto,
-Is Accrued,Es merita,
Salary Slip Loan,Préstec antilliscant,
Loan Repayment Entry,Entrada de reemborsament del préstec,
-Sanctioned Loan Amount,Import del préstec sancionat,
-Sanctioned Amount Limit,Límite de la quantitat sancionada,
-Unpledge,Desconnectat,
-Haircut,Tall de cabell,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Generar Calendari,
Schedules,Horaris,
@@ -7885,7 +7749,6 @@
Update Series,Actualitza Sèries,
Change the starting / current sequence number of an existing series.,Canviar el número de seqüència inicial/actual d'una sèrie existent.,
Prefix,Prefix,
-Current Value,Valor actual,
This is the number of the last created transaction with this prefix,Aquest és el nombre de l'última transacció creat amb aquest prefix,
Update Series Number,Actualització Nombre Sèries,
Quotation Lost Reason,Cita Perduda Raó,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Nivell d'articles recomanat per a tornar a passar comanda,
Lead Details,Detalls del client potencial,
Lead Owner Efficiency,Eficiència plom propietari,
-Loan Repayment and Closure,Devolució i tancament del préstec,
-Loan Security Status,Estat de seguretat del préstec,
Lost Opportunity,Oportunitat perduda,
Maintenance Schedules,Programes de manteniment,
Material Requests for which Supplier Quotations are not created,Les sol·licituds de material per als quals no es creen Ofertes de Proveïdor,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Comptes orientats: {0},
Payment Account is mandatory,El compte de pagament és obligatori,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Si es marca, l'import íntegre es descomptarà de la renda imposable abans de calcular l'impost sobre la renda sense cap declaració ni presentació de proves.",
-Disbursement Details,Detalls del desemborsament,
Material Request Warehouse,Sol·licitud de material Magatzem,
Select warehouse for material requests,Seleccioneu un magatzem per a sol·licituds de material,
Transfer Materials For Warehouse {0},Transferència de materials per a magatzem {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Reemborsar l’import no reclamat del salari,
Deduction from salary,Deducció del salari,
Expired Leaves,Fulles caducades,
-Reference No,Número de referència,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,El percentatge de tall de cabell és la diferència percentual entre el valor de mercat del títol de préstec i el valor atribuït a aquest títol quan s’utilitza com a garantia d’aquest préstec.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,La ràtio de préstec a valor expressa la relació entre l’import del préstec i el valor de la garantia compromesa. Es produirà un dèficit de seguretat del préstec si aquesta baixa per sota del valor especificat per a qualsevol préstec,
If this is not checked the loan by default will be considered as a Demand Loan,"Si no es comprova això, el préstec per defecte es considerarà un préstec a la demanda",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Aquest compte s’utilitza per reservar els pagaments de préstecs del prestatari i també per desemborsar préstecs al prestatari,
This account is capital account which is used to allocate capital for loan disbursal account ,Aquest compte és un compte de capital que s’utilitza per assignar capital per al compte de desemborsament del préstec,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},L'operació {0} no pertany a l'ordre de treball {1},
Print UOM after Quantity,Imprimiu UOM després de Quantity,
Set default {0} account for perpetual inventory for non stock items,Definiu un compte {0} predeterminat per a l'inventari perpetu dels articles que no estiguin en estoc,
-Loan Security {0} added multiple times,La seguretat del préstec {0} s'ha afegit diverses vegades,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Els títols de préstec amb una ràtio LTV diferent no es poden empenyorar contra un préstec,
-Qty or Amount is mandatory for loan security!,Quantitat o import és obligatori per a la seguretat del préstec.,
-Only submittted unpledge requests can be approved,Només es poden aprovar les sol·licituds unpledge enviades,
-Interest Amount or Principal Amount is mandatory,L’interès o l’import del capital són obligatoris,
-Disbursed Amount cannot be greater than {0},La quantitat desemborsada no pot ser superior a {0},
-Row {0}: Loan Security {1} added multiple times,Fila {0}: seguretat del préstec {1} afegida diverses vegades,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Fila núm. {0}: l'article secundari no ha de ser un paquet de productes. Traieu l'element {1} i deseu,
Credit limit reached for customer {0},S'ha assolit el límit de crèdit per al client {0},
Could not auto create Customer due to the following missing mandatory field(s):,No s'ha pogut crear el client automàticament perquè falten els camps obligatoris següents:,
diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv
index 783d6d4..6826b2d 100644
--- a/erpnext/translations/cs.csv
+++ b/erpnext/translations/cs.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Platí, pokud je společností SpA, SApA nebo SRL",
Applicable if the company is a limited liability company,"Platí, pokud je společnost společností s ručením omezeným",
Applicable if the company is an Individual or a Proprietorship,"Platí, pokud je společnost jednotlivec nebo vlastník",
-Applicant,Žadatel,
-Applicant Type,Typ žadatele,
Application of Funds (Assets),Aplikace fondů (aktiv),
Application period cannot be across two allocation records,Období žádosti nesmí být v rámci dvou alokačních záznamů,
Application period cannot be outside leave allocation period,Období pro podávání žádostí nemůže být alokační období venku volno,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Seznam dostupných akcionářů s čísly folií,
Loading Payment System,Načítání platebního systému,
Loan,Půjčka,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Výše úvěru nesmí být vyšší než Maximální výše úvěru částku {0},
-Loan Application,Žádost o půjčku,
-Loan Management,Správa úvěrů,
-Loan Repayment,Splácení úvěru,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Datum zahájení výpůjčky a období výpůjčky jsou povinné pro uložení diskontování faktury,
Loans (Liabilities),Úvěry (závazky),
Loans and Advances (Assets),Úvěry a zálohy (aktiva),
@@ -1611,7 +1605,6 @@
Monday,Pondělí,
Monthly,Měsíčně,
Monthly Distribution,Měsíční Distribution,
-Monthly Repayment Amount cannot be greater than Loan Amount,Měsíční splátka částka nemůže být větší než Výše úvěru,
More,Více,
More Information,Víc informací,
More than one selection for {0} not allowed,Více než jeden výběr pro {0} není povolen,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Platit {0} {1},
Payable,Splatný,
Payable Account,Splatnost účtu,
-Payable Amount,Splatná částka,
Payment,Platba,
Payment Cancelled. Please check your GoCardless Account for more details,Platba byla zrušena. Zkontrolujte svůj účet GoCardless pro více informací,
Payment Confirmation,Potvrzení platby,
-Payment Date,Datum splatnosti,
Payment Days,Platební dny,
Payment Document,platba Document,
Payment Due Date,Splatno dne,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,"Prosím, zadejte první doklad o zakoupení",
Please enter Receipt Document,"Prosím, zadejte převzetí dokumentu",
Please enter Reference date,"Prosím, zadejte Referenční den",
-Please enter Repayment Periods,"Prosím, zadejte dobu splácení",
Please enter Reqd by Date,Zadejte Reqd podle data,
Please enter Woocommerce Server URL,Zadejte adresu URL serveru Woocommerce,
Please enter Write Off Account,"Prosím, zadejte odepsat účet",
@@ -1994,7 +1984,6 @@
Please enter parent cost center,"Prosím, zadejte nákladové středisko mateřský",
Please enter quantity for Item {0},"Zadejte prosím množství produktů, bod {0}",
Please enter relieving date.,Zadejte zmírnění datum.,
-Please enter repayment Amount,"Prosím, zadejte splácení Částka",
Please enter valid Financial Year Start and End Dates,Zadejte prosím platnou finanční rok datum zahájení a ukončení,
Please enter valid email address,Zadejte platnou e-mailovou adresu,
Please enter {0} first,"Prosím, zadejte {0} jako první",
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Pravidla pro stanovení sazeb jsou dále filtrována na základě množství.,
Primary Address Details,Údaje o primární adrese,
Primary Contact Details,Primární kontaktní údaje,
-Principal Amount,jistina,
Print Format,Formát tisku,
Print IRS 1099 Forms,Tisk IRS 1099 formulářů,
Print Report Card,Tiskněte kartu přehledů,
@@ -2550,7 +2538,6 @@
Sample Collection,Kolekce vzorků,
Sample quantity {0} cannot be more than received quantity {1},Množství vzorku {0} nemůže být větší než přijaté množství {1},
Sanctioned,schválený,
-Sanctioned Amount,Sankcionována Částka,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Sankcionována Částka nemůže být větší než reklamace Částka v řádku {0}.,
Sand,Písek,
Saturday,Sobota,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} již má rodičovský postup {1}.,
API,API,
Annual,Roční,
-Approved,Schválený,
Change,Změna,
Contact Email,Kontaktní e-mail,
Export Type,Typ exportu,
@@ -3571,7 +3557,6 @@
Account Value,Hodnota účtu,
Account is mandatory to get payment entries,Účet je povinný pro získání platebních záznamů,
Account is not set for the dashboard chart {0},Účet není nastaven pro graf dashboardu {0},
-Account {0} does not belong to company {1},Účet {0} nepatří do společnosti {1},
Account {0} does not exists in the dashboard chart {1},Účet {0} neexistuje v grafu dashboardu {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Účet: <b>{0}</b> je kapitál Probíhá zpracování a nelze jej aktualizovat zápisem do deníku,
Account: {0} is not permitted under Payment Entry,Účet: {0} není povolen v rámci zadání platby,
@@ -3582,7 +3567,6 @@
Activity,Činnost,
Add / Manage Email Accounts.,Přidat / Správa e-mailových účtů.,
Add Child,Přidat dítě,
-Add Loan Security,Přidejte zabezpečení půjčky,
Add Multiple,Přidat více,
Add Participants,Přidat účastníky,
Add to Featured Item,Přidat k vybrané položce,
@@ -3593,15 +3577,12 @@
Address Line 1,Adresní řádek 1,
Addresses,Adresy,
Admission End Date should be greater than Admission Start Date.,Datum ukončení vstupu by mělo být vyšší než datum zahájení vstupu.,
-Against Loan,Proti půjčce,
-Against Loan:,Proti úvěru:,
All,Všechno,
All bank transactions have been created,Byly vytvořeny všechny bankovní transakce,
All the depreciations has been booked,Všechny odpisy byly zaúčtovány,
Allocation Expired!,Platnost přidělení vypršela!,
Allow Resetting Service Level Agreement from Support Settings.,Povolit resetování dohody o úrovni služeb z nastavení podpory.,
Amount of {0} is required for Loan closure,Pro uzavření úvěru je požadována částka {0},
-Amount paid cannot be zero,Zaplacená částka nesmí být nulová,
Applied Coupon Code,Kód použitého kupónu,
Apply Coupon Code,Použijte kód kupónu,
Appointment Booking,Rezervace schůzek,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Nelze vypočítat čas příjezdu, protože chybí adresa řidiče.",
Cannot Optimize Route as Driver Address is Missing.,"Nelze optimalizovat trasu, protože chybí adresa ovladače.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Nelze dokončit úkol {0}, protože jeho závislá úloha {1} není dokončena / zrušena.",
-Cannot create loan until application is approved,"Dokud nebude žádost schválena, nelze vytvořit půjčku",
Cannot find a matching Item. Please select some other value for {0}.,Nelze najít odpovídající položku. Vyberte nějakou jinou hodnotu pro {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Nelze přeplatit za položku {0} v řádku {1} více než {2}. Chcete-li povolit nadměrnou fakturaci, nastavte v Nastavení účtu povolenky",
"Capacity Planning Error, planned start time can not be same as end time","Chyba plánování kapacity, plánovaný čas zahájení nemůže být stejný jako čas ukončení",
@@ -3812,20 +3792,9 @@
Less Than Amount,Méně než částka,
Liabilities,Pasiva,
Loading...,Nahrávám...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Částka půjčky překračuje maximální částku půjčky {0} podle navrhovaných cenných papírů,
Loan Applications from customers and employees.,Žádosti o půjčku od zákazníků a zaměstnanců.,
-Loan Disbursement,Vyplacení půjčky,
Loan Processes,Úvěrové procesy,
-Loan Security,Zabezpečení půjčky,
-Loan Security Pledge,Úvěrový příslib,
-Loan Security Pledge Created : {0},Vytvořen záložní úvěr: {0},
-Loan Security Price,Cena za půjčku,
-Loan Security Price overlapping with {0},Cena půjčky se překrývá s {0},
-Loan Security Unpledge,Zabezpečení úvěru Unpledge,
-Loan Security Value,Hodnota zabezpečení úvěru,
Loan Type for interest and penalty rates,Typ půjčky za úroky a penále,
-Loan amount cannot be greater than {0},Výše půjčky nesmí být větší než {0},
-Loan is mandatory,Půjčka je povinná,
Loans,Půjčky,
Loans provided to customers and employees.,Půjčky poskytnuté zákazníkům a zaměstnancům.,
Location,Místo,
@@ -3894,7 +3863,6 @@
Pay,Zaplatit,
Payment Document Type,Typ platebního dokladu,
Payment Name,Název platby,
-Penalty Amount,Trestná částka,
Pending,Až do,
Performance,Výkon,
Period based On,Období založené na,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,"Chcete-li tuto položku upravit, přihlaste se jako uživatel Marketplace.",
Please login as a Marketplace User to report this item.,"Chcete-li tuto položku nahlásit, přihlaste se jako uživatel Marketplace.",
Please select <b>Template Type</b> to download template,Vyberte <b>šablonu</b> pro stažení šablony,
-Please select Applicant Type first,Nejprve vyberte typ žadatele,
Please select Customer first,Nejprve prosím vyberte Zákazníka,
Please select Item Code first,Nejprve vyberte kód položky,
-Please select Loan Type for company {0},Vyberte typ půjčky pro společnost {0},
Please select a Delivery Note,Vyberte dodací list,
Please select a Sales Person for item: {0},Vyberte obchodní osobu pro položku: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Vyberte prosím jinou platební metodu. Stripe nepodporuje transakce v měně {0} ',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Nastavte prosím výchozí bankovní účet společnosti {0},
Please specify,Prosím specifikujte,
Please specify a {0},Zadejte prosím {0},lead
-Pledge Status,Stav zástavy,
-Pledge Time,Pledge Time,
Printing,Tisk,
Priority,Priorita,
Priority has been changed to {0}.,Priorita byla změněna na {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Zpracování souborů XML,
Profitability,Ziskovost,
Project,Zakázka,
-Proposed Pledges are mandatory for secured Loans,Navrhované zástavy jsou povinné pro zajištěné půjčky,
Provide the academic year and set the starting and ending date.,Uveďte akademický rok a stanovte počáteční a konečné datum.,
Public token is missing for this bank,Pro tuto banku chybí veřejný token,
Publish,Publikovat,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Potvrzení o nákupu neobsahuje žádnou položku, pro kterou je povolen Retain Sample.",
Purchase Return,Nákup Return,
Qty of Finished Goods Item,Množství hotového zboží,
-Qty or Amount is mandatroy for loan security,Množství nebo částka je mandatroy pro zajištění půjčky,
Quality Inspection required for Item {0} to submit,Pro odeslání položky {0} je vyžadována kontrola kvality,
Quantity to Manufacture,Množství k výrobě,
Quantity to Manufacture can not be zero for the operation {0},Množství na výrobu nemůže být pro operaci nulové {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Datum vydání musí být větší nebo rovno Datum připojení,
Rename,Přejmenovat,
Rename Not Allowed,Přejmenovat není povoleno,
-Repayment Method is mandatory for term loans,Způsob splácení je povinný pro termínované půjčky,
-Repayment Start Date is mandatory for term loans,Datum zahájení splácení je povinné pro termínované půjčky,
Report Item,Položka sestavy,
Report this Item,Nahlásit tuto položku,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Vyhrazeno Množství pro subdodávky: Množství surovin pro výrobu subdodávek.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Řádek ({0}): {1} je již zlevněn v {2},
Rows Added in {0},Řádky přidané v {0},
Rows Removed in {0},Řádky odebrány za {0},
-Sanctioned Amount limit crossed for {0} {1},Překročení limitu sankce za {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Částka schváleného úvěru již existuje pro {0} proti společnosti {1},
Save,Uložit,
Save Item,Uložit položku,
Saved Items,Uložené položky,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Uživatel {0} je zakázána,
Users and Permissions,Uživatelé a oprávnění,
Vacancies cannot be lower than the current openings,Volná pracovní místa nemohou být nižší než stávající otvory,
-Valid From Time must be lesser than Valid Upto Time.,Platný od času musí být menší než platný až do doby.,
Valuation Rate required for Item {0} at row {1},Míra ocenění požadovaná pro položku {0} v řádku {1},
Values Out Of Sync,Hodnoty ze synchronizace,
Vehicle Type is required if Mode of Transport is Road,"Typ vozidla je vyžadován, pokud je způsob dopravy silniční",
@@ -4211,7 +4168,6 @@
Add to Cart,Přidat do košíku,
Days Since Last Order,Dny od poslední objednávky,
In Stock,Na skladě,
-Loan Amount is mandatory,Částka půjčky je povinná,
Mode Of Payment,Způsob platby,
No students Found,Nebyli nalezeni žádní studenti,
Not in Stock,Není skladem,
@@ -4240,7 +4196,6 @@
Group by,Seskupit podle,
In stock,Na skladě,
Item name,Název položky,
-Loan amount is mandatory,Částka půjčky je povinná,
Minimum Qty,Minimální počet,
More details,Další podrobnosti,
Nature of Supplies,Příroda Dodávky,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Celkem dokončeno Množství,
Qty to Manufacture,Množství K výrobě,
Repay From Salary can be selected only for term loans,Výplatu z platu lze vybrat pouze u termínovaných půjček,
-No valid Loan Security Price found for {0},Nebyla nalezena platná cena zabezpečení půjčky pro {0},
-Loan Account and Payment Account cannot be same,Úvěrový účet a platební účet nemohou být stejné,
-Loan Security Pledge can only be created for secured loans,Slib zajištění půjčky lze vytvořit pouze pro zajištěné půjčky,
Social Media Campaigns,Kampaně na sociálních médiích,
From Date can not be greater than To Date,Od data nemůže být větší než od data,
Please set a Customer linked to the Patient,Nastavte prosím zákazníka spojeného s pacientem,
@@ -6437,7 +6389,6 @@
HR User,HR User,
Appointment Letter,Jmenovací dopis,
Job Applicant,Job Žadatel,
-Applicant Name,Žadatel Název,
Appointment Date,Datum schůzky,
Appointment Letter Template,Šablona dopisu schůzky,
Body,Tělo,
@@ -7059,99 +7010,12 @@
Sync in Progress,Synchronizace probíhá,
Hub Seller Name,Jméno prodejce hubu,
Custom Data,Vlastní data,
-Member,Člen,
-Partially Disbursed,částečně Vyplacené,
-Loan Closure Requested,Požadováno uzavření úvěru,
Repay From Salary,Splatit z platu,
-Loan Details,půjčka Podrobnosti,
-Loan Type,Typ úvěru,
-Loan Amount,Částka půjčky,
-Is Secured Loan,Je zajištěná půjčka,
-Rate of Interest (%) / Year,Úroková sazba (%) / rok,
-Disbursement Date,výplata Datum,
-Disbursed Amount,Částka vyplacená,
-Is Term Loan,Je termín půjčka,
-Repayment Method,splácení Metoda,
-Repay Fixed Amount per Period,Splatit pevná částka na období,
-Repay Over Number of Periods,Splatit Over počet období,
-Repayment Period in Months,Splácení doba v měsících,
-Monthly Repayment Amount,Výše měsíční splátky,
-Repayment Start Date,Datum zahájení splacení,
-Loan Security Details,Podrobnosti o půjčce,
-Maximum Loan Value,Maximální hodnota půjčky,
-Account Info,Informace o účtu,
-Loan Account,Úvěrový účet,
-Interest Income Account,Účet Úrokové výnosy,
-Penalty Income Account,Účet peněžitých příjmů,
-Repayment Schedule,splátkový kalendář,
-Total Payable Amount,Celková částka Splatné,
-Total Principal Paid,Celková zaplacená jistina,
-Total Interest Payable,Celkem splatných úroků,
-Total Amount Paid,Celková částka zaplacena,
-Loan Manager,Správce půjček,
-Loan Info,Informace o úvěr,
-Rate of Interest,Úroková sazba,
-Proposed Pledges,Navrhované zástavy,
-Maximum Loan Amount,Maximální výše úvěru,
-Repayment Info,splácení Info,
-Total Payable Interest,Celkem Splatné úroky,
-Against Loan ,Proti půjčce,
-Loan Interest Accrual,Úvěrový úrok,
-Amounts,Množství,
-Pending Principal Amount,Čeká částka jistiny,
-Payable Principal Amount,Splatná jistina,
-Paid Principal Amount,Vyplacená jistina,
-Paid Interest Amount,Částka zaplaceného úroku,
-Process Loan Interest Accrual,Časově rozlišené úroky z procesu,
-Repayment Schedule Name,Název splátkového kalendáře,
Regular Payment,Pravidelná platba,
Loan Closure,Uznání úvěru,
-Payment Details,Platební údaje,
-Interest Payable,Úroky splatné,
-Amount Paid,Zaplacené částky,
-Principal Amount Paid,Hlavní zaplacená částka,
-Repayment Details,Podrobnosti splácení,
-Loan Repayment Detail,Podrobnosti o splácení půjčky,
-Loan Security Name,Název zabezpečení půjčky,
-Unit Of Measure,Měrná jednotka,
-Loan Security Code,Bezpečnostní kód půjčky,
-Loan Security Type,Typ zabezpečení půjčky,
-Haircut %,Střih%,
-Loan Details,Podrobnosti o půjčce,
-Unpledged,Unpledged,
-Pledged,Slíbil,
-Partially Pledged,Částečně zastaveno,
-Securities,Cenné papíry,
-Total Security Value,Celková hodnota zabezpečení,
-Loan Security Shortfall,Nedostatek zabezpečení úvěru,
-Loan ,Půjčka,
-Shortfall Time,Zkratový čas,
-America/New_York,America / New_York,
-Shortfall Amount,Částka schodku,
-Security Value ,Hodnota zabezpečení,
-Process Loan Security Shortfall,Nedostatek zabezpečení procesních půjček,
-Loan To Value Ratio,Poměr půjčky k hodnotě,
-Unpledge Time,Unpledge Time,
-Loan Name,půjčka Name,
Rate of Interest (%) Yearly,Úroková sazba (%) Roční,
-Penalty Interest Rate (%) Per Day,Trestní úroková sazba (%) za den,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,V případě opožděného splacení se z nedočkané výše úroku vybírá penalizační úroková sazba denně,
-Grace Period in Days,Grace Období ve dnech,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Počet dní od data splatnosti, do kterých nebude účtována pokuta v případě zpoždění splácení půjčky",
-Pledge,Slib,
-Post Haircut Amount,Částka za účes,
-Process Type,Typ procesu,
-Update Time,Čas aktualizace,
-Proposed Pledge,Navrhovaný slib,
-Total Payment,Celková platba,
-Balance Loan Amount,Balance Výše úvěru,
-Is Accrued,Je narostl,
Salary Slip Loan,Úvěrový půjček,
Loan Repayment Entry,Úvěrová splátka,
-Sanctioned Loan Amount,Částka schváleného úvěru,
-Sanctioned Amount Limit,Povolený limit částky,
-Unpledge,Unpledge,
-Haircut,Střih,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Generování plán,
Schedules,Plány,
@@ -7885,7 +7749,6 @@
Update Series,Řada Aktualizace,
Change the starting / current sequence number of an existing series.,Změnit výchozí / aktuální pořadové číslo existujícího série.,
Prefix,Prefix,
-Current Value,Current Value,
This is the number of the last created transaction with this prefix,To je číslo poslední vytvořené transakci s tímto prefixem,
Update Series Number,Aktualizace Series Number,
Quotation Lost Reason,Důvod ztráty nabídky,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Doporučené Změna pořadí Level,
Lead Details,Detaily leadu,
Lead Owner Efficiency,Vedoucí účinnost vlastníka,
-Loan Repayment and Closure,Splácení a uzavření úvěru,
-Loan Security Status,Stav zabezpečení úvěru,
Lost Opportunity,Ztracená příležitost,
Maintenance Schedules,Plány údržby,
Material Requests for which Supplier Quotations are not created,Materiál Žádosti o které Dodavatel citace nejsou vytvořeny,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Počet zacílených: {0},
Payment Account is mandatory,Platební účet je povinný,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Pokud je zaškrtnuto, bude odečtena celá částka ze zdanitelného příjmu před výpočtem daně z příjmu bez jakéhokoli prohlášení nebo předložení dokladu.",
-Disbursement Details,Podrobnosti o výplatě,
Material Request Warehouse,Sklad požadavku na materiál,
Select warehouse for material requests,Vyberte sklad pro požadavky na materiál,
Transfer Materials For Warehouse {0},Přenos materiálů do skladu {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Vrátit nevyzvednutou částku z platu,
Deduction from salary,Srážka z platu,
Expired Leaves,Vypršela platnost listů,
-Reference No,Referenční číslo,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,"Procento srážky je procentní rozdíl mezi tržní hodnotou zajištění úvěru a hodnotou připisovanou tomuto zajištění úvěru, pokud je použit jako kolaterál pro danou půjčku.",
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Poměr půjčky k hodnotě vyjadřuje poměr výše půjčky k hodnotě zastaveného cenného papíru. Nedostatek zabezpečení půjčky se spustí, pokud poklesne pod stanovenou hodnotu jakékoli půjčky",
If this is not checked the loan by default will be considered as a Demand Loan,"Pokud to není zaškrtnuto, bude se úvěr ve výchozím nastavení považovat za půjčku na vyžádání",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tento účet slouží k rezervaci splátek půjčky od dlužníka a také k vyplácení půjček dlužníkovi,
This account is capital account which is used to allocate capital for loan disbursal account ,"Tento účet je kapitálovým účtem, který se používá k přidělení kapitálu pro účet vyplácení půjček",
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Operace {0} nepatří do pracovního příkazu {1},
Print UOM after Quantity,Tisk MJ po množství,
Set default {0} account for perpetual inventory for non stock items,U výchozích položek nastavte výchozí účet {0} pro věčný inventář,
-Loan Security {0} added multiple times,Zabezpečení půjčky {0} přidáno několikrát,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Úvěrové cenné papíry s různým poměrem LTV nelze zastavit proti jedné půjčce,
-Qty or Amount is mandatory for loan security!,Množství nebo částka je pro zajištění půjčky povinné!,
-Only submittted unpledge requests can be approved,Schváleny mohou být pouze odeslané žádosti o odpojení,
-Interest Amount or Principal Amount is mandatory,Částka úroku nebo částka jistiny je povinná,
-Disbursed Amount cannot be greater than {0},Vyplacená částka nemůže být větší než {0},
-Row {0}: Loan Security {1} added multiple times,Řádek {0}: Zabezpečení půjčky {1} přidáno několikrát,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Řádek č. {0}: Podřízená položka by neměla být balíkem produktů. Odeberte prosím položku {1} a uložte ji,
Credit limit reached for customer {0},Dosažen úvěrový limit pro zákazníka {0},
Could not auto create Customer due to the following missing mandatory field(s):,Nelze automaticky vytvořit zákazníka kvůli následujícím chybějícím povinným polím:,
diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv
index 05a9042..863de02 100644
--- a/erpnext/translations/da.csv
+++ b/erpnext/translations/da.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Gælder hvis virksomheden er SpA, SApA eller SRL",
Applicable if the company is a limited liability company,"Gælder, hvis virksomheden er et aktieselskab",
Applicable if the company is an Individual or a Proprietorship,"Gælder, hvis virksomheden er et individ eller et ejerskab",
-Applicant,Ansøger,
-Applicant Type,Ansøgertype,
Application of Funds (Assets),Anvendelse af midler (aktiver),
Application period cannot be across two allocation records,Ansøgningsperioden kan ikke være på tværs af to tildelingsregistre,
Application period cannot be outside leave allocation period,Ansøgningsperiode kan ikke være uden for orlov tildelingsperiode,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Liste over tilgængelige aktionærer med folio numre,
Loading Payment System,Indlæser betalingssystem,
Loan,Lån,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Lånebeløb kan ikke overstige det maksimale lånebeløb på {0},
-Loan Application,Låneansøgning,
-Loan Management,Lånestyring,
-Loan Repayment,Tilbagebetaling af lån,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Lånets startdato og låneperiode er obligatorisk for at gemme fakturadiskontering,
Loans (Liabilities),Lån (passiver),
Loans and Advances (Assets),Udlån (aktiver),
@@ -1611,7 +1605,6 @@
Monday,Mandag,
Monthly,Månedlig,
Monthly Distribution,Månedlig distribution,
-Monthly Repayment Amount cannot be greater than Loan Amount,Månedlig tilbagebetaling beløb kan ikke være større end Lånebeløb,
More,Mere,
More Information,Mere information,
More than one selection for {0} not allowed,Mere end et valg for {0} er ikke tilladt,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Betal {0} {1},
Payable,betales,
Payable Account,Betales konto,
-Payable Amount,Betalbart beløb,
Payment,Betaling,
Payment Cancelled. Please check your GoCardless Account for more details,Betaling annulleret. Tjek venligst din GoCardless-konto for flere detaljer,
Payment Confirmation,Betalingsbekræftelse,
-Payment Date,Betalingsdato,
Payment Days,Betalingsdage,
Payment Document,Betaling dokument,
Payment Due Date,Sidste betalingsdato,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Indtast venligst købskvittering først,
Please enter Receipt Document,Indtast Kvittering Dokument,
Please enter Reference date,Indtast referencedato,
-Please enter Repayment Periods,Indtast venligst Tilbagebetalingstid,
Please enter Reqd by Date,Indtast venligst Reqd by Date,
Please enter Woocommerce Server URL,Indtast venligst Woocommerce Server URL,
Please enter Write Off Account,Indtast venligst Skriv Off konto,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Indtast overordnet omkostningssted,
Please enter quantity for Item {0},Indtast mængde for vare {0},
Please enter relieving date.,Indtast lindre dato.,
-Please enter repayment Amount,Indtast tilbagebetaling Beløb,
Please enter valid Financial Year Start and End Dates,Indtast venligst det gyldige regnskabsårs start- og slutdatoer,
Please enter valid email address,Indtast venligst en gyldig e-mailadresse,
Please enter {0} first,Indtast venligst {0} først,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Prisfastsættelsesregler er yderligere filtreret på mængden.,
Primary Address Details,Primær adresseoplysninger,
Primary Contact Details,Primær kontaktoplysninger,
-Principal Amount,hovedstol,
Print Format,Udskriftsformat,
Print IRS 1099 Forms,Udskriv IRS 1099-formularer,
Print Report Card,Udskriv rapportkort,
@@ -2550,7 +2538,6 @@
Sample Collection,Prøveopsamling,
Sample quantity {0} cannot be more than received quantity {1},Prøvekvantitet {0} kan ikke være mere end modtaget mængde {1},
Sanctioned,sanktioneret,
-Sanctioned Amount,Sanktioneret beløb,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Bevilliget beløb kan ikke være større end udlægsbeløbet i række {0}.,
Sand,Sand,
Saturday,Lørdag,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} har allerede en overordnet procedure {1}.,
API,API,
Annual,Årligt,
-Approved,godkendt,
Change,Ændring,
Contact Email,Kontakt e-mail,
Export Type,Eksporttype,
@@ -3571,7 +3557,6 @@
Account Value,Kontoværdi,
Account is mandatory to get payment entries,Konto er obligatorisk for at få betalingsposter,
Account is not set for the dashboard chart {0},Konto er ikke indstillet til betjeningspanelet {0},
-Account {0} does not belong to company {1},Konto {0} tilhører ikke virksomheden {1},
Account {0} does not exists in the dashboard chart {1},Konto {0} findes ikke i kontrolpanelet {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Konto: <b>{0}</b> er kapital Arbejde pågår og kan ikke opdateres af journalindtastning,
Account: {0} is not permitted under Payment Entry,Konto: {0} er ikke tilladt under betalingsindtastning,
@@ -3582,7 +3567,6 @@
Activity,Aktivitet,
Add / Manage Email Accounts.,Tilføj / Håndter e-mail-konti.,
Add Child,Tilføj ny,
-Add Loan Security,Tilføj lånesikkerhed,
Add Multiple,Tilføj flere,
Add Participants,Tilføj deltagerne,
Add to Featured Item,Føj til den valgte vare,
@@ -3593,15 +3577,12 @@
Address Line 1,Adresse,
Addresses,Adresser,
Admission End Date should be greater than Admission Start Date.,Indgangssluttedato skal være større end startdato for optagelse.,
-Against Loan,Mod lån,
-Against Loan:,Mod lån:,
All,Alle,
All bank transactions have been created,Alle banktransaktioner er oprettet,
All the depreciations has been booked,Alle afskrivninger er booket,
Allocation Expired!,Tildeling udløbet!,
Allow Resetting Service Level Agreement from Support Settings.,Tillad nulstilling af serviceniveauaftale fra supportindstillinger.,
Amount of {0} is required for Loan closure,Der kræves et beløb på {0} til lukning af lånet,
-Amount paid cannot be zero,Det betalte beløb kan ikke være nul,
Applied Coupon Code,Anvendt kuponkode,
Apply Coupon Code,Anvend kuponkode,
Appointment Booking,Udnævnelsesreservation,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Kan ikke beregne ankomsttid, da driveradressen mangler.",
Cannot Optimize Route as Driver Address is Missing.,"Kan ikke optimere ruten, da driveradressen mangler.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Kan ikke udføre opgave {0}, da dens afhængige opgave {1} ikke er komplet / annulleret.",
-Cannot create loan until application is approved,"Kan ikke oprette lån, før ansøgningen er godkendt",
Cannot find a matching Item. Please select some other value for {0}.,Kan ikke finde en matchende Item. Vælg en anden værdi for {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",Kan ikke overbillede for vare {0} i række {1} mere end {2}. For at tillade overfakturering skal du angive kvote i Kontoindstillinger,
"Capacity Planning Error, planned start time can not be same as end time","Kapacitetsplanlægningsfejl, planlagt starttid kan ikke være det samme som sluttid",
@@ -3812,20 +3792,9 @@
Less Than Amount,Mindre end beløb,
Liabilities,passiver,
Loading...,Indlæser ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Lånebeløb overstiger det maksimale lånebeløb på {0} pr. Foreslået værdipapirer,
Loan Applications from customers and employees.,Låneansøgninger fra kunder og ansatte.,
-Loan Disbursement,Udbetaling af lån,
Loan Processes,Låneprocesser,
-Loan Security,Lånesikkerhed,
-Loan Security Pledge,Lånesikkerheds pantsætning,
-Loan Security Pledge Created : {0},Lånesikkerhedslove oprettet: {0},
-Loan Security Price,Lånesikkerhedspris,
-Loan Security Price overlapping with {0},"Lånesikkerhedspris, der overlapper med {0}",
-Loan Security Unpledge,Unpedge-lånesikkerhed,
-Loan Security Value,Lånesikkerhedsværdi,
Loan Type for interest and penalty rates,Lånetype til renter og sanktioner,
-Loan amount cannot be greater than {0},Lånebeløbet kan ikke være større end {0},
-Loan is mandatory,Lån er obligatorisk,
Loans,lån,
Loans provided to customers and employees.,Lån ydet til kunder og ansatte.,
Location,Lokation,
@@ -3894,7 +3863,6 @@
Pay,Betale,
Payment Document Type,Betalingsdokumenttype,
Payment Name,Betalingsnavn,
-Penalty Amount,Straffebeløb,
Pending,Afventer,
Performance,Ydeevne,
Period based On,Periode baseret på,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Log ind som Marketplace-bruger for at redigere denne vare.,
Please login as a Marketplace User to report this item.,Log ind som Marketplace-bruger for at rapportere denne vare.,
Please select <b>Template Type</b> to download template,Vælg <b>skabelontype for</b> at downloade skabelon,
-Please select Applicant Type first,Vælg først ansøgertype,
Please select Customer first,Vælg først kunde,
Please select Item Code first,Vælg først varekode,
-Please select Loan Type for company {0},Vælg lånetype for firmaet {0},
Please select a Delivery Note,Vælg en leveringsnotat,
Please select a Sales Person for item: {0},Vælg en salgsperson for varen: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Vælg venligst en anden betalingsmetode. Stripe understøtter ikke transaktioner i valuta '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Opret en standard bankkonto for firmaet {0},
Please specify,Angiv venligst,
Please specify a {0},Angiv en {0},lead
-Pledge Status,Pantstatus,
-Pledge Time,Pantetid,
Printing,Udskrivning,
Priority,Prioritet,
Priority has been changed to {0}.,Prioritet er ændret til {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Behandler XML-filer,
Profitability,Rentabilitet,
Project,Sag,
-Proposed Pledges are mandatory for secured Loans,Foreslåede løfter er obligatoriske for sikrede lån,
Provide the academic year and set the starting and ending date.,"Angiv studieåret, og angiv start- og slutdato.",
Public token is missing for this bank,Der mangler en offentlig token til denne bank,
Publish,Offentliggøre,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Købskvittering har ingen varer, som Beholdningsprøve er aktiveret til.",
Purchase Return,Indkøb Return,
Qty of Finished Goods Item,Antal færdige varer,
-Qty or Amount is mandatroy for loan security,Antal eller beløb er mandatroy for lån sikkerhed,
Quality Inspection required for Item {0} to submit,Kvalitetskontrol kræves for at indsende vare {0},
Quantity to Manufacture,Mængde til fremstilling,
Quantity to Manufacture can not be zero for the operation {0},Mængde til fremstilling kan ikke være nul for handlingen {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Fritagelsesdato skal være større end eller lig med tiltrædelsesdato,
Rename,Omdøb,
Rename Not Allowed,Omdøb ikke tilladt,
-Repayment Method is mandatory for term loans,Tilbagebetalingsmetode er obligatorisk for kortfristede lån,
-Repayment Start Date is mandatory for term loans,Startdato for tilbagebetaling er obligatorisk for kortfristede lån,
Report Item,Rapporter element,
Report this Item,Rapporter denne vare,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reserveret antal til underentreprise: Mængde af råvarer til fremstilling af underentrepriser.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Række ({0}): {1} er allerede nedsat i {2},
Rows Added in {0},Rækker tilføjet i {0},
Rows Removed in {0},Rækker blev fjernet i {0},
-Sanctioned Amount limit crossed for {0} {1},"Sanktioneret beløb, der er overskredet for {0} {1}",
-Sanctioned Loan Amount already exists for {0} against company {1},Sanktioneret lånebeløb findes allerede for {0} mod selskab {1},
Save,Gem,
Save Item,Gem vare,
Saved Items,Gemte varer,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Bruger {0} er deaktiveret,
Users and Permissions,Brugere og tilladelser,
Vacancies cannot be lower than the current openings,Ledige stillinger kan ikke være lavere end de nuværende åbninger,
-Valid From Time must be lesser than Valid Upto Time.,Gyldig fra tid skal være mindre end gyldig indtil tid.,
Valuation Rate required for Item {0} at row {1},Værdiansættelsesgrad krævet for vare {0} i række {1},
Values Out Of Sync,Værdier ude af synkronisering,
Vehicle Type is required if Mode of Transport is Road,"Køretøjstype er påkrævet, hvis transportform er vej",
@@ -4211,7 +4168,6 @@
Add to Cart,Føj til indkøbsvogn,
Days Since Last Order,Dage siden sidste ordre,
In Stock,På lager,
-Loan Amount is mandatory,Lånebeløb er obligatorisk,
Mode Of Payment,Betalingsmåde,
No students Found,Ingen studerende fundet,
Not in Stock,Ikke på lager,
@@ -4240,7 +4196,6 @@
Group by,Sortér efter,
In stock,På lager,
Item name,Varenavn,
-Loan amount is mandatory,Lånebeløb er obligatorisk,
Minimum Qty,Minimum antal,
More details,Flere detaljer,
Nature of Supplies,Forsyningens art,
@@ -4409,9 +4364,6 @@
Total Completed Qty,I alt afsluttet antal,
Qty to Manufacture,Antal at producere,
Repay From Salary can be selected only for term loans,Tilbagebetaling fra løn kan kun vælges til løbetidslån,
-No valid Loan Security Price found for {0},Der blev ikke fundet nogen gyldig lånesikkerhedspris for {0},
-Loan Account and Payment Account cannot be same,Lånekonto og betalingskonto kan ikke være den samme,
-Loan Security Pledge can only be created for secured loans,Lånsikkerhedspant kan kun oprettes for sikrede lån,
Social Media Campaigns,Sociale mediekampagner,
From Date can not be greater than To Date,Fra dato kan ikke være større end til dato,
Please set a Customer linked to the Patient,"Indstil en kunde, der er knyttet til patienten",
@@ -6437,7 +6389,6 @@
HR User,HR-bruger,
Appointment Letter,Aftalerbrev,
Job Applicant,Ansøger,
-Applicant Name,Ansøgernavn,
Appointment Date,Udnævnelsesdato,
Appointment Letter Template,Aftalebrevskabelon,
Body,Legeme,
@@ -7059,99 +7010,12 @@
Sync in Progress,Synkronisering i gang,
Hub Seller Name,Hub Sælger Navn,
Custom Data,Brugerdefinerede data,
-Member,Medlem,
-Partially Disbursed,Delvist udbetalt,
-Loan Closure Requested,Anmodet om lukning,
Repay From Salary,Tilbagebetale fra Løn,
-Loan Details,Lånedetaljer,
-Loan Type,Lånetype,
-Loan Amount,Lånebeløb,
-Is Secured Loan,Er sikret lån,
-Rate of Interest (%) / Year,Rente (%) / år,
-Disbursement Date,Udbetaling Dato,
-Disbursed Amount,Udbetalt beløb,
-Is Term Loan,Er terminlån,
-Repayment Method,tilbagebetaling Metode,
-Repay Fixed Amount per Period,Tilbagebetale fast beløb pr Periode,
-Repay Over Number of Periods,Tilbagebetale over antallet af perioder,
-Repayment Period in Months,Tilbagebetaling Periode i måneder,
-Monthly Repayment Amount,Månedlige ydelse Beløb,
-Repayment Start Date,Tilbagebetaling Startdato,
-Loan Security Details,Detaljer om lånesikkerhed,
-Maximum Loan Value,Maksimal låneværdi,
-Account Info,Kontooplysninger,
-Loan Account,Lånekonto,
-Interest Income Account,Renter Indkomst konto,
-Penalty Income Account,Penalty Income Account,
-Repayment Schedule,tilbagebetaling Schedule,
-Total Payable Amount,Samlet Betales Beløb,
-Total Principal Paid,Total betalt hovedstol,
-Total Interest Payable,Samlet Renteudgifter,
-Total Amount Paid,Samlede beløb betalt,
-Loan Manager,Låneadministrator,
-Loan Info,Låneinformation,
-Rate of Interest,Rentesats,
-Proposed Pledges,Foreslåede løfter,
-Maximum Loan Amount,Maksimalt lånebeløb,
-Repayment Info,tilbagebetaling Info,
-Total Payable Interest,Samlet Betales Renter,
-Against Loan ,Mod lån,
-Loan Interest Accrual,Periodisering af lånerenter,
-Amounts,Beløb,
-Pending Principal Amount,Afventende hovedbeløb,
-Payable Principal Amount,Betalbart hovedbeløb,
-Paid Principal Amount,Betalt hovedbeløb,
-Paid Interest Amount,Betalt rentebeløb,
-Process Loan Interest Accrual,Proceslån Renter Periodisering,
-Repayment Schedule Name,Navn på tilbagebetalingsplan,
Regular Payment,Regelmæssig betaling,
Loan Closure,Lånelukning,
-Payment Details,Betalingsoplysninger,
-Interest Payable,Rentebetaling,
-Amount Paid,Beløb betalt,
-Principal Amount Paid,Hovedbeløb betalt,
-Repayment Details,Detaljer om tilbagebetaling,
-Loan Repayment Detail,Detaljer om tilbagebetaling af lån,
-Loan Security Name,Lånesikkerhedsnavn,
-Unit Of Measure,Måleenhed,
-Loan Security Code,Lånesikkerhedskode,
-Loan Security Type,Lånesikkerhedstype,
-Haircut %,Hårklip%,
-Loan Details,Lånedetaljer,
-Unpledged,ubelånte,
-Pledged,pantsat,
-Partially Pledged,Delvist pantsat,
-Securities,Værdipapirer,
-Total Security Value,Samlet sikkerhedsværdi,
-Loan Security Shortfall,Lånesikkerhedsunderskud,
-Loan ,Lån,
-Shortfall Time,Mangel på tid,
-America/New_York,Amerika / New_York,
-Shortfall Amount,Mangel på beløb,
-Security Value ,Sikkerhedsværdi,
-Process Loan Security Shortfall,Proceslånsikkerhedsunderskud,
-Loan To Value Ratio,Udlån til værdiforhold,
-Unpledge Time,Unpedge-tid,
-Loan Name,Lånenavn,
Rate of Interest (%) Yearly,Rente (%) Årlig,
-Penalty Interest Rate (%) Per Day,Straffesats (%) pr. Dag,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Straffesats opkræves dagligt for det verserende rentebeløb i tilfælde af forsinket tilbagebetaling,
-Grace Period in Days,Nådeperiode i dage,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Antal dage fra forfaldsdato, indtil bøden ikke opkræves i tilfælde af forsinkelse i tilbagebetaling af lån",
-Pledge,Løfte,
-Post Haircut Amount,Efter hårklipmængde,
-Process Type,Process Type,
-Update Time,Opdateringstid,
-Proposed Pledge,Foreslået løfte,
-Total Payment,Samlet betaling,
-Balance Loan Amount,Balance Lånebeløb,
-Is Accrued,Er periodiseret,
Salary Slip Loan,Salary Slip Lån,
Loan Repayment Entry,Indlån til tilbagebetaling af lån,
-Sanctioned Loan Amount,Sanktioneret lånebeløb,
-Sanctioned Amount Limit,Sanktioneret beløbsgrænse,
-Unpledge,Unpledge,
-Haircut,Klipning,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Generer Schedule,
Schedules,Tidsplaner,
@@ -7885,7 +7749,6 @@
Update Series,Opdatering Series,
Change the starting / current sequence number of an existing series.,Skift start / aktuelle sekvensnummer af en eksisterende serie.,
Prefix,Præfiks,
-Current Value,Aktuel værdi,
This is the number of the last created transaction with this prefix,Dette er antallet af sidste skabte transaktionen med dette præfiks,
Update Series Number,Opdatering Series Number,
Quotation Lost Reason,Tilbud afvist - årsag,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Anbefalet genbestillings Level,
Lead Details,Emnedetaljer,
Lead Owner Efficiency,Lederegenskaber Effektivitet,
-Loan Repayment and Closure,Tilbagebetaling og lukning af lån,
-Loan Security Status,Lånesikkerhedsstatus,
Lost Opportunity,Mistet mulighed,
Maintenance Schedules,Vedligeholdelsesplaner,
Material Requests for which Supplier Quotations are not created,Materialeanmodninger under hvilke leverandørtilbud ikke er oprettet,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Måltællinger: {0},
Payment Account is mandatory,Betalingskonto er obligatorisk,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Hvis dette er markeret, trækkes hele beløbet fra skattepligtig indkomst inden beregning af indkomstskat uden nogen erklæring eller bevisafgivelse.",
-Disbursement Details,Udbetalingsoplysninger,
Material Request Warehouse,Materialeanmodningslager,
Select warehouse for material requests,Vælg lager til materialeanmodninger,
Transfer Materials For Warehouse {0},Overfør materiale til lager {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Tilbagebetal ikke-krævet beløb fra løn,
Deduction from salary,Fradrag fra løn,
Expired Leaves,Udløbne blade,
-Reference No,referencenummer,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,"Hårklippeprocent er den procentvise forskel mellem markedsværdien af lånesikkerheden og den værdi, der tilskrives lånets sikkerhed, når den anvendes som sikkerhed for dette lån.",
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Loan To Value Ratio udtrykker forholdet mellem lånebeløbet og værdien af den pantsatte sikkerhed. Et lånesikkerhedsmangel udløses, hvis dette falder under den specificerede værdi for et lån",
If this is not checked the loan by default will be considered as a Demand Loan,"Hvis dette ikke er markeret, vil lånet som standard blive betragtet som et behovslån",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Denne konto bruges til at booke tilbagebetaling af lån fra låntager og også udbetale lån til låntager,
This account is capital account which is used to allocate capital for loan disbursal account ,"Denne konto er en kapitalkonto, der bruges til at allokere kapital til udbetaling af lånekonto",
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Handling {0} tilhører ikke arbejdsordren {1},
Print UOM after Quantity,Udskriv UOM efter antal,
Set default {0} account for perpetual inventory for non stock items,"Indstil standard {0} -konto for evigvarende beholdning for varer, der ikke er på lager",
-Loan Security {0} added multiple times,Lånesikkerhed {0} tilføjet flere gange,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Lånepapirer med forskellige LTV-forhold kan ikke pantsættes mod et lån,
-Qty or Amount is mandatory for loan security!,Antal eller beløb er obligatorisk for lånesikkerhed!,
-Only submittted unpledge requests can be approved,Kun indsendte anmodninger om ikke-pant kan godkendes,
-Interest Amount or Principal Amount is mandatory,Rentebeløb eller hovedbeløb er obligatorisk,
-Disbursed Amount cannot be greater than {0},Udbetalt beløb kan ikke være større end {0},
-Row {0}: Loan Security {1} added multiple times,Række {0}: Lånesikkerhed {1} tilføjet flere gange,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,"Række nr. {0}: Underordnet vare bør ikke være en produktpakke. Fjern element {1}, og gem",
Credit limit reached for customer {0},Kreditgrænse nået for kunde {0},
Could not auto create Customer due to the following missing mandatory field(s):,Kunne ikke automatisk oprette kunde på grund af følgende manglende obligatoriske felter:,
diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv
index f9ec689..26a775e 100644
--- a/erpnext/translations/de.csv
+++ b/erpnext/translations/de.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Anwendbar, wenn das Unternehmen SpA, SApA oder SRL ist",
Applicable if the company is a limited liability company,"Anwendbar, wenn die Gesellschaft eine Gesellschaft mit beschränkter Haftung ist",
Applicable if the company is an Individual or a Proprietorship,"Anwendbar, wenn das Unternehmen eine Einzelperson oder ein Eigentum ist",
-Applicant,Antragsteller,
-Applicant Type,Bewerbertyp,
Application of Funds (Assets),Mittelverwendung (Aktiva),
Application period cannot be across two allocation records,Der Bewerbungszeitraum kann nicht über zwei Zuordnungssätze liegen,
Application period cannot be outside leave allocation period,Beantragter Zeitraum kann nicht außerhalb der beantragten Urlaubszeit liegen,
@@ -1477,10 +1475,6 @@
List of available Shareholders with folio numbers,Liste der verfügbaren Aktionäre mit Folio-Nummern,
Loading Payment System,Zahlungssystem wird geladen,
Loan,Darlehen,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Darlehensbetrag darf nicht höher als der Maximalbetrag {0} sein,
-Loan Application,Kreditantrag,
-Loan Management,Darlehensverwaltung,
-Loan Repayment,Darlehensrückzahlung,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,"Das Ausleihbeginndatum und die Ausleihdauer sind obligatorisch, um die Rechnungsdiskontierung zu speichern",
Loans (Liabilities),Darlehen/Kredite (Verbindlichkeiten),
Loans and Advances (Assets),Darlehen und Anzahlungen (Aktiva),
@@ -1618,7 +1612,6 @@
Monday,Montag,
Monthly,Monatlich,
Monthly Distribution,Monatsbezogene Verteilung,
-Monthly Repayment Amount cannot be greater than Loan Amount,Monatlicher Rückzahlungsbetrag kann nicht größer sein als Darlehensbetrag,
More,Weiter,
More Information,Mehr Informationen,
More than one selection for {0} not allowed,Mehr als eine Auswahl für {0} ist nicht zulässig,
@@ -1893,11 +1886,9 @@
Pay {0} {1},Bezahle {0} {1},
Payable,Zahlbar,
Payable Account,Verbindlichkeiten-Konto,
-Payable Amount,Bezahlbarer Betrag,
Payment,Bezahlung,
Payment Cancelled. Please check your GoCardless Account for more details,Zahlung abgebrochen. Bitte überprüfen Sie Ihr GoCardless Konto für weitere Details,
Payment Confirmation,Zahlungsbestätigung,
-Payment Date,Zahlungsdatum,
Payment Days,Zahlungsziel,
Payment Document,Zahlungsbeleg,
Payment Due Date,Zahlungsstichtag,
@@ -1991,7 +1982,6 @@
Please enter Purchase Receipt first,Bitte zuerst Kaufbeleg eingeben,
Please enter Receipt Document,Bitte geben Sie Eingangsbeleg,
Please enter Reference date,Bitte den Stichtag eingeben,
-Please enter Repayment Periods,Bitte geben Sie Laufzeiten,
Please enter Reqd by Date,Bitte geben Sie Requd by Date ein,
Please enter Woocommerce Server URL,Bitte geben Sie die Woocommerce Server URL ein,
Please enter Write Off Account,Bitte Abschreibungskonto eingeben,
@@ -2003,7 +1993,6 @@
Please enter parent cost center,Bitte übergeordnete Kostenstelle eingeben,
Please enter quantity for Item {0},Bitte die Menge für Artikel {0} eingeben,
Please enter relieving date.,Bitte Freistellungsdatum eingeben.,
-Please enter repayment Amount,Bitte geben Sie Rückzahlungsbetrag,
Please enter valid Financial Year Start and End Dates,Bitte geben Sie für das Geschäftsjahr einen gültigen Start- und Endtermin an.,
Please enter valid email address,Bitte geben Sie eine gültige Email Adresse an,
Please enter {0} first,Bitte geben Sie zuerst {0} ein,
@@ -2166,7 +2155,6 @@
Pricing Rules are further filtered based on quantity.,Preisregeln werden zudem nach Menge angewandt.,
Primary Address Details,Primäre Adressendetails,
Primary Contact Details,Primäre Kontaktdaten,
-Principal Amount,Nennbetrag,
Print Format,Druckformat,
Print IRS 1099 Forms,Drucken Sie IRS 1099-Formulare,
Print Report Card,Berichtskarte drucken,
@@ -2557,7 +2545,6 @@
Sample Collection,Mustersammlung,
Sample quantity {0} cannot be more than received quantity {1},Die Beispielmenge {0} darf nicht mehr als die empfangene Menge {1} sein,
Sanctioned,sanktionierte,
-Sanctioned Amount,Genehmigter Betrag,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Genehmigter Betrag kann nicht größer als geforderter Betrag in Zeile {0} sein.,
Sand,Sand,
Saturday,Samstag,
@@ -3058,7 +3045,7 @@
To date can not be equal or less than from date,Bis heute kann nicht gleich oder weniger als von Datum sein,
To date can not be less than from date,Bis heute kann nicht weniger als von Datum sein,
To date can not greater than employee's relieving date,Bis heute kann nicht mehr als Entlastungsdatum des Mitarbeiters sein,
-"To filter based on Party, select Party Type first","Bitte Partei-Typ wählen um nach Partei zu filtern",
+"To filter based on Party, select Party Type first",Bitte Partei-Typ wählen um nach Partei zu filtern,
"To get the best out of ERPNext, we recommend that you take some time and watch these help videos.","Um ERPNext bestmöglich zu nutzen, empfehlen wir Ihnen, sich die Zeit zu nehmen diese Hilfevideos anzusehen.",
"To include tax in row {0} in Item rate, taxes in rows {1} must also be included","Um Steuern im Artikelpreis in Zeile {0} einzubeziehen, müssen Steuern in den Zeilen {1} ebenfalls einbezogen sein",
To make Customer based incentive schemes.,Um Kunden basierte Anreizsysteme zu machen.,
@@ -3548,7 +3535,6 @@
{0} already has a Parent Procedure {1}.,{0} hat bereits eine übergeordnete Prozedur {1}.,
API,API,
Annual,Jährlich,
-Approved,Genehmigt,
Change,Ändern,
Contact Email,Kontakt-E-Mail,
Export Type,Exporttyp,
@@ -3578,7 +3564,6 @@
Account Value,Kontostand,
Account is mandatory to get payment entries,"Das Konto ist obligatorisch, um Zahlungseinträge zu erhalten",
Account is not set for the dashboard chart {0},Konto ist nicht für das Dashboard-Diagramm {0} festgelegt.,
-Account {0} does not belong to company {1},Konto {0} gehört nicht zu Firma {1},
Account {0} does not exists in the dashboard chart {1},Konto {0} ist im Dashboard-Diagramm {1} nicht vorhanden,
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Konto: <b>{0}</b> ist in Bearbeitung und kann von Journal Entry nicht aktualisiert werden,
Account: {0} is not permitted under Payment Entry,Konto: {0} ist unter Zahlungseingang nicht zulässig,
@@ -3589,7 +3574,6 @@
Activity,Aktivität,
Add / Manage Email Accounts.,Hinzufügen/Verwalten von E-Mail-Konten,
Add Child,Unterpunkt hinzufügen,
-Add Loan Security,Darlehenssicherheit hinzufügen,
Add Multiple,Mehrere hinzufügen,
Add Participants,Teilnehmer hinzufügen,
Add to Featured Item,Zum empfohlenen Artikel hinzufügen,
@@ -3600,15 +3584,12 @@
Address Line 1,Adresse Zeile 1,
Addresses,Adressen,
Admission End Date should be greater than Admission Start Date.,Das Enddatum der Zulassung sollte größer sein als das Startdatum der Zulassung.,
-Against Loan,Gegen Darlehen,
-Against Loan:,Gegen Darlehen:,
All,Alle,
All bank transactions have been created,Alle Bankgeschäfte wurden angelegt,
All the depreciations has been booked,Alle Abschreibungen wurden gebucht,
Allocation Expired!,Zuteilung abgelaufen!,
Allow Resetting Service Level Agreement from Support Settings.,Zurücksetzen des Service Level Agreements in den Support-Einstellungen zulassen.,
Amount of {0} is required for Loan closure,Für den Kreditabschluss ist ein Betrag von {0} erforderlich,
-Amount paid cannot be zero,Der gezahlte Betrag darf nicht Null sein,
Applied Coupon Code,Angewandter Gutscheincode,
Apply Coupon Code,Gutscheincode anwenden,
Appointment Booking,Terminreservierung,
@@ -3656,7 +3637,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Die Ankunftszeit kann nicht berechnet werden, da die Adresse des Fahrers fehlt.",
Cannot Optimize Route as Driver Address is Missing.,"Route kann nicht optimiert werden, da die Fahreradresse fehlt.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Aufgabe {0} kann nicht abgeschlossen werden, da die abhängige Aufgabe {1} nicht abgeschlossen / abgebrochen wurde.",
-Cannot create loan until application is approved,"Darlehen kann erst erstellt werden, wenn der Antrag genehmigt wurde",
Cannot find a matching Item. Please select some other value for {0}.,Ein passender Artikel kann nicht gefunden werden. Bitte einen anderen Wert für {0} auswählen.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Artikel {0} in Zeile {1} kann nicht mehr als {2} in Rechnung gestellt werden. Um eine Überberechnung zuzulassen, legen Sie die Überberechnung in den Kontoeinstellungen fest",
"Capacity Planning Error, planned start time can not be same as end time","Kapazitätsplanungsfehler, die geplante Startzeit darf nicht mit der Endzeit übereinstimmen",
@@ -3819,20 +3799,9 @@
Less Than Amount,Weniger als der Betrag,
Liabilities,Verbindlichkeiten,
Loading...,Laden ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Der Darlehensbetrag übersteigt den maximalen Darlehensbetrag von {0} gemäß den vorgeschlagenen Wertpapieren,
Loan Applications from customers and employees.,Kreditanträge von Kunden und Mitarbeitern.,
-Loan Disbursement,Kreditauszahlung,
Loan Processes,Darlehensprozesse,
-Loan Security,Kreditsicherheit,
-Loan Security Pledge,Kreditsicherheitsversprechen,
-Loan Security Pledge Created : {0},Kreditsicherheitsversprechen Erstellt: {0},
-Loan Security Price,Kreditsicherheitspreis,
-Loan Security Price overlapping with {0},Kreditsicherheitspreis überschneidet sich mit {0},
-Loan Security Unpledge,Kreditsicherheit nicht verpfändet,
-Loan Security Value,Kreditsicherheitswert,
Loan Type for interest and penalty rates,Darlehensart für Zins- und Strafzinssätze,
-Loan amount cannot be greater than {0},Der Darlehensbetrag darf nicht größer als {0} sein.,
-Loan is mandatory,Darlehen ist obligatorisch,
Loans,Kredite,
Loans provided to customers and employees.,Kredite an Kunden und Mitarbeiter.,
Location,Ort,
@@ -3901,7 +3870,6 @@
Pay,Zahlen,
Payment Document Type,Zahlungsbelegart,
Payment Name,Zahlungsname,
-Penalty Amount,Strafbetrag,
Pending,Ausstehend,
Performance,Performance,
Period based On,Zeitraum basierend auf,
@@ -3923,10 +3891,8 @@
Please login as a Marketplace User to edit this item.,"Bitte melden Sie sich als Marketplace-Benutzer an, um diesen Artikel zu bearbeiten.",
Please login as a Marketplace User to report this item.,"Bitte melden Sie sich als Marketplace-Benutzer an, um diesen Artikel zu melden.",
Please select <b>Template Type</b> to download template,"Bitte wählen Sie <b>Vorlagentyp</b> , um die Vorlage herunterzuladen",
-Please select Applicant Type first,Bitte wählen Sie zuerst den Antragstellertyp aus,
Please select Customer first,Bitte wählen Sie zuerst den Kunden aus,
Please select Item Code first,Bitte wählen Sie zuerst den Artikelcode,
-Please select Loan Type for company {0},Bitte wählen Sie Darlehensart für Firma {0},
Please select a Delivery Note,Bitte wählen Sie einen Lieferschein,
Please select a Sales Person for item: {0},Bitte wählen Sie einen Verkäufer für den Artikel: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Bitte wählen Sie eine andere Zahlungsmethode. Stripe unterstützt keine Transaktionen in der Währung '{0}',
@@ -3942,8 +3908,6 @@
Please setup a default bank account for company {0},Bitte richten Sie ein Standard-Bankkonto für das Unternehmen {0} ein.,
Please specify,Bitte angeben,
Please specify a {0},Bitte geben Sie eine {0} an,lead
-Pledge Status,Verpfändungsstatus,
-Pledge Time,Verpfändungszeit,
Printing,Druck,
Priority,Priorität,
Priority has been changed to {0}.,Die Priorität wurde in {0} geändert.,
@@ -3951,7 +3915,6 @@
Processing XML Files,XML-Dateien verarbeiten,
Profitability,Rentabilität,
Project,Projekt,
-Proposed Pledges are mandatory for secured Loans,Vorgeschlagene Zusagen sind für gesicherte Kredite obligatorisch,
Provide the academic year and set the starting and ending date.,Geben Sie das akademische Jahr an und legen Sie das Start- und Enddatum fest.,
Public token is missing for this bank,Für diese Bank fehlt ein öffentlicher Token,
Publish,Veröffentlichen,
@@ -3967,7 +3930,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Der Kaufbeleg enthält keinen Artikel, für den die Option "Probe aufbewahren" aktiviert ist.",
Purchase Return,Warenrücksendung,
Qty of Finished Goods Item,Menge des Fertigerzeugnisses,
-Qty or Amount is mandatroy for loan security,Menge oder Betrag ist ein Mandat für die Kreditsicherheit,
Quality Inspection required for Item {0} to submit,"Qualitätsprüfung erforderlich, damit Artikel {0} eingereicht werden kann",
Quantity to Manufacture,Menge zu fertigen,
Quantity to Manufacture can not be zero for the operation {0},Die herzustellende Menge darf für den Vorgang {0} nicht Null sein.,
@@ -3988,8 +3950,6 @@
Relieving Date must be greater than or equal to Date of Joining,Das Ablösungsdatum muss größer oder gleich dem Beitrittsdatum sein,
Rename,Umbenennen,
Rename Not Allowed,Umbenennen nicht erlaubt,
-Repayment Method is mandatory for term loans,Die Rückzahlungsmethode ist für befristete Darlehen obligatorisch,
-Repayment Start Date is mandatory for term loans,Das Startdatum der Rückzahlung ist für befristete Darlehen obligatorisch,
Report Item,Artikel melden,
Report this Item,Melden Sie diesen Artikel an,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reservierte Menge für Lohnbearbeiter: Rohstoffmenge für Lohnbearbeiter.,
@@ -4022,8 +3982,6 @@
Row({0}): {1} is already discounted in {2},Zeile ({0}): {1} ist bereits in {2} abgezinst.,
Rows Added in {0},Zeilen hinzugefügt in {0},
Rows Removed in {0},Zeilen in {0} entfernt,
-Sanctioned Amount limit crossed for {0} {1},Sanktionsbetrag für {0} {1} überschritten,
-Sanctioned Loan Amount already exists for {0} against company {1},Der genehmigte Darlehensbetrag für {0} gegen das Unternehmen {1} ist bereits vorhanden.,
Save,speichern,
Save Item,Artikel speichern,
Saved Items,Gespeicherte Objekte,
@@ -4142,7 +4100,6 @@
User {0} is disabled,Benutzer {0} ist deaktiviert,
Users and Permissions,Benutzer und Berechtigungen,
Vacancies cannot be lower than the current openings,Die offenen Stellen können nicht niedriger sein als die aktuellen Stellenangebote,
-Valid From Time must be lesser than Valid Upto Time.,Gültig ab Zeit muss kleiner sein als gültig bis Zeit.,
Valuation Rate required for Item {0} at row {1},Bewertungssatz für Position {0} in Zeile {1} erforderlich,
Values Out Of Sync,Werte nicht synchron,
Vehicle Type is required if Mode of Transport is Road,"Der Fahrzeugtyp ist erforderlich, wenn der Verkehrsträger Straße ist",
@@ -4218,7 +4175,6 @@
Add to Cart,in den Warenkorb legen,
Days Since Last Order,Tage seit der letzten Bestellung,
In Stock,Auf Lager,
-Loan Amount is mandatory,Der Darlehensbetrag ist obligatorisch,
Mode Of Payment,Zahlungsart,
No students Found,Keine Schüler gefunden,
Not in Stock,Nicht lagernd,
@@ -4245,7 +4201,6 @@
Group by,Gruppieren nach,
In stock,Auf Lager,
Item name,Artikelname,
-Loan amount is mandatory,Der Darlehensbetrag ist obligatorisch,
Minimum Qty,Mindestmenge,
More details,Weitere Details,
Nature of Supplies,Art der Lieferungen,
@@ -4414,9 +4369,6 @@
Total Completed Qty,Total Completed Qty,
Qty to Manufacture,Herzustellende Menge,
Repay From Salary can be selected only for term loans,Die Rückzahlung vom Gehalt kann nur für befristete Darlehen ausgewählt werden,
-No valid Loan Security Price found for {0},Für {0} wurde kein gültiger Kreditsicherheitspreis gefunden.,
-Loan Account and Payment Account cannot be same,Darlehenskonto und Zahlungskonto können nicht identisch sein,
-Loan Security Pledge can only be created for secured loans,Kreditsicherheitsversprechen können nur für besicherte Kredite erstellt werden,
Social Media Campaigns,Social Media Kampagnen,
From Date can not be greater than To Date,Von Datum darf nicht größer als Bis Datum sein,
Please set a Customer linked to the Patient,Bitte legen Sie einen mit dem Patienten verknüpften Kunden fest,
@@ -6443,7 +6395,6 @@
HR User,Nutzer Personalabteilung,
Appointment Letter,Ernennungsschreiben,
Job Applicant,Bewerber,
-Applicant Name,Bewerbername,
Appointment Date,Termin,
Appointment Letter Template,Termin Briefvorlage,
Body,Körper,
@@ -7065,99 +7016,12 @@
Sync in Progress,Synchronisierung läuft,
Hub Seller Name,Hub-Verkäufer Name,
Custom Data,Benutzerdefinierte Daten,
-Member,Mitglied,
-Partially Disbursed,teil~~POS=TRUNC Zahlter,
-Loan Closure Requested,Darlehensschließung beantragt,
Repay From Salary,Repay von Gehalts,
-Loan Details,Darlehensdetails,
-Loan Type,Art des Darlehens,
-Loan Amount,Darlehensbetrag,
-Is Secured Loan,Ist besichertes Darlehen,
-Rate of Interest (%) / Year,Zinssatz (%) / Jahr,
-Disbursement Date,Valuta-,
-Disbursed Amount,Ausgezahlter Betrag,
-Is Term Loan,Ist Laufzeitdarlehen,
-Repayment Method,Rückzahlweg,
-Repay Fixed Amount per Period,Repay fixen Betrag pro Periode,
-Repay Over Number of Periods,Repay über Anzahl der Perioden,
-Repayment Period in Months,Rückzahlungsfrist in Monaten,
-Monthly Repayment Amount,Monatlicher Rückzahlungsbetrag,
-Repayment Start Date,Startdatum der Rückzahlung,
-Loan Security Details,Details zur Kreditsicherheit,
-Maximum Loan Value,Maximaler Kreditwert,
-Account Info,Kontoinformation,
-Loan Account,Kreditkonto,
-Interest Income Account,Zinserträge Konto,
-Penalty Income Account,Strafeinkommenskonto,
-Repayment Schedule,Rückzahlungsplan,
-Total Payable Amount,Zahlenden Gesamtbetrag,
-Total Principal Paid,Total Principal Paid,
-Total Interest Payable,Gesamtsumme der Zinszahlungen,
-Total Amount Paid,Gezahlte Gesamtsumme,
-Loan Manager,Kreditmanager,
-Loan Info,Darlehensinformation,
-Rate of Interest,Zinssatz,
-Proposed Pledges,Vorgeschlagene Zusagen,
-Maximum Loan Amount,Maximaler Darlehensbetrag,
-Repayment Info,Die Rückzahlung Info,
-Total Payable Interest,Insgesamt fällige Zinsen,
-Against Loan ,Gegen Darlehen,
-Loan Interest Accrual,Darlehenszinsabgrenzung,
-Amounts,Beträge,
-Pending Principal Amount,Ausstehender Hauptbetrag,
-Payable Principal Amount,Zu zahlender Kapitalbetrag,
-Paid Principal Amount,Bezahlter Hauptbetrag,
-Paid Interest Amount,Bezahlter Zinsbetrag,
-Process Loan Interest Accrual,Prozessdarlehenszinsabgrenzung,
-Repayment Schedule Name,Name des Rückzahlungsplans,
Regular Payment,Reguläre Zahlung,
Loan Closure,Kreditabschluss,
-Payment Details,Zahlungsdetails,
-Interest Payable,Zu zahlende Zinsen,
-Amount Paid,Zahlbetrag,
-Principal Amount Paid,Hauptbetrag bezahlt,
-Repayment Details,Rückzahlungsdetails,
-Loan Repayment Detail,Detail der Kreditrückzahlung,
-Loan Security Name,Name der Kreditsicherheit,
-Unit Of Measure,Maßeinheit,
-Loan Security Code,Kreditsicherheitscode,
-Loan Security Type,Kreditsicherheitstyp,
-Haircut %,Haarschnitt%,
-Loan Details,Darlehensdetails,
-Unpledged,Nicht verpfändet,
-Pledged,Verpfändet,
-Partially Pledged,Teilweise verpfändet,
-Securities,Wertpapiere,
-Total Security Value,Gesamtsicherheitswert,
-Loan Security Shortfall,Kreditsicherheitsmangel,
-Loan ,Darlehen,
-Shortfall Time,Fehlzeit,
-America/New_York,Amerika / New York,
-Shortfall Amount,Fehlbetrag,
-Security Value ,Sicherheitswert,
-Process Loan Security Shortfall,Sicherheitslücke bei Prozessdarlehen,
-Loan To Value Ratio,Loan-to-Value-Verhältnis,
-Unpledge Time,Unpledge-Zeit,
-Loan Name,Darlehensname,
Rate of Interest (%) Yearly,Zinssatz (%) Jahres,
-Penalty Interest Rate (%) Per Day,Strafzinssatz (%) pro Tag,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Bei verspäteter Rückzahlung wird täglich ein Strafzins auf den ausstehenden Zinsbetrag erhoben,
-Grace Period in Days,Gnadenfrist in Tagen,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Anzahl der Tage ab Fälligkeit, bis zu denen bei verspäteter Rückzahlung des Kredits keine Vertragsstrafe erhoben wird",
-Pledge,Versprechen,
-Post Haircut Amount,Post Haircut Betrag,
-Process Type,Prozesstyp,
-Update Time,Updatezeit,
-Proposed Pledge,Vorgeschlagenes Versprechen,
-Total Payment,Gesamtzahlung,
-Balance Loan Amount,Bilanz Darlehensbetrag,
-Is Accrued,Ist aufgelaufen,
Salary Slip Loan,Gehaltsabrechnung Vorschuss,
Loan Repayment Entry,Kreditrückzahlungseintrag,
-Sanctioned Loan Amount,Sanktionierter Darlehensbetrag,
-Sanctioned Amount Limit,Sanktioniertes Betragslimit,
-Unpledge,Unpledge,
-Haircut,Haarschnitt,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Zeitplan generieren,
Schedules,Zeitablaufpläne,
@@ -7887,7 +7751,6 @@
Update Series,Nummernkreise aktualisieren,
Change the starting / current sequence number of an existing series.,Anfangs- / Ist-Wert eines Nummernkreises ändern.,
Prefix,Präfix,
-Current Value,Aktueller Wert,
This is the number of the last created transaction with this prefix,Dies ist die Nummer der letzten erstellten Transaktion mit diesem Präfix,
Update Series Number,Nummernkreis-Wert aktualisieren,
Quotation Lost Reason,Grund für verlorenes Angebotes,
@@ -8512,8 +8375,6 @@
Itemwise Recommended Reorder Level,Empfohlener artikelbezogener Meldebestand,
Lead Details,Einzelheiten zum Lead,
Lead Owner Efficiency,Lead Besitzer Effizienz,
-Loan Repayment and Closure,Kreditrückzahlung und -schließung,
-Loan Security Status,Kreditsicherheitsstatus,
Lost Opportunity,Verpasste Gelegenheit,
Maintenance Schedules,Wartungspläne,
Material Requests for which Supplier Quotations are not created,"Materialanfragen, für die keine Lieferantenangebote erstellt werden",
@@ -8604,7 +8465,6 @@
Counts Targeted: {0},Zielzählungen: {0},
Payment Account is mandatory,Zahlungskonto ist obligatorisch,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Wenn diese Option aktiviert ist, wird der gesamte Betrag vom steuerpflichtigen Einkommen abgezogen, bevor die Einkommensteuer ohne Erklärung oder Nachweis berechnet wird.",
-Disbursement Details,Auszahlungsdetails,
Material Request Warehouse,Materialanforderungslager,
Select warehouse for material requests,Wählen Sie Lager für Materialanfragen,
Transfer Materials For Warehouse {0},Material für Lager übertragen {0},
@@ -8991,9 +8851,6 @@
Repay unclaimed amount from salary,Nicht zurückgeforderten Betrag vom Gehalt zurückzahlen,
Deduction from salary,Abzug vom Gehalt,
Expired Leaves,Abgelaufene Blätter,
-Reference No,Referenznummer,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,"Der prozentuale Abschlag ist die prozentuale Differenz zwischen dem Marktwert des Darlehenssicherheitsvermögens und dem Wert, der diesem Darlehenssicherheitsvermögen zugeschrieben wird, wenn es als Sicherheit für dieses Darlehen verwendet wird.",
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Das Verhältnis von Kredit zu Wert drückt das Verhältnis des Kreditbetrags zum Wert des verpfändeten Wertpapiers aus. Ein Kreditsicherheitsdefizit wird ausgelöst, wenn dieser den für ein Darlehen angegebenen Wert unterschreitet",
If this is not checked the loan by default will be considered as a Demand Loan,"Wenn dies nicht aktiviert ist, wird das Darlehen standardmäßig als Nachfragedarlehen betrachtet",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Dieses Konto wird zur Buchung von Kreditrückzahlungen vom Kreditnehmer und zur Auszahlung von Krediten an den Kreditnehmer verwendet,
This account is capital account which is used to allocate capital for loan disbursal account ,"Dieses Konto ist ein Kapitalkonto, das zur Zuweisung von Kapital für das Darlehensauszahlungskonto verwendet wird",
@@ -9457,13 +9314,6 @@
Operation {0} does not belong to the work order {1},Operation {0} gehört nicht zum Arbeitsauftrag {1},
Print UOM after Quantity,UOM nach Menge drucken,
Set default {0} account for perpetual inventory for non stock items,Legen Sie das Standardkonto {0} für die fortlaufende Bestandsaufnahme für nicht vorrätige Artikel fest,
-Loan Security {0} added multiple times,Darlehenssicherheit {0} mehrfach hinzugefügt,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Darlehen Wertpapiere mit unterschiedlichem LTV-Verhältnis können nicht gegen ein Darlehen verpfändet werden,
-Qty or Amount is mandatory for loan security!,Menge oder Betrag ist für die Kreditsicherheit obligatorisch!,
-Only submittted unpledge requests can be approved,Es können nur übermittelte nicht gekoppelte Anforderungen genehmigt werden,
-Interest Amount or Principal Amount is mandatory,Der Zinsbetrag oder der Kapitalbetrag ist obligatorisch,
-Disbursed Amount cannot be greater than {0},Der ausgezahlte Betrag darf nicht größer als {0} sein.,
-Row {0}: Loan Security {1} added multiple times,Zeile {0}: Darlehenssicherheit {1} wurde mehrmals hinzugefügt,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Zeile # {0}: Untergeordnetes Element sollte kein Produktpaket sein. Bitte entfernen Sie Artikel {1} und speichern Sie,
Credit limit reached for customer {0},Kreditlimit für Kunde erreicht {0},
Could not auto create Customer due to the following missing mandatory field(s):,Der Kunde konnte aufgrund der folgenden fehlenden Pflichtfelder nicht automatisch erstellt werden:,
diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv
index 75e4294..7042eaf 100644
--- a/erpnext/translations/el.csv
+++ b/erpnext/translations/el.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Ισχύει εάν η εταιρεία είναι SpA, SApA ή SRL",
Applicable if the company is a limited liability company,Ισχύει εάν η εταιρεία είναι εταιρεία περιορισμένης ευθύνης,
Applicable if the company is an Individual or a Proprietorship,Ισχύει εάν η εταιρεία είναι Πρόσωπο ή Ιδιοκτησία,
-Applicant,Αιτών,
-Applicant Type,Τύπος αιτούντος,
Application of Funds (Assets),Εφαρμογή πόρων (ενεργητικό),
Application period cannot be across two allocation records,Η περίοδος υποβολής αιτήσεων δεν μπορεί να εκτείνεται σε δύο εγγραφές κατανομής,
Application period cannot be outside leave allocation period,Περίοδος υποβολής των αιτήσεων δεν μπορεί να είναι περίοδος κατανομής έξω άδειας,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Κατάλογος διαθέσιμων Μετόχων με αριθμούς φακέλων,
Loading Payment System,Φόρτωση συστήματος πληρωμών,
Loan,Δάνειο,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Ποσό δανείου δεν μπορεί να υπερβαίνει το μέγιστο ύψος των δανείων Ποσό {0},
-Loan Application,Αίτηση για δάνειο,
-Loan Management,Διαχείριση δανείων,
-Loan Repayment,Αποπληρωμή δανείου,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Η ημερομηνία έναρξης δανείου και η περίοδος δανείου είναι υποχρεωτικές για την αποθήκευση της έκπτωσης τιμολογίου,
Loans (Liabilities),Δάνεια (παθητικό ),
Loans and Advances (Assets),Δάνεια και προκαταβολές ( ενεργητικό ),
@@ -1611,7 +1605,6 @@
Monday,Δευτέρα,
Monthly,Μηνιαίος,
Monthly Distribution,Μηνιαία διανομή,
-Monthly Repayment Amount cannot be greater than Loan Amount,Μηνιαία επιστροφή ποσό δεν μπορεί να είναι μεγαλύτερη από Ποσό δανείου,
More,Περισσότερο,
More Information,Περισσότερες πληροφορίες,
More than one selection for {0} not allowed,Δεν επιτρέπονται περισσότερες από μία επιλογές για {0},
@@ -1884,11 +1877,9 @@
Pay {0} {1},Πληρώστε {0} {1},
Payable,Πληρωτέος,
Payable Account,Πληρωτέος λογαριασμός,
-Payable Amount,Πληρωτέο ποσό,
Payment,Πληρωμή,
Payment Cancelled. Please check your GoCardless Account for more details,Η πληρωμή ακυρώθηκε. Ελέγξτε το λογαριασμό GoCardless για περισσότερες λεπτομέρειες,
Payment Confirmation,Επιβεβαίωση πληρωμής,
-Payment Date,Ημερομηνία πληρωμής,
Payment Days,Ημέρες πληρωμής,
Payment Document,Έγγραφο πληρωμής,
Payment Due Date,Ημερομηνία λήξης προθεσμίας πληρωμής,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Παρακαλώ εισάγετε πρώτα αποδεικτικό παραλαβής αγοράς,
Please enter Receipt Document,"Παρακαλούμε, εισάγετε παραστατικό παραλαβής",
Please enter Reference date,Παρακαλώ εισάγετε την ημερομηνία αναφοράς,
-Please enter Repayment Periods,"Παρακαλούμε, εισάγετε περιόδους αποπληρωμής",
Please enter Reqd by Date,Πληκτρολογήστε Reqd by Date,
Please enter Woocommerce Server URL,Πληκτρολογήστε τη διεύθυνση URL του διακομιστή Woocommerce,
Please enter Write Off Account,Παρακαλώ εισάγετε λογαριασμό διαγραφών,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Παρακαλώ εισάγετε γονικό κέντρο κόστους,
Please enter quantity for Item {0},Παρακαλώ εισάγετε ποσότητα για το είδος {0},
Please enter relieving date.,Παρακαλώ εισάγετε την ημερομηνία απαλλαγής,
-Please enter repayment Amount,"Παρακαλούμε, εισάγετε αποπληρωμής Ποσό",
Please enter valid Financial Year Start and End Dates,Παρακαλώ εισάγετε ένα έγκυρο οικονομικό έτος ημερομηνίες έναρξης και λήξης,
Please enter valid email address,Εισαγάγετε έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου,
Please enter {0} first,"Παρακαλούμε, εισάγετε {0} πρώτη",
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Οι κανόνες τιμολόγησης φιλτράρονται περαιτέρω με βάση την ποσότητα.,
Primary Address Details,Στοιχεία κύριας διεύθυνσης,
Primary Contact Details,Κύρια στοιχεία επικοινωνίας,
-Principal Amount,Κύριο ποσό,
Print Format,Μορφοποίηση εκτύπωσης,
Print IRS 1099 Forms,Εκτύπωση έντυπα IRS 1099,
Print Report Card,Εκτύπωση καρτών αναφοράς,
@@ -2550,7 +2538,6 @@
Sample Collection,Συλλογή δειγμάτων,
Sample quantity {0} cannot be more than received quantity {1},Η ποσότητα δείγματος {0} δεν μπορεί να είναι μεγαλύτερη από την ποσότητα που ελήφθη {1},
Sanctioned,Καθιερωμένος,
-Sanctioned Amount,Ποσό κύρωσης,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Κυρώσεις Το ποσό δεν μπορεί να είναι μεγαλύτερη από την αξίωση Ποσό στη σειρά {0}.,
Sand,Αμμος,
Saturday,Σάββατο,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} έχει ήδη μια διαδικασία γονέα {1}.,
API,API,
Annual,Ετήσιος,
-Approved,Εγκρίθηκε,
Change,Αλλαγή,
Contact Email,Email επαφής,
Export Type,Τύπος εξαγωγής,
@@ -3571,7 +3557,6 @@
Account Value,Αξία λογαριασμού,
Account is mandatory to get payment entries,Ο λογαριασμός είναι υποχρεωτικός για την πραγματοποίηση εγγραφών πληρωμής,
Account is not set for the dashboard chart {0},Ο λογαριασμός δεν έχει οριστεί για το διάγραμμα του πίνακα ελέγχου {0},
-Account {0} does not belong to company {1},Ο λογαριασμός {0} δεν ανήκει στη εταιρεία {1},
Account {0} does not exists in the dashboard chart {1},Ο λογαριασμός {0} δεν υπάρχει στο γράφημα του πίνακα ελέγχου {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Λογαριασμός: Το <b>{0}</b> είναι κεφάλαιο Οι εργασίες βρίσκονται σε εξέλιξη και δεν μπορούν να ενημερωθούν με καταχώριση ημερολογίου,
Account: {0} is not permitted under Payment Entry,Λογαριασμός: Η {0} δεν επιτρέπεται στην καταχώριση πληρωμής,
@@ -3582,7 +3567,6 @@
Activity,Δραστηριότητα,
Add / Manage Email Accounts.,Προσθήκη / διαχείριση λογαριασμών ηλεκτρονικού ταχυδρομείου.,
Add Child,Προσθήκη παιδιού,
-Add Loan Security,Προσθέστε ασφάλεια δανείου,
Add Multiple,Προσθήκη πολλαπλών,
Add Participants,Προσθέστε τους συμμετέχοντες,
Add to Featured Item,Προσθήκη στο Προτεινόμενο στοιχείο,
@@ -3593,15 +3577,12 @@
Address Line 1,Γραμμή διεύθυνσης 1,
Addresses,Διευθύνσεις,
Admission End Date should be greater than Admission Start Date.,Η ημερομηνία λήξης εισαγωγής πρέπει να είναι μεγαλύτερη από την ημερομηνία έναρξης εισαγωγής.,
-Against Loan,Ενάντια στο Δάνειο,
-Against Loan:,Ενάντια δανείου:,
All,Ολα,
All bank transactions have been created,Όλες οι τραπεζικές συναλλαγές έχουν δημιουργηθεί,
All the depreciations has been booked,Όλες οι αποσβέσεις έχουν εγγραφεί,
Allocation Expired!,Η κατανομή έχει λήξει!,
Allow Resetting Service Level Agreement from Support Settings.,Να επιτρέπεται η επαναφορά της συμφωνίας επιπέδου υπηρεσιών από τις ρυθμίσεις υποστήριξης.,
Amount of {0} is required for Loan closure,Ποσό {0} απαιτείται για το κλείσιμο του δανείου,
-Amount paid cannot be zero,Το ποσό που καταβλήθηκε δεν μπορεί να είναι μηδέν,
Applied Coupon Code,Κωδικός εφαρμοσμένου κουπονιού,
Apply Coupon Code,Εφαρμόστε τον κωδικό κουπονιού,
Appointment Booking,Κρατήσεις Κλήσεων,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Δεν είναι δυνατός ο υπολογισμός του χρόνου άφιξης, καθώς η διεύθυνση του οδηγού λείπει.",
Cannot Optimize Route as Driver Address is Missing.,"Δεν είναι δυνατή η βελτιστοποίηση της διαδρομής, καθώς η διεύθυνση του οδηγού λείπει.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,Δεν είναι δυνατή η ολοκλήρωση της εργασίας {0} καθώς η εξαρτημένη εργασία {1} δεν έχει συμπληρωθεί / ακυρωθεί.,
-Cannot create loan until application is approved,Δεν είναι δυνατή η δημιουργία δανείου έως ότου εγκριθεί η αίτηση,
Cannot find a matching Item. Please select some other value for {0}.,Δεν μπορείτε να βρείτε μια αντίστοιχη Θέση. Παρακαλούμε επιλέξτε κάποια άλλη τιμή για το {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Δεν είναι δυνατή η υπερπαραγωγή στοιχείου {0} στη σειρά {1} περισσότερο από {2}. Για να επιτρέψετε την υπερχρέωση, παρακαλούμε να ορίσετε το επίδομα στις Ρυθμίσεις Λογαριασμών",
"Capacity Planning Error, planned start time can not be same as end time","Σφάλμα προγραμματισμού χωρητικότητας, η προγραμματισμένη ώρα έναρξης δεν μπορεί να είναι ίδια με την ώρα λήξης",
@@ -3812,20 +3792,9 @@
Less Than Amount,Λιγότερο από το ποσό,
Liabilities,Υποχρεώσεις,
Loading...,Φόρτωση...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Το ποσό δανείου υπερβαίνει το μέγιστο ποσό δανείου {0} σύμφωνα με τις προτεινόμενες αξίες,
Loan Applications from customers and employees.,Δάνειο Αιτήσεις από πελάτες και υπαλλήλους.,
-Loan Disbursement,Εκταμίευση δανείου,
Loan Processes,Διαδικασίες δανεισμού,
-Loan Security,Ασφάλεια δανείου,
-Loan Security Pledge,Εγγύηση ασφάλειας δανείου,
-Loan Security Pledge Created : {0},Δανεισμός ασφαλείας δανείου Δημιουργήθηκε: {0},
-Loan Security Price,Τιμή Ασφαλείας Δανείου,
-Loan Security Price overlapping with {0},Τιμή ασφάλειας δανείου που επικαλύπτεται με {0},
-Loan Security Unpledge,Ασφάλεια δανείου,
-Loan Security Value,Τιμή Ασφαλείας Δανείου,
Loan Type for interest and penalty rates,Τύπος δανείου για τόκους και ποινές,
-Loan amount cannot be greater than {0},Το ποσό δανείου δεν μπορεί να είναι μεγαλύτερο από {0},
-Loan is mandatory,Το δάνειο είναι υποχρεωτικό,
Loans,Δάνεια,
Loans provided to customers and employees.,Δάνεια που παρέχονται σε πελάτες και εργαζόμενους.,
Location,Τοποθεσία,
@@ -3894,7 +3863,6 @@
Pay,Πληρωμή,
Payment Document Type,Τύπος εγγράφου πληρωμής,
Payment Name,Όνομα πληρωμής,
-Penalty Amount,Ποσό ποινής,
Pending,εκκρεμής,
Performance,Εκτέλεση,
Period based On,Η περίοδος βασίζεται σε,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Συνδεθείτε ως χρήστης του Marketplace για να επεξεργαστείτε αυτό το στοιχείο.,
Please login as a Marketplace User to report this item.,Συνδεθείτε ως χρήστης του Marketplace για να αναφέρετε αυτό το στοιχείο.,
Please select <b>Template Type</b> to download template,Επιλέξτε <b>Τύπος προτύπου</b> για να κάνετε λήψη προτύπου,
-Please select Applicant Type first,Επιλέξτε πρώτα τον τύπο αιτούντος,
Please select Customer first,Επιλέξτε πρώτα τον πελάτη,
Please select Item Code first,Επιλέξτε πρώτα τον Κωδικό στοιχείου,
-Please select Loan Type for company {0},Επιλέξτε τύπο δανείου για εταιρεία {0},
Please select a Delivery Note,Επιλέξτε ένα Σημείωμα Παράδοσης,
Please select a Sales Person for item: {0},Επιλέξτε ένα πρόσωπο πωλήσεων για στοιχείο: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Επιλέξτε έναν άλλο τρόπο πληρωμής. Το Stripe δεν υποστηρίζει τις συναλλαγές στο νόμισμα '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Ρυθμίστε έναν προεπιλεγμένο τραπεζικό λογαριασμό για την εταιρεία {0},
Please specify,Παρακαλώ ορίστε,
Please specify a {0},Προσδιορίστε ένα {0},lead
-Pledge Status,Κατάσταση δέσμευσης,
-Pledge Time,Χρόνος δέσμευσης,
Printing,Εκτύπωση,
Priority,Προτεραιότητα,
Priority has been changed to {0}.,Η προτεραιότητα έχει αλλάξει σε {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Επεξεργασία αρχείων XML,
Profitability,Κερδοφορία,
Project,Έργο,
-Proposed Pledges are mandatory for secured Loans,Οι Προτεινόμενες Υποχρεώσεις είναι υποχρεωτικές για τα εξασφαλισμένα Δάνεια,
Provide the academic year and set the starting and ending date.,Παρέχετε το ακαδημαϊκό έτος και ορίστε την ημερομηνία έναρξης και λήξης.,
Public token is missing for this bank,Δημόσιο διακριτικό λείπει για αυτήν την τράπεζα,
Publish,Δημοσιεύω,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,Η παραλαβή αγοράς δεν διαθέτει στοιχείο για το οποίο είναι ενεργοποιημένο το δείγμα διατήρησης δείγματος.,
Purchase Return,Επιστροφή αγοράς,
Qty of Finished Goods Item,Ποσότητα τεμαχίου τελικών προϊόντων,
-Qty or Amount is mandatroy for loan security,Το Ποσό ή το Ποσό είναι απαραίτητο για την ασφάλεια του δανείου,
Quality Inspection required for Item {0} to submit,Επιθεώρηση ποιότητας που απαιτείται για το στοιχείο {0} για υποβολή,
Quantity to Manufacture,Ποσότητα προς παραγωγή,
Quantity to Manufacture can not be zero for the operation {0},Η ποσότητα παραγωγής δεν μπορεί να είναι μηδενική για τη λειτουργία {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Η ημερομηνία ανακούφισης πρέπει να είναι μεγαλύτερη ή ίση με την Ημερομηνία Σύνδεσης,
Rename,Μετονομασία,
Rename Not Allowed,Μετονομασία Δεν επιτρέπεται,
-Repayment Method is mandatory for term loans,Η μέθοδος αποπληρωμής είναι υποχρεωτική για δάνεια με διάρκεια,
-Repayment Start Date is mandatory for term loans,Η ημερομηνία έναρξης αποπληρωμής είναι υποχρεωτική για τα δάνεια με διάρκεια,
Report Item,Στοιχείο αναφοράς,
Report this Item,Αναφέρετε αυτό το στοιχείο,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Προβλεπόμενη ποσότητα για υπεργολαβία: Ποσότητα πρώτων υλών για την πραγματοποίηση εργασιών υπεργολαβίας.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Η σειρά ({0}): {1} είναι ήδη προεξοφλημένη στο {2},
Rows Added in {0},Γραμμές που προστέθηκαν στο {0},
Rows Removed in {0},Οι σειρές έχουν καταργηθεί στο {0},
-Sanctioned Amount limit crossed for {0} {1},Το όριο ποσού που έχει κυρωθεί για {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Ποσό δανείου που έχει κυρωθεί υπάρχει ήδη για {0} έναντι εταιρείας {1},
Save,Αποθήκευση,
Save Item,Αποθήκευση στοιχείου,
Saved Items,Αποθηκευμένα στοιχεία,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Ο χρήστης {0} είναι απενεργοποιημένος,
Users and Permissions,Χρήστες και δικαιώματα,
Vacancies cannot be lower than the current openings,Οι κενές θέσεις εργασίας δεν μπορούν να είναι χαμηλότερες από τα τρέχοντα ανοίγματα,
-Valid From Time must be lesser than Valid Upto Time.,Το Valid From Time πρέπει να είναι μικρότερο από το Valid Upto Time.,
Valuation Rate required for Item {0} at row {1},Απαιτείται συντελεστής αποτίμησης για το στοιχείο {0} στη σειρά {1},
Values Out Of Sync,Τιμές εκτός συγχρονισμού,
Vehicle Type is required if Mode of Transport is Road,Ο τύπος οχήματος απαιτείται εάν ο τρόπος μεταφοράς είναι οδικώς,
@@ -4211,7 +4168,6 @@
Add to Cart,Προσθήκη στο καλάθι,
Days Since Last Order,Ημέρες από την τελευταία σειρά,
In Stock,Σε απόθεμα,
-Loan Amount is mandatory,Το ποσό δανείου είναι υποχρεωτικό,
Mode Of Payment,Τρόπος Πληρωμής,
No students Found,Δεν βρέθηκαν μαθητές,
Not in Stock,Όχι στο Αποθεματικό,
@@ -4240,7 +4196,6 @@
Group by,Ομαδοποίηση κατά,
In stock,Σε απόθεμα,
Item name,Όνομα είδους,
-Loan amount is mandatory,Το ποσό δανείου είναι υποχρεωτικό,
Minimum Qty,Ελάχιστη ποσότητα,
More details,Περισσότερες λεπτομέρειες,
Nature of Supplies,Φύση των αναλωσίμων,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Συνολική ποσότητα που ολοκληρώθηκε,
Qty to Manufacture,Ποσότητα για κατασκευή,
Repay From Salary can be selected only for term loans,Η αποπληρωμή από το μισθό μπορεί να επιλεγεί μόνο για δάνεια διάρκειας,
-No valid Loan Security Price found for {0},Δεν βρέθηκε έγκυρη τιμή ασφάλειας δανείου για {0},
-Loan Account and Payment Account cannot be same,Ο λογαριασμός δανείου και ο λογαριασμός πληρωμής δεν μπορούν να είναι ίδιοι,
-Loan Security Pledge can only be created for secured loans,Η εγγύηση δανείου μπορεί να δημιουργηθεί μόνο για εξασφαλισμένα δάνεια,
Social Media Campaigns,Εκστρατείες κοινωνικών μέσων,
From Date can not be greater than To Date,Η ημερομηνία δεν μπορεί να είναι μεγαλύτερη από την ημερομηνία,
Please set a Customer linked to the Patient,Ορίστε έναν Πελάτη συνδεδεμένο με τον Ασθενή,
@@ -6437,7 +6389,6 @@
HR User,Χρήστης ανθρωπίνου δυναμικού,
Appointment Letter,Επιστολή διορισμού,
Job Applicant,Αιτών εργασία,
-Applicant Name,Όνομα αιτούντος,
Appointment Date,Ημερομηνία ραντεβού,
Appointment Letter Template,Πρότυπο επιστολής συνάντησης,
Body,Σώμα,
@@ -7059,99 +7010,12 @@
Sync in Progress,Συγχρονισμός σε εξέλιξη,
Hub Seller Name,Όνομα πωλητή Hub,
Custom Data,Προσαρμοσμένα δεδομένα,
-Member,Μέλος,
-Partially Disbursed,"Εν μέρει, προέβη στη χορήγηση",
-Loan Closure Requested,Απαιτείται κλείσιμο δανείου,
Repay From Salary,Επιστρέψει από το μισθό,
-Loan Details,Λεπτομέρειες δανείου,
-Loan Type,Τύπος Δανείου,
-Loan Amount,Ποσο δανειου,
-Is Secured Loan,Είναι εξασφαλισμένο δάνειο,
-Rate of Interest (%) / Year,Επιτόκιο (%) / Έτος,
-Disbursement Date,Ημερομηνία εκταμίευσης,
-Disbursed Amount,Ποσό εκταμιεύσεων,
-Is Term Loan,Είναι δάνειο διάρκειας,
-Repayment Method,Τρόπος αποπληρωμής,
-Repay Fixed Amount per Period,Εξοφλήσει σταθερό ποσό ανά Περίοδο,
-Repay Over Number of Periods,Εξοφλήσει Πάνω αριθμός των περιόδων,
-Repayment Period in Months,Αποπληρωμή Περίοδος σε μήνες,
-Monthly Repayment Amount,Μηνιαία επιστροφή Ποσό,
-Repayment Start Date,Ημερομηνία έναρξης επιστροφής,
-Loan Security Details,Στοιχεία Ασφαλείας Δανείου,
-Maximum Loan Value,Μέγιστη τιμή δανείου,
-Account Info,Πληροφορίες λογαριασμού,
-Loan Account,Λογαριασμός δανείου,
-Interest Income Account,Ο λογαριασμός Έσοδα από Τόκους,
-Penalty Income Account,Λογαριασμός εισοδήματος,
-Repayment Schedule,Χρονοδιάγραμμα αποπληρωμής,
-Total Payable Amount,Συνολικό πληρωτέο ποσό,
-Total Principal Paid,Συνολική πληρωμή βασικού ποσού,
-Total Interest Payable,Σύνολο Τόκοι πληρωτέοι,
-Total Amount Paid,Συνολικό ποσό που καταβλήθηκε,
-Loan Manager,Διευθυντής Δανείων,
-Loan Info,Πληροφορίες δανείων,
-Rate of Interest,Βαθμός ενδιαφέροντος,
-Proposed Pledges,Προτεινόμενες υποσχέσεις,
-Maximum Loan Amount,Ανώτατο ποσό του δανείου,
-Repayment Info,Πληροφορίες αποπληρωμής,
-Total Payable Interest,Σύνολο πληρωτέοι τόκοι,
-Against Loan ,Ενάντια στο δάνειο,
-Loan Interest Accrual,Δαπάνη δανεισμού,
-Amounts,Ποσά,
-Pending Principal Amount,Εκκρεμεί το κύριο ποσό,
-Payable Principal Amount,Βασικό ποσό πληρωτέο,
-Paid Principal Amount,Πληρωμένο κύριο ποσό,
-Paid Interest Amount,Ποσό καταβεβλημένου τόκου,
-Process Loan Interest Accrual,Διαδικασία δανεισμού διαδικασιών,
-Repayment Schedule Name,Όνομα προγράμματος αποπληρωμής,
Regular Payment,Τακτική Πληρωμή,
Loan Closure,Κλείσιμο δανείου,
-Payment Details,Οι λεπτομέρειες πληρωμής,
-Interest Payable,Πληρωτέος τόκος,
-Amount Paid,Πληρωμένο Ποσό,
-Principal Amount Paid,Βασικό ποσό που καταβλήθηκε,
-Repayment Details,Λεπτομέρειες αποπληρωμής,
-Loan Repayment Detail,Λεπτομέρεια αποπληρωμής δανείου,
-Loan Security Name,Όνομα ασφάλειας δανείου,
-Unit Of Measure,Μονάδα μέτρησης,
-Loan Security Code,Κωδικός ασφαλείας δανείου,
-Loan Security Type,Τύπος ασφαλείας δανείου,
-Haircut %,ΚΟΥΡΕΜΑ ΜΑΛΛΙΩΝ %,
-Loan Details,Λεπτομέρειες δανείου,
-Unpledged,Χωρίς υποσχέσεις,
-Pledged,Δεσμεύτηκε,
-Partially Pledged,Εν μέρει δέσμευση,
-Securities,Χρεόγραφα,
-Total Security Value,Συνολική αξία ασφαλείας,
-Loan Security Shortfall,Σφάλμα ασφάλειας δανείων,
-Loan ,Δάνειο,
-Shortfall Time,Χρόνος έλλειψης,
-America/New_York,Αμερική / New_York,
-Shortfall Amount,Ποσό ελλείψεων,
-Security Value ,Τιμή ασφαλείας,
-Process Loan Security Shortfall,Διαδικασία έλλειψης ασφάλειας δανείων διαδικασίας,
-Loan To Value Ratio,Αναλογία δανείου προς αξία,
-Unpledge Time,Χρόνος αποποίησης,
-Loan Name,δάνειο Όνομα,
Rate of Interest (%) Yearly,Επιτόκιο (%) Ετήσιο,
-Penalty Interest Rate (%) Per Day,Επιτόκιο ποινής (%) ανά ημέρα,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Το επιτόκιο κυρώσεων επιβάλλεται σε ημερήσια βάση σε περίπτωση καθυστερημένης εξόφλησης,
-Grace Period in Days,Περίοδος χάριτος στις Ημέρες,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Αριθμός ημερών από την ημερομηνία λήξης έως την οποία δεν θα επιβληθεί ποινή σε περίπτωση καθυστέρησης στην αποπληρωμή δανείου,
-Pledge,Ενέχυρο,
-Post Haircut Amount,Δημοσίευση ποσού Haircut,
-Process Type,Τύπος διαδικασίας,
-Update Time,Ώρα ενημέρωσης,
-Proposed Pledge,Προτεινόμενη υπόσχεση,
-Total Payment,Σύνολο πληρωμών,
-Balance Loan Amount,Υπόλοιπο Ποσό Δανείου,
-Is Accrued,Είναι δεδουλευμένη,
Salary Slip Loan,Δανείου μισθοδοσίας,
Loan Repayment Entry,Καταχώρηση αποπληρωμής δανείου,
-Sanctioned Loan Amount,Ποσό δανείου που έχει κυρωθεί,
-Sanctioned Amount Limit,Καθορισμένο όριο ποσού,
-Unpledge,Αποποίηση,
-Haircut,ΚΟΥΡΕΜΑ ΜΑΛΛΙΩΝ,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Δημιούργησε πρόγραμμα,
Schedules,Χρονοδιαγράμματα,
@@ -7885,7 +7749,6 @@
Update Series,Ενημέρωση σειράς,
Change the starting / current sequence number of an existing series.,Αλλάξτε τον αρχικό/τρέχων αύξοντα αριθμός μιας υπάρχουσας σειράς.,
Prefix,Πρόθεμα,
-Current Value,Τρέχουσα αξία,
This is the number of the last created transaction with this prefix,Αυτός είναι ο αριθμός της τελευταίας συναλλαγής που δημιουργήθηκε με αυτό το πρόθεμα,
Update Series Number,Ενημέρωση αριθμού σειράς,
Quotation Lost Reason,Λόγος απώλειας προσφοράς,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Προτεινόμενο επίπεδο επαναπαραγγελίας ανά είδος,
Lead Details,Λεπτομέρειες Σύστασης,
Lead Owner Efficiency,Ηγετική απόδοση του ιδιοκτήτη,
-Loan Repayment and Closure,Επιστροφή και κλείσιμο δανείου,
-Loan Security Status,Κατάσταση ασφάλειας δανείου,
Lost Opportunity,Χαμένη Ευκαιρία,
Maintenance Schedules,Χρονοδιαγράμματα συντήρησης,
Material Requests for which Supplier Quotations are not created,Αιτήσεις υλικού για τις οποίες δεν έχουν δημιουργηθεί προσφορές προμηθευτή,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Πλήθος στόχευσης: {0},
Payment Account is mandatory,Ο λογαριασμός πληρωμής είναι υποχρεωτικός,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Εάν ελεγχθεί, το πλήρες ποσό θα αφαιρεθεί από το φορολογητέο εισόδημα πριν από τον υπολογισμό του φόρου εισοδήματος χωρίς καμία δήλωση ή υποβολή αποδεικτικών στοιχείων.",
-Disbursement Details,Λεπτομέρειες εκταμίευσης,
Material Request Warehouse,Αποθήκη αιτήματος υλικού,
Select warehouse for material requests,Επιλέξτε αποθήκη για αιτήματα υλικών,
Transfer Materials For Warehouse {0},Μεταφορά υλικών για αποθήκη {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Επιστρέψτε το ποσό που δεν ζητήθηκε από το μισθό,
Deduction from salary,Έκπτωση από το μισθό,
Expired Leaves,Έληξε φύλλα,
-Reference No,Αριθμός αναφοράς,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Το ποσοστό κούρεμα είναι η ποσοστιαία διαφορά μεταξύ της αγοραίας αξίας της Ασφάλειας Δανείου και της αξίας που αποδίδεται σε αυτήν την Ασφάλεια Δανείου όταν χρησιμοποιείται ως εγγύηση για αυτό το δάνειο.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,Loan to Value Ratio εκφράζει την αναλογία του ποσού του δανείου προς την αξία του εγγυημένου τίτλου. Ένα έλλειμμα ασφάλειας δανείου θα ενεργοποιηθεί εάν αυτό πέσει κάτω από την καθορισμένη τιμή για οποιοδήποτε δάνειο,
If this is not checked the loan by default will be considered as a Demand Loan,"Εάν αυτό δεν ελεγχθεί, το δάνειο από προεπιλογή θα θεωρείται ως Δάνειο Ζήτησης",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Αυτός ο λογαριασμός χρησιμοποιείται για την κράτηση αποπληρωμών δανείου από τον δανειολήπτη και επίσης για την εκταμίευση δανείων προς τον οφειλέτη,
This account is capital account which is used to allocate capital for loan disbursal account ,Αυτός ο λογαριασμός είναι λογαριασμός κεφαλαίου που χρησιμοποιείται για την κατανομή κεφαλαίου για λογαριασμό εκταμίευσης δανείου,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Η λειτουργία {0} δεν ανήκει στην εντολή εργασίας {1},
Print UOM after Quantity,Εκτύπωση UOM μετά την ποσότητα,
Set default {0} account for perpetual inventory for non stock items,Ορίστε τον προεπιλεγμένο λογαριασμό {0} για διαρκές απόθεμα για μη αποθέματα,
-Loan Security {0} added multiple times,Η ασφάλεια δανείου {0} προστέθηκε πολλές φορές,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Τα δανειακά χρεόγραφα με διαφορετική αναλογία LTV δεν μπορούν να δεσμευτούν έναντι ενός δανείου,
-Qty or Amount is mandatory for loan security!,Το ποσό ή το ποσό είναι υποχρεωτικό για την ασφάλεια δανείου!,
-Only submittted unpledge requests can be approved,Μπορούν να εγκριθούν μόνο αιτήματα αποσύνδεσης που έχουν υποβληθεί,
-Interest Amount or Principal Amount is mandatory,Ποσό τόκου ή κύριο ποσό είναι υποχρεωτικό,
-Disbursed Amount cannot be greater than {0},Το εκταμιευμένο ποσό δεν μπορεί να είναι μεγαλύτερο από {0},
-Row {0}: Loan Security {1} added multiple times,Σειρά {0}: Ασφάλεια δανείου {1} προστέθηκε πολλές φορές,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Σειρά # {0}: Το θυγατρικό στοιχείο δεν πρέπει να είναι πακέτο προϊόντων. Καταργήστε το στοιχείο {1} και αποθηκεύστε,
Credit limit reached for customer {0},Συμπληρώθηκε το πιστωτικό όριο για τον πελάτη {0},
Could not auto create Customer due to the following missing mandatory field(s):,Δεν ήταν δυνατή η αυτόματη δημιουργία πελάτη λόγω των ακόλουθων υποχρεωτικών πεδίων που λείπουν:,
diff --git a/erpnext/translations/es-PE.csv b/erpnext/translations/es-PE.csv
index 11f5484..7ebbc36 100644
--- a/erpnext/translations/es-PE.csv
+++ b/erpnext/translations/es-PE.csv
@@ -309,7 +309,6 @@
This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set,Este artículo es una plantilla y no se puede utilizar en las transacciones. Atributos artículo se copiarán en las variantes menos que se establece 'No Copy'
Target Amount,Monto Objtetivo,
S.O. No.,S.O. No.
-Sanctioned Amount,importe sancionado,
"If the account is frozen, entries are allowed to restricted users.","Si la cuenta está congelada , las entradas se les permite a los usuarios restringidos."
Sales Taxes and Charges,Los impuestos y cargos de venta,
Warehouse {0} can not be deleted as quantity exists for Item {1},Almacén {0} no se puede eliminar mientras exista cantidad de artículo {1}
diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv
index 432982b..90a4514 100644
--- a/erpnext/translations/es.csv
+++ b/erpnext/translations/es.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Aplicable si la empresa es SpA, SApA o SRL",
Applicable if the company is a limited liability company,Aplicable si la empresa es una sociedad de responsabilidad limitada.,
Applicable if the company is an Individual or a Proprietorship,Aplicable si la empresa es un individuo o un propietario,
-Applicant,Solicitante,
-Applicant Type,Tipo de solicitante,
Application of Funds (Assets),UTILIZACIÓN DE FONDOS (ACTIVOS),
Application period cannot be across two allocation records,El período de solicitud no puede estar en dos registros de asignación,
Application period cannot be outside leave allocation period,Período de aplicación no puede ser período de asignación licencia fuera,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Lista de Accionistas disponibles con números de folio,
Loading Payment System,Cargando el Sistema de Pago,
Loan,Préstamo,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Monto del préstamo no puede exceder cantidad máxima del préstamo de {0},
-Loan Application,Solicitud de préstamo,
-Loan Management,Gestion de prestamos,
-Loan Repayment,Pago de prestamo,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,La fecha de inicio del préstamo y el período de préstamo son obligatorios para guardar el descuento de facturas,
Loans (Liabilities),Préstamos (Pasivos),
Loans and Advances (Assets),INVERSIONES Y PRESTAMOS,
@@ -1611,7 +1605,6 @@
Monday,Lunes,
Monthly,Mensual,
Monthly Distribution,Distribución mensual,
-Monthly Repayment Amount cannot be greater than Loan Amount,Cantidad mensual La devolución no puede ser mayor que monto del préstamo,
More,Más,
More Information,Mas información,
More than one selection for {0} not allowed,Más de una selección para {0} no permitida,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Pagar {0} {1},
Payable,Pagadero,
Payable Account,Cuenta por pagar,
-Payable Amount,Cantidad a pagar,
Payment,Pago,
Payment Cancelled. Please check your GoCardless Account for more details,Pago cancelado Verifique su Cuenta GoCardless para más detalles,
Payment Confirmation,Confirmación de pago,
-Payment Date,Fecha de pago,
Payment Days,Días de pago,
Payment Document,Documento de pago,
Payment Due Date,Fecha de pago,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,"Por favor, ingrese primero el recibo de compra",
Please enter Receipt Document,"Por favor, introduzca recepción de documentos",
Please enter Reference date,"Por favor, introduzca la fecha de referencia",
-Please enter Repayment Periods,"Por favor, introduzca plazos de amortización",
Please enter Reqd by Date,Ingrese Requerido por Fecha,
Please enter Woocommerce Server URL,Ingrese la URL del servidor WooCommerce,
Please enter Write Off Account,"Por favor, ingrese la cuenta de desajuste",
@@ -1994,7 +1984,6 @@
Please enter parent cost center,"Por favor, ingrese el centro de costos principal",
Please enter quantity for Item {0},"Por favor, ingrese la cantidad para el producto {0}",
Please enter relieving date.,"Por favor, introduzca la fecha de relevo",
-Please enter repayment Amount,"Por favor, ingrese el monto de amortización",
Please enter valid Financial Year Start and End Dates,"Por favor, introduzca fecha de Inicio y Fin válidas para el Año Fiscal",
Please enter valid email address,Por favor ingrese una dirección de correo electrónico válida,
Please enter {0} first,"Por favor, introduzca {0} primero",
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Las 'reglas de precios' se pueden filtrar en base a la cantidad.,
Primary Address Details,Detalles de la Dirección Primaria,
Primary Contact Details,Detalles de Contacto Principal,
-Principal Amount,Cantidad principal,
Print Format,Formatos de Impresión,
Print IRS 1099 Forms,Imprimir formularios del IRS 1099,
Print Report Card,Imprimir Boleta de Calificaciones,
@@ -2550,7 +2538,6 @@
Sample Collection,Coleccion de muestra,
Sample quantity {0} cannot be more than received quantity {1},La Cantidad de Muestra {0} no puede ser más que la Cantidad Recibida {1},
Sanctioned,Sancionada,
-Sanctioned Amount,Monto sancionado,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Importe sancionado no puede ser mayor que el importe del reclamo en la línea {0}.,
Sand,Arena,
Saturday,Sábado,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} ya tiene un Procedimiento principal {1}.,
API,API,
Annual,Anual,
-Approved,Aprobado,
Change,Cambio,
Contact Email,Correo electrónico de contacto,
Export Type,Tipo de Exportación,
@@ -3571,7 +3557,6 @@
Account Value,Valor de la cuenta,
Account is mandatory to get payment entries,La cuenta es obligatoria para obtener entradas de pago,
Account is not set for the dashboard chart {0},La cuenta no está configurada para el cuadro de mandos {0},
-Account {0} does not belong to company {1},Cuenta {0} no pertenece a la Compañía {1},
Account {0} does not exists in the dashboard chart {1},La cuenta {0} no existe en el cuadro de mandos {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Cuenta: <b>{0}</b> es capital Trabajo en progreso y no puede actualizarse mediante Entrada de diario,
Account: {0} is not permitted under Payment Entry,Cuenta: {0} no está permitido en Entrada de pago,
@@ -3582,7 +3567,6 @@
Activity,Actividad,
Add / Manage Email Accounts.,Añadir / Administrar cuentas de correo electrónico.,
Add Child,Agregar hijo,
-Add Loan Security,Agregar seguridad de préstamo,
Add Multiple,Añadir Multiple,
Add Participants,Agregar Participantes,
Add to Featured Item,Agregar al artículo destacado,
@@ -3593,15 +3577,12 @@
Address Line 1,Dirección línea 1,
Addresses,Direcciones,
Admission End Date should be greater than Admission Start Date.,La fecha de finalización de la admisión debe ser mayor que la fecha de inicio de la admisión.,
-Against Loan,Contra préstamo,
-Against Loan:,Contra préstamo:,
All,Todos,
All bank transactions have been created,Se han creado todas las transacciones bancarias.,
All the depreciations has been booked,Todas las amortizaciones han sido registradas,
Allocation Expired!,Asignación expirada!,
Allow Resetting Service Level Agreement from Support Settings.,Permitir restablecer el acuerdo de nivel de servicio desde la configuración de soporte.,
Amount of {0} is required for Loan closure,Se requiere una cantidad de {0} para el cierre del préstamo,
-Amount paid cannot be zero,El monto pagado no puede ser cero,
Applied Coupon Code,Código de cupón aplicado,
Apply Coupon Code,Aplicar código de cupón,
Appointment Booking,Reserva de citas,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,No se puede calcular la hora de llegada porque falta la dirección del conductor.,
Cannot Optimize Route as Driver Address is Missing.,No se puede optimizar la ruta porque falta la dirección del conductor.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,No se puede completar la tarea {0} ya que su tarea dependiente {1} no se ha completado / cancelado.,
-Cannot create loan until application is approved,No se puede crear un préstamo hasta que se apruebe la solicitud.,
Cannot find a matching Item. Please select some other value for {0}.,No se peude encontrar un artículo que concuerde. Por favor seleccione otro valor para {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","No se puede facturar en exceso el artículo {0} en la fila {1} más de {2}. Para permitir una facturación excesiva, configure la asignación en la Configuración de cuentas",
"Capacity Planning Error, planned start time can not be same as end time","Error de planificación de capacidad, la hora de inicio planificada no puede ser la misma que la hora de finalización",
@@ -3812,20 +3792,9 @@
Less Than Amount,Menos de la cantidad,
Liabilities,Pasivo,
Loading...,Cargando ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,El monto del préstamo excede el monto máximo del préstamo de {0} según los valores propuestos,
Loan Applications from customers and employees.,Solicitudes de préstamos de clientes y empleados.,
-Loan Disbursement,Desembolso del préstamo,
Loan Processes,Procesos de préstamo,
-Loan Security,Préstamo de seguridad,
-Loan Security Pledge,Compromiso de seguridad del préstamo,
-Loan Security Pledge Created : {0},Compromiso de seguridad del préstamo creado: {0},
-Loan Security Price,Precio de seguridad del préstamo,
-Loan Security Price overlapping with {0},Precio de seguridad del préstamo superpuesto con {0},
-Loan Security Unpledge,Préstamo Seguridad Desplegar,
-Loan Security Value,Valor de seguridad del préstamo,
Loan Type for interest and penalty rates,Tipo de préstamo para tasas de interés y multas,
-Loan amount cannot be greater than {0},El monto del préstamo no puede ser mayor que {0},
-Loan is mandatory,El préstamo es obligatorio.,
Loans,Préstamos,
Loans provided to customers and employees.,Préstamos otorgados a clientes y empleados.,
Location,Ubicación,
@@ -3894,7 +3863,6 @@
Pay,Pagar,
Payment Document Type,Tipo de documento de pago,
Payment Name,Nombre de pago,
-Penalty Amount,Importe de la pena,
Pending,Pendiente,
Performance,Actuación,
Period based On,Período basado en,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Inicie sesión como usuario de Marketplace para editar este artículo.,
Please login as a Marketplace User to report this item.,Inicie sesión como usuario de Marketplace para informar este artículo.,
Please select <b>Template Type</b> to download template,Seleccione <b>Tipo de plantilla</b> para descargar la plantilla,
-Please select Applicant Type first,Seleccione primero el tipo de solicitante,
Please select Customer first,Por favor seleccione Cliente primero,
Please select Item Code first,Seleccione primero el código del artículo,
-Please select Loan Type for company {0},Seleccione Tipo de préstamo para la empresa {0},
Please select a Delivery Note,Por favor seleccione una nota de entrega,
Please select a Sales Person for item: {0},Seleccione una persona de ventas para el artículo: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Seleccione otro método de pago. Stripe no admite transacciones en moneda '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Configure una cuenta bancaria predeterminada para la empresa {0},
Please specify,"Por favor, especifique",
Please specify a {0},"Por favor, especifique un {0}",lead
-Pledge Status,Estado de compromiso,
-Pledge Time,Tiempo de compromiso,
Printing,Impresión,
Priority,Prioridad,
Priority has been changed to {0}.,La prioridad se ha cambiado a {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Procesando archivos XML,
Profitability,Rentabilidad,
Project,Proyecto,
-Proposed Pledges are mandatory for secured Loans,Las promesas propuestas son obligatorias para los préstamos garantizados,
Provide the academic year and set the starting and ending date.,Proporcione el año académico y establezca la fecha de inicio y finalización.,
Public token is missing for this bank,Falta un token público para este banco,
Publish,Publicar,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,El recibo de compra no tiene ningún artículo para el que esté habilitada la opción Conservar muestra.,
Purchase Return,Devolución de compra,
Qty of Finished Goods Item,Cantidad de artículos terminados,
-Qty or Amount is mandatroy for loan security,Cantidad o monto es obligatorio para la seguridad del préstamo,
Quality Inspection required for Item {0} to submit,Inspección de calidad requerida para el Artículo {0} para enviar,
Quantity to Manufacture,Cantidad a fabricar,
Quantity to Manufacture can not be zero for the operation {0},La cantidad a fabricar no puede ser cero para la operación {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,La fecha de liberación debe ser mayor o igual que la fecha de incorporación,
Rename,Renombrar,
Rename Not Allowed,Cambiar nombre no permitido,
-Repayment Method is mandatory for term loans,El método de reembolso es obligatorio para préstamos a plazo,
-Repayment Start Date is mandatory for term loans,La fecha de inicio de reembolso es obligatoria para préstamos a plazo,
Report Item,Reportar articulo,
Report this Item,Reportar este artículo,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Cantidad reservada para subcontrato: Cantidad de materias primas para hacer artículos subcontratados.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Fila ({0}): {1} ya está descontada en {2},
Rows Added in {0},Filas agregadas en {0},
Rows Removed in {0},Filas eliminadas en {0},
-Sanctioned Amount limit crossed for {0} {1},Límite de cantidad sancionado cruzado por {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},El monto del préstamo sancionado ya existe para {0} contra la compañía {1},
Save,Guardar,
Save Item,Guardar artículo,
Saved Items,Artículos guardados,
@@ -4135,7 +4093,6 @@
User {0} is disabled,El usuario {0} está deshabilitado,
Users and Permissions,Usuarios y Permisos,
Vacancies cannot be lower than the current openings,Las vacantes no pueden ser inferiores a las vacantes actuales,
-Valid From Time must be lesser than Valid Upto Time.,Válido desde el tiempo debe ser menor que Válido hasta el tiempo.,
Valuation Rate required for Item {0} at row {1},Tasa de valoración requerida para el artículo {0} en la fila {1},
Values Out Of Sync,Valores fuera de sincronización,
Vehicle Type is required if Mode of Transport is Road,El tipo de vehículo es obligatorio si el modo de transporte es carretera,
@@ -4211,7 +4168,6 @@
Add to Cart,Añadir a la Cesta,
Days Since Last Order,Días desde el último pedido,
In Stock,En inventario,
-Loan Amount is mandatory,El monto del préstamo es obligatorio,
Mode Of Payment,Método de pago,
No students Found,No se encontraron estudiantes,
Not in Stock,No disponible en stock,
@@ -4240,7 +4196,6 @@
Group by,Agrupar por,
In stock,En stock,
Item name,Nombre del producto,
-Loan amount is mandatory,El monto del préstamo es obligatorio,
Minimum Qty,Cantidad mínima,
More details,Más detalles,
Nature of Supplies,Naturaleza de los suministros,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Cantidad total completada,
Qty to Manufacture,Cantidad para producción,
Repay From Salary can be selected only for term loans,Reembolsar desde el salario se puede seleccionar solo para préstamos a plazo,
-No valid Loan Security Price found for {0},No se encontró ningún precio de garantía de préstamo válido para {0},
-Loan Account and Payment Account cannot be same,La cuenta de préstamo y la cuenta de pago no pueden ser iguales,
-Loan Security Pledge can only be created for secured loans,La promesa de garantía de préstamo solo se puede crear para préstamos garantizados,
Social Media Campaigns,Campañas de redes sociales,
From Date can not be greater than To Date,Desde la fecha no puede ser mayor que hasta la fecha,
Please set a Customer linked to the Patient,Establezca un cliente vinculado al paciente,
@@ -6437,7 +6389,6 @@
HR User,Usuario de recursos humanos,
Appointment Letter,Carta de cita,
Job Applicant,Solicitante de empleo,
-Applicant Name,Nombre del Solicitante,
Appointment Date,Día de la cita,
Appointment Letter Template,Plantilla de carta de cita,
Body,Cuerpo,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sincronización en Progreso,
Hub Seller Name,Nombre del vendedor de Hub,
Custom Data,Datos Personalizados,
-Member,Miembro,
-Partially Disbursed,Parcialmente Desembolsado,
-Loan Closure Requested,Cierre de préstamo solicitado,
Repay From Salary,Reembolso del Salario,
-Loan Details,Detalles de préstamo,
-Loan Type,Tipo de préstamo,
-Loan Amount,Monto del préstamo,
-Is Secured Loan,Es un préstamo garantizado,
-Rate of Interest (%) / Year,Tasa de interés (%) / Año,
-Disbursement Date,Fecha de desembolso,
-Disbursed Amount,Monto desembolsado,
-Is Term Loan,¿Es el préstamo a plazo,
-Repayment Method,Método de Reembolso,
-Repay Fixed Amount per Period,Pagar una Cantidad Fja por Período,
-Repay Over Number of Periods,Devolución por cantidad de períodos,
-Repayment Period in Months,Plazo de devolución en Meses,
-Monthly Repayment Amount,Cantidad de pago mensual,
-Repayment Start Date,Fecha de Inicio de Pago,
-Loan Security Details,Detalles de seguridad del préstamo,
-Maximum Loan Value,Valor máximo del préstamo,
-Account Info,Informacion de cuenta,
-Loan Account,Cuenta de Préstamo,
-Interest Income Account,Cuenta de Utilidad interés,
-Penalty Income Account,Cuenta de ingresos por penalizaciones,
-Repayment Schedule,Calendario de reembolso,
-Total Payable Amount,Monto Total a Pagar,
-Total Principal Paid,Total principal pagado,
-Total Interest Payable,Interés total a pagar,
-Total Amount Paid,Cantidad Total Pagada,
-Loan Manager,Gerente de préstamos,
-Loan Info,Información del Préstamo,
-Rate of Interest,Tasa de interés,
-Proposed Pledges,Prendas Propuestas,
-Maximum Loan Amount,Cantidad máxima del préstamo,
-Repayment Info,Información de la Devolución,
-Total Payable Interest,Interés Total a Pagar,
-Against Loan ,Contra préstamo,
-Loan Interest Accrual,Devengo de intereses de préstamos,
-Amounts,Cantidades,
-Pending Principal Amount,Monto principal pendiente,
-Payable Principal Amount,Monto del principal a pagar,
-Paid Principal Amount,Monto principal pagado,
-Paid Interest Amount,Monto de interés pagado,
-Process Loan Interest Accrual,Proceso de acumulación de intereses de préstamos,
-Repayment Schedule Name,Nombre del programa de pago,
Regular Payment,Pago regular,
Loan Closure,Cierre de préstamo,
-Payment Details,Detalles del Pago,
-Interest Payable,Los intereses a pagar,
-Amount Paid,Total Pagado,
-Principal Amount Paid,Importe principal pagado,
-Repayment Details,Detalles de reembolso,
-Loan Repayment Detail,Detalle de reembolso del préstamo,
-Loan Security Name,Nombre de seguridad del préstamo,
-Unit Of Measure,Unidad de medida,
-Loan Security Code,Código de seguridad del préstamo,
-Loan Security Type,Tipo de seguridad de préstamo,
-Haircut %,Corte de pelo %,
-Loan Details,Detalles del préstamo,
-Unpledged,Sin plegar,
-Pledged,Comprometido,
-Partially Pledged,Parcialmente comprometido,
-Securities,Valores,
-Total Security Value,Valor total de seguridad,
-Loan Security Shortfall,Déficit de seguridad del préstamo,
-Loan ,Préstamo,
-Shortfall Time,Tiempo de déficit,
-America/New_York,América / Nueva_York,
-Shortfall Amount,Cantidad de déficit,
-Security Value ,Valor de seguridad,
-Process Loan Security Shortfall,Déficit de seguridad del préstamo de proceso,
-Loan To Value Ratio,Préstamo a valor,
-Unpledge Time,Desplegar tiempo,
-Loan Name,Nombre del préstamo,
Rate of Interest (%) Yearly,Tasa de interés (%) Anual,
-Penalty Interest Rate (%) Per Day,Tasa de interés de penalización (%) por día,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,La tasa de interés de penalización se aplica diariamente sobre el monto de interés pendiente en caso de reembolso retrasado,
-Grace Period in Days,Período de gracia en días,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Cantidad de días desde la fecha de vencimiento hasta la cual no se cobrará la multa en caso de retraso en el pago del préstamo,
-Pledge,Promesa,
-Post Haircut Amount,Cantidad de post corte de pelo,
-Process Type,Tipo de proceso,
-Update Time,Tiempo de actualizacion,
-Proposed Pledge,Compromiso propuesto,
-Total Payment,Pago total,
-Balance Loan Amount,Saldo del balance del préstamo,
-Is Accrued,Está acumulado,
Salary Slip Loan,Préstamo de Nómina,
Loan Repayment Entry,Entrada de reembolso de préstamo,
-Sanctioned Loan Amount,Monto de préstamo sancionado,
-Sanctioned Amount Limit,Límite de cantidad sancionada,
-Unpledge,Desatar,
-Haircut,Corte de pelo,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Generar planificación,
Schedules,Programas,
@@ -7885,7 +7749,6 @@
Update Series,Definir Secuencia,
Change the starting / current sequence number of an existing series.,Defina el nuevo número de secuencia para esta transacción.,
Prefix,Prefijo,
-Current Value,Valor actual,
This is the number of the last created transaction with this prefix,Este es el número de la última transacción creada con este prefijo,
Update Series Number,Actualizar número de serie,
Quotation Lost Reason,Razón de la Pérdida,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Nivel recomendado de reabastecimiento de producto,
Lead Details,Detalle de Iniciativas,
Lead Owner Efficiency,Eficiencia del Propietario de la Iniciativa,
-Loan Repayment and Closure,Reembolso y cierre de préstamos,
-Loan Security Status,Estado de seguridad del préstamo,
Lost Opportunity,Oportunidad perdida,
Maintenance Schedules,Programas de Mantenimiento,
Material Requests for which Supplier Quotations are not created,Solicitudes de Material para los que no hay Presupuestos de Proveedor creados,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Recuentos orientados: {0},
Payment Account is mandatory,La cuenta de pago es obligatoria,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Si está marcado, el monto total se deducirá de la renta imponible antes de calcular el impuesto sobre la renta sin ninguna declaración o presentación de prueba.",
-Disbursement Details,Detalles del desembolso,
Material Request Warehouse,Almacén de solicitud de material,
Select warehouse for material requests,Seleccionar almacén para solicitudes de material,
Transfer Materials For Warehouse {0},Transferir materiales para almacén {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Reembolsar la cantidad no reclamada del salario,
Deduction from salary,Deducción del salario,
Expired Leaves,Hojas caducadas,
-Reference No,Numero de referencia,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,El porcentaje de quita es la diferencia porcentual entre el valor de mercado de la Garantía de Préstamo y el valor atribuido a esa Garantía de Préstamo cuando se utiliza como garantía para ese préstamo.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,La relación entre préstamo y valor expresa la relación entre el monto del préstamo y el valor del valor comprometido. Se activará un déficit de seguridad del préstamo si este cae por debajo del valor especificado para cualquier préstamo,
If this is not checked the loan by default will be considered as a Demand Loan,"Si no se marca, el préstamo por defecto se considerará Préstamo a la vista.",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Esta cuenta se utiliza para registrar los reembolsos de préstamos del prestatario y también para desembolsar préstamos al prestatario.,
This account is capital account which is used to allocate capital for loan disbursal account ,Esta cuenta es una cuenta de capital que se utiliza para asignar capital para la cuenta de desembolso de préstamos.,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},La operación {0} no pertenece a la orden de trabajo {1},
Print UOM after Quantity,Imprimir UOM después de Cantidad,
Set default {0} account for perpetual inventory for non stock items,Establecer la cuenta {0} predeterminada para el inventario permanente de los artículos que no están en stock,
-Loan Security {0} added multiple times,Seguridad de préstamo {0} agregada varias veces,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Los valores de préstamo con diferente ratio LTV no se pueden pignorar contra un préstamo,
-Qty or Amount is mandatory for loan security!,¡La cantidad o cantidad es obligatoria para la seguridad del préstamo!,
-Only submittted unpledge requests can be approved,Solo se pueden aprobar las solicitudes de desacuerdo enviadas,
-Interest Amount or Principal Amount is mandatory,El monto de interés o el monto principal es obligatorio,
-Disbursed Amount cannot be greater than {0},El monto desembolsado no puede ser mayor que {0},
-Row {0}: Loan Security {1} added multiple times,Fila {0}: garantía de préstamo {1} agregada varias veces,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Fila n.º {0}: el elemento secundario no debe ser un paquete de productos. Elimine el elemento {1} y guarde,
Credit limit reached for customer {0},Se alcanzó el límite de crédito para el cliente {0},
Could not auto create Customer due to the following missing mandatory field(s):,No se pudo crear automáticamente el Cliente debido a que faltan los siguientes campos obligatorios:,
diff --git a/erpnext/translations/et.csv b/erpnext/translations/et.csv
index 8e1063b..84f3ccd 100644
--- a/erpnext/translations/et.csv
+++ b/erpnext/translations/et.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Kohaldatakse juhul, kui ettevõte on SpA, SApA või SRL",
Applicable if the company is a limited liability company,"Kohaldatakse juhul, kui ettevõte on piiratud vastutusega äriühing",
Applicable if the company is an Individual or a Proprietorship,"Kohaldatakse juhul, kui ettevõte on füüsiline või füüsilisest isikust ettevõtja",
-Applicant,Taotleja,
-Applicant Type,Taotleja tüüp,
Application of Funds (Assets),Application of Funds (vara),
Application period cannot be across two allocation records,Taotluste esitamise periood ei tohi olla üle kahe jaotamise kirje,
Application period cannot be outside leave allocation period,Taotlemise tähtaeg ei tohi olla väljaspool puhkuse eraldamise ajavahemikul,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,Folio numbritega ostetud aktsionäride nimekiri,
Loading Payment System,Maksesüsteemi laadimine,
Loan,Laen,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Laenusumma ei tohi ületada Maksimaalne laenusumma {0},
-Loan Application,Laenu taotlemine,
-Loan Management,Laenujuhtimine,
-Loan Repayment,laenu tagasimaksmine,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Arve diskonteerimise salvestamiseks on laenu alguskuupäev ja laenuperiood kohustuslikud,
Loans (Liabilities),Laenudega (kohustused),
Loans and Advances (Assets),Laenud ja ettemaksed (vara),
@@ -1611,7 +1605,6 @@
Monday,Esmaspäev,
Monthly,Kuu,
Monthly Distribution,Kuu Distribution,
-Monthly Repayment Amount cannot be greater than Loan Amount,Igakuine tagasimakse ei saa olla suurem kui Laenusumma,
More,Rohkem,
More Information,Rohkem informatsiooni,
More than one selection for {0} not allowed,Rohkem kui üks valik {0} jaoks pole lubatud,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Maksa {0} {1},
Payable,Maksmisele kuuluv,
Payable Account,Võlgnevus konto,
-Payable Amount,Makstav summa,
Payment,Makse,
Payment Cancelled. Please check your GoCardless Account for more details,"Makse tühistatud. Palun kontrollige oma GoCardlessi kontot, et saada lisateavet",
Payment Confirmation,Maksekinnitus,
-Payment Date,maksekuupäev,
Payment Days,Makse päeva,
Payment Document,maksedokumendi,
Payment Due Date,Maksetähtpäevast,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Palun sisestage ostutšeki esimene,
Please enter Receipt Document,Palun sisesta laekumine Dokumendi,
Please enter Reference date,Palun sisestage Viitekuupäev,
-Please enter Repayment Periods,Palun sisesta tagasimakseperioodid,
Please enter Reqd by Date,Palun sisesta Reqd kuupäeva järgi,
Please enter Woocommerce Server URL,Palun sisestage Woocommerce Serveri URL,
Please enter Write Off Account,Palun sisestage maha konto,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Palun sisestage vanem kulukeskus,
Please enter quantity for Item {0},Palun sisestage koguse Punkt {0},
Please enter relieving date.,Palun sisestage leevendab kuupäeva.,
-Please enter repayment Amount,Palun sisesta tagasimaksmise summa,
Please enter valid Financial Year Start and End Dates,Palun sisesta kehtivad majandusaasta algus- ja lõppkuupäev,
Please enter valid email address,Sisestage kehtiv e-posti aadress,
Please enter {0} first,Palun sisestage {0} Esimene,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Hinnakujundus on reeglid veelgi filtreeritud põhineb kogusest.,
Primary Address Details,Peamine aadressi üksikasjad,
Primary Contact Details,Peamised kontaktandmed,
-Principal Amount,Põhisumma,
Print Format,Prindi Formaat,
Print IRS 1099 Forms,Printige IRS 1099 vorme,
Print Report Card,Prindi aruande kaart,
@@ -2550,7 +2538,6 @@
Sample Collection,Proovide kogu,
Sample quantity {0} cannot be more than received quantity {1},Proovi kogus {0} ei saa olla suurem kui saadud kogus {1},
Sanctioned,sanktsioneeritud,
-Sanctioned Amount,Sanktsioneeritud summa,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Sanktsioneeritud summa ei või olla suurem kui nõude summast reas {0}.,
Sand,Liiv,
Saturday,Laupäev,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} juba on vanemamenetlus {1}.,
API,API,
Annual,Aastane,
-Approved,Kinnitatud,
Change,Muuda,
Contact Email,Kontakt E-,
Export Type,Ekspordi tüüp,
@@ -3571,7 +3557,6 @@
Account Value,Konto väärtus,
Account is mandatory to get payment entries,Konto on maksekirjete saamiseks kohustuslik,
Account is not set for the dashboard chart {0},Armatuurlaua diagrammi jaoks pole kontot {0} seatud,
-Account {0} does not belong to company {1},Konto {0} ei kuulu Company {1},
Account {0} does not exists in the dashboard chart {1},Kontot {0} kontot {0} ei eksisteeri,
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Konto: <b>{0}</b> on kapital Käimasolev töö ja seda ei saa ajakirjakanne värskendada,
Account: {0} is not permitted under Payment Entry,Konto: {0} pole makse sisestamise korral lubatud,
@@ -3582,7 +3567,6 @@
Activity,Aktiivsus,
Add / Manage Email Accounts.,Lisa / Manage Email Accounts.,
Add Child,Lisa Child,
-Add Loan Security,Lisage laenuturve,
Add Multiple,Lisa mitu,
Add Participants,Lisage osalejaid,
Add to Featured Item,Lisa esiletõstetud üksusesse,
@@ -3593,15 +3577,12 @@
Address Line 1,Aadress Line 1,
Addresses,Aadressid,
Admission End Date should be greater than Admission Start Date.,Sissepääsu lõppkuupäev peaks olema suurem kui vastuvõtu alguskuupäev.,
-Against Loan,Laenu vastu,
-Against Loan:,Laenu vastu:,
All,Kõik,
All bank transactions have been created,Kõik pangatehingud on loodud,
All the depreciations has been booked,Kõik amortisatsioonid on broneeritud,
Allocation Expired!,Jaotus on aegunud!,
Allow Resetting Service Level Agreement from Support Settings.,Luba teenuse taseme lepingu lähtestamine tugiseadetest.,
Amount of {0} is required for Loan closure,Laenu sulgemiseks on vaja summat {0},
-Amount paid cannot be zero,Makstud summa ei saa olla null,
Applied Coupon Code,Rakendatud kupongi kood,
Apply Coupon Code,Rakenda kupongikood,
Appointment Booking,Kohtumiste broneerimine,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Saabumisaega ei saa arvutada, kuna juhi aadress on puudu.",
Cannot Optimize Route as Driver Address is Missing.,"Teekonda ei saa optimeerida, kuna juhi aadress puudub.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Ülesannet {0} ei saa täita, kuna selle sõltuv ülesanne {1} pole lõpule viidud / tühistatud.",
-Cannot create loan until application is approved,"Laenu ei saa luua enne, kui taotlus on heaks kiidetud",
Cannot find a matching Item. Please select some other value for {0}.,Kas te ei leia sobivat Punkt. Palun valige mõni muu väärtus {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",Üksuse {0} reas {1} ei saa ülearveldada rohkem kui {2}. Ülearvelduste lubamiseks määrake konto konto seadetes soodustus,
"Capacity Planning Error, planned start time can not be same as end time","Mahtude planeerimise viga, kavandatud algusaeg ei saa olla sama kui lõpuaeg",
@@ -3812,20 +3792,9 @@
Less Than Amount,Vähem kui summa,
Liabilities,Kohustused,
Loading...,Laadimine ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Laenusumma ületab maksimaalset laenusummat {0} pakutavate väärtpaberite kohta,
Loan Applications from customers and employees.,Klientide ja töötajate laenutaotlused.,
-Loan Disbursement,Laenu väljamaksmine,
Loan Processes,Laenuprotsessid,
-Loan Security,Laenu tagatis,
-Loan Security Pledge,Laenu tagatise pant,
-Loan Security Pledge Created : {0},Loodud laenutagatise pant: {0},
-Loan Security Price,Laenu tagatise hind,
-Loan Security Price overlapping with {0},Laenu tagatise hind kattub {0} -ga,
-Loan Security Unpledge,Laenu tagatise tagamata jätmine,
-Loan Security Value,Laenu tagatisväärtus,
Loan Type for interest and penalty rates,Laenu tüüp intresside ja viivise määrade jaoks,
-Loan amount cannot be greater than {0},Laenusumma ei tohi olla suurem kui {0},
-Loan is mandatory,Laen on kohustuslik,
Loans,Laenud,
Loans provided to customers and employees.,Klientidele ja töötajatele antud laenud.,
Location,Asukoht,
@@ -3894,7 +3863,6 @@
Pay,Maksma,
Payment Document Type,Maksedokumendi tüüp,
Payment Name,Makse nimi,
-Penalty Amount,Trahvisumma,
Pending,Pooleliolev,
Performance,Etendus,
Period based On,Periood põhineb,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Selle üksuse muutmiseks logige sisse Marketplace'i kasutajana.,
Please login as a Marketplace User to report this item.,Selle üksuse teatamiseks logige sisse Marketplace'i kasutajana.,
Please select <b>Template Type</b> to download template,Valige <b>malli</b> allalaadimiseks malli <b>tüüp</b>,
-Please select Applicant Type first,Valige esmalt taotleja tüüp,
Please select Customer first,Valige kõigepealt klient,
Please select Item Code first,Valige kõigepealt üksuse kood,
-Please select Loan Type for company {0},Valige ettevõtte {0} laenutüüp,
Please select a Delivery Note,Valige saateleht,
Please select a Sales Person for item: {0},Valige üksuse jaoks müüja: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Palun valige teine makseviis. Triip ei toeta tehingud sularaha "{0}",
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Seadistage ettevõtte {0} vaikekonto arvelduskonto,
Please specify,Palun täpsusta,
Please specify a {0},Palun täpsustage {0},lead
-Pledge Status,Pandi staatus,
-Pledge Time,Pandi aeg,
Printing,Trükkimine,
Priority,Prioriteet,
Priority has been changed to {0}.,Prioriteet on muudetud väärtuseks {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,XML-failide töötlemine,
Profitability,Tasuvus,
Project,Project,
-Proposed Pledges are mandatory for secured Loans,Kavandatud lubadused on tagatud laenude puhul kohustuslikud,
Provide the academic year and set the starting and ending date.,Esitage õppeaasta ja määrake algus- ja lõppkuupäev.,
Public token is missing for this bank,Selle panga jaoks puudub avalik luba,
Publish,Avalda,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Ostukviitungil pole ühtegi eset, mille jaoks on proovide säilitamine lubatud.",
Purchase Return,Ostutagastus,
Qty of Finished Goods Item,Valmistoodete kogus,
-Qty or Amount is mandatroy for loan security,Kogus või summa on laenutagatise tagamiseks kohustuslik,
Quality Inspection required for Item {0} to submit,Üksuse {0} esitamiseks on vajalik kvaliteedikontroll,
Quantity to Manufacture,Tootmiskogus,
Quantity to Manufacture can not be zero for the operation {0},Tootmiskogus ei saa toimingu ajal olla null,
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Vabastamiskuupäev peab olema liitumiskuupäevast suurem või sellega võrdne,
Rename,Nimeta,
Rename Not Allowed,Ümbernimetamine pole lubatud,
-Repayment Method is mandatory for term loans,Tagasimakseviis on tähtajaliste laenude puhul kohustuslik,
-Repayment Start Date is mandatory for term loans,Tagasimakse alguskuupäev on tähtajaliste laenude puhul kohustuslik,
Report Item,Aruande üksus,
Report this Item,Teata sellest elemendist,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Allhanke jaoks reserveeritud kogus: Toorainekogus allhankelepingu sõlmimiseks.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Rida ({0}): {1} on juba allahinnatud {2},
Rows Added in {0},{0} lisatud read,
Rows Removed in {0},{0} -st eemaldatud read,
-Sanctioned Amount limit crossed for {0} {1},{0} {1} ületatud karistuslimiit,
-Sanctioned Loan Amount already exists for {0} against company {1},Ettevõtte {1} jaoks on {0} sanktsioneeritud laenusumma juba olemas,
Save,Salvesta,
Save Item,Salvesta üksus,
Saved Items,Salvestatud üksused,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Kasutaja {0} on keelatud,
Users and Permissions,Kasutajad ja reeglid,
Vacancies cannot be lower than the current openings,Vabad töökohad ei saa olla madalamad kui praegused avad,
-Valid From Time must be lesser than Valid Upto Time.,Kehtiv alates ajast peab olema väiksem kui kehtiv kellaaeg.,
Valuation Rate required for Item {0} at row {1},Üksuse {0} real {1} nõutav hindamismäär,
Values Out Of Sync,Väärtused pole sünkroonis,
Vehicle Type is required if Mode of Transport is Road,"Sõidukitüüp on nõutav, kui transpordiliik on maantee",
@@ -4211,7 +4168,6 @@
Add to Cart,Lisa ostukorvi,
Days Since Last Order,Päevad alates viimasest tellimusest,
In Stock,Laos,
-Loan Amount is mandatory,Laenusumma on kohustuslik,
Mode Of Payment,Makseviis,
No students Found,Ühtegi õpilast ei leitud,
Not in Stock,Ei ole laos,
@@ -4240,7 +4196,6 @@
Group by,Group By,
In stock,Laos,
Item name,Toote nimi,
-Loan amount is mandatory,Laenusumma on kohustuslik,
Minimum Qty,Minimaalne kogus,
More details,Rohkem detaile,
Nature of Supplies,Tarnete iseloom,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Kokku valminud kogus,
Qty to Manufacture,Kogus toota,
Repay From Salary can be selected only for term loans,Tagasimakse palgast saab valida ainult tähtajaliste laenude puhul,
-No valid Loan Security Price found for {0},Päringule {0} ei leitud kehtivat laenu tagatishinda,
-Loan Account and Payment Account cannot be same,Laenukonto ja maksekonto ei saa olla ühesugused,
-Loan Security Pledge can only be created for secured loans,Laenutagatise pandiks saab olla ainult tagatud laenud,
Social Media Campaigns,Sotsiaalse meedia kampaaniad,
From Date can not be greater than To Date,Alates kuupäevast ei tohi olla suurem kui kuupäev,
Please set a Customer linked to the Patient,Palun määrake patsiendiga seotud klient,
@@ -6437,7 +6389,6 @@
HR User,HR Kasutaja,
Appointment Letter,Töölevõtu kiri,
Job Applicant,Tööotsija,
-Applicant Name,Taotleja nimi,
Appointment Date,Ametisse nimetamise kuupäev,
Appointment Letter Template,Ametisse nimetamise mall,
Body,Keha,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sünkroonimine käimas,
Hub Seller Name,Rummu müüja nimi,
Custom Data,Kohandatud andmed,
-Member,Liige,
-Partially Disbursed,osaliselt Väljastatud,
-Loan Closure Requested,Taotletud laenu sulgemine,
Repay From Salary,Tagastama alates Palk,
-Loan Details,laenu detailid,
-Loan Type,laenu liik,
-Loan Amount,Laenusumma,
-Is Secured Loan,On tagatud laen,
-Rate of Interest (%) / Year,Intressimäär (%) / Aasta,
-Disbursement Date,Väljamakse kuupäev,
-Disbursed Amount,Väljamakstud summa,
-Is Term Loan,Kas tähtajaline laen,
-Repayment Method,tagasimaksmine meetod,
-Repay Fixed Amount per Period,Maksta kindlaksmääratud summa Periood,
-Repay Over Number of Periods,Tagastama Üle perioodide arv,
-Repayment Period in Months,Tagastamise tähtaeg kuudes,
-Monthly Repayment Amount,Igakuine tagasimakse,
-Repayment Start Date,Tagasimaksmise alguskuupäev,
-Loan Security Details,Laenu tagatise üksikasjad,
-Maximum Loan Value,Laenu maksimaalne väärtus,
-Account Info,Konto andmed,
-Loan Account,Laenukonto,
-Interest Income Account,Intressitulu konto,
-Penalty Income Account,Karistustulu konto,
-Repayment Schedule,maksegraafikut,
-Total Payable Amount,Kokku tasumisele,
-Total Principal Paid,Tasutud põhisumma kokku,
-Total Interest Payable,Kokku intressivõlg,
-Total Amount Paid,Kogusumma tasutud,
-Loan Manager,Laenuhaldur,
-Loan Info,laenu Info,
-Rate of Interest,Intressimäärast,
-Proposed Pledges,Kavandatud lubadused,
-Maximum Loan Amount,Maksimaalne laenusumma,
-Repayment Info,tagasimaksmine Info,
-Total Payable Interest,Kokku intressikulusid,
-Against Loan ,Laenu vastu,
-Loan Interest Accrual,Laenuintresside tekkepõhine,
-Amounts,Summad,
-Pending Principal Amount,Ootel põhisumma,
-Payable Principal Amount,Makstav põhisumma,
-Paid Principal Amount,Tasutud põhisumma,
-Paid Interest Amount,Makstud intressi summa,
-Process Loan Interest Accrual,Protsesslaenu intressi tekkepõhine,
-Repayment Schedule Name,Tagasimakse ajakava nimi,
Regular Payment,Regulaarne makse,
Loan Closure,Laenu sulgemine,
-Payment Details,Makse andmed,
-Interest Payable,Makstav intress,
-Amount Paid,Makstud summa,
-Principal Amount Paid,Makstud põhisumma,
-Repayment Details,Tagasimakse üksikasjad,
-Loan Repayment Detail,Laenu tagasimakse üksikasjad,
-Loan Security Name,Laenu väärtpaberi nimi,
-Unit Of Measure,Mõõtühik,
-Loan Security Code,Laenu turvakood,
-Loan Security Type,Laenu tagatise tüüp,
-Haircut %,Juukselõikus%,
-Loan Details,Laenu üksikasjad,
-Unpledged,Tagatiseta,
-Pledged,Panditud,
-Partially Pledged,Osaliselt panditud,
-Securities,Väärtpaberid,
-Total Security Value,Turvalisuse koguväärtus,
-Loan Security Shortfall,Laenutagatise puudujääk,
-Loan ,Laen,
-Shortfall Time,Puuduse aeg,
-America/New_York,Ameerika / New_York,
-Shortfall Amount,Puudujäägi summa,
-Security Value ,Turvalisuse väärtus,
-Process Loan Security Shortfall,Protsessilaenu tagatise puudujääk,
-Loan To Value Ratio,Laenu ja väärtuse suhe,
-Unpledge Time,Pühitsemise aeg,
-Loan Name,laenu Nimi,
Rate of Interest (%) Yearly,Intressimäär (%) Aastane,
-Penalty Interest Rate (%) Per Day,Trahviintress (%) päevas,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Viivise intressimääraga arvestatakse tasumata viivise korral iga päev pooleliolevat intressisummat,
-Grace Period in Days,Armuperiood päevades,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Päevade arv tähtpäevast, milleni laenu tagasimaksmisega viivitamise korral viivist ei võeta",
-Pledge,Pant,
-Post Haircut Amount,Postituse juukselõikuse summa,
-Process Type,Protsessi tüüp,
-Update Time,Uuendamise aeg,
-Proposed Pledge,Kavandatud lubadus,
-Total Payment,Kokku tasumine,
-Balance Loan Amount,Tasakaal Laenusumma,
-Is Accrued,On kogunenud,
Salary Slip Loan,Palk Slip Laen,
Loan Repayment Entry,Laenu tagasimakse kanne,
-Sanctioned Loan Amount,Sankteeritud laenusumma,
-Sanctioned Amount Limit,Sanktsioonisumma piirmäär,
-Unpledge,Unustamata jätmine,
-Haircut,Juukselõikus,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,Loo Graafik,
Schedules,Sõiduplaanid,
@@ -7885,7 +7749,6 @@
Update Series,Värskenda Series,
Change the starting / current sequence number of an existing series.,Muuda algus / praegune järjenumber olemasoleva seeria.,
Prefix,Eesliide,
-Current Value,Praegune väärtus,
This is the number of the last created transaction with this prefix,See on mitmeid viimase loodud tehingu seda prefiksit,
Update Series Number,Värskenda seerianumbri,
Quotation Lost Reason,Tsitaat Lost Reason,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise Soovitatav Reorder Level,
Lead Details,Plii Üksikasjad,
Lead Owner Efficiency,Lead Omanik Efficiency,
-Loan Repayment and Closure,Laenu tagasimaksmine ja sulgemine,
-Loan Security Status,Laenu tagatise olek,
Lost Opportunity,Kaotatud võimalus,
Maintenance Schedules,Hooldusgraafikud,
Material Requests for which Supplier Quotations are not created,"Materjal taotlused, mis Tarnija tsitaadid ei ole loodud",
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Sihitud arvud: {0},
Payment Account is mandatory,Maksekonto on kohustuslik,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.",Selle kontrollimisel arvestatakse enne tulumaksu arvutamist maksustamata tulust maha kogu summa ilma deklaratsiooni ja tõendite esitamiseta.,
-Disbursement Details,Väljamakse üksikasjad,
Material Request Warehouse,Materiaalsete taotluste ladu,
Select warehouse for material requests,Materjalitaotluste jaoks valige ladu,
Transfer Materials For Warehouse {0},Lao materjalide edastamine {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Tagasimakstud summa palgast tagasi maksta,
Deduction from salary,Palgast mahaarvamine,
Expired Leaves,Aegunud lehed,
-Reference No,Viitenumber,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Allahindluse protsent on laenutagatise turuväärtuse ja sellele laenutagatisele omistatud väärtuse protsentuaalne erinevus.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Laenu ja väärtuse suhe väljendab laenusumma suhet panditud väärtpaberi väärtusesse. Laenutagatise puudujääk tekib siis, kui see langeb alla laenu määratud väärtuse",
If this is not checked the loan by default will be considered as a Demand Loan,"Kui seda ei kontrollita, käsitatakse laenu vaikimisi nõudmislaenuna",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Seda kontot kasutatakse laenusaaja tagasimaksete broneerimiseks ja ka laenuvõtjale laenude väljamaksmiseks,
This account is capital account which is used to allocate capital for loan disbursal account ,"See konto on kapitalikonto, mida kasutatakse kapitali eraldamiseks laenu väljamaksekontole",
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Toiming {0} ei kuulu töökorralduse juurde {1},
Print UOM after Quantity,Prindi UOM pärast kogust,
Set default {0} account for perpetual inventory for non stock items,Määra mittekaubanduses olevate üksuste püsikomplekti vaikekonto {0} määramine,
-Loan Security {0} added multiple times,Laenutagatis {0} lisati mitu korda,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Erineva LTV suhtega laenuväärtpabereid ei saa ühe laenu vastu pantida,
-Qty or Amount is mandatory for loan security!,Kogus või summa on laenutagatise jaoks kohustuslik!,
-Only submittted unpledge requests can be approved,Ainult esitatud panditaotlusi saab kinnitada,
-Interest Amount or Principal Amount is mandatory,Intressi summa või põhisumma on kohustuslik,
-Disbursed Amount cannot be greater than {0},Väljamakstud summa ei tohi olla suurem kui {0},
-Row {0}: Loan Security {1} added multiple times,Rida {0}: laenutagatis {1} lisati mitu korda,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Rida nr {0}: alamüksus ei tohiks olla tootekomplekt. Eemaldage üksus {1} ja salvestage,
Credit limit reached for customer {0},Kliendi {0} krediidilimiit on saavutatud,
Could not auto create Customer due to the following missing mandatory field(s):,Klienti ei saanud automaatselt luua järgmise kohustusliku välja (de) puudumise tõttu:,
diff --git a/erpnext/translations/fa.csv b/erpnext/translations/fa.csv
index b5bfab4..4021462 100644
--- a/erpnext/translations/fa.csv
+++ b/erpnext/translations/fa.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL",اگر شرکت SpA ، SApA یا SRL باشد ، قابل اجرا است,
Applicable if the company is a limited liability company,اگر شرکت یک شرکت با مسئولیت محدود باشد قابل اجرا است,
Applicable if the company is an Individual or a Proprietorship,اگر شرکت یک فرد یا مالکیت مالکیت باشد ، قابل اجرا است,
-Applicant,درخواست کننده,
-Applicant Type,نوع متقاضی,
Application of Funds (Assets),استفاده از وجوه (دارایی),
Application period cannot be across two allocation records,دوره درخواست نمی تواند در دو رکورد تخصیص باشد,
Application period cannot be outside leave allocation period,دوره نرم افزار می تواند دوره تخصیص مرخصی در خارج نیست,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,لیست سهامداران موجود با شماره های برگه,
Loading Payment System,سیستم پرداخت بارگیری,
Loan,وام,
-Loan Amount cannot exceed Maximum Loan Amount of {0},وام مبلغ می توانید حداکثر مبلغ وام از تجاوز نمی {0},
-Loan Application,درخواست وام,
-Loan Management,مدیریت وام,
-Loan Repayment,بازپرداخت وام,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,تاریخ شروع وام و دوره وام برای صرفه جویی در تخفیف فاکتور الزامی است,
Loans (Liabilities),وام (بدهی),
Loans and Advances (Assets),وام و پیشرفت (دارایی),
@@ -1611,7 +1605,6 @@
Monday,دوشنبه,
Monthly,ماهیانه,
Monthly Distribution,توزیع ماهانه,
-Monthly Repayment Amount cannot be greater than Loan Amount,میزان بازپرداخت ماهانه نمی تواند بیشتر از وام مبلغ,
More,بیش,
More Information,اطلاعات بیشتر,
More than one selection for {0} not allowed,بیش از یک انتخاب برای {0} مجاز نیست,
@@ -1884,11 +1877,9 @@
Pay {0} {1},پرداخت {0} {1},
Payable,قابل پرداخت,
Payable Account,قابل پرداخت حساب,
-Payable Amount,مبلغ قابل پرداخت,
Payment,پرداخت,
Payment Cancelled. Please check your GoCardless Account for more details,پرداخت لغو شد برای اطلاعات بیشتر، لطفا حساب GoCardless خود را بررسی کنید,
Payment Confirmation,تاییدیه پرداخت,
-Payment Date,تاریخ پرداخت,
Payment Days,روز پرداخت,
Payment Document,سند پرداخت,
Payment Due Date,پرداخت با توجه تاریخ,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,لطفا ابتدا وارد رسید خرید,
Please enter Receipt Document,لطفا سند دریافت وارد کنید,
Please enter Reference date,لطفا تاریخ مرجع وارد,
-Please enter Repayment Periods,لطفا دوره بازپرداخت وارد کنید,
Please enter Reqd by Date,لطفا Reqd را با تاریخ وارد کنید,
Please enter Woocommerce Server URL,لطفا URL سرور Woocommerce را وارد کنید,
Please enter Write Off Account,لطفا وارد حساب فعال,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,لطفا پدر و مادر مرکز هزینه وارد,
Please enter quantity for Item {0},لطفا مقدار برای آیتم را وارد کنید {0},
Please enter relieving date.,لطفا تاریخ تسکین وارد کنید.,
-Please enter repayment Amount,لطفا مقدار بازپرداخت وارد کنید,
Please enter valid Financial Year Start and End Dates,لطفا معتبر مالی سال تاریخ شروع و پایان را وارد کنید,
Please enter valid email address,لطفا آدرس ایمیل معتبر وارد کنید,
Please enter {0} first,لطفا ابتدا وارد {0},
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,مشاهده قوانین قیمت گذاری بیشتر بر اساس مقدار فیلتر شده است.,
Primary Address Details,جزئیات آدرس اصلی,
Primary Contact Details,اطلاعات تماس اولیه,
-Principal Amount,مقدار اصلی,
Print Format,چاپ فرمت,
Print IRS 1099 Forms,فرم های IRS 1099 را چاپ کنید,
Print Report Card,کارت گزارش چاپ,
@@ -2550,7 +2538,6 @@
Sample Collection,مجموعه نمونه,
Sample quantity {0} cannot be more than received quantity {1},مقدار نمونه {0} نمیتواند بیش از مقدار دریافتی باشد {1},
Sanctioned,تحریم,
-Sanctioned Amount,مقدار تحریم,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,مقدار تحریم نیست می تواند بیشتر از مقدار ادعای در ردیف {0}.,
Sand,شن,
Saturday,روز شنبه,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} در حال حاضر یک روش والدین {1} دارد.,
API,API,
Annual,سالیانه,
-Approved,تایید,
Change,تغییر,
Contact Email,تماس با ایمیل,
Export Type,نوع صادرات,
@@ -3571,7 +3557,6 @@
Account Value,ارزش حساب,
Account is mandatory to get payment entries,حساب برای دریافت ورودی های پرداخت الزامی است,
Account is not set for the dashboard chart {0},حساب برای نمودار داشبورد {0 set تنظیم نشده است,
-Account {0} does not belong to company {1},حساب {0} به شرکت {1} تعلق ندارد,
Account {0} does not exists in the dashboard chart {1},حساب {0 in در نمودار داشبورد {1 exists موجود نیست,
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,حساب: <b>{0}</b> سرمایه در حال انجام است و توسط Journal Entry قابل به روزرسانی نیست,
Account: {0} is not permitted under Payment Entry,حساب: {0 under در ورود پرداخت مجاز نیست,
@@ -3582,7 +3567,6 @@
Activity,فعالیت,
Add / Manage Email Accounts.,افزودن / مدیریت ایمیل ها,
Add Child,اضافه کردن کودک,
-Add Loan Security,امنیت وام را اضافه کنید,
Add Multiple,اضافه کردن چند,
Add Participants,شرکت کنندگان اضافه کردن,
Add to Featured Item,به آیتم مورد علاقه اضافه کنید,
@@ -3593,15 +3577,12 @@
Address Line 1,خط 1 آدرس,
Addresses,نشانی ها,
Admission End Date should be greater than Admission Start Date.,تاریخ پایان پذیرش باید بیشتر از تاریخ شروع پذیرش باشد.,
-Against Loan,در برابر وام,
-Against Loan:,در برابر وام:,
All,همه,
All bank transactions have been created,تمام معاملات بانکی ایجاد شده است,
All the depreciations has been booked,همه استهلاک ها رزرو شده اند,
Allocation Expired!,تخصیص منقضی شده است!,
Allow Resetting Service Level Agreement from Support Settings.,تنظیم مجدد توافق نامه سطح خدمات از تنظیمات پشتیبانی مجاز است.,
Amount of {0} is required for Loan closure,مبلغ {0 برای بسته شدن وام مورد نیاز است,
-Amount paid cannot be zero,مبلغ پرداخت شده نمی تواند صفر باشد,
Applied Coupon Code,کد کوپن کاربردی,
Apply Coupon Code,کد کوپن را اعمال کنید,
Appointment Booking,رزرو قرار ملاقات,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,نمی توان زمان رسیدن را به دلیل گم شدن آدرس راننده محاسبه کرد.,
Cannot Optimize Route as Driver Address is Missing.,نمی توان مسیر را بهینه کرد زیرا آدرس راننده وجود ندارد.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,کار {0} به عنوان وظیفه وابسته به آن {1 complete امکان پذیر نیست / لغو نیست.,
-Cannot create loan until application is approved,تا زمانی که درخواست تأیید نشود ، نمی توانید وام ایجاد کنید,
Cannot find a matching Item. Please select some other value for {0}.,می توانید یک آیتم تطبیق پیدا کند. لطفا برخی از ارزش های دیگر برای {0} را انتخاب کنید.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",برای مورد {0} در ردیف {1} بیش از 2 {بیش از ill امکان پذیر نیست. برای اجازه بیش از صدور صورت حساب ، لطفاً در تنظیمات حساب میزان کمک هزینه را تعیین کنید,
"Capacity Planning Error, planned start time can not be same as end time",خطای برنامه ریزی ظرفیت ، زمان شروع برنامه ریزی شده نمی تواند برابر با زمان پایان باشد,
@@ -3812,20 +3792,9 @@
Less Than Amount,مقدار کمتری از مقدار,
Liabilities,بدهی,
Loading...,در حال بارگذاری ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,مبلغ وام بیش از حداکثر میزان وام {0} به ازای اوراق بهادار پیشنهادی است,
Loan Applications from customers and employees.,برنامه های وام از مشتریان و کارمندان.,
-Loan Disbursement,پرداخت وام,
Loan Processes,فرآیندهای وام,
-Loan Security,امنیت وام,
-Loan Security Pledge,تعهد امنیتی وام,
-Loan Security Pledge Created : {0},تعهد امنیتی وام ایجاد شده: {0,
-Loan Security Price,قیمت امنیت وام,
-Loan Security Price overlapping with {0},همپوشانی قیمت امنیت وام با {0},
-Loan Security Unpledge,اعتراض امنیتی وام,
-Loan Security Value,ارزش امنیتی وام,
Loan Type for interest and penalty rates,نوع وام برای نرخ بهره و مجازات,
-Loan amount cannot be greater than {0},مبلغ وام نمی تواند بیشتر از {0 باشد,
-Loan is mandatory,وام الزامی است,
Loans,وام,
Loans provided to customers and employees.,وامهایی که به مشتریان و کارمندان داده می شود.,
Location,محل,
@@ -3894,7 +3863,6 @@
Pay,پرداخت,
Payment Document Type,نوع سند پرداخت,
Payment Name,نام پرداخت,
-Penalty Amount,میزان مجازات,
Pending,در انتظار,
Performance,کارایی,
Period based On,دوره بر اساس,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,لطفاً برای ویرایش این مورد به عنوان یک کاربر Marketplace وارد شوید.,
Please login as a Marketplace User to report this item.,لطفا برای گزارش این مورد به عنوان یک کاربر Marketplace وارد شوید.,
Please select <b>Template Type</b> to download template,لطفا <b>الگو را</b> برای بارگیری قالب انتخاب کنید,
-Please select Applicant Type first,لطفا ابتدا متقاضی نوع را انتخاب کنید,
Please select Customer first,لطفاً ابتدا مشتری را انتخاب کنید,
Please select Item Code first,لطفا ابتدا کد مورد را انتخاب کنید,
-Please select Loan Type for company {0},لطفا نوع وام را برای شرکت {0 انتخاب کنید,
Please select a Delivery Note,لطفاً یک یادداشت تحویل را انتخاب کنید,
Please select a Sales Person for item: {0},لطفاً یک شخص فروش را برای کالا انتخاب کنید: {0,
Please select another payment method. Stripe does not support transactions in currency '{0}',لطفا روش پرداخت دیگری را انتخاب کنید. خط خطی انجام تراکنش در ارز را پشتیبانی نمی کند '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},لطفاً یک حساب بانکی پیش فرض برای شرکت {0 تنظیم کنید,
Please specify,لطفا مشخص کنید,
Please specify a {0},لطفاً {0 را مشخص کنید,lead
-Pledge Status,وضعیت تعهد,
-Pledge Time,زمان تعهد,
Printing,چاپ,
Priority,اولویت,
Priority has been changed to {0}.,اولویت به {0 تغییر یافته است.,
@@ -3944,7 +3908,6 @@
Processing XML Files,پردازش فایلهای XML,
Profitability,سودآوری,
Project,پروژه,
-Proposed Pledges are mandatory for secured Loans,وعده های پیشنهادی برای وام های مطمئن الزامی است,
Provide the academic year and set the starting and ending date.,سال تحصیلی را تهیه کنید و تاریخ شروع و پایان را تعیین کنید.,
Public token is missing for this bank,نشان عمومی برای این بانک وجود ندارد,
Publish,انتشار,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,رسید خرید هیچ موردی را ندارد که نمونه حفظ آن فعال باشد.,
Purchase Return,بازگشت خرید,
Qty of Finished Goods Item,مقدار کالای تمام شده کالا,
-Qty or Amount is mandatroy for loan security,Qty یا مقدار برای تأمین امنیت وام است,
Quality Inspection required for Item {0} to submit,بازرسی کیفیت مورد نیاز برای ارسال Item 0 مورد نیاز است,
Quantity to Manufacture,مقدار تولید,
Quantity to Manufacture can not be zero for the operation {0},مقدار تولید برای عملیات صفر نمی تواند {0 باشد,
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Relieve Date باید بیشتر یا مساوی تاریخ عضویت باشد,
Rename,تغییر نام,
Rename Not Allowed,تغییر نام مجاز نیست,
-Repayment Method is mandatory for term loans,روش بازپرداخت برای وام های کوتاه مدت الزامی است,
-Repayment Start Date is mandatory for term loans,تاریخ شروع بازپرداخت برای وام های کوتاه مدت الزامی است,
Report Item,گزارش مورد,
Report this Item,گزارش این مورد,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty رزرو شده برای قراردادهای فرعی: مقدار مواد اولیه برای ساخت وسایل فرعی.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},ردیف ({0}): 1 {در حال حاضر با 2 {تخفیف,
Rows Added in {0},ردیف اضافه شده در {0},
Rows Removed in {0},ردیف ها در {0 oved حذف شدند,
-Sanctioned Amount limit crossed for {0} {1},حد مجاز مجاز تحریم برای {0 {1,
-Sanctioned Loan Amount already exists for {0} against company {1},مبلغ وام تحریم شده در حال حاضر برای {0} در برابر شرکت 1 {وجود دارد,
Save,ذخیره,
Save Item,ذخیره مورد,
Saved Items,موارد ذخیره شده,
@@ -4135,7 +4093,6 @@
User {0} is disabled,کاربر {0} غیر فعال است,
Users and Permissions,کاربران و ویرایش,
Vacancies cannot be lower than the current openings,جای خالی نمی تواند کمتر از دهانه های فعلی باشد,
-Valid From Time must be lesser than Valid Upto Time.,معتبر از زمان باید کمتر از زمان معتبر معتبر باشد.,
Valuation Rate required for Item {0} at row {1},نرخ ارزیابی مورد نیاز برای {0} در ردیف {1,
Values Out Of Sync,ارزشهای خارج از همگام سازی,
Vehicle Type is required if Mode of Transport is Road,در صورتی که نحوه حمل و نقل جاده ای باشد ، نوع خودرو مورد نیاز است,
@@ -4211,7 +4168,6 @@
Add to Cart,اضافه کردن به سبد,
Days Since Last Order,روزهایی از آخرین سفارش,
In Stock,در انبار,
-Loan Amount is mandatory,مبلغ وام الزامی است,
Mode Of Payment,نحوه پرداخت,
No students Found,هیچ دانشجویی یافت نشد,
Not in Stock,در انبار,
@@ -4240,7 +4196,6 @@
Group by,گروه توسط,
In stock,در انبار,
Item name,نام آیتم,
-Loan amount is mandatory,مبلغ وام الزامی است,
Minimum Qty,حداقل تعداد,
More details,جزئیات بیشتر,
Nature of Supplies,طبیعت لوازم,
@@ -4409,9 +4364,6 @@
Total Completed Qty,تعداد کل تکمیل شده است,
Qty to Manufacture,تعداد برای تولید,
Repay From Salary can be selected only for term loans,بازپرداخت از حقوق فقط برای وام های مدت دار قابل انتخاب است,
-No valid Loan Security Price found for {0},هیچ قیمت امنیتی وام معتبری برای {0} یافت نشد,
-Loan Account and Payment Account cannot be same,حساب وام و حساب پرداخت نمی توانند یکسان باشند,
-Loan Security Pledge can only be created for secured loans,وام تضمین وام فقط برای وام های تضمینی ایجاد می شود,
Social Media Campaigns,کمپین های رسانه های اجتماعی,
From Date can not be greater than To Date,از تاریخ نمی تواند بیشتر از تاریخ باشد,
Please set a Customer linked to the Patient,لطفاً مشتری متصل به بیمار را تنظیم کنید,
@@ -6437,7 +6389,6 @@
HR User,HR کاربر,
Appointment Letter,نامه انتصاب,
Job Applicant,درخواستگر کار,
-Applicant Name,نام متقاضی,
Appointment Date,تاریخ انتصاب,
Appointment Letter Template,الگوی نامه انتصاب,
Body,بدن,
@@ -7059,99 +7010,12 @@
Sync in Progress,همگام سازی در حال پیشرفت,
Hub Seller Name,فروشنده نام توپی,
Custom Data,داده های سفارشی,
-Member,عضو,
-Partially Disbursed,نیمه پرداخت شده,
-Loan Closure Requested,درخواست بسته شدن وام,
Repay From Salary,بازپرداخت از حقوق و دستمزد,
-Loan Details,وام جزییات,
-Loan Type,نوع وام,
-Loan Amount,مبلغ وام,
-Is Secured Loan,وام مطمئن است,
-Rate of Interest (%) / Year,نرخ بهره (٪) / سال,
-Disbursement Date,تاریخ پرداخت,
-Disbursed Amount,مبلغ پرداخت شده,
-Is Term Loan,وام مدت است,
-Repayment Method,روش بازپرداخت,
-Repay Fixed Amount per Period,بازپرداخت مقدار ثابت در هر دوره,
-Repay Over Number of Periods,بازپرداخت تعداد بیش از دوره های,
-Repayment Period in Months,دوره بازپرداخت در ماه,
-Monthly Repayment Amount,میزان بازپرداخت ماهانه,
-Repayment Start Date,تاریخ شروع بازپرداخت,
-Loan Security Details,جزئیات امنیت وام,
-Maximum Loan Value,ارزش وام حداکثر,
-Account Info,اطلاعات حساب,
-Loan Account,حساب وام,
-Interest Income Account,حساب درآمد حاصل از بهره,
-Penalty Income Account,مجازات حساب درآمد,
-Repayment Schedule,برنامه بازپرداخت,
-Total Payable Amount,مجموع مبلغ قابل پرداخت,
-Total Principal Paid,کل مبلغ پرداخت شده,
-Total Interest Payable,منافع کل قابل پرداخت,
-Total Amount Paid,کل مبلغ پرداخت شده,
-Loan Manager,مدیر وام,
-Loan Info,وام اطلاعات,
-Rate of Interest,نرخ بهره,
-Proposed Pledges,تعهدات پیشنهادی,
-Maximum Loan Amount,حداکثر مبلغ وام,
-Repayment Info,اطلاعات بازپرداخت,
-Total Payable Interest,مجموع بهره قابل پرداخت,
-Against Loan ,در برابر وام,
-Loan Interest Accrual,بهره وام تعهدی,
-Amounts,مقدار,
-Pending Principal Amount,در انتظار مبلغ اصلی,
-Payable Principal Amount,مبلغ اصلی قابل پرداخت,
-Paid Principal Amount,مبلغ اصلی پرداخت شده,
-Paid Interest Amount,مبلغ سود پرداخت شده,
-Process Loan Interest Accrual,بهره وام فرآیند تعهدی,
-Repayment Schedule Name,نام برنامه بازپرداخت,
Regular Payment,پرداخت منظم,
Loan Closure,بسته شدن وام,
-Payment Details,جزئیات پرداخت,
-Interest Payable,بهره قابل پرداخت,
-Amount Paid,مبلغ پرداخت شده,
-Principal Amount Paid,مبلغ اصلی پرداخت شده,
-Repayment Details,جزئیات بازپرداخت,
-Loan Repayment Detail,جزئیات بازپرداخت وام,
-Loan Security Name,نام امنیتی وام,
-Unit Of Measure,واحد اندازه گیری,
-Loan Security Code,کد امنیتی وام,
-Loan Security Type,نوع امنیتی وام,
-Haircut %,اصلاح مو ٪,
-Loan Details,جزئیات وام,
-Unpledged,بدون استفاده,
-Pledged,قول داده,
-Partially Pledged,تا حدی تعهد شده,
-Securities,اوراق بهادار,
-Total Security Value,ارزش امنیتی کل,
-Loan Security Shortfall,کمبود امنیت وام,
-Loan ,وام,
-Shortfall Time,زمان کمبود,
-America/New_York,آمریکا / New_York,
-Shortfall Amount,مقدار کمبود,
-Security Value ,ارزش امنیتی,
-Process Loan Security Shortfall,کمبود امنیت وام فرآیند,
-Loan To Value Ratio,نسبت وام به ارزش,
-Unpledge Time,زمان قطع شدن,
-Loan Name,نام وام,
Rate of Interest (%) Yearly,نرخ بهره (٪) سالانه,
-Penalty Interest Rate (%) Per Day,مجازات نرخ بهره (٪) در روز,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,در صورت تأخیر در بازپرداخت ، نرخ بهره مجازات به میزان روزانه مبلغ بهره در نظر گرفته می شود,
-Grace Period in Days,دوره گریس در روزها,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,تعداد روزها از تاریخ سررسید تا زمانی که مجازات در صورت تاخیر در بازپرداخت وام دریافت نمی شود,
-Pledge,سوگند - تعهد,
-Post Haircut Amount,مبلغ کوتاه کردن مو,
-Process Type,نوع فرآیند,
-Update Time,زمان بروزرسانی,
-Proposed Pledge,تعهد پیشنهادی,
-Total Payment,مبلغ کل قابل پرداخت,
-Balance Loan Amount,تعادل وام مبلغ,
-Is Accrued,رمزگذاری شده است,
Salary Slip Loan,وام وام لغزش,
Loan Repayment Entry,ورودی بازپرداخت وام,
-Sanctioned Loan Amount,مبلغ وام تحریم شده,
-Sanctioned Amount Limit,حد مجاز مجاز تحریم,
-Unpledge,ناخواسته,
-Haircut,اصلاح مو,
MAT-MSH-.YYYY.-,MAT-MSH- .YYYY.-,
Generate Schedule,تولید برنامه,
Schedules,برنامه,
@@ -7885,7 +7749,6 @@
Update Series,به روز رسانی سری,
Change the starting / current sequence number of an existing series.,تغییر شروع / شماره توالی فعلی از یک سری موجود است.,
Prefix,پیشوند,
-Current Value,ارزش فعلی,
This is the number of the last created transaction with this prefix,این تعداد از آخرین معامله ایجاد شده با این پیشوند است,
Update Series Number,به روز رسانی سری شماره,
Quotation Lost Reason,نقل قول را فراموش کرده اید دلیل,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise توصیه ترتیب مجدد سطح,
Lead Details,مشخصات راهبر,
Lead Owner Efficiency,بهره وری مالک سرب,
-Loan Repayment and Closure,بازپرداخت وام وام,
-Loan Security Status,وضعیت امنیتی وام,
Lost Opportunity,فرصت از دست رفته,
Maintenance Schedules,برنامه های نگهداری و تعمیرات,
Material Requests for which Supplier Quotations are not created,درخواست مواد که نقل قول تامین کننده ایجاد نمی,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},تعداد مورد نظر: {0},
Payment Account is mandatory,حساب پرداخت اجباری است,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.",در صورت بررسی ، قبل از محاسبه مالیات بر درآمد ، بدون هیچ گونه اظهارنامه یا اثبات اثبات ، کل مبلغ از درآمد مشمول مالیات کسر می شود.,
-Disbursement Details,جزئیات پرداخت,
Material Request Warehouse,انبار درخواست مواد,
Select warehouse for material requests,انبار را برای درخواست های مواد انتخاب کنید,
Transfer Materials For Warehouse {0},انتقال مواد برای انبار {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,مبلغ مطالبه نشده از حقوق را بازپرداخت کنید,
Deduction from salary,کسر از حقوق,
Expired Leaves,برگهای منقضی شده,
-Reference No,شماره مرجع,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,درصد کاهش مو به درصد اختلاف بین ارزش بازار ضمانت وام و ارزشی است که به عنوان وثیقه وام هنگام استفاده به عنوان وثیقه آن وام به آن تعلق می گیرد.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,نسبت وام به ارزش ، نسبت مبلغ وام به ارزش وثیقه تعهد شده را بیان می کند. اگر این مقدار کمتر از مقدار تعیین شده برای هر وام باشد ، کسری امنیت وام ایجاد می شود,
If this is not checked the loan by default will be considered as a Demand Loan,اگر این مورد بررسی نشود ، وام به طور پیش فرض به عنوان وام تقاضا در نظر گرفته می شود,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,این حساب برای رزرو بازپرداخت وام از وام گیرنده و همچنین پرداخت وام به وام گیرنده استفاده می شود,
This account is capital account which is used to allocate capital for loan disbursal account ,این حساب حساب سرمایه ای است که برای تخصیص سرمایه برای حساب پرداخت وام استفاده می شود,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},عملیات {0} به دستور کار تعلق ندارد {1},
Print UOM after Quantity,UOM را بعد از Quantity چاپ کنید,
Set default {0} account for perpetual inventory for non stock items,حساب پیش فرض {0} را برای موجودی دائمی اقلام غیر سهام تنظیم کنید,
-Loan Security {0} added multiple times,امنیت وام {0} چندین بار اضافه شده است,
-Loan Securities with different LTV ratio cannot be pledged against one loan,اوراق بهادار وام با نسبت LTV متفاوت را نمی توان در مقابل یک وام تعهد کرد,
-Qty or Amount is mandatory for loan security!,برای امنیت وام تعداد یا مبلغ اجباری است!,
-Only submittted unpledge requests can be approved,فقط درخواست های بی قید ارسال شده قابل تأیید است,
-Interest Amount or Principal Amount is mandatory,مبلغ بهره یا مبلغ اصلی اجباری است,
-Disbursed Amount cannot be greater than {0},مبلغ پرداختی نمی تواند بیشتر از {0} باشد,
-Row {0}: Loan Security {1} added multiple times,ردیف {0}: امنیت وام {1} چندین بار اضافه شده است,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,ردیف شماره {0}: مورد کودک نباید یک بسته محصول باشد. لطفاً مورد {1} را حذف کرده و ذخیره کنید,
Credit limit reached for customer {0},سقف اعتبار برای مشتری {0} رسیده است,
Could not auto create Customer due to the following missing mandatory field(s):,به دلیل وجود فیلد (های) اجباری زیر ، مشتری به طور خودکار ایجاد نمی شود:,
diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv
index b374fb1..b06e5df 100644
--- a/erpnext/translations/fi.csv
+++ b/erpnext/translations/fi.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Sovelletaan, jos yritys on SpA, SApA tai SRL",
Applicable if the company is a limited liability company,"Sovelletaan, jos yritys on osakeyhtiö",
Applicable if the company is an Individual or a Proprietorship,"Sovelletaan, jos yritys on yksityishenkilö tai omistaja",
-Applicant,hakija,
-Applicant Type,Hakijan tyyppi,
Application of Funds (Assets),sovellus varat (vastaavat),
Application period cannot be across two allocation records,Sovellusjakso ei voi olla kahden jakotiedon välissä,
Application period cannot be outside leave allocation period,Hakuaika ei voi ulkona loman jakokauteen,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,"Luettelo osakkeenomistajista, joilla on folionumerot",
Loading Payment System,Maksujärjestelmän lataaminen,
Loan,Lainata,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Lainamäärä voi ylittää suurin lainamäärä on {0},
-Loan Application,Lainahakemus,
-Loan Management,Lainanhallinta,
-Loan Repayment,Lainan takaisinmaksu,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Lainan alkamispäivä ja laina-aika ovat pakollisia laskun diskonttauksen tallentamiseksi,
Loans (Liabilities),lainat (vastattavat),
Loans and Advances (Assets),Lainat ja ennakot (vastaavat),
@@ -1611,7 +1605,6 @@
Monday,Maanantai,
Monthly,Kuukausi,
Monthly Distribution,toimitus kuukaudessa,
-Monthly Repayment Amount cannot be greater than Loan Amount,Kuukauden lyhennyksen määrä ei voi olla suurempi kuin Lainamäärä,
More,Lisää,
More Information,Lisätiedot,
More than one selection for {0} not allowed,Useampi kuin {0} valinta ei ole sallittu,
@@ -1884,11 +1877,9 @@
Pay {0} {1},Maksa {0} {1},
Payable,Maksettava,
Payable Account,Maksettava tili,
-Payable Amount,Maksettava määrä,
Payment,maksu,
Payment Cancelled. Please check your GoCardless Account for more details,Maksu peruutettiin. Tarkista GoCardless-tilisi tarkempia tietoja,
Payment Confirmation,Maksuvahvistus,
-Payment Date,Maksupäivä,
Payment Days,Maksupäivää,
Payment Document,Maksu asiakirja,
Payment Due Date,Maksun eräpäivä,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,Anna ostokuitti ensin,
Please enter Receipt Document,Anna kuitti asiakirja,
Please enter Reference date,Anna Viiteajankohta,
-Please enter Repayment Periods,Anna takaisinmaksuajat,
Please enter Reqd by Date,Anna Reqd päivämäärän mukaan,
Please enter Woocommerce Server URL,Anna Woocommerce-palvelimen URL-osoite,
Please enter Write Off Account,Syötä poistotili,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,Syötä pääkustannuspaikka,
Please enter quantity for Item {0},Kirjoita kpl määrä tuotteelle {0},
Please enter relieving date.,Syötä lievittää päivämäärä.,
-Please enter repayment Amount,Anna lyhennyksen määrä,
Please enter valid Financial Year Start and End Dates,Anna kelvollinen tilivuoden alkamis- ja päättymispäivä,
Please enter valid email address,Anna voimassa oleva sähköpostiosoite,
Please enter {0} first,Kirjoita {0} ensimmäisen,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,Hinnoittelusäännöt on suodatettu määrän mukaan,
Primary Address Details,Ensisijaiset osoitetiedot,
Primary Contact Details,Ensisijaiset yhteystiedot,
-Principal Amount,Lainapääoma,
Print Format,Tulostusmuoto,
Print IRS 1099 Forms,Tulosta IRS 1099 -lomakkeet,
Print Report Card,Tulosta raporttikortti,
@@ -2550,7 +2538,6 @@
Sample Collection,Näytteenottokokoelma,
Sample quantity {0} cannot be more than received quantity {1},Näytteen määrä {0} ei voi olla suurempi kuin vastaanotettu määrä {1},
Sanctioned,seuraamuksia,
-Sanctioned Amount,Hyväksyttävä määrä,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Hyväksyttävän määrä ei voi olla suurempi kuin korvauksen määrä rivillä {0}.,
Sand,Hiekka,
Saturday,Lauantai,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0}: llä on jo vanhempainmenettely {1}.,
API,API,
Annual,Vuotuinen,
-Approved,hyväksytty,
Change,muutos,
Contact Email,"yhteystiedot, sähköposti",
Export Type,Vientityyppi,
@@ -3571,7 +3557,6 @@
Account Value,Tilin arvo,
Account is mandatory to get payment entries,Tili on pakollinen maksumerkintöjen saamiseksi,
Account is not set for the dashboard chart {0},Tiliä ei ole asetettu kojetaulukartalle {0},
-Account {0} does not belong to company {1},tili {0} ei kuulu yritykselle {1},
Account {0} does not exists in the dashboard chart {1},Tiliä {0} ei ole kojetaulun kaaviossa {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,"Tili: <b>{0}</b> on pääoma Käynnissä oleva työ, jota ei voi päivittää päiväkirjakirjauksella",
Account: {0} is not permitted under Payment Entry,Tili: {0} ei ole sallittu maksamisen yhteydessä,
@@ -3582,7 +3567,6 @@
Activity,Aktiviteettiloki,
Add / Manage Email Accounts.,Lisää / hallitse sähköpostitilejä,
Add Child,lisää alasidos,
-Add Loan Security,Lisää lainaturva,
Add Multiple,Lisää useita,
Add Participants,Lisää osallistujia,
Add to Featured Item,Lisää suositeltavaan tuotteeseen,
@@ -3593,15 +3577,12 @@
Address Line 1,osoiterivi 1,
Addresses,osoitteet,
Admission End Date should be greater than Admission Start Date.,Sisäänpääsyn lopetuspäivän tulisi olla suurempi kuin sisäänpääsyn alkamispäivä.,
-Against Loan,Lainaa vastaan,
-Against Loan:,Lainaa vastaan:,
All,Kaikki,
All bank transactions have been created,Kaikki pankkitapahtumat on luotu,
All the depreciations has been booked,Kaikki poistot on kirjattu,
Allocation Expired!,Jako vanhentunut!,
Allow Resetting Service Level Agreement from Support Settings.,Salli palvelutasosopimuksen palauttaminen tukiasetuksista.,
Amount of {0} is required for Loan closure,Määrä {0} vaaditaan lainan lopettamiseen,
-Amount paid cannot be zero,Maksettu summa ei voi olla nolla,
Applied Coupon Code,Sovellettu kuponkikoodi,
Apply Coupon Code,Käytä kuponkikoodia,
Appointment Booking,Ajanvaraus,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,"Saapumisaikaa ei voida laskea, koska ohjaimen osoite puuttuu.",
Cannot Optimize Route as Driver Address is Missing.,"Reittiä ei voi optimoida, koska ajurin osoite puuttuu.",
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Tehtävää {0} ei voida suorittaa loppuun, koska sen riippuvainen tehtävä {1} ei ole suoritettu loppuun / peruutettu.",
-Cannot create loan until application is approved,Lainaa ei voi luoda ennen kuin hakemus on hyväksytty,
Cannot find a matching Item. Please select some other value for {0}.,Nimikettä ei löydy. Valitse jokin muu arvo {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings",Tuotteen {0} rivillä {1} ei voida ylilaskuttaa enemmän kuin {2}. Aseta korvaus Tilin asetukset -kohdassa salliaksesi ylilaskutuksen,
"Capacity Planning Error, planned start time can not be same as end time","Kapasiteetin suunnitteluvirhe, suunniteltu aloitusaika ei voi olla sama kuin lopetusaika",
@@ -3812,20 +3792,9 @@
Less Than Amount,Vähemmän kuin määrä,
Liabilities,Velat,
Loading...,Ladataan ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Lainan määrä ylittää enimmäislainan määrän {0} ehdotettuja arvopapereita kohden,
Loan Applications from customers and employees.,Asiakkaiden ja työntekijöiden lainahakemukset.,
-Loan Disbursement,Lainan maksaminen,
Loan Processes,Lainaprosessit,
-Loan Security,Lainan vakuus,
-Loan Security Pledge,Lainan vakuuslupaus,
-Loan Security Pledge Created : {0},Luototurva lupaus luotu: {0},
-Loan Security Price,Lainan vakuushinta,
-Loan Security Price overlapping with {0},Lainan vakuushinta päällekkäin {0} kanssa,
-Loan Security Unpledge,Lainan vakuudettomuus,
-Loan Security Value,Lainan vakuusarvo,
Loan Type for interest and penalty rates,Lainatyyppi korkoihin ja viivästyskorkoihin,
-Loan amount cannot be greater than {0},Lainasumma ei voi olla suurempi kuin {0},
-Loan is mandatory,Laina on pakollinen,
Loans,lainat,
Loans provided to customers and employees.,Asiakkaille ja työntekijöille annetut lainat.,
Location,Sijainti,
@@ -3894,7 +3863,6 @@
Pay,Maksaa,
Payment Document Type,Maksutodistuksen tyyppi,
Payment Name,Maksun nimi,
-Penalty Amount,Rangaistuksen määrä,
Pending,Odottaa,
Performance,Esitys,
Period based On,Kausi perustuu,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,Ole hyvä ja kirjaudu sisään Marketplace-käyttäjänä muokataksesi tätä tuotetta.,
Please login as a Marketplace User to report this item.,Ole hyvä ja kirjaudu sisään Marketplace-käyttäjäksi ilmoittaaksesi tästä tuotteesta.,
Please select <b>Template Type</b> to download template,Valitse <b>mallityyppi</b> ladataksesi mallin,
-Please select Applicant Type first,Valitse ensin hakijan tyyppi,
Please select Customer first,Valitse ensin asiakas,
Please select Item Code first,Valitse ensin tuotekoodi,
-Please select Loan Type for company {0},Valitse lainatyyppi yritykselle {0},
Please select a Delivery Note,Ole hyvä ja valitse lähetys,
Please select a Sales Person for item: {0},Valitse tuotteelle myyjä: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Valitse toinen maksutapa. Raita ei tue käteisrahaan '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},Aseta oletuspankkitili yritykselle {0},
Please specify,Ilmoitathan,
Please specify a {0},Määritä {0},lead
-Pledge Status,Pantin tila,
-Pledge Time,Pantti aika,
Printing,Tulostus,
Priority,prioriteetti,
Priority has been changed to {0}.,Prioriteetti on muutettu arvoksi {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,Käsitellään XML-tiedostoja,
Profitability,kannattavuus,
Project,Projekti,
-Proposed Pledges are mandatory for secured Loans,Ehdotetut lupaukset ovat pakollisia vakuudellisille lainoille,
Provide the academic year and set the starting and ending date.,Anna lukuvuosi ja aseta alkamis- ja päättymispäivä.,
Public token is missing for this bank,Tästä pankista puuttuu julkinen tunnus,
Publish,Julkaista,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"Ostosetelillä ei ole nimikettä, jolle säilytä näyte.",
Purchase Return,Osto Return,
Qty of Finished Goods Item,Määrä valmiita tavaroita,
-Qty or Amount is mandatroy for loan security,Määrä tai määrä on pakollinen lainan vakuudelle,
Quality Inspection required for Item {0} to submit,Tuotteen {0} lähettämistä varten vaaditaan laatutarkastus,
Quantity to Manufacture,Valmistusmäärä,
Quantity to Manufacture can not be zero for the operation {0},Valmistusmäärä ei voi olla nolla toiminnolle {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,Päivityspäivämäärän on oltava suurempi tai yhtä suuri kuin Liittymispäivä,
Rename,Nimeä uudelleen,
Rename Not Allowed,Nimeä uudelleen ei sallita,
-Repayment Method is mandatory for term loans,Takaisinmaksutapa on pakollinen lainoille,
-Repayment Start Date is mandatory for term loans,Takaisinmaksun alkamispäivä on pakollinen lainoille,
Report Item,Raportoi esine,
Report this Item,Ilmoita asiasta,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Varattu määrä alihankintana: Raaka-aineiden määrä alihankintana olevien tuotteiden valmistamiseksi.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},Rivi ({0}): {1} on jo alennettu hintaan {2},
Rows Added in {0},Rivit lisätty kohtaan {0},
Rows Removed in {0},Rivit poistettu {0},
-Sanctioned Amount limit crossed for {0} {1},{0} {1} ylitetty pakollinen rajoitus,
-Sanctioned Loan Amount already exists for {0} against company {1},Yritykselle {1} on jo olemassa sanktion lainan määrä yritykselle {0},
Save,Tallenna,
Save Item,Tallenna tuote,
Saved Items,Tallennetut kohteet,
@@ -4135,7 +4093,6 @@
User {0} is disabled,Käyttäjä {0} on poistettu käytöstä,
Users and Permissions,Käyttäjät ja käyttöoikeudet,
Vacancies cannot be lower than the current openings,Avoimet työpaikat eivät voi olla alhaisemmat kuin nykyiset aukot,
-Valid From Time must be lesser than Valid Upto Time.,Voimassa alkaen on oltava pienempi kuin voimassa oleva lisäaika.,
Valuation Rate required for Item {0} at row {1},Kohteen {0} rivillä {1} vaaditaan arvonkorotus,
Values Out Of Sync,Arvot ovat synkronoimattomia,
Vehicle Type is required if Mode of Transport is Road,"Ajoneuvotyyppi vaaditaan, jos kuljetusmuoto on tie",
@@ -4211,7 +4168,6 @@
Add to Cart,Lisää koriin,
Days Since Last Order,Päivät viimeisestä tilauksesta,
In Stock,Varastossa,
-Loan Amount is mandatory,Lainan määrä on pakollinen,
Mode Of Payment,Maksutapa,
No students Found,Ei opiskelijoita,
Not in Stock,Ei varastossa,
@@ -4240,7 +4196,6 @@
Group by,ryhmän,
In stock,Varastossa,
Item name,Nimikkeen nimi,
-Loan amount is mandatory,Lainan määrä on pakollinen,
Minimum Qty,Vähimmäismäärä,
More details,Lisätietoja,
Nature of Supplies,Tavaroiden luonne,
@@ -4409,9 +4364,6 @@
Total Completed Qty,Suoritettu kokonaismäärä,
Qty to Manufacture,Valmistettava yksikkömäärä,
Repay From Salary can be selected only for term loans,Palautus palkkasta voidaan valita vain määräaikaisille lainoille,
-No valid Loan Security Price found for {0},Kohteelle {0} ei löytynyt kelvollista lainan vakuushintaa,
-Loan Account and Payment Account cannot be same,Lainatili ja maksutili eivät voi olla samat,
-Loan Security Pledge can only be created for secured loans,Lainatakauslupa voidaan luoda vain vakuudellisille lainoille,
Social Media Campaigns,Sosiaalisen median kampanjat,
From Date can not be greater than To Date,Aloituspäivä ei voi olla suurempi kuin Päivämäärä,
Please set a Customer linked to the Patient,Määritä potilaan kanssa linkitetty asiakas,
@@ -6437,7 +6389,6 @@
HR User,HR käyttäjä,
Appointment Letter,Nimityskirje,
Job Applicant,Työnhakija,
-Applicant Name,hakijan nimi,
Appointment Date,Nimityspäivämäärä,
Appointment Letter Template,Nimityskirjemalli,
Body,ruumis,
@@ -7059,99 +7010,12 @@
Sync in Progress,Sync in Progress,
Hub Seller Name,Hub Myyjän nimi,
Custom Data,Mukautetut tiedot,
-Member,Jäsen,
-Partially Disbursed,osittain maksettu,
-Loan Closure Requested,Pyydetty lainan sulkeminen,
Repay From Salary,Maksaa maasta Palkka,
-Loan Details,Loan tiedot,
-Loan Type,laina Tyyppi,
-Loan Amount,Lainan määrä,
-Is Secured Loan,On vakuudellinen laina,
-Rate of Interest (%) / Year,Korkokanta (%) / vuosi,
-Disbursement Date,maksupäivä,
-Disbursed Amount,Maksettu määrä,
-Is Term Loan,On laina,
-Repayment Method,lyhennystapa,
-Repay Fixed Amount per Period,Repay kiinteä määrä Period,
-Repay Over Number of Periods,Repay Yli Kausien määrä,
-Repayment Period in Months,Takaisinmaksuaika kuukausina,
-Monthly Repayment Amount,Kuukauden lyhennyksen määrä,
-Repayment Start Date,Takaisinmaksun alkamispäivä,
-Loan Security Details,Lainan vakuustiedot,
-Maximum Loan Value,Lainan enimmäisarvo,
-Account Info,Tilitiedot,
-Loan Account,Laina-tili,
-Interest Income Account,Korkotuotot Account,
-Penalty Income Account,Rangaistustulotili,
-Repayment Schedule,maksuaikataulusta,
-Total Payable Amount,Yhteensä Maksettava määrä,
-Total Principal Paid,Pääoma yhteensä,
-Total Interest Payable,Koko Korkokulut,
-Total Amount Paid,Maksettu kokonaismäärä,
-Loan Manager,Lainanhoitaja,
-Loan Info,laina Info,
-Rate of Interest,Kiinnostuksen taso,
-Proposed Pledges,Ehdotetut lupaukset,
-Maximum Loan Amount,Suurin lainamäärä,
-Repayment Info,takaisinmaksu Info,
-Total Payable Interest,Yhteensä Maksettava korko,
-Against Loan ,Lainaa vastaan,
-Loan Interest Accrual,Lainakorkojen karttuminen,
-Amounts,määrät,
-Pending Principal Amount,Odottaa pääomaa,
-Payable Principal Amount,Maksettava pääoma,
-Paid Principal Amount,Maksettu päämäärä,
-Paid Interest Amount,Maksettu korko,
-Process Loan Interest Accrual,Prosessilainakorkojen karttuminen,
-Repayment Schedule Name,Takaisinmaksuaikataulun nimi,
Regular Payment,Säännöllinen maksu,
Loan Closure,Lainan sulkeminen,
-Payment Details,Maksutiedot,
-Interest Payable,Maksettava korko,
-Amount Paid,maksettu summa,
-Principal Amount Paid,Maksettu päämäärä,
-Repayment Details,Takaisinmaksun yksityiskohdat,
-Loan Repayment Detail,Lainan takaisinmaksutiedot,
-Loan Security Name,Lainan arvopaperi,
-Unit Of Measure,Mittayksikkö,
-Loan Security Code,Lainan turvakoodi,
-Loan Security Type,Lainan vakuustyyppi,
-Haircut %,Hiusten leikkaus,
-Loan Details,Lainan yksityiskohdat,
-Unpledged,Unpledged,
-Pledged,Pantatut,
-Partially Pledged,Osittain luvattu,
-Securities,arvopaperit,
-Total Security Value,Kokonaisarvoarvo,
-Loan Security Shortfall,Lainavakuus,
-Loan ,Lainata,
-Shortfall Time,Puute aika,
-America/New_York,America / New_York,
-Shortfall Amount,Vajeen määrä,
-Security Value ,Turva-arvo,
-Process Loan Security Shortfall,Prosessilainan turvavaje,
-Loan To Value Ratio,Lainan ja arvon suhde,
-Unpledge Time,Luopumisaika,
-Loan Name,laina Name,
Rate of Interest (%) Yearly,Korkokanta (%) Vuotuinen,
-Penalty Interest Rate (%) Per Day,Rangaistuskorko (%) päivässä,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,"Viivästyskorkoa peritään odotettavissa olevasta korkomäärästä päivittäin, jos takaisinmaksu viivästyy",
-Grace Period in Days,Arvonjakso päivinä,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,"Päivien määrä eräpäivästä, johon mennessä sakkoa ei veloiteta lainan takaisinmaksun viivästyessä",
-Pledge,pantti,
-Post Haircut Amount,Postitusleikkauksen määrä,
-Process Type,Prosessin tyyppi,
-Update Time,Päivitä aika,
-Proposed Pledge,Ehdotettu lupaus,
-Total Payment,Koko maksu,
-Balance Loan Amount,Balance Lainamäärä,
-Is Accrued,On kertynyt,
Salary Slip Loan,Palkkavelkakirjalaina,
Loan Repayment Entry,Lainan takaisinmaksu,
-Sanctioned Loan Amount,Seuraamuslainan määrä,
-Sanctioned Amount Limit,Sanktioitu rajoitus,
-Unpledge,Unpledge,
-Haircut,hiustyyli,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,muodosta aikataulu,
Schedules,Aikataulut,
@@ -7885,7 +7749,6 @@
Update Series,Päivitä sarjat,
Change the starting / current sequence number of an existing series.,muuta aloitusta / nykyselle järjestysnumerolle tai olemassa oleville sarjoille,
Prefix,Etuliite,
-Current Value,Nykyinen arvo,
This is the number of the last created transaction with this prefix,Viimeinen tapahtuma on tehty tällä numerolla ja tällä etuliitteellä,
Update Series Number,Päivitä sarjanumerot,
Quotation Lost Reason,"Tarjous hävitty, syy",
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Tuotekohtainen suositeltu täydennystilaustaso,
Lead Details,Liidin lisätiedot,
Lead Owner Efficiency,Lyijy Omistaja Tehokkuus,
-Loan Repayment and Closure,Lainan takaisinmaksu ja lopettaminen,
-Loan Security Status,Lainan turvataso,
Lost Opportunity,Kadonnut mahdollisuus,
Maintenance Schedules,huoltoaikataulut,
Material Requests for which Supplier Quotations are not created,Materiaalipyynnöt ilman toimituskykytiedustelua,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Kohdennetut määrät: {0},
Payment Account is mandatory,Maksutili on pakollinen,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Jos tämä on valittu, koko summa vähennetään verotettavasta tulosta ennen tuloveron laskemista ilman ilmoitusta tai todisteita.",
-Disbursement Details,Maksutiedot,
Material Request Warehouse,Materiaalipyyntövarasto,
Select warehouse for material requests,Valitse varasto materiaalipyyntöjä varten,
Transfer Materials For Warehouse {0},Siirrä materiaaleja varastoon {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,Palauta takaisin perimät palkat,
Deduction from salary,Vähennys palkasta,
Expired Leaves,Vanhentuneet lehdet,
-Reference No,Viitenumero,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Aliarvostusprosentti on prosenttiero Lainapaperin markkina-arvon ja kyseiselle Lainapaperille annetun arvon välillä käytettäessä kyseisen lainan vakuudeksi.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"Lainan ja arvon suhde ilmaisee lainan määrän suhde pantatun vakuuden arvoon. Lainan vakuusvajaus syntyy, jos se laskee alle lainan määritetyn arvon",
If this is not checked the loan by default will be considered as a Demand Loan,"Jos tätä ei ole valittu, laina katsotaan oletuksena kysyntälainaksi",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tätä tiliä käytetään lainan takaisinmaksun varaamiseen luotonsaajalta ja lainojen maksamiseen myös luotonottajalle,
This account is capital account which is used to allocate capital for loan disbursal account ,"Tämä tili on pääomatili, jota käytetään pääoman kohdistamiseen lainan maksamiseen",
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},Operaatio {0} ei kuulu työmääräykseen {1},
Print UOM after Quantity,Tulosta UOM määrän jälkeen,
Set default {0} account for perpetual inventory for non stock items,Aseta oletusarvoinen {0} tili ikuiselle mainosjakaumalle muille kuin varastossa oleville tuotteille,
-Loan Security {0} added multiple times,Lainan vakuus {0} lisätty useita kertoja,
-Loan Securities with different LTV ratio cannot be pledged against one loan,"Lainapapereita, joilla on erilainen LTV-suhde, ei voida pantata yhtä lainaa kohti",
-Qty or Amount is mandatory for loan security!,Määrä tai määrä on pakollinen lainan vakuudeksi!,
-Only submittted unpledge requests can be approved,Vain toimitetut vakuudettomat pyynnöt voidaan hyväksyä,
-Interest Amount or Principal Amount is mandatory,Korkosumma tai pääoma on pakollinen,
-Disbursed Amount cannot be greater than {0},Maksettu summa ei voi olla suurempi kuin {0},
-Row {0}: Loan Security {1} added multiple times,Rivi {0}: Lainan vakuus {1} lisätty useita kertoja,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Rivi # {0}: Alatuotteen ei pitäisi olla tuotepaketti. Poista kohde {1} ja tallenna,
Credit limit reached for customer {0},Luottoraja saavutettu asiakkaalle {0},
Could not auto create Customer due to the following missing mandatory field(s):,Asiakasta ei voitu luoda automaattisesti seuraavien pakollisten kenttien puuttuessa:,
diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv
index bede718..0f59345 100644
--- a/erpnext/translations/fr.csv
+++ b/erpnext/translations/fr.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","Applicable si la société est SpA, SApA ou SRL",
Applicable if the company is a limited liability company,Applicable si la société est une société à responsabilité limitée,
Applicable if the company is an Individual or a Proprietorship,Applicable si la société est un particulier ou une entreprise,
-Applicant,Candidat,
-Applicant Type,Type de demandeur,
Application of Funds (Assets),Emplois des Ressources (Actifs),
Application period cannot be across two allocation records,La période de demande ne peut pas être sur deux périodes d'allocations,
Application period cannot be outside leave allocation period,La période de la demande ne peut pas être hors de la période d'allocation de congé,
@@ -1470,10 +1468,6 @@
List of available Shareholders with folio numbers,Liste des actionnaires disponibles avec numéros de folio,
Loading Payment System,Chargement du système de paiement,
Loan,Prêt,
-Loan Amount cannot exceed Maximum Loan Amount of {0},Le montant du prêt ne peut pas dépasser le montant maximal du prêt de {0},
-Loan Application,Demande de prêt,
-Loan Management,Gestion des prêts,
-Loan Repayment,Remboursement de prêt,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,La date de début du prêt et la période du prêt sont obligatoires pour sauvegarder le décompte des factures.,
Loans (Liabilities),Prêts (Passif),
Loans and Advances (Assets),Prêts et avances (actif),
@@ -1610,7 +1604,6 @@
Monday,Lundi,
Monthly,Mensuel,
Monthly Distribution,Répartition Mensuelle,
-Monthly Repayment Amount cannot be greater than Loan Amount,Montant du Remboursement Mensuel ne peut pas être supérieur au Montant du Prêt,
More,Plus,
More Information,Informations Complémentaires,
More than one selection for {0} not allowed,Plus d'une sélection pour {0} non autorisée,
@@ -1883,11 +1876,9 @@
Pay {0} {1},Payer {0} {1},
Payable,Créditeur,
Payable Account,Comptes Créditeurs,
-Payable Amount,Montant payable,
Payment,Paiement,
Payment Cancelled. Please check your GoCardless Account for more details,Paiement annulé. Veuillez vérifier votre compte GoCardless pour plus de détails,
Payment Confirmation,Confirmation de paiement,
-Payment Date,Date de paiement,
Payment Days,Jours de paiement,
Payment Document,Document de paiement,
Payment Due Date,Date d'Échéance de Paiement,
@@ -1981,7 +1972,6 @@
Please enter Purchase Receipt first,Veuillez d’abord entrer un Reçu d'Achat,
Please enter Receipt Document,Veuillez entrer le Document de Réception,
Please enter Reference date,Veuillez entrer la date de Référence,
-Please enter Repayment Periods,Veuillez entrer les Périodes de Remboursement,
Please enter Reqd by Date,Veuillez entrer Reqd par date,
Please enter Woocommerce Server URL,Veuillez entrer l'URL du serveur Woocommerce,
Please enter Write Off Account,Veuillez entrer un Compte de Reprise,
@@ -1993,7 +1983,6 @@
Please enter parent cost center,Veuillez entrer le centre de coût parent,
Please enter quantity for Item {0},Veuillez entrer une quantité pour l'article {0},
Please enter relieving date.,Veuillez entrer la date de relève.,
-Please enter repayment Amount,Veuillez entrer le Montant de remboursement,
Please enter valid Financial Year Start and End Dates,Veuillez entrer des Dates de Début et de Fin d’Exercice Comptable valides,
Please enter valid email address,Entrez une adresse email valide,
Please enter {0} first,Veuillez d’abord entrer {0},
@@ -2159,7 +2148,6 @@
Pricing Rules are further filtered based on quantity.,Les Règles de Tarification sont d'avantage filtrés en fonction de la quantité.,
Primary Address Details,Détails de l'adresse principale,
Primary Contact Details,Détails du contact principal,
-Principal Amount,Montant Principal,
Print Format,Format d'Impression,
Print IRS 1099 Forms,Imprimer les formulaires IRS 1099,
Print Report Card,Imprimer le rapport,
@@ -2549,7 +2537,6 @@
Sample Collection,Collecte d'Échantillons,
Sample quantity {0} cannot be more than received quantity {1},La quantité d'échantillon {0} ne peut pas dépasser la quantité reçue {1},
Sanctioned,Sanctionné,
-Sanctioned Amount,Montant Approuvé,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Le Montant Approuvé ne peut pas être supérieur au Montant Réclamé à la ligne {0}.,
Sand,Le sable,
Saturday,Samedi,
@@ -2887,7 +2874,7 @@
Supplies made to Unregistered Persons,Fournitures faites à des personnes non inscrites,
Suppliies made to Composition Taxable Persons,Suppleies à des personnes assujetties à la composition,
Supply Type,Type d'approvisionnement,
-Support,"Assistance/Support",
+Support,Assistance/Support,
Support Analytics,Analyse de l'assistance,
Support Settings,Paramètres du module Assistance,
Support Tickets,Ticket d'assistance,
@@ -3540,7 +3527,6 @@
{0} already has a Parent Procedure {1}.,{0} a déjà une procédure parent {1}.,
API,API,
Annual,Annuel,
-Approved,Approuvé,
Change,Changement,
Contact Email,Email du Contact,
Export Type,Type d'Exportation,
@@ -3570,7 +3556,6 @@
Account Value,Valeur du compte,
Account is mandatory to get payment entries,Le compte est obligatoire pour obtenir les entrées de paiement,
Account is not set for the dashboard chart {0},Le compte n'est pas défini pour le graphique du tableau de bord {0},
-Account {0} does not belong to company {1},Compte {0} n'appartient pas à la société {1},
Account {0} does not exists in the dashboard chart {1},Le compte {0} n'existe pas dans le graphique du tableau de bord {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,Compte: <b>{0}</b> est un travail capital et ne peut pas être mis à jour par une écriture au journal.,
Account: {0} is not permitted under Payment Entry,Compte: {0} n'est pas autorisé sous Saisie du paiement.,
@@ -3581,7 +3566,6 @@
Activity,Activité,
Add / Manage Email Accounts.,Ajouter / Gérer les Comptes de Messagerie.,
Add Child,Ajouter une Sous-Catégorie,
-Add Loan Security,Ajouter une garantie de prêt,
Add Multiple,Ajout Multiple,
Add Participants,Ajouter des participants,
Add to Featured Item,Ajouter à l'article en vedette,
@@ -3592,15 +3576,12 @@
Address Line 1,Adresse Ligne 1,
Addresses,Adresses,
Admission End Date should be greater than Admission Start Date.,La date de fin d'admission doit être supérieure à la date de début d'admission.,
-Against Loan,Contre le prêt,
-Against Loan:,Contre le prêt:,
All,Tout,
All bank transactions have been created,Toutes les transactions bancaires ont été créées,
All the depreciations has been booked,Toutes les amortissements ont été comptabilisés,
Allocation Expired!,Allocation expirée!,
Allow Resetting Service Level Agreement from Support Settings.,Autoriser la réinitialisation du contrat de niveau de service à partir des paramètres de support.,
Amount of {0} is required for Loan closure,Un montant de {0} est requis pour la clôture du prêt,
-Amount paid cannot be zero,Le montant payé ne peut pas être nul,
Applied Coupon Code,Code de coupon appliqué,
Apply Coupon Code,Appliquer le code de coupon,
Appointment Booking,Prise de rendez-vous,
@@ -3648,7 +3629,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,Impossible de calculer l'heure d'arrivée car l'adresse du conducteur est manquante.,
Cannot Optimize Route as Driver Address is Missing.,Impossible d'optimiser l'itinéraire car l'adresse du pilote est manquante.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,Impossible de terminer la tâche {0} car sa tâche dépendante {1} n'est pas terminée / annulée.,
-Cannot create loan until application is approved,Impossible de créer un prêt tant que la demande n'est pas approuvée,
Cannot find a matching Item. Please select some other value for {0}.,Impossible de trouver un article similaire. Veuillez sélectionner une autre valeur pour {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","La surfacturation pour le poste {0} dans la ligne {1} ne peut pas dépasser {2}. Pour autoriser la surfacturation, définissez la provision dans les paramètres du compte.",
"Capacity Planning Error, planned start time can not be same as end time","Erreur de planification de capacité, l'heure de début prévue ne peut pas être identique à l'heure de fin",
@@ -3811,20 +3791,9 @@
Less Than Amount,Moins que le montant,
Liabilities,Passifs,
Loading...,Chargement en Cours ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,Le montant du prêt dépasse le montant maximal du prêt de {0} selon les titres proposés,
Loan Applications from customers and employees.,Demandes de prêt des clients et des employés.,
-Loan Disbursement,Déboursement de l'emprunt,
Loan Processes,Processus de prêt,
-Loan Security,Sécurité des prêts,
-Loan Security Pledge,Garantie de prêt,
-Loan Security Pledge Created : {0},Engagement de garantie de prêt créé: {0},
-Loan Security Price,Prix de la sécurité du prêt,
-Loan Security Price overlapping with {0},Le prix du titre de crédit se chevauche avec {0},
-Loan Security Unpledge,Désengagement de garantie de prêt,
-Loan Security Value,Valeur de la sécurité du prêt,
Loan Type for interest and penalty rates,Type de prêt pour les taux d'intérêt et de pénalité,
-Loan amount cannot be greater than {0},Le montant du prêt ne peut pas être supérieur à {0},
-Loan is mandatory,Le prêt est obligatoire,
Loans,Les prêts,
Loans provided to customers and employees.,Prêts accordés aux clients et aux employés.,
Location,Lieu,
@@ -3893,7 +3862,6 @@
Pay,Payer,
Payment Document Type,Type de document de paiement,
Payment Name,Nom du paiement,
-Penalty Amount,Montant de la pénalité,
Pending,En Attente,
Performance,Performance,
Period based On,Période basée sur,
@@ -3915,10 +3883,8 @@
Please login as a Marketplace User to edit this item.,Veuillez vous connecter en tant qu'utilisateur Marketplace pour modifier cet article.,
Please login as a Marketplace User to report this item.,Veuillez vous connecter en tant qu'utilisateur de la Marketplace pour signaler cet élément.,
Please select <b>Template Type</b> to download template,Veuillez sélectionner le <b>type</b> de modèle pour télécharger le modèle,
-Please select Applicant Type first,Veuillez d'abord sélectionner le type de demandeur,
Please select Customer first,S'il vous plaît sélectionnez d'abord le client,
Please select Item Code first,Veuillez d'abord sélectionner le code d'article,
-Please select Loan Type for company {0},Veuillez sélectionner le type de prêt pour la société {0},
Please select a Delivery Note,Veuillez sélectionner un bon de livraison,
Please select a Sales Person for item: {0},Veuillez sélectionner un commercial pour l'article: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',Veuillez sélectionner une autre méthode de paiement. Stripe ne prend pas en charge les transactions en devise '{0}',
@@ -3934,8 +3900,6 @@
Please setup a default bank account for company {0},Veuillez configurer un compte bancaire par défaut pour la société {0}.,
Please specify,Veuillez spécifier,
Please specify a {0},Veuillez spécifier un {0},lead
-Pledge Status,Statut de mise en gage,
-Pledge Time,Pledge Time,
Printing,Impression,
Priority,Priorité,
Priority has been changed to {0}.,La priorité a été changée en {0}.,
@@ -3943,7 +3907,6 @@
Processing XML Files,Traitement des fichiers XML,
Profitability,Rentabilité,
Project,Projet,
-Proposed Pledges are mandatory for secured Loans,Les engagements proposés sont obligatoires pour les prêts garantis,
Provide the academic year and set the starting and ending date.,Indiquez l'année universitaire et définissez la date de début et de fin.,
Public token is missing for this bank,Un jeton public est manquant pour cette banque,
Publish,Publier,
@@ -3959,7 +3922,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,Le reçu d’achat ne contient aucun élément pour lequel Conserver échantillon est activé.,
Purchase Return,Retour d'Achat,
Qty of Finished Goods Item,Quantité de produits finis,
-Qty or Amount is mandatroy for loan security,La quantité ou le montant est obligatoire pour la garantie de prêt,
Quality Inspection required for Item {0} to submit,Inspection de qualité requise pour que l'élément {0} soit envoyé,
Quantity to Manufacture,Quantité à fabriquer,
Quantity to Manufacture can not be zero for the operation {0},La quantité à fabriquer ne peut pas être nulle pour l'opération {0},
@@ -3980,8 +3942,6 @@
Relieving Date must be greater than or equal to Date of Joining,La date de libération doit être supérieure ou égale à la date d'adhésion,
Rename,Renommer,
Rename Not Allowed,Renommer non autorisé,
-Repayment Method is mandatory for term loans,La méthode de remboursement est obligatoire pour les prêts à terme,
-Repayment Start Date is mandatory for term loans,La date de début de remboursement est obligatoire pour les prêts à terme,
Report Item,Élément de rapport,
Report this Item,Signaler cet article,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Quantité réservée pour la sous-traitance: quantité de matières premières pour fabriquer des articles sous-traités.,
@@ -4014,8 +3974,6 @@
Row({0}): {1} is already discounted in {2},Ligne ({0}): {1} est déjà réduit dans {2}.,
Rows Added in {0},Lignes ajoutées dans {0},
Rows Removed in {0},Lignes supprimées dans {0},
-Sanctioned Amount limit crossed for {0} {1},Montant sanctionné dépassé pour {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},Le montant du prêt sanctionné existe déjà pour {0} contre l'entreprise {1},
Save,sauvegarder,
Save Item,Enregistrer l'élément,
Saved Items,Articles sauvegardés,
@@ -4134,7 +4092,6 @@
User {0} is disabled,Utilisateur {0} est désactivé,
Users and Permissions,Utilisateurs et Autorisations,
Vacancies cannot be lower than the current openings,Les postes vacants ne peuvent pas être inférieurs aux ouvertures actuelles,
-Valid From Time must be lesser than Valid Upto Time.,La période de validité doit être inférieure à la durée de validité.,
Valuation Rate required for Item {0} at row {1},Taux de valorisation requis pour le poste {0} à la ligne {1},
Values Out Of Sync,Valeurs désynchronisées,
Vehicle Type is required if Mode of Transport is Road,Le type de véhicule est requis si le mode de transport est la route,
@@ -4210,7 +4167,6 @@
Add to Cart,Ajouter au Panier,
Days Since Last Order,Jours depuis la dernière commande,
In Stock,En stock,
-Loan Amount is mandatory,Le montant du prêt est obligatoire,
Mode Of Payment,Mode de Paiement,
No students Found,Aucun étudiant trouvé,
Not in Stock,En Rupture de Stock,
@@ -4239,7 +4195,6 @@
Group by,Grouper Par,
In stock,En stock,
Item name,Libellé de l'article,
-Loan amount is mandatory,Le montant du prêt est obligatoire,
Minimum Qty,Quantité minimum,
More details,Plus de détails,
Nature of Supplies,Nature des fournitures,
@@ -4408,9 +4363,6 @@
Total Completed Qty,Total terminé Quantité,
Qty to Manufacture,Quantité À Produire,
Repay From Salary can be selected only for term loans,Le remboursement à partir du salaire ne peut être sélectionné que pour les prêts à terme,
-No valid Loan Security Price found for {0},Aucun prix de garantie de prêt valide trouvé pour {0},
-Loan Account and Payment Account cannot be same,Le compte de prêt et le compte de paiement ne peuvent pas être identiques,
-Loan Security Pledge can only be created for secured loans,Le gage de garantie de prêt ne peut être créé que pour les prêts garantis,
Social Media Campaigns,Campagnes sur les réseaux sociaux,
From Date can not be greater than To Date,La date de début ne peut pas être supérieure à la date,
Please set a Customer linked to the Patient,Veuillez définir un client lié au patient,
@@ -6437,7 +6389,6 @@
HR User,Chargé RH,
Appointment Letter,Lettre de nomination,
Job Applicant,Demandeur d'Emploi,
-Applicant Name,Nom du Candidat,
Appointment Date,Date de rendez-vous,
Appointment Letter Template,Modèle de lettre de nomination,
Body,Corps,
@@ -7059,99 +7010,12 @@
Sync in Progress,Synchronisation en cours,
Hub Seller Name,Nom du vendeur,
Custom Data,Données personnalisées,
-Member,Membre,
-Partially Disbursed,Partiellement Décaissé,
-Loan Closure Requested,Clôture du prêt demandée,
Repay From Salary,Rembourser avec le Salaire,
-Loan Details,Détails du Prêt,
-Loan Type,Type de Prêt,
-Loan Amount,Montant du Prêt,
-Is Secured Loan,Est un prêt garanti,
-Rate of Interest (%) / Year,Taux d'Intérêt (%) / Année,
-Disbursement Date,Date de Décaissement,
-Disbursed Amount,Montant décaissé,
-Is Term Loan,Est un prêt à terme,
-Repayment Method,Méthode de Remboursement,
-Repay Fixed Amount per Period,Rembourser un Montant Fixe par Période,
-Repay Over Number of Periods,Rembourser Sur le Nombre de Périodes,
-Repayment Period in Months,Période de Remboursement en Mois,
-Monthly Repayment Amount,Montant du Remboursement Mensuel,
-Repayment Start Date,Date de début du remboursement,
-Loan Security Details,Détails de la sécurité du prêt,
-Maximum Loan Value,Valeur maximale du prêt,
-Account Info,Information du Compte,
-Loan Account,Compte de prêt,
-Interest Income Account,Compte d'Intérêts Créditeurs,
-Penalty Income Account,Compte de revenu de pénalité,
-Repayment Schedule,Échéancier de Remboursement,
-Total Payable Amount,Montant Total Créditeur,
-Total Principal Paid,Total du capital payé,
-Total Interest Payable,Total des Intérêts à Payer,
-Total Amount Paid,Montant total payé,
-Loan Manager,Gestionnaire de prêts,
-Loan Info,Infos sur le Prêt,
-Rate of Interest,Taux d'Intérêt,
-Proposed Pledges,Engagements proposés,
-Maximum Loan Amount,Montant Max du Prêt,
-Repayment Info,Infos de Remboursement,
-Total Payable Interest,Total des Intérêts Créditeurs,
-Against Loan ,Contre prêt,
-Loan Interest Accrual,Accumulation des intérêts sur les prêts,
-Amounts,Les montants,
-Pending Principal Amount,Montant du capital en attente,
-Payable Principal Amount,Montant du capital payable,
-Paid Principal Amount,Montant du capital payé,
-Paid Interest Amount,Montant des intérêts payés,
-Process Loan Interest Accrual,Traitement des intérêts courus sur les prêts,
-Repayment Schedule Name,Nom du calendrier de remboursement,
Regular Payment,Paiement régulier,
Loan Closure,Clôture du prêt,
-Payment Details,Détails de paiement,
-Interest Payable,Intérêts payables,
-Amount Paid,Montant Payé,
-Principal Amount Paid,Montant du capital payé,
-Repayment Details,Détails du remboursement,
-Loan Repayment Detail,Détail du remboursement du prêt,
-Loan Security Name,Nom de la sécurité du prêt,
-Unit Of Measure,Unité de mesure,
-Loan Security Code,Code de sécurité du prêt,
-Loan Security Type,Type de garantie de prêt,
-Haircut %,La Coupe de cheveux %,
-Loan Details,Détails du prêt,
-Unpledged,Non promis,
-Pledged,Promis,
-Partially Pledged,Partiellement promis,
-Securities,Titres,
-Total Security Value,Valeur de sécurité totale,
-Loan Security Shortfall,Insuffisance de la sécurité des prêts,
-Loan ,Prêt,
-Shortfall Time,Temps de déficit,
-America/New_York,Amérique / New_York,
-Shortfall Amount,Montant du déficit,
-Security Value ,Valeur de sécurité,
-Process Loan Security Shortfall,Insuffisance de la sécurité des prêts de processus,
-Loan To Value Ratio,Ratio prêt / valeur,
-Unpledge Time,Désengager le temps,
-Loan Name,Nom du Prêt,
Rate of Interest (%) Yearly,Taux d'Intérêt (%) Annuel,
-Penalty Interest Rate (%) Per Day,Taux d'intérêt de pénalité (%) par jour,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Le taux d'intérêt de pénalité est prélevé quotidiennement sur le montant des intérêts en attente en cas de retard de remboursement,
-Grace Period in Days,Délai de grâce en jours,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Nombre de jours à compter de la date d'échéance jusqu'à laquelle la pénalité ne sera pas facturée en cas de retard dans le remboursement du prêt,
-Pledge,Gage,
-Post Haircut Amount,Montant de la coupe de cheveux,
-Process Type,Type de processus,
-Update Time,Temps de mise à jour,
-Proposed Pledge,Engagement proposé,
-Total Payment,Paiement Total,
-Balance Loan Amount,Solde du Montant du Prêt,
-Is Accrued,Est accumulé,
Salary Slip Loan,Avance sur salaire,
Loan Repayment Entry,Entrée de remboursement de prêt,
-Sanctioned Loan Amount,Montant du prêt sanctionné,
-Sanctioned Amount Limit,Limite de montant sanctionnée,
-Unpledge,Désengager,
-Haircut,la Coupe de cheveux,
MAT-MSH-.YYYY.-,MAT-MSH-YYYY.-,
Generate Schedule,Créer un Échéancier,
Schedules,Horaires,
@@ -7885,7 +7749,6 @@
Update Series,Mettre à Jour les Séries,
Change the starting / current sequence number of an existing series.,Changer le numéro initial/actuel d'une série existante.,
Prefix,Préfixe,
-Current Value,Valeur actuelle,
This is the number of the last created transaction with this prefix,Numéro de la dernière transaction créée avec ce préfixe,
Update Series Number,Mettre à Jour la Série,
Quotation Lost Reason,Raison de la Perte du Devis,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Renouvellement Recommandé par Article,
Lead Details,Détails du Lead,
Lead Owner Efficiency,Efficacité des Responsables des Leads,
-Loan Repayment and Closure,Remboursement et clôture de prêts,
-Loan Security Status,État de la sécurité du prêt,
Lost Opportunity,Occasion perdue,
Maintenance Schedules,Échéanciers d'Entretien,
Material Requests for which Supplier Quotations are not created,Demandes de Matériel dont les Devis Fournisseur ne sont pas créés,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},Nombre ciblé: {0},
Payment Account is mandatory,Le compte de paiement est obligatoire,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Si coché, le montant total sera déduit du revenu imposable avant le calcul de l'impôt sur le revenu sans aucune déclaration ou soumission de preuve.",
-Disbursement Details,Détails des décaissements,
Material Request Warehouse,Entrepôt de demande de matériel,
Select warehouse for material requests,Sélectionnez l'entrepôt pour les demandes de matériel,
Transfer Materials For Warehouse {0},Transférer des matériaux pour l'entrepôt {0},
@@ -8992,9 +8852,6 @@
Repay unclaimed amount from salary,Rembourser le montant non réclamé sur le salaire,
Deduction from salary,Déduction du salaire,
Expired Leaves,Feuilles expirées,
-Reference No,Numéro de référence,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,Le pourcentage de coupe de cheveux est la différence en pourcentage entre la valeur marchande de la garantie de prêt et la valeur attribuée à cette garantie de prêt lorsqu'elle est utilisée comme garantie pour ce prêt.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,Le ratio prêt / valeur exprime le rapport entre le montant du prêt et la valeur de la garantie mise en gage. Un déficit de garantie de prêt sera déclenché si celui-ci tombe en dessous de la valeur spécifiée pour un prêt,
If this is not checked the loan by default will be considered as a Demand Loan,"Si cette case n'est pas cochée, le prêt par défaut sera considéré comme un prêt à vue",
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ce compte est utilisé pour enregistrer les remboursements de prêts de l'emprunteur et également pour décaisser les prêts à l'emprunteur,
This account is capital account which is used to allocate capital for loan disbursal account ,Ce compte est un compte de capital qui est utilisé pour allouer du capital au compte de décaissement du prêt,
@@ -9458,13 +9315,6 @@
Operation {0} does not belong to the work order {1},L'opération {0} ne fait pas partie de l'ordre de fabrication {1},
Print UOM after Quantity,Imprimer UdM après la quantité,
Set default {0} account for perpetual inventory for non stock items,Définir le compte {0} par défaut pour l'inventaire permanent pour les articles hors stock,
-Loan Security {0} added multiple times,Garantie de prêt {0} ajoutée plusieurs fois,
-Loan Securities with different LTV ratio cannot be pledged against one loan,Les titres de prêt avec un ratio LTV différent ne peuvent pas être mis en gage contre un prêt,
-Qty or Amount is mandatory for loan security!,La quantité ou le montant est obligatoire pour la garantie de prêt!,
-Only submittted unpledge requests can be approved,Seules les demandes de non-engagement soumises peuvent être approuvées,
-Interest Amount or Principal Amount is mandatory,Le montant des intérêts ou le capital est obligatoire,
-Disbursed Amount cannot be greater than {0},Le montant décaissé ne peut pas être supérieur à {0},
-Row {0}: Loan Security {1} added multiple times,Ligne {0}: Garantie de prêt {1} ajoutée plusieurs fois,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Ligne n ° {0}: l'élément enfant ne doit pas être un ensemble de produits. Veuillez supprimer l'élément {1} et enregistrer,
Credit limit reached for customer {0},Limite de crédit atteinte pour le client {0},
Could not auto create Customer due to the following missing mandatory field(s):,Impossible de créer automatiquement le client en raison du ou des champs obligatoires manquants suivants:,
@@ -9857,7 +9707,7 @@
No stock transactions can be created or modified before this date.,Aucune transaction ne peux être créée ou modifié avant cette date.
Stock transactions that are older than the mentioned days cannot be modified.,Les transactions de stock plus ancienne que le nombre de jours ci-dessus ne peuvent être modifiées,
Role Allowed to Create/Edit Back-dated Transactions,Rôle autorisé à créer et modifier des transactions anti-datée,
-"If mentioned, the system will allow only the users with this Role to create or modify any stock transaction earlier than the latest stock transaction for a specific item and warehouse. If set as blank, it allows all users to create/edit back-dated transactions.","Les utilisateur de ce role pourront creer et modifier des transactions dans le passé. Si vide tout les utilisateurs pourrons le faire"
+"If mentioned, the system will allow only the users with this Role to create or modify any stock transaction earlier than the latest stock transaction for a specific item and warehouse. If set as blank, it allows all users to create/edit back-dated transactions.",Les utilisateur de ce role pourront creer et modifier des transactions dans le passé. Si vide tout les utilisateurs pourrons le faire
Auto Insert Item Price If Missing,Création du prix de l'article dans les listes de prix si abscent,
Update Existing Price List Rate,Mise a jour automatique du prix dans les listes de prix,
Show Barcode Field in Stock Transactions,Afficher le champ Code Barre dans les transactions de stock,
diff --git a/erpnext/translations/gu.csv b/erpnext/translations/gu.csv
index 439b782..f229e3b 100644
--- a/erpnext/translations/gu.csv
+++ b/erpnext/translations/gu.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","જો કંપની એસપીએ, એસપીએ અથવા એસઆરએલ હોય તો લાગુ પડે છે",
Applicable if the company is a limited liability company,જો કંપની મર્યાદિત જવાબદારીવાળી કંપની હોય તો લાગુ,
Applicable if the company is an Individual or a Proprietorship,જો કંપની વ્યક્તિગત અથવા માલિકીની કંપની હોય તો તે લાગુ પડે છે,
-Applicant,અરજદાર,
-Applicant Type,અરજદારનો પ્રકાર,
Application of Funds (Assets),ફંડ (અસ્ક્યામત) અરજી,
Application period cannot be across two allocation records,એપ્લિકેશન સમયગાળો બે ફાળવણી રેકોર્ડ્સમાં ન હોઈ શકે,
Application period cannot be outside leave allocation period,એપ્લિકેશન સમયગાળાની બહાર રજા ફાળવણી સમય ન હોઈ શકે,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,ફોલિયો નંબરો ધરાવતા ઉપલબ્ધ શેરધારકોની સૂચિ,
Loading Payment System,ચુકવણી સિસ્ટમ લોડ કરી રહ્યું છે,
Loan,લોન,
-Loan Amount cannot exceed Maximum Loan Amount of {0},લોન રકમ મહત્તમ લોન રકમ કરતાં વધી શકે છે {0},
-Loan Application,લોન અરજી,
-Loan Management,લોન મેનેજમેન્ટ,
-Loan Repayment,લોન ચુકવણી,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,ઇન્વoiceઇસ ડિસ્કાઉન્ટિંગને બચાવવા માટે લોન પ્રારંભ તારીખ અને લોનનો સમયગાળો ફરજિયાત છે,
Loans (Liabilities),લોન્સ (જવાબદારીઓ),
Loans and Advances (Assets),લોન અને એડવાન્સિસ (અસ્ક્યામત),
@@ -1611,7 +1605,6 @@
Monday,સોમવારે,
Monthly,માસિક,
Monthly Distribution,માસિક વિતરણ,
-Monthly Repayment Amount cannot be greater than Loan Amount,માસિક ચુકવણી રકમ લોન રકમ કરતાં વધારે ન હોઈ શકે,
More,વધુ,
More Information,વધુ મહિતી,
More than one selection for {0} not allowed,{0} માટે એક કરતા વધુ પસંદગીની મંજૂરી નથી,
@@ -1884,11 +1877,9 @@
Pay {0} {1},{0} {1} પે,
Payable,ચૂકવવાપાત્ર,
Payable Account,ચૂકવવાપાત્ર એકાઉન્ટ,
-Payable Amount,ચૂકવવાપાત્ર રકમ,
Payment,ચુકવણી,
Payment Cancelled. Please check your GoCardless Account for more details,ચૂકવણી રદ કરી વધુ વિગતો માટે કૃપા કરીને તમારા GoCardless એકાઉન્ટને તપાસો,
Payment Confirmation,ચુકવણી પુષ્ટિકરણ,
-Payment Date,ચુકવણીની તારીખ,
Payment Days,ચુકવણી દિવસ,
Payment Document,ચુકવણી દસ્તાવેજ,
Payment Due Date,ચુકવણી કારણે તારીખ,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,પ્રથમ ખરીદી રસીદ દાખલ કરો,
Please enter Receipt Document,રસીદ દસ્તાવેજ દાખલ કરો,
Please enter Reference date,સંદર્ભ તારીખ દાખલ કરો,
-Please enter Repayment Periods,ચુકવણી કાળ દાખલ કરો,
Please enter Reqd by Date,તારીખ દ્વારા Reqd દાખલ કરો,
Please enter Woocommerce Server URL,Woocommerce સર્વર URL દાખલ કરો,
Please enter Write Off Account,એકાઉન્ટ માંડવાળ દાખલ કરો,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,પિતૃ ખર્ચ કેન્દ્રને દાખલ કરો,
Please enter quantity for Item {0},વસ્તુ માટે જથ્થો દાખલ કરો {0},
Please enter relieving date.,તારીખ રાહત દાખલ કરો.,
-Please enter repayment Amount,ચુકવણી રકમ દાખલ કરો,
Please enter valid Financial Year Start and End Dates,માન્ય નાણાકીય વર્ષ શરૂઆત અને અંતિમ તારીખ દાખલ કરો,
Please enter valid email address,કૃપા કરીને માન્ય ઇમેઇલ સરનામું દાખલ,
Please enter {0} first,પ્રથમ {0} દાખલ કરો,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,પ્રાઇસીંગ નિયમો વધુ જથ્થો પર આધારિત ફિલ્ટર કરવામાં આવે છે.,
Primary Address Details,પ્રાથમિક સરનામું વિગતો,
Primary Contact Details,પ્રાથમિક સંપર્ક વિગતો,
-Principal Amount,મુખ્ય રકમ,
Print Format,પ્રિન્ટ ફોર્મેટ,
Print IRS 1099 Forms,આઈઆરએસ 1099 ફોર્મ છાપો,
Print Report Card,રિપોર્ટ કાર્ડ છાપો,
@@ -2550,7 +2538,6 @@
Sample Collection,નમૂનાનો સંગ્રહ,
Sample quantity {0} cannot be more than received quantity {1},નમૂના જથ્થો {0} પ્રાપ્ત જથ્થા કરતા વધુ હોઈ શકતી નથી {1},
Sanctioned,મંજૂર,
-Sanctioned Amount,મંજુર રકમ,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,મંજુર રકમ રો દાવો રકમ કરતાં વધારે ન હોઈ શકે {0}.,
Sand,રેતી,
Saturday,શનિવારે,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} પાસે પહેલેથી જ પિતૃ કાર્યવાહી છે {1}.,
API,API,
Annual,વાર્ષિક,
-Approved,મંજૂર,
Change,બદલો,
Contact Email,સંપર્ક ઇમેઇલ,
Export Type,નિકાસ પ્રકાર,
@@ -3571,7 +3557,6 @@
Account Value,ખાતાનું મૂલ્ય,
Account is mandatory to get payment entries,ચુકવણી પ્રવેશો મેળવવા માટે એકાઉન્ટ ફરજિયાત છે,
Account is not set for the dashboard chart {0},ડેશબોર્ડ ચાર્ટ Account 0 for માટે એકાઉન્ટ સેટ નથી,
-Account {0} does not belong to company {1},એકાઉન્ટ {0} કંપની ને અનુલક્ષતું નથી {1},
Account {0} does not exists in the dashboard chart {1},એકાઉન્ટ {0 the ડેશબોર્ડ ચાર્ટ exists 1} માં અસ્તિત્વમાં નથી,
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,એકાઉન્ટ: <b>{0</b> એ મૂડીનું કાર્ય પ્રગતિમાં છે અને જર્નલ એન્ટ્રી દ્વારા અપડેટ કરી શકાતું નથી,
Account: {0} is not permitted under Payment Entry,એકાઉન્ટ: ment 0 ની ચુકવણી એન્ટ્રી હેઠળ મંજૂરી નથી,
@@ -3582,7 +3567,6 @@
Activity,પ્રવૃત્તિ,
Add / Manage Email Accounts.,ઇમેઇલ એકાઉન્ટ્સ મેનેજ / ઉમેરો.,
Add Child,બાળ ઉમેરો,
-Add Loan Security,લોન સુરક્ષા ઉમેરો,
Add Multiple,મલ્ટીપલ ઉમેરો,
Add Participants,સહભાગીઓ ઉમેરો,
Add to Featured Item,ફીચર્ડ આઇટમમાં ઉમેરો,
@@ -3593,15 +3577,12 @@
Address Line 1,સરનામાં રેખા 1,
Addresses,સરનામાંઓ,
Admission End Date should be greater than Admission Start Date.,પ્રવેશ સમાપ્તિ તારીખ પ્રવેશ પ્રારંભ તારીખ કરતા મોટી હોવી જોઈએ.,
-Against Loan,લોનની સામે,
-Against Loan:,લોન સામે:,
All,બધા,
All bank transactions have been created,તમામ બેંક વ્યવહાર બનાવવામાં આવ્યા છે,
All the depreciations has been booked,તમામ અવમૂલ્યન બુક કરાયા છે,
Allocation Expired!,ફાળવણી સમાપ્ત!,
Allow Resetting Service Level Agreement from Support Settings.,સપોર્ટ સેટિંગ્સથી સેવા સ્તરના કરારને ફરીથી સેટ કરવાની મંજૂરી આપો.,
Amount of {0} is required for Loan closure,લોન બંધ કરવા માટે {0} ની રકમ આવશ્યક છે,
-Amount paid cannot be zero,ચૂકવેલ રકમ શૂન્ય હોઈ શકતી નથી,
Applied Coupon Code,લાગુ કુપન કોડ,
Apply Coupon Code,કૂપન કોડ લાગુ કરો,
Appointment Booking,નિમણૂક બુકિંગ,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,ડ્રાઇવર સરનામું ખૂટે છે તેથી આગમન સમયની ગણતરી કરી શકાતી નથી.,
Cannot Optimize Route as Driver Address is Missing.,ડ્રાઇવર સરનામું ખૂટે હોવાથી રૂટને Opપ્ટિમાઇઝ કરી શકાતો નથી.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,કાર્ય {0 complete પૂર્ણ કરી શકાતું નથી કારણ કે તેના આશ્રિત કાર્ય {1} કમ્પ્પ્લેટ / રદ નથી.,
-Cannot create loan until application is approved,એપ્લિકેશન મંજૂર થાય ત્યાં સુધી લોન બનાવી શકાતી નથી,
Cannot find a matching Item. Please select some other value for {0}.,બંધબેસતા વસ્તુ શોધી શકાતો નથી. માટે {0} કેટલીક અન્ય કિંમત પસંદ કરો.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","પંક્તિ I 1} tem 2} કરતા વધારે આઇટમ {0 for માટે ઓવરબિલ આપી શકાતી નથી. ઓવર-બિલિંગને મંજૂરી આપવા માટે, કૃપા કરીને એકાઉન્ટ્સ સેટિંગ્સમાં ભથ્થું સેટ કરો",
"Capacity Planning Error, planned start time can not be same as end time","ક્ષમતા આયોજન ભૂલ, આયોજિત પ્રારંભ સમય સમાપ્ત સમય જેટલો હોઈ શકે નહીં",
@@ -3812,20 +3792,9 @@
Less Than Amount,રકમ કરતા ઓછી,
Liabilities,જવાબદારીઓ,
Loading...,લોડ કરી રહ્યું છે ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,સૂચિત સિક્યોરિટીઝ અનુસાર લોનની રકમ loan 0 maximum ની મહત્તમ લોનની રકમ કરતાં વધી ગઈ છે,
Loan Applications from customers and employees.,ગ્રાહકો અને કર્મચારીઓ પાસેથી લોન એપ્લિકેશન.,
-Loan Disbursement,લોન વિતરણ,
Loan Processes,લોન પ્રક્રિયાઓ,
-Loan Security,લોન સુરક્ષા,
-Loan Security Pledge,લોન સુરક્ષા પ્રતિજ્ .ા,
-Loan Security Pledge Created : {0},લોન સુરક્ષા પ્રતિજ્ Creા બનાવેલ: {0},
-Loan Security Price,લોન સુરક્ષા કિંમત,
-Loan Security Price overlapping with {0},લોન સુરક્ષા કિંમત {0 an સાથે ઓવરલેપિંગ,
-Loan Security Unpledge,લોન સુરક્ષા અનપ્લેજ,
-Loan Security Value,લોન સુરક્ષા મૂલ્ય,
Loan Type for interest and penalty rates,વ્યાજ અને દંડ દરો માટે લોનનો પ્રકાર,
-Loan amount cannot be greater than {0},લોનની રકમ {0 than કરતા વધારે ન હોઈ શકે,
-Loan is mandatory,લોન ફરજિયાત છે,
Loans,લોન,
Loans provided to customers and employees.,ગ્રાહકો અને કર્મચારીઓને આપવામાં આવતી લોન.,
Location,સ્થાન,
@@ -3894,7 +3863,6 @@
Pay,પે,
Payment Document Type,ચુકવણી દસ્તાવેજ પ્રકાર,
Payment Name,ચુકવણી નામ,
-Penalty Amount,પેનલ્ટી રકમ,
Pending,બાકી,
Performance,પ્રદર્શન,
Period based On,પીરિયડ ચાલુ,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,કૃપા કરીને આ આઇટમને સંપાદિત કરવા માટે બજારના વપરાશકર્તા તરીકે લ Userગિન કરો.,
Please login as a Marketplace User to report this item.,કૃપા કરીને આ આઇટમની જાણ કરવા માટે બજારના વપરાશકર્તા તરીકે લ Userગિન કરો.,
Please select <b>Template Type</b> to download template,કૃપા કરીને નમૂના ડાઉનલોડ કરવા માટે <b>Templateાંચો પ્રકાર</b> પસંદ કરો,
-Please select Applicant Type first,કૃપા કરીને પહેલા અરજદાર પ્રકાર પસંદ કરો,
Please select Customer first,કૃપા કરીને પહેલા ગ્રાહક પસંદ કરો,
Please select Item Code first,કૃપા કરીને પહેલા આઇટમ કોડ પસંદ કરો,
-Please select Loan Type for company {0},કૃપા કરી કંપની Lo 0} માટે લોનનો પ્રકાર પસંદ કરો,
Please select a Delivery Note,કૃપા કરીને ડિલિવરી નોટ પસંદ કરો,
Please select a Sales Person for item: {0},કૃપા કરીને આઇટમ માટે વેચાણ વ્યક્તિ પસંદ કરો: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',કૃપા કરીને બીજી ચુકવણી પદ્ધતિ પસંદ કરો. ગેરુનો ચલણ વ્યવહારો ટેકો આપતાં નથી '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},કૃપા કરીને કંપની for 0} માટે ડિફ defaultલ્ટ બેંક એકાઉન્ટ સેટ કરો.,
Please specify,કૃપયા ચોક્કસ ઉલ્લેખ કરો,
Please specify a {0},કૃપા કરી {0 specify નો ઉલ્લેખ કરો,lead
-Pledge Status,પ્રતિજ્ Statusાની સ્થિતિ,
-Pledge Time,પ્રતિજ્ Timeા સમય,
Printing,પ્રિન્ટિંગ,
Priority,પ્રાધાન્યતા,
Priority has been changed to {0}.,પ્રાધાન્યતાને બદલીને {0} કરી દેવામાં આવી છે.,
@@ -3944,7 +3908,6 @@
Processing XML Files,XML ફાઇલો પર પ્રક્રિયા કરી રહ્યું છે,
Profitability,નફાકારકતા,
Project,પ્રોજેક્ટ,
-Proposed Pledges are mandatory for secured Loans,સુરક્ષિત લોન માટે સૂચિત વચનો ફરજિયાત છે,
Provide the academic year and set the starting and ending date.,શૈક્ષણિક વર્ષ પ્રદાન કરો અને પ્રારંભિક અને અંતિમ તારીખ સેટ કરો.,
Public token is missing for this bank,આ બેંક માટે સાર્વજનિક ટોકન ખૂટે છે,
Publish,પ્રકાશિત કરો,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,ખરીદીની રસીદમાં એવી કોઈ આઇટમ હોતી નથી જેના માટે ફરીથી જાળવવાનો નમૂના સક્ષમ છે.,
Purchase Return,ખરીદી પરત,
Qty of Finished Goods Item,સમાપ્ત માલની આઇટમની માત્રા,
-Qty or Amount is mandatroy for loan security,લોન સિક્યુરિટી માટે ક્વોટી અથવા એમાઉન્ટ મેન્ડેટ્રોય છે,
Quality Inspection required for Item {0} to submit,સબમિટ કરવા માટે આઇટમ {0} માટે ગુણવત્તા નિરીક્ષણ આવશ્યક છે,
Quantity to Manufacture,ઉત્પાદનની માત્રા,
Quantity to Manufacture can not be zero for the operation {0},Manufacture 0} કામગીરી માટે ઉત્પાદનની માત્રા શૂન્ય હોઈ શકતી નથી,
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,રાહત આપવાની તારીખ જોડાવાની તારીખથી મોટી અથવા તેના જેટલી હોવી જોઈએ,
Rename,નામ બદલો,
Rename Not Allowed,નામ બદલી મંજૂરી નથી,
-Repayment Method is mandatory for term loans,ટર્મ લોન માટે ચુકવણીની પદ્ધતિ ફરજિયાત છે,
-Repayment Start Date is mandatory for term loans,ટર્મ લોન માટે ચુકવણીની શરૂઆત તારીખ ફરજિયાત છે,
Report Item,રિપોર્ટ આઇટમ,
Report this Item,આ આઇટમની જાણ કરો,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,સબકોન્ટ્રેક્ટ માટે રિઝર્વેટેડ ક્વોટી: પેટા કોન્ટ્રેક્ટ વસ્તુઓ બનાવવા માટે કાચા માલનો જથ્થો.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},પંક્તિ ({0}): {1 પહેલેથી જ {2 ounted માં ડિસ્કાઉન્ટ છે,
Rows Added in {0},પંક્તિઓ {0 in માં ઉમેરી,
Rows Removed in {0},પંક્તિઓ {0 in માં દૂર કરી,
-Sanctioned Amount limit crossed for {0} {1},મંજૂરી રકમની મર્યાદા {0} {1} માટે ઓળંગી ગઈ,
-Sanctioned Loan Amount already exists for {0} against company {1},કંપની {1} સામે Lo 0 for માટે મંજૂર લોનની રકમ પહેલાથી અસ્તિત્વમાં છે,
Save,સેવ કરો,
Save Item,આઇટમ સાચવો,
Saved Items,સાચવેલ વસ્તુઓ,
@@ -4135,7 +4093,6 @@
User {0} is disabled,વપરાશકર્તા {0} અક્ષમ છે,
Users and Permissions,વપરાશકર્તાઓ અને પરવાનગીઓ,
Vacancies cannot be lower than the current openings,ખાલી જગ્યાઓ વર્તમાન ઉદઘાટન કરતા ઓછી હોઈ શકતી નથી,
-Valid From Time must be lesser than Valid Upto Time.,માન્યથી ભાવ સમય સુધી માન્ય કરતા ઓછા હોવા જોઈએ.,
Valuation Rate required for Item {0} at row {1},પંક્તિ {1} પર આઇટમ {0} માટે મૂલ્ય દર જરૂરી છે,
Values Out Of Sync,સમન્વયનના મૂલ્યો,
Vehicle Type is required if Mode of Transport is Road,જો મોડનો ટ્રાન્સપોર્ટ માર્ગ હોય તો વાહનનો પ્રકાર આવશ્યક છે,
@@ -4211,7 +4168,6 @@
Add to Cart,સૂચી માં સામેલ કરો,
Days Since Last Order,છેલ્લા ઓર્ડર પછીના દિવસો,
In Stock,ઉપલબ્ધ છે,
-Loan Amount is mandatory,લોનની રકમ ફરજિયાત છે,
Mode Of Payment,ચૂકવણીની પદ્ધતિ,
No students Found,કોઈ વિદ્યાર્થી મળી નથી,
Not in Stock,સ્ટોક નથી,
@@ -4240,7 +4196,6 @@
Group by,ગ્રુપ દ્વારા,
In stock,ઉપલબ્ધ છે,
Item name,વસ્તુ નામ,
-Loan amount is mandatory,લોનની રકમ ફરજિયાત છે,
Minimum Qty,ન્યૂનતમ જથ્થો,
More details,વધુ વિગતો,
Nature of Supplies,પુરવઠા પ્રકૃતિ,
@@ -4409,9 +4364,6 @@
Total Completed Qty,કુલ પૂર્ણ સંખ્યા,
Qty to Manufacture,ઉત્પાદન Qty,
Repay From Salary can be selected only for term loans,પગારમાંથી ચૂકવણીની રકમ ફક્ત ટર્મ લોન માટે જ પસંદ કરી શકાય છે,
-No valid Loan Security Price found for {0},Valid 0 for માટે કોઈ માન્ય લોન સુરક્ષા કિંમત મળી નથી,
-Loan Account and Payment Account cannot be same,લોન એકાઉન્ટ અને ચુકવણી એકાઉન્ટ સમાન હોઇ શકે નહીં,
-Loan Security Pledge can only be created for secured loans,સુરક્ષિત લોન માટે જ લોન સિક્યુરિટી પ્લેજ બનાવી શકાય છે,
Social Media Campaigns,સોશિયલ મીડિયા અભિયાનો,
From Date can not be greater than To Date,તારીખથી તારીખ કરતાં વધુ ન હોઈ શકે,
Please set a Customer linked to the Patient,કૃપા કરીને પેશન્ટ સાથે જોડાયેલ ગ્રાહક સેટ કરો,
@@ -6437,7 +6389,6 @@
HR User,એચઆર વપરાશકર્તા,
Appointment Letter,નિમણૂક પત્ર,
Job Applicant,જોબ અરજદાર,
-Applicant Name,અરજદારનું નામ,
Appointment Date,નિમણૂક તારીખ,
Appointment Letter Template,નિમણૂક પત્ર Templateાંચો,
Body,શરીર,
@@ -7059,99 +7010,12 @@
Sync in Progress,પ્રગતિ સમન્વયન,
Hub Seller Name,હબ વિક્રેતા નામ,
Custom Data,કસ્ટમ ડેટા,
-Member,સભ્ય,
-Partially Disbursed,આંશિક વિતરિત,
-Loan Closure Requested,લોન બંધ કરવાની વિનંતી,
Repay From Salary,પગારની ચુકવણી,
-Loan Details,લોન વિગતો,
-Loan Type,લોન પ્રકાર,
-Loan Amount,લોન રકમ,
-Is Secured Loan,સુરક્ષિત લોન છે,
-Rate of Interest (%) / Year,વ્યાજ (%) / વર્ષ દર,
-Disbursement Date,વહેંચણી તારીખ,
-Disbursed Amount,વિતરિત રકમ,
-Is Term Loan,ટર્મ લોન છે,
-Repayment Method,ચુકવણી પદ્ધતિ,
-Repay Fixed Amount per Period,ચુકવણી સમય દીઠ નિશ્ચિત રકમ,
-Repay Over Number of Periods,ચુકવણી બોલ કાળ સંખ્યા,
-Repayment Period in Months,મહિના ચુકવણી સમય,
-Monthly Repayment Amount,માસિક ચુકવણી રકમ,
-Repayment Start Date,ચુકવણી પ્રારંભ તારીખ,
-Loan Security Details,લોન સુરક્ષા વિગતો,
-Maximum Loan Value,મહત્તમ લોન મૂલ્ય,
-Account Info,એકાઉન્ટ માહિતી,
-Loan Account,લોન એકાઉન્ટ,
-Interest Income Account,વ્યાજની આવક એકાઉન્ટ,
-Penalty Income Account,પેનલ્ટી આવક ખાતું,
-Repayment Schedule,ચુકવણી શેડ્યૂલ,
-Total Payable Amount,કુલ ચૂકવવાપાત્ર રકમ,
-Total Principal Paid,કુલ આચાર્ય ચૂકવેલ,
-Total Interest Payable,ચૂકવવાપાત્ર કુલ વ્યાજ,
-Total Amount Paid,ચુકવેલ કુલ રકમ,
-Loan Manager,લોન મેનેજર,
-Loan Info,લોન માહિતી,
-Rate of Interest,વ્યાજ દર,
-Proposed Pledges,સૂચિત વચનો,
-Maximum Loan Amount,મહત્તમ લોન રકમ,
-Repayment Info,ચુકવણી માહિતી,
-Total Payable Interest,કુલ ચૂકવવાપાત્ર વ્યાજ,
-Against Loan ,લોનની સામે,
-Loan Interest Accrual,લોન ઇન્ટરેસ્ટ એક્યુઅલ,
-Amounts,રકમ,
-Pending Principal Amount,બાકી રહેલ મુખ્ય રકમ,
-Payable Principal Amount,ચૂકવવાપાત્ર પ્રિન્સિપાલ રકમ,
-Paid Principal Amount,ચૂકવેલ આચાર્ય રકમ,
-Paid Interest Amount,ચૂકવેલ વ્યાજની રકમ,
-Process Loan Interest Accrual,પ્રોસેસ લોન ઇન્ટરેસ્ટ એક્યુઅલ,
-Repayment Schedule Name,ચુકવણી સૂચિ નામ,
Regular Payment,નિયમિત ચુકવણી,
Loan Closure,લોન બંધ,
-Payment Details,ચુકવણી વિગતો,
-Interest Payable,વ્યાજ ચૂકવવાપાત્ર,
-Amount Paid,રકમ ચૂકવવામાં,
-Principal Amount Paid,આચાર્ય રકમ ચૂકવેલ,
-Repayment Details,ચુકવણીની વિગતો,
-Loan Repayment Detail,લોન ચુકવણીની વિગત,
-Loan Security Name,લોન સુરક્ષા નામ,
-Unit Of Measure,માપ નો એકમ,
-Loan Security Code,લોન સુરક્ષા કોડ,
-Loan Security Type,લોન સુરક્ષા પ્રકાર,
-Haircut %,હેરકટ%,
-Loan Details,લોન વિગતો,
-Unpledged,બિનહરીફ,
-Pledged,પ્રતિજ્ .ા લીધી,
-Partially Pledged,આંશિક પ્રતિજ્ .ા,
-Securities,સિક્યોરિટીઝ,
-Total Security Value,કુલ સુરક્ષા મૂલ્ય,
-Loan Security Shortfall,લોન સુરક્ષાની કમી,
-Loan ,લોન,
-Shortfall Time,શોર્ટફોલ સમય,
-America/New_York,અમેરિકા / ન્યુ યોર્ક,
-Shortfall Amount,ખોટ રકમ,
-Security Value ,સુરક્ષા મૂલ્ય,
-Process Loan Security Shortfall,પ્રક્રિયા લોન સુરક્ષાની ઉણપ,
-Loan To Value Ratio,લોન ટુ વેલ્યુ રેશિયો,
-Unpledge Time,અનપ્લેજ સમય,
-Loan Name,લોન નામ,
Rate of Interest (%) Yearly,વ્યાજ દર (%) વાર્ષિક,
-Penalty Interest Rate (%) Per Day,દંડ વ્યાજ દર (%) દીઠ,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,વિલંબિત ચુકવણીના કિસ્સામાં દૈનિક ધોરણે બાકી વ્યાજની રકમ પર પેનલ્ટી વ્યાજ દર વસૂલવામાં આવે છે,
-Grace Period in Days,દિવસોમાં ગ્રેસ પીરિયડ,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,નિયત તારીખથી દિવસોની સંખ્યા કે જે લોન ચુકવણીમાં વિલંબના કિસ્સામાં પેનલ્ટી વસૂલશે નહીં,
-Pledge,પ્રતિજ્ .ા,
-Post Haircut Amount,વાળ કાપવાની રકમ,
-Process Type,પ્રક્રિયા પ્રકાર,
-Update Time,સુધારો સમય,
-Proposed Pledge,પ્રસ્તાવિત પ્રતિજ્ .ા,
-Total Payment,કુલ ચુકવણી,
-Balance Loan Amount,બેલેન્સ લોન રકમ,
-Is Accrued,સંચિત થાય છે,
Salary Slip Loan,પગાર કાપલી લોન,
Loan Repayment Entry,લોન ચુકવણીની એન્ટ્રી,
-Sanctioned Loan Amount,મંજૂરી લોન રકમ,
-Sanctioned Amount Limit,માન્ય રકમ મર્યાદા,
-Unpledge,અણધાર્યો,
-Haircut,હેરકટ,
MAT-MSH-.YYYY.-,એમએટી-એમએસએચ-વાય.વાય.વાય.-,
Generate Schedule,સૂચિ બનાવો,
Schedules,ફ્લાઈટ શેડ્યુલ,
@@ -7885,7 +7749,6 @@
Update Series,સુધારા સિરીઝ,
Change the starting / current sequence number of an existing series.,હાલની શ્રેણી શરૂ / વર્તમાન ક્રમ નંબર બદલો.,
Prefix,પૂર્વગ,
-Current Value,વર્તમાન કિંમત,
This is the number of the last created transaction with this prefix,આ ઉપસર્ગ સાથે છેલ્લા બનાવવામાં વ્યવહાર સંખ્યા છે,
Update Series Number,સુધારા સિરીઝ સંખ્યા,
Quotation Lost Reason,અવતરણ લોસ્ટ કારણ,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,મુદ્દાવાર પુનઃક્રમાંકિત કરો સ્તર ભલામણ,
Lead Details,લીડ વિગતો,
Lead Owner Efficiency,અગ્ર માલિક કાર્યક્ષમતા,
-Loan Repayment and Closure,લોન ચુકવણી અને બંધ,
-Loan Security Status,લોન સુરક્ષા સ્થિતિ,
Lost Opportunity,ખોવાયેલી તક,
Maintenance Schedules,જાળવણી શેડ્યુલ,
Material Requests for which Supplier Quotations are not created,"પુરવઠોકર્તા સુવાકયો બનાવવામાં આવે છે, જેના માટે સામગ્રી અરજીઓ",
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},લક્ષ્યાંકિત ગણતરીઓ: {0},
Payment Account is mandatory,ચુકવણી ખાતું ફરજિયાત છે,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","જો ચકાસાયેલ છે, તો કોઈપણ રકમની ઘોષણા અથવા પુરાવા રજૂઆત કર્યા વિના આવકવેરાની ગણતરી કરતા પહેલાં સંપૂર્ણ રકમ કરપાત્ર આવકમાંથી બાદ કરવામાં આવશે.",
-Disbursement Details,વિતરણ વિગતો,
Material Request Warehouse,સામગ્રી વિનંતી વેરહાઉસ,
Select warehouse for material requests,સામગ્રી વિનંતીઓ માટે વેરહાઉસ પસંદ કરો,
Transfer Materials For Warehouse {0},વેરહાઉસ Material 0 For માટે સામગ્રી સ્થાનાંતરિત કરો,
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,પગારમાંથી દાવેદારી રકમ પરત કરો,
Deduction from salary,પગારમાંથી કપાત,
Expired Leaves,સમાપ્ત પાંદડા,
-Reference No,સંદર્ભ ક્રમાંક,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,હેરકટ ટકાવારી એ લોન સિક્યુરિટીના માર્કેટ વેલ્યુ અને તે લોન સિક્યુરિટીને મળેલ મૂલ્ય વચ્ચેની ટકાવારીનો તફાવત છે જ્યારે તે લોન માટે કોલેટરલ તરીકે ઉપયોગ થાય છે.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,"લોન ટુ વેલ્યુ ગુણોત્તર, ગીરવે મૂકાયેલ સલામતીના મૂલ્ય માટે લોનની રકમના ગુણોત્તરને વ્યક્ત કરે છે. જો આ કોઈપણ લોન માટેના નિર્ધારિત મૂલ્યથી નીચે આવે તો લોન સલામતીની ખામી સર્જાશે",
If this is not checked the loan by default will be considered as a Demand Loan,જો આને તપાસવામાં નહીં આવે તો ડિફોલ્ટ રૂપે લોનને ડિમાન્ડ લોન માનવામાં આવશે,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,આ એકાઉન્ટનો ઉપયોગ orણ લેનારા પાસેથી લોન ચુકવણી બુક કરવા અને લેનારાને લોન વહેંચવા માટે થાય છે.,
This account is capital account which is used to allocate capital for loan disbursal account ,આ એકાઉન્ટ કેપિટલ એકાઉન્ટ છે જેનો ઉપયોગ લોન વિતરણ ખાતા માટે મૂડી ફાળવવા માટે થાય છે,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},ઓપરેશન {0 the વર્ક ઓર્ડર સાથે સંબંધિત નથી {1},
Print UOM after Quantity,જથ્થા પછી યુઓએમ છાપો,
Set default {0} account for perpetual inventory for non stock items,બિન સ્ટોક આઇટમ્સ માટે કાયમી ઇન્વેન્ટરી માટે ડિફ defaultલ્ટ {0} એકાઉન્ટ સેટ કરો,
-Loan Security {0} added multiple times,લોન સુરક્ષા {0} ઘણી વખત ઉમેર્યું,
-Loan Securities with different LTV ratio cannot be pledged against one loan,જુદા જુદા એલટીવી રેશિયોવાળી લોન સિક્યોરિટીઝ એક લોન સામે ગિરવી રાખી શકાતી નથી,
-Qty or Amount is mandatory for loan security!,લોન સુરક્ષા માટે ક્યુટી અથવા રકમ ફરજિયાત છે!,
-Only submittted unpledge requests can be approved,ફક્ત સબમિટ કરેલી અનપ્લેજ વિનંતીઓને જ મંજૂરી આપી શકાય છે,
-Interest Amount or Principal Amount is mandatory,વ્યાજની રકમ અથવા મુખ્ય રકમ ફરજિયાત છે,
-Disbursed Amount cannot be greater than {0},વિતરિત રકમ {0 than કરતા વધારે હોઈ શકતી નથી,
-Row {0}: Loan Security {1} added multiple times,પંક્તિ {0}: લોન સુરક્ષા {1 multiple ઘણી વખત ઉમેરી,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,પંક્તિ # {0}: બાળ વસ્તુ એ પ્રોડક્ટ બંડલ હોવી જોઈએ નહીં. કૃપા કરીને આઇટમ remove 1 remove અને સેવને દૂર કરો,
Credit limit reached for customer {0},ગ્રાહક માટે ક્રેડિટ મર્યાદા reached 0 reached પર પહોંચી,
Could not auto create Customer due to the following missing mandatory field(s):,નીચેના ગુમ થયેલ ફરજિયાત ક્ષેત્ર (ઓ) ને કારણે ગ્રાહક સ્વત create બનાવી શક્યાં નથી:,
diff --git a/erpnext/translations/he.csv b/erpnext/translations/he.csv
index 1abdc58..44edfca 100644
--- a/erpnext/translations/he.csv
+++ b/erpnext/translations/he.csv
@@ -232,8 +232,6 @@
"Applicable if the company is SpA, SApA or SRL","ישים אם החברה היא SpA, SApA או SRL",
Applicable if the company is a limited liability company,ישים אם החברה הינה חברה בערבון מוגבל,
Applicable if the company is an Individual or a Proprietorship,ישים אם החברה היא יחיד או בעלות,
-Applicant,מְבַקֵשׁ,
-Applicant Type,סוג המועמד,
Application of Funds (Assets),יישום של קרנות (נכסים),
Application period cannot be across two allocation records,תקופת היישום לא יכולה להיות על פני שני רשומות הקצאה,
Application period cannot be outside leave allocation period,תקופת יישום לא יכולה להיות תקופה הקצאת חופשה מחוץ,
@@ -1471,10 +1469,6 @@
List of available Shareholders with folio numbers,רשימת בעלי המניות הזמינים עם מספרי פוליו,
Loading Payment System,טוען מערכת תשלום,
Loan,לְהַלווֹת,
-Loan Amount cannot exceed Maximum Loan Amount of {0},סכום ההלוואה לא יכול לחרוג מסכום ההלוואה המרבי של {0},
-Loan Application,בקשת הלוואה,
-Loan Management,ניהול הלוואות,
-Loan Repayment,פירעון הלוואה,
Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,מועד התחלת ההלוואה ותקופת ההלוואה חובה לשמור את היוון החשבונית,
Loans (Liabilities),הלוואות (התחייבויות),
Loans and Advances (Assets),הלוואות ומקדמות (נכסים),
@@ -1611,7 +1605,6 @@
Monday,יום שני,
Monthly,חודשי,
Monthly Distribution,בחתך חודשי,
-Monthly Repayment Amount cannot be greater than Loan Amount,סכום ההחזר החודשי אינו יכול להיות גדול מסכום ההלוואה,
More,יותר,
More Information,מידע נוסף,
More than one selection for {0} not allowed,יותר ממבחר אחד עבור {0} אסור,
@@ -1884,11 +1877,9 @@
Pay {0} {1},שלם {0} {1},
Payable,משתלם,
Payable Account,חשבון לתשלום,
-Payable Amount,סכום לתשלום,
Payment,תשלום,
Payment Cancelled. Please check your GoCardless Account for more details,התשלום בוטל. אנא בדוק את חשבון GoCardless שלך לקבלת פרטים נוספים,
Payment Confirmation,אישור תשלום,
-Payment Date,תאריך תשלום,
Payment Days,ימי תשלום,
Payment Document,מסמך תשלום,
Payment Due Date,מועד תשלום,
@@ -1982,7 +1973,6 @@
Please enter Purchase Receipt first,אנא ראשון להיכנס קבלת רכישה,
Please enter Receipt Document,נא להזין את מסמך הקבלה,
Please enter Reference date,נא להזין את תאריך הפניה,
-Please enter Repayment Periods,אנא הזן תקופות החזר,
Please enter Reqd by Date,אנא הזן Reqd לפי תאריך,
Please enter Woocommerce Server URL,אנא הזן את כתובת האתר של שרת Woocommerce,
Please enter Write Off Account,נא להזין לכתוב את החשבון,
@@ -1994,7 +1984,6 @@
Please enter parent cost center,נא להזין מרכז עלות הורה,
Please enter quantity for Item {0},נא להזין את הכמות לפריט {0},
Please enter relieving date.,נא להזין את הקלת מועד.,
-Please enter repayment Amount,אנא הזן את סכום ההחזר,
Please enter valid Financial Year Start and End Dates,נא להזין פיננסית בתוקף השנה תאריכי ההתחלה וסיום,
Please enter valid email address,אנא הזן כתובת דוא"ל חוקית,
Please enter {0} first,נא להזין את {0} הראשון,
@@ -2160,7 +2149,6 @@
Pricing Rules are further filtered based on quantity.,כללי תמחור מסוננים נוסף המבוססים על כמות.,
Primary Address Details,פרטי כתובת ראשית,
Primary Contact Details,פרטי קשר עיקריים,
-Principal Amount,סכום עיקרי,
Print Format,פורמט הדפסה,
Print IRS 1099 Forms,הדפס טפסים של מס הכנסה 1099,
Print Report Card,הדפסת כרטיס דוח,
@@ -2550,7 +2538,6 @@
Sample Collection,אוסף לדוגמא,
Sample quantity {0} cannot be more than received quantity {1},כמות הדוגמה {0} לא יכולה להיות יותר מהכמות שהתקבלה {1},
Sanctioned,סנקציה,
-Sanctioned Amount,סכום גושפנקא,
Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,סכום גושפנקא לא יכול להיות גדול מסכום תביעה בשורה {0}.,
Sand,חוֹל,
Saturday,יום שבת,
@@ -3541,7 +3528,6 @@
{0} already has a Parent Procedure {1}.,{0} כבר יש נוהל הורים {1}.,
API,ממשק API,
Annual,שנתי,
-Approved,אושר,
Change,שינוי,
Contact Email,"דוא""ל ליצירת קשר",
Export Type,סוג ייצוא,
@@ -3571,7 +3557,6 @@
Account Value,ערך חשבון,
Account is mandatory to get payment entries,חובה לקבל חשבונות תשלום,
Account is not set for the dashboard chart {0},החשבון לא הוגדר עבור תרשים לוח המחוונים {0},
-Account {0} does not belong to company {1},חשבון {0} אינו שייך לחברת {1},
Account {0} does not exists in the dashboard chart {1},חשבון {0} אינו קיים בתרשים של לוח המחוונים {1},
Account: <b>{0}</b> is capital Work in progress and can not be updated by Journal Entry,חשבון: <b>{0}</b> הוא הון בעבודה ולא ניתן לעדכן אותו על ידי כניסה ליומן,
Account: {0} is not permitted under Payment Entry,חשבון: {0} אינו מורשה בכניסה לתשלום,
@@ -3582,7 +3567,6 @@
Activity,פעילות,
Add / Manage Email Accounts.,"הוספה / ניהול חשבונות דוא""ל.",
Add Child,הוסף לילדים,
-Add Loan Security,הוסף אבטחת הלוואות,
Add Multiple,הוסף מרובה,
Add Participants,להוסיף משתתפים,
Add to Featured Item,הוסף לפריט מוצג,
@@ -3593,15 +3577,12 @@
Address Line 1,שורת כתובת 1,
Addresses,כתובות,
Admission End Date should be greater than Admission Start Date.,תאריך הסיום של הקבלה צריך להיות גדול ממועד התחלת הקבלה.,
-Against Loan,נגד הלוואה,
-Against Loan:,נגד הלוואה:,
All,כל,
All bank transactions have been created,כל העסקאות הבנקאיות נוצרו,
All the depreciations has been booked,כל הפחתים הוזמנו,
Allocation Expired!,ההקצאה פגה!,
Allow Resetting Service Level Agreement from Support Settings.,אפשר איפוס של הסכם רמת שירות מהגדרות התמיכה.,
Amount of {0} is required for Loan closure,סכום של {0} נדרש לסגירת הלוואה,
-Amount paid cannot be zero,הסכום ששולם לא יכול להיות אפס,
Applied Coupon Code,קוד קופון מיושם,
Apply Coupon Code,החל קוד קופון,
Appointment Booking,הזמנת פגישה,
@@ -3649,7 +3630,6 @@
Cannot Calculate Arrival Time as Driver Address is Missing.,לא ניתן לחשב את זמן ההגעה מכיוון שכתובת הנהג חסרה.,
Cannot Optimize Route as Driver Address is Missing.,לא ניתן לייעל את המסלול מכיוון שכתובת הנהג חסרה.,
Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,לא ניתן להשלים את המשימה {0} מכיוון שהמשימה התלויה שלה {1} לא הושלמה / בוטלה.,
-Cannot create loan until application is approved,לא ניתן ליצור הלוואה עד לאישור הבקשה,
Cannot find a matching Item. Please select some other value for {0}.,לא ניתן למצוא את הפריט מתאים. אנא בחר ערך אחר עבור {0}.,
"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","לא ניתן לחייב יתר על פריט {0} בשורה {1} ביותר מ- {2}. כדי לאפשר חיוב יתר, הגדר קצבה בהגדרות חשבונות",
"Capacity Planning Error, planned start time can not be same as end time","שגיאת תכנון קיבולת, זמן התחלה מתוכנן לא יכול להיות זהה לזמן סיום",
@@ -3812,20 +3792,9 @@
Less Than Amount,פחות מכמות,
Liabilities,התחייבויות,
Loading...,Loading ...,
-Loan Amount exceeds maximum loan amount of {0} as per proposed securities,סכום ההלוואה עולה על סכום ההלוואה המקסימלי של {0} בהתאם לניירות ערך המוצעים,
Loan Applications from customers and employees.,בקשות להלוואות מלקוחות ועובדים.,
-Loan Disbursement,הוצאות הלוואות,
Loan Processes,תהליכי הלוואה,
-Loan Security,אבטחת הלוואות,
-Loan Security Pledge,משכון ביטחון הלוואות,
-Loan Security Pledge Created : {0},משכון אבטחת הלוואות נוצר: {0},
-Loan Security Price,מחיר ביטחון הלוואה,
-Loan Security Price overlapping with {0},מחיר ביטחון הלוואה חופף עם {0},
-Loan Security Unpledge,Unpledge אבטחת הלוואות,
-Loan Security Value,ערך אבטחת הלוואה,
Loan Type for interest and penalty rates,סוג הלוואה לשיעור ריבית וקנס,
-Loan amount cannot be greater than {0},סכום ההלוואה לא יכול להיות גדול מ- {0},
-Loan is mandatory,הלוואה הינה חובה,
Loans,הלוואות,
Loans provided to customers and employees.,הלוואות הניתנות ללקוחות ולעובדים.,
Location,מיקום,
@@ -3894,7 +3863,6 @@
Pay,שלם,
Payment Document Type,סוג מסמך תשלום,
Payment Name,שם התשלום,
-Penalty Amount,סכום קנס,
Pending,ממתין ל,
Performance,ביצועים,
Period based On,תקופה המבוססת על,
@@ -3916,10 +3884,8 @@
Please login as a Marketplace User to edit this item.,אנא התחבר כמשתמש Marketplace לעריכת פריט זה.,
Please login as a Marketplace User to report this item.,אנא התחבר כמשתמש Marketplace כדי לדווח על פריט זה.,
Please select <b>Template Type</b> to download template,אנא בחר <b>סוג</b> תבנית להורדת תבנית,
-Please select Applicant Type first,אנא בחר תחילה סוג המועמד,
Please select Customer first,אנא בחר לקוח תחילה,
Please select Item Code first,אנא בחר קוד קוד פריט,
-Please select Loan Type for company {0},בחר סוג הלוואה לחברה {0},
Please select a Delivery Note,אנא בחר תעודת משלוח,
Please select a Sales Person for item: {0},בחר איש מכירות לפריט: {0},
Please select another payment method. Stripe does not support transactions in currency '{0}',אנא בחר אמצעי תשלום אחר. פס אינו תומך בעסקאות במטבע '{0}',
@@ -3935,8 +3901,6 @@
Please setup a default bank account for company {0},הגדר חשבון בנק ברירת מחדל לחברה {0},
Please specify,אנא ציין,
Please specify a {0},אנא ציין {0},lead
-Pledge Status,סטטוס משכון,
-Pledge Time,זמן הבטחה,
Printing,הדפסה,
Priority,עדיפות,
Priority has been changed to {0}.,העדיפות שונתה ל- {0}.,
@@ -3944,7 +3908,6 @@
Processing XML Files,עיבוד קבצי XML,
Profitability,רווחיות,
Project,פרויקט,
-Proposed Pledges are mandatory for secured Loans,ההתחייבויות המוצעות הינן חובה להלוואות מובטחות,
Provide the academic year and set the starting and ending date.,ספק את שנת הלימודים וקבע את תאריך ההתחלה והסיום.,
Public token is missing for this bank,אסימון ציבורי חסר לבנק זה,
Publish,לְפַרְסֵם,
@@ -3960,7 +3923,6 @@
Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,בקבלת הרכישה אין שום פריט שעבורו מופעל שמור לדוגמא.,
Purchase Return,חזור רכישה,
Qty of Finished Goods Item,כמות פריטי המוצרים המוגמרים,
-Qty or Amount is mandatroy for loan security,כמות או סכום הם מנדטרוי להבטחת הלוואות,
Quality Inspection required for Item {0} to submit,נדרשת בדיקת איכות לצורך הגשת הפריט {0},
Quantity to Manufacture,כמות לייצור,
Quantity to Manufacture can not be zero for the operation {0},הכמות לייצור לא יכולה להיות אפס עבור הפעולה {0},
@@ -3981,8 +3943,6 @@
Relieving Date must be greater than or equal to Date of Joining,תאריך הקלה חייב להיות גדול או שווה לתאריך ההצטרפות,
Rename,שינוי שם,
Rename Not Allowed,שינוי שם אסור,
-Repayment Method is mandatory for term loans,שיטת ההחזר הינה חובה עבור הלוואות לתקופה,
-Repayment Start Date is mandatory for term loans,מועד התחלת ההחזר הוא חובה עבור הלוואות לתקופה,
Report Item,פריט דוח,
Report this Item,דווח על פריט זה,
Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,כמות שמורה לקבלנות משנה: כמות חומרי גלם לייצור פריטים בקבלנות משנה.,
@@ -4015,8 +3975,6 @@
Row({0}): {1} is already discounted in {2},שורה ({0}): {1} כבר מוזל ב- {2},
Rows Added in {0},שורות נוספו ב- {0},
Rows Removed in {0},שורות הוסרו ב- {0},
-Sanctioned Amount limit crossed for {0} {1},מגבלת הסכום הסנקציה עברה עבור {0} {1},
-Sanctioned Loan Amount already exists for {0} against company {1},סכום הלוואה בעיצום כבר קיים עבור {0} נגד החברה {1},
Save,שמור,
Save Item,שמור פריט,
Saved Items,פריטים שמורים,
@@ -4135,7 +4093,6 @@
User {0} is disabled,משתמש {0} אינו זמין,
Users and Permissions,משתמשים והרשאות,
Vacancies cannot be lower than the current openings,המשרות הפנויות לא יכולות להיות נמוכות מהפתחים הנוכחיים,
-Valid From Time must be lesser than Valid Upto Time.,תקף מהזמן חייב להיות פחות מהזמן תקף.,
Valuation Rate required for Item {0} at row {1},דרוש שיעור הערכה לפריט {0} בשורה {1},
Values Out Of Sync,ערכים שאינם מסונכרנים,
Vehicle Type is required if Mode of Transport is Road,סוג רכב נדרש אם אמצעי התחבורה הוא דרך,
@@ -4211,7 +4168,6 @@
Add to Cart,הוסף לסל,
Days Since Last Order,ימים מאז ההזמנה האחרונה,
In Stock,במלאי,
-Loan Amount is mandatory,סכום ההלוואה הוא חובה,
Mode Of Payment,מצב של תשלום,
No students Found,לא נמצאו סטודנטים,
Not in Stock,לא במלאי,
@@ -4240,7 +4196,6 @@
Group by,קבוצה על ידי,
In stock,במלאי,
Item name,שם פריט,
-Loan amount is mandatory,סכום ההלוואה הוא חובה,
Minimum Qty,כמות מינימלית,
More details,לפרטים נוספים,
Nature of Supplies,אופי האספקה,
@@ -4409,9 +4364,6 @@
Total Completed Qty,סה"כ כמות שהושלמה,
Qty to Manufacture,כמות לייצור,
Repay From Salary can be selected only for term loans,ניתן לבחור בהחזר משכר רק עבור הלוואות לתקופה,
-No valid Loan Security Price found for {0},לא נמצא מחיר אבטחה תקף להלוואות עבור {0},
-Loan Account and Payment Account cannot be same,חשבון ההלוואה וחשבון התשלום אינם יכולים להיות זהים,
-Loan Security Pledge can only be created for secured loans,ניתן ליצור משכון להבטחת הלוואות רק עבור הלוואות מאובטחות,
Social Media Campaigns,קמפיינים למדיה חברתית,
From Date can not be greater than To Date,מהתאריך לא יכול להיות גדול מ- To Date,
Please set a Customer linked to the Patient,אנא הגדר לקוח המקושר לחולה,
@@ -6437,7 +6389,6 @@
HR User,משתמש HR,
Appointment Letter,מכתב מינוי,
Job Applicant,עבודת מבקש,
-Applicant Name,שם מבקש,
Appointment Date,תאריך מינוי,
Appointment Letter Template,תבנית מכתב לפגישה,
Body,גוּף,
@@ -7059,99 +7010,12 @@
Sync in Progress,סנכרון בתהליך,
Hub Seller Name,שם מוכר הרכזות,
Custom Data,נתונים מותאמים אישית,
-Member,חבר,
-Partially Disbursed,מופץ חלקית,
-Loan Closure Requested,מתבקשת סגירת הלוואה,
Repay From Salary,החזר משכר,
-Loan Details,פרטי הלוואה,
-Loan Type,סוג הלוואה,
-Loan Amount,סכום הלוואה,
-Is Secured Loan,הלוואה מאובטחת,
-Rate of Interest (%) / Year,שיעור ריבית (%) לשנה,
-Disbursement Date,תאריך פרסום,
-Disbursed Amount,סכום משולם,
-Is Term Loan,האם הלוואה לתקופה,
-Repayment Method,שיטת החזר,
-Repay Fixed Amount per Period,החזר סכום קבוע לתקופה,
-Repay Over Number of Periods,החזר על מספר התקופות,
-Repayment Period in Months,תקופת הפירעון בחודשים,
-Monthly Repayment Amount,סכום החזר חודשי,
-Repayment Start Date,תאריך התחלה להחזר,
-Loan Security Details,פרטי אבטחת הלוואה,
-Maximum Loan Value,ערך הלוואה מרבי,
-Account Info,פרטי חשבון,
-Loan Account,חשבון הלוואה,
-Interest Income Account,חשבון הכנסות ריבית,
-Penalty Income Account,חשבון הכנסה קנס,
-Repayment Schedule,תזמון התשלום,
-Total Payable Amount,סכום כולל לתשלום,
-Total Principal Paid,סך כל התשלום העיקרי,
-Total Interest Payable,סך הריבית שיש לשלם,
-Total Amount Paid,הסכום הכולל ששולם,
-Loan Manager,מנהל הלוואות,
-Loan Info,מידע על הלוואה,
-Rate of Interest,שיעור העניין,
-Proposed Pledges,הצעות משכון,
-Maximum Loan Amount,סכום הלוואה מקסימלי,
-Repayment Info,מידע על החזר,
-Total Payable Interest,סך הריבית לתשלום,
-Against Loan ,נגד הלוואה,
-Loan Interest Accrual,צבירת ריבית הלוואות,
-Amounts,סכומים,
-Pending Principal Amount,סכום עיקרי ממתין,
-Payable Principal Amount,סכום עיקרי לתשלום,
-Paid Principal Amount,סכום עיקרי בתשלום,
-Paid Interest Amount,סכום ריבית בתשלום,
-Process Loan Interest Accrual,צבירת ריבית בהלוואות,
-Repayment Schedule Name,שם לוח הזמנים להחזר,
Regular Payment,תשלום רגיל,
Loan Closure,סגירת הלוואה,
-Payment Details,פרטי תשלום,
-Interest Payable,יש לשלם ריבית,
-Amount Paid,הסכום ששולם,
-Principal Amount Paid,הסכום העיקרי ששולם,
-Repayment Details,פרטי החזר,
-Loan Repayment Detail,פרטי החזר הלוואה,
-Loan Security Name,שם ביטחון הלוואה,
-Unit Of Measure,יחידת מידה,
-Loan Security Code,קוד אבטחת הלוואות,
-Loan Security Type,סוג אבטחת הלוואה,
-Haircut %,תספורת%,
-Loan Details,פרטי הלוואה,
-Unpledged,ללא פסים,
-Pledged,התחייב,
-Partially Pledged,משועבד חלקית,
-Securities,ניירות ערך,
-Total Security Value,ערך אבטחה כולל,
-Loan Security Shortfall,מחסור בביטחון הלוואות,
-Loan ,לְהַלווֹת,
-Shortfall Time,זמן מחסור,
-America/New_York,אמריקה / ניו_יורק,
-Shortfall Amount,סכום חסר,
-Security Value ,ערך אבטחה,
-Process Loan Security Shortfall,מחסור בביטחון הלוואות בתהליך,
-Loan To Value Ratio,יחס הלוואה לערך,
-Unpledge Time,זמן Unpledge,
-Loan Name,שם הלוואה,
Rate of Interest (%) Yearly,שיעור ריבית (%) שנתי,
-Penalty Interest Rate (%) Per Day,ריבית קנס (%) ליום,
-Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,ריבית קנס מוטלת על סכום הריבית בהמתנה על בסיס יומי במקרה של פירעון מאוחר,
-Grace Period in Days,תקופת החסד בימים,
-No. of days from due date until which penalty won't be charged in case of delay in loan repayment,מספר הימים ממועד פירעון ועד אשר לא ייגבה מהם קנס במקרה של עיכוב בהחזר ההלוואה,
-Pledge,מַשׁכּוֹן,
-Post Haircut Amount,סכום תספורת פוסט,
-Process Type,סוג התהליך,
-Update Time,עדכון זמן,
-Proposed Pledge,התחייבות מוצעת,
-Total Payment,תשלום כולל,
-Balance Loan Amount,סכום הלוואה יתרה,
-Is Accrued,נצבר,
Salary Slip Loan,הלוואת תלוש משכורת,
Loan Repayment Entry,הכנסת החזר הלוואות,
-Sanctioned Loan Amount,סכום הלוואה בסנקציה,
-Sanctioned Amount Limit,מגבלת סכום בסנקציה,
-Unpledge,Unpledge,
-Haircut,תִספּוֹרֶת,
MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-,
Generate Schedule,צור לוח זמנים,
Schedules,לוחות זמנים,
@@ -7885,7 +7749,6 @@
Update Series,סדרת עדכון,
Change the starting / current sequence number of an existing series.,לשנות את מתחיל / מספר הרצף הנוכחי של סדרות קיימות.,
Prefix,קידומת,
-Current Value,ערך נוכחי,
This is the number of the last created transaction with this prefix,זהו המספר של העסקה יצרה האחרונה עם קידומת זו,
Update Series Number,עדכון סדרת מספר,
Quotation Lost Reason,סיבה אבודה ציטוט,
@@ -8516,8 +8379,6 @@
Itemwise Recommended Reorder Level,Itemwise מומלץ להזמנה חוזרת רמה,
Lead Details,פרטי לידים,
Lead Owner Efficiency,יעילות בעלים מובילה,
-Loan Repayment and Closure,החזר וסגירת הלוואות,
-Loan Security Status,מצב אבטחת הלוואה,
Lost Opportunity,הזדמנות אבודה,
Maintenance Schedules,לוחות זמנים תחזוקה,
Material Requests for which Supplier Quotations are not created,בקשות מהותיות שלציטוטי ספק הם לא נוצרו,
@@ -8608,7 +8469,6 @@
Counts Targeted: {0},ספירות ממוקדות: {0},
Payment Account is mandatory,חשבון תשלום הוא חובה,
"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","אם מסומן, הסכום המלא ינוכה מההכנסה החייבת לפני חישוב מס הכנסה ללא הצהרה או הגשת הוכחה.",
-Disbursement Details,פרטי התשלום,
Material Request Warehouse,מחסן בקשת חומרים,
Select warehouse for material requests,בחר מחסן לבקשות חומר,
Transfer Materials For Warehouse {0},העברת חומרים למחסן {0},
@@ -8996,9 +8856,6 @@
Repay unclaimed amount from salary,החזר סכום שלא נתבע מהמשכורת,
Deduction from salary,ניכוי משכר,
Expired Leaves,עלים שפג תוקפם,
-Reference No,מספר סימוכין,
-Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,אחוז תספורת הוא אחוז ההפרש בין שווי השוק של נייר הערך לבין הערך המיוחס לאותה נייר ערך בהיותו משמש כבטוחה להלוואה זו.,
-Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,יחס הלוואה לערך מבטא את היחס בין סכום ההלוואה לבין ערך הנייר הערבות שהועבד. מחסור בביטחון הלוואות יופעל אם זה יורד מהערך שצוין עבור הלוואה כלשהי,
If this is not checked the loan by default will be considered as a Demand Loan,אם זה לא מסומן ההלוואה כברירת מחדל תיחשב כהלוואת דרישה,
This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,חשבון זה משמש להזמנת החזרי הלוואות מהלווה וגם להוצאת הלוואות ללווה,
This account is capital account which is used to allocate capital for loan disbursal account ,חשבון זה הוא חשבון הון המשמש להקצאת הון לחשבון פרסום הלוואות,
@@ -9462,13 +9319,6 @@
Operation {0} does not belong to the work order {1},פעולה {0} אינה שייכת להזמנת העבודה {1},
Print UOM after Quantity,הדפס UOM לאחר כמות,
Set default {0} account for perpetual inventory for non stock items,הגדר חשבון {0} ברירת מחדל למלאי תמידי עבור פריטים שאינם במלאי,
-Loan Security {0} added multiple times,אבטחת הלוואות {0} נוספה מספר פעמים,
-Loan Securities with different LTV ratio cannot be pledged against one loan,לא ניתן לשעבד ניירות ערך בהלוואות עם יחס LTV שונה כנגד הלוואה אחת,
-Qty or Amount is mandatory for loan security!,כמות או סכום חובה להבטחת הלוואות!,
-Only submittted unpledge requests can be approved,ניתן לאשר רק בקשות שלא הונפקו שלוחה,
-Interest Amount or Principal Amount is mandatory,סכום ריבית או סכום עיקרי הם חובה,
-Disbursed Amount cannot be greater than {0},הסכום המושתל לא יכול להיות גדול מ- {0},
-Row {0}: Loan Security {1} added multiple times,שורה {0}: אבטחת הלוואות {1} נוספה מספר פעמים,
Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,שורה מספר {0}: פריט ילד לא אמור להיות חבילה של מוצרים. הסר את הפריט {1} ושמור,
Credit limit reached for customer {0},תקרת אשראי הושגה עבור הלקוח {0},
Could not auto create Customer due to the following missing mandatory field(s):,לא ניתן היה ליצור אוטומטית את הלקוח בגלל שדות החובה הבאים חסרים:,