Merge branch 'develop' of https://github.com/frappe/erpnext into custom_append_to
diff --git a/README.md b/README.md
index ed57a17..80ebdb6 100644
--- a/README.md
+++ b/README.md
@@ -15,18 +15,18 @@
ERPNext as a monolith includes the following areas for managing businesses:
-1. [Accounting](https://erpnext.com/docs/user/manual/en/accounts)
-1. [Inventory](https://erpnext.com/docs/user/manual/en/stock)
-1. [CRM](https://erpnext.com/docs/user/manual/en/CRM)
-1. [Sales](https://erpnext.com/docs/user/manual/en/selling)
-1. [Purchase](https://erpnext.com/docs/user/manual/en/buying)
-1. [HRMS](https://erpnext.com/docs/user/manual/en/human-resources)
-1. [Project Management](https://erpnext.com/docs/user/manual/en/projects)
-1. [Support](https://erpnext.com/docs/user/manual/en/support)
-1. [Asset Management](https://erpnext.com/docs/user/manual/en/asset)
+1. [Accounting](https://erpnext.com/open-source-accounting)
+1. [Inventory](https://erpnext.com/distribution/inventory-management-system)
+1. [CRM](https://erpnext.com/open-source-crm)
+1. [Sales](https://erpnext.com/open-source-sales-purchase)
+1. [Purchase](https://erpnext.com/open-source-sales-purchase)
+1. [HRMS](https://erpnext.com/open-source-hrms)
+1. [Project Management](https://erpnext.com/open-source-projects)
+1. [Support](https://erpnext.com/open-source-help-desk-software)
+1. [Asset Management](https://erpnext.com/open-source-asset-management-software)
1. [Quality Management](https://erpnext.com/docs/user/manual/en/quality-management)
-1. [Manufacturing](https://erpnext.com/docs/user/manual/en/manufacturing)
-1. [Website Management](https://erpnext.com/docs/user/manual/en/website)
+1. [Manufacturing](https://erpnext.com/open-source-manufacturing-erp-software)
+1. [Website Management](https://erpnext.com/open-source-website-builder-software)
1. [Customize ERPNext](https://erpnext.com/docs/user/manual/en/customize-erpnext)
1. [And More](https://erpnext.com/docs/user/manual/en/)
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index f40b957..786b9cf 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
from erpnext.hooks import regional_overrides
from frappe.utils import getdate
-__version__ = '12.2.0'
+__version__ = '12.0.0-dev'
def get_default_company(user=None):
'''Get default company for user'''
diff --git a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
index 569767e..c3e2f7d 100644
--- a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
+++ b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
@@ -26,7 +26,7 @@
to_date = chart.to_date
timegrain = chart.time_interval
- filters = frappe.parse_json(chart.filters_json)
+ filters = frappe.parse_json(filters) or frappe.parse_json(chart.filters_json)
account = filters.get("account")
company = filters.get("company")
diff --git a/erpnext/accounts/doctype/account/account.json b/erpnext/accounts/doctype/account/account.json
index 64efc27..af252e6 100644
--- a/erpnext/accounts/doctype/account/account.json
+++ b/erpnext/accounts/doctype/account/account.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"allow_copy": 1,
"allow_import": 1,
"creation": "2013-01-30 12:49:46",
@@ -196,10 +197,13 @@
],
"icon": "fa fa-money",
"idx": 1,
- "modified": "2019-10-10 19:10:02.967554",
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-18 17:57:52.063233",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
+ "nsm_parent_field": "parent_account",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index d5a36b8..0a72d4f 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -102,7 +102,7 @@
if not frappe.db.get_value("Account",
{'account_name': self.account_name, 'company': ancestors[0]}, 'name'):
frappe.throw(_("Please add the account to root level Company - %s" % ancestors[0]))
- else:
+ elif self.parent_account:
descendants = get_descendants_of('Company', self.company)
if not descendants: return
parent_acc_name_map = {}
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
index adfa9f8..3fc109b 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
@@ -406,11 +406,11 @@
"is_group": 1,
"Bewertungskorrektur zu Forderungen aus Lieferungen und Leistungen": {
"account_number": "9960"
- },
- "Debitoren": {
- "is_group": 1,
- "account_number": "10000"
- },
+ },
+ "Debitoren": {
+ "is_group": 1,
+ "account_number": "10000"
+ },
"Forderungen aus Lieferungen und Leistungen": {
"account_number": "1200",
"account_type": "Receivable"
@@ -663,16 +663,22 @@
"account_number": "1400"
},
"Abziehbare Vorsteuer 7 %": {
- "account_number": "1401"
+ "account_number": "1401",
+ "account_type": "Tax",
+ "tax_rate": 7.0
},
"Abziehbare Vorsteuer aus innergem. Erwerb": {
"account_number": "1402"
},
"Abziehbare Vorsteuer aus innergem. Erwerb 19%": {
- "account_number": "1404"
+ "account_number": "1404",
+ "account_type": "Tax",
+ "tax_rate": 19.0
},
"Abziehbare Vorsteuer 19 %": {
- "account_number": "1406"
+ "account_number": "1406",
+ "account_type": "Tax",
+ "tax_rate": 19.0
},
"Abziehbare Vorsteuer nach \u00a7 13b UStG 19 %": {
"account_number": "1407"
@@ -911,17 +917,31 @@
"is_group": 1,
"I - Gezeichnetes Kapital": {
"account_type": "Equity",
- "is_group": 1
+ "is_group": 1,
+ "Gezeichnetes Kapital": {
+ "account_type": "Equity",
+ "account_number": "2900"
+ },
+ "Ausstehende Einlagen auf das gezeichnete Kapital": {
+ "account_number": "2910",
+ "is_group": 1
+ }
},
"II - Kapitalr\u00fccklage": {
"account_type": "Equity",
- "is_group": 1
+ "is_group": 1,
+ "Kapitalr\u00fccklage": {
+ "account_number": "2920"
+ }
},
"III - Gewinnr\u00fccklagen": {
"account_type": "Equity",
"1 - gesetzliche R\u00fccklage": {
"account_type": "Equity",
- "is_group": 1
+ "is_group": 1,
+ "Gesetzliche R\u00fccklage": {
+ "account_number": "2930"
+ }
},
"2 - R\u00fccklage f. Anteile an einem herrschenden oder mehrheitlich beteiligten Unternehmen": {
"account_type": "Equity",
@@ -929,7 +949,10 @@
},
"3 - satzungsm\u00e4\u00dfige R\u00fccklagen": {
"account_type": "Equity",
- "is_group": 1
+ "is_group": 1,
+ "Satzungsm\u00e4\u00dfige R\u00fccklagen": {
+ "account_number": "2950"
+ }
},
"4 - andere Gewinnr\u00fccklagen": {
"account_type": "Equity",
@@ -963,7 +986,13 @@
},
"IV - Gewinnvortrag/Verlustvortrag": {
"account_type": "Equity",
- "is_group": 1
+ "is_group": 1,
+ "Gewinnvortrag vor Verwendung": {
+ "account_number": "2970"
+ },
+ "Verlustvortrag vor Verwendung": {
+ "account_number": "2978"
+ }
},
"V - Jahres\u00fcberschu\u00df/Jahresfehlbetrag": {
"account_type": "Equity",
@@ -1197,15 +1226,15 @@
"is_group": 1,
"Bewertungskorrektur zu Verb. aus Lieferungen und Leistungen": {
"account_number": "9964"
- },
- "Kreditoren": {
- "account_number": "70000",
- "is_group": 1,
- "Wareneingangs-Verrechnungskonto" : {
- "account_number": "70001",
- "account_type": "Stock Received But Not Billed"
- }
- },
+ },
+ "Kreditoren": {
+ "account_number": "70000",
+ "is_group": 1,
+ "Wareneingangs-Verrechnungskonto" : {
+ "account_number": "70001",
+ "account_type": "Stock Received But Not Billed"
+ }
+ },
"Verb. aus Lieferungen und Leistungen": {
"account_number": "3300",
"account_type": "Payable"
@@ -1488,17 +1517,21 @@
},
"Umsatzsteuer 7 %": {
"account_number": "3801",
- "account_type": "Tax"
+ "account_type": "Tax",
+ "tax_rate": 7.0
},
"Umsatzsteuer aus innergem. Erwerb": {
"account_number": "3802"
},
"Umsatzsteuer aus innergem. Erwerb 19 %": {
- "account_number": "3804"
+ "account_number": "3804",
+ "account_type": "Tax",
+ "tax_rate": 19.0
},
"Umsatzsteuer 19 %": {
"account_number": "3806",
- "account_type": "Tax"
+ "account_type": "Tax",
+ "tax_rate": 19.0
},
"Umsatzsteuer aus im Inland steuerpfl. EU-Lieferungen": {
"account_number": "3807"
@@ -1653,7 +1686,15 @@
"Erl\u00f6se 7 % USt": {
"account_number": "4300",
"account_type": "Income Account"
- },
+ },
+ "Erl\u00f6se 16 % USt": {
+ "account_number": "4340",
+ "account_type": "Income Account"
+ },
+ "Erl\u00f6se 19 % USt": {
+ "account_number": "4400",
+ "account_type": "Income Account"
+ },
"Erl\u00f6se aus im Inland steuerpfl. EU-Lieferungen 7 % USt": {
"account_number": "4310"
},
@@ -1681,19 +1722,6 @@
"Erl\u00f6se aus im anderen EU-Land steuerbaren Leistungen, im Inland nicht steuerbare Ums\u00e4tze": {
"account_number": "4339"
},
- "Erl\u00f6se 16 % USt (Gruppe)": {
- "is_group": 1,
- "Erl\u00f6se 16 % USt": {
- "account_number": "4340"
- }
- },
- "Erl\u00f6se 19 % USt (Gruppe)": {
- "is_group": 1,
- "Erl\u00f6se 19 % USt": {
- "account_number": "4400",
- "account_type": "Income Account"
- }
- },
"Grundst\u00fccksertr\u00e4ge (Gruppe)": {
"is_group": 1,
"Grundst\u00fccksertr\u00e4ge": {
@@ -1752,14 +1780,12 @@
"2 - Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": {
"root_type": "Expense",
"is_group": 1,
- "Herstellungskosten (Gruppe)": {
- "Herstellungskosten": {
- "account_number": "6990",
- "account_type": "Cost of Goods Sold"
- },
- "Herstellungskosten: Schwund": {
- "account_type": "Stock Adjustment"
- }
+ "Herstellungskosten": {
+ "account_number": "6990",
+ "account_type": "Cost of Goods Sold"
+ },
+ "Herstellungskosten: Schwund": {
+ "account_type": "Stock Adjustment"
},
"Aufwendungen f. Roh-, Hilfs- und Betriebsstoffe und f. bezogene Waren": {
"account_number": "5000",
@@ -1809,10 +1835,10 @@
"Energiestoffe (Fertigung)": {
"account_number": "5190"
},
- "Energiestoffe (Fertigung)7% Vorsteuer": {
+ "Energiestoffe (Fertigung) 7% Vorsteuer": {
"account_number": "5191"
},
- "Energiestoffe (Fertigung)19% Vorsteuer": {
+ "Energiestoffe (Fertigung) 19% Vorsteuer": {
"account_number": "5192"
}
}
@@ -1935,49 +1961,49 @@
},
"Nachl\u00e4sse aus innergem. Erwerb 15 % Vorsteuer und 15 % Umsatzsteuer": {
"account_number": "5727"
- },
- "Erhaltene Skonti (Gruppe)": {
- "is_group": 1,
- "Erh. Skonti": {
- "account_number": "5730"
- },
- "Erh. Skonti 7 % Vorsteuer": {
- "account_number": "5731"
- },
- "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
- "account_number": "5733"
- },
- "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
- "account_number": "5734"
- },
- "Erh. Skonti 19 % Vorsteuer": {
- "account_number": "5736"
- },
- "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
- "account_number": "5738"
- },
- "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 19% Vorst. u. 19% Ust.": {
- "account_number": "5741"
- },
- "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 7% Vorst. u. 7% Ust.": {
- "account_number": "5743"
- },
- "Erh. Skonti aus steuerpflichtigem innergem. Erwerb": {
- "account_number": "5745"
- },
- "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 7% Vorst. u. 7% Ust.": {
- "account_number": "5746"
- },
- "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 19% Vorst. u. 19% Ust.": {
- "account_number": "5748"
- },
- "Erh. Skonti aus Erwerb Roh-,Hilfs-,Betriebsstoff letzter Abn.innerh.Dreiecksg. 19% Vorst. und 19% Ust.": {
- "account_number": "5792"
- },
- "Erh. Skonti aus Erwerb Waren als letzter Abnehmer innerh. Dreiecksgesch. 19% Vorst. u. 19% Ust.": {
- "account_number": "5793"
- }
- }
+ }
+ },
+ "Erhaltene Skonti (Gruppe)": {
+ "is_group": 1,
+ "Erh. Skonti": {
+ "account_number": "5730"
+ },
+ "Erh. Skonti 7 % Vorsteuer": {
+ "account_number": "5731"
+ },
+ "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
+ "account_number": "5733"
+ },
+ "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
+ "account_number": "5734"
+ },
+ "Erh. Skonti 19 % Vorsteuer": {
+ "account_number": "5736"
+ },
+ "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
+ "account_number": "5738"
+ },
+ "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 19% Vorst. u. 19% Ust.": {
+ "account_number": "5741"
+ },
+ "Erh. Skonti aus Einkauf Roh-, Hilfs- und Betriebsstoffe aus steuerpfl. innergem. Erwerb 7% Vorst. u. 7% Ust.": {
+ "account_number": "5743"
+ },
+ "Erh. Skonti aus steuerpflichtigem innergem. Erwerb": {
+ "account_number": "5745"
+ },
+ "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 7% Vorst. u. 7% Ust.": {
+ "account_number": "5746"
+ },
+ "Erh. Skonti aus steuerpflichtigem innergem. Erwerb 19% Vorst. u. 19% Ust.": {
+ "account_number": "5748"
+ },
+ "Erh. Skonti aus Erwerb Roh-,Hilfs-,Betriebsstoff letzter Abn.innerh.Dreiecksg. 19% Vorst. und 19% Ust.": {
+ "account_number": "5792"
+ },
+ "Erh. Skonti aus Erwerb Waren als letzter Abnehmer innerh. Dreiecksgesch. 19% Vorst. u. 19% Ust.": {
+ "account_number": "5793"
+ }
},
"Bezugsnebenkosten (Gruppe)": {
"is_group": 1,
@@ -2295,49 +2321,49 @@
},
"6 - sonstige betriebliche Ertr\u00e4ge": {
"root_type": "Income",
- "is_group": 1,
- "Erhaltene Boni (Gruppe)": {
- "is_group": 1,
- "Erhaltene Boni 7 % Vorsteuer": {
- "account_number": "5750"
- },
- "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
- "account_number": "5753"
- },
- "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
- "account_number": "5754"
- },
- "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
- "account_number": "5755"
- },
- "Erhaltene Boni 19 % Vorsteuer": {
- "account_number": "5760"
- },
- "Erhaltene Boni": {
- "account_number": "5769"
- }
- },
- "Erhaltene Rabatte (Gruppe)": {
- "is_group": 1,
- "Erhaltene Rabatte": {
- "account_number": "5770"
- },
- "Erhaltene Rabatte 7 % Vorsteuer": {
- "account_number": "5780"
- },
- "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
- "account_number": "5783"
- },
- "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
- "account_number": "5784"
- },
- "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
- "account_number": "5785"
- },
- "Erhaltene Rabatte 19 % Vorsteuer": {
- "account_number": "5790"
- }
- },
+ "is_group": 1,
+ "Erhaltene Boni (Gruppe)": {
+ "is_group": 1,
+ "Erhaltene Boni 7 % Vorsteuer": {
+ "account_number": "5750"
+ },
+ "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
+ "account_number": "5753"
+ },
+ "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
+ "account_number": "5754"
+ },
+ "Erhaltene Boni aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
+ "account_number": "5755"
+ },
+ "Erhaltene Boni 19 % Vorsteuer": {
+ "account_number": "5760"
+ },
+ "Erhaltene Boni": {
+ "account_number": "5769"
+ }
+ },
+ "Erhaltene Rabatte (Gruppe)": {
+ "is_group": 1,
+ "Erhaltene Rabatte": {
+ "account_number": "5770"
+ },
+ "Erhaltene Rabatte 7 % Vorsteuer": {
+ "account_number": "5780"
+ },
+ "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe": {
+ "account_number": "5783"
+ },
+ "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 7% Vorsteuer": {
+ "account_number": "5784"
+ },
+ "Erhaltene Rabatte aus Einkauf Roh-, Hilfs- und Betriebsstoffe 19% Vorsteuer": {
+ "account_number": "5785"
+ },
+ "Erhaltene Rabatte 19 % Vorsteuer": {
+ "account_number": "5790"
+ }
+ },
"Andere aktivierte Eigenleistungen": {
"account_number": "4820"
},
@@ -2407,29 +2433,26 @@
"Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen (bei Buchgewinn)": {
"account_number": "4849"
},
- "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn) (Gruppe)": {
- "is_group": 1,
- "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn)": {
- "account_number": "4850"
- },
- "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchgewinn)": {
- "account_number": "4851"
- },
- "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl\u00e4ndische Kap.Ges., bei Buchgewinn)": {
- "account_number": "4852"
- },
- "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchvergewinn)": {
- "account_number": "4855"
- },
- "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchgewinn)": {
- "account_number": "4856"
- },
- "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchgewinn)": {
- "account_number": "4857"
- },
- "Anlagenabg\u00e4nge Finanzanlagen (inl\u00e4ndische Kap.Ges., Restbuchwert bei Buchgewinn)": {
- "account_number": "4858"
- }
+ "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn)": {
+ "account_number": "4850"
+ },
+ "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchgewinn)": {
+ "account_number": "4851"
+ },
+ "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl\u00e4ndische Kap.Ges., bei Buchgewinn)": {
+ "account_number": "4852"
+ },
+ "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchvergewinn)": {
+ "account_number": "4855"
+ },
+ "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchgewinn)": {
+ "account_number": "4856"
+ },
+ "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchgewinn)": {
+ "account_number": "4857"
+ },
+ "Anlagenabg\u00e4nge Finanzanlagen (inl\u00e4ndische Kap.Ges., Restbuchwert bei Buchgewinn)": {
+ "account_number": "4858"
},
"Ertr\u00e4ge aus Zuschreibungen des Sachanlageverm\u00f6gens": {
"account_number": "4910",
@@ -2552,20 +2575,17 @@
"Entnahme von Gegenst\u00e4nden ohne USt": {
"account_number": "4605"
},
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt (Gruppe)": {
- "is_group": 1,
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt": {
- "account_number": "4630"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt": {
- "account_number": "4637"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternnehmens ohne USt (Telefon-Nutzung)": {
- "account_number": "4638"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt (Kfz-Nutzung)": {
- "account_number": "4639"
- }
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt": {
+ "account_number": "4630"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt": {
+ "account_number": "4637"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternnehmens ohne USt (Telefon-Nutzung)": {
+ "account_number": "4638"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt (Kfz-Nutzung)": {
+ "account_number": "4639"
},
"Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt (Gruppe)": {
"is_group": 1,
@@ -2603,14 +2623,11 @@
"Unentgeltliche Zuwendung von Gegenst\u00e4nden ohne USt": {
"account_number": "4689"
},
- "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze) (Gruppe)": {
- "is_group": 1,
- "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze)": {
- "account_number": "4690"
- },
- "Umsatzsteuerverg\u00fctungen, z.B. nach \u00a7 24 UStG": {
- "account_number": "4695"
- }
+ "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze)": {
+ "account_number": "4690"
+ },
+ "Umsatzsteuerverg\u00fctungen, z.B. nach \u00a7 24 UStG": {
+ "account_number": "4695"
},
"Au\u00dferordentliche Ertr\u00e4ge (Gruppe)": {
"is_group": 1,
@@ -2620,48 +2637,42 @@
"Au\u00dferordentliche Ertr\u00e4ge finanzwirksam": {
"account_number": "7401"
},
- "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam (Gruppe)": {
- "is_group": 1,
- "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam": {
- "account_number": "7450"
- },
- "Ertr\u00e4ge durch Verschmelzung und Umwandlung": {
- "account_number": "7451"
- },
- "Ertr\u00e4ge durch den Verkauf von bedeutenden Beteiligungen": {
- "account_number": "7452"
- },
- "Ert\u00e4ge durch den Verkauf von bedeutenden Grundst\u00fccken": {
- "account_number": "7453"
- },
- "Gewinn aus der Ver\u00e4u\u00dferung oder der Aufgabe von Gesch\u00e4ftsaktivit\u00e4ten nach Steuern": {
- "account_number": "7454"
- }
+ "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam": {
+ "account_number": "7450"
},
- "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften (Gruppe)": {
- "is_group": 1,
- "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften": {
- "account_number": "7460"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Sachanlageverm\u00f6gen": {
- "account_number": "7461"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Finanzanlageverm\u00f6gen": {
- "account_number": "7462"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Wertpapiere im Umlaufverm\u00f6gen": {
- "account_number": "7463"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: latente Steuern": {
- "account_number": "7464"
- }
+ "Ertr\u00e4ge durch Verschmelzung und Umwandlung": {
+ "account_number": "7451"
+ },
+ "Ertr\u00e4ge durch den Verkauf von bedeutenden Beteiligungen": {
+ "account_number": "7452"
+ },
+ "Ert\u00e4ge durch den Verkauf von bedeutenden Grundst\u00fccken": {
+ "account_number": "7453"
+ },
+ "Gewinn aus der Ver\u00e4u\u00dferung oder der Aufgabe von Gesch\u00e4ftsaktivit\u00e4ten nach Steuern": {
+ "account_number": "7454"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften": {
+ "account_number": "7460"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Sachanlageverm\u00f6gen": {
+ "account_number": "7461"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Finanzanlageverm\u00f6gen": {
+ "account_number": "7462"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Wertpapiere im Umlaufverm\u00f6gen": {
+ "account_number": "7463"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: latente Steuern": {
+ "account_number": "7464"
}
}
},
"7 - sonstige betriebliche Aufwendungen": {
"root_type": "Expense",
- "is_group": 1,
- "Erl\u00f6sschm\u00e4lerungen (Gruppe)": {
+ "is_group": 1,
+ "Erl\u00f6sschm\u00e4lerungen (Gruppe)": {
"is_group": 1,
"Erl\u00f6sschm\u00e4lerungen": {
"account_number": "4700"
@@ -2692,40 +2703,43 @@
},
"Erl\u00f6sschm\u00e4lerungen aus im Inland steuerpfl. EU-Lieferungen 16 % USt": {
"account_number": "4729"
+ }
+ },
+ "Gew\u00e4hrte Skonti (Gruppe)": {
+ "is_group": 1,
+ "Gew. Skonti": {
+ "account_number": "4730"
},
- "Gew\u00e4hrte Skonti (Gruppe)": {
- "is_group": 1,
- "Gew. Skonti": {
- "account_number": "4730"
- },
- "Gew. Skonti 7 % USt": {
- "account_number": "4731"
- },
- "Gew. Skonti 19 % USt": {
- "account_number": "4736"
- },
- "Gew. Skonti aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": {
- "account_number": "4738"
- },
- "Gew. Skonti aus Leistungen, f. die der Leistungsempf. die Umsatzsteuer nach \u00a7 13b UStG schuldet": {
- "account_number": "4741"
- },
- "Gew. Skonti aus Erl\u00f6sen aus im anderen EU-Land steuerpfl. Leistungen, f. die der Leistungsempf. die Ust. schuldet": {
- "account_number": "4742"
- },
- "Gew. Skonti aus steuerfreien innergem. Lieferungen \u00a7 4 Nr. 1b UStG": {
- "account_number": "4743"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen": {
- "account_number": "4745"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 7% USt": {
- "account_number": "4746"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 19% USt": {
- "account_number": "4748"
- }
+ "Gew. Skonti 7 % USt": {
+ "account_number": "4731"
},
+ "Gew. Skonti 19 % USt": {
+ "account_number": "4736"
+ },
+ "Gew. Skonti aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": {
+ "account_number": "4738"
+ },
+ "Gew. Skonti aus Leistungen, f. die der Leistungsempf. die Umsatzsteuer nach \u00a7 13b UStG schuldet": {
+ "account_number": "4741"
+ },
+ "Gew. Skonti aus Erl\u00f6sen aus im anderen EU-Land steuerpfl. Leistungen, f. die der Leistungsempf. die Ust. schuldet": {
+ "account_number": "4742"
+ },
+ "Gew. Skonti aus steuerfreien innergem. Lieferungen \u00a7 4 Nr. 1b UStG": {
+ "account_number": "4743"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen": {
+ "account_number": "4745"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 7% USt": {
+ "account_number": "4746"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 19% USt": {
+ "account_number": "4748"
+ }
+ },
+ "Gew\u00e4hrte Boni (Gruppe)": {
+ "is_group": 1,
"Gew\u00e4hrte Boni 7 % USt": {
"account_number": "4750"
},
@@ -2744,7 +2758,7 @@
"Gew\u00e4hrte Rabatte 19 % USt": {
"account_number": "4790"
}
- },
+ },
"Sonstige betriebliche Aufwendungen": {
"account_number": "6300"
},
@@ -2838,103 +2852,79 @@
"account_number": "6398"
}
},
- "Versicherungen (Gruppe)": {
- "is_group": 1,
- "Versicherungen": {
- "account_number": "6400"
- },
- "Versicherungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": {
- "account_number": "6405"
- },
- "Netto-Pr\u00e4mie f. R\u00fcckdeckung k\u00fcnftiger Versorgungsleistungen": {
- "account_number": "6410"
- },
- "Beitr\u00e4ge": {
- "account_number": "6420"
- },
- "Sonstige Abgaben": {
- "account_number": "6430"
- },
- "Steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
- "account_number": "6436"
- },
- "Steuerlich nicht abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
- "account_number": "6437"
- },
- "Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes": {
- "account_number": "6440"
- },
- "Reparaturen und Instandhaltung von Bauten": {
- "account_number": "6450"
- },
- "Reparaturen und Instandhaltung von technischenAnlagen und Maschinen": {
- "account_number": "6460"
- },
- "Reparaturen und Instandhaltung von anderen Anlagen und Betriebs- und Gesch\u00e4ftsausstattung": {
- "account_number": "6470"
- },
- "Zuf\u00fchrung zu Aufwandsr\u00fcckstellungen": {
- "account_number": "6475"
- },
- "Reparaturen und Instandhaltung von anderen Anlagen": {
- "account_number": "6485"
- },
- "Sonstige Reparaturen und Instandhaltungen": {
- "account_number": "6490"
- },
- "Wartungskosten f. Hard- und Software": {
- "account_number": "6495"
- },
- "Mietleasing (bewegliche Wirtschaftsg\u00fcter)": {
- "account_number": "6498"
- }
+ "Versicherungen": {
+ "account_number": "6400"
+ },
+ "Versicherungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": {
+ "account_number": "6405"
+ },
+ "Netto-Pr\u00e4mie f. R\u00fcckdeckung k\u00fcnftiger Versorgungsleistungen": {
+ "account_number": "6410"
+ },
+ "Beitr\u00e4ge": {
+ "account_number": "6420"
+ },
+ "Sonstige Abgaben": {
+ "account_number": "6430"
+ },
+ "Steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
+ "account_number": "6436"
+ },
+ "Steuerlich nicht abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
+ "account_number": "6437"
+ },
+ "Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes": {
+ "account_number": "6440"
+ },
+ "Reparaturen und Instandhaltung von Bauten": {
+ "account_number": "6450"
+ },
+ "Reparaturen und Instandhaltung von technischenAnlagen und Maschinen": {
+ "account_number": "6460"
+ },
+ "Reparaturen und Instandhaltung von anderen Anlagen und Betriebs- und Gesch\u00e4ftsausstattung": {
+ "account_number": "6470"
+ },
+ "Zuf\u00fchrung zu Aufwandsr\u00fcckstellungen": {
+ "account_number": "6475"
+ },
+ "Reparaturen und Instandhaltung von anderen Anlagen": {
+ "account_number": "6485"
+ },
+ "Sonstige Reparaturen und Instandhaltungen": {
+ "account_number": "6490"
+ },
+ "Wartungskosten f. Hard- und Software": {
+ "account_number": "6495"
+ },
+ "Mietleasing (bewegliche Wirtschaftsg\u00fcter)": {
+ "account_number": "6498"
},
"Fahrzeugkosten (Gruppe)": {
"is_group": 1,
"Fahrzeugkosten": {
"account_number": "6500"
},
- "Kfz-Versicherungen (Gruppe)": {
- "is_group": 1,
- "Kfz-Versicherungen": {
- "account_number": "6520"
- }
+ "Kfz-Versicherungen": {
+ "account_number": "6520"
},
- "Laufende Kfz-Betriebskosten (Gruppe)": {
- "is_group": 1,
- "Laufende Kfz-Betriebskosten": {
- "account_number": "6530"
- }
+ "Laufende Kfz-Betriebskosten": {
+ "account_number": "6530"
},
- "Kfz-Reparaturen (Gruppe)": {
- "is_group": 1,
- "Kfz-Reparaturen": {
- "account_number": "6540"
- }
+ "Kfz-Reparaturen": {
+ "account_number": "6540"
},
- "Garagenmiete (Gruppe)": {
- "is_group": 1,
- "Garagenmiete": {
- "account_number": "6550"
- }
+ "Garagenmiete": {
+ "account_number": "6550"
},
- "Mietleasing Kfz (Gruppe)": {
- "is_group": 1,
- "Mietleasing Kfz": {
- "account_number": "6560"
- }
+ "Mietleasing Kfz": {
+ "account_number": "6560"
},
- "Sonstige Kfz-Kosten (Gruppe)": {
- "is_group": 1,
- "Sonstige Kfz-Kosten": {
- "account_number": "6570"
- }
+ "Sonstige Kfz-Kosten": {
+ "account_number": "6570"
},
- "Mautgeb\u00fchren (Gruppe)": {
- "is_group": 1,
- "Mautgeb\u00fchren": {
- "account_number": "6580"
- }
+ "Mautgeb\u00fchren": {
+ "account_number": "6580"
},
"Kfz-Kosten f. betrieblich genutzte zum Privatverm\u00f6gen geh\u00f6rende Kraftfahrzeuge": {
"account_number": "6590"
@@ -2996,20 +2986,23 @@
"Nicht abzugsf\u00e4hige Betriebsausgaben aus Werbe- und Repr\u00e4sentationskosten": {
"account_number": "6645"
},
- "Reisekosten Arbeitnehmer": {
- "account_number": "6650"
- },
- "Reisekosten Arbeitnehmer \u00dcbernachtungsaufwand": {
- "account_number": "6660"
- },
- "Reisekosten Arbeitnehmer Fahrtkosten": {
- "account_number": "6663"
- },
- "Reisekosten Arbeitnehmer Verpflegungsmehraufwand": {
- "account_number": "6664"
- },
- "Kilometergelderstattung Arbeitnehmer": {
- "account_number": "6668"
+ "Reisekosten Arbeitnehmer (Gruppe)": {
+ "is_group": 1,
+ "Reisekosten Arbeitnehmer": {
+ "account_number": "6650"
+ },
+ "Reisekosten Arbeitnehmer \u00dcbernachtungsaufwand": {
+ "account_number": "6660"
+ },
+ "Reisekosten Arbeitnehmer Fahrtkosten": {
+ "account_number": "6663"
+ },
+ "Reisekosten Arbeitnehmer Verpflegungsmehraufwand": {
+ "account_number": "6664"
+ },
+ "Kilometergelderstattung Arbeitnehmer": {
+ "account_number": "6668"
+ }
},
"Reisekosten Unternehmer (Gruppe)": {
"is_group": 1,
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
index a36f421..3c12f85 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.js
@@ -48,12 +48,6 @@
frm.set_value('label', frm.doc.document_type);
frm.set_value('fieldname', frappe.model.scrub(frm.doc.document_type));
- if (frm.is_new()){
- let row = frappe.model.add_child(frm.doc, "Accounting Dimension Detail", "dimension_defaults");
- row.reference_document = frm.doc.document_type;
- frm.refresh_fields("dimension_defaults");
- }
-
frappe.db.get_value('Accounting Dimension', {'document_type': frm.doc.document_type}, 'document_type', (r) => {
if (r && r.document_type) {
frm.set_df_property('document_type', 'description', "Document type is already set as dimension");
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
index cf6dc7a..cf55d55 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "field:label",
"creation": "2019-05-04 18:13:37.002352",
"doctype": "DocType",
@@ -46,7 +47,8 @@
"options": "Accounting Dimension Detail"
}
],
- "modified": "2019-07-17 16:49:31.134385",
+ "links": [],
+ "modified": "2020-03-22 20:34:39.805728",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Dimension",
@@ -63,9 +65,20 @@
"role": "System Manager",
"share": 1,
"write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts Manager",
+ "share": 1,
+ "write": 1
}
],
- "quick_entry": 1,
"sort_field": "modified",
"sort_order": "ASC",
"track_changes": 1
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
index 522ed4f..462d967 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
@@ -172,7 +172,7 @@
return doclist
def get_accounting_dimensions(as_list=True):
- accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["label", "fieldname", "disabled"])
+ accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["label", "fieldname", "disabled", "document_type"])
if as_list:
return [d.fieldname for d in accounting_dimensions]
@@ -186,6 +186,18 @@
return dimensions
+def get_dimension_with_children(doctype, dimension):
+
+ if isinstance(dimension, list):
+ dimension = dimension[0]
+
+ all_dimensions = []
+ lft, rgt = frappe.db.get_value(doctype, dimension, ["lft", "rgt"])
+ children = frappe.get_all(doctype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]})
+ all_dimensions += [c.name for c in children]
+
+ return all_dimensions
+
@frappe.whitelist()
def get_dimension_filters():
dimension_filters = frappe.db.sql("""
diff --git a/erpnext/accounts/doctype/accounts_settings/regional/united_states.js b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
new file mode 100644
index 0000000..d47d6e5
--- /dev/null
+++ b/erpnext/accounts/doctype/accounts_settings/regional/united_states.js
@@ -0,0 +1,8 @@
+
+frappe.ui.form.on('Accounts Settings', {
+ refresh: function(frm) {
+ frm.set_df_property("acc_frozen_upto", "label", "Books Closed Through");
+ frm.set_df_property("frozen_accounts_modifier", "label", "Role Allowed to Close Books & Make Changes to Closed Periods");
+ frm.set_df_property("credit_controller", "label", "Credit Manager");
+ }
+});
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/bank/bank.js b/erpnext/accounts/doctype/bank/bank.js
index 463d29c..de9498e 100644
--- a/erpnext/accounts/doctype/bank/bank.js
+++ b/erpnext/accounts/doctype/bank/bank.js
@@ -7,7 +7,20 @@
},
refresh: function(frm) {
add_fields_to_mapping_table(frm);
- }
+
+ frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Bank' };
+
+ frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
+
+ if (frm.doc.__islocal) {
+ frm.set_df_property('address_and_contact', 'hidden', 1);
+ frappe.contacts.clear_address_and_contact(frm);
+ }
+ else {
+ frm.set_df_property('address_and_contact', 'hidden', 0);
+ frappe.contacts.render_address_and_contact(frm);
+ }
+ },
});
diff --git a/erpnext/accounts/doctype/bank/bank.json b/erpnext/accounts/doctype/bank/bank.json
index 4fa0e4f..99978e6 100644
--- a/erpnext/accounts/doctype/bank/bank.json
+++ b/erpnext/accounts/doctype/bank/bank.json
@@ -1,224 +1,137 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "autoname": "field:bank_name",
- "beta": 0,
- "creation": "2018-04-07 16:59:59.496668",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
+ "actions": [],
+ "allow_import": 1,
+ "allow_rename": 1,
+ "autoname": "field:bank_name",
+ "creation": "2018-04-07 16:59:59.496668",
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "bank_details_section",
+ "bank_name",
+ "swift_number",
+ "column_break_1",
+ "branch_code",
+ "website",
+ "address_and_contact",
+ "address_html",
+ "column_break_13",
+ "contact_html",
+ "data_import_configuration_section",
+ "bank_transaction_mapping",
+ "section_break_4",
+ "plaid_access_token"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "bank_name",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Bank Name",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
+ "fieldname": "bank_name",
+ "fieldtype": "Data",
+ "label": "Bank Name",
+ "reqd": 1,
"unique": 1
- },
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 1,
- "columns": 0,
- "fieldname": "data_import_configuration_section",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Data Import Configuration",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
+ "fieldname": "bank_details_section",
+ "fieldtype": "Section Break",
+ "label": "Bank Details"
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "bank_transaction_mapping",
- "fieldtype": "Table",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Bank Transaction Mapping",
- "length": 0,
- "no_copy": 0,
- "options": "Bank Transaction Mapping",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
+ "allow_in_quick_entry": 1,
+ "fieldname": "swift_number",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "SWIFT number",
+ "unique": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_4",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
- },
+ "fieldname": "column_break_1",
+ "fieldtype": "Column Break",
+ "search_index": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "plaid_access_token",
- "fieldtype": "Data",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Plaid Access Token",
- "length": 0,
- "no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "allow_in_quick_entry": 1,
+ "fieldname": "branch_code",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Branch Code",
+ "unique": 1
+ },
+ {
+ "fieldname": "address_and_contact",
+ "fieldtype": "Section Break",
+ "label": "Address and Contact",
+ "options": "fa fa-map-marker"
+ },
+ {
+ "fieldname": "address_html",
+ "fieldtype": "HTML",
+ "label": "Address HTML"
+ },
+ {
+ "fieldname": "website",
+ "fieldtype": "Data",
+ "label": "Website"
+ },
+ {
+ "fieldname": "column_break_13",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "contact_html",
+ "fieldtype": "HTML",
+ "label": "Contact HTML"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "data_import_configuration_section",
+ "fieldtype": "Section Break",
+ "label": "Data Import Configuration"
+ },
+ {
+ "fieldname": "bank_transaction_mapping",
+ "fieldtype": "Table",
+ "label": "Bank Transaction Mapping",
+ "options": "Bank Transaction Mapping"
+ },
+ {
+ "fieldname": "section_break_4",
+ "fieldtype": "Section Break"
+ },
+ {
+ "fieldname": "plaid_access_token",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Plaid Access Token",
+ "no_copy": 1,
+ "read_only": 1
}
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-11-27 16:12:13.938776",
- "modified_by": "Administrator",
- "module": "Accounts",
- "name": "Bank",
- "name_case": "",
- "owner": "Administrator",
+ ],
+ "links": [],
+ "modified": "2020-03-25 21:22:33.496264",
+ "modified_by": "Administrator",
+ "module": "Accounts",
+ "name": "Bank",
+ "owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
"write": 1
}
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ ],
+ "quick_entry": 1,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/bank/bank.py b/erpnext/accounts/doctype/bank/bank.py
index b205d56..41aae14 100644
--- a/erpnext/accounts/doctype/bank/bank.py
+++ b/erpnext/accounts/doctype/bank/bank.py
@@ -5,6 +5,12 @@
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
+from frappe.contacts.address_and_contact import load_address_and_contact, delete_contact_and_address
class Bank(Document):
- pass
+ def onload(self):
+ """Load address and contacts in `__onload`"""
+ load_address_and_contact(self)
+
+ def on_trash(self):
+ delete_contact_and_address('Bank', self.name)
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/bank_account/bank_account.json b/erpnext/accounts/doctype/bank_account/bank_account.json
index c8ae26d..aa9c434 100644
--- a/erpnext/accounts/doctype/bank_account/bank_account.json
+++ b/erpnext/accounts/doctype/bank_account/bank_account.json
@@ -24,8 +24,6 @@
"iban",
"column_break_12",
"bank_account_no",
- "branch_code",
- "swift_number",
"address_and_contact",
"address_html",
"website",
@@ -146,17 +144,6 @@
"length": 30
},
{
- "fieldname": "branch_code",
- "fieldtype": "Data",
- "in_list_view": 1,
- "label": "Branch Code"
- },
- {
- "fieldname": "swift_number",
- "fieldtype": "Data",
- "label": "SWIFT number"
- },
- {
"fieldname": "address_and_contact",
"fieldtype": "Section Break",
"label": "Address and Contact",
@@ -213,7 +200,7 @@
}
],
"links": [],
- "modified": "2020-01-29 20:42:26.458316",
+ "modified": "2020-01-30 20:42:26.458316",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account",
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
index 0acbe20..065d25e 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
@@ -4,8 +4,8 @@
cur_frm.add_fetch('bank_account','account','account');
cur_frm.add_fetch('bank_account','bank_account_no','bank_account_no');
cur_frm.add_fetch('bank_account','iban','iban');
-cur_frm.add_fetch('bank_account','branch_code','branch_code');
-cur_frm.add_fetch('bank_account','swift_number','swift_number');
+cur_frm.add_fetch('bank','branch_code','branch_code');
+cur_frm.add_fetch('bank','swift_number','swift_number');
frappe.ui.form.on('Bank Guarantee', {
setup: function(frm) {
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py
index 9aa2ee2..f28a074 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.py
@@ -6,6 +6,7 @@
import frappe, json
from frappe.model.document import Document
from frappe import _
+from frappe.desk.search import sanitize_searchfield
class BankGuarantee(Document):
def validate(self):
@@ -22,5 +23,8 @@
@frappe.whitelist()
def get_vouchar_detials(column_list, doctype, docname):
+ column_list = json.loads(column_list)
+ for col in column_list:
+ sanitize_searchfield(col)
return frappe.db.sql(''' select {columns} from `tab{doctype}` where name=%s'''
.format(columns=", ".join(json.loads(column_list)), doctype=doctype), docname, as_dict=1)[0]
diff --git a/erpnext/accounts/doctype/c_form/c_form.js b/erpnext/accounts/doctype/c_form/c_form.js
index 3d0fc0a..846408f 100644
--- a/erpnext/accounts/doctype/c_form/c_form.js
+++ b/erpnext/accounts/doctype/c_form/c_form.js
@@ -32,10 +32,12 @@
invoice_no(frm, cdt, cdn) {
let d = frappe.get_doc(cdt, cdn);
- frm.call('get_invoice_details', {
- invoice_no: d.invoice_no
- }).then(r => {
- frappe.model.set_value(cdt, cdn, r.message);
- });
+ if (d.invoice_no) {
+ frm.call('get_invoice_details', {
+ invoice_no: d.invoice_no
+ }).then(r => {
+ frappe.model.set_value(cdt, cdn, r.message);
+ });
+ }
}
});
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.json b/erpnext/accounts/doctype/cost_center/cost_center.json
index 976f05a..99b89d1 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.json
+++ b/erpnext/accounts/doctype/cost_center/cost_center.json
@@ -124,11 +124,13 @@
],
"icon": "fa fa-money",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2020-01-28 13:50:23.430434",
+ "modified": "2020-03-18 17:59:04.321637",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center",
+ "nsm_parent_field": "parent_cost_center",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
index 0d5456e..1092f4c 100644
--- a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js
@@ -30,18 +30,10 @@
frm.doc.accounts.forEach(d=> {
total_amt = total_amt + d['new_balance_in_base_currency'];
});
- if(total_amt === r.sum) {
- frm.add_custom_button(__("Journal Entry"), function(){
- frappe.route_options = {
- 'reference_type': 'Exchange Rate Revaluation',
- 'reference_name': frm.doc.name
- };
- frappe.set_route("List", "Journal Entry");
- }, __("View"));
- } else {
- frm.add_custom_button(__('Create Journal Entry'), function() {
+ if(total_amt !== r.sum) {
+ frm.add_custom_button(__('Journal Entry'), function() {
return frm.events.make_jv(frm);
- });
+ }, __('Create'));
}
}, 'Journal Entry');
}
diff --git a/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation_dashboard.py b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation_dashboard.py
new file mode 100644
index 0000000..b5cfa04
--- /dev/null
+++ b/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation_dashboard.py
@@ -0,0 +1,11 @@
+from __future__ import unicode_literals
+
+def get_data():
+ return {
+ 'fieldname': 'reference_name',
+ 'transactions': [
+ {
+ 'items': ['Journal Entry']
+ }
+ ]
+ }
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json
index e64bc9e..2214811 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.json
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json
@@ -114,13 +114,13 @@
"fieldname": "debit_in_account_currency",
"fieldtype": "Currency",
"label": "Debit Amount in Account Currency",
- "options": "currency"
+ "options": "account_currency"
},
{
"fieldname": "credit_in_account_currency",
"fieldtype": "Currency",
"label": "Credit Amount in Account Currency",
- "options": "currency"
+ "options": "account_currency"
},
{
"fieldname": "against",
@@ -250,7 +250,7 @@
"icon": "fa fa-list",
"idx": 1,
"in_create": 1,
- "modified": "2020-02-10 04:54:57.777905",
+ "modified": "2020-03-28 16:22:33.766994",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GL Entry",
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index f9e4fd7..14d0531 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -233,35 +233,14 @@
frappe.throw(_("Outstanding for {0} cannot be less than zero ({1})").format(against_voucher, fmt_money(bal)))
if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]:
- update_outstanding_amt_in_ref(against_voucher, against_voucher_type, bal)
-
-def update_outstanding_amt_in_ref(against_voucher, against_voucher_type, bal):
- data = []
- # Update outstanding amt on against voucher
- if against_voucher_type == "Fees":
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
- ref_doc.db_set('outstanding_amount', bal)
- ref_doc.set_status(update=True)
- return
- elif against_voucher_type == "Purchase Invoice":
- from erpnext.accounts.doctype.purchase_invoice.purchase_invoice import get_status
- data = frappe.db.get_value(against_voucher_type, against_voucher,
- ["name as purchase_invoice", "outstanding_amount",
- "is_return", "due_date", "docstatus"])
- elif against_voucher_type == "Sales Invoice":
- from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_status
- data = frappe.db.get_value(against_voucher_type, against_voucher,
- ["name as sales_invoice", "outstanding_amount", "is_discounted",
- "is_return", "due_date", "docstatus"])
- precision = frappe.get_precision(against_voucher_type, "outstanding_amount")
- data = list(data)
- data.append(precision)
- status = get_status(data)
- frappe.db.set_value(against_voucher_type, against_voucher, {
- 'outstanding_amount': bal,
- 'status': status
- })
+ # Didn't use db_set for optimisation purpose
+ ref_doc.outstanding_amount = bal
+ frappe.db.set_value(against_voucher_type, against_voucher, 'outstanding_amount', bal)
+
+ ref_doc.set_status(update=True)
+
def validate_frozen_account(account, adv_adj=None):
frozen_account = frappe.db.get_value("Account", account, "freeze_account")
diff --git a/erpnext/accounts/doctype/gl_entry/test_gl_entry.py b/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
index 01ddd29..b4a547b 100644
--- a/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/test_gl_entry.py
@@ -38,6 +38,7 @@
filters={"voucher_type": "Journal Entry", "voucher_no": je.name},
order_by="creation"
)
+
self.assertTrue(all(entry.to_rename == 1 for entry in gl_entries))
old_naming_series_current_value = frappe.db.sql("SELECT current from tabSeries where name = %s", naming_series)[0][0]
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 2cbd40b..eb3017a 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -454,8 +454,10 @@
def set_print_format_fields(self):
bank_amount = party_amount = total_amount = 0.0
currency = bank_account_currency = party_account_currency = pay_to_recd_from= None
+ party_type = None
for d in self.get('accounts'):
if d.party_type in ['Customer', 'Supplier'] and d.party:
+ party_type = d.party_type
if not pay_to_recd_from:
pay_to_recd_from = d.party
@@ -467,9 +469,9 @@
bank_amount += (d.debit_in_account_currency or d.credit_in_account_currency)
bank_account_currency = d.account_currency
- if pay_to_recd_from:
- self.pay_to_recd_from = frappe.db.get_value(d.party_type, pay_to_recd_from,
- "customer_name" if d.party_type=="Customer" else "supplier_name")
+ if party_type and pay_to_recd_from:
+ self.pay_to_recd_from = frappe.db.get_value(party_type, pay_to_recd_from,
+ "customer_name" if party_type=="Customer" else "supplier_name")
if bank_amount:
total_amount = bank_amount
currency = bank_account_currency
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 968fb60..d208087 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -33,7 +33,9 @@
frm.set_query("party_bank_account", function() {
return {
filters: {
- "is_company_account":0
+ "is_company_account":0,
+ party_type: frm.doc.party_type,
+ party: frm.doc.party
}
}
});
diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
index 5303743..a25e0e3 100644
--- a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py
@@ -161,15 +161,15 @@
pe.insert()
pe.submit()
- outstanding_amount = flt(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
- self.assertEqual(outstanding_amount, 0)
- self.assertEqual(si.status, 'Paid')
+ outstanding_amount, status = frappe.db.get_value("Sales Invoice", si.name, ["outstanding_amount", "status"])
+ self.assertEqual(flt(outstanding_amount), 0)
+ self.assertEqual(status, 'Paid')
pe.cancel()
- outstanding_amount = flt(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
- self.assertEqual(outstanding_amount, 100)
- self.assertEqual(si.status, 'Unpaid')
+ outstanding_amount, status = frappe.db.get_value("Sales Invoice", si.name, ["outstanding_amount", "status"])
+ self.assertEqual(flt(outstanding_amount), 100)
+ self.assertEqual(status, 'Unpaid')
def test_payment_against_purchase_invoice_to_check_status(self):
pi = make_purchase_invoice(supplier="_Test Supplier USD", debit_to="_Test Payable USD - _TC",
@@ -182,15 +182,15 @@
pe.insert()
pe.submit()
- outstanding_amount = flt(frappe.db.get_value("Purchase Invoice", pi.name, "outstanding_amount"))
- self.assertEqual(outstanding_amount, 0)
- self.assertEqual(pi.status, 'Paid')
+ outstanding_amount, status = frappe.db.get_value("Purchase Invoice", pi.name, ["outstanding_amount", "status"])
+ self.assertEqual(flt(outstanding_amount), 0)
+ self.assertEqual(status, 'Paid')
pe.cancel()
- outstanding_amount = flt(frappe.db.get_value("Purchase Invoice", pi.name, "outstanding_amount"))
- self.assertEqual(outstanding_amount, 100)
- self.assertEqual(pi.status, 'Unpaid')
+ outstanding_amount, status = frappe.db.get_value("Purchase Invoice", pi.name, ["outstanding_amount", "status"])
+ self.assertEqual(flt(outstanding_amount), 250)
+ self.assertEqual(status, 'Unpaid')
def test_payment_entry_against_ec(self):
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.json b/erpnext/accounts/doctype/payment_request/payment_request.json
index bff995e..c1559a7 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.json
+++ b/erpnext/accounts/doctype/payment_request/payment_request.json
@@ -839,7 +839,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fetch_from": "bank_account.branch_code",
+ "fetch_from": "bank.branch_code",
"fieldname": "branch_code",
"fieldtype": "Read Only",
"hidden": 0,
@@ -873,7 +873,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fetch_from": "bank_account.swift_number",
+ "fetch_from": "bank.swift_number",
"fieldname": "swift_number",
"fieldtype": "Read Only",
"hidden": 0,
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 0fade8c..7e9211a 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -317,13 +317,13 @@
"payment_request_type": args.get("payment_request_type"),
"currency": ref_doc.currency,
"grand_total": grand_total,
- "email_to": args.recipient_id or "",
+ "email_to": args.recipient_id or ref_doc.owner,
"subject": _("Payment Request for {0}").format(args.dn),
"message": gateway_account.get("message") or get_dummy_message(ref_doc),
"reference_doctype": args.dt,
"reference_name": args.dn,
- "party_type": args.get("party_type"),
- "party": args.get("party"),
+ "party_type": args.get("party_type") or "Customer",
+ "party": args.get("party") or ref_doc.customer,
"bank_account": bank_account
})
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index cc992ce..24f1575 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -125,27 +125,6 @@
else:
self.remarks = _("No Remarks")
- def set_status(self, update=False, status=None, update_modified=True):
- if self.is_new():
- if self.get('amended_from'):
- self.status = 'Draft'
- return
-
- if not status:
- precision = self.precision("outstanding_amount")
- args = [
- self.name,
- self.outstanding_amount,
- self.is_return,
- self.due_date,
- self.docstatus,
- precision
- ]
- self.status = get_status(args)
-
- if update:
- self.db_set('status', self.status, update_modified = update_modified)
-
def set_missing_values(self, for_validate=False):
if not self.credit_to:
self.credit_to = get_party_account("Supplier", self.supplier, self.company)
@@ -167,10 +146,14 @@
["account_type", "report_type", "account_currency"], as_dict=True)
if account.report_type != "Balance Sheet":
- frappe.throw(_("Credit To account must be a Balance Sheet account"))
+ frappe.throw(_("Please ensure {} account is a Balance Sheet account. \
+ You can change the parent account to a Balance Sheet account or select a different account.")
+ .format(frappe.bold("Credit To")), title=_("Invalid Account"))
if self.supplier and account.account_type != "Payable":
- frappe.throw(_("Credit To account must be a Payable account"))
+ frappe.throw(_("Please ensure {} account is a Payable account. \
+ Change the account type to Payable or select a different account.")
+ .format(frappe.bold("Credit To")), title=_("Invalid Account"))
self.party_account_currency = account.account_currency
@@ -1028,34 +1011,6 @@
# calculate totals again after applying TDS
self.calculate_taxes_and_totals()
-def get_status(*args):
- purchase_invoice, outstanding_amount, is_return, due_date, docstatus, precision = args[0]
-
- outstanding_amount = flt(outstanding_amount, precision)
- due_date = getdate(due_date)
- now_date = getdate()
-
- if docstatus == 2:
- status = "Cancelled"
- elif docstatus == 1:
- if outstanding_amount > 0 and due_date < now_date:
- status = "Overdue"
- elif outstanding_amount > 0 and due_date >= now_date:
- status = "Unpaid"
- #Check if outstanding amount is 0 due to debit note issued against invoice
- elif outstanding_amount <= 0 and is_return == 0 and frappe.db.get_value('Purchase Invoice', {'is_return': 1, 'return_against': purchase_invoice, 'docstatus': 1}):
- status = "Debit Note Issued"
- elif is_return == 1:
- status = "Return"
- elif outstanding_amount <=0:
- status = "Paid"
- else:
- status = "Submitted"
- else:
- status = "Draft"
-
- return status
-
def get_list_context(context=None):
from erpnext.controllers.website_list_for_contact import get_list_context
list_context = get_list_context(context)
@@ -1116,3 +1071,6 @@
def make_inter_company_sales_invoice(source_name, target_doc=None):
from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_inter_company_transaction
return make_inter_company_transaction("Purchase Invoice", source_name, target_doc)
+
+def on_doctype_update():
+ frappe.db.add_index("Purchase Invoice", ["supplier", "is_return", "return_against"])
diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
index 4a7322d..9c97426 100644
--- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
+++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
@@ -761,7 +761,7 @@
"depends_on": "is_fixed_asset",
"fetch_from": "item_code.asset_category",
"fieldname": "asset_category",
- "fieldtype": "Data",
+ "fieldtype": "Link",
"label": "Asset Category",
"options": "Asset Category",
"read_only": 1
@@ -777,7 +777,7 @@
"idx": 1,
"istable": 1,
"links": [],
- "modified": "2020-03-05 14:20:17.297284",
+ "modified": "2020-04-01 14:20:17.297284",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice Item",
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index c0e1285..c49ac29 100755
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -423,7 +423,10 @@
name_list.append(name)
email_queue = make_email_queue(email_queue_list)
- pos_profile = json.loads(pos_profile)
+
+ if isinstance(pos_profile, string_types):
+ pos_profile = json.loads(pos_profile)
+
customers = get_customers_list(pos_profile)
return {
'invoice': name_list,
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 7f7938d..dc0c025 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -437,13 +437,17 @@
if (not for_validate) or (for_validate and not self.get(fieldname)):
self.set(fieldname, pos.get(fieldname))
- customer_price_list = frappe.get_value("Customer", self.customer, 'default_price_list')
-
if pos.get("company_address"):
self.company_address = pos.get("company_address")
- if not customer_price_list:
- self.set('selling_price_list', pos.get('selling_price_list'))
+ customer_price_list, customer_group = frappe.get_value("Customer", self.customer, ['default_price_list', 'customer_group'])
+
+ customer_group_price_list = frappe.get_value("Customer Group", customer_group, 'default_price_list')
+
+ selling_price_list = customer_price_list or customer_group_price_list or pos.get('selling_price_list')
+
+ if selling_price_list:
+ self.set('selling_price_list', selling_price_list)
if not for_validate:
self.update_stock = cint(pos.get("update_stock"))
@@ -474,13 +478,17 @@
["account_type", "report_type", "account_currency"], as_dict=True)
if not account:
- frappe.throw(_("Debit To is required"))
+ frappe.throw(_("Debit To is required"), title=_("Account Missing"))
if account.report_type != "Balance Sheet":
- frappe.throw(_("Debit To account must be a Balance Sheet account"))
+ frappe.throw(_("Please ensure {} account is a Balance Sheet account. \
+ You can change the parent account to a Balance Sheet account or select a different account.")
+ .format(frappe.bold("Debit To")), title=_("Invalid Account"))
if self.customer and account.account_type != "Receivable":
- frappe.throw(_("Debit To account must be a Receivable account"))
+ frappe.throw(_("Please ensure {} account is a Receivable account. \
+ Change the account type to Receivable or select a different account.")
+ .format(frappe.bold("Debit To")), title=_("Invalid Account"))
self.party_account_currency = account.account_currency
@@ -1223,18 +1231,38 @@
self.status = 'Draft'
return
+ precision = self.precision("outstanding_amount")
+ outstanding_amount = flt(self.outstanding_amount, precision)
+ due_date = getdate(self.due_date)
+ nowdate = getdate()
+
+ discounting_status = None
+ if self.is_discounted:
+ discountng_status = get_discounting_status(self.name)
+
if not status:
- precision = self.precision("outstanding_amount")
- args = [
- self.name,
- self.outstanding_amount,
- self.is_discounted,
- self.is_return,
- self.due_date,
- self.docstatus,
- precision,
- ]
- self.status = get_status(args)
+ if self.docstatus == 2:
+ status = "Cancelled"
+ elif self.docstatus == 1:
+ if outstanding_amount > 0 and due_date < nowdate and self.is_discounted and discountng_status=='Disbursed':
+ self.status = "Overdue and Discounted"
+ elif outstanding_amount > 0 and due_date < nowdate:
+ self.status = "Overdue"
+ elif outstanding_amount > 0 and due_date >= nowdate and self.is_discounted and discountng_status=='Disbursed':
+ self.status = "Unpaid and Discounted"
+ elif outstanding_amount > 0 and due_date >= nowdate:
+ self.status = "Unpaid"
+ #Check if outstanding amount is 0 due to credit note issued against invoice
+ elif outstanding_amount <= 0 and self.is_return == 0 and frappe.db.get_value('Sales Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1}):
+ self.status = "Credit Note Issued"
+ elif self.is_return == 1:
+ self.status = "Return"
+ elif outstanding_amount<=0:
+ self.status = "Paid"
+ else:
+ self.status = "Submitted"
+ else:
+ self.status = "Draft"
if update:
self.db_set('status', self.status, update_modified = update_modified)
@@ -1259,42 +1287,6 @@
return status
-def get_status(*args):
- sales_invoice, outstanding_amount, is_discounted, is_return, due_date, docstatus, precision = args[0]
-
- discounting_status = None
- if is_discounted:
- discounting_status = get_discounting_status(sales_invoice)
-
- outstanding_amount = flt(outstanding_amount, precision)
- due_date = getdate(due_date)
- now_date = getdate()
-
- if docstatus == 2:
- status = "Cancelled"
- elif docstatus == 1:
- if outstanding_amount > 0 and due_date < now_date and is_discounted and discounting_status=='Disbursed':
- status = "Overdue and Discounted"
- elif outstanding_amount > 0 and due_date < now_date:
- status = "Overdue"
- elif outstanding_amount > 0 and due_date >= now_date and is_discounted and discounting_status=='Disbursed':
- status = "Unpaid and Discounted"
- elif outstanding_amount > 0 and due_date >= now_date:
- status = "Unpaid"
- #Check if outstanding amount is 0 due to credit note issued against invoice
- elif outstanding_amount <= 0 and is_return == 0 and frappe.db.get_value('Sales Invoice', {'is_return': 1, 'return_against': sales_invoice, 'docstatus': 1}):
- status = "Credit Note Issued"
- elif is_return == 1:
- status = "Return"
- elif outstanding_amount <=0:
- status = "Paid"
- else:
- status = "Submitted"
- else:
- status = "Draft"
-
- return status
-
def validate_inter_company_party(doctype, party, company, inter_company_reference):
if not party:
return
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index e48e6c9..3d5ce8a 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -786,7 +786,7 @@
def test_make_pos_invoice(self):
from erpnext.accounts.doctype.sales_invoice.pos import make_invoice
- make_pos_profile()
+ pos_profile = make_pos_profile()
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",supplier_warehouse= "Work In Progress - TCP1", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
pos = create_sales_invoice(company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test FG Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1", do_not_save=True)
@@ -802,7 +802,7 @@
pos.append("taxes", tax)
invoice_data = [{'09052016142': pos}]
- si = make_invoice(invoice_data).get('invoice')
+ si = make_invoice(pos_profile, invoice_data).get('invoice')
self.assertEqual(si[0], '09052016142')
sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': '09052016142', 'docstatus': 1})
@@ -820,7 +820,7 @@
if allow_negative_stock:
frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 0)
- make_pos_profile()
+ pos_profile = make_pos_profile()
timestamp = cint(time.time())
item = make_item("_Test POS Item")
@@ -834,7 +834,7 @@
{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 330}]
invoice_data = [{timestamp: pos}]
- si = make_invoice(invoice_data).get('invoice')
+ si = make_invoice(pos_profile, invoice_data).get('invoice')
self.assertEqual(si[0], timestamp)
sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': timestamp})
@@ -843,7 +843,7 @@
timestamp = cint(time.time())
pos["offline_pos_name"] = timestamp
invoice_data = [{timestamp: pos}]
- si1 = make_invoice(invoice_data).get('invoice')
+ si1 = make_invoice(pos_profile, invoice_data).get('invoice')
self.assertEqual(si1[0], timestamp)
sales_invoice1 = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': timestamp})
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 6d53530..5ba455c 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -136,12 +136,11 @@
def make_entry(args, adv_adj, update_outstanding, from_repost=False):
- args.update({"doctype": "GL Entry"})
- gle = frappe.get_doc(args)
+ gle = frappe.new_doc("GL Entry")
+ gle.update(args)
gle.flags.ignore_permissions = 1
gle.flags.from_repost = from_repost
gle.validate()
- gle.flags.ignore_permissions = True
gle.db_insert()
gle.run_method("on_update_with_args", adv_adj, update_outstanding, from_repost)
gle.flags.ignore_validate = True
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 422ace6..4cfeb25 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -11,7 +11,7 @@
add_years, get_timestamp, nowdate, flt, cstr, add_months, get_last_day)
from frappe.contacts.doctype.address.address import (get_address_display,
get_default_address, get_company_address)
-from frappe.contacts.doctype.contact.contact import get_contact_details, get_default_contact
+from frappe.contacts.doctype.contact.contact import get_contact_details
from erpnext.exceptions import PartyFrozen, PartyDisabled, InvalidAccountCurrency
from erpnext.accounts.utils import get_fiscal_year
from erpnext import get_company_currency
@@ -281,8 +281,8 @@
existing_gle_currency = get_party_gle_currency(party_type, party, company)
if existing_gle_currency and party_account_currency != existing_gle_currency:
- frappe.throw(_("Accounting Entry for {0}: {1} can only be made in currency: {2}")
- .format(party_type, party, existing_gle_currency), InvalidAccountCurrency)
+ frappe.throw(_("{0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}.")
+ .format(frappe.bold(party_type), frappe.bold(party), frappe.bold(existing_gle_currency), frappe.bold(company)), InvalidAccountCurrency)
def validate_party_accounts(doc):
companies = []
@@ -295,15 +295,13 @@
companies.append(account.company)
party_account_currency = frappe.db.get_value("Account", account.account, "account_currency", cache=True)
- existing_gle_currency = get_party_gle_currency(doc.doctype, doc.name, account.company)
if frappe.db.get_default("Company"):
company_default_currency = frappe.get_cached_value('Company',
frappe.db.get_default("Company"), "default_currency")
else:
company_default_currency = frappe.db.get_value('Company', account.company, "default_currency")
- if existing_gle_currency and party_account_currency != existing_gle_currency:
- frappe.throw(_("Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.").format(existing_gle_currency, account.company))
+ validate_party_gle_currency(doc.doctype, doc.name, account.company, party_account_currency)
if doc.get("default_currency") and party_account_currency and company_default_currency:
if doc.default_currency != party_account_currency and doc.default_currency != company_default_currency:
@@ -615,3 +613,26 @@
if data:
return frappe._dict(data)
+
+def get_default_contact(doctype, name):
+ """
+ Returns default contact for the given doctype and name.
+ Can be ordered by `contact_type` to either is_primary_contact or is_billing_contact.
+ """
+ out = frappe.db.sql("""
+ SELECT dl.parent, c.is_primary_contact, c.is_billing_contact
+ FROM `tabDynamic Link` dl
+ INNER JOIN tabContact c ON c.name = dl.parent
+ WHERE
+ dl.link_doctype=%s AND
+ dl.link_name=%s AND
+ dl.parenttype = "Contact"
+ ORDER BY is_primary_contact DESC, is_billing_contact DESC
+ """, (doctype, name))
+ if out:
+ try:
+ return out[0][0]
+ except:
+ return None
+ else:
+ return None
\ No newline at end of file
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html
index 791f3f8..bb0d0a1 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html
@@ -218,15 +218,15 @@
<td></td>
<td style="text-align: right"><b>{%= __("Total") %}</b></td>
<td style="text-align: right">
- {%= format_currency(data[i]["invoiced"], data[i]["currency"] ) %}</td>
+ {%= format_currency(data[i]["invoiced"], data[0]["currency"] ) %}</td>
{% if(!filters.show_future_payments) { %}
<td style="text-align: right">
- {%= format_currency(data[i]["paid"], data[i]["currency"]) %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["credit_note"], data[i]["currency"]) %} </td>
+ {%= format_currency(data[i]["paid"], data[0]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["credit_note"], data[0]["currency"]) %} </td>
{% } %}
<td style="text-align: right">
- {%= format_currency(data[i]["outstanding"], data[i]["currency"]) %}</td>
+ {%= format_currency(data[i]["outstanding"], data[0]["currency"]) %}</td>
{% if(filters.show_future_payments) { %}
{% if(report.report_name === "Accounts Receivable") { %}
@@ -234,8 +234,8 @@
{%= data[i]["po_no"] %}</td>
{% } %}
<td style="text-align: right">{%= data[i]["future_ref"] %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["future_amount"], data[i]["currency"]) %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["remaining_balance"], data[i]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["future_amount"], data[0]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["remaining_balance"], data[0]["currency"]) %}</td>
{% } %}
{% } %}
{% } else { %}
@@ -256,10 +256,10 @@
{% } else { %}
<td><b>{%= __("Total") %}</b></td>
{% } %}
- <td style="text-align: right">{%= format_currency(data[i]["invoiced"], data[i]["currency"]) %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["paid"], data[i]["currency"]) %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["credit_note"], data[i]["currency"]) %}</td>
- <td style="text-align: right">{%= format_currency(data[i]["outstanding"], data[i]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["invoiced"], data[0]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["paid"], data[0]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["credit_note"], data[0]["currency"]) %}</td>
+ <td style="text-align: right">{%= format_currency(data[i]["outstanding"], data[0]["currency"]) %}</td>
{% } %}
{% } %}
</tr>
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 0438f6d..240b0d8 100755
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -7,7 +7,7 @@
from frappe.utils import getdate, nowdate, flt, cint, formatdate, cstr, now, time_diff_in_seconds
from collections import OrderedDict
from erpnext.accounts.utils import get_currency_precision
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions, get_dimension_with_children
# This report gives a summary of all Outstanding Invoices considering the following
@@ -603,7 +603,6 @@
self.add_supplier_filters(conditions, values)
self.add_accounting_dimensions_filters(conditions, values)
-
return " and ".join(conditions), values
def get_order_by_condition(self):
@@ -666,13 +665,16 @@
doctype=doctype, lft=lft, rgt=rgt, key=key)
def add_accounting_dimensions_filters(self, conditions, values):
- accounting_dimensions = get_accounting_dimensions()
+ accounting_dimensions = get_accounting_dimensions(as_list=False)
if accounting_dimensions:
for dimension in accounting_dimensions:
- if self.filters.get(dimension):
- conditions.append("{0} = %s".format(dimension))
- values.append(self.filters.get(dimension))
+ if self.filters.get(dimension.fieldname):
+ if frappe.get_cached_value('DocType', dimension.document_type, 'is_tree'):
+ self.filters[dimension.fieldname] = get_dimension_with_children(dimension.document_type,
+ self.filters.get(dimension.fieldname))
+ conditions.append("{0} in %s".format(dimension.fieldname))
+ values.append(tuple(self.filters.get(dimension.fieldname)))
def get_gle_balance(self, gle):
# get the balance of the GL (debit - credit) or reverse balance based on report type
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 35915d0..080a7c9 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -16,7 +16,7 @@
from frappe.utils import (flt, getdate, get_first_day, add_months, add_days, formatdate, cstr)
from six import itervalues
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions, get_dimension_with_children
def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_values=False,
company=None, reset_period_on_fy_change=True):
@@ -389,7 +389,7 @@
def get_additional_conditions(from_date, ignore_closing_entries, filters):
additional_conditions = []
- accounting_dimensions = get_accounting_dimensions()
+ accounting_dimensions = get_accounting_dimensions(as_list=False)
if ignore_closing_entries:
additional_conditions.append("ifnull(voucher_type, '')!='Period Closing Voucher'")
@@ -412,11 +412,14 @@
additional_conditions.append("(finance_book in (%(finance_book)s, %(company_fb)s, '') OR finance_book IS NULL)")
else:
additional_conditions.append("(finance_book in (%(finance_book)s, '') OR finance_book IS NULL)")
-
+
if accounting_dimensions:
for dimension in accounting_dimensions:
- if filters.get(dimension):
- additional_conditions.append("{0} in (%({0})s)".format(dimension))
+ if filters.get(dimension.fieldname):
+ if frappe.get_cached_value('DocType', dimension.document_type, 'is_tree'):
+ filters[dimension.fieldname] = get_dimension_with_children(dimension.document_type,
+ filters.get(dimension.fieldname))
+ additional_conditions.append("{0} in %({0})s".format(dimension.fieldname))
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.html b/erpnext/accounts/report/general_ledger/general_ledger.html
index 40469ae..9a2205a 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.html
+++ b/erpnext/accounts/report/general_ledger/general_ledger.html
@@ -2,7 +2,7 @@
<h4 class="text-center">
{% if (filters.party_name) { %}
{%= filters.party_name %}
- {% } else if (filters.party && filters.show_name) { %}
+ {% } else if (filters.party) { %}
{%= filters.party %}
{% } else if (filters.account) { %}
{%= filters.account %}
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index 8bea365..898ac13 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -10,7 +10,7 @@
from erpnext.accounts.utils import get_account_currency
from erpnext.accounts.report.financial_statements import get_cost_centers_with_children
from six import iteritems
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions, get_dimension_with_children
from collections import OrderedDict
def execute(filters=None):
@@ -131,7 +131,7 @@
gl_entries = frappe.db.sql(
"""
select
- posting_date, account, party_type, party,
+ name as gl_entry, posting_date, account, party_type, party,
voucher_type, voucher_no, cost_center, project,
against_voucher_type, against_voucher, account_currency,
remarks, against, is_opening {select_fields}
@@ -194,12 +194,15 @@
if match_conditions:
conditions.append(match_conditions)
- accounting_dimensions = get_accounting_dimensions()
+ accounting_dimensions = get_accounting_dimensions(as_list=False)
if accounting_dimensions:
for dimension in accounting_dimensions:
- if filters.get(dimension):
- conditions.append("{0} in (%({0})s)".format(dimension))
+ if filters.get(dimension.fieldname):
+ if frappe.get_cached_value('DocType', dimension.document_type, 'is_tree'):
+ filters[dimension.fieldname] = get_dimension_with_children(dimension.document_type,
+ filters.get(dimension.fieldname))
+ conditions.append("{0} in %({0})s".format(dimension.fieldname))
return "and {}".format(" and ".join(conditions)) if conditions else ""
@@ -360,6 +363,12 @@
columns = [
{
+ "fieldname": "gl_entry",
+ "fieldtype": "Link",
+ "options": "GL Entry",
+ "hidden": 1
+ },
+ {
"label": _("Posting Date"),
"fieldname": "posting_date",
"fieldtype": "Date",
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
index 11f4e0d..127f313 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
@@ -201,7 +201,8 @@
{
'label': _('Mode Of Payment'),
'fieldname': 'mode_of_payment',
- 'fieldtype': 'Data',
+ 'fieldtype': 'Link',
+ 'options': 'Mode of Payment',
'width': 120
},
{
@@ -309,6 +310,8 @@
if additional_query_columns:
additional_query_columns = ', ' + ', '.join(additional_query_columns)
+ else:
+ additional_query_columns = ''
return frappe.db.sql("""
select
@@ -320,7 +323,7 @@
`tabPurchase Invoice Item`.`purchase_receipt`, `tabPurchase Invoice Item`.`po_detail`,
`tabPurchase Invoice Item`.`expense_account`, `tabPurchase Invoice Item`.`stock_qty`,
`tabPurchase Invoice Item`.`stock_uom`, `tabPurchase Invoice Item`.`base_net_amount`,
- `tabPurchase Invoice`.supplier_name, `tabPurchase Invoice`.mode_of_payment {0}
+ `tabPurchase Invoice`.`supplier_name`, `tabPurchase Invoice`.`mode_of_payment` {0}
from `tabPurchase Invoice`, `tabPurchase Invoice Item`
where `tabPurchase Invoice`.name = `tabPurchase Invoice Item`.`parent` and
`tabPurchase Invoice`.docstatus = 1 %s
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index 786e04d..0c8957a 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -373,6 +373,8 @@
if additional_query_columns:
additional_query_columns = ', ' + ', '.join(additional_query_columns)
+ else:
+ additional_query_columns = ''
return frappe.db.sql("""
select
diff --git a/erpnext/accounts/report/sales_register/sales_register.py b/erpnext/accounts/report/sales_register/sales_register.py
index 2be90bc..9864e40 100644
--- a/erpnext/accounts/report/sales_register/sales_register.py
+++ b/erpnext/accounts/report/sales_register/sales_register.py
@@ -6,7 +6,7 @@
from frappe.utils import flt
from frappe import msgprint, _
from frappe.model.meta import get_field_precision
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions, get_dimension_with_children
def execute(filters=None):
return _execute(filters)
@@ -341,14 +341,18 @@
where parent=`tabSales Invoice`.name
and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)"""
- accounting_dimensions = get_accounting_dimensions()
+ accounting_dimensions = get_accounting_dimensions(as_list=False)
if accounting_dimensions:
for dimension in accounting_dimensions:
- if filters.get(dimension):
+ if filters.get(dimension.fieldname):
+ if frappe.get_cached_value('DocType', dimension.document_type, 'is_tree'):
+ filters[dimension.fieldname] = get_dimension_with_children(dimension.document_type,
+ filters.get(dimension.fieldname))
+
conditions += """ and exists(select name from `tabSales Invoice Item`
where parent=`tabSales Invoice`.name
- and ifnull(`tabSales Invoice Item`.{0}, '') = %({0})s)""".format(dimension)
+ and ifnull(`tabSales Invoice Item`.{0}, '') in %({0})s)""".format(dimension.fieldname)
return conditions
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 69285cc..5fe6b41 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -7,7 +7,7 @@
from frappe.utils import flt, getdate, formatdate, cstr
from erpnext.accounts.report.financial_statements \
import filter_accounts, set_gl_entries_by_account, filter_out_zero_value_rows
-from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions, get_dimension_with_children
value_fields = ("opening_debit", "opening_credit", "debit", "credit", "closing_debit", "closing_credit")
@@ -109,7 +109,7 @@
additional_conditions += fb_conditions
- accounting_dimensions = get_accounting_dimensions()
+ accounting_dimensions = get_accounting_dimensions(as_list=False)
query_filters = {
"company": filters.company,
@@ -122,11 +122,14 @@
if accounting_dimensions:
for dimension in accounting_dimensions:
- if filters.get(dimension):
- additional_conditions += """ and {0} in (%({0})s) """.format(dimension)
+ if filters.get(dimension.fieldname):
+ if frappe.get_cached_value('DocType', dimension.document_type, 'is_tree'):
+ filters[dimension.fieldname] = get_dimension_with_children(dimension.document_type,
+ filters.get(dimension.fieldname))
+ additional_conditions += "and {0} in %({0})s".format(dimension.fieldname)
query_filters.update({
- dimension: filters.get(dimension)
+ dimension.fieldname: filters.get(dimension.fieldname)
})
gle = frappe.db.sql("""
diff --git a/erpnext/assets/doctype/location/location.json b/erpnext/assets/doctype/location/location.json
index 3323dae..6a35130 100644
--- a/erpnext/assets/doctype/location/location.json
+++ b/erpnext/assets/doctype/location/location.json
@@ -139,12 +139,14 @@
"read_only": 1
}
],
+ "is_tree": 1,
"links": [],
- "modified": "2020-03-02 19:34:28.362267",
+ "modified": "2020-03-18 18:00:08.885805",
"modified_by": "Administrator",
"module": "Assets",
"name": "Location",
"name_case": "Title Case",
+ "nsm_parent_field": "parent_location",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index a3264a4..3111a3a 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -499,7 +499,8 @@
reference_doctype: me.frm.doctype,
reference_name: me.frm.docname,
content: __('Reason for hold: ')+data.reason_for_hold,
- comment_email: frappe.session.user
+ comment_email: frappe.session.user,
+ comment_by: frappe.session.user_fullname
},
callback: function(r) {
if(!r.exc) {
diff --git a/erpnext/buying/doctype/supplier/supplier_dashboard.py b/erpnext/buying/doctype/supplier/supplier_dashboard.py
index b3b294d..d0d5b73 100644
--- a/erpnext/buying/doctype/supplier/supplier_dashboard.py
+++ b/erpnext/buying/doctype/supplier/supplier_dashboard.py
@@ -34,4 +34,4 @@
'items': ['Pricing Rule']
}
]
- }
+ }
\ No newline at end of file
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index 39042b8..16061c6 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -4,15 +4,17 @@
// attach required files
{% include 'erpnext/public/js/controllers/buying.js' %};
-frappe.ui.form.on('Suppier Quotation', {
- setup: function(frm) {
- frm.custom_make_buttons = {
- 'Purchase Order': 'Purchase Order'
- }
- }
-});
-
erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.extend({
+ setup: function() {
+ this.frm.custom_make_buttons = {
+ 'Purchase Order': 'Purchase Order',
+ 'Quotation': 'Quotation',
+ 'Subscription': 'Subscription'
+ }
+
+ this._super();
+ },
+
refresh: function() {
var me = this;
this._super();
diff --git a/erpnext/communication/desk_page/communication/communication.json b/erpnext/communication/desk_page/communication/communication.json
deleted file mode 100644
index 59318fb..0000000
--- a/erpnext/communication/desk_page/communication/communication.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "cards": [],
- "charts": [],
- "creation": "2020-01-28 11:49:55.003637",
- "developer_mode_only": 0,
- "disable_user_customization": 0,
- "docstatus": 0,
- "doctype": "Desk Page",
- "extends_another_page": 0,
- "icon": "",
- "idx": 0,
- "is_standard": 1,
- "label": "Communication",
- "modified": "2020-03-12 16:30:40.534226",
- "modified_by": "Administrator",
- "module": "Communication",
- "name": "Communication",
- "owner": "Administrator",
- "pin_to_bottom": 0,
- "pin_to_top": 0,
- "shortcuts": []
-}
\ No newline at end of file
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index d661bcb..76eb56f 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -19,6 +19,7 @@
from erpnext.exceptions import InvalidCurrency
from six import text_type
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.stock.get_item_details import get_item_warehouse
force_item_fields = ("item_group", "brand", "stock_uom", "is_fixed_asset", "item_tax_rate", "pricing_rules")
@@ -1126,16 +1127,16 @@
"""
Returns a Sales Order Item child item containing the default values
"""
- p_doctype = frappe.get_doc(parent_doctype, parent_doctype_name)
- child_item = frappe.new_doc('Sales Order Item', p_doctype, child_docname)
+ p_doc = frappe.get_doc(parent_doctype, parent_doctype_name)
+ child_item = frappe.new_doc('Sales Order Item', p_doc, child_docname)
item = frappe.get_doc("Item", item_code)
child_item.item_code = item.item_code
child_item.item_name = item.item_name
child_item.description = item.description
- child_item.reqd_by_date = p_doctype.delivery_date
+ child_item.reqd_by_date = p_doc.delivery_date
child_item.uom = item.stock_uom
child_item.conversion_factor = get_conversion_factor(item_code, item.stock_uom).get("conversion_factor") or 1.0
- child_item.warehouse = p_doctype.set_warehouse or p_doctype.items[0].warehouse
+ child_item.warehouse = get_item_warehouse(item, p_doc, overwrite_warehouse=True)
return child_item
@@ -1143,13 +1144,13 @@
"""
Returns a Purchase Order Item child item containing the default values
"""
- p_doctype = frappe.get_doc(parent_doctype, parent_doctype_name)
- child_item = frappe.new_doc('Purchase Order Item', p_doctype, child_docname)
+ p_doc = frappe.get_doc(parent_doctype, parent_doctype_name)
+ child_item = frappe.new_doc('Purchase Order Item', p_doc, child_docname)
item = frappe.get_doc("Item", item_code)
child_item.item_code = item.item_code
child_item.item_name = item.item_name
child_item.description = item.description
- child_item.schedule_date = p_doctype.schedule_date
+ child_item.schedule_date = p_doc.schedule_date
child_item.uom = item.stock_uom
child_item.conversion_factor = get_conversion_factor(item_code, item.stock_uom).get("conversion_factor") or 1.0
child_item.base_rate = 1 # Initiallize value will update in parent validation
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 8d3db8d..fcc9098 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -672,19 +672,32 @@
# If asset has to be auto created
# Check for asset naming series
if item_data.get('asset_naming_series'):
+ created_assets = []
+
for qty in range(cint(d.qty)):
- self.make_asset(d)
- is_plural = 's' if cint(d.qty) != 1 else ''
- messages.append(_('{0} Asset{2} Created for <b>{1}</b>').format(cint(d.qty), d.item_code, is_plural))
+ asset = self.make_asset(d)
+ created_assets.append(asset)
+
+ if len(created_assets) > 5:
+ # dont show asset form links if more than 5 assets are created
+ messages.append(_('{} Asset{} created for {}').format(len(created_assets), is_plural, frappe.bold(d.item_code)))
+ else:
+ assets_link = list(map(lambda d: frappe.utils.get_link_to_form('Asset', d), created_assets))
+ assets_link = frappe.bold(','.join(assets_link))
+
+ is_plural = 's' if len(created_assets) != 1 else ''
+ messages.append(
+ _('Asset{} {assets_link} created for {}').format(is_plural, frappe.bold(d.item_code), assets_link=assets_link)
+ )
else:
- frappe.throw(_("Row {1}: Asset Naming Series is mandatory for the auto creation for item {0}")
- .format(d.item_code, d.idx))
+ frappe.throw(_("Row {}: Asset Naming Series is mandatory for the auto creation for item {}")
+ .format(d.idx, frappe.bold(d.item_code)))
else:
- messages.append(_("Assets not created for <b>{0}</b>. You will have to create asset manually.")
- .format(d.item_code))
+ messages.append(_("Assets not created for {0}. You will have to create asset manually.")
+ .format(frappe.bold(d.item_code)))
for message in messages:
- frappe.msgprint(message, title="Success")
+ frappe.msgprint(message, title="Success", indicator="green")
def make_asset(self, row):
if not row.asset_location:
@@ -716,6 +729,8 @@
asset.set_missing_values()
asset.insert()
+ return asset.name
+
def update_fixed_asset(self, field, delete_asset = False):
for d in self.get("items"):
if d.is_fixed_asset:
@@ -745,7 +760,7 @@
asset.supplier = None
if asset.docstatus == 1 and delete_asset:
frappe.throw(_('Cannot cancel this document as it is linked with submitted asset {0}.\
- Please cancel the it to continue.').format(asset.name))
+ Please cancel the it to continue.').format(frappe.utils.get_link_to_form('Asset', asset.name)))
asset.flags.ignore_validate_update_after_submit = True
asset.flags.ignore_mandatory = True
@@ -1026,4 +1041,4 @@
available_batches.append({'batch': batch, 'qty': available_qty})
required_qty -= available_qty
- return available_batches
\ No newline at end of file
+ return available_batches
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index d18f8e5..c14bb66 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -3,6 +3,7 @@
from __future__ import unicode_literals
import frappe
+import erpnext
from frappe.desk.reportview import get_match_cond, get_filters_cond
from frappe.utils import nowdate, getdate
from collections import defaultdict
@@ -129,23 +130,26 @@
})
def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
+ company_currency = erpnext.get_company_currency(filters.get('company'))
+
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
where tabAccount.docstatus!=2
and account_type in (%s)
and is_group = 0
and company = %s
+ and account_currency = %s
and `%s` LIKE %s
order by idx desc, name
limit %s, %s""" %
- (", ".join(['%s']*len(filters.get("account_type"))), "%s", searchfield, "%s", "%s", "%s"),
- tuple(filters.get("account_type") + [filters.get("company"), "%%%s%%" % txt,
+ (", ".join(['%s']*len(filters.get("account_type"))), "%s", "%s", searchfield, "%s", "%s", "%s"),
+ tuple(filters.get("account_type") + [filters.get("company"), company_currency, "%%%s%%" % txt,
start, page_len]))
if not tax_accounts:
tax_accounts = frappe.db.sql("""select name, parent_account from tabAccount
where tabAccount.docstatus!=2 and is_group = 0
- and company = %s and `%s` LIKE %s limit %s, %s"""
- % ("%s", searchfield, "%s", "%s", "%s"),
- (filters.get("company"), "%%%s%%" % txt, start, page_len))
+ and company = %s and account_currency = %s and `%s` LIKE %s limit %s, %s""" #nosec
+ % ("%s", "%s", searchfield, "%s", "%s", "%s"),
+ (filters.get("company"), company_currency, "%%%s%%" % txt, start, page_len))
return tax_accounts
@@ -175,6 +179,12 @@
# scan description only if items are less than 50000
description_cond = 'or tabItem.description LIKE %(txt)s'
+ extra_cond = " and tabItem.has_variants=0"
+ if (filters and isinstance(filters, dict)
+ and filters.get("doctype") == "BOM"):
+ extra_cond = ""
+ del filters["doctype"]
+
return frappe.db.sql("""select tabItem.name,
if(length(tabItem.item_name) > 40,
concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name,
@@ -184,11 +194,11 @@
{columns}
from tabItem
where tabItem.docstatus < 2
- and tabItem.has_variants=0
and tabItem.disabled=0
and (tabItem.end_of_life > %(today)s or ifnull(tabItem.end_of_life, '0000-00-00')='0000-00-00')
and ({scond} or tabItem.item_code IN (select parent from `tabItem Barcode` where barcode LIKE %(txt)s)
{description_cond})
+ {extra_cond}
{fcond} {mcond}
order by
if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
@@ -199,6 +209,7 @@
key=searchfield,
columns=columns,
scond=searchfields,
+ extra_cond=extra_cond,
fcond=get_filters_cond(doctype, filters, conditions).replace('%', '%%'),
mcond=get_match_cond(doctype).replace('%', '%%'),
description_cond = description_cond),
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index b465a10..4d0520a 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -69,6 +69,17 @@
["Cancelled", "eval:self.docstatus==2"],
["Closed", "eval:self.status=='Closed'"],
],
+ "Purchase Invoice": [
+ ["Draft", None],
+ ["Submitted", "eval:self.docstatus==1"],
+ ["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1"],
+ ["Return", "eval:self.is_return==1 and self.docstatus==1"],
+ ["Debit Note Issued",
+ "eval:self.outstanding_amount <= 0 and self.docstatus==1 and self.is_return==0 and get_value('Purchase Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1})"],
+ ["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"],
+ ["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"],
+ ["Cancelled", "eval:self.docstatus==2"],
+ ],
"Material Request": [
["Draft", None],
["Stopped", "eval:self.status == 'Stopped'"],
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index d452fe4..f6908c0 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -238,7 +238,7 @@
for d in self.items:
if not d.batch_no: continue
- serial_nos = [d.name for d in frappe.get_all("Serial No", {'batch_no': d.batch_no})]
+ serial_nos = [sr.name for sr in frappe.get_all("Serial No", {'batch_no': d.batch_no})]
if serial_nos:
frappe.db.set_value("Serial No", { 'name': ['in', serial_nos] }, "batch_no", None)
diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json
index bd3110b..b3197ae 100644
--- a/erpnext/crm/doctype/lead/lead.json
+++ b/erpnext/crm/doctype/lead/lead.json
@@ -172,7 +172,6 @@
"options": "Customer"
},
{
- "depends_on": "eval: doc.source==\"Campaign\"",
"fieldname": "campaign_name",
"fieldtype": "Link",
"label": "Campaign Name",
@@ -514,4 +513,4 @@
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index fff7b8f..985abfb 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -132,10 +132,17 @@
# do not create an address if no fields are available,
# skipping country since the system auto-sets it from system defaults
- if not any([self.get(field) for field in address_fields if field != "country"]):
+ address = frappe.new_doc("Address")
+
+ mandatory_fields = [ df.fieldname for df in address.meta.fields if df.reqd ]
+
+ if not all([self.get(field) for field in mandatory_fields]):
+ frappe.msgprint(_('Missing mandatory fields in address. \
+ {0} to create address' ).format("<a href='desk#Form/Address/New Address 1' \
+ > Click here </a>"),
+ alert=True, indicator='yellow')
return
- address = frappe.new_doc("Address")
address.update({addr_field: self.get(addr_field) for addr_field in address_fields})
address.update({info_field: self.get(info_field) for info_field in info_fields})
address.insert()
diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json
index 93814c6..98a350a 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.json
+++ b/erpnext/crm/doctype/opportunity/opportunity.json
@@ -216,7 +216,8 @@
{
"fieldname": "opportunity_amount",
"fieldtype": "Currency",
- "label": "Opportunity Amount"
+ "label": "Opportunity Amount",
+ "options": "currency"
},
{
"default": "0",
@@ -422,7 +423,7 @@
"icon": "fa fa-info-sign",
"idx": 195,
"links": [],
- "modified": "2020-01-13 16:18:44.477818",
+ "modified": "2020-03-20 12:28:45.228994",
"modified_by": "Administrator",
"module": "CRM",
"name": "Opportunity",
diff --git a/erpnext/demo/user/fixed_asset.py b/erpnext/demo/user/fixed_asset.py
index e6d1687..dc094e1 100644
--- a/erpnext/demo/user/fixed_asset.py
+++ b/erpnext/demo/user/fixed_asset.py
@@ -6,46 +6,28 @@
import frappe
from frappe.utils.make_random import get_random
-from erpnext.assets.doctype.asset.asset import make_purchase_invoice, make_sales_invoice
+from erpnext.assets.doctype.asset.asset import make_sales_invoice
from erpnext.assets.doctype.asset.depreciation import post_depreciation_entries, scrap_asset
+
def work():
frappe.set_user(frappe.db.get_global('demo_accounts_user'))
- asset_list = make_asset_purchase_entry()
-
- if not asset_list:
- # fixed_asset.work() already run
- return
-
# Enable booking asset depreciation entry automatically
frappe.db.set_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically", 1)
-
+
# post depreciation entries as on today
post_depreciation_entries()
-
+
# scrap a random asset
frappe.db.set_value("Company", "Wind Power LLC", "disposal_account", "Gain/Loss on Asset Disposal - WPL")
-
+
asset = get_random_asset()
scrap_asset(asset.name)
-
- # Sell a random asset
- sell_an_asset()
-def make_asset_purchase_entry():
- asset_list = frappe.get_all("Asset", filters={"purchase_invoice": ["in", ("", None)]},
- fields=["name", "item_code", "gross_purchase_amount", "company", "purchase_date"])
-
- # make purchase invoice
- for asset in asset_list:
- pi = make_purchase_invoice(asset.name, asset.item_code, asset.gross_purchase_amount,
- asset.company, asset.purchase_date)
- pi.supplier = get_random("Supplier")
- pi.save()
- pi.submit()
-
- return asset_list
+ # Sell a random asset
+ sell_an_asset()
+
def sell_an_asset():
asset = get_random_asset()
@@ -55,8 +37,9 @@
if asset.value_after_depreciation else asset.gross_purchase_amount * 0.9
si.save()
si.submit()
-
+
+
def get_random_asset():
return frappe.db.sql(""" select name, item_code, value_after_depreciation, gross_purchase_amount
- from `tabAsset`
+ from `tabAsset`
where docstatus=1 and status not in ("Scrapped", "Sold") order by rand() limit 1""", as_dict=1)[0]
diff --git a/erpnext/education/doctype/assessment_group/assessment_group.json b/erpnext/education/doctype/assessment_group/assessment_group.json
index 56917d2..a8ffaf4 100644
--- a/erpnext/education/doctype/assessment_group/assessment_group.json
+++ b/erpnext/education/doctype/assessment_group/assessment_group.json
@@ -1,274 +1,90 @@
{
- "allow_copy": 0,
- "allow_guest_to_view": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:assessment_group_name",
- "beta": 0,
- "creation": "2016-08-04 04:42:48.319388",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
+ "actions": [],
+ "allow_import": 1,
+ "allow_rename": 1,
+ "autoname": "field:assessment_group_name",
+ "creation": "2016-08-04 04:42:48.319388",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "field_order": [
+ "assessment_group_name",
+ "is_group",
+ "section_break_2",
+ "parent_assessment_group",
+ "lft",
+ "rgt",
+ "old_parent"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "assessment_group_name",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Assessment Group Name",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "assessment_group_name",
+ "fieldtype": "Data",
+ "in_list_view": 1,
+ "label": "Assessment Group Name",
+ "reqd": 1,
+ "unique": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "is_group",
- "fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Is Group",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "default": "0",
+ "fieldname": "is_group",
+ "fieldtype": "Check",
+ "label": "Is Group"
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_2",
- "fieldtype": "Section Break",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "section_break_2",
+ "fieldtype": "Section Break",
+ "hidden": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "parent_assessment_group",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Parent Assessment Group",
- "length": 0,
- "no_copy": 0,
- "options": "Assessment Group",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "parent_assessment_group",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Parent Assessment Group",
+ "options": "Assessment Group",
+ "reqd": 1
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "lft",
- "fieldtype": "Int",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "lft",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "lft",
+ "fieldtype": "Int",
+ "label": "lft"
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "rgt",
- "fieldtype": "Int",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "rgt",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "rgt",
+ "fieldtype": "Int",
+ "label": "rgt"
+ },
{
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "old_parent",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "old_parent",
- "length": 0,
- "no_copy": 0,
- "options": "Assessment Group",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
+ "fieldname": "old_parent",
+ "fieldtype": "Link",
+ "ignore_user_permissions": 1,
+ "label": "old_parent",
+ "options": "Assessment Group"
}
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2017-11-10 19:09:25.366400",
- "modified_by": "Administrator",
- "module": "Education",
- "name": "Assessment Group",
- "name_case": "",
- "owner": "Administrator",
+ ],
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-18 18:01:14.710416",
+ "modified_by": "Administrator",
+ "module": "Education",
+ "name": "Assessment Group",
+ "nsm_parent_field": "parent_assessment_group",
+ "owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Academics User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Academics User",
+ "share": 1,
"write": 1
}
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "restrict_to_domain": "Education",
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 0,
- "track_seen": 0
+ ],
+ "quick_entry": 1,
+ "restrict_to_domain": "Education",
+ "sort_field": "modified",
+ "sort_order": "DESC"
}
\ No newline at end of file
diff --git a/erpnext/education/doctype/course/course.json b/erpnext/education/doctype/course/course.json
index 68426c3..da10db1 100644
--- a/erpnext/education/doctype/course/course.json
+++ b/erpnext/education/doctype/course/course.json
@@ -74,7 +74,7 @@
}
],
"image_field": "hero_image",
- "modified": "2019-06-12 12:34:23.748157",
+ "modified": "2020-03-29 12:50:27.677589",
"modified_by": "Administrator",
"module": "Education",
"name": "Course",
@@ -103,6 +103,30 @@
"role": "Instructor",
"share": 1,
"write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Administrator",
+ "share": 1,
+ "write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Education Manager",
+ "share": 1,
+ "write": 1
}
],
"restrict_to_domain": "Education",
diff --git a/erpnext/erpnext_integrations/custom/contact.json b/erpnext/erpnext_integrations/custom/contact.json
new file mode 100644
index 0000000..98a4bbc
--- /dev/null
+++ b/erpnext/erpnext_integrations/custom/contact.json
@@ -0,0 +1,60 @@
+{
+ "custom_fields": [
+ {
+ "_assign": null,
+ "_comments": null,
+ "_liked_by": null,
+ "_user_tags": null,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "collapsible_depends_on": null,
+ "columns": 0,
+ "creation": "2019-12-02 11:00:03.432994",
+ "default": null,
+ "depends_on": null,
+ "description": null,
+ "docstatus": 0,
+ "dt": "Contact",
+ "fetch_from": null,
+ "fetch_if_empty": 0,
+ "fieldname": "is_billing_contact",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "idx": 27,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "insert_after": "is_primary_contact",
+ "label": "Is Billing Contact",
+ "length": 0,
+ "modified": "2019-12-02 11:00:03.432994",
+ "modified_by": "Administrator",
+ "name": "Contact-is_billing_contact",
+ "no_copy": 0,
+ "options": null,
+ "owner": "Administrator",
+ "parent": null,
+ "parentfield": null,
+ "parenttype": null,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "print_width": null,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "translatable": 0,
+ "unique": 0,
+ "width": null
+ }
+ ],
+ "custom_perms": [],
+ "doctype": "Contact",
+ "property_setters": [],
+ "sync_on_migrate": 1
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/healthcare_service_unit/healthcare_service_unit.json b/erpnext/healthcare/doctype/healthcare_service_unit/healthcare_service_unit.json
index 6e92455..8601f69 100644
--- a/erpnext/healthcare/doctype/healthcare_service_unit/healthcare_service_unit.json
+++ b/erpnext/healthcare/doctype/healthcare_service_unit/healthcare_service_unit.json
@@ -1,542 +1,205 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
+ "actions": [],
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:healthcare_service_unit_name",
"beta": 1,
"creation": "2016-09-21 13:48:14.731437",
- "custom": 0,
"description": "Healthcare Service Unit",
- "docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 1,
+ "field_order": [
+ "healthcare_service_unit_name",
+ "parent_healthcare_service_unit",
+ "is_group",
+ "service_unit_type",
+ "allow_appointments",
+ "overlap_appointments",
+ "inpatient_occupancy",
+ "occupancy_status",
+ "warehouse",
+ "company",
+ "lft",
+ "rgt",
+ "old_parent"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "healthcare_service_unit_name",
"fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
"in_global_search": 1,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Service Unit",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
"reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
"unique": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"fieldname": "parent_healthcare_service_unit",
"fieldtype": "Link",
- "hidden": 0,
"ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Parent Service Unit",
- "length": 0,
- "no_copy": 0,
- "options": "Healthcare Service Unit",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Healthcare Service Unit"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"default": "0",
"depends_on": "eval:doc.inpatient_occupancy != 1 && doc.allow_appointments != 1",
"fieldname": "is_group",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Is Group",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Is Group"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"depends_on": "eval:doc.is_group != 1",
"fieldname": "service_unit_type",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Service Unit Type",
- "length": 0,
- "no_copy": 0,
- "options": "Healthcare Service Unit Type",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Healthcare Service Unit Type"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"default": "0",
"depends_on": "eval:doc.is_group != 1 && doc.inpatient_occupancy != 1",
"fetch_from": "service_unit_type.allow_appointments",
"fieldname": "allow_appointments",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Allow Appointments",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "0",
"depends_on": "eval:doc.is_group != 1 && doc.allow_appointments == 1 && doc.inpatient_occupany != 1",
"fetch_from": "service_unit_type.overlap_appointments",
"fieldname": "overlap_appointments",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Allow Overlap",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"default": "0",
"depends_on": "eval:doc.allow_appointments != 1 && doc.is_group != 1",
"fetch_from": "service_unit_type.inpatient_occupancy",
"fieldname": "inpatient_occupancy",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Inpatient Occupancy",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
"read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "",
"depends_on": "eval:doc.inpatient_occupancy == 1",
"fieldname": "occupancy_status",
"fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Occupancy Status",
- "length": 0,
"no_copy": 1,
"options": "Vacant\nOccupied",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "read_only": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"depends_on": "eval:doc.is_group != 1",
"fieldname": "warehouse",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Warehouse",
- "length": 0,
"no_copy": 1,
- "options": "Warehouse",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Warehouse"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "company",
"fieldtype": "Link",
- "hidden": 0,
"ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Company",
- "length": 0,
- "no_copy": 0,
"options": "Company",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
"remember_last_selected_value": 1,
- "report_hide": 0,
"reqd": 1,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "lft",
"fieldtype": "Int",
"hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "lft",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "rgt",
"fieldtype": "Int",
"hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "rgt",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "old_parent",
"fieldtype": "Link",
"hidden": 1,
"ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Old Parent",
- "length": 0,
"no_copy": 1,
"options": "Healthcare Service Unit",
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 1,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "report_hide": 1
}
],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-10-04 21:09:52.261882",
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-18 18:02:23.713439",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Healthcare Service Unit",
- "name_case": "",
+ "nsm_parent_field": "parent_healthcare_service_unit",
"owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
"email": 1,
"export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Nursing User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
- "write": 0
+ "share": 1
},
{
- "amend": 0,
- "cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Healthcare Administrator",
- "set_user_permissions": 0,
"share": 1,
- "submit": 0,
"write": 1
},
{
- "amend": 0,
- "cancel": 0,
"create": 1,
- "delete": 0,
"email": 1,
"export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Physician",
- "set_user_permissions": 0,
"share": 1,
- "submit": 0,
"write": 1
}
],
"quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
"restrict_to_domain": "Healthcare",
"search_fields": "healthcare_service_unit_name",
- "show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "healthcare_service_unit_name",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ "track_changes": 1
}
\ No newline at end of file
diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
index d562245..5f48c9f 100755
--- a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
+++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py
@@ -386,5 +386,5 @@
return frappe.db.sql("""select pp.name, pp.procedure, pp.parent, ct.practitioner,
ct.encounter_date, pp.practitioner, pp.date, pp.department
from `tabPatient Encounter` ct, `tabProcedure Prescription` pp
- where ct.patient='{0}' and pp.parent=ct.name and pp.appointment_booked=0
- order by ct.creation desc""".format(patient))
+ where ct.patient=%(patient)s and pp.parent=ct.name and pp.appointment_booked=0
+ order by ct.creation desc""", {"patient": patient})
diff --git a/erpnext/hr/doctype/department/department.json b/erpnext/hr/doctype/department/department.json
index a191b6b..6469f4c 100644
--- a/erpnext/hr/doctype/department/department.json
+++ b/erpnext/hr/doctype/department/department.json
@@ -129,11 +129,13 @@
],
"icon": "fa fa-sitemap",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2019-12-12 14:48:35.254308",
+ "modified": "2020-03-18 18:03:27.784362",
"modified_by": "Administrator",
"module": "HR",
"name": "Department",
+ "nsm_parent_field": "parent_department",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/hr/doctype/department/department.py b/erpnext/hr/doctype/department/department.py
index 9b2b581..2cef509 100644
--- a/erpnext/hr/doctype/department/department.py
+++ b/erpnext/hr/doctype/department/department.py
@@ -48,12 +48,17 @@
@frappe.whitelist()
def get_children(doctype, parent=None, company=None, is_root=False):
condition = ''
+ var_dict = {
+ "name": get_root_of("Department"),
+ "parent": parent,
+ "company": company,
+ }
if company == parent:
- condition = "name='{0}'".format(get_root_of("Department"))
+ condition = "name=%(name)s"
elif company:
- condition = "parent_department='{0}' and company='{1}'".format(parent, company)
+ condition = "parent_department=%(parent)s and company=%(company)s"
else:
- condition = "parent_department = '{0}'".format(parent)
+ condition = "parent_department = %(parent)s"
return frappe.db.sql("""
select
@@ -62,7 +67,7 @@
from `tab{doctype}`
where
{condition}
- order by name""".format(doctype=doctype, condition=condition), as_dict=1)
+ order by name""".format(doctype=doctype, condition=condition), var_dict, as_dict=1)
@frappe.whitelist()
def add_node():
diff --git a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
index fea4246..feaa925 100644
--- a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
+++ b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
@@ -190,6 +190,7 @@
component_max_benefit, depends_on_payment_days = frappe.db.get_value("Salary Component",
salary_component, ["max_benefit_amount", "depends_on_payment_days"])
+ benefit_amount = 0
if benefit_application:
benefit_amount = frappe.db.get_value("Employee Benefit Application Detail",
{"parent": benefit_application[0][0], "earning_component": salary_component}, "amount")
diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json
index 96ad1b7..d68caf1 100644
--- a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json
+++ b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json
@@ -71,7 +71,7 @@
"label": "Amount",
"oldfieldname": "tax_amount",
"oldfieldtype": "Currency",
- "options": "currency"
+ "options": "Company:company:default_currency"
},
{
"columns": 2,
@@ -81,7 +81,7 @@
"label": "Total",
"oldfieldname": "total",
"oldfieldtype": "Currency",
- "options": "currency",
+ "options": "Company:company:default_currency",
"read_only": 1
},
{
@@ -95,7 +95,7 @@
],
"istable": 1,
"links": [],
- "modified": "2019-12-11 13:50:02.883328",
+ "modified": "2020-03-11 13:25:06.721917",
"modified_by": "Administrator",
"module": "HR",
"name": "Expense Taxes and Charges",
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 96e4cb5..f78e17f 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -130,7 +130,7 @@
if self.status == "Approved":
for dt in daterange(getdate(self.from_date), getdate(self.to_date)):
date = dt.strftime("%Y-%m-%d")
- status = "Half Day" if date == self.half_day_date else "On Leave"
+ status = "Half Day" if getdate(date) == getdate(self.half_day_date) else "On Leave"
attendance_name = frappe.db.exists('Attendance', dict(employee = self.employee,
attendance_date = date, docstatus = ('!=', 2)))
diff --git a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
index 3770da7..e9dc776 100644
--- a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
+++ b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
@@ -6,11 +6,14 @@
import frappe
import unittest
from frappe.utils import nowdate,flt, cstr,random_string
-# test_records = frappe.get_test_records('Vehicle Log')
+
class TestVehicleLog(unittest.TestCase):
def test_make_vehicle_log_and_syncing_of_odometer_value(self):
- employee_id=frappe.db.sql("""select name from `tabEmployee` order by modified desc limit 1""")[0][0]
+ employee_id = frappe.db.sql("""select name from `tabEmployee` where status='Active' order by modified desc limit 1""")
+ employee_id = employee_id[0][0] if employee_id else None
+
license_plate = get_vehicle(employee_id)
+
vehicle_log = frappe.get_doc({
"doctype": "Vehicle Log",
"license_plate": cstr(license_plate),
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js
index bdb37d2..6f3a0dc 100644
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js
+++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.js
@@ -3,11 +3,6 @@
frappe.ui.form.on("Vehicle Log", {
refresh: function(frm) {
-
- if(frm.doc.license_plate && frm.doc.__islocal){
- frm.events.set_vehicle_details(frm);
- }
-
if(frm.doc.docstatus == 1) {
frm.add_custom_button(__('Expense Claim'), function() {
frm.events.expense_claim(frm);
@@ -16,27 +11,6 @@
}
},
- license_plate: function(frm) {
- if(frm.doc.license_plate){
- frm.events.set_vehicle_details(frm);
- }
- },
-
- set_vehicle_details: function(frm) {
- frappe.call({
- method: "erpnext.hr.doctype.vehicle_log.vehicle_log.get_make_model",
- args: {
- license_plate: frm.doc.license_plate
- },
- callback: function(r) {
- frappe.model.set_value(cur_frm.doctype, cur_frm.docname, "make", r.message[0]);
- frappe.model.set_value(cur_frm.doctype, cur_frm.docname, "model", r.message[1]);
- frappe.model.set_value(cur_frm.doctype, cur_frm.docname, "last_odometer", r.message[2]);
- frappe.model.set_value(cur_frm.doctype, cur_frm.docname, "employee", r.message[3]);
- }
- });
- },
-
expense_claim: function(frm){
frappe.call({
method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim",
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.json b/erpnext/hr/doctype/vehicle_log/vehicle_log.json
index 52effff..619e295 100644
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.json
+++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.json
@@ -1,5 +1,4 @@
{
- "actions": [],
"autoname": "naming_series:",
"creation": "2016-09-03 14:14:51.788550",
"doctype": "DocType",
@@ -56,6 +55,8 @@
"reqd": 1
},
{
+ "fetch_from": "license_plate.employee",
+ "fetch_if_empty": 1,
"fieldname": "employee",
"fieldtype": "Link",
"in_list_view": 1,
@@ -73,11 +74,13 @@
"fieldtype": "Column Break"
},
{
+ "fetch_from": "license_plate.model",
"fieldname": "model",
"fieldtype": "Read Only",
"label": "Model"
},
{
+ "fetch_from": "license_plate.make",
"fieldname": "make",
"fieldtype": "Read Only",
"label": "Make"
@@ -152,6 +155,7 @@
"read_only": 1
},
{
+ "fetch_from": "license_plate.last_odometer",
"fieldname": "last_odometer",
"fieldtype": "Int",
"label": "last Odometer Value ",
@@ -164,8 +168,7 @@
}
],
"is_submittable": 1,
- "links": [],
- "modified": "2020-01-28 12:43:34.419647",
+ "modified": "2020-03-18 16:45:45.060761",
"modified_by": "Administrator",
"module": "HR",
"name": "Vehicle Log",
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.py b/erpnext/hr/doctype/vehicle_log/vehicle_log.py
index 12cc1dd..8affab2 100644
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.py
+++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.py
@@ -12,18 +12,7 @@
class VehicleLog(Document):
def validate(self):
if flt(self.odometer) < flt(self.last_odometer):
- frappe.throw(_("Current Odometer reading entered should be greater than initial Vehicle Odometer {0}").format(self.last_odometer))
- for service_detail in self.service_detail:
- if (service_detail.service_item or service_detail.type or service_detail.frequency or service_detail.expense_amount):
- if not (service_detail.service_item and service_detail.type and service_detail.frequency and service_detail.expense_amount):
- frappe.throw(_("Service Item,Type,frequency and expense amount are required"))
-
- def before_insert(self):
- model_details = get_make_model(self.license_plate)
- self.make = model_details[0]
- self.model = model_details[1]
- self.last_odometer = model_details[2]
- self.employee = model_details[3]
+ frappe.throw(_("Current Odometer Value should be greater than Last Odometer Value {0}").format(self.last_odometer))
def on_submit(self):
frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", self.odometer)
@@ -35,34 +24,25 @@
frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", updated_odometer_value)
@frappe.whitelist()
-def get_make_model(license_plate):
- vehicle=frappe.get_doc("Vehicle",license_plate)
- return (vehicle.make, vehicle.model, vehicle.last_odometer, vehicle.employee)
-
-@frappe.whitelist()
def make_expense_claim(docname):
- def check_exp_claim_exists():
- exp_claim = frappe.db.sql("""select name from `tabExpense Claim` where vehicle_log=%s""",vehicle_log.name)
- return exp_claim[0][0] if exp_claim else ""
- def calc_service_exp():
- total_exp_amt=0
- exp_claim = check_exp_claim_exists()
- if exp_claim:
- frappe.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(exp_claim))
- for serdetail in vehicle_log.service_detail:
- total_exp_amt = total_exp_amt + serdetail.expense_amount
- return total_exp_amt
+ expense_claim = frappe.db.exists("Expense Claim", {"vehicle_log": docname})
+ if expense_claim:
+ frappe.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(expense_claim))
vehicle_log = frappe.get_doc("Vehicle Log", docname)
+ service_expense = sum([flt(d.expense_amount) for d in vehicle_log.service_detail])
+
+ claim_amount = service_expense + flt(vehicle_log.price)
+ if not claim_amount:
+ frappe.throw(_("No additional expenses has been added"))
+
exp_claim = frappe.new_doc("Expense Claim")
- exp_claim.employee=vehicle_log.employee
- exp_claim.vehicle_log=vehicle_log.name
- exp_claim.remark=_("Expense Claim for Vehicle Log {0}").format(vehicle_log.name)
- fuel_price=vehicle_log.price
- total_claim_amt=calc_service_exp() + fuel_price
- exp_claim.append("expenses",{
- "expense_date":vehicle_log.date,
- "description":_("Vehicle Expenses"),
- "amount":total_claim_amt
+ exp_claim.employee = vehicle_log.employee
+ exp_claim.vehicle_log = vehicle_log.name
+ exp_claim.remark = _("Expense Claim for Vehicle Log {0}").format(vehicle_log.name)
+ exp_claim.append("expenses", {
+ "expense_date": vehicle_log.date,
+ "description": _("Vehicle Expenses"),
+ "amount": claim_amount
})
return exp_claim.as_dict()
diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.json b/erpnext/hr/doctype/vehicle_service/vehicle_service.json
index 7d9d0df..e0bce2b 100644
--- a/erpnext/hr/doctype/vehicle_service/vehicle_service.json
+++ b/erpnext/hr/doctype/vehicle_service/vehicle_service.json
@@ -1,153 +1,57 @@
{
- "allow_copy": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2016-09-03 19:20:14.561962",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Document",
- "editable_grid": 1,
+ "creation": "2016-09-03 19:20:14.561962",
+ "doctype": "DocType",
+ "document_type": "Document",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "service_item",
+ "type",
+ "frequency",
+ "expense_amount"
+ ],
"fields": [
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "service_item",
- "fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Service Item",
- "length": 0,
- "no_copy": 0,
- "options": "\nBrake Oil\nBrake Pad\nClutch Plate\nEngine Oil\nOil Change\nWheels",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "service_item",
+ "fieldtype": "Select",
+ "in_list_view": 1,
+ "label": "Service Item",
+ "options": "\nBrake Oil\nBrake Pad\nClutch Plate\nEngine Oil\nOil Change\nWheels",
+ "reqd": 1
+ },
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "type",
- "fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Type",
- "length": 0,
- "no_copy": 0,
- "options": "\nInspection\nService\nChange",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "type",
+ "fieldtype": "Select",
+ "in_list_view": 1,
+ "label": "Type",
+ "options": "\nInspection\nService\nChange",
+ "reqd": 1
+ },
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "frequency",
- "fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Frequency",
- "length": 0,
- "no_copy": 0,
- "options": "\nMileage\nMonthly\nQuarterly\nHalf Yearly\nYearly",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
+ "fieldname": "frequency",
+ "fieldtype": "Select",
+ "in_list_view": 1,
+ "label": "Frequency",
+ "options": "\nMileage\nMonthly\nQuarterly\nHalf Yearly\nYearly",
+ "reqd": 1
+ },
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "expense_amount",
- "fieldtype": "Currency",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Expense",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
+ "fieldname": "expense_amount",
+ "fieldtype": "Currency",
+ "in_list_view": 1,
+ "label": "Expense",
+ "reqd": 1
}
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
-
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2017-01-09 11:10:29.476907",
- "modified_by": "Administrator",
- "module": "HR",
- "name": "Vehicle Service",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0
+ ],
+ "istable": 1,
+ "modified": "2020-03-18 16:49:46.645004",
+ "modified_by": "Administrator",
+ "module": "HR",
+ "name": "Vehicle Service",
+ "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/loan/test_loan.py b/erpnext/loan_management/doctype/loan/test_loan.py
index 08c2f22..759b0d8 100644
--- a/erpnext/loan_management/doctype/loan/test_loan.py
+++ b/erpnext/loan_management/doctype/loan/test_loan.py
@@ -273,11 +273,11 @@
penalty_amount = (accrued_interest_amount * 4 * 25) / (100 * days_in_year(get_datetime(first_date).year))
- lia = frappe.get_all("Loan Interest Accrual", fields=["is_paid"],
- filters={"loan": loan.name}, order_by="posting_date")
+ lia1 = frappe.get_value("Loan Interest Accrual", {"loan": loan.name, "is_paid": 1}, 'name')
+ lia2 = frappe.get_value("Loan Interest Accrual", {"loan": loan.name, "is_paid": 0}, 'name')
- self.assertTrue(lia[0].get('is_paid'))
- self.assertFalse(lia[1].get('is_paid'))
+ self.assertTrue(lia1)
+ self.assertTrue(lia2)
def test_security_shortfall(self):
pledges = []
@@ -294,18 +294,21 @@
make_loan_disbursement_entry(loan.name, loan.loan_amount)
- frappe.db.sql(""" UPDATE `tabLoan Security Price` SET loan_security_price = %s
- where loan_security=%s""", (100, 'Test Security 2'))
+ frappe.db.sql(""" UPDATE `tabLoan Security Price` SET loan_security_price = 100
+ where loan_security='Test Security 2'""")
check_for_ltv_shortfall()
loan_security_shortfall = frappe.get_doc("Loan Security Shortfall", {"loan": loan.name})
-
self.assertTrue(loan_security_shortfall)
self.assertEquals(loan_security_shortfall.loan_amount, 1000000.00)
self.assertEquals(loan_security_shortfall.security_value, 400000.00)
self.assertEquals(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'""")
+
+
def create_loan_accounts():
if not frappe.db.exists("Account", "Loans and Advances (Assets) - _TC"):
frappe.get_doc({
@@ -399,7 +402,8 @@
"doctype": "Loan Security Type",
"loan_security_type": "Stock",
"unit_of_measure": "Nos",
- "haircut": 50.00
+ "haircut": 50.00,
+ "loan_to_value_ratio": 50
}).insert(ignore_permissions=True)
def create_loan_security():
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
index a3442e4..b8e6dab 100644
--- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py
+++ b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py
@@ -130,9 +130,10 @@
loan.loan_account, loan.principal_amount + loan.balance_loan_amount, loan.interest_amount,
payable_principal = loan.principal_amount , posting_date=posting_date)
- frappe.db.sql("""UPDATE `tabRepayment Schedule`
- SET is_accrued = 1 where name in (%s)""" #nosec
- % ", ".join(['%s']*len(accrued_entries)), tuple(accrued_entries))
+ 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 make_loan_interest_accrual_entry(loan, applicant_type, applicant, interest_income_account, loan_account,
pending_principal_amount, interest_amount, payable_principal=None, process_loan_interest=None, posting_date=None):
diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
index 1cd9446..4c31bd0 100644
--- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
+++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.js
@@ -14,27 +14,37 @@
refresh: function(frm) {
erpnext.hide_company();
if (frm.doc.customer && frm.doc.docstatus === 1) {
- frm.add_custom_button(__('View Orders'), function() {
- frappe.set_route('List', 'Sales Order', {blanket_order: frm.doc.name});
- });
- frm.add_custom_button(__("Create Sales Order"), function(){
+ frm.add_custom_button(__("Sales Order"), function() {
frappe.model.open_mapped_doc({
- method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_sales_order",
- frm: frm
+ method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+ frm: frm,
+ args: {
+ doctype: 'Sales Order'
+ }
});
- }).addClass("btn-primary");
+ }, __('Create'));
+
+ frm.add_custom_button(__("Quotation"), function() {
+ frappe.model.open_mapped_doc({
+ method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+ frm: frm,
+ args: {
+ doctype: 'Quotation'
+ }
+ });
+ }, __('Create'));
}
if (frm.doc.supplier && frm.doc.docstatus === 1) {
- frm.add_custom_button(__('View Orders'), function() {
- frappe.set_route('List', 'Purchase Order', {blanket_order: frm.doc.name});
- });
- frm.add_custom_button(__("Create Purchase Order"), function(){
+ frm.add_custom_button(__("Purchase Order"), function(){
frappe.model.open_mapped_doc({
- method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_purchase_order",
- frm: frm
+ method: "erpnext.manufacturing.doctype.blanket_order.blanket_order.make_order",
+ frm: frm,
+ args: {
+ doctype: 'Purchase Order'
+ }
});
- }).addClass("btn-primary");
+ }, __('Create'));
}
},
diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
index 38118bd..d7556ad 100644
--- a/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
+++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order.py
@@ -14,10 +14,18 @@
class BlanketOrder(Document):
def validate(self):
self.validate_dates()
+ self.validate_duplicate_items()
def validate_dates(self):
if getdate(self.from_date) > getdate(self.to_date):
- frappe.throw(_("From date cannot be greater than To date"))
+ frappe.throw(_("From date cannot be greater than To date"))
+
+ def validate_duplicate_items(self):
+ item_list = []
+ for item in self.items:
+ if item.item_code in item_list:
+ frappe.throw(_("Note: Item {0} added multiple times").format(frappe.bold(item.item_code)))
+ item_list.append(item.item_code)
def update_ordered_qty(self):
ref_doctype = "Sales Order" if self.blanket_order_type == "Selling" else "Purchase Order"
@@ -35,7 +43,14 @@
d.db_set("ordered_qty", item_ordered_qty.get(d.item_code, 0))
@frappe.whitelist()
-def make_sales_order(source_name):
+def make_order(source_name):
+ doctype = frappe.flags.args.doctype
+
+ def update_doc(source_doc, target_doc, source_parent):
+ if doctype == 'Quotation':
+ target_doc.quotation_to = 'Customer'
+ target_doc.party_name = source_doc.customer
+
def update_item(source, target, source_parent):
target_qty = source.get("qty") - source.get("ordered_qty")
target.qty = target_qty if not flt(target_qty) < 0 else 0
@@ -49,39 +64,11 @@
target_doc = get_mapped_doc("Blanket Order", source_name, {
"Blanket Order": {
- "doctype": "Sales Order"
+ "doctype": doctype,
+ "postprocess": update_doc
},
"Blanket Order Item": {
- "doctype": "Sales Order Item",
- "field_map": {
- "rate": "blanket_order_rate",
- "parent": "blanket_order"
- },
- "postprocess": update_item
- }
- })
- return target_doc
-
-@frappe.whitelist()
-def make_purchase_order(source_name):
- def update_item(source, target, source_parent):
- target_qty = source.get("qty") - source.get("ordered_qty")
- target.qty = target_qty if not flt(target_qty) < 0 else 0
- item = get_item_defaults(target.item_code, source_parent.company)
- if item:
- target.item_name = item.get("item_name")
- target.description = item.get("description")
- target.uom = item.get("stock_uom")
- target.warehouse = item.get("default_warehouse")
- target.against_blanket_order = 1
- target.blanket_order = source_name
-
- target_doc = get_mapped_doc("Blanket Order", source_name, {
- "Blanket Order": {
- "doctype": "Purchase Order"
- },
- "Blanket Order Item": {
- "doctype": "Purchase Order Item",
+ "doctype": doctype + " Item",
"field_map": {
"rate": "blanket_order_rate",
"parent": "blanket_order"
diff --git a/erpnext/manufacturing/doctype/blanket_order/blanket_order_dashboard.py b/erpnext/manufacturing/doctype/blanket_order/blanket_order_dashboard.py
index ed319a0..d9aa0ca 100644
--- a/erpnext/manufacturing/doctype/blanket_order/blanket_order_dashboard.py
+++ b/erpnext/manufacturing/doctype/blanket_order/blanket_order_dashboard.py
@@ -6,7 +6,7 @@
'fieldname': 'blanket_order',
'transactions': [
{
- 'items': ['Purchase Order', 'Sales Order']
+ 'items': ['Purchase Order', 'Sales Order', 'Quotation']
}
]
}
diff --git a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
index 455ea06..3171def 100644
--- a/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
+++ b/erpnext/manufacturing/doctype/blanket_order/test_blanket_order.py
@@ -7,13 +7,17 @@
import unittest
from frappe.utils import add_months, today
from erpnext import get_company_currency
-from .blanket_order import make_sales_order, make_purchase_order
+from .blanket_order import make_order
class TestBlanketOrder(unittest.TestCase):
+ def setUp(self):
+ frappe.flags.args = frappe._dict()
+
def test_sales_order_creation(self):
bo = make_blanket_order(blanket_order_type="Selling")
- so = make_sales_order(bo.name)
+ frappe.flags.args.doctype = 'Sales Order'
+ so = make_order(bo.name)
so.currency = get_company_currency(so.company)
so.delivery_date = today()
so.items[0].qty = 10
@@ -29,7 +33,8 @@
self.assertEqual(so.items[0].qty, bo.items[0].ordered_qty)
# test the quantity
- so1 = make_sales_order(bo.name)
+ frappe.flags.args.doctype = 'Sales Order'
+ so1 = make_order(bo.name)
so1.currency = get_company_currency(so1.company)
self.assertEqual(so1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))
@@ -37,7 +42,8 @@
def test_purchase_order_creation(self):
bo = make_blanket_order(blanket_order_type="Purchasing")
- po = make_purchase_order(bo.name)
+ frappe.flags.args.doctype = 'Purchase Order'
+ po = make_order(bo.name)
po.currency = get_company_currency(po.company)
po.schedule_date = today()
po.items[0].qty = 10
@@ -53,7 +59,8 @@
self.assertEqual(po.items[0].qty, bo.items[0].ordered_qty)
# test the quantity
- po1 = make_sales_order(bo.name)
+ frappe.flags.args.doctype = 'Purchase Order'
+ po1 = make_order(bo.name)
po1.currency = get_company_currency(po1.company)
self.assertEqual(po1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))
@@ -78,7 +85,7 @@
"qty": args.quantity or 1000,
"rate": args.rate or 100
})
-
+
bo.insert()
bo.submit()
return bo
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 3acaee4..ebfb762 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -29,7 +29,10 @@
frm.set_query("item", function() {
return {
- query: "erpnext.controllers.queries.item_query"
+ query: "erpnext.controllers.queries.item_query",
+ filters: {
+ "doctype": "BOM"
+ }
};
});
@@ -43,8 +46,7 @@
frm.set_query("item_code", "items", function() {
return {
- query: "erpnext.controllers.queries.item_query",
- filters: [["Item", "name", "!=", cur_frm.doc.item]]
+ query: "erpnext.controllers.queries.item_query"
};
});
@@ -120,22 +122,58 @@
});
}
}
+
+
+ if (frm.doc.__onload && frm.doc.__onload["has_variants"]) {
+ frm.set_intro(__('This is a Template BOM and will be used to make the work order for {0} of the item {1}',
+ [
+ `<a class="variants-intro">variants</a>`,
+ `<a href="#Form/Item/${frm.doc.item}">${frm.doc.item}</a>`,
+ ]), true);
+
+ frm.$wrapper.find(".variants-intro").on("click", () => {
+ frappe.set_route("List", "Item", {"variant_of": frm.doc.item});
+ });
+ }
},
make_work_order: function(frm) {
- const fields = [{
+ const fields = [];
+
+ if (frm.doc.__onload && frm.doc.__onload["has_variants"]) {
+ fields.push({
+ fieldtype: 'Link',
+ label: __('Variant Item'),
+ fieldname: 'item',
+ options: "Item",
+ reqd: 1,
+ get_query: function() {
+ return {
+ query: "erpnext.controllers.queries.item_query",
+ filters: {
+ "variant_of": frm.doc.item
+ }
+ };
+ }
+ });
+ }
+
+ fields.push({
fieldtype: 'Float',
label: __('Qty To Manufacture'),
fieldname: 'qty',
reqd: 1,
default: 1
- }];
+ });
frappe.prompt(fields, data => {
+ let item = data.item || frm.doc.item;
+
frappe.call({
method: "erpnext.manufacturing.doctype.work_order.work_order.make_work_order",
args: {
- item: frm.doc.item,
+ bom_no: frm.doc.name,
+ item: item,
qty: data.qty || 0.0,
project: frm.doc.project
},
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 7f8bd67..6ccd12a 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -59,6 +59,10 @@
self.name = name
+ def onload(self):
+ super(BOM, self).onload()
+ if self.get("item") and cint(frappe.db.get_value("Item", self.item, "has_variants")):
+ self.set_onload("has_variants", True)
def validate(self):
self.route = frappe.scrub(self.name).replace('_', '-')
@@ -114,10 +118,6 @@
child = self.append('operations', d)
child.hour_rate = flt(d.hour_rate / self.conversion_rate, 2)
- def validate_rm_item(self, item):
- if (item[0]['name'] in [it.item_code for it in self.items]) and item[0]['name'] == self.item:
- frappe.throw(_("BOM #{0}: Raw material cannot be same as main Item").format(self.name))
-
def set_bom_material_details(self):
for item in self.get("items"):
self.validate_bom_currecny(item)
@@ -147,7 +147,6 @@
args = json.loads(args)
item = self.get_item_det(args['item_code'])
- self.validate_rm_item(item)
args['bom_no'] = args['bom_no'] or item and cstr(item[0]['default_bom']) or ''
args['transfer_for_manufacture'] = (cstr(args.get('include_item_in_manufacturing', '')) or
@@ -498,6 +497,14 @@
self.scrap_material_cost = total_sm_cost
self.base_scrap_material_cost = base_total_sm_cost
+ def update_new_bom(self, old_bom, new_bom, rate):
+ for d in self.get("items"):
+ if d.bom_no != old_bom: continue
+
+ d.bom_no = new_bom
+ d.rate = rate
+ d.amount = (d.stock_qty or d.qty) * rate
+
def update_exploded_items(self):
""" Update Flat BOM, following will be correct data"""
self.get_exploded_items()
@@ -827,6 +834,10 @@
def get_bom_diff(bom1, bom2):
from frappe.model import table_fields
+ if bom1 == bom2:
+ frappe.throw(_("BOM 1 {0} and BOM 2 {1} should not be same")
+ .format(frappe.bold(bom1), frappe.bold(bom2)))
+
doc1 = frappe.get_doc('BOM', bom1)
doc2 = frappe.get_doc('BOM', bom2)
diff --git a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
index 31a9fdb..2758a42 100644
--- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
+++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
@@ -14,10 +14,13 @@
class BOMUpdateTool(Document):
def replace_bom(self):
self.validate_bom()
- self.update_new_bom()
+
+ unit_cost = get_new_bom_unit_cost(self.new_bom)
+ self.update_new_bom(unit_cost)
+
frappe.cache().delete_key('bom_children')
bom_list = self.get_parent_boms(self.new_bom)
- updated_bom = []
+
with click.progressbar(bom_list) as bom_list:
pass
for bom in bom_list:
@@ -26,7 +29,9 @@
# this is only used for versioning and we do not want
# to make separate db calls by using load_doc_before_save
# which proves to be expensive while doing bulk replace
- bom_obj._doc_before_save = bom_obj.as_dict()
+ bom_obj._doc_before_save = bom_obj
+ bom_obj.update_new_bom(self.current_bom, self.new_bom, unit_cost)
+ bom_obj.update_exploded_items()
bom_obj.calculate_cost()
bom_obj.update_parent_cost()
bom_obj.db_update()
@@ -43,14 +48,10 @@
!= frappe.db.get_value("BOM", self.new_bom, "item"):
frappe.throw(_("The selected BOMs are not for the same item"))
- def update_new_bom(self):
- new_bom_unitcost = frappe.db.sql("""SELECT `total_cost`/`quantity`
- FROM `tabBOM` WHERE name = %s""", self.new_bom)
- new_bom_unitcost = flt(new_bom_unitcost[0][0]) if new_bom_unitcost else 0
-
+ def update_new_bom(self, unit_cost):
frappe.db.sql("""update `tabBOM Item` set bom_no=%s,
rate=%s, amount=stock_qty*%s where bom_no = %s and docstatus < 2 and parenttype='BOM'""",
- (self.new_bom, new_bom_unitcost, new_bom_unitcost, self.current_bom))
+ (self.new_bom, unit_cost, unit_cost, self.current_bom))
def get_parent_boms(self, bom, bom_list=[]):
data = frappe.db.sql("""SELECT DISTINCT parent FROM `tabBOM Item`
@@ -65,12 +66,18 @@
return list(set(bom_list))
+def get_new_bom_unit_cost(bom):
+ new_bom_unitcost = frappe.db.sql("""SELECT `total_cost`/`quantity`
+ FROM `tabBOM` WHERE name = %s""", bom)
+
+ return flt(new_bom_unitcost[0][0]) if new_bom_unitcost else 0
+
@frappe.whitelist()
def enqueue_replace_bom(args):
if isinstance(args, string_types):
args = json.loads(args)
- frappe.enqueue("erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.replace_bom", args=args, timeout=4000)
+ frappe.enqueue("erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.replace_bom", args=args, timeout=40000)
frappe.msgprint(_("Queued for replacing the BOM. It may take a few minutes."))
@frappe.whitelist()
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js
index bc8c229..8c7876d 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card.js
@@ -20,7 +20,7 @@
}
}
- if (frm.doc.docstatus == 0 && frm.doc.for_quantity > frm.doc.total_completed_qty
+ if (frm.doc.docstatus == 0 && (frm.doc.for_quantity > frm.doc.total_completed_qty || !frm.doc.for_quantity)
&& (!frm.doc.items.length || frm.doc.for_quantity == frm.doc.transferred_qty)) {
frm.trigger("prepare_timer_buttons");
}
@@ -59,10 +59,14 @@
let completed_time = frappe.datetime.now_datetime();
frm.trigger("hide_timer");
- frappe.prompt({fieldtype: 'Float', label: __('Completed Quantity'),
- fieldname: 'qty', reqd: 1, default: frm.doc.for_quantity}, data => {
- frm.events.complete_job(frm, completed_time, data.qty);
- }, __("Enter Value"), __("Complete"));
+ if (frm.doc.for_quantity) {
+ frappe.prompt({fieldtype: 'Float', label: __('Completed Quantity'),
+ fieldname: 'qty', reqd: 1, default: frm.doc.for_quantity}, data => {
+ frm.events.complete_job(frm, completed_time, data.qty);
+ }, __("Enter Value"), __("Complete"));
+ } else {
+ frm.events.complete_job(frm, completed_time, 0);
+ }
}).addClass("btn-primary");
}
},
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.json b/erpnext/manufacturing/doctype/job_card/job_card.json
index 156acce..7661fff 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.json
+++ b/erpnext/manufacturing/doctype/job_card/job_card.json
@@ -99,8 +99,7 @@
"fieldname": "for_quantity",
"fieldtype": "Float",
"in_list_view": 1,
- "label": "Qty To Manufacture",
- "reqd": 1
+ "label": "Qty To Manufacture"
},
{
"fieldname": "wip_warehouse",
@@ -122,6 +121,7 @@
"options": "Employee"
},
{
+ "allow_bulk_edit": 1,
"fieldname": "time_logs",
"fieldtype": "Table",
"label": "Time Logs",
@@ -290,7 +290,7 @@
}
],
"is_submittable": 1,
- "modified": "2019-12-03 13:08:57.926201",
+ "modified": "2020-03-27 13:36:35.417502",
"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 029db1c..f8c60f2 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/job_card.py
@@ -191,12 +191,9 @@
if not self.time_logs:
frappe.throw(_("Time logs are required for job card {0}").format(self.name))
- if self.total_completed_qty <= 0.0:
- frappe.throw(_("Total completed qty must be greater than zero"))
-
- if self.total_completed_qty != self.for_quantity:
- frappe.throw(_("The total completed qty({0}) must be equal to qty to manufacture({1})")
- .format(frappe.bold(self.total_completed_qty),frappe.bold(self.for_quantity)))
+ if self.for_quantity and self.total_completed_qty != self.for_quantity:
+ frappe.throw(_("The total completed qty({0}) must be equal to qty to manufacture({1})"
+ .format(frappe.bold(self.total_completed_qty),frappe.bold(self.for_quantity))))
def update_work_order(self):
if not self.work_order:
@@ -205,27 +202,34 @@
for_quantity, time_in_mins = 0, 0
from_time_list, to_time_list = [], []
- for d in frappe.get_all('Job Card',
- filters = {'docstatus': 1, 'operation_id': self.operation_id}):
- doc = frappe.get_doc('Job Card', d.name)
- for_quantity += doc.total_completed_qty
- time_in_mins += doc.total_time_in_mins
- for time_log in doc.time_logs:
- if time_log.from_time:
- from_time_list.append(time_log.from_time)
- if time_log.to_time:
- to_time_list.append(time_log.to_time)
+ data = frappe.get_all('Job Card',
+ fields = ["sum(total_time_in_mins) as time_in_mins", "sum(total_completed_qty) as completed_qty"],
+ filters = {"docstatus": 1, "work_order": self.work_order,
+ "workstation": self.workstation, "operation": self.operation})
+
+ if data and len(data) > 0:
+ for_quantity = data[0].completed_qty
+ time_in_mins = data[0].time_in_mins
if for_quantity:
+ time_data = frappe.db.sql("""
+ SELECT
+ min(from_time) as start_time, max(to_time) as end_time
+ FROM `tabJob Card` jc, `tabJob Card Time Log` jctl
+ WHERE
+ jctl.parent = jc.name and jc.work_order = %s
+ and jc.workstation = %s and jc.operation = %s and jc.docstatus = 1
+ """, (self.work_order, self.workstation, self.operation), as_dict=1)
+
wo = frappe.get_doc('Work Order', self.work_order)
for data in wo.operations:
- if data.name == self.operation_id:
+ if data.workstation == self.workstation and data.operation == self.operation:
data.completed_qty = for_quantity
data.actual_operation_time = time_in_mins
- data.actual_start_time = min(from_time_list) if from_time_list else None
- data.actual_end_time = max(to_time_list) if to_time_list else None
+ data.actual_start_time = time_data[0].start_time if time_data else None
+ data.actual_end_time = time_data[0].end_time if time_data else None
wo.flags.ignore_validate_update_after_submit = True
wo.update_operation_status()
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py
index a79ea0e..358a542 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py
@@ -144,7 +144,7 @@
item_condition = " and mr_item.item_code ={0}".format(frappe.db.escape(self.item_code))
items = frappe.db.sql("""select distinct parent, name, item_code, warehouse, description,
- (qty - ordered_qty) as pending_qty
+ (qty - ordered_qty) * conversion_factor as pending_qty
from `tabMaterial Request Item` mr_item
where parent in (%s) and docstatus = 1 and qty > ordered_qty
and exists (select name from `tabBOM` bom where bom.item=mr_item.item_code
diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py
index 0a8f41f..2260bef 100644
--- a/erpnext/manufacturing/doctype/work_order/test_work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py
@@ -14,6 +14,7 @@
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.stock.doctype.item.test_item import make_item
from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
+from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
class TestWorkOrder(unittest.TestCase):
def setUp(self):
@@ -82,6 +83,37 @@
wo_order.set_work_order_operations()
self.assertEqual(wo_order.planned_operating_cost, cost*2)
+ def test_resered_qty_for_partial_completion(self):
+ item = "_Test Item"
+ warehouse = create_warehouse("Test Warehouse for reserved_qty - _TC")
+
+ bin1_at_start = get_bin(item, warehouse)
+
+ # reset to correct value
+ bin1_at_start.update_reserved_qty_for_production()
+
+ wo_order = make_wo_order_test_record(item="_Test FG Item", qty=2,
+ source_warehouse=warehouse, skip_transfer=1)
+
+ bin1_on_submit = get_bin(item, warehouse)
+
+ # reserved qty for production is updated
+ self.assertEqual(cint(bin1_at_start.reserved_qty_for_production) + 2,
+ cint(bin1_on_submit.reserved_qty_for_production))
+
+ test_stock_entry.make_stock_entry(item_code="_Test Item",
+ target=warehouse, qty=100, basic_rate=100)
+ test_stock_entry.make_stock_entry(item_code="_Test Item Home Desktop 100",
+ target=warehouse, qty=100, basic_rate=100)
+
+ s = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 1))
+ s.submit()
+
+ bin1_at_completion = get_bin(item, warehouse)
+
+ self.assertEqual(cint(bin1_at_completion.reserved_qty_for_production),
+ cint(bin1_on_submit.reserved_qty_for_production) - 1)
+
def test_production_item(self):
wo_order = make_wo_order_test_record(item="_Test FG Item", qty=1, do_not_save=True)
frappe.db.set_value("Item", "_Test FG Item", "end_of_life", "2000-1-1")
@@ -404,7 +436,7 @@
wo_order.company = args.company or "_Test Company"
wo_order.stock_uom = args.stock_uom or "_Test UOM"
wo_order.use_multi_level_bom=0
- wo_order.skip_transfer=1
+ wo_order.skip_transfer=args.skip_transfer or 0
wo_order.get_items_and_operations_from_bom()
wo_order.sales_order = args.sales_order or None
wo_order.planned_start_date = args.planned_start_date or now()
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index dd4a872..84bfab2 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -279,7 +279,7 @@
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
-
+ print(row.planned_start_time, original_start_time, plan_days)
if date_diff(row.planned_start_time, original_start_time) > plan_days:
frappe.message_log.pop()
frappe.throw(_("Unable to find the time slot in the next {0} days for the operation {1}.")
@@ -314,7 +314,7 @@
stock_entry = frappe.db.sql("""select name from `tabStock Entry`
where work_order = %s and docstatus = 1""", self.name)
if stock_entry:
- frappe.throw(_("Cannot cancel because submitted Stock Entry {0} exists").format(stock_entry[0][0]))
+ frappe.throw(_("Cannot cancel because submitted Stock Entry {0} exists").format(frappe.utils.get_link_to_form('Stock Entry', stock_entry[0][0])))
def update_planned_qty(self):
update_bin_qty(self.production_item, self.fg_warehouse, {
@@ -468,6 +468,9 @@
update bin reserved_qty_for_production
called from Stock Entry for production, after submit, cancel
'''
+ # calculate consumed qty based on submitted stock entries
+ self.update_consumed_qty_for_required_items()
+
if self.docstatus==1:
# calculate transferred qty based on submitted stock entries
self.update_transaferred_qty_for_required_items()
@@ -475,9 +478,6 @@
# update in bin
self.update_reserved_qty_for_production()
- # calculate consumed qty based on submitted stock entries
- self.update_consumed_qty_for_required_items()
-
def update_reserved_qty_for_production(self, items=None):
'''update reserved_qty_for_production in bins'''
for d in self.required_items:
@@ -552,24 +552,33 @@
d.db_set('transferred_qty', flt(transferred_qty), update_modified = False)
def update_consumed_qty_for_required_items(self):
- '''update consumed qty from submitted stock entries for that item against
- the work order'''
+ '''
+ Update consumed qty from submitted stock entries
+ against a work order for each stock item
+ '''
- for d in self.required_items:
- consumed_qty = frappe.db.sql('''select sum(qty)
- from `tabStock Entry` entry, `tabStock Entry Detail` detail
- where
+ for item in self.required_items:
+ consumed_qty = frappe.db.sql('''
+ SELECT
+ SUM(qty)
+ FROM
+ `tabStock Entry` entry,
+ `tabStock Entry Detail` detail
+ WHERE
entry.work_order = %(name)s
- and (entry.purpose = "Material Consumption for Manufacture"
- or entry.purpose = "Manufacture")
- and entry.docstatus = 1
- and detail.parent = entry.name
- and (detail.item_code = %(item)s or detail.original_item = %(item)s)''', {
- 'name': self.name,
- 'item': d.item_code
- })[0][0]
+ AND (entry.purpose = "Material Consumption for Manufacture"
+ OR entry.purpose = "Manufacture")
+ AND entry.docstatus = 1
+ AND detail.parent = entry.name
+ AND detail.s_warehouse IS NOT null
+ AND (detail.item_code = %(item)s
+ OR detail.original_item = %(item)s)
+ ''', {
+ 'name': self.name,
+ 'item': item.item_code
+ })[0][0]
- d.db_set('consumed_qty', flt(consumed_qty), update_modified = False)
+ item.db_set('consumed_qty', flt(consumed_qty), update_modified=False)
def make_bom(self):
data = frappe.db.sql(""" select sed.item_code, sed.qty, sed.s_warehouse
@@ -648,7 +657,7 @@
return res
@frappe.whitelist()
-def make_work_order(item, qty=0, project=None):
+def make_work_order(bom_no, item, qty=0, project=None):
if not frappe.has_permission("Work Order", "write"):
frappe.throw(_("Not permitted"), frappe.PermissionError)
@@ -657,6 +666,7 @@
wo_doc = frappe.new_doc("Work Order")
wo_doc.production_item = item
wo_doc.update(item_details)
+ wo_doc.bom_no = bom_no
if flt(qty) > 0:
wo_doc.qty = flt(qty)
diff --git a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
index 7152d3d..1bcb1ef 100644
--- a/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
+++ b/erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js
@@ -22,7 +22,14 @@
fieldname: 'name1',
fieldtype: 'Link',
options: 'BOM',
- change: () => this.fetch_and_render()
+ change: () => this.fetch_and_render(),
+ get_query: () => {
+ return {
+ filters: {
+ "name": ["not in", [this.form.get_value("name2") || ""]]
+ }
+ }
+ }
},
{
fieldtype: 'Column Break'
@@ -32,7 +39,14 @@
fieldname: 'name2',
fieldtype: 'Link',
options: 'BOM',
- change: () => this.fetch_and_render()
+ change: () => this.fetch_and_render(),
+ get_query: () => {
+ return {
+ filters: {
+ "name": ["not in", [this.form.get_value("name1") || ""]]
+ }
+ }
+ }
},
{
fieldtype: 'Section Break'
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index b0fc7ea..9ddd7cc 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -581,7 +581,7 @@
erpnext.patches.v12_0.set_default_homepage_type
erpnext.patches.v11_0.rename_additional_salary_component_additional_salary
erpnext.patches.v11_0.renamed_from_to_fields_in_project
-erpnext.patches.v11_0.add_permissions_in_gst_settings
+erpnext.patches.v11_0.add_permissions_in_gst_settings #2020-04-04
erpnext.patches.v11_1.setup_guardian_role
execute:frappe.delete_doc('DocType', 'Notification Control')
erpnext.patches.v12_0.set_gst_category
@@ -626,10 +626,11 @@
erpnext.patches.v12_0.create_accounting_dimensions_in_missing_doctypes
erpnext.patches.v11_1.set_status_for_material_request_type_manufacture
erpnext.patches.v12_0.move_plaid_settings_to_doctype
-execute:frappe.reload_doc('desk', 'doctype','dashboard_chart_link')
-execute:frappe.reload_doc('desk', 'doctype','dashboard')
-execute:frappe.reload_doc('desk', 'doctype','dashboard_chart_source')
-execute:frappe.reload_doc('desk', 'doctype','dashboard_chart')
+execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_link')
+execute:frappe.reload_doc('desk', 'doctype', 'dashboard')
+execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_source')
+execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart')
+execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field')
erpnext.patches.v12_0.add_default_dashboards
erpnext.patches.v12_0.remove_bank_remittance_custom_fields
erpnext.patches.v12_0.generate_leave_ledger_entries
@@ -658,4 +659,6 @@
erpnext.patches.v12_0.set_published_in_hub_tracked_item
erpnext.patches.v12_0.set_job_offer_applicant_email
erpnext.patches.v12_0.create_irs_1099_field_united_states
+erpnext.patches.v12_0.move_bank_account_swift_number_to_bank
erpnext.patches.v12_0.rename_bank_reconciliation_fields # 2020-01-22
+erpnext.patches.v12_0.set_received_qty_in_material_request_as_per_stock_uom
\ No newline at end of file
diff --git a/erpnext/patches/v11_0/add_permissions_in_gst_settings.py b/erpnext/patches/v11_0/add_permissions_in_gst_settings.py
index e8fcf33..121a202 100644
--- a/erpnext/patches/v11_0/add_permissions_in_gst_settings.py
+++ b/erpnext/patches/v11_0/add_permissions_in_gst_settings.py
@@ -1,12 +1,9 @@
import frappe
-from frappe.permissions import add_permission, update_permission_property
+from erpnext.regional.india.setup import add_permissions
def execute():
company = frappe.get_all('Company', filters = {'country': 'India'})
if not company:
return
- for doctype in ('GST HSN Code', 'GST Settings'):
- add_permission(doctype, 'Accounts Manager', 0)
- update_permission_property(doctype, 'Accounts Manager', 0, 'write', 1)
- update_permission_property(doctype, 'Accounts Manager', 0, 'create', 1)
\ No newline at end of file
+ add_permissions()
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/move_bank_account_swift_number_to_bank.py b/erpnext/patches/v12_0/move_bank_account_swift_number_to_bank.py
new file mode 100644
index 0000000..3c9758e
--- /dev/null
+++ b/erpnext/patches/v12_0/move_bank_account_swift_number_to_bank.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ frappe.reload_doc('accounts', 'doctype', 'bank', force=1)
+
+ if frappe.db.table_exists('Bank') and frappe.db.table_exists('Bank Account'):
+ frappe.db.sql("""
+ UPDATE `tabBank` b, `tabBank Account` ba
+ SET b.swift_number = ba.swift_number, b.branch_code = ba.branch_code
+ WHERE b.name = ba.bank
+ """)
+
+ frappe.reload_doc('accounts', 'doctype', 'bank_account')
+ frappe.reload_doc('accounts', 'doctype', 'payment_request')
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/set_received_qty_in_material_request_as_per_stock_uom.py b/erpnext/patches/v12_0/set_received_qty_in_material_request_as_per_stock_uom.py
new file mode 100644
index 0000000..88c3e2e
--- /dev/null
+++ b/erpnext/patches/v12_0/set_received_qty_in_material_request_as_per_stock_uom.py
@@ -0,0 +1,30 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ purchase_receipts = frappe.db.sql("""
+ SELECT
+ parent from `tabPurchase Receipt Item`
+ WHERE
+ material_request is not null
+ AND docstatus=1
+ """,as_dict=1)
+
+ purchase_receipts = set([d.parent for d in purchase_receipts])
+
+ for pr in purchase_receipts:
+ doc = frappe.get_doc("Purchase Receipt", pr)
+ doc.status_updater = [
+ {
+ 'source_dt': 'Purchase Receipt Item',
+ 'target_dt': 'Material Request Item',
+ 'join_field': 'material_request_item',
+ 'target_field': 'received_qty',
+ 'target_parent_dt': 'Material Request',
+ 'target_parent_field': 'per_received',
+ 'target_ref_field': 'stock_qty',
+ 'source_field': 'stock_qty',
+ 'percent_join_field': 'material_request'
+ }
+ ]
+ doc.update_qty()
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index 3570a0f..5862963 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -18,7 +18,7 @@
};
},
onload: function (frm) {
- var so = frappe.meta.get_docfield("Project", "sales_order");
+ var so = frm.get_docfield("Project", "sales_order");
so.get_route_options_for_new_doc = function (field) {
if (frm.is_new()) return;
return {
@@ -135,4 +135,4 @@
frappe.ui.form.make_quick_entry(doctype, null, null, new_doc);
});
-}
\ No newline at end of file
+}
diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json
index 794d816..f4b3d3e 100644
--- a/erpnext/projects/doctype/task/task.json
+++ b/erpnext/projects/doctype/task/task.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"allow_import": 1,
"autoname": "TASK-.YYYY.-.#####",
"creation": "2013-01-29 19:25:50",
@@ -200,7 +201,6 @@
{
"fieldname": "description",
"fieldtype": "Text Editor",
- "in_preview": 1,
"label": "Task Description",
"oldfieldname": "description",
"oldfieldtype": "Text Editor",
@@ -361,11 +361,14 @@
],
"icon": "fa fa-check",
"idx": 1,
+ "is_tree": 1,
+ "links": [],
"max_attachments": 5,
- "modified": "2019-09-10 13:46:24.631754",
+ "modified": "2020-03-18 18:08:44.153211",
"modified_by": "Administrator",
"module": "Projects",
"name": "Task",
+ "nsm_parent_field": "parent_task",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index 9a5b750..dbe48ec 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -6,7 +6,7 @@
apply_pricing_rule_on_item: function(item){
let effective_item_rate = item.price_list_rate;
- if (item.parenttype === "Sales Order" && item.blanket_order_rate) {
+ if (in_list(["Sales Order", "Quotation"], item.parenttype) && item.blanket_order_rate) {
effective_item_rate = item.blanket_order_rate;
}
if(item.margin_type == "Percentage"){
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index fea2d5e..4397fe4 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -4,7 +4,7 @@
erpnext.TransactionController = erpnext.taxes_and_totals.extend({
setup: function() {
this._super();
- frappe.flags.hide_serial_batch_dialog = false;
+ frappe.flags.hide_serial_batch_dialog = true;
frappe.ui.form.on(this.frm.doctype + " Item", "rate", function(frm, cdt, cdn) {
var item = frappe.get_doc(cdt, cdn);
var has_margin_field = frappe.meta.has_field(cdt, 'margin_type');
@@ -165,6 +165,16 @@
return (doc.rule_applied) ? "green" : "red";
});
}
+
+ let batch_no_field = this.frm.get_docfield("items", "batch_no");
+ if (batch_no_field) {
+ batch_no_field.get_route_options_for_new_doc = function(row) {
+ return {
+ "item": row.doc.item_code
+ }
+ };
+ }
+
},
onload: function() {
var me = this;
@@ -352,12 +362,17 @@
['serial_no', 'batch_no', 'barcode'].forEach(field => {
if (data[field] && frappe.meta.has_field(row_to_modify.doctype, field)) {
+
+ let value = (row_to_modify[field] && field === "serial_no")
+ ? row_to_modify[field] + '\n' + data[field] : data[field];
+
frappe.model.set_value(row_to_modify.doctype,
- row_to_modify.name, field, data[field]);
+ row_to_modify.name, field, value);
}
});
scan_barcode_field.set_value('');
+ refresh_field("items");
});
}
return false;
@@ -520,6 +535,15 @@
},
() => me.toggle_conversion_factor(item),
() => {
+ if (show_batch_dialog)
+ return frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"])
+ .then((r) => {
+ if(r.message.has_batch_no || r.message.has_serial_no) {
+ frappe.flags.hide_serial_batch_dialog = false;
+ }
+ });
+ },
+ () => {
if(show_batch_dialog && !frappe.flags.hide_serial_batch_dialog) {
var d = locals[cdt][cdn];
$.each(r.message, function(k, v) {
@@ -528,7 +552,9 @@
erpnext.show_serial_batch_selector(me.frm, d, (item) => {
me.frm.script_manager.trigger('qty', item.doctype, item.name);
- });
+ if (!me.frm.doc.set_warehouse)
+ me.frm.script_manager.trigger('warehouse', item.doctype, item.name);
+ }, undefined, !frappe.flags.hide_serial_batch_dialog);
}
},
() => me.conversion_factor(doc, cdt, cdn, true),
diff --git a/erpnext/public/js/education/lms/quiz.js b/erpnext/public/js/education/lms/quiz.js
index 5248129..91cbbf4 100644
--- a/erpnext/public/js/education/lms/quiz.js
+++ b/erpnext/public/js/education/lms/quiz.js
@@ -29,7 +29,7 @@
this.questions.push(question)
this.wrapper.appendChild(question_wrapper);
})
- if (data.activity.is_complete) {
+ if (data.activity && data.activity.is_complete) {
this.disable()
let indicator = 'red'
let message = 'Your are not allowed to attempt the quiz again.'
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 4eb3175..4d44eae 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -453,7 +453,8 @@
fields: [{
fieldtype:'Data',
fieldname:"docname",
- hidden: 0,
+ read_only: 1,
+ hidden: 1,
}, {
fieldtype:'Link',
fieldname:"item_code",
diff --git a/erpnext/public/js/utils/dimension_tree_filter.js b/erpnext/public/js/utils/dimension_tree_filter.js
index 8b6de0f..75c5a82 100644
--- a/erpnext/public/js/utils/dimension_tree_filter.js
+++ b/erpnext/public/js/utils/dimension_tree_filter.js
@@ -1,23 +1,25 @@
frappe.provide('frappe.ui.form');
-erpnext.doctypes_with_dimensions = ["GL Entry", "Sales Invoice", "Purchase Invoice", "Payment Entry", "Asset",
+let default_dimensions = {};
+
+let doctypes_with_dimensions = ["GL Entry", "Sales Invoice", "Purchase Invoice", "Payment Entry", "Asset",
"Expense Claim", "Stock Entry", "Budget", "Payroll Entry", "Delivery Note", "Shipping Rule", "Loyalty Program",
"Fee Schedule", "Fee Structure", "Stock Reconciliation", "Travel Request", "Fees", "POS Profile", "Opening Invoice Creation Tool",
"Subscription", "Purchase Order", "Journal Entry", "Material Request", "Purchase Receipt", "Landed Cost Item", "Asset"];
-erpnext.child_docs = ["Sales Invoice Item", "Purchase Invoice Item", "Purchase Order Item", "Journal Entry Account",
+let child_docs = ["Sales Invoice Item", "Purchase Invoice Item", "Purchase Order Item", "Journal Entry Account",
"Material Request Item", "Delivery Note Item", "Purchase Receipt Item", "Stock Entry Detail", "Payment Entry Deduction",
"Landed Cost Item", "Asset Value Adjustment", "Opening Invoice Creation Tool Item", "Subscription Plan"];
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.get_dimension_filters",
- callback: function(r){
+ callback: function(r) {
erpnext.dimension_filters = r.message[0];
- erpnext.default_dimensions = r.message[1];
+ default_dimensions = r.message[1];
}
});
-erpnext.doctypes_with_dimensions.forEach((doctype) => {
+doctypes_with_dimensions.forEach((doctype) => {
frappe.ui.form.on(doctype, {
onload: function(frm) {
erpnext.dimension_filters.forEach((dimension) => {
@@ -27,41 +29,40 @@
"is_group": 0
});
}
-
- if (Object.keys(erpnext.default_dimensions).length > 0) {
- if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
- if (frm.is_new() && frappe.meta.has_field(doctype, 'company') && frm.doc.company) {
- frm.set_value(dimension['fieldname'], erpnext.default_dimensions[frm.doc.company][dimension['document_type']]);
- }
- }
-
- if (frm.doc.items && frm.doc.items.length && frm.doc.docstatus === 0
- && (!frm.doc.items[0][dimension['fieldname']])) {
- frm.doc.items[0][dimension['fieldname']] = erpnext.default_dimensions[frm.doc.company][dimension['document_type']];
- }
-
- if (frm.doc.accounts && frm.doc.accounts.length && frm.doc.docstatus === 0
- && (!frm.doc.items[0][dimension['fieldname']])) {
- frm.doc.accounts[0][dimension['fieldname']] = erpnext.default_dimensions[frm.doc.company][dimension['document_type']];
- }
- }
});
});
},
company: function(frm) {
- if(frm.doc.company && (Object.keys(erpnext.default_dimensions).length > 0)) {
- erpnext.dimension_filters.forEach((dimension) => {
- if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
- frm.set_value(dimension['fieldname'], erpnext.default_dimensions[frm.doc.company][dimension['document_type']]);
- }
- });
+ if(frm.doc.company && (Object.keys(default_dimensions || {}).length > 0)
+ && default_dimensions[frm.doc.company]) {
+ frm.trigger('update_dimension');
}
},
+
+ update_dimension: function(frm) {
+ erpnext.dimension_filters.forEach((dimension) => {
+ if (frm.is_new()) {
+ if (frm.doc.company && Object.keys(default_dimensions || {}).length > 0
+ && default_dimensions[frm.doc.company]) {
+
+ if (frappe.meta.has_field(doctype, dimension['fieldname'])) {
+ frm.set_value(dimension['fieldname'],
+ default_dimensions[frm.doc.company][dimension['document_type']]);
+ }
+
+ $.each(frm.doc.items || frm.doc.accounts || [], function(i, row) {
+ frappe.model.set_value(row.doctype, row.name, dimension['fieldname'],
+ default_dimensions[frm.doc.company][dimension['document_type']])
+ });
+ }
+ }
+ });
+ }
});
});
-erpnext.child_docs.forEach((doctype) => {
+child_docs.forEach((doctype) => {
frappe.ui.form.on(doctype, {
items_add: function(frm, cdt, cdn) {
erpnext.dimension_filters.forEach((dimension) => {
@@ -77,14 +78,6 @@
});
},
- company: function(frm) {
- if(frm.doc.company) {
- erpnext.dimension_filters.forEach((dimension) => {
- frm.set_value(dimension['fieldname'], erpnext.default_dimensions[frm.doc.company][dimension['document_type']]);
- });
- }
- },
-
items_add: function(frm, cdt, cdn) {
erpnext.dimension_filters.forEach((dimension) => {
var row = frappe.get_doc(cdt, cdn);
diff --git a/erpnext/public/js/utils/item_quick_entry.js b/erpnext/public/js/utils/item_quick_entry.js
index 2947d5b..27ef107 100644
--- a/erpnext/public/js/utils/item_quick_entry.js
+++ b/erpnext/public/js/utils/item_quick_entry.js
@@ -8,12 +8,19 @@
render_dialog: function() {
this.mandatory = this.get_variant_fields().concat(this.mandatory);
this.mandatory = this.mandatory.concat(this.get_attributes_fields());
+ this.check_naming_series_based_on();
this._super();
this.init_post_render_dialog_operations();
this.preset_fields_for_template();
this.dialog.$wrapper.find('.edit-full').text(__('Edit in full page for more options like assets, serial nos, batches etc.'))
},
+ check_naming_series_based_on: function() {
+ if (frappe.defaults.get_default("item_naming_by") === "Naming Series") {
+ this.mandatory = this.mandatory.filter(d => d.fieldname !== "item_code");
+ }
+ },
+
init_post_render_dialog_operations: function() {
this.dialog.fields_dict.attribute_html.$wrapper.append(frappe.render_template("item_quick_entry"));
this.init_for_create_variant_trigger();
diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js
index a240e49..d75633e 100644
--- a/erpnext/public/js/utils/serial_no_batch_selector.js
+++ b/erpnext/public/js/utils/serial_no_batch_selector.js
@@ -5,14 +5,13 @@
this.show_dialog = show_dialog;
// frm, item, warehouse_details, has_batch, oldest
let d = this.item;
- if (d && d.has_batch_no && (!d.batch_no || this.show_dialog)) {
- this.has_batch = 1;
- this.setup();
+ this.has_batch = 0; this.has_serial_no = 0;
+
+ if (d && d.has_batch_no && (!d.batch_no || this.show_dialog)) this.has_batch = 1;
// !(this.show_dialog == false) ensures that show_dialog is implictly true, even when undefined
- } else if(d && d.has_serial_no && !(this.show_dialog == false)) {
- this.has_batch = 0;
- this.setup();
- }
+ if(d && d.has_serial_no && !(this.show_dialog == false)) this.has_serial_no = 1;
+
+ this.setup();
},
setup: function() {
@@ -36,16 +35,16 @@
label: __('Item Code'),
default: me.item_code
},
- {fieldtype:'Column Break'},
{
fieldname: 'warehouse',
fieldtype:'Link',
options: 'Warehouse',
+ reqd: me.has_batch && !me.has_serial_no ? 0 : 1,
label: __(me.warehouse_details.type),
- default: me.warehouse_details.name,
+ default: typeof me.warehouse_details.name == "string" ? me.warehouse_details.name : '',
onchange: function(e) {
- if(me.has_batch) {
+ if(me.has_batch && !me.has_serial_no) {
fields = fields.concat(me.get_batch_fields());
} else {
fields = fields.concat(me.get_serial_no_fields());
@@ -74,15 +73,16 @@
{
fieldname: 'qty',
fieldtype:'Float',
- read_only: me.has_batch,
- label: __(me.has_batch ? 'Total Qty' : 'Qty'),
+ read_only: me.has_batch && !me.has_serial_no,
+ label: __(me.has_batch && !me.has_serial_no ? 'Total Qty' : 'Qty'),
default: 0
},
{
fieldname: 'auto_fetch_button',
fieldtype:'Button',
- hidden: me.has_batch,
- label: __('Fetch based on FIFO'),
+ hidden: me.has_batch && !me.has_serial_no,
+ label: __('Auto Fetch'),
+ description: __('Fetch Serial Numbers based on FIFO'),
click: () => {
let qty = this.dialog.fields_dict.qty.get_value();
let numbers = frappe.call({
@@ -90,7 +90,7 @@
args: {
qty: qty,
item_code: me.item_code,
- warehouse: me.warehouse_details.name,
+ warehouse: typeof me.warehouse_details.name == "string" ? me.warehouse_details.name : '',
batch_no: me.item.batch_no || null
}
});
@@ -109,10 +109,12 @@
}
];
- if (this.has_batch) {
+ if (this.has_batch && !this.has_serial_no) {
title = __("Select Batch Numbers");
fields = fields.concat(this.get_batch_fields());
} else {
+ // if only serial no OR
+ // if both batch_no & serial_no then only select serial_no and auto set batches nos
title = __("Select Serial Numbers");
fields = fields.concat(this.get_serial_no_fields());
}
@@ -122,25 +124,31 @@
fields: fields
});
- if (this.item.serial_no) {
- this.dialog.fields_dict.serial_no.set_value(this.item.serial_no);
- }
-
this.dialog.set_primary_action(__('Insert'), function() {
me.values = me.dialog.get_values();
if(me.validate()) {
- me.set_items();
- me.dialog.hide();
+ frappe.run_serially([
+ () => me.update_batch_items(),
+ () => me.update_serial_no_item(),
+ () => me.update_batch_serial_no_items(),
+ () => {
+ refresh_field("items");
+ if (me.callback) {
+ return me.callback(me.item);
+ }
+ },
+ () => me.dialog.hide()
+ ])
}
});
if(this.show_dialog) {
let d = this.item;
- if (d.has_serial_no && d.serial_no) {
- this.dialog.set_value('serial_no', d.serial_no);
+ if (this.item.serial_no) {
+ this.dialog.fields_dict.serial_no.set_value(this.item.serial_no);
}
-
- if (d.has_batch_no && d.batch_no) {
+
+ if (this.has_batch && !this.has_serial_no && d.batch_no) {
this.frm.doc.items.forEach(data => {
if(data.item_code == d.item_code) {
this.dialog.fields_dict.batches.df.data.push({
@@ -155,7 +163,7 @@
}
}
- if (this.has_batch) {
+ if (this.has_batch && !this.has_serial_no) {
this.update_total_qty();
}
@@ -174,7 +182,7 @@
frappe.throw(__("Please select a warehouse"));
return false;
}
- if(this.has_batch) {
+ if(this.has_batch && !this.has_serial_no) {
if(values.batches.length === 0 || !values.batches) {
frappe.throw(__("Please select batches for batched item "
+ values.item_code));
@@ -193,34 +201,23 @@
} else {
let serial_nos = values.serial_no || '';
if (!serial_nos || !serial_nos.replace(/\s/g, '').length) {
- if (!this.show_dialog) {
- frappe.throw(__("Please enter serial numbers for serialized item "
- + values.item_code));
- return false;
- }
+ frappe.throw(__("Please enter serial numbers for serialized item "
+ + values.item_code));
+ return false;
}
return true;
}
},
- set_items: function() {
- var me = this;
- if(this.has_batch) {
+ update_batch_items() {
+ // clones an items if muliple batches are selected.
+ if(this.has_batch && !this.has_serial_no) {
this.values.batches.map((batch, i) => {
let batch_no = batch.batch_no;
let row = '';
if (i !== 0 && !this.batch_exists(batch_no)) {
- row = this.frm.add_child("items", {
- 'item_code': this.item.item_code,
- 'item_name': this.item.item_name,
- 'price_list_rate': this.item.price_list_rate,
- 'rate': this.item.rate,
- 'qty': batch.selected_qty,
- 'batch_no': batch_no,
- 'actual_qty': this.item.actual_qty,
- 'discount_percentage': this.item.discount_percentage
- });
+ row = this.frm.add_child("items", { ...this.item });
} else {
row = this.frm.doc.items.find(i => i.batch_no === batch_no);
}
@@ -228,16 +225,59 @@
if (!row) {
row = this.item;
}
-
+ // this ensures that qty & batch no is set
this.map_row_values(row, batch, 'batch_no',
'selected_qty', this.values.warehouse);
});
- } else {
+ }
+ },
+
+ update_serial_no_item() {
+ // just updates serial no for the item
+ if(this.has_serial_no && !this.has_batch) {
this.map_row_values(this.item, this.values, 'serial_no', 'qty');
}
+ },
- refresh_field("items");
- this.callback && this.callback(this.item);
+ update_batch_serial_no_items() {
+ // if serial no selected is from different batches, adds new rows for each batch.
+ if(this.has_batch && this.has_serial_no) {
+ const selected_serial_nos = this.values.serial_no.split(/\n/g).filter(s => s);
+
+ return frappe.db.get_list("Serial No", {
+ filters: { 'name': ["in", selected_serial_nos]},
+ fields: ["batch_no", "name"]
+ }).then((data) => {
+ // data = [{batch_no: 'batch-1', name: "SR-001"},
+ // {batch_no: 'batch-2', name: "SR-003"}, {batch_no: 'batch-2', name: "SR-004"}]
+ const batch_serial_map = data.reduce((acc, d) => {
+ if (!acc[d['batch_no']]) acc[d['batch_no']] = [];
+ acc[d['batch_no']].push(d['name'])
+ return acc
+ }, {})
+ // batch_serial_map = { "batch-1": ['SR-001'], "batch-2": ["SR-003", "SR-004"]}
+ Object.keys(batch_serial_map).map((batch_no, i) => {
+ let row = '';
+ const serial_no = batch_serial_map[batch_no];
+ if (i == 0) {
+ row = this.item;
+ this.map_row_values(row, {qty: serial_no.length, batch_no: batch_no}, 'batch_no',
+ 'qty', this.values.warehouse);
+ } else if (!this.batch_exists(batch_no)) {
+ row = this.frm.add_child("items", { ...this.item });
+ row.batch_no = batch_no;
+ } else {
+ row = this.frm.doc.items.find(i => i.batch_no === batch_no);
+ }
+ const values = {
+ 'qty': serial_no.length,
+ 'serial_no': serial_no.join('\n')
+ }
+ this.map_row_values(row, values, 'serial_no',
+ 'qty', this.values.warehouse);
+ });
+ })
+ }
},
batch_exists: function(batch) {
@@ -287,7 +327,7 @@
return {
filters: {
item_code: me.item_code,
- warehouse: me.warehouse || me.warehouse_details.name
+ warehouse: me.warehouse || typeof me.warehouse_details.name == "string" ? me.warehouse_details.name : ''
},
query: 'erpnext.controllers.queries.get_batch_no'
};
@@ -313,11 +353,15 @@
frappe.throw(__(`Batch ${val} already selected.`));
return;
}
+
+ let batch_number = me.item.batch_no ||
+ this.grid_row.on_grid_fields_dict.batch_no.get_value();
+
if (me.warehouse_details.name) {
frappe.call({
method: 'erpnext.stock.doctype.batch.batch.get_batch_qty',
args: {
- batch_no: me.item.batch_no,
+ batch_no: batch_number,
warehouse: me.warehouse_details.name,
item_code: me.item_code
},
@@ -444,7 +488,7 @@
{
fieldname: 'serial_no',
fieldtype: 'Small Text',
- label: __(me.has_batch ? 'Selected Batch Numbers' : 'Selected Serial Numbers'),
+ label: __(me.has_batch && !me.has_serial_no ? 'Selected Batch Numbers' : 'Selected Serial Numbers'),
onchange: function() {
me.serial_list = this.get_value()
.replace(/\n/g, ' ').match(/\S+/g) || [];
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
index 472b751..6df116c 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "format:PRC-{quality_procedure_name}",
"creation": "2018-10-06 00:06:29.756804",
"doctype": "DocType",
@@ -69,10 +70,13 @@
"reqd": 1
}
],
- "modified": "2019-08-05 13:09:29.945082",
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-18 18:09:29.371627",
"modified_by": "Administrator",
"module": "Quality Management",
"name": "Quality Procedure",
+ "nsm_parent_field": "parent_quality_procedure",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
index 2da79a6..35f9cf6 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html
@@ -29,7 +29,7 @@
</thead>
<tbody>
<tr>
- <td>(a) {{__("Outward taxable supplies(other than zero rated, nil rated and exempted")}}</td>
+ <td>(a) {{__("Outward taxable supplies(other than zero rated, nil rated and exempted)")}}</td>
<td class="right">{{ flt(data.sup_details.osup_det.txval, 2) }}</td>
<td class="right">{{ flt(data.sup_details.osup_det.iamt, 2) }}</td>
<td class="right">{{ flt(data.sup_details.osup_det.camt, 2) }}</td>
diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json
index 548d40b..1f208df 100644
--- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json
+++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "format:GSTR3B-{month}-{year}-{company_address}",
"creation": "2019-02-04 11:35:55.964639",
"doctype": "DocType",
@@ -48,25 +49,13 @@
"read_only": 1
}
],
- "modified": "2019-08-10 22:30:26.727038",
+ "links": [],
+ "modified": "2020-04-04 19:32:30.772908",
"modified_by": "Administrator",
"module": "Regional",
"name": "GSTR 3B Report",
"owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- }
- ],
+ "permissions": [],
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py
index 970a831..75f29b8 100644
--- a/erpnext/regional/india/setup.py
+++ b/erpnext/regional/india/setup.py
@@ -77,13 +77,19 @@
)).insert()
def add_permissions():
- for doctype in ('GST HSN Code', 'GST Settings'):
+ for doctype in ('GST HSN Code', 'GST Settings', 'GSTR 3B Report'):
add_permission(doctype, 'All', 0)
- for role in ('Accounts Manager', 'System Manager', 'Item Manager', 'Stock Manager'):
+ for role in ('Accounts Manager', 'Accounts User', 'System Manager'):
add_permission(doctype, role, 0)
update_permission_property(doctype, role, 0, 'write', 1)
update_permission_property(doctype, role, 0, 'create', 1)
+ if doctype == 'GST HSN Code':
+ for role in ('Item Manager', 'Stock Manager'):
+ add_permission(doctype, role, 0)
+ update_permission_property(doctype, role, 0, 'write', 1)
+ update_permission_property(doctype, role, 0, 'create', 1)
+
def add_print_formats():
frappe.reload_doc("regional", "print_format", "gst_tax_invoice")
frappe.reload_doc("accounts", "print_format", "gst_pos_invoice")
diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py
index f37b0e4..0282382 100644
--- a/erpnext/regional/india/utils.py
+++ b/erpnext/regional/india/utils.py
@@ -478,7 +478,7 @@
`tabDynamic Link`.parent = `tabAddress`.name and
`tabDynamic Link`.parenttype = 'Address' and
`tabDynamic Link`.link_doctype = 'Company' and
- `tabDynamic Link`.link_name = '{0}'""".format(company))
+ `tabDynamic Link`.link_name = %(company)s""", {"company": company})
return company_gstins
def get_address_details(data, doc, company_address, billing_address):
diff --git a/erpnext/regional/report/datev/datev.js b/erpnext/regional/report/datev/datev.js
index 1e000b6..d8638ab 100644
--- a/erpnext/regional/report/datev/datev.js
+++ b/erpnext/regional/report/datev/datev.js
@@ -21,6 +21,12 @@
"default": frappe.datetime.now_date(),
"fieldtype": "Date",
"reqd": 1
+ },
+ {
+ "fieldname": "voucher_type",
+ "label": __("Voucher Type"),
+ "fieldtype": "Select",
+ "options": "\nSales Invoice\nPurchase Invoice\nPayment Entry\nExpense Claim\nPayroll Entry\nBank Reconciliation\nAsset\nStock Entry"
}
],
onload: function(query_report) {
diff --git a/erpnext/regional/report/datev/datev.py b/erpnext/regional/report/datev/datev.py
index 7ceaf50..a657912 100644
--- a/erpnext/regional/report/datev/datev.py
+++ b/erpnext/regional/report/datev/datev.py
@@ -62,6 +62,7 @@
filters -- dict of filters to be passed to the sql query
as_dict -- return as list of dicts [0,1]
"""
+ filter_by_voucher = 'AND gl.voucher_type = %(voucher_type)s' if filters.get('voucher_type') else ''
gl_entries = frappe.db.sql("""
SELECT
@@ -80,8 +81,10 @@
gl.posting_date as 'Belegdatum',
gl.voucher_no as 'Belegfeld 1',
gl.remarks as 'Buchungstext',
- gl.against_voucher_type as 'Beleginfo - Art 1',
- gl.against_voucher as 'Beleginfo - Inhalt 1'
+ gl.voucher_type as 'Beleginfo - Art 1',
+ gl.voucher_no as 'Beleginfo - Inhalt 1',
+ gl.against_voucher_type as 'Beleginfo - Art 2',
+ gl.against_voucher as 'Beleginfo - Inhalt 2'
FROM `tabGL Entry` gl
@@ -109,7 +112,8 @@
WHERE gl.company = %(company)s
AND DATE(gl.posting_date) >= %(from_date)s
AND DATE(gl.posting_date) <= %(to_date)s
- ORDER BY 'Belegdatum', gl.voucher_no""", filters, as_dict=as_dict, as_utf8=1)
+ {}
+ ORDER BY 'Belegdatum', gl.voucher_no""".format(filter_by_voucher), filters, as_dict=as_dict)
return gl_entries
@@ -160,7 +164,7 @@
and ccl.company = par.company
WHERE par.company = %(company)s
- AND par.parenttype = 'Customer'""", filters, as_dict=1, as_utf8=1)
+ AND par.parenttype = 'Customer'""", filters, as_dict=1)
def get_suppliers(filters):
@@ -217,7 +221,7 @@
and con.is_primary_contact = '1'
WHERE par.company = %(company)s
- AND par.parenttype = 'Supplier'""", filters, as_dict=1, as_utf8=1)
+ AND par.parenttype = 'Supplier'""", filters, as_dict=1)
def get_account_names(filters):
@@ -281,24 +285,24 @@
def get_header(filters, csv_class):
coa = frappe.get_value("Company", filters.get("company"), "chart_of_accounts")
- coa_used = "SKR04" if "SKR04" in coa else ("SKR03" if "SKR03" in coa else "")
+ coa_used = "04" if "SKR04" in coa else ("03" if "SKR03" in coa else "")
header = [
# DATEV format
- # "DTVF" = created by DATEV software,
- # "EXTF" = created by other software
+ # "DTVF" = created by DATEV software,
+ # "EXTF" = created by other software
'"EXTF"',
# version of the DATEV format
- # 141 = 1.41,
- # 510 = 5.10,
- # 720 = 7.20
+ # 141 = 1.41,
+ # 510 = 5.10,
+ # 720 = 7.20
'700',
csv_class.DATA_CATEGORY,
'"%s"' % csv_class.FORMAT_NAME,
# Format version (regarding format name)
csv_class.FORMAT_VERSION,
# Generated on
- datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S") + '000',
# Imported on -- stays empty
'',
# Origin. Any two symbols, will be replaced by "SV" on import.
@@ -328,13 +332,21 @@
# R = Diktatkürzel
'',
# S = Buchungstyp
- # 1 = Transaction batch (Finanzbuchführung),
- # 2 = Annual financial statement (Jahresabschluss)
+ # 1 = Transaction batch (Finanzbuchführung),
+ # 2 = Annual financial statement (Jahresabschluss)
'1' if csv_class.DATA_CATEGORY == DataCategory.TRANSACTIONS else '',
# T = Rechnungslegungszweck
- '',
+ # 0 oder leer = vom Rechnungslegungszweck unabhängig
+ # 50 = Handelsrecht
+ # 30 = Steuerrecht
+ # 64 = IFRS
+ # 40 = Kalkulatorik
+ # 11 = Reserviert
+ # 12 = Reserviert
+ '0',
# U = Festschreibung
- '',
+ # TODO: Filter by Accounting Period. In export for closed Accounting Period, this will be "1"
+ '0',
# V = Default currency, for example, "EUR"
'"%s"' % frappe.get_value("Company", filters.get("company"), "default_currency"),
# reserviert
diff --git a/erpnext/regional/report/datev/datev_constants.py b/erpnext/regional/report/datev/datev_constants.py
index a4cd5fc..a059ed3 100644
--- a/erpnext/regional/report/datev/datev_constants.py
+++ b/erpnext/regional/report/datev/datev_constants.py
@@ -498,13 +498,27 @@
},
{
"label": "Beleginfo - Art 1",
- "fieldname": "Beleginfo - Art 2",
- "fieldtype": "Data",
+ "fieldname": "Beleginfo - Art 1",
+ "fieldtype": "Link",
+ "options": "DocType"
},
{
"label": "Beleginfo - Inhalt 1",
+ "fieldname": "Beleginfo - Inhalt 1",
+ "fieldtype": "Dynamic Link",
+ "options": "Beleginfo - Art 1"
+ },
+ {
+ "label": "Beleginfo - Art 2",
+ "fieldname": "Beleginfo - Art 2",
+ "fieldtype": "Link",
+ "options": "DocType"
+ },
+ {
+ "label": "Beleginfo - Inhalt 2",
"fieldname": "Beleginfo - Inhalt 2",
- "fieldtype": "Data",
+ "fieldtype": "Dynamic Link",
+ "options": "Beleginfo - Art 2"
}
]
diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py
index 2c5ab7c..fd1cc58 100644
--- a/erpnext/regional/report/gstr_1/gstr_1.py
+++ b/erpnext/regional/report/gstr_1/gstr_1.py
@@ -54,8 +54,8 @@
return self.columns, self.data
def get_data(self):
- if self.filters.get("type_of_business") == "B2C Small":
- self.get_b2cs_data()
+ if self.filters.get("type_of_business") in ("B2C Small", "B2C Large"):
+ self.get_b2c_data()
else:
for inv, items_based_on_rate in self.items_based_on_tax_rate.items():
invoice_details = self.invoices.get(inv)
@@ -69,7 +69,7 @@
if taxable_value:
self.data.append(row)
- def get_b2cs_data(self):
+ def get_b2c_data(self):
b2cs_output = {}
for inv, items_based_on_rate in self.items_based_on_tax_rate.items():
@@ -84,7 +84,10 @@
"rate": "",
"taxable_value": 0,
"cess_amount": 0,
- "type": ""
+ "type": "",
+ "invoice_number": invoice_details.get("invoice_number"),
+ "posting_date": invoice_details.get("posting_date"),
+ "invoice_value": invoice_details.get("base_grand_total"),
})
row = b2cs_output.get((rate, place_of_supply, ecommerce_gstin))
@@ -164,7 +167,7 @@
frappe.throw(_("Please set B2C Limit in GST Settings."))
if self.filters.get("type_of_business") == "B2C Large":
- conditions += """ and SUBSTR(place_of_supply, 1, 2) != SUBSTR(company_gstin, 1, 2)
+ conditions += """ and ifnull(SUBSTR(place_of_supply, 1, 2),'') != ifnull(SUBSTR(company_gstin, 1, 2),'')
and grand_total > {0} and is_return != 1 and gst_category ='Unregistered' """.format(flt(b2c_limit))
elif self.filters.get("type_of_business") == "B2C Small":
@@ -581,6 +584,11 @@
if not gst_in: continue
for number, invoice in iteritems(res[gst_in]):
+ if not invoice[0]["place_of_supply"]:
+ frappe.throw(_("""{0} not entered in Invoice {1}.
+ Please update and try again""").format(frappe.bold("Place Of Supply"),
+ frappe.bold(invoice[0]['invoice_number'])))
+
inv_item = get_basic_invoice_detail(invoice[0])
inv_item["pos"] = "%02d" % int(invoice[0]["place_of_supply"].split('-')[0])
inv_item["rchrg"] = invoice[0]["reverse_charge"]
@@ -606,6 +614,9 @@
out = []
for d in data:
+ if not d.get("place_of_supply"):
+ frappe.throw(_("""{0} not entered in some invoices.
+ Please update and try again""").format(frappe.bold("Place Of Supply")))
pos = d.get('place_of_supply').split('-')[0]
tax_details = {}
@@ -642,6 +653,10 @@
def get_b2cl_json(res, gstin):
out = []
for pos in res:
+ if not pos:
+ frappe.throw(_("""{0} not entered in some invoices.
+ Please update and try again""").format(frappe.bold("Place Of Supply")))
+
b2cl_item, inv = {"pos": "%02d" % int(pos.split('-')[0]), "inv": []}, []
for row in res[pos]:
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 9261289..02667e8 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -76,7 +76,8 @@
def validate_default_bank_account(self):
if self.default_bank_account:
is_company_account = frappe.db.get_value('Bank Account', self.default_bank_account, 'is_company_account')
- frappe.throw(_("{0} is not a company bank account").format(frappe.bold(self.default_bank_account)))
+ if not is_company_account:
+ frappe.throw(_("{0} is not a company bank account").format(frappe.bold(self.default_bank_account)))
def on_update(self):
self.validate_name_with_customer_group()
@@ -267,9 +268,11 @@
target_doc.run_method("set_other_charges")
target_doc.run_method("calculate_taxes_and_totals")
- price_list = frappe.get_value("Customer", source_name, 'default_price_list')
+ price_list, currency = frappe.db.get_value("Customer", {'name': source_name}, ['default_price_list', 'default_currency'])
if price_list:
target_doc.selling_price_list = price_list
+ if currency:
+ target_doc.currency = currency
return target_doc
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index b79c91c..7c47b8a 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -155,6 +155,11 @@
def update_item(obj, target, source_parent):
target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor)
+ if obj.against_blanket_order:
+ target.against_blanket_order = obj.against_blanket_order
+ target.blanket_order = obj.blanket_order
+ target.blanket_order_rate = obj.blanket_order_rate
+
doclist = get_mapped_doc("Quotation", source_name, {
"Quotation": {
"doctype": "Sales Order",
diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json
index 3ff5555..d50397c 100644
--- a/erpnext/selling/doctype/quotation_item/quotation_item.json
+++ b/erpnext/selling/doctype/quotation_item/quotation_item.json
@@ -55,6 +55,9 @@
"weight_uom",
"reference",
"warehouse",
+ "against_blanket_order",
+ "blanket_order",
+ "blanket_order_rate",
"column_break_30",
"prevdoc_doctype",
"prevdoc_docname",
@@ -573,12 +576,38 @@
"fieldname": "image_section",
"fieldtype": "Section Break",
"label": "Image"
+ },
+ {
+ "depends_on": "eval:doc.against_blanket_order",
+ "fieldname": "blanket_order",
+ "fieldtype": "Link",
+ "label": "Blanket Order",
+ "no_copy": 1,
+ "options": "Blanket Order",
+ "print_hide": 1
+ },
+ {
+ "depends_on": "eval:doc.against_blanket_order",
+ "fieldname": "blanket_order_rate",
+ "fieldtype": "Currency",
+ "label": "Blanket Order Rate",
+ "no_copy": 1,
+ "print_hide": 1,
+ "read_only": 1
+ },
+ {
+ "default": "0",
+ "fieldname": "against_blanket_order",
+ "fieldtype": "Check",
+ "label": "Against Blanket Order",
+ "no_copy": 1,
+ "print_hide": 1
}
],
"idx": 1,
"istable": 1,
"links": [],
- "modified": "2020-03-05 14:18:58.783751",
+ "modified": "2020-03-30 18:40:28.782720",
"modified_by": "Administrator",
"module": "Selling",
"name": "Quotation Item",
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index fa765df..61aa608 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -664,7 +664,8 @@
reference_doctype: me.frm.doctype,
reference_name: me.frm.docname,
content: __('Reason for hold: ')+data.reason_for_hold,
- comment_email: frappe.session.user
+ comment_email: frappe.session.user,
+ comment_by: frappe.session.user_fullname
},
callback: function(r) {
if(!r.exc) {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index e7cbf40..ef2d19a 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -496,7 +496,7 @@
def get_requested_item_qty(sales_order):
return frappe._dict(frappe.db.sql("""
- select sales_order_item, sum(stock_qty)
+ select sales_order_item, sum(qty)
from `tabMaterial Request Item`
where docstatus = 1
and sales_order = %s
@@ -507,16 +507,12 @@
def make_material_request(source_name, target_doc=None):
requested_item_qty = get_requested_item_qty(source_name)
- def postprocess(source, doc):
- doc.material_request_type = "Purchase"
-
def update_item(source, target, source_parent):
# qty is for packed items, because packed items don't have stock_qty field
- qty = source.get("stock_qty") or source.get("qty")
+ qty = source.get("qty")
target.project = source_parent.project
target.qty = qty - requested_item_qty.get(source.name, 0)
- target.conversion_factor = 1
- target.stock_qty = qty - requested_item_qty.get(source.name, 0)
+ target.stock_qty = flt(target.qty) * flt(target.conversion_factor)
doc = get_mapped_doc("Sales Order", source_name, {
"Sales Order": {
@@ -537,14 +533,12 @@
"doctype": "Material Request Item",
"field_map": {
"name": "sales_order_item",
- "parent": "sales_order",
- "stock_uom": "uom",
- "stock_qty": "qty"
+ "parent": "sales_order"
},
"condition": lambda doc: not frappe.db.exists('Product Bundle', doc.item_code) and doc.stock_qty > requested_item_qty.get(doc.name, 0),
"postprocess": update_item
}
- }, target_doc, postprocess)
+ }, target_doc)
return doc
@@ -641,7 +635,6 @@
target.set_advances()
def set_missing_values(source, target):
- target.is_pos = 0
target.ignore_pricing_rule = 1
target.flags.ignore_permissions = True
target.run_method("set_missing_values")
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py
index 3425f8f..17136e0 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -64,30 +64,40 @@
for d in item_prices_data:
item_prices[d.item_code] = d
-
+ # prepare filter for bin query
+ bin_filters = {'item_code': ['in', items]}
+ if warehouse:
+ bin_filters['warehouse'] = warehouse
if display_items_in_stock:
- filters = {'actual_qty': [">", 0], 'item_code': ['in', items]}
+ bin_filters['actual_qty'] = [">", 0]
- if warehouse:
- filters['warehouse'] = warehouse
+ # query item bin
+ bin_data = frappe.get_all(
+ 'Bin', fields=['item_code', 'sum(actual_qty) as actual_qty'],
+ filters=bin_filters, group_by='item_code'
+ )
- bin_data = frappe._dict(
- frappe.get_all("Bin", fields = ["item_code", "sum(actual_qty) as actual_qty"],
- filters = filters, group_by = "item_code")
- )
+ # convert list of dict into dict as {item_code: actual_qty}
+ bin_dict = {}
+ for b in bin_data:
+ bin_dict[b.get('item_code')] = b.get('actual_qty')
for item in items_data:
- row = {}
+ item_code = item.item_code
+ item_price = item_prices.get(item_code) or {}
+ item_stock_qty = bin_dict.get(item_code)
- row.update(item)
- item_price = item_prices.get(item.item_code) or {}
- row.update({
- 'price_list_rate': item_price.get('price_list_rate'),
- 'currency': item_price.get('currency'),
- 'actual_qty': bin_data.get('actual_qty')
- })
-
- result.append(row)
+ if display_items_in_stock and not item_stock_qty:
+ pass
+ else:
+ row = {}
+ row.update(item)
+ row.update({
+ 'price_list_rate': item_price.get('price_list_rate'),
+ 'currency': item_price.get('currency'),
+ 'actual_qty': item_stock_qty,
+ })
+ result.append(row)
res = {
'items': result
diff --git a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
index 4509904..28dd056 100644
--- a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
+++ b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _
-from frappe.utils import getdate, cint
+from frappe.utils import getdate, cint, cstr
import calendar
def execute(filters=None):
@@ -48,7 +48,7 @@
new = new_customers_in.get(key, [0,0.0])
repeat = repeat_customers_in.get(key, [0,0.0])
- out.append([year, calendar.month_name[month],
+ out.append([cstr(year), calendar.month_name[month],
new[0], repeat[0], new[0] + repeat[0],
new[1], repeat[1], new[1] + repeat[1]])
diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py
index 1fc3663..405004e 100644
--- a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py
+++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py
@@ -121,8 +121,8 @@
},
{
"label": _("Billed Amount"),
- "fieldname": "rate",
- "options": "billed_amount",
+ "fieldtype": "currency",
+ "fieldname": "billed_amount",
"width": 120
},
{
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 8278745..af10069 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -413,15 +413,20 @@
*/
set_batch_number: function(cdt, cdn) {
const doc = frappe.get_doc(cdt, cdn);
- if (doc && doc.has_batch_no) {
+ if (doc && doc.has_batch_no && doc.warehouse) {
this._set_batch_number(doc);
}
},
_set_batch_number: function(doc) {
+ let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
+ if (doc.has_serial_no && doc.serial_no) {
+ args['serial_no'] = doc.serial_no
+ }
+
return frappe.call({
method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
- args: {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)},
+ args: args,
callback: function(r) {
if(r.message) {
frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
diff --git a/erpnext/setup/desk_page/getting_started/getting_started.json b/erpnext/setup/desk_page/getting_started/getting_started.json
index 00236ba..b045b5d 100644
--- a/erpnext/setup/desk_page/getting_started/getting_started.json
+++ b/erpnext/setup/desk_page/getting_started/getting_started.json
@@ -41,8 +41,7 @@
"charts": [
{
"chart_name": "Bank Balance",
- "label": "All Your Money",
- "size": "Full"
+ "label": "Bank Balance"
}
],
"creation": "2020-01-23 13:46:38.833076",
@@ -55,7 +54,7 @@
"idx": 0,
"is_standard": 1,
"label": "Getting Started",
- "modified": "2020-03-12 16:30:37.821762",
+ "modified": "2020-03-23 11:20:49.161823",
"modified_by": "Administrator",
"module": "Setup",
"name": "Getting Started",
@@ -82,6 +81,16 @@
"is_query_report": 0,
"link_to": "Sales Invoice",
"type": "DocType"
+ },
+ {
+ "is_query_report": 0,
+ "link_to": "dashboard",
+ "type": "Page"
+ },
+ {
+ "is_query_report": 0,
+ "link_to": "leaderboard",
+ "type": "Page"
}
]
}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index dd602ec..020a93f 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:company_name",
@@ -156,6 +157,7 @@
{
"fieldname": "parent_company",
"fieldtype": "Link",
+ "ignore_user_permissions": 1,
"in_list_view": 1,
"label": "Parent Company",
"options": "Company"
@@ -276,6 +278,7 @@
"depends_on": "eval:doc.create_chart_of_accounts_based_on===\"Existing Company\"",
"fieldname": "existing_company",
"fieldtype": "Link",
+ "ignore_user_permissions": 1,
"label": "Existing Company ",
"no_copy": 1,
"options": "Company"
@@ -725,10 +728,13 @@
"icon": "fa fa-building",
"idx": 1,
"image_field": "company_logo",
- "modified": "2019-11-22 13:04:47.470768",
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-21 18:09:53.534211",
"modified_by": "Administrator",
"module": "Setup",
"name": "Company",
+ "nsm_parent_field": "parent_company",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/setup/doctype/company/test_company.py b/erpnext/setup/doctype/company/test_company.py
index af30abd..b37cc17 100644
--- a/erpnext/setup/doctype/company/test_company.py
+++ b/erpnext/setup/doctype/company/test_company.py
@@ -9,7 +9,7 @@
from frappe.utils import random_string
from erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts import get_charts_for_country
-test_ignore = ["Account", "Cost Center", "Payment Terms Template", "Salary Component"]
+test_ignore = ["Account", "Cost Center", "Payment Terms Template", "Salary Component", "Warehouse"]
test_dependencies = ["Fiscal Year"]
test_records = frappe.get_test_records('Company')
diff --git a/erpnext/setup/doctype/customer_group/customer_group.json b/erpnext/setup/doctype/customer_group/customer_group.json
index 7fa242a..10f9bd0 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.json
+++ b/erpnext/setup/doctype/customer_group/customer_group.json
@@ -137,11 +137,13 @@
],
"icon": "fa fa-sitemap",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2020-01-28 13:49:23.961708",
+ "modified": "2020-03-18 18:10:13.048492",
"modified_by": "Administrator",
"module": "Setup",
"name": "Customer Group",
+ "nsm_parent_field": "parent_customer_group",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/setup/doctype/item_group/item_group.json b/erpnext/setup/doctype/item_group/item_group.json
index 36e3e68..004421d 100644
--- a/erpnext/setup/doctype/item_group/item_group.json
+++ b/erpnext/setup/doctype/item_group/item_group.json
@@ -185,13 +185,15 @@
"icon": "fa fa-sitemap",
"idx": 1,
"image_field": "image",
+ "is_tree": 1,
"links": [],
"max_attachments": 3,
- "modified": "2020-01-28 13:51:05.456014",
+ "modified": "2020-03-18 18:10:34.383363",
"modified_by": "Administrator",
"module": "Setup",
"name": "Item Group",
"name_case": "Title Case",
+ "nsm_parent_field": "parent_item_group",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/setup/doctype/sales_person/sales_person.json b/erpnext/setup/doctype/sales_person/sales_person.json
index b05365d..e526ac4 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.json
+++ b/erpnext/setup/doctype/sales_person/sales_person.json
@@ -143,11 +143,13 @@
],
"icon": "icon-user",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2020-01-28 13:50:31.891050",
+ "modified": "2020-03-18 18:11:13.968024",
"modified_by": "Administrator",
"module": "Setup",
"name": "Sales Person",
+ "nsm_parent_field": "parent_sales_person",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/setup/doctype/supplier_group/supplier_group.json b/erpnext/setup/doctype/supplier_group/supplier_group.json
index 5c41334..9119bb9 100644
--- a/erpnext/setup/doctype/supplier_group/supplier_group.json
+++ b/erpnext/setup/doctype/supplier_group/supplier_group.json
@@ -1,481 +1,163 @@
{
- "allow_copy": 0,
- "allow_guest_to_view": 0,
+ "actions": [],
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:supplier_group_name",
- "beta": 0,
"creation": "2013-01-10 16:34:24",
- "custom": 0,
- "docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
- "editable_grid": 0,
+ "field_order": [
+ "supplier_group_name",
+ "parent_supplier_group",
+ "is_group",
+ "section_credit_limit",
+ "payment_terms",
+ "default_payable_account",
+ "accounts",
+ "lft",
+ "rgt",
+ "old_parent"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "supplier_group_name",
"fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Supplier Group Name",
- "length": 0,
- "no_copy": 0,
"oldfieldname": "supplier_type",
"oldfieldtype": "Data",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
"reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
"unique": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
"fieldname": "parent_supplier_group",
"fieldtype": "Link",
- "hidden": 0,
"ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Parent Supplier Group",
- "length": 0,
- "no_copy": 0,
- "options": "Supplier Group",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Supplier Group"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
"bold": 1,
- "collapsible": 0,
- "columns": 0,
+ "default": "0",
"fieldname": "is_group",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Is Group",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Is Group"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
"collapsible": 1,
- "columns": 0,
"fieldname": "section_credit_limit",
"fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Credit Limit",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Credit Limit"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "payment_terms",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Default Payment Terms Template",
- "length": 0,
- "no_copy": 0,
- "options": "Payment Terms Template",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Payment Terms Template"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "default_payable_account",
"fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Default Payable Account",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Default Payable Account"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"depends_on": "eval:!doc.__islocal",
"description": "Mention if non-standard receivable account applicable",
"fieldname": "accounts",
"fieldtype": "Table",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Accounts",
- "length": 0,
- "no_copy": 0,
- "options": "Party Account",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Party Account"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "lft",
"fieldtype": "Int",
"hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "lft",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
"report_hide": 1,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "rgt",
"fieldtype": "Int",
"hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "rgt",
- "length": 0,
"no_copy": 1,
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
"report_hide": 1,
- "reqd": 0,
- "search_index": 1,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "search_index": 1
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"fieldname": "old_parent",
"fieldtype": "Link",
"hidden": 1,
"ignore_user_permissions": 1,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Old Parent",
- "length": 0,
"no_copy": 1,
"options": "Supplier Group",
- "permlevel": 0,
- "precision": "",
"print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 1,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "report_hide": 1
}
],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
"icon": "fa fa-flag",
"idx": 1,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-08-29 06:25:57.589824",
+ "is_tree": 1,
+ "links": [],
+ "modified": "2020-03-18 18:10:49.228407",
"modified_by": "Administrator",
"module": "Setup",
"name": "Supplier Group",
+ "nsm_parent_field": "parent_supplier_group",
"owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
"email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
- "role": "Purchase Manager",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
- "write": 0
+ "role": "Purchase Manager"
},
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
"email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
- "role": "Purchase User",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
- "write": 0
+ "role": "Purchase User"
},
{
- "amend": 0,
- "cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
- "if_owner": 0,
"import": 1,
- "permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Purchase Master Manager",
"set_user_permissions": 1,
"share": 1,
- "submit": 0,
"write": 1
},
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 0,
- "export": 0,
- "if_owner": 0,
- "import": 0,
"permlevel": 1,
- "print": 0,
"read": 1,
- "report": 0,
"role": "Purchase Master Manager",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
"write": 1
},
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 0,
- "export": 0,
- "if_owner": 0,
- "import": 0,
"permlevel": 1,
- "print": 0,
"read": 1,
- "report": 0,
- "role": "Purchase Manager",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
- "write": 0
+ "role": "Purchase Manager"
},
{
- "amend": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 0,
- "export": 0,
- "if_owner": 0,
- "import": 0,
"permlevel": 1,
- "print": 0,
"read": 1,
- "report": 0,
- "role": "Purchase User",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
- "write": 0
+ "role": "Purchase User"
}
],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
"show_name_in_global_search": 1,
- "sort_order": "ASC",
- "track_changes": 0,
- "track_seen": 0,
- "track_views": 0
+ "sort_order": "ASC"
}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/territory/territory.json b/erpnext/setup/doctype/territory/territory.json
index 91a3dda..aa8e048 100644
--- a/erpnext/setup/doctype/territory/territory.json
+++ b/erpnext/setup/doctype/territory/territory.json
@@ -121,12 +121,14 @@
],
"icon": "fa fa-map-marker",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2020-01-28 13:49:31.905800",
+ "modified": "2020-03-18 18:11:36.623555",
"modified_by": "Administrator",
"module": "Setup",
"name": "Territory",
"name_case": "Title Case",
+ "nsm_parent_field": "parent_territory",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py
index 439e6a5..13269a8 100644
--- a/erpnext/setup/utils.py
+++ b/erpnext/setup/utils.py
@@ -142,6 +142,6 @@
raise
def welcome_email():
- site_name = get_default_company()
+ site_name = get_default_company() or "ERPNext"
title = _("Welcome to {0}").format(site_name)
return title
diff --git a/erpnext/stock/__init__.py b/erpnext/stock/__init__.py
index a4d4cbd..8d64efe 100644
--- a/erpnext/stock/__init__.py
+++ b/erpnext/stock/__init__.py
@@ -13,12 +13,16 @@
]
def get_warehouse_account_map(company=None):
- if not frappe.flags.warehouse_account_map or frappe.flags.in_test:
+ company_warehouse_account_map = company and frappe.flags.setdefault('warehouse_account_map', {}).get(company)
+ warehouse_account_map = frappe.flags.warehouse_account_map
+
+ if not warehouse_account_map or not company_warehouse_account_map or frappe.flags.in_test:
warehouse_account = frappe._dict()
filters = {}
if company:
filters['company'] = company
+ frappe.flags.setdefault('warehouse_account_map', {}).setdefault(company, {})
for d in frappe.get_all('Warehouse',
fields = ["name", "account", "parent_warehouse", "company", "is_group"],
@@ -30,10 +34,12 @@
if d.account:
d.account_currency = frappe.db.get_value('Account', d.account, 'account_currency', cache=True)
warehouse_account.setdefault(d.name, d)
-
- frappe.flags.warehouse_account_map = warehouse_account
-
- return frappe.flags.warehouse_account_map
+ if company:
+ frappe.flags.warehouse_account_map[company] = warehouse_account
+ else:
+ frappe.flags.warehouse_account_map = warehouse_account
+
+ return frappe.flags.warehouse_account_map.get(company) or frappe.flags.warehouse_account_map
def get_warehouse_account(warehouse, warehouse_account=None):
account = warehouse.account
diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py
index 8ae978e..9b7249e 100644
--- a/erpnext/stock/doctype/batch/batch.py
+++ b/erpnext/stock/doctype/batch/batch.py
@@ -122,8 +122,11 @@
self.expiry_date = add_days(self.manufacturing_date, shelf_life_in_days)
if has_expiry_date and not self.expiry_date:
- frappe.msgprint(_('Expiry date is mandatory for selected item.'))
- frappe.throw(_("Set item's shelf life in days, to set expiry based on manufacturing date plus shelf-life."))
+ frappe.throw(msg=_("Please set {0} for Batched Item {1}, which is used to set {2} on Submit.") \
+ .format(frappe.bold("Shelf Life in Days"),
+ frappe.utils.get_link_to_form("Item", self.item),
+ frappe.bold("Batch Expiry Date")),
+ title=_("Expiry Date Mandatory"))
def get_name_from_naming_series(self):
"""
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 97a8472..73b36e3 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -69,15 +69,21 @@
'''Update qty reserved for production from Production Item tables
in open work orders'''
self.reserved_qty_for_production = frappe.db.sql('''
- select sum(item.required_qty - item.transferred_qty)
- from `tabWork Order` pro, `tabWork Order Item` item
- where
+ SELECT
+ CASE WHEN ifnull(skip_transfer, 0) = 0 THEN
+ SUM(item.required_qty - item.transferred_qty)
+ ELSE
+ SUM(item.required_qty - item.consumed_qty)
+ END
+ FROM `tabWork Order` pro, `tabWork Order Item` item
+ WHERE
item.item_code = %s
and item.parent = pro.name
and pro.docstatus = 1
and item.source_warehouse = %s
and pro.status not in ("Stopped", "Completed")
- and item.required_qty > item.transferred_qty''', (self.item_code, self.warehouse))[0][0]
+ and (item.required_qty > item.transferred_qty or item.required_qty > item.consumed_qty)
+ ''', (self.item_code, self.warehouse))[0][0]
self.set_projected_qty()
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index ea94c7b..30d82ca 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -414,7 +414,6 @@
invoiced_qty_map = get_invoiced_qty_map(source_name)
def set_missing_values(source, target):
- target.is_pos = 0
target.ignore_pricing_rule = 1
target.run_method("set_missing_values")
target.run_method("set_po_nos")
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
index a34db45..28e9533 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.py
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
@@ -238,7 +238,7 @@
try:
directions = maps_client.directions(**directions_data)
except Exception as e:
- frappe.throw(_(e))
+ frappe.throw(_(str(e)))
return directions[0] if directions else False
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 3503e7c..aa6b2fe 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -343,7 +343,8 @@
{
"fieldname": "shelf_life_in_days",
"fieldtype": "Int",
- "label": "Shelf Life In Days"
+ "label": "Shelf Life In Days",
+ "mandatory_depends_on": "eval:doc.has_batch_no && doc.has_expiry_date"
},
{
"default": "2099-12-31",
@@ -1045,7 +1046,7 @@
"image_field": "image",
"links": [],
"max_attachments": 1,
- "modified": "2020-01-02 19:13:59.295963",
+ "modified": "2020-03-24 16:14:36.950677",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item",
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 74ae627..e2e84c4 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -183,12 +183,17 @@
# default warehouse, or Stores
for default in self.item_defaults or [frappe._dict({'company': frappe.defaults.get_defaults().company})]:
default_warehouse = (default.default_warehouse
- or frappe.db.get_single_value('Stock Settings', 'default_warehouse')
- or frappe.db.get_value('Warehouse', {'warehouse_name': _('Stores')}))
+ or frappe.db.get_single_value('Stock Settings', 'default_warehouse'))
+ if default_warehouse:
+ warehouse_company = frappe.db.get_value("Warehouse", default_warehouse, "company")
+
+ if not default_warehouse or warehouse_company != default.company:
+ default_warehouse = frappe.db.get_value('Warehouse',
+ {'warehouse_name': _('Stores'), 'company': default.company})
if default_warehouse:
stock_entry = make_stock_entry(item_code=self.name, target=default_warehouse, qty=self.opening_stock,
- rate=self.valuation_rate, company=default.company)
+ rate=self.valuation_rate, company=default.company)
stock_entry.add_comment("Comment", _("Opening Stock"))
@@ -736,14 +741,12 @@
defaults = frappe.defaults.get_defaults() or {}
# To check default warehouse is belong to the default company
- if defaults.get("default_warehouse") and frappe.db.exists("Warehouse",
+ if defaults.get("default_warehouse") and defaults.company and frappe.db.exists("Warehouse",
{'name': defaults.default_warehouse, 'company': defaults.company}):
- warehouse = defaults.default_warehouse
-
- self.append("item_defaults", {
- "company": defaults.get("company"),
- "default_warehouse": warehouse
- })
+ self.append("item_defaults", {
+ "company": defaults.get("company"),
+ "default_warehouse": defaults.default_warehouse
+ })
def update_variants(self):
if self.flags.dont_update_variants or \
diff --git a/erpnext/stock/doctype/item_alternative/item_alternative.py b/erpnext/stock/doctype/item_alternative/item_alternative.py
index b14683b..da0c3b7 100644
--- a/erpnext/stock/doctype/item_alternative/item_alternative.py
+++ b/erpnext/stock/doctype/item_alternative/item_alternative.py
@@ -22,6 +22,21 @@
if self.item_code == self.alternative_item_code:
frappe.throw(_("Alternative item must not be same as item code"))
+ item_meta = frappe.get_meta("Item")
+ fields = ["is_stock_item", "include_item_in_manufacturing","has_serial_no","has_batch_no"]
+ item_data = frappe.db.get_values("Item", self.item_code, fields, as_dict=1)
+ alternative_item_data = frappe.db.get_values("Item", self.alternative_item_code, fields, as_dict=1)
+
+ for field in fields:
+ if item_data[0].get(field) != alternative_item_data[0].get(field):
+ raise_exception, alert = [1, False] if field == "is_stock_item" else [0, True]
+
+ frappe.msgprint(_("The value of {0} differs between Items {1} and {2}") \
+ .format(frappe.bold(item_meta.get_label(field)),
+ frappe.bold(self.alternative_item_code),
+ frappe.bold(self.item_code)),
+ alert=alert, raise_exception=raise_exception)
+
def validate_duplicate(self):
if frappe.db.get_value("Item Alternative", {'item_code': self.item_code,
'alternative_item_code': self.alternative_item_code, 'name': ('!=', self.name)}):
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index 7df40fb..5ad0e13 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -8,6 +8,7 @@
from frappe.model.meta import get_field_precision
from frappe.model.document import Document
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
+from erpnext.accounts.doctype.account.account import get_account_currency
class LandedCostVoucher(Document):
def get_items_from_purchase_receipts(self):
@@ -43,6 +44,7 @@
else:
self.validate_applicable_charges_for_item()
self.validate_purchase_receipts()
+ self.validate_expense_accounts()
self.set_total_taxes_and_charges()
def check_mandatory(self):
@@ -71,6 +73,14 @@
frappe.throw(_("Row {0}: Cost center is required for an item {1}")
.format(item.idx, item.item_code))
+ def validate_expense_accounts(self):
+ company_currency = erpnext.get_company_currency(self.company)
+ for account in self.taxes:
+ if get_account_currency(account.expense_account) != company_currency:
+ frappe.throw(msg=_(""" Row {0}: Expense account currency should be same as company's default currency.
+ Please select expense account with account currency as {1}""")
+ .format(account.idx, frappe.bold(company_currency)), title=_("Invalid Account Currency"))
+
def set_total_taxes_and_charges(self):
self.total_taxes_and_charges = sum([flt(d.amount) for d in self.get("taxes")])
@@ -104,7 +114,6 @@
def update_landed_cost(self):
for d in self.get("purchase_receipts"):
doc = frappe.get_doc(d.receipt_document_type, d.receipt_document)
-
# check if there are {qty} assets created and linked to this receipt document
self.validate_asset_qty_and_status(d.receipt_document_type, doc)
@@ -123,6 +132,8 @@
# update latest valuation rate in serial no
self.update_rate_in_serial_no_for_non_asset_items(doc)
+ for d in self.get("purchase_receipts"):
+ doc = frappe.get_doc(d.receipt_document_type, d.receipt_document)
# update stock & gl entries for cancelled state of PR
doc.docstatus = 2
doc.update_stock_ledger(allow_negative_stock=True, via_landed_cost_voucher=True)
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 4542847..285643d 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -501,7 +501,7 @@
wo_order = frappe.new_doc("Work Order")
wo_order.update({
"production_item": d.item_code,
- "qty": d.qty - d.ordered_qty,
+ "qty": d.stock_qty - d.ordered_qty,
"fg_warehouse": d.warehouse,
"wip_warehouse": default_wip_warehouse,
"description": d.description,
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 3b43690..c2b3892 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -50,8 +50,8 @@
'target_field': 'received_qty',
'target_parent_dt': 'Material Request',
'target_parent_field': 'per_received',
- 'target_ref_field': 'qty',
- 'source_field': 'qty',
+ 'target_ref_field': 'stock_qty',
+ 'source_field': 'stock_qty',
'percent_join_field': 'material_request'
}]
if cint(self.is_return):
@@ -357,7 +357,7 @@
if warehouse_with_no_account:
frappe.msgprint(_("No accounting entries for the following warehouses") + ": \n" +
"\n".join(warehouse_with_no_account))
-
+
return process_gl_map(gl_entries)
def get_asset_gl_entry(self, gl_entries):
@@ -628,7 +628,7 @@
if not landed_cost_vouchers:
return
-
+
item_account_wise_cost = {}
for lcv in landed_cost_vouchers:
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index d80e8f2..cba7f20 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -53,7 +53,7 @@
self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
def test_batched_serial_no_purchase(self):
- item = frappe.get_doc("Item", { 'item_name': 'Batched Serialized Item' })
+ item = frappe.db.exists("Item", {'item_name': 'Batched Serialized Item'})
if not item:
item = create_item("Batched Serialized Item")
item.has_batch_no = 1
@@ -62,6 +62,8 @@
item.batch_number_series = "BS-BATCH-.##"
item.serial_no_series = "BS-.####"
item.save()
+ else:
+ item = frappe.get_doc("Item", {'item_name': 'Batched Serialized Item'})
pr = make_purchase_receipt(item_code=item.name, qty=5, rate=500)
@@ -302,6 +304,8 @@
self.assertEqual(serial_no, frappe.db.get_value("Serial No",
{"purchase_document_type": "Purchase Receipt", "purchase_document_no": pr_doc.name}, "name"))
+ pr_doc.cancel()
+
#check for the auto created serial nos
item_code = "Test Auto Created Serial No"
if not frappe.db.exists("Item", item_code):
@@ -317,9 +321,9 @@
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
- item_code = frappe.db.get_value('Item', {'has_serial_no': 1, 'is_fixed_asset': 0})
+ item_code = frappe.db.get_value('Item', {'has_serial_no': 1, 'is_fixed_asset': 0, "has_batch_no": 0})
if not item_code:
- item = make_item("Test Serial Item 1", dict(has_serial_no=1))
+ item = make_item("Test Serial Item 1", dict(has_serial_no=1, has_batch_no=0))
item_code = item.name
serial_no = random_string(5)
diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
index a876d16..a8b9c81 100644
--- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
+++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
@@ -832,7 +832,7 @@
"idx": 1,
"istable": 1,
"links": [],
- "modified": "2020-03-05 14:19:48.799370",
+ "modified": "2020-03-11 14:19:48.799370",
"modified_by": "Administrator",
"module": "Stock",
"name": "Purchase Receipt Item",
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 64d4c6c..772ac58 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -523,12 +523,15 @@
return serial_nos
@frappe.whitelist()
-def auto_fetch_serial_number(qty, item_code, warehouse, batch_no=None):
- serial_numbers = frappe.get_list("Serial No", filters={
+def auto_fetch_serial_number(qty, item_code, warehouse, batch_nos=None):
+ import json
+ filters = {
"item_code": item_code,
"warehouse": warehouse,
- "batch_no": batch_no,
"delivery_document_no": "",
"sales_invoice": ""
- }, limit=qty, order_by="creation")
+ }
+ if batch_nos: filters["batch_no"] = ["in", json.loads(batch_nos)]
+
+ serial_numbers = frappe.get_list("Serial No", filters=filters, limit=qty, order_by="creation")
return [item['name'] for item in serial_numbers]
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 170a80f..3bb9415 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -60,7 +60,8 @@
}
}
- if(item.s_warehouse) filters["warehouse"] = item.s_warehouse;
+ filters["warehouse"] = item.s_warehouse || item.t_warehouse;
+
return {
query : "erpnext.controllers.queries.get_batch_no",
filters: filters
@@ -309,12 +310,12 @@
method: "erpnext.stock.get_item_details.get_serial_no",
args: {"args": args},
callback: function(r) {
- if (!r.exe){
+ if (!r.exe && r.message){
frappe.model.set_value(cdt, cdn, "serial_no", r.message);
- }
- if (callback) {
- callback();
+ if (callback) {
+ callback();
+ }
}
}
});
@@ -622,10 +623,15 @@
if(r.message) {
var d = locals[cdt][cdn];
$.each(r.message, function(k, v) {
- frappe.model.set_value(cdt, cdn, k, v); // qty and it's subsequent fields weren't triggered
+ if (v) {
+ frappe.model.set_value(cdt, cdn, k, v); // qty and it's subsequent fields weren't triggered
+ }
});
refresh_field("items");
- erpnext.stock.select_batch_and_serial_no(frm, d);
+
+ if (!d.serial_no) {
+ erpnext.stock.select_batch_and_serial_no(frm, d);
+ }
}
}
});
@@ -964,10 +970,8 @@
}
}
- if(item && item.has_serial_no
- && frm.doc.purpose === 'Material Receipt') {
- return;
- }
+ if(item && !item.has_serial_no && !item.has_batch_no) return;
+ if (frm.doc.purpose === 'Material Receipt') return;
frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", function() {
new erpnext.SerialNoBatchSelector({
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 8b072c6..be4c78b 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -177,6 +177,10 @@
stock_items = self.get_stock_items()
serialized_items = self.get_serialized_items()
for item in self.get("items"):
+ if item.qty and item.qty < 0:
+ frappe.throw(_("Row {0}: The item {1}, quantity must be positive number")
+ .format(item.idx, frappe.bold(item.item_code)))
+
if item.item_code not in stock_items:
frappe.throw(_("{0} is not a stock Item").format(item.item_code))
@@ -234,7 +238,7 @@
if self.purpose == "Manufacture" and self.work_order:
production_item = frappe.get_value('Work Order', self.work_order, 'production_item')
for item in self.items:
- if item.item_code == production_item and item.qty != self.fg_completed_qty:
+ if item.item_code == production_item and item.t_warehouse and item.qty != self.fg_completed_qty:
frappe.throw(_("Finished product quantity <b>{0}</b> and For Quantity <b>{1}</b> cannot be different")
.format(item.qty, self.fg_completed_qty))
@@ -294,13 +298,8 @@
if validate_for_manufacture:
if d.bom_no:
d.s_warehouse = None
-
if not d.t_warehouse:
frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
-
- elif self.pro_doc and (cstr(d.t_warehouse) != self.pro_doc.fg_warehouse and cstr(d.t_warehouse) != self.pro_doc.scrap_warehouse):
- frappe.throw(_("Target warehouse in row {0} must be same as Work Order").format(d.idx))
-
else:
d.t_warehouse = None
if not d.s_warehouse:
diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
index d86e68b..a848c80 100644
--- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
+++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "hash",
"creation": "2013-03-29 18:22:12",
"doctype": "DocType",
@@ -479,8 +480,7 @@
"fieldname": "project",
"fieldtype": "Link",
"label": "Project",
- "options": "Project",
- "read_only": 1
+ "options": "Project"
},
{
"fieldname": "po_detail",
@@ -494,7 +494,8 @@
],
"idx": 1,
"istable": 1,
- "modified": "2019-08-20 14:01:02.319754",
+ "links": [],
+ "modified": "2020-03-19 12:34:09.836295",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Entry Detail",
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json
index f43390f..c9a3527 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.json
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.json
@@ -1,955 +1,238 @@
{
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "autoname": "",
- "beta": 0,
+ "actions": [],
"creation": "2013-06-24 16:37:54",
- "custom": 0,
"description": "Settings",
- "docstatus": 0,
"doctype": "DocType",
- "editable_grid": 0,
+ "engine": "InnoDB",
+ "field_order": [
+ "item_naming_by",
+ "item_group",
+ "stock_uom",
+ "default_warehouse",
+ "sample_retention_warehouse",
+ "column_break_4",
+ "valuation_method",
+ "over_delivery_receipt_allowance",
+ "action_if_quality_inspection_is_not_submitted",
+ "show_barcode_field",
+ "clean_description_html",
+ "section_break_7",
+ "auto_insert_price_list_rate_if_missing",
+ "allow_negative_stock",
+ "column_break_10",
+ "automatically_set_serial_nos_based_on_fifo",
+ "set_qty_in_transactions_based_on_serial_no_input",
+ "auto_material_request",
+ "auto_indent",
+ "reorder_email_notify",
+ "inter_warehouse_transfer_settings_section",
+ "allow_from_dn",
+ "allow_from_pr",
+ "freeze_stock_entries",
+ "stock_frozen_upto",
+ "stock_frozen_upto_days",
+ "stock_auth_role",
+ "batch_id_sb",
+ "use_naming_series",
+ "naming_series_prefix"
+ ],
"fields": [
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "Item Code",
- "fetch_if_empty": 0,
"fieldname": "item_naming_by",
"fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Item Naming By",
- "length": 0,
- "no_copy": 0,
- "options": "Item Code\nNaming Series",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Item Code\nNaming Series"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "description": "",
- "fetch_if_empty": 0,
"fieldname": "item_group",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Default Item Group",
- "length": 0,
- "no_copy": 0,
- "options": "Item Group",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Item Group"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "stock_uom",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
"in_list_view": 1,
- "in_standard_filter": 0,
"label": "Default Stock UOM",
- "length": 0,
- "no_copy": 0,
- "options": "UOM",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "UOM"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "default_warehouse",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Default Warehouse",
- "length": 0,
- "no_copy": 0,
- "options": "Warehouse",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Warehouse"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "sample_retention_warehouse",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Sample Retention Warehouse",
- "length": 0,
- "no_copy": 0,
- "options": "Warehouse",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Warehouse"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "column_break_4",
- "fieldtype": "Column Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Column Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "valuation_method",
"fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Default Valuation Method",
- "length": 0,
- "no_copy": 0,
- "options": "FIFO\nMoving Average",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "FIFO\nMoving Average"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"description": "Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.",
- "fetch_if_empty": 0,
"fieldname": "over_delivery_receipt_allowance",
"fieldtype": "Float",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Over Delivery/Receipt Allowance (%)",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Over Delivery/Receipt Allowance (%)"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "Stop",
- "fetch_if_empty": 0,
"fieldname": "action_if_quality_inspection_is_not_submitted",
"fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Action if Quality inspection is not submitted",
- "length": 0,
- "no_copy": 0,
- "options": "Stop\nWarn",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Stop\nWarn"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "1",
- "fetch_if_empty": 0,
"fieldname": "show_barcode_field",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Show Barcode Field",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Show Barcode Field"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "1",
- "fetch_if_empty": 0,
"fieldname": "clean_description_html",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Convert Item Description to Clean HTML",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Convert Item Description to Clean HTML"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "section_break_7",
- "fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Section Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
+ "default": "0",
"fieldname": "auto_insert_price_list_rate_if_missing",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Auto insert Price List rate if missing",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Auto insert Price List rate if missing"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
+ "default": "0",
"fieldname": "allow_negative_stock",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Allow Negative Stock",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Allow Negative Stock"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "column_break_10",
- "fieldtype": "Column Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "fieldtype": "Column Break"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "1",
- "fetch_if_empty": 0,
"fieldname": "automatically_set_serial_nos_based_on_fifo",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Automatically Set Serial Nos based on FIFO",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Automatically Set Serial Nos based on FIFO"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "1",
- "fetch_if_empty": 0,
"fieldname": "set_qty_in_transactions_based_on_serial_no_input",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Set Qty in Transactions based on Serial No Input",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Set Qty in Transactions based on Serial No Input"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "auto_material_request",
"fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Auto Material Request",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Auto Material Request"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
+ "default": "0",
"fieldname": "auto_indent",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Raise Material Request when stock reaches re-order level",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Raise Material Request when stock reaches re-order level"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
+ "default": "0",
"fieldname": "reorder_email_notify",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Notify by Email on creation of automatic Material Request",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Notify by Email on creation of automatic Material Request"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "freeze_stock_entries",
"fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Freeze Stock Entries",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Freeze Stock Entries"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "stock_frozen_upto",
"fieldtype": "Date",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Stock Frozen Upto",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Stock Frozen Upto"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "stock_frozen_upto_days",
"fieldtype": "Int",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Freeze Stocks Older Than [Days]",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Freeze Stocks Older Than [Days]"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "stock_auth_role",
"fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
"label": "Role Allowed to edit frozen stock",
- "length": 0,
- "no_copy": 0,
- "options": "Role",
- "permlevel": 0,
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "options": "Role"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fetch_if_empty": 0,
"fieldname": "batch_id_sb",
"fieldtype": "Section Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Batch Identification",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Batch Identification"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "0",
- "fetch_if_empty": 0,
"fieldname": "use_naming_series",
"fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Use Naming Series",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Use Naming Series"
},
{
- "allow_bulk_edit": 0,
- "allow_in_quick_entry": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
"default": "BATCH-",
"depends_on": "eval:doc.use_naming_series==1",
- "fetch_if_empty": 0,
"fieldname": "naming_series_prefix",
"fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Naming Series Prefix",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "translatable": 0,
- "unique": 0
+ "label": "Naming Series Prefix"
+ },
+ {
+ "fieldname": "inter_warehouse_transfer_settings_section",
+ "fieldtype": "Section Break",
+ "label": "Inter Warehouse Transfer Settings"
+ },
+ {
+ "default": "0",
+ "fieldname": "allow_from_dn",
+ "fieldtype": "Check",
+ "label": "Allow Material Transfer From Delivery Note and Sales Invoice"
+ },
+ {
+ "default": "0",
+ "fieldname": "allow_from_pr",
+ "fieldtype": "Check",
+ "label": "Allow Material Transfer From Purchase Receipt and Purchase Invoice"
}
],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
"icon": "icon-cog",
"idx": 1,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
"issingle": 1,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2019-07-04 01:19:07.738045",
+ "links": [],
+ "modified": "2020-04-01 18:11:25.417678",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Settings",
"owner": "Administrator",
"permissions": [
{
- "amend": 0,
- "cancel": 0,
"create": 1,
- "delete": 0,
"email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
"print": 1,
"read": 1,
- "report": 0,
"role": "Stock Manager",
- "set_user_permissions": 0,
"share": 1,
- "submit": 0,
"write": 1
}
],
"quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_order": "ASC",
- "track_changes": 0,
- "track_seen": 0,
- "track_views": 0
+ "sort_field": "modified",
+ "sort_order": "ASC"
}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py
index 93b5eee..4c7828b 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.py
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.py
@@ -8,6 +8,8 @@
from frappe import _
from frappe.model.document import Document
from frappe.utils.html_utils import clean_html
+from frappe.utils import cint
+from frappe.custom.doctype.property_setter.property_setter import make_property_setter
class StockSettings(Document):
def validate(self):
@@ -61,6 +63,15 @@
# changed to text
frappe.enqueue('erpnext.stock.doctype.stock_settings.stock_settings.clean_all_descriptions', now=frappe.flags.in_test)
+ def on_update(self):
+ self.toggle_warehouse_field_for_inter_warehouse_transfer()
+
+ def toggle_warehouse_field_for_inter_warehouse_transfer(self):
+ make_property_setter("Sales Invoice Item", "target_warehouse", "hidden", 1 - cint(self.allow_from_dn), "Check")
+ make_property_setter("Delivery Note Item", "target_warehouse", "hidden", 1 - cint(self.allow_from_dn), "Check")
+ make_property_setter("Purchase Invoice Item", "from_warehouse", "hidden", 1 - cint(self.allow_from_pr), "Check")
+ make_property_setter("Purchase Receipt Item", "from_warehouse", "hidden", 1 - cint(self.allow_from_pr), "Check")
+
def clean_all_descriptions():
for item in frappe.get_all('Item', ['name', 'description']):
diff --git a/erpnext/stock/doctype/warehouse/warehouse.json b/erpnext/stock/doctype/warehouse/warehouse.json
index 2bf1ed8..5d534af 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.json
+++ b/erpnext/stock/doctype/warehouse/warehouse.json
@@ -228,11 +228,13 @@
],
"icon": "fa fa-building",
"idx": 1,
+ "is_tree": 1,
"links": [],
- "modified": "2020-01-28 13:50:59.368846",
+ "modified": "2020-03-18 18:11:53.282358",
"modified_by": "Administrator",
"module": "Stock",
"name": "Warehouse",
+ "nsm_parent_field": "parent_warehouse",
"owner": "Administrator",
"permissions": [
{
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 53964f2..9c5a8e1 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -240,26 +240,13 @@
item_group_defaults = get_item_group_defaults(item.name, args.company)
brand_defaults = get_brand_defaults(item.name, args.company)
- if overwrite_warehouse or not args.warehouse:
- warehouse = (
- args.get("set_warehouse") or
- item_defaults.get("default_warehouse") or
- item_group_defaults.get("default_warehouse") or
- brand_defaults.get("default_warehouse") or
- args.warehouse
- )
-
- if not warehouse:
- defaults = frappe.defaults.get_defaults() or {}
- warehouse_exists = frappe.db.exists("Warehouse", {
- 'name': defaults.default_warehouse,
- 'company': args.company
- })
- if defaults.get("default_warehouse") and warehouse_exists:
- warehouse = defaults.default_warehouse
-
- else:
- warehouse = args.warehouse
+ defaults = frappe._dict({
+ 'item_defaults': item_defaults,
+ 'item_group_defaults': item_group_defaults,
+ 'brand_defaults': brand_defaults
+ })
+
+ warehouse = get_item_warehouse(item, args, overwrite_warehouse, defaults)
if args.get('doctype') == "Material Request" and not args.get('material_request_type'):
args['material_request_type'] = frappe.db.get_value('Material Request',
@@ -272,7 +259,7 @@
expense_account = get_asset_category_account(fieldname = "fixed_asset_account", item = args.item_code, company= args.company)
#Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master
- if not args.uom:
+ if not args.get('uom'):
if args.get('doctype') in sales_doctypes:
args.uom = item.sales_uom if item.sales_uom else item.stock_uom
elif (args.get('doctype') in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']) or \
@@ -362,6 +349,37 @@
return out
+def get_item_warehouse(item, args, overwrite_warehouse, defaults={}):
+ if not defaults:
+ defaults = frappe._dict({
+ 'item_defaults' : get_item_defaults(item.name, args.company),
+ 'item_group_defaults' : get_item_group_defaults(item.name, args.company),
+ 'brand_defaults' : get_brand_defaults(item.name, args.company)
+ })
+
+ if overwrite_warehouse or not args.warehouse:
+ warehouse = (
+ args.get("set_warehouse") or
+ defaults.item_defaults.get("default_warehouse") or
+ defaults.item_group_defaults.get("default_warehouse") or
+ defaults.brand_defaults.get("default_warehouse") or
+ args.get('warehouse')
+ )
+
+ if not warehouse:
+ defaults = frappe.defaults.get_defaults() or {}
+ warehouse_exists = frappe.db.exists("Warehouse", {
+ 'name': defaults.default_warehouse,
+ 'company': args.company
+ })
+ if defaults.get("default_warehouse") and warehouse_exists:
+ warehouse = defaults.default_warehouse
+
+ else:
+ warehouse = args.get('warehouse')
+
+ return warehouse
+
def update_barcode_value(out):
from erpnext.accounts.doctype.sales_invoice.pos import get_barcode_data
barcode_data = get_barcode_data([out])
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.js b/erpnext/stock/report/stock_ledger/stock_ledger.js
index 3d5cfdc..9adfbf7 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.js
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.js
@@ -29,7 +29,13 @@
"fieldname":"warehouse",
"label": __("Warehouse"),
"fieldtype": "Link",
- "options": "Warehouse"
+ "options": "Warehouse",
+ "get_query": function() {
+ const company = frappe.query_report.get_filter_value('company');
+ return {
+ filters: { 'company': company }
+ }
+ }
},
{
"fieldname":"item_code",
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
index 913d7d8..c8efb16 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
@@ -44,7 +44,9 @@
re_order_level = d.warehouse_reorder_level
re_order_qty = d.warehouse_reorder_qty
- shortage_qty = re_order_level - flt(bin.projected_qty) if (re_order_level or re_order_qty) else 0
+ shortage_qty = 0
+ if (re_order_level or re_order_qty) and re_order_level > bin.projected_qty:
+ shortage_qty = re_order_level - flt(bin.projected_qty)
data.append([item.name, item.item_name, item.description, item.item_group, item.brand, bin.warehouse,
item.stock_uom, bin.actual_qty, bin.planned_qty, bin.indented_qty, bin.ordered_qty,
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index b100f45..7567a1a 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -428,7 +428,7 @@
frappe.get_desk_link(self.exceptions[0]["voucher_type"], self.exceptions[0]["voucher_no"]))
if self.verbose:
- frappe.throw(msg, NegativeStockError, title='Insufficent Stock')
+ frappe.throw(msg, NegativeStockError, title='Insufficient Stock')
else:
raise NegativeStockError(msg)
diff --git a/erpnext/support/web_form/issues/issues.json b/erpnext/support/web_form/issues/issues.json
index 9b904ad..0f15e47 100644
--- a/erpnext/support/web_form/issues/issues.json
+++ b/erpnext/support/web_form/issues/issues.json
@@ -18,7 +18,7 @@
"is_standard": 1,
"login_required": 1,
"max_attachment_size": 0,
- "modified": "2019-12-10 13:48:19.894186",
+ "modified": "2020-03-06 05:24:05.749664",
"modified_by": "Administrator",
"module": "Support",
"name": "issues",
@@ -58,7 +58,7 @@
"options": "Open\nReplied\nHold\nClosed",
"read_only": 1,
"reqd": 0,
- "show_in_filter": 0
+ "show_in_filter": 1
},
{
"allow_read_on_all_link_options": 0,
diff --git a/erpnext/tests/utils.py b/erpnext/tests/utils.py
index dfd3ed7..16ecd51 100644
--- a/erpnext/tests/utils.py
+++ b/erpnext/tests/utils.py
@@ -7,6 +7,8 @@
def create_test_contact_and_address():
frappe.db.sql('delete from tabContact')
+ frappe.db.sql('delete from `tabContact Email`')
+ frappe.db.sql('delete from `tabContact Phone`')
frappe.db.sql('delete from tabAddress')
frappe.db.sql('delete from `tabDynamic Link`')
diff --git a/erpnext/translations/af.csv b/erpnext/translations/af.csv
index 779306e..98b202f 100644
--- a/erpnext/translations/af.csv
+++ b/erpnext/translations/af.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Werk aan die gang
DocType: Leave Control Panel,Branch (optional),Tak (opsioneel)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,Kies asseblief datum
-DocType: Item Price,Minimum Qty ,Minimum aantal
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Minimum aantal
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},Rekursie van die BOM: {0} kan nie die kind van {1} wees nie
DocType: Finance Book,Finance Book,Finansies Boek
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Vakansie Lys
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Die ouerrekening {0} bestaan nie
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Hersiening en aksie
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Hierdie werknemer het reeds 'n logboek met dieselfde tydstempel. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,rekenmeester
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Wins / verlies
DocType: Crop,Perennial,meerjarige
DocType: Program,Is Published,Word gepubliseer
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Wys afleweringsnotas
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Om oorfakturering toe te laat, moet u "Toelae vir oorfakturering" in rekeninginstellings of die item opdateer."
DocType: Patient Appointment,Procedure,prosedure
DocType: Accounts Settings,Use Custom Cash Flow Format,Gebruik aangepaste kontantvloeiformaat
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Risiko faktore
DocType: Patient,Occupational Hazards and Environmental Factors,Beroepsgevare en omgewingsfaktore
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,Voorraadinskrywings wat reeds vir werkorder geskep is
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Itemkode> Itemgroep> Merk
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Kyk vorige bestellings
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} gesprekke
DocType: Vital Signs,Respiratory rate,Respiratoriese tempo
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,'N Fout het voorgekom tydens die opdateringsproses
DocType: Restaurant Reservation,Restaurant Reservation,Restaurant bespreking
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,U items
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Verskaffer> Verskaffer tipe
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Voorstel Skryf
DocType: Payment Entry Deduction,Payment Entry Deduction,Betaling Inskrywing Aftrek
DocType: Service Level Priority,Service Level Priority,Prioriteit op diensvlak
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,Kies asseblief Maatskappy en Posdatum om inskrywings te kry
DocType: Asset,Maintenance,onderhoud
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Kry van pasiënt ontmoeting
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},UOM-omskakelingsfaktor ({0} -> {1}) nie vir item gevind nie: {2}
DocType: Subscriber,Subscriber,intekenaar
DocType: Item Attribute Value,Item Attribute Value,Item Attribuutwaarde
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Geldwissel moet van toepassing wees vir koop of verkoop.
@@ -1936,7 +1931,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),Is Terugbetaling (Debiet Nota)
DocType: Workstation,Wages,lone
DocType: Asset Maintenance,Maintenance Manager Name,Onderhoudbestuurder Naam
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Daar bestaan reeds transaksies teen die onderneming!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Versoek webwerf
DocType: Agriculture Task,Urgent,dringende
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Rekords gaan haal ......
@@ -2633,7 +2627,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Die betalingstermyn by ry {0} is moontlik 'n duplikaat.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Landbou (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Packing Slip
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Stel Naming Series in vir {0} via Setup> Settings> Naming Series
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,Kantoorhuur
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Opstel SMS gateway instellings
DocType: Disease,Common Name,Algemene naam
@@ -2799,7 +2792,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Blare suksesvol toegeken vir {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Geen items om te pak nie
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Slegs .csv- en .xlsx-lêers word tans ondersteun
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Stel asseblief 'n naamstelsel vir werknemers in vir mensehulpbronne> HR-instellings
DocType: Shipping Rule Condition,From Value,Uit Waarde
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Vervaardiging Hoeveelheid is verpligtend
DocType: Loan,Repayment Method,Terugbetaling Metode
@@ -4046,7 +4038,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Vereis Aan
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","As dit gemerk is, verberg en deaktiveer u die veld Afgeronde totaal in salarisstrokies"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Dit is die standaardverrekening (dae) vir die afleweringsdatum in verkoopsbestellings. Die terugwaartse verrekening is 7 dae vanaf die datum van die bestellingsplasing.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Stel nommeringreekse op vir bywoning via Setup> Numbering Series
DocType: Rename Tool,File to Rename,Lêer om hernoem te word
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Kies asseblief BOM vir item in ry {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Haal intekeningopdaterings
@@ -4649,7 +4640,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Is finansieringskoste
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Bywoning vir werknemer {0} is reeds gemerk
DocType: Packing Slip,If more than one package of the same type (for print),As meer as een pakket van dieselfde tipe (vir druk)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Stel asb. Die opvoeder-naamstelsel op in onderwys> Onderwysinstellings
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Stel asseblief die standaardkliënt in Restaurantinstellings
,Salary Register,Salarisregister
DocType: Company,Default warehouse for Sales Return,Standaard pakhuis vir verkoopsopgawe
@@ -4920,7 +4910,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Hangende aktiwiteite
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Skep labtoets
DocType: Patient Appointment,Reminded,herinner
-DocType: Homepage Section,Cards,kaarte
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Bekyk grafiek van rekeninge
DocType: Chapter Member,Chapter Member,Hooflid
DocType: Material Request Plan Item,Minimum Order Quantity,Minimum bestelhoeveelheid
@@ -4938,7 +4927,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Toekomstige datums nie toegelaat nie
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Verwagte afleweringsdatum moet na-verkope besteldatum wees
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Herbestel vlak
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Sjabloon van rekeninge
+DocType: Company,Chart Of Accounts Template,Sjabloon van rekeninge
DocType: Attendance,Attendance Date,Bywoningsdatum
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Opdateringsvoorraad moet vir die aankoopfaktuur {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Itemprys opgedateer vir {0} in Pryslys {1}
@@ -5503,8 +5492,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Deel Grootboek
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Verkoopsfaktuur {0} geskep
DocType: Employee,Confirmation Date,Bevestigingsdatum
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Skrap die werknemer <a href=""#Form/Employee/{0}"">{0}</a> \ om hierdie dokument te kanselleer"
DocType: Inpatient Occupancy,Check Out,Uitteken
DocType: C-Form,Total Invoiced Amount,Totale gefaktureerde bedrag
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Minimum hoeveelheid kan nie groter wees as Max
@@ -5711,7 +5698,6 @@
DocType: Cheque Print Template,Cheque Width,Kyk breedte
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Valideer Verkoopprys vir Item teen Aankoopprys of Waardasietarief
DocType: Fee Schedule,Fee Schedule,Fooibedule
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Kolom Etikette:
DocType: Bank Transaction,Settled,gevestig
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,ning
DocType: Quality Feedback,Parameters,Grense
@@ -6385,6 +6371,7 @@
DocType: Salary Component,Formula,formule
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serie #
DocType: Material Request Plan Item,Required Quantity,Vereiste hoeveelheid
+DocType: Cash Flow Mapping Template,Template Name,Sjabloon Naam
DocType: Lab Test Template,Lab Test Template,Lab Test Template
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Rekeningkundige tydperk oorvleuel met {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Verkooprekening
@@ -6445,7 +6432,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Check Date
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Rekening {0}: Ouerrekening {1} behoort nie aan maatskappy nie: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Suksesvol verwyder alle transaksies met betrekking tot hierdie maatskappy!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Soos op datum
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Soos op datum
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,Inskrywingsdatum
DocType: Healthcare Settings,Out Patient SMS Alerts,Uit Pasiënt SMS Alert
@@ -6511,7 +6498,6 @@
DocType: Course Content,Quiz,Vasvra
DocType: Subscription,Trial Period End Date,Proefperiode Einddatum
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Nie outhroized sedert {0} oorskry limiete
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Begin data van hier af invoer:
DocType: Serial No,Asset Status,Bate Status
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Oor Dimensionele Lading (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Restaurant Tafel
@@ -6737,7 +6723,6 @@
DocType: Contract,Party User,Party gebruiker
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Bates nie geskep vir <b>{0}</b> . U moet bates met die hand opstel.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',Stel asseblief die Maatskappyfilter leeg as Groep By 'Maatskappy' is.
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Kliënt> Kliëntegroep> Gebied
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Posdatum kan nie toekomstige datum wees nie
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Ry # {0}: reeksnommer {1} stem nie ooreen met {2} {3}
DocType: Loan Repayment,Interest Payable,Rente betaalbaar
@@ -6970,7 +6955,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Gemiddelde koers
DocType: Appointment,Appointment With,Afspraak met
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Totale Betalingsbedrag in Betaalskedule moet gelyk wees aan Grand / Rounded Total
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Merk bywoning as <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","Klant voorsien artikel" kan nie 'n waardasiekoers hê nie
DocType: Subscription Plan Detail,Plan,plan
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Bankstaatbalans soos per Algemene Grootboek
@@ -7661,7 +7645,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Maksimum voordeelbedrag van werknemer {0} oorskry {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Totale toegekende blare is meer as dae in die tydperk
DocType: Linked Soil Analysis,Linked Soil Analysis,Gekoppelde grondanalise
-DocType: Pricing Rule,Percentage,persentasie
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Item {0} moet 'n voorraaditem wees
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Verstek werk in voortgang Warehouse
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Bylaes vir {0} oorvleuelings, wil jy voortgaan nadat jy oorlaaide gleuwe geslaan het?"
diff --git a/erpnext/translations/am.csv b/erpnext/translations/am.csv
index 9c6d63d..9402bdd 100644
--- a/erpnext/translations/am.csv
+++ b/erpnext/translations/am.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,ገና በሂደት ላይ ያለ ስራ
DocType: Leave Control Panel,Branch (optional),ቅርንጫፍ (አማራጭ)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,ቀን ይምረጡ
-DocType: Item Price,Minimum Qty ,አነስተኛ ሂሳብ
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,አነስተኛ ሂሳብ
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},BOM ድግግሞሽ-{0} የ {1} ልጅ መሆን አይችልም
DocType: Finance Book,Finance Book,የገንዘብ መጽሐፍ
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-yYYYY.-
DocType: Appointment Booking Settings,Holiday List,የበዓል ዝርዝር
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,የወላጅ መለያ {0} የለም
apps/erpnext/erpnext/config/quality_management.py,Review and Action,ክለሳ እና ተግባር ፡፡
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},ይህ ሠራተኛ ቀድሞውኑ በተመሳሳይ የጊዜ ማህተም የተረጋገጠ መዝገብ አለው። {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,ሒሳብ ሠራተኛ
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,ትርፍ ማግኘት / ኪሳራ / ኪሳራ
DocType: Crop,Perennial,የብዙ ዓመት
DocType: Program,Is Published,ታትሟል ፡፡
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,የአቅርቦት ማስታወሻዎችን አሳይ።
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.",የክፍያ መጠየቂያ ከልክ በላይ ለመፍቀድ በመለያዎች ቅንብሮች ወይም በንጥል ውስጥ «ከመጠን በላይ የክፍያ አበል» ን ያዘምኑ።
DocType: Patient Appointment,Procedure,ሂደት
DocType: Accounts Settings,Use Custom Cash Flow Format,ብጁ የገንዘብ ፍሰት ቅርጸት ተጠቀም
@@ -978,7 +976,6 @@
DocType: Patient,Risk Factors,የጭንቀት ሁኔታዎች
DocType: Patient,Occupational Hazards and Environmental Factors,የሥራ ጉዳት እና የአካባቢ ብክለቶች
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,ክምችት ምዝገባዎች ቀድሞ ለስራ ትእዛዝ ተዘጋጅተዋል
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,የንጥል ኮድ> የንጥል ቡድን> የምርት ስም
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,ያለፉ ትዕዛዞችን ይመልከቱ።
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} ውይይቶች።
DocType: Vital Signs,Respiratory rate,የመተንፈሻ መጠን
@@ -1136,7 +1133,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,በማዘመን ሂደቱ ጊዜ ስህተት ተከስቷል
DocType: Restaurant Reservation,Restaurant Reservation,የምግብ ቤት ቦታ ማስያዣ
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,ዕቃዎችዎ
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,አቅራቢ> የአቅራቢ ዓይነት
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,ሐሳብ መጻፍ
DocType: Payment Entry Deduction,Payment Entry Deduction,የክፍያ Entry ተቀናሽ
DocType: Service Level Priority,Service Level Priority,የአገልግሎት ደረጃ ቅድሚያ።
@@ -1435,7 +1431,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,እባክዎ ግቤቶችን ለመመዝገብ እባክዎ ኩባንያ እና የድረ-ገጽ ቀንን ይምረጡ
DocType: Asset,Maintenance,ጥገና
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,ከታካሚዎች ግኝት ያግኙ
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},UOM የልወጣ ሁኔታ ({0} -> {1}) ለእንጥል አልተገኘም {{2}
DocType: Subscriber,Subscriber,ደንበኛ
DocType: Item Attribute Value,Item Attribute Value,ንጥል ዋጋ የአይነት
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,የምንዛሬ ልውውጥ ለግዢ ወይም ለሽያጭ ተፈጻሚ መሆን አለበት.
@@ -1933,7 +1928,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),ተመላሽ ይባላል (ዕዳ መግለጫ)
DocType: Workstation,Wages,ደመወዝ
DocType: Asset Maintenance,Maintenance Manager Name,የጥገና አስተዳዳሪ ስም
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,በድርጅቱ ላይ ግብይቶች ቀድሞውኑ ነበሩ!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,ጣቢያ መጠየቅ
DocType: Agriculture Task,Urgent,አስቸኳይ
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,መዝገቦችን በማምጣት ላይ ……
@@ -2795,7 +2789,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},ለ በተሳካ ሁኔታ የተመደበ ማምለኩን {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,ምንም ንጥሎች ለመሸከፍ
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,በአሁኑ ጊዜ .csv እና .xlsx ፋይሎች ብቻ ይደገፋሉ።
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,በሰብአዊ ሀብት> የሰው ሠራሽ ቅንብሮች ውስጥ የሰራተኛ መለያ ስም መስሪያ ስርዓት ያዋቅሩ
DocType: Shipping Rule Condition,From Value,እሴት ከ
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,ከማኑፋክቸሪንግ ብዛት የግዴታ ነው
DocType: Loan,Repayment Method,ብድር መክፈል ስልት
@@ -4039,7 +4032,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,ያስፈልጋል ላይ
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips",ከተረጋገጠ ፣ ደሞዝ እና አቦዝን በ Salary Slips ውስጥ የተጠጋጋ አጠቃላይ መስክ
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,በሽያጭ ትዕዛዞችን ማቅረቢያ ቀን ይህ ነባሪ ማካካሻ (ቀናት) ነው። ውድድሩ ማካካሻ ትዕዛዙ ከምደባ ከተሰጠበት ቀን ጀምሮ 7 ቀናት ነው።
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,እባክዎን ለተማሪ ተገኝነት በማዋቀር> የቁጥር ተከታታይ በኩል ያዘጋጁ
DocType: Rename Tool,File to Rename,ዳግም ሰይም ፋይል
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},ረድፍ ውስጥ ንጥል ለማግኘት BOM ይምረጡ {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,የደንበኝነት ምዝገባ ዝመናዎችን በማምጣት ላይ
@@ -4639,7 +4631,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,የፋይናንስ ወጪ ነው
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,ሠራተኛ {0} ክትትልን አስቀድሞ ምልክት ነው
DocType: Packing Slip,If more than one package of the same type (for print),ከሆነ ተመሳሳይ ዓይነት ከአንድ በላይ ጥቅል (የህትመት ለ)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,እባክዎ በትምህርቱ> የትምህርት ቅንብሮች ውስጥ አስተማሪ ስም ማጎሪያ ስርዓት ያዋቅሩ
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,እባክዎ በሆቴሎች ቅንጅቶች ውስጥ ነባሪ ደንበኛ ያዘጋጁ
,Salary Register,ደመወዝ ይመዝገቡ
DocType: Company,Default warehouse for Sales Return,ለሽያጭ ተመላሽ ነባሪ መጋዘን
@@ -4910,7 +4901,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,በመጠባበቅ ላይ እንቅስቃሴዎች
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,የቤተ ሙከራ ሙከራ ይፍጠሩ
DocType: Patient Appointment,Reminded,አስታውሷል
-DocType: Homepage Section,Cards,ካርዶች
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,የመለያዎች ሰንጠረዥ ይመልከቱ
DocType: Chapter Member,Chapter Member,የምዕራፍ አባል
DocType: Material Request Plan Item,Minimum Order Quantity,አነስተኛ የትዕዛዝ ብዛት
@@ -4928,7 +4918,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,የወደፊት ቀናት አይፈቀዱም
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,የተያዘው የመላኪያ ቀን ከሽያጭ ትእዛዝ ቀን በኋላ መሆን አለበት
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,አስይዝ ደረጃ
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,መለያዎች አብነት ነው ገበታ
+DocType: Company,Chart Of Accounts Template,መለያዎች አብነት ነው ገበታ
DocType: Attendance,Attendance Date,በስብሰባው ቀን
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},ክምችት አዘምን ለግዢ ሂሳብ {0} መንቃት አለበት
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},የእቃ ዋጋ {0} ውስጥ የዋጋ ዝርዝር ዘምኗል {1}
@@ -5492,8 +5482,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Ledger አጋራ
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,የሽያጭ ደረሰኝ {0} ተፈጥሯል
DocType: Employee,Confirmation Date,ማረጋገጫ ቀን
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","ይህንን ሰነድ ለመሰረዝ እባክዎ ሰራተኛውን <a href=""#Form/Employee/{0}"">{0}</a> \ ያጥፉ"
DocType: Inpatient Occupancy,Check Out,ጨርሰህ ውጣ
DocType: C-Form,Total Invoiced Amount,ጠቅላላ በደረሰኝ የተቀመጠው መጠን
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,ዝቅተኛ ብዛት ማክስ ብዛት በላይ ሊሆን አይችልም
@@ -5698,7 +5686,6 @@
DocType: Cheque Print Template,Cheque Width,ቼክ ስፋት
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,የግዢ Rate ወይም ግምቱ ተመን ላይ ንጥል ለ ሽያጭ ዋጋ Validate
DocType: Fee Schedule,Fee Schedule,ክፍያ ፕሮግራም
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,የአምድ መለያዎች
DocType: Bank Transaction,Settled,የተስተካከለ
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cess
DocType: Quality Feedback,Parameters,መለኪያዎች።
@@ -6372,6 +6359,7 @@
DocType: Salary Component,Formula,ፎርሙላ
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,ተከታታይ #
DocType: Material Request Plan Item,Required Quantity,የሚፈለግ ብዛት።
+DocType: Cash Flow Mapping Template,Template Name,የአብነት ስም
DocType: Lab Test Template,Lab Test Template,የሙከራ መለኪያ አብነት
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},የሂሳብ ጊዜ ከ {0} ጋር ይደራረባል
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,የሽያጭ መለያ
@@ -6432,7 +6420,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,ቼክ ቀን
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},መለያ {0}: የወላጅ መለያ {1} ኩባንያ የእርሱ ወገን አይደለም: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,በተሳካ ሁኔታ ከዚህ ድርጅት ጋር የተያያዙ ሁሉም ግብይቶች ተሰርዟል!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,ቀን ላይ እንደ
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,ቀን ላይ እንደ
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,የምዝገባ ቀን
DocType: Healthcare Settings,Out Patient SMS Alerts,ታካሚ የኤስኤምኤስ ማስጠንቀቂያዎች
@@ -6498,7 +6486,6 @@
DocType: Course Content,Quiz,ጥያቄ
DocType: Subscription,Trial Period End Date,የሙከራ ክፍለ ጊዜ መጨረሻ ቀን
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,{0} ገደብ አልፏል ጀምሮ authroized አይደለም
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,ከዚህ ውስጥ ውሂብ ማስገባት ይጀምሩ
DocType: Serial No,Asset Status,የንብረት ሁኔታ
DocType: Sales Invoice,Over Dimensional Cargo (ODC),ከዲዛይነር ጭነት (ኦ ዲ ኤ ሲ)
DocType: Restaurant Order Entry,Restaurant Table,የምግብ ቤት ሰንጠረዥ
@@ -6724,7 +6711,6 @@
DocType: Contract,Party User,የጭፈራ ተጠቃሚ
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,ለ <b>{0}</b> ንብረቶች አልተፈጠሩም። ንብረት እራስዎ መፍጠር ይኖርብዎታል።
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',የቡድን በ «ኩባንያ 'ከሆነ ኩባንያ ባዶ ማጣሪያ ያዘጋጁ እባክዎ
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,ደንበኛ> የደንበኛ ቡድን> ግዛት
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,መለጠፍ ቀን ወደፊት ቀን ሊሆን አይችልም
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},የረድፍ # {0}: መለያ አይ {1} ጋር አይዛመድም {2} {3}
DocType: Loan Repayment,Interest Payable,የወለድ ክፍያ
@@ -6959,7 +6945,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,አማካኝ ደረጃ
DocType: Appointment,Appointment With,ቀጠሮ በ
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,ጠቅላላ የክፍያ መጠን በክፍያ ሠንጠረዥ ውስጥ ከትልቅ / ጠቅላላ ድምር ጋር መሆን አለበት
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,ተገኝነትን እንደ ምልክት ያድርጉ <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate",“በደንበኞች የቀረበ ንጥል” የዋጋ ምጣኔ ሊኖረው አይችልም ፡፡
DocType: Subscription Plan Detail,Plan,ዕቅድ
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,አጠቃላይ የሒሳብ መዝገብ መሠረት የባንክ መግለጫ ቀሪ
@@ -7648,7 +7633,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},ከፍተኛ የደመወዝ መጠን {0} ከ {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,ጠቅላላ የተመደበ ቅጠሎች ጊዜ ውስጥ ቀኖች በላይ ናቸው
DocType: Linked Soil Analysis,Linked Soil Analysis,የተገናኙ የአፈር ትንታኔ
-DocType: Pricing Rule,Percentage,በመቶ
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,ንጥል {0} ከአክሲዮን ንጥል መሆን አለበት
DocType: Manufacturing Settings,Default Work In Progress Warehouse,የሂደት መጋዘን ውስጥ ነባሪ ሥራ
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","ለ {0} የጊዜ ሰሌዳዎች መደቦች ተደራርበው, በተደጋጋሚ የተደባዙ ስሎዶች ከተዘለሉ በኋላ መቀጠል ይፈልጋሉ?"
diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv
index f8f8466..b305fd9 100644
--- a/erpnext/translations/ar.csv
+++ b/erpnext/translations/ar.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,التقدم في العمل
DocType: Leave Control Panel,Branch (optional),فرع (اختياري)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,يرجى تحديد التاريخ
-DocType: Item Price,Minimum Qty ,الكمية الدنيا
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,الكمية الدنيا
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},تكرار BOM: {0} لا يمكن أن يكون تابعًا لـ {1}
DocType: Finance Book,Finance Book,كتاب المالية
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,قائمة العطلات
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,الحساب الأصل {0} غير موجود
apps/erpnext/erpnext/config/quality_management.py,Review and Action,مراجعة والعمل
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},هذا الموظف لديه بالفعل سجل بنفس الطابع الزمني. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,محاسب
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,الربح / الخسارة
DocType: Crop,Perennial,الدائمة
DocType: Program,Is Published,يتم نشر
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,إظهار ملاحظات التسليم
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.",للسماح بزيادة الفواتير ، حدّث "Over Billing Allowance" في إعدادات الحسابات أو العنصر.
DocType: Patient Appointment,Procedure,إجراء
DocType: Accounts Settings,Use Custom Cash Flow Format,استخدم تنسيق التدفق النقدي المخصص
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,عوامل الخطر
DocType: Patient,Occupational Hazards and Environmental Factors,المخاطر المهنية والعوامل البيئية
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,تم إنشاء إدخالات المخزون بالفعل لأمر العمل
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,كود الصنف> مجموعة الصنف> العلامة التجارية
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,انظر الطلبات السابقة
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} محادثات
DocType: Vital Signs,Respiratory rate,معدل التنفس
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,حدث خطأ أثناء عملية التحديث
DocType: Restaurant Reservation,Restaurant Reservation,حجز المطعم
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,البنود الخاصة بك
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,مورد> نوع المورد
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,تجهيز العروض
DocType: Payment Entry Deduction,Payment Entry Deduction,دفع الاشتراك خصم
DocType: Service Level Priority,Service Level Priority,أولوية مستوى الخدمة
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,يرجى تحديد الشركة وتاريخ النشر للحصول على إدخالات
DocType: Asset,Maintenance,صيانة
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,الحصول على من لقاء المريض
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},معامل تحويل UOM ({0} -> {1}) غير موجود للعنصر: {2}
DocType: Subscriber,Subscriber,مكتتب
DocType: Item Attribute Value,Item Attribute Value,قيمة مواصفة الصنف
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,يجب أن يكون صرف العملات ساريًا للشراء أو البيع.
@@ -1955,7 +1950,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),هو العودة (ملاحظة الخصم)
DocType: Workstation,Wages,أجور
DocType: Asset Maintenance,Maintenance Manager Name,اسم مدير الصيانة
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,المعاملات ضد الشركة موجودة بالفعل!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,طلب موقع
DocType: Agriculture Task,Urgent,عاجل
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,جلب السجلات ......
@@ -2653,7 +2647,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,قد يكون مصطلح الدفع في الصف {0} مكررا.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),الزراعة (تجريبي)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,قائمة بمحتويات الشحنة
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,يرجى تعيين سلسلة التسمية لـ {0} عبر الإعداد> الإعدادات> سلسلة التسمية
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,ايجار مكتب
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,إعدادات العبارة SMS
DocType: Disease,Common Name,اسم شائع
@@ -2819,7 +2812,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},الاجازات خصصت بنجاح ل {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,لا توجد عناصر لحزمة
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,فقط ملفات .csv و .xlsx مدعومة حاليًا
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,يرجى إعداد نظام تسمية الموظف في الموارد البشرية> إعدادات الموارد البشرية
DocType: Shipping Rule Condition,From Value,من القيمة
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,تصنيع الكمية إلزامي
DocType: Loan,Repayment Method,طريقة السداد
@@ -4067,7 +4059,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,مطلوب في
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips",إذا تم تحديده ، يقوم بإخفاء وتعطيل حقل Rounded Total في قسائم الرواتب
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,هذا هو الإزاحة الافتراضية (أيام) لتاريخ التسليم في أوامر المبيعات. الإزاحة الاحتياطية هي 7 أيام من تاريخ وضع الطلب.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,يرجى إعداد سلسلة الترقيم للحضور عبر الإعداد> سلسلة الترقيم
DocType: Rename Tool,File to Rename,إعادة تسمية الملف
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},الرجاء تحديد قائمة المواد للبند في الصف {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,جلب تحديثات الاشتراك
@@ -4702,7 +4693,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,تكلفة التمويل
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,تم وضع علامة حضور للموظف {0} بالفعل
DocType: Packing Slip,If more than one package of the same type (for print),إذا كان أكثر من حزمة واحدة من نفس النوع (للطباعة)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,يرجى إعداد نظام تسمية المدرب في التعليم> إعدادات التعليم
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,يرجى تعيين العملاء الافتراضي في إعدادات المطعم
,Salary Register,راتب التسجيل
DocType: Company,Default warehouse for Sales Return,المستودع الافتراضي لعائد المبيعات
@@ -4973,7 +4963,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,الأنشطة المعلقة
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,إنشاء اختبار معملي
DocType: Patient Appointment,Reminded,ذكر
-DocType: Homepage Section,Cards,بطاقات
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,عرض الرسم البياني للحسابات
DocType: Chapter Member,Chapter Member,عضو الفصل
DocType: Material Request Plan Item,Minimum Order Quantity,أقل كمية ممكن طلبها
@@ -4991,7 +4980,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,التواريخ المستقبلية غير مسموح بها
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,يجب أن يكون تاريخ التسليم المتوقع بعد تاريخ أمر المبيعات
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,مستوى اعادة الطلب
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,نمودج دليل الحسابات
+DocType: Company,Chart Of Accounts Template,نمودج دليل الحسابات
DocType: Attendance,Attendance Date,تاريخ الحضور
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},يجب تمكين مخزون التحديث لفاتورة الشراء {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},سعر الصنف محدث ل{0} في قائمة الأسعار {1}
@@ -5556,8 +5545,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,مشاركة دفتر الأستاذ
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,تم إنشاء فاتورة المبيعات {0}
DocType: Employee,Confirmation Date,تاريخ التأكيد
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","يرجى حذف الموظف <a href=""#Form/Employee/{0}"">{0}</a> \ لإلغاء هذا المستند"
DocType: Inpatient Occupancy,Check Out,الدفع
DocType: C-Form,Total Invoiced Amount,إجمالي مبلغ الفاتورة
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,الكمية الادنى لايمكن ان تكون اكبر من الكمية الاعلى
@@ -5764,7 +5751,6 @@
DocType: Cheque Print Template,Cheque Width,عرض الشيك
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,تحقق من سعر البيع للالبند ضد سعر الشراء أو معدل التقييم
DocType: Fee Schedule,Fee Schedule,جدول التكاليف
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,تسميات الأعمدة:
DocType: Bank Transaction,Settled,تسوية
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,سيس
DocType: Quality Feedback,Parameters,المعلمات
@@ -6438,6 +6424,7 @@
DocType: Salary Component,Formula,صيغة
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,المسلسل #
DocType: Material Request Plan Item,Required Quantity,الكمية المطلوبة
+DocType: Cash Flow Mapping Template,Template Name,اسم القالب
DocType: Lab Test Template,Lab Test Template,قالب اختبار المختبر
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},فترة المحاسبة تتداخل مع {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,حساب مبيعات
@@ -6498,7 +6485,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,تاريخ الشيك
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},الحساب {0}: الحساب الرئيسي {1} لا ينتمي إلى الشركة: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,تم حذف جميع المعاملات المتعلقة بهذه الشركة!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,كما هو بتاريخ
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,كما هو بتاريخ
DocType: Additional Salary,HR,الموارد البشرية
DocType: Course Enrollment,Enrollment Date,تاريخ التسجيل
DocType: Healthcare Settings,Out Patient SMS Alerts,خارج التنبيهات سمز المريض
@@ -6564,7 +6551,6 @@
DocType: Course Content,Quiz,لغز
DocType: Subscription,Trial Period End Date,تاريخ انتهاء الفترة التجريبية
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,غير مخول عندما {0} تتجاوز الحدود
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,ابدأ في إدخال البيانات من هنا:
DocType: Serial No,Asset Status,حالة الأصول
DocType: Sales Invoice,Over Dimensional Cargo (ODC),عبر البعد الشحن (ODC)
DocType: Restaurant Order Entry,Restaurant Table,طاولة المطعم
@@ -6791,7 +6777,6 @@
DocType: Contract,Party User,مستخدم الحزب
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,الأصول التي لم يتم تكوينها لـ <b>{0}</b> . سيكون عليك إنشاء أصل يدويًا.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',الرجاء تعيين فلتر الشركة فارغا إذا كانت المجموعة بي هي 'كومباني'
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,العملاء> مجموعة العملاء> الإقليم
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,تاريخ النشر لا يمكن أن يكون تاريخ مستقبلي
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},الصف # {0}: الرقم التسلسلي {1} لا يتطابق مع {2} {3}
DocType: Loan Repayment,Interest Payable,الفوائد المستحقة الدفع
@@ -7026,7 +7011,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,المعدل المتوسط
DocType: Appointment,Appointment With,موعد مع
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,يجب أن يكون إجمالي مبلغ الدفع في جدول الدفع مساويا للمجموع الكبير / المستدير
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,علامة الحضور كما <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","""الأصناف المقدمة من العملاء"" لا يمكن ان تحتوي على تكلفة"
DocType: Subscription Plan Detail,Plan,خطة
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,كشف رصيد الحساب المصرفي وفقا لدفتر الأستاذ العام
@@ -7721,7 +7705,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},أقصى مبلغ لمبلغ الموظف {0} يتجاوز {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,مجموع الأوراق المخصصة هي أكثر من أيام في الفترة
DocType: Linked Soil Analysis,Linked Soil Analysis,تحليل التربة المرتبط
-DocType: Pricing Rule,Percentage,النسبة المئوية
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,البند {0} يجب أن يكون البند الأسهم
DocType: Manufacturing Settings,Default Work In Progress Warehouse,افتراضي العمل في مستودع التقدم
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?",جداول التداخلات {0} ، هل تريد المتابعة بعد تخطي الفتحات المتراكبة؟
diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv
index 396c296..5cdac6f 100644
--- a/erpnext/translations/bg.csv
+++ b/erpnext/translations/bg.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Незавършено производство
DocType: Leave Control Panel,Branch (optional),Клон (незадължително)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,"Моля, изберете дата"
-DocType: Item Price,Minimum Qty ,Минимален брой
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Минимален брой
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},BOM рекурсия: {0} не може да бъде дете на {1}
DocType: Finance Book,Finance Book,Финансова книга
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Списък на празиниците
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Родителският акаунт {0} не съществува
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Преглед и действие
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Този служител вече има дневник със същата времева марка. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Счетоводител
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Печалба / загуба
DocType: Crop,Perennial,целогодишен
DocType: Program,Is Published,Издава се
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Показване на бележки за доставка
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","За да разрешите над таксуване, актуализирайте „Над надбавка за фактуриране“ в Настройки на акаунти или Елемент."
DocType: Patient Appointment,Procedure,процедура
DocType: Accounts Settings,Use Custom Cash Flow Format,Използвайте персонализиран формат на паричен поток
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Рискови фактори
DocType: Patient,Occupational Hazards and Environmental Factors,Професионални опасности и фактори на околната среда
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,Вече се създават записи за поръчка за работа
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Код на артикула> Група артикули> Марка
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Вижте минали поръчки
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} разговори
DocType: Vital Signs,Respiratory rate,Респираторна скорост
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,Възникна грешка по време на процеса на актуализиране
DocType: Restaurant Reservation,Restaurant Reservation,Ресторант Резервация
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Вашите вещи
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Доставчик> Тип доставчик
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Предложение за писане
DocType: Payment Entry Deduction,Payment Entry Deduction,Плащането - отстъпка/намаление
DocType: Service Level Priority,Service Level Priority,Приоритет на нивото на услугата
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,"Моля, изберете Фирма и дата на публикуване, за да получавате записи"
DocType: Asset,Maintenance,Поддръжка
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Излез от срещата с пациента
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},Коефициент на конверсия на UOM ({0} -> {1}) не е намерен за елемент: {2}
DocType: Subscriber,Subscriber,абонат
DocType: Item Attribute Value,Item Attribute Value,Позиция атрибут - Стойност
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Валутната обмяна трябва да бъде приложима при закупуване или продажба.
@@ -1936,7 +1931,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),Връща се (дебитна бележка)
DocType: Workstation,Wages,Заплати
DocType: Asset Maintenance,Maintenance Manager Name,Име на мениджъра на поддръжката
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Сделките срещу компанията вече съществуват!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Заявка на сайт
DocType: Agriculture Task,Urgent,Спешно
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Извличане на записи ......
@@ -2633,7 +2627,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Срокът за плащане на ред {0} е вероятно дубликат.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Селското стопанство (бета)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Приемо-предавателен протокол
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,"Моля, задайте Именуване на серия за {0} чрез Настройка> Настройки> Наименуване на серия"
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,Офис под наем
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Настройки Setup SMS Gateway
DocType: Disease,Common Name,Често срещано име
@@ -2799,7 +2792,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Листата Разпределен успешно в продължение на {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Няма елементи за опаковане
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Понастоящем се поддържат само .csv и .xlsx файлове
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,"Моля, настройте системата за именуване на служители в Човешки ресурси> Настройки за човешки ресурси"
DocType: Shipping Rule Condition,From Value,От стойност
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Произвеждано количество е задължително
DocType: Loan,Repayment Method,Възстановяване Метод
@@ -4046,7 +4038,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Необходим на
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Ако е поставено отметка, скрива и деактивира поле Окръглена обща стойност в фишовете за заплати"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Това е компенсиране по подразбиране (дни) за датата на доставка в поръчки за продажби. Резервното компенсиране е 7 дни от датата на поставяне на поръчката.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,"Моля, настройте номерацията на сериите за присъствие чрез настройка> серия от номерация"
DocType: Rename Tool,File to Rename,Файл за Преименуване
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Моля изберете BOM за позиция в Row {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Извличане на актуализации на абонаментите
@@ -4649,7 +4640,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Финансовата цена е
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Присъствие на служител {0} вече е маркирана
DocType: Packing Slip,If more than one package of the same type (for print),Ако повече от един пакет от същия тип (за печат)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,"Моля, настройте системата за именуване на инструктори в Образование> Настройки за образование"
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,"Моля, задайте клиент по подразбиране в настройките на ресторанта"
,Salary Register,Заплата Регистрирайте се
DocType: Company,Default warehouse for Sales Return,По подразбиране склад за връщане на продажби
@@ -4920,7 +4910,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Предстоящите дейности
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Създайте лабораторен тест
DocType: Patient Appointment,Reminded,Напомнено
-DocType: Homepage Section,Cards,карти
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Преглед на плана на сметките
DocType: Chapter Member,Chapter Member,Член на главата
DocType: Material Request Plan Item,Minimum Order Quantity,Минимално Количество за Поръчка
@@ -4938,7 +4927,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Бъдещите дати не са разрешени
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Очакваната дата на доставка трябва да бъде след датата на поръчката за продажба
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Пренареждане Level
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Сметкоплан - Шаблон
+DocType: Company,Chart Of Accounts Template,Сметкоплан - Шаблон
DocType: Attendance,Attendance Date,Присъствие Дата
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Актуализирането на запас трябва да бъде разрешено за фактурата за покупка {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Елемент Цена актуализиран за {0} в Ценовата листа {1}
@@ -5503,8 +5492,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Акционерна книга
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Създадена е фактура за продажба {0}
DocType: Employee,Confirmation Date,Потвърждение Дата
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Моля, изтрийте Служителя <a href=""#Form/Employee/{0}"">{0}</a> \, за да отмените този документ"
DocType: Inpatient Occupancy,Check Out,Разгледайте
DocType: C-Form,Total Invoiced Amount,Общо Сума по фактура
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Минималното количество не може да бъде по-голяма от максималното количество
@@ -5711,7 +5698,6 @@
DocType: Cheque Print Template,Cheque Width,Чек Ширина
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Валидиране на продажна цена за позиция срещу процент за закупуване или цена по оценка
DocType: Fee Schedule,Fee Schedule,График за такса
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Етикети на колоните:
DocType: Bank Transaction,Settled,установен
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,данък
DocType: Quality Feedback,Parameters,Параметри
@@ -6385,6 +6371,7 @@
DocType: Salary Component,Formula,формула
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serial #
DocType: Material Request Plan Item,Required Quantity,Необходимо количество
+DocType: Cash Flow Mapping Template,Template Name,Име на шаблона
DocType: Lab Test Template,Lab Test Template,Лабораторен тестов шаблон
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Счетоводният период се припокрива с {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Профил за продажби
@@ -6445,7 +6432,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Чек Дата
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Сметка {0}: Родителска сметка {1} не принадлежи на фирмата: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,"Успешно изтрити всички транзакции, свързани с тази компания!"
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Както по Дата
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Както по Дата
DocType: Additional Salary,HR,ЧР
DocType: Course Enrollment,Enrollment Date,Записван - Дата
DocType: Healthcare Settings,Out Patient SMS Alerts,Извън SMS съобщения за пациента
@@ -6511,7 +6498,6 @@
DocType: Course Content,Quiz,викторина
DocType: Subscription,Trial Period End Date,Крайна дата на пробния период
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Не authroized тъй {0} надхвърля границите
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Започнете да въвеждате данни от тук:
DocType: Serial No,Asset Status,Състояние на активите
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Различни товари (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Ресторант Маса
@@ -6737,7 +6723,6 @@
DocType: Contract,Party User,Потребител на партия
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Активите не са създадени за <b>{0}</b> . Ще трябва да създадете актив ръчно.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',"Моля, поставете фирмения филтър празен, ако Group By е "Company""
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Клиент> Клиентска група> Територия
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Публикуване Дата не може да бъде бъдеща дата
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Row # {0}: Пореден № {1} не съвпада с {2} {3}
DocType: Loan Repayment,Interest Payable,Дължими лихви
@@ -6972,7 +6957,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Средна цена
DocType: Appointment,Appointment With,Назначение С
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Общата сума за плащане в График на плащанията трябва да е равна на Голямо / Закръглено Общо
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Отбележете присъствието като <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","„Предмет, предоставен от клиента“ не може да има процент на оценка"
DocType: Subscription Plan Detail,Plan,план
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Банково извлечение по Главна книга
@@ -7663,7 +7647,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Максималната стойност на доходите на служител {0} надвишава {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Общо отпуснати листа са повече от дните през периода
DocType: Linked Soil Analysis,Linked Soil Analysis,Свързан анализ на почвите
-DocType: Pricing Rule,Percentage,Процент
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Позиция {0} трябва да бъде позиция със следене на наличности
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Склад за незав.производство по подразбиране
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Графики за припокриване на {0}, искате ли да продължите, след като прескочите припокритите слотове?"
diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv
index 24f3fbe..f586e66 100644
--- a/erpnext/translations/bn.csv
+++ b/erpnext/translations/bn.csv
@@ -167,11 +167,10 @@
DocType: Work Order Operation,Work In Progress,কাজ চলছে
DocType: Leave Control Panel,Branch (optional),শাখা (alচ্ছিক)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,দয়া করে তারিখ নির্বাচন
-DocType: Item Price,Minimum Qty ,ন্যূনতম Qty
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,ন্যূনতম Qty
DocType: Finance Book,Finance Book,ফাইন্যান্স বুক
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,ছুটির তালিকা
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,প্যারেন্ট অ্যাকাউন্ট {0} বিদ্যমান নেই
apps/erpnext/erpnext/config/quality_management.py,Review and Action,পর্যালোচনা এবং কর্ম
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},এই কর্মচারীর ইতিমধ্যে একই টাইমস্ট্যাম্পের একটি লগ রয়েছে {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,হিসাবরক্ষক
@@ -243,7 +242,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,লাভ ক্ষতি
DocType: Crop,Perennial,বহুবর্ষজীবী
DocType: Program,Is Published,প্রকাশিত হয়
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,বিতরণ নোটগুলি প্রদর্শন করুন
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.",অতিরিক্ত বিলিংয়ের অনুমতি দেওয়ার জন্য অ্যাকাউন্টস সেটিংস বা আইটেমটিতে "ওভার বিলিং ভাতা" আপডেট করুন।
DocType: Patient Appointment,Procedure,কার্যপ্রণালী
DocType: Accounts Settings,Use Custom Cash Flow Format,কাস্টম ক্যাশ ফ্লো বিন্যাস ব্যবহার করুন
@@ -963,7 +961,6 @@
DocType: Patient,Risk Factors,ঝুঁকির কারণ
DocType: Patient,Occupational Hazards and Environmental Factors,পেশাগত ঝুঁকি এবং পরিবেশগত ফ্যাক্টর
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,স্টক তালিকাগুলি ইতিমধ্যে ওয়ার্ক অর্ডারের জন্য তৈরি করা হয়েছে
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,আইটেম কোড> আইটেম গ্রুপ> ব্র্যান্ড
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,অতীত আদেশ দেখুন
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} কথোপকথন
DocType: Vital Signs,Respiratory rate,শ্বাসপ্রশ্বাসের হার
@@ -1116,7 +1113,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,আপডেট প্রক্রিয়ার সময় একটি ত্রুটি ঘটেছে
DocType: Restaurant Reservation,Restaurant Reservation,রেস্টুরেন্ট রিজার্ভেশন
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,আপনার আইটেম
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,সরবরাহকারী> সরবরাহকারী প্রকার
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,প্রস্তাবনা লিখন
DocType: Payment Entry Deduction,Payment Entry Deduction,পেমেন্ট এণ্ট্রি সিদ্ধান্তগ্রহণ
DocType: Service Level Priority,Service Level Priority,পরিষেবা স্তরের অগ্রাধিকার
@@ -1411,7 +1407,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,অনুগ্রহ করে এন্ট্রি পাওয়ার জন্য কোম্পানি এবং পোস্টিং তারিখ নির্বাচন করুন
DocType: Asset,Maintenance,রক্ষণাবেক্ষণ
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,রোগীর এনকাউন্টার থেকে পান
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},ইউওএম রূপান্তর ফ্যাক্টর ({0} -> {1}) আইটেমটির জন্য পাওয়া যায় নি: {2}
DocType: Subscriber,Subscriber,গ্রাহক
DocType: Item Attribute Value,Item Attribute Value,আইটেম মান গুন
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,মুদ্রা বিনিময় কেনা বা বিক্রয়ের জন্য প্রযোজ্য হবে।
@@ -1906,7 +1901,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),রিটার্ন (ডেবিট নোট)
DocType: Workstation,Wages,মজুরি
DocType: Asset Maintenance,Maintenance Manager Name,রক্ষণাবেক্ষণ ম্যানেজার নাম
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,কোম্পানির বিরুদ্ধে লেনদেন ইতিমধ্যে বিদ্যমান!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,অনুরোধ সাইট
DocType: Agriculture Task,Urgent,জরুরী
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,রেকর্ড আনছে ......
@@ -2750,7 +2744,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},সাফল্যের বরাদ্দ পাতার {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,কোনও আইটেম প্যাক
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,বর্তমানে কেবলমাত্র .csv এবং .xlsx ফাইলগুলি সমর্থিত
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,মানব সম্পদ> এইচআর সেটিংসে কর্মচারী নামকরণ সিস্টেম সেটআপ করুন
DocType: Shipping Rule Condition,From Value,মূল্য থেকে
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,উৎপাদন পরিমাণ বাধ্যতামূলক
DocType: Loan,Repayment Method,পরিশোধ পদ্ধতি
@@ -3968,7 +3961,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,প্রয়োজনীয় উপর
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","যদি চেক করা থাকে, বেতন স্লিপগুলিতে গোলাকার মোট ক্ষেত্রটি লুকায় ও অক্ষম করে"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,বিক্রয় অর্ডারে বিতরণ তারিখের জন্য এটি ডিফল্ট অফসেট (দিন)। অর্ডার প্লেসমেন্টের তারিখ থেকে ফ্যালব্যাক অফসেটটি 7 দিন।
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,দয়া করে সেটআপ> নম্বরিং সিরিজের মাধ্যমে উপস্থিতির জন্য সংখ্যায়ন সিরিজটি সেট করুন
DocType: Rename Tool,File to Rename,পুনঃনামকরণ করা ফাইল
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},সারি মধ্যে আইটেম জন্য BOM দয়া করে নির্বাচন করুন {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,সদস্যতা আপডেটগুলি আনুন
@@ -4564,7 +4556,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,অর্থ খরচ হয়
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,কর্মচারী {0} উপস্থিতির ইতিমধ্যে চিহ্নিত করা হয়
DocType: Packing Slip,If more than one package of the same type (for print),তাহলে একই ধরনের একাধিক বাক্স (প্রিন্ট জন্য)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,অনুগ্রহ করে শিক্ষা> শিক্ষা সেটিংসে প্রশিক্ষক নামকরণ সিস্টেম সেটআপ করুন
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,রেস্টুরেন্ট সেটিংস এ ডিফল্ট গ্রাহক সেট করুন
,Salary Register,বেতন নিবন্ধন
DocType: Company,Default warehouse for Sales Return,বিক্রয় ফেরতের জন্য ডিফল্ট গুদাম
@@ -4829,7 +4820,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,মুলতুবি কার্যক্রম
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,ল্যাব টেস্ট তৈরি করুন
DocType: Patient Appointment,Reminded,মনে করানো
-DocType: Homepage Section,Cards,তাস
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,অ্যাকাউন্টের চার্ট দেখুন
DocType: Chapter Member,Chapter Member,অধ্যায় সদস্য
DocType: Material Request Plan Item,Minimum Order Quantity,ন্যূনতম চাহিদার পরিমাণ
@@ -4846,7 +4836,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,ভবিষ্যতের তারিখগুলি অনুমোদিত নয়
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,প্রত্যাশিত ডেলিভারি তারিখ বিক্রয় আদেশ তারিখের পরে হওয়া উচিত
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,পুনর্বিন্যাস স্তর
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,একাউন্টস টেমপ্লেটের চার্ট
+DocType: Company,Chart Of Accounts Template,একাউন্টস টেমপ্লেটের চার্ট
DocType: Attendance,Attendance Date,এ্যাটেনডেন্স তারিখ
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},আপডেট স্টক ক্রয় বিনিময় জন্য সক্ষম করা আবশ্যক {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},আইটেম দাম {0} মূল্য তালিকা জন্য আপডেট {1}
@@ -5405,8 +5395,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,লেজার শেয়ার করুন
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,সেলস ইনভয়েস {0} তৈরি করেছে
DocType: Employee,Confirmation Date,নিশ্চিতকরণ তারিখ
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","এই নথিটি বাতিল করতে দয়া করে কর্মচারী <a href=""#Form/Employee/{0}"">{0}</a> delete মুছুন"
DocType: Inpatient Occupancy,Check Out,চেক আউট
DocType: C-Form,Total Invoiced Amount,মোট invoiced পরিমাণ
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,ন্যূনতম Qty সর্বোচ্চ Qty তার চেয়ে অনেক বেশী হতে পারে না
@@ -5608,7 +5596,6 @@
DocType: Cheque Print Template,Cheque Width,চেক প্রস্থ
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,যাচাই করে নিন বিক্রয় মূল্য ক্রয় হার বা মূল্যনির্ধারণ হার বিরুদ্ধে আইটেম জন্য
DocType: Fee Schedule,Fee Schedule,ফি সময়সূচী
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,কলাম লেবেল:
DocType: Bank Transaction,Settled,স্থায়ী
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,উপকর
DocType: Quality Feedback,Parameters,পরামিতি
@@ -6273,6 +6260,7 @@
DocType: Salary Component,Formula,সূত্র
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,সিরিয়াল #
DocType: Material Request Plan Item,Required Quantity,প্রয়োজনীয় পরিমাণ
+DocType: Cash Flow Mapping Template,Template Name,টেম্পলেট নাম
DocType: Lab Test Template,Lab Test Template,ল্যাব টেস্ট টেমপ্লেট
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,বিক্রয় অ্যাকাউন্ট
DocType: Purchase Invoice Item,Total Weight,সম্পূর্ণ ওজন
@@ -6332,7 +6320,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,চেক তারিখ
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},অ্যাকাউন্ট {0}: মূল অ্যাকাউন্ট {1} কোম্পানি অন্তর্গত নয়: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,সফলভাবে এই কোম্পানীর সাথে সম্পর্কিত সব লেনদেন মোছা!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,আজকের তারিখে
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,আজকের তারিখে
DocType: Additional Salary,HR,এইচআর
DocType: Course Enrollment,Enrollment Date,তালিকাভুক্তি তারিখ
DocType: Healthcare Settings,Out Patient SMS Alerts,আউট রোগীর এসএমএস সতর্কতা
@@ -6397,7 +6385,6 @@
DocType: Course Content,Quiz,ব্যঙ্গ
DocType: Subscription,Trial Period End Date,ট্রায়াল সময়কাল শেষ তারিখ
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,"{0} সীমা অতিক্রম করে, যেহেতু authroized না"
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,এখান থেকে ডেটা প্রবেশ করা শুরু করুন:
DocType: Serial No,Asset Status,সম্পদ স্থিতি
DocType: Sales Invoice,Over Dimensional Cargo (ODC),ডাইমেনশনাল কার্গো ওভার (ওডিসি)
DocType: Restaurant Order Entry,Restaurant Table,রেস্টুরেন্ট টেবিল
@@ -6616,7 +6603,6 @@
apps/erpnext/erpnext/public/js/hub/components/ReviewArea.vue,Submit Review,পর্যালোচনা জমা দিন
DocType: Contract,Party User,পার্টি ব্যবহারকারী
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',দয়া করে কোম্পানির ফাঁকা ফিল্টার সেট করুন যদি একদল 'কোম্পানি' হল
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,গ্রাহক> গ্রাহক গোষ্ঠী> অঞ্চল
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,পোস্টিং তারিখ ভবিষ্যতে তারিখে হতে পারে না
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},সারি # {0}: সিরিয়াল কোন {1} সঙ্গে মেলে না {2} {3}
DocType: Loan Repayment,Interest Payable,প্রদেয় সুদ
@@ -6850,7 +6836,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,গড় হার
DocType: Appointment,Appointment With,সাথে নিয়োগ
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,পেমেন্ট শংসাপত্রের মোট পরিশোধের পরিমাণ গ্র্যান্ড / গোলাকার মোট সমান হওয়া আবশ্যক
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,হিসাবে উপস্থিতি চিহ্নিত করুন <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","গ্রাহক সরবরাহিত আইটেম" এর মূল্য মূল্য হতে পারে না
DocType: Subscription Plan Detail,Plan,পরিকল্পনা
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,জেনারেল লেজার অনুযায়ী ব্যাংক ব্যালেন্সের
@@ -7526,7 +7511,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},কর্মীর সর্বাধিক সুবিধা পরিমাণ {0} অতিক্রম করে {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,সর্বমোট পাতার সময়ের মধ্যে দিনের বেশী হয়
DocType: Linked Soil Analysis,Linked Soil Analysis,সংযুক্ত মৃত্তিকা বিশ্লেষণ
-DocType: Pricing Rule,Percentage,শতকরা হার
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,আইটেম {0} একটি স্টক আইটেম হতে হবে
DocType: Manufacturing Settings,Default Work In Progress Warehouse,প্রগতি গুদাম ডিফল্ট কাজ
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","{0} ওভারল্যাপের জন্য সময়সূচী, আপনি কি ওভারল্যাপেড স্লটগুলি বাদ দিয়ে এগিয়ে যেতে চান?"
diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv
index 46afee3..5e3f53d 100644
--- a/erpnext/translations/bs.csv
+++ b/erpnext/translations/bs.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Radovi u toku
DocType: Leave Control Panel,Branch (optional),Podružnica (neobavezno)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,Molimo izaberite datum
-DocType: Item Price,Minimum Qty ,Minimalni količina
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Minimalni količina
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},BOM rekurzija: {0} ne može biti dijete od {1}
DocType: Finance Book,Finance Book,Finansijska knjiga
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-YYYY.-
DocType: Appointment Booking Settings,Holiday List,Lista odmora
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Roditeljski račun {0} ne postoji
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Pregled i radnja
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Ovaj zaposlenik već ima dnevnik sa istim vremenskim žigom. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Računovođa
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Dobit / gubitak
DocType: Crop,Perennial,Višegodišnje
DocType: Program,Is Published,Objavljeno je
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Prikaži bilješke o isporuci
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Da biste omogućili prekomerno naplaćivanje, ažurirajte „Nadoplatu za naplatu“ u Postavkama računa ili Stavka."
DocType: Patient Appointment,Procedure,Procedura
DocType: Accounts Settings,Use Custom Cash Flow Format,Koristite Custom Flow Flow Format
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Faktori rizika
DocType: Patient,Occupational Hazards and Environmental Factors,Opasnosti po životnu sredinu i faktore zaštite životne sredine
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,Upis zaliha već je kreiran za radni nalog
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Kod artikla> Grupa artikala> Marka
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Pogledajte prošla naređenja
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} razgovora
DocType: Vital Signs,Respiratory rate,Stopa respiratornih organa
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,Došlo je do greške tokom procesa ažuriranja
DocType: Restaurant Reservation,Restaurant Reservation,Rezervacija restorana
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Vaše predmete
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Dobavljač> vrsta dobavljača
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Pisanje prijedlog
DocType: Payment Entry Deduction,Payment Entry Deduction,Plaćanje Entry Odbitak
DocType: Service Level Priority,Service Level Priority,Prioritet na nivou usluge
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,Molimo da odaberete Kompaniju i Datum objavljivanja da biste dobili unose
DocType: Asset,Maintenance,Održavanje
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Izlazite iz susreta sa pacijentom
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},Faktor konverzije UOM ({0} -> {1}) nije pronađen za stavku: {2}
DocType: Subscriber,Subscriber,Pretplatnik
DocType: Item Attribute Value,Item Attribute Value,Stavka vrijednost atributa
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Menjanje mjenjača mora biti primjenjivo za kupovinu ili prodaju.
@@ -1955,7 +1950,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),Je povratak (obaveštenje o zaduživanju)
DocType: Workstation,Wages,Plata
DocType: Asset Maintenance,Maintenance Manager Name,Ime menadžera održavanja
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Transakcije protiv kompanije već postoje!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Podnošenje zahtjeva
DocType: Agriculture Task,Urgent,Hitan
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Dohvaćanje zapisa ......
@@ -2653,7 +2647,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Rok plaćanja na redu {0} je možda duplikat.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Poljoprivreda (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Odreskom
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Molimo postavite Naming Series za {0} putem Podešavanje> Podešavanja> Imenovanje serije
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,najam ureda
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Postavke Setup SMS gateway
DocType: Disease,Common Name,Zajedničko ime
@@ -2819,7 +2812,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Lišće Dodijeljeni uspješno za {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Nema stavki za omot
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Trenutno su podržane samo .csv i .xlsx datoteke
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Postavite sistem imenovanja zaposlenika u ljudskim resursima> HR postavke
DocType: Shipping Rule Condition,From Value,Od Vrijednost
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Proizvodnja Količina je obvezno
DocType: Loan,Repayment Method,otplata Način
@@ -4066,7 +4058,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Potrebna On
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Ako je označeno, sakriva i onemogućuje polje Zaokruženo ukupno u listićima plaće"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Ovo je zadani offset (dani) za datum isporuke u prodajnim nalozima. Ponovno nadoknađivanje je 7 dana od datuma slanja narudžbe.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Molimo podesite seriju brojeva za Attendance putem Podešavanje> Serija numeriranja
DocType: Rename Tool,File to Rename,File da biste preimenovali
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Molimo odaberite BOM za Stavka zaredom {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Izvrši ažuriranje pretplate
@@ -4700,7 +4691,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Da li je finansijski trošak
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Gledatelja za zaposlenika {0} već označen
DocType: Packing Slip,If more than one package of the same type (for print),Ako je više od jedan paket od iste vrste (za tisak)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Postavite sistem imenovanja instruktora u Obrazovanje> Postavke obrazovanja
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Podesite podrazumevani kupac u podešavanjima restorana
,Salary Register,Plaća Registracija
DocType: Company,Default warehouse for Sales Return,Zadano skladište za povraćaj prodaje
@@ -4971,7 +4961,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Aktivnosti na čekanju
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Napravite laboratorijski test
DocType: Patient Appointment,Reminded,Podsetio
-DocType: Homepage Section,Cards,Karte
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Pregled grafikona računa
DocType: Chapter Member,Chapter Member,Član poglavlja
DocType: Material Request Plan Item,Minimum Order Quantity,Minimalna količina narudžbine
@@ -4989,7 +4978,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Dalji datumi nisu dozvoljeni
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Očekivani datum isporuke treba da bude nakon datuma prodaje
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Ponovno red Level
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Kontni plan Template
+DocType: Company,Chart Of Accounts Template,Kontni plan Template
DocType: Attendance,Attendance Date,Gledatelja Datum
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Ažuriranje zaliha mora biti omogućeno za fakturu za kupovinu {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Artikal Cijena ažuriranje za {0} u Cjenik {1}
@@ -5554,8 +5543,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Share Ledger
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Prodajna faktura {0} kreirana
DocType: Employee,Confirmation Date,potvrda Datum
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Izbrišite zaposlenika <a href=""#Form/Employee/{0}"">{0}</a> \ da biste otkazali ovaj dokument"
DocType: Inpatient Occupancy,Check Out,Provjeri
DocType: C-Form,Total Invoiced Amount,Ukupno Iznos dostavnice
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Min Kol ne može biti veći od Max Kol
@@ -5762,7 +5749,6 @@
DocType: Cheque Print Template,Cheque Width,Ček Širina
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Potvrditi prodajna cijena za artikl protiv kupovine objekta ili Vrednovanje Rate
DocType: Fee Schedule,Fee Schedule,naknada Raspored
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Oznake stupaca:
DocType: Bank Transaction,Settled,Riješeni
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cess
DocType: Quality Feedback,Parameters,Parametri
@@ -6436,6 +6422,7 @@
DocType: Salary Component,Formula,formula
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serial #
DocType: Material Request Plan Item,Required Quantity,Tražena količina
+DocType: Cash Flow Mapping Template,Template Name,template Name
DocType: Lab Test Template,Lab Test Template,Lab test šablon
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Računovodstveno razdoblje se preklapa sa {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Račun prodaje
@@ -6496,7 +6483,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Datum čeka
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Konto {0}: Nadređeni konto {1} ne pripada preduzeću: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Uspješno obrisane sve transakcije koje se odnose na ove kompanije!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Kao i na datum
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Kao i na datum
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,upis Datum
DocType: Healthcare Settings,Out Patient SMS Alerts,Out Patient SMS upozorenja
@@ -6562,7 +6549,6 @@
DocType: Course Content,Quiz,Kviz
DocType: Subscription,Trial Period End Date,Datum završetka probnog perioda
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Ne authroized od {0} prelazi granice
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Počnite unositi podatke odavde:
DocType: Serial No,Asset Status,Status imovine
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Over Dimensional Cargo (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Restoran Stol
@@ -6789,7 +6775,6 @@
DocType: Contract,Party User,Party User
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Sredstva nisu stvorena za <b>{0}</b> . Morat ćete stvoriti imovinu ručno.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',Molimo podesite Company filter prazno ako Skupina Od je 'Company'
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Kupac> grupa kupaca> teritorija
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Datum knjiženja ne može biti u budućnosti
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Row # {0}: {1} Serial No ne odgovara {2} {3}
DocType: Loan Repayment,Interest Payable,Kamata se plaća
@@ -7024,7 +7009,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Prosečna stopa
DocType: Appointment,Appointment With,Sastanak sa
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Ukupan iznos plaćanja u rasporedu plaćanja mora biti jednak Grand / zaokruženom ukupno
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Označi prisustvo kao <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","Predmet koji pruža klijent" ne može imati stopu vrednovanja
DocType: Subscription Plan Detail,Plan,Plan
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Banka bilans po glavnoj knjizi
@@ -7716,7 +7700,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Maksimalan iznos naknade zaposlenog {0} prelazi {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Ukupno izdvojene Listovi su više od nekoliko dana u razdoblju
DocType: Linked Soil Analysis,Linked Soil Analysis,Linked soil analysis
-DocType: Pricing Rule,Percentage,postotak
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Stavka {0} mora bitistock Stavka
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Uobičajeno Work in Progress Skladište
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Rasporedi za {0} se preklapaju, da li želite da nastavite nakon preskakanja preklapanih slotova?"
diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv
index 07116ab..e147d04 100644
--- a/erpnext/translations/ca.csv
+++ b/erpnext/translations/ca.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Treball en curs
DocType: Leave Control Panel,Branch (optional),Oficina (opcional)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,Si us plau seleccioni la data
-DocType: Item Price,Minimum Qty ,Quantitat mínima
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Quantitat mínima
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},Recursió de BOM: {0} no pot ser fill de {1}
DocType: Finance Book,Finance Book,Llibre de finances
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Llista de vacances
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,El compte pare {0} no existeix
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Revisió i acció
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Aquest empleat ja té un registre amb la mateixa marca de temps. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Accountant
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Guany / pèrdua
DocType: Crop,Perennial,Perenne
DocType: Program,Is Published,Es publica
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Mostra albarans de lliurament
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Per permetre la facturació excessiva, actualitzeu "Indemnització sobre facturació" a la configuració del compte o a l'element."
DocType: Patient Appointment,Procedure,Procediment
DocType: Accounts Settings,Use Custom Cash Flow Format,Utilitzeu el format de flux de caixa personalitzat
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Factors de risc
DocType: Patient,Occupational Hazards and Environmental Factors,Riscos laborals i factors ambientals
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,Entrades de valors ja creades per a la comanda de treball
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Codi de l'article> Grup d'elements> Marca
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Consulteu ordres anteriors
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} converses
DocType: Vital Signs,Respiratory rate,Taxa respiratòria
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,S'ha produït un error durant el procés d'actualització
DocType: Restaurant Reservation,Restaurant Reservation,Reserva de restaurants
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Els seus articles
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Proveïdor> Tipus de proveïdor
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Redacció de propostes
DocType: Payment Entry Deduction,Payment Entry Deduction,El pagament Deducció d'entrada
DocType: Service Level Priority,Service Level Priority,Prioritat de nivell de servei
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,Seleccioneu Companyia i Data de publicació per obtenir entrades
DocType: Asset,Maintenance,Manteniment
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Obtenir de Trobada de pacients
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},Factor de conversió UOM ({0} -> {1}) no trobat per a l'element: {2}
DocType: Subscriber,Subscriber,Subscriptor
DocType: Item Attribute Value,Item Attribute Value,Element Atribut Valor
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,L'intercanvi de divises ha de ser aplicable per a la compra o per a la venda.
@@ -1955,7 +1950,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),És retorn (Nota de dèbit)
DocType: Workstation,Wages,Salari
DocType: Asset Maintenance,Maintenance Manager Name,Nom del gestor de manteniment
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Les transaccions amb l'empresa ja existeixen.
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Sol·licitant el lloc
DocType: Agriculture Task,Urgent,Urgent
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Recuperació de registres ......
@@ -2653,7 +2647,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,El termini de pagament a la fila {0} és possiblement un duplicat.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Agricultura (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Llista de presència
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Configureu Naming Series per a {0} mitjançant Configuració> Configuració> Sèries de nom
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,lloguer de l'oficina
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Paràmetres de configuració de Porta de SMS
DocType: Disease,Common Name,Nom comú
@@ -2819,7 +2812,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Les fulles Numerat amb èxit per {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,No hi ha articles per embalar
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,"Actualment, només són compatibles els fitxers .csv i .xlsx"
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Configureu el sistema de nominació dels empleats a Recursos humans> Configuració de recursos humans
DocType: Shipping Rule Condition,From Value,De Valor
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Quantitat de fabricació és obligatori
DocType: Loan,Repayment Method,Mètode d'amortització
@@ -4067,7 +4059,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Requerit Per
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Si es marca, amaga i inhabilita el camp Total arrodonit als traços de salari"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Aquest és el decalatge (dies) predeterminat de la data de lliurament a les comandes de venda. La compensació de retard és de 7 dies des de la data de col·locació de la comanda.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Configureu les sèries de numeració per assistència mitjançant Configuració> Sèries de numeració
DocType: Rename Tool,File to Rename,Arxiu per canviar el nom de
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Seleccioneu la llista de materials per a l'article a la fila {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Obteniu actualitzacions de subscripció
@@ -4702,7 +4693,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,El cost financer
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Assistència per a l'empleat {0} ja està marcat
DocType: Packing Slip,If more than one package of the same type (for print),Si més d'un paquet del mateix tipus (per impressió)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Configureu un sistema de nom de l’Instructor a Educació> Configuració d’educació
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Establiu el client predeterminat a la Configuració del restaurant
,Salary Register,salari Registre
DocType: Company,Default warehouse for Sales Return,Magatzem per defecte del retorn de vendes
@@ -4973,7 +4963,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Activitats pendents
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Crea una prova de laboratori
DocType: Patient Appointment,Reminded,Recordat
-DocType: Homepage Section,Cards,Targetes
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Veure el gràfic de comptes
DocType: Chapter Member,Chapter Member,Membre del capítol
DocType: Material Request Plan Item,Minimum Order Quantity,Quantitat mínima de comanda
@@ -4991,7 +4980,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,No es permeten dates futures
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,La data de lliurament prevista hauria de ser posterior a la data de la comanda de vendes
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Nivell de Reabastecimiento
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Gràfic de la plantilla de Comptes
+DocType: Company,Chart Of Accounts Template,Gràfic de la plantilla de Comptes
DocType: Attendance,Attendance Date,Assistència Data
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},L'actualització de valors ha de ser habilitada per a la factura de compra {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Article Preu s'actualitza per {0} de la llista de preus {1}
@@ -5556,8 +5545,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Comparteix el compilador
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,S'ha creat la factura de vendes {0}
DocType: Employee,Confirmation Date,Data de confirmació
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Elimineu l'empleat <a href=""#Form/Employee/{0}"">{0}</a> \ per cancel·lar aquest document"
DocType: Inpatient Occupancy,Check Out,Sortida
DocType: C-Form,Total Invoiced Amount,Suma total facturada
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Quantitat mínima no pot ser major que Quantitat màxima
@@ -5764,7 +5751,6 @@
DocType: Cheque Print Template,Cheque Width,ample Xec
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Validar preu de venda per a l'article contra la Tarifa de compra o taxa de valorització
DocType: Fee Schedule,Fee Schedule,Llista de tarifes
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Etiquetes de columnes:
DocType: Bank Transaction,Settled,Assentat
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cessar
DocType: Quality Feedback,Parameters,Paràmetres
@@ -6439,6 +6425,7 @@
DocType: Salary Component,Formula,fórmula
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serial #
DocType: Material Request Plan Item,Required Quantity,Quantitat necessària
+DocType: Cash Flow Mapping Template,Template Name,Nom de la plantilla
DocType: Lab Test Template,Lab Test Template,Plantilla de prova de laboratori
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},El període de comptabilitat es superposa amb {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Compte de vendes
@@ -6499,7 +6486,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Data Xec
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Compte {0}: el compte Pare {1} no pertany a la companyia: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Eliminat correctament totes les transaccions relacionades amb aquesta empresa!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Com en la data
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Com en la data
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,Data d'inscripció
DocType: Healthcare Settings,Out Patient SMS Alerts,Alertes SMS de pacients
@@ -6565,7 +6552,6 @@
DocType: Course Content,Quiz,Test
DocType: Subscription,Trial Period End Date,Període de prova Data de finalització
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,No distribuïdor oficial autoritzat des {0} excedeix els límits
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Comenceu a introduir dades des d'aquí:
DocType: Serial No,Asset Status,Estat d'actius
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Càrrec a gran dimensió (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Taula de restaurants
@@ -6792,7 +6778,6 @@
DocType: Contract,Party User,Usuari del partit
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Actius no creats per a <b>{0}</b> . Haureu de crear actius manualment.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',Si us plau ajust empresa de filtres en blanc si és Agrupa per 'empresa'
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Client> Grup de clients> Territori
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Data d'entrada no pot ser data futura
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Fila # {0}: Nombre de sèrie {1} no coincideix amb {2} {3}
DocType: Loan Repayment,Interest Payable,Interessos a pagar
@@ -7027,7 +7012,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Tarifa mitjana
DocType: Appointment,Appointment With,Cita amb
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,L'import total del pagament en el calendari de pagaments ha de ser igual a Grand / Rounded Total
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Marcar l'assistència com <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","L'element subministrat pel client" no pot tenir un percentatge de valoració
DocType: Subscription Plan Detail,Plan,Pla
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Equilibri extracte bancari segons Comptabilitat General
@@ -7719,7 +7703,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},La quantitat de benefici màxim de l'empleat {0} supera {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Total de fulles assignats més de dia en el període
DocType: Linked Soil Analysis,Linked Soil Analysis,Anàlisi del sòl enllaçat
-DocType: Pricing Rule,Percentage,percentatge
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Article {0} ha de ser un d'article de l'estoc
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Per defecte Work In Progress Magatzem
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Programes per a {0} superposicions, voleu continuar després de saltar les ranures superposades?"
diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv
index 9dd21a5..0a01dcd 100644
--- a/erpnext/translations/cs.csv
+++ b/erpnext/translations/cs.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Na cestě
DocType: Leave Control Panel,Branch (optional),Větev (volitelné)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,"Prosím, vyberte datum"
-DocType: Item Price,Minimum Qty ,Minimální počet
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Minimální počet
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},Rekurze kusovníku: {0} nemůže být dítě {1}
DocType: Finance Book,Finance Book,Finanční kniha
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Seznam dovolené
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Nadřazený účet {0} neexistuje
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Přezkum a akce
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Tento zaměstnanec již má záznam se stejným časovým razítkem. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Účetní
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Zisk / ztráta
DocType: Crop,Perennial,Trvalka
DocType: Program,Is Published,Je publikováno
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Zobrazit dodací listy
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Chcete-li povolit přeúčtování, aktualizujte položku „Příplatek za fakturaci“ v Nastavení účtů nebo v položce."
DocType: Patient Appointment,Procedure,Postup
DocType: Accounts Settings,Use Custom Cash Flow Format,Použijte formát vlastní peněžní toky
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Rizikové faktory
DocType: Patient,Occupational Hazards and Environmental Factors,Pracovní nebezpečí a environmentální faktory
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,Zápisy již vytvořené pro pracovní objednávku
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Kód položky> Skupina položek> Značka
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Zobrazit minulé objednávky
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} konverzací
DocType: Vital Signs,Respiratory rate,Dechová frekvence
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,Během procesu aktualizace došlo k chybě
DocType: Restaurant Reservation,Restaurant Reservation,Rezervace restaurace
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Vaše položky
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Dodavatel> Typ dodavatele
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Návrh Psaní
DocType: Payment Entry Deduction,Payment Entry Deduction,Platba Vstup dedukce
DocType: Service Level Priority,Service Level Priority,Priorita úrovně služeb
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,Zvolte prosím datum společnosti a datum odevzdání
DocType: Asset,Maintenance,Údržba
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Získejte z setkání pacienta
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},UOM konverzní faktor ({0} -> {1}) nebyl nalezen pro položku: {2}
DocType: Subscriber,Subscriber,Odběratel
DocType: Item Attribute Value,Item Attribute Value,Položka Hodnota atributu
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Směnárna musí být platná pro nákup nebo pro prodej.
@@ -1955,7 +1950,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),Je Return (Debit Note)
DocType: Workstation,Wages,Mzdy
DocType: Asset Maintenance,Maintenance Manager Name,Název správce údržby
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Transakce proti společnosti již existují!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Žádající web
DocType: Agriculture Task,Urgent,Naléhavý
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Načítání záznamů ......
@@ -2653,7 +2647,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Platba v řádku {0} je možná duplikát.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Zemědělství (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Balící list
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Nastavte Naming Series pro {0} prostřednictvím Setup> Settings> Naming Series
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,Pronájem kanceláře
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Nastavení SMS brány
DocType: Disease,Common Name,Běžné jméno
@@ -2819,7 +2812,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Dovolená úspěšně přidělena {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Žádné položky k balení
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Aktuálně jsou podporovány pouze soubory CSV a XLSX
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Nastavte prosím systém názvů zaměstnanců v části Lidské zdroje> Nastavení lidských zdrojů
DocType: Shipping Rule Condition,From Value,Od hodnoty
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Výrobní množství je povinné
DocType: Loan,Repayment Method,splácení Metoda
@@ -4067,7 +4059,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Povinné On
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Pokud je zaškrtnuto, skryje a zakáže pole Zaokrouhlený celkový počet v Salary Slips"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Toto je výchozí offset (dny) pro datum dodání v prodejních objednávkách. Náhradní kompenzace je 7 dní od data zadání objednávky.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Nastavte číslovací řady pro Docházku prostřednictvím Nastavení> Číslovací řady
DocType: Rename Tool,File to Rename,Soubor k přejmenování
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},"Prosím, vyberte BOM pro položku v řádku {0}"
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Načíst aktualizace předplatného
@@ -4702,7 +4693,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Jsou finanční náklady
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Účast na zaměstnance {0} je již označen
DocType: Packing Slip,If more than one package of the same type (for print),Pokud je více než jeden balík stejného typu (pro tisk)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Nastavte prosím Pojmenovací systém instruktorů v sekci Vzdělávání> Nastavení vzdělávání
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Nastavte výchozího zákazníka v nastavení restaurace
,Salary Register,plat Register
DocType: Company,Default warehouse for Sales Return,Výchozí sklad pro vrácení prodeje
@@ -4973,7 +4963,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Nevyřízené Aktivity
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Vytvořit laboratorní test
DocType: Patient Appointment,Reminded,Připomenuto
-DocType: Homepage Section,Cards,Karty
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Zobrazit přehled účtů
DocType: Chapter Member,Chapter Member,Člen kapitoly
DocType: Material Request Plan Item,Minimum Order Quantity,Minimální množství pro objednání
@@ -4991,7 +4980,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Budoucí data nejsou povolená
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Očekávaný termín dodání by měl být po datu objednávky
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Změna pořadí Level
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Účtový rozvrh šablony
+DocType: Company,Chart Of Accounts Template,Účtový rozvrh šablony
DocType: Attendance,Attendance Date,Účast Datum
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Aktualizace akcií musí být povolena pro nákupní fakturu {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Položka Cena aktualizován pro {0} v Ceníku {1}
@@ -5555,8 +5544,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Sdílet knihu
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Byla vytvořena prodejní faktura {0}
DocType: Employee,Confirmation Date,Potvrzení Datum
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Chcete-li tento dokument zrušit, prosím odstraňte zaměstnance <a href=""#Form/Employee/{0}"">{0}</a> \"
DocType: Inpatient Occupancy,Check Out,Překontrolovat
DocType: C-Form,Total Invoiced Amount,Celkem Fakturovaná částka
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Min množství nemůže být větší než Max Množství
@@ -5763,7 +5750,6 @@
DocType: Cheque Print Template,Cheque Width,Šek Šířka
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Ověření prodejní ceny položky proti nákupní ceně nebo ocenění
DocType: Fee Schedule,Fee Schedule,poplatek Plán
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Štítky sloupců:
DocType: Bank Transaction,Settled,Usadil se
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cess
DocType: Quality Feedback,Parameters,Parametry
@@ -6437,6 +6423,7 @@
DocType: Salary Component,Formula,Vzorec
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serial #
DocType: Material Request Plan Item,Required Quantity,Požadované množství
+DocType: Cash Flow Mapping Template,Template Name,Název šablony
DocType: Lab Test Template,Lab Test Template,Šablona zkušebního laboratoře
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Účetní období se překrývá s {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Prodejní účet
@@ -6497,7 +6484,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Šek Datum
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Účet {0}: Nadřazený účet {1} nepatří ke společnosti: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Úspěšně vypouští všechny transakce související s tímto společnosti!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Stejně jako u Date
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Stejně jako u Date
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,zápis Datum
DocType: Healthcare Settings,Out Patient SMS Alerts,Upozornění na upozornění pacienta
@@ -6563,7 +6550,6 @@
DocType: Course Content,Quiz,Kviz
DocType: Subscription,Trial Period End Date,Datum ukončení zkušebního období
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Není authroized od {0} překročí limity
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Začněte zadávat data odtud:
DocType: Serial No,Asset Status,Stav majetku
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Rozměrný náklad (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Restaurace Tabulka
@@ -6790,7 +6776,6 @@
DocType: Contract,Party User,Party Uživatel
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Aktiva nebyla vytvořena pro <b>{0}</b> . Budete muset vytvořit dílo ručně.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',"Nastavte filtr společnosti prázdný, pokud je Skupina By je 'Company'"
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Zákazník> Skupina zákazníků> Území
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Vysílání datum nemůže být budoucí datum
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Řádek # {0}: Výrobní číslo {1} neodpovídá {2} {3}
DocType: Loan Repayment,Interest Payable,Úroky splatné
@@ -7025,7 +7010,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Průměrné hodnocení
DocType: Appointment,Appointment With,Schůzka s
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Celková částka platby v rozpisu plateb se musí rovnat hodnotě Grand / Rounded Total
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Označit účast jako <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate",„Položka poskytovaná zákazníkem“ nemůže mít sazbu ocenění
DocType: Subscription Plan Detail,Plan,Plán
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Výpis z bankovního účtu zůstatek podle hlavní knihy
@@ -7717,7 +7701,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Maximální výše příspěvku zaměstnance {0} přesahuje {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Celkové přidělené listy jsou více než dnů v období
DocType: Linked Soil Analysis,Linked Soil Analysis,Analýza propojené půdy
-DocType: Pricing Rule,Percentage,Procento
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Položka {0} musí být skladem
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Výchozí práci ve skladu Progress
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Plán pro překrytí {0}, chcete pokračovat po přeskočení přesahovaných slotů?"
diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv
index 8a54136..df6b6c5 100644
--- a/erpnext/translations/da.csv
+++ b/erpnext/translations/da.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Varer i arbejde
DocType: Leave Control Panel,Branch (optional),Gren (valgfri)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,Vælg venligst dato
-DocType: Item Price,Minimum Qty ,Minimum antal
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Minimum antal
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},BOM-rekursion: {0} kan ikke være barn af {1}
DocType: Finance Book,Finance Book,Finans Bog
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Helligdagskalender
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Forældrekontoen {0} findes ikke
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Gennemgang og handling
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Denne medarbejder har allerede en log med det samme tidsstempel. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Revisor
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Gevinst / Tab
DocType: Crop,Perennial,Perennial
DocType: Program,Is Published,Udgives
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Vis leveringsnotater
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.",For at tillade overfakturering skal du opdatere "Over faktureringsgodtgørelse" i Kontoindstillinger eller elementet.
DocType: Patient Appointment,Procedure,Procedure
DocType: Accounts Settings,Use Custom Cash Flow Format,Brug Custom Cash Flow Format
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Risikofaktorer
DocType: Patient,Occupational Hazards and Environmental Factors,Arbejdsfarer og miljøfaktorer
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,"Aktieindtægter, der allerede er oprettet til Arbejdsordre"
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Varekode> Varegruppe> Mærke
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Se tidligere ordrer
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} samtaler
DocType: Vital Signs,Respiratory rate,Respirationsfrekvens
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,Der opstod en fejl under opdateringsprocessen
DocType: Restaurant Reservation,Restaurant Reservation,Restaurant Reservation
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Dine varer
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Leverandør> Leverandørtype
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Forslag Skrivning
DocType: Payment Entry Deduction,Payment Entry Deduction,Betaling indtastning Fradrag
DocType: Service Level Priority,Service Level Priority,Prioritet på serviceniveau
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,Vælg venligst Company og Posting Date for at få poster
DocType: Asset,Maintenance,Vedligeholdelse
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Få fra Patient Encounter
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},UOM-konverteringsfaktor ({0} -> {1}) ikke fundet for varen: {2}
DocType: Subscriber,Subscriber,abonnent
DocType: Item Attribute Value,Item Attribute Value,Item Attribut Værdi
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Valutaveksling skal være gældende for køb eller salg.
@@ -1936,7 +1931,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),Er retur (debit note)
DocType: Workstation,Wages,Løn
DocType: Asset Maintenance,Maintenance Manager Name,Maintenance Manager Navn
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Der findes allerede transaktioner mod virksomheden!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Anmoder om websted
DocType: Agriculture Task,Urgent,Hurtigst muligt
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Henter poster ......
@@ -2633,7 +2627,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Betalingsperioden i række {0} er muligvis et duplikat.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Landbrug (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Pakkeseddel
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Angiv Naming Series for {0} via Setup> Settings> Naming Series
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,Kontorleje
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Opsætning SMS gateway-indstillinger
DocType: Disease,Common Name,Almindeligt navn
@@ -2799,7 +2792,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Fravær blev succesfuldt tildelt til {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Ingen varer at pakke
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Kun .csv- og .xlsx-filer understøttes i øjeblikket
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Indstil venligst medarbejdernavningssystem i menneskelig ressource> HR-indstillinger
DocType: Shipping Rule Condition,From Value,Fra Value
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Produktionmængde er obligatorisk
DocType: Loan,Repayment Method,tilbagebetaling Metode
@@ -4046,7 +4038,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Forfalder den
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Hvis markeret, skjuler og deaktiverer feltet Rounded Total i lønningssedler"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Dette er standardforskydningen (dage) for leveringsdatoen i salgsordrer. Fallback-forskydningen er 7 dage fra bestillingsdato.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Indstil nummerserier til deltagelse via Opsætning> Nummereringsserie
DocType: Rename Tool,File to Rename,Fil der skal omdøbes
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Vælg BOM for Item i række {0}
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Hent abonnementsopdateringer
@@ -4649,7 +4640,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Er finansiering omkostninger
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,Fremmøde til medarbejder {0} er allerede markeret
DocType: Packing Slip,If more than one package of the same type (for print),Hvis mere end én pakke af samme type (til udskrivning)
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Indstil instruktørens navngivningssystem i uddannelse> Uddannelsesindstillinger
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Indstil standardkunde i Restaurantindstillinger
,Salary Register,Løn Register
DocType: Company,Default warehouse for Sales Return,Standardlager til salgsafkast
@@ -4920,7 +4910,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Afventende aktiviteter
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Lav Lab Test
DocType: Patient Appointment,Reminded,mindet
-DocType: Homepage Section,Cards,Kort
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Se oversigt over konti
DocType: Chapter Member,Chapter Member,Kapitel Medlem
DocType: Material Request Plan Item,Minimum Order Quantity,Minimumsordrenummer
@@ -4938,7 +4927,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Fremtidige datoer ikke tilladt
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Forventet leveringsdato skal være efter salgsordredato
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Genbestil Level
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Kontoplan Skabelon
+DocType: Company,Chart Of Accounts Template,Kontoplan Skabelon
DocType: Attendance,Attendance Date,Fremmøde dato
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Opdateringslager skal aktiveres for købsfakturaen {0}
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Vareprisen opdateret for {0} i prisliste {1}
@@ -5503,8 +5492,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Del Ledger
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Salgsfaktura {0} oprettet
DocType: Employee,Confirmation Date,Bekræftet den
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Slet medarbejderen <a href=""#Form/Employee/{0}"">{0}</a> \ for at annullere dette dokument"
DocType: Inpatient Occupancy,Check Out,Check ud
DocType: C-Form,Total Invoiced Amount,Totalt faktureret beløb
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Min Antal kan ikke være større end Max Antal
@@ -5711,7 +5698,6 @@
DocType: Cheque Print Template,Cheque Width,Anvendes ikke
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Godkend salgspris for vare mod købspris eller værdiansættelsespris
DocType: Fee Schedule,Fee Schedule,Fee Schedule
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Kolonnetiketter:
DocType: Bank Transaction,Settled,Slog sig ned
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cess
DocType: Quality Feedback,Parameters,Parametre
@@ -6386,6 +6372,7 @@
DocType: Salary Component,Formula,Formel
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serienummer
DocType: Material Request Plan Item,Required Quantity,Påkrævet mængde
+DocType: Cash Flow Mapping Template,Template Name,Skabelonnavn
DocType: Lab Test Template,Lab Test Template,Lab Test Template
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Regnskabsperiode overlapper med {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Salgskonto
@@ -6446,7 +6433,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Anvendes ikke
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Konto {0}: Forældre-konto {1} tilhører ikke virksomheden: {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Succesfuld slettet alle transaktioner i forbindelse med dette selskab!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Som på dato
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Som på dato
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,Tilmelding Dato
DocType: Healthcare Settings,Out Patient SMS Alerts,Out Patient SMS Alerts
@@ -6512,7 +6499,6 @@
DocType: Course Content,Quiz,Quiz
DocType: Subscription,Trial Period End Date,Prøveperiode Slutdato
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Ikke authroized da {0} overskrider grænser
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Begynd med at indtaste data herfra:
DocType: Serial No,Asset Status,Aktiver status
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Over dimensionel last (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Restaurantbord
@@ -6738,7 +6724,6 @@
DocType: Contract,Party User,Selskabs-bruger
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,"Aktiver, der ikke er oprettet for <b>{0}</b> . Du skal oprette aktiv manuelt."
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',"Indstil Firmafilter blankt, hvis Group By er 'Company'"
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Kunde> Kundegruppe> Territorium
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Bogføringsdato kan ikke være en fremtidig dato
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Række # {0}: serienummer {1} matcher ikke med {2} {3}
DocType: Loan Repayment,Interest Payable,Rentebetaling
@@ -6973,7 +6958,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Gennemsnitlig sats
DocType: Appointment,Appointment With,Aftale med
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Samlet betalingsbeløb i betalingsplan skal svare til Grand / Rounded Total
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Markér deltagelse som <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","""Kundens leverede vare"" kan ikke have værdiansættelsesrate"
DocType: Subscription Plan Detail,Plan,Plan
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Kontoudskrift balance pr Finans
@@ -7663,7 +7647,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Maksimal ydelsesbeløb for medarbejderen {0} overstiger {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Samlede fordelte blade er mere end dage i perioden
DocType: Linked Soil Analysis,Linked Soil Analysis,Linked Soil Analysis
-DocType: Pricing Rule,Percentage,Procent
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Vare {0} skal være en lagervare
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Standard varer-i-arbejde-lager
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Skemaer for {0} overlapninger, vil du fortsætte efter at have oversat overlapte slots?"
diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv
index 0d406dc..66b10ef 100644
--- a/erpnext/translations/de.csv
+++ b/erpnext/translations/de.csv
@@ -168,12 +168,11 @@
DocType: Work Order Operation,Work In Progress,Laufende Arbeit/-en
DocType: Leave Control Panel,Branch (optional),Zweigstelle (optional)
apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py,Please select date,Bitte wählen Sie Datum
-DocType: Item Price,Minimum Qty ,Mindestmenge
+apps/erpnext/erpnext/stock/report/product_bundle_balance/product_bundle_balance.py,Minimum Qty ,Mindestmenge
apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py,BOM recursion: {0} cannot be child of {1},Stücklistenrekursion: {0} darf nicht untergeordnet zu {1} sein
DocType: Finance Book,Finance Book,Finanzbuch
DocType: Patient Encounter,HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-
DocType: Appointment Booking Settings,Holiday List,Urlaubsübersicht
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,The parent account {0} does not exists,Das übergeordnete Konto {0} ist nicht vorhanden
apps/erpnext/erpnext/config/quality_management.py,Review and Action,Überprüfung und Aktion
apps/erpnext/erpnext/hr/doctype/employee_checkin/employee_checkin.py,This employee already has a log with the same timestamp.{0},Dieser Mitarbeiter hat bereits ein Protokoll mit demselben Zeitstempel. {0}
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Accountant,Buchhalter
@@ -245,7 +244,6 @@
DocType: Exchange Rate Revaluation Account,Gain/Loss,Gewinn/Verlust
DocType: Crop,Perennial,Staude
DocType: Program,Is Published,Ist veröffentlicht
-apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js,Show Delivery Notes,Lieferscheine anzeigen
apps/erpnext/erpnext/controllers/status_updater.py,"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Aktualisieren Sie "Over Billing Allowance" in den Kontoeinstellungen oder im Artikel, um eine Überberechnung zuzulassen."
DocType: Patient Appointment,Procedure,Verfahren
DocType: Accounts Settings,Use Custom Cash Flow Format,Benutzerdefiniertes Cashflow-Format verwenden
@@ -981,7 +979,6 @@
DocType: Patient,Risk Factors,Risikofaktoren
DocType: Patient,Occupational Hazards and Environmental Factors,Berufsrisiken und Umweltfaktoren
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Stock Entries already created for Work Order ,"Lagereinträge, die bereits für den Arbeitsauftrag erstellt wurden"
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Item Code > Item Group > Brand,Artikelcode> Artikelgruppe> Marke
apps/erpnext/erpnext/templates/pages/cart.html,See past orders,Frühere Bestellungen anzeigen
apps/erpnext/erpnext/public/js/hub/pages/Selling.vue,{0} conversations,{0} Konversationen
DocType: Vital Signs,Respiratory rate,Atemfrequenz
@@ -1139,7 +1136,6 @@
apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js,An error occurred during the update process,Während des Aktualisierungsprozesses ist ein Fehler aufgetreten
DocType: Restaurant Reservation,Restaurant Reservation,Restaurant Reservierung
apps/erpnext/erpnext/public/js/hub/Sidebar.vue,Your Items,Ihre Artikel
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Supplier > Supplier Type,Lieferant> Lieferantentyp
apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py,Proposal Writing,Verfassen von Angeboten
DocType: Payment Entry Deduction,Payment Entry Deduction,Zahlungsabzug
DocType: Service Level Priority,Service Level Priority,Service Level Priorität
@@ -1438,7 +1434,6 @@
apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js,Please select Company and Posting Date to getting entries,"Bitte wählen Sie Unternehmen und Buchungsdatum, um Einträge zu erhalten"
DocType: Asset,Maintenance,Wartung
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js,Get from Patient Encounter,Von der Patientenbegegnung erhalten
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,UOM Conversion factor ({0} -> {1}) not found for item: {2},UOM-Umrechnungsfaktor ({0} -> {1}) für Element nicht gefunden: {2}
DocType: Subscriber,Subscriber,Teilnehmer
DocType: Item Attribute Value,Item Attribute Value,Attributwert des Artikels
apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py,Currency Exchange must be applicable for Buying or for Selling.,Der Währungsumtausch muss beim Kauf oder beim Verkauf anwendbar sein.
@@ -1955,7 +1950,6 @@
DocType: Purchase Invoice,Is Return (Debit Note),ist Rücklieferung (Lastschrift)
DocType: Workstation,Wages,Lohn
DocType: Asset Maintenance,Maintenance Manager Name,Name des Wartungs-Managers
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js,Transactions against the company already exist! ,Transaktionen gegen das Unternehmen bestehen bereits!
apps/erpnext/erpnext/buying/report/procurement_tracker/procurement_tracker.py,Requesting Site,Anfordernde Site
DocType: Agriculture Task,Urgent,Dringend
apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js,Fetching records......,Einträge werden abgefragt ...
@@ -2652,7 +2646,6 @@
apps/erpnext/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.py,The Payment Term at row {0} is possibly a duplicate.,Die Zahlungsbedingung in Zeile {0} ist möglicherweise ein Duplikat.
apps/erpnext/erpnext/public/js/setup_wizard.js,Agriculture (beta),Landwirtschaft (beta)
apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js,Packing Slip,Packzettel
-apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py,Please set Naming Series for {0} via Setup > Settings > Naming Series,Bitte stellen Sie die Namensreihe über Setup> Einstellungen> Namensreihe auf {0} ein
apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py,Office Rent,Büromiete
apps/erpnext/erpnext/config/settings.py,Setup SMS gateway settings,Einstellungen für SMS-Gateway verwalten
DocType: Disease,Common Name,Gemeinsamen Namen
@@ -2818,7 +2811,6 @@
apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py,Leaves Allocated Successfully for {0},Erfolgreich zugewiesene Abwesenheiten für {0}
apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py,No Items to pack,Keine Artikel zum Verpacken
apps/erpnext/erpnext/accounts/doctype/bank_statement_transaction_entry/bank_statement_transaction_entry.py,Only .csv and .xlsx files are supported currently,Derzeit werden nur CSV- und XLSX-Dateien unterstützt
-apps/erpnext/erpnext/hr/doctype/employee/employee.py,Please setup Employee Naming System in Human Resource > HR Settings,Bitte richten Sie das Employee Naming System unter Human Resource> HR Settings ein
DocType: Shipping Rule Condition,From Value,Von-Wert
apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py,Manufacturing Quantity is mandatory,Eingabe einer Fertigungsmenge ist erforderlich
DocType: Loan,Repayment Method,Rückzahlweg
@@ -4065,7 +4057,6 @@
apps/erpnext/erpnext/templates/form_grid/material_request_grid.html,Required On,Benötigt am
DocType: HR Settings,"If checked, hides and disables Rounded Total field in Salary Slips","Wenn diese Option aktiviert ist, wird das Feld "Gerundete Summe" in Gehaltsabrechnungen ausgeblendet und deaktiviert"
DocType: Woocommerce Settings,This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Dies ist der Standardversatz (Tage) für das Lieferdatum in Kundenaufträgen. Der Fallback-Offset beträgt 7 Tage ab Bestelldatum.
-apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py,Please setup numbering series for Attendance via Setup > Numbering Series,Bitte richten Sie die Nummerierungsserie für die Teilnahme über Setup> Nummerierungsserie ein
DocType: Rename Tool,File to Rename,"Datei, die umbenannt werden soll"
apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.py,Please select BOM for Item in Row {0},Bitte Stückliste für Artikel in Zeile {0} auswählen
apps/erpnext/erpnext/accounts/doctype/subscription/subscription.js,Fetch Subscription Updates,Abruf von Abonnement-Updates
@@ -4700,7 +4691,6 @@
DocType: Cash Flow Mapping,Is Finance Cost,Ist Finanzen Kosten
apps/erpnext/erpnext/hr/doctype/attendance/attendance.py,Attendance for employee {0} is already marked,"""Anwesenheit von Mitarbeiter"" {0} ist bereits markiert"
DocType: Packing Slip,If more than one package of the same type (for print),Wenn es mehr als ein Paket von der gleichen Art (für den Druck) gibt
-apps/erpnext/erpnext/education/doctype/instructor/instructor.py,Please setup Instructor Naming System in Education > Education Settings,Bitte richten Sie das Instructor Naming System unter Education> Education Settings ein
apps/erpnext/erpnext/restaurant/doctype/restaurant_order_entry/restaurant_order_entry.py,Please set default customer in Restaurant Settings,Bitte setzen Sie den Standardkunden in den Restauranteinstellungen
,Salary Register,Gehalt Register
DocType: Company,Default warehouse for Sales Return,Standardlager für Verkaufsretoure
@@ -4971,7 +4961,6 @@
apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html,Pending Activities,Ausstehende Aktivitäten
apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test_list.js,Create Lab Test,Labortest erstellen
DocType: Patient Appointment,Reminded,Erinnert
-DocType: Homepage Section,Cards,Karten
apps/erpnext/erpnext/public/js/setup_wizard.js,View Chart of Accounts,Kontenplan anzeigen
DocType: Chapter Member,Chapter Member,Gruppen-Mitglied
DocType: Material Request Plan Item,Minimum Order Quantity,Mindestbestellmenge
@@ -4989,7 +4978,7 @@
apps/erpnext/erpnext/hr/utils.py,Future dates not allowed,Zukünftige Termine sind nicht erlaubt
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py,Expected Delivery Date should be after Sales Order Date,Voraussichtlicher Liefertermin sollte nach Kundenauftragsdatum erfolgen
apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py,Reorder Level,Meldebestand
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Chart Of Accounts Template,Kontenvorlage
+DocType: Company,Chart Of Accounts Template,Kontenvorlage
DocType: Attendance,Attendance Date,Anwesenheitsdatum
apps/erpnext/erpnext/assets/doctype/asset/asset.py,Update stock must be enable for the purchase invoice {0},Die Aktualisierung des Bestands muss für die Eingangsrechnung {0} aktiviert sein.
apps/erpnext/erpnext/stock/get_item_details.py,Item Price updated for {0} in Price List {1},Artikel Preis aktualisiert für {0} in der Preisliste {1}
@@ -5554,8 +5543,6 @@
apps/erpnext/erpnext/accounts/doctype/shareholder/shareholder.js,Share Ledger,Aktienbuch
apps/erpnext/erpnext/healthcare/doctype/patient/patient.js,Sales Invoice {0} created,Verkaufsrechnung {0} erstellt
DocType: Employee,Confirmation Date,Datum bestätigen
-apps/erpnext/erpnext/hr/doctype/employee_transfer/employee_transfer.py,"Please delete the Employee <a href=""#Form/Employee/{0}"">{0}</a>\
- to cancel this document","Bitte löschen Sie den Mitarbeiter <a href=""#Form/Employee/{0}"">{0}</a> \, um dieses Dokument zu stornieren"
DocType: Inpatient Occupancy,Check Out,Check-Out
DocType: C-Form,Total Invoiced Amount,Gesamtrechnungsbetrag
apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py,Min Qty can not be greater than Max Qty,Mindestmenge kann nicht größer als Maximalmenge sein
@@ -5762,7 +5749,6 @@
DocType: Cheque Print Template,Cheque Width,Scheck Breite
DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Bestätigen Sie den Verkaufspreis für den Posten gegen den Einkaufspreis oder Bewertungskurs
DocType: Fee Schedule,Fee Schedule,Gebührenordnung
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Column Labels : ,Spaltenbeschriftungen:
DocType: Bank Transaction,Settled,Erledigt
apps/erpnext/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html,Cess,Cess
DocType: Quality Feedback,Parameters,Parameter
@@ -6436,6 +6422,7 @@
DocType: Salary Component,Formula,Formel
apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,Serial #,Serien #
DocType: Material Request Plan Item,Required Quantity,Benötigte Menge
+DocType: Cash Flow Mapping Template,Template Name,Vorlagenname
DocType: Lab Test Template,Lab Test Template,Labortestvorlage
apps/erpnext/erpnext/accounts/doctype/accounting_period/accounting_period.py,Accounting Period overlaps with {0},Abrechnungszeitraum überschneidet sich mit {0}
apps/erpnext/erpnext/setup/doctype/company/company.py,Sales Account,Verkaufskonto
@@ -6496,7 +6483,7 @@
DocType: Bank Reconciliation Detail,Cheque Date,Scheckdatum
apps/erpnext/erpnext/accounts/doctype/account/account.py,Account {0}: Parent account {1} does not belong to company: {2},Konto {0}: Kontogruppe {1} gehört nicht zu Unternehmen {2}
apps/erpnext/erpnext/setup/doctype/company/company.js,Successfully deleted all transactions related to this company!,Alle Transaktionen dieses Unternehmens wurden erfolgreich gelöscht!
-apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js,As on Date,Zum
+apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.js,As on Date,Zum
DocType: Additional Salary,HR,HR
DocType: Course Enrollment,Enrollment Date,Enrollment Datum
DocType: Healthcare Settings,Out Patient SMS Alerts,SMS-Benachrichtungen für ambulante Patienten
@@ -6562,7 +6549,6 @@
DocType: Course Content,Quiz,Quiz
DocType: Subscription,Trial Period End Date,Testzeitraum Enddatum
apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py,Not authroized since {0} exceeds limits,Keine Berechtigung da {0} die Höchstgrenzen überschreitet
-apps/erpnext/erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py,Start entering data from here : ,Beginnen Sie hier mit der Dateneingabe:
DocType: Serial No,Asset Status,Status Vermögenswert
DocType: Sales Invoice,Over Dimensional Cargo (ODC),Überdimensionale Ladung (ODC)
DocType: Restaurant Order Entry,Restaurant Table,Restaurant-Tisch
@@ -6788,7 +6774,6 @@
DocType: Contract,Party User,Party Benutzer
apps/erpnext/erpnext/controllers/buying_controller.py,Assets not created for <b>{0}</b>. You will have to create asset manually.,Für <b>{0} wurden</b> keine Assets erstellt. Sie müssen das Asset manuell erstellen.
apps/erpnext/erpnext/stock/report/total_stock_summary/total_stock_summary.py,Please set Company filter blank if Group By is 'Company',"Bitte den Filter ""Unternehmen"" leeren, wenn nach Unternehmen gruppiert wird"
-apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js,Customer > Customer Group > Territory,Kunde> Kundengruppe> Gebiet
apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py,Posting Date cannot be future date,Buchungsdatum kann nicht Datum in der Zukunft sein
apps/erpnext/erpnext/controllers/sales_and_purchase_return.py,Row # {0}: Serial No {1} does not match with {2} {3},Zeile # {0}: Seriennummer {1} stimmt nicht mit {2} {3} überein
DocType: Loan Repayment,Interest Payable,Zu zahlende Zinsen
@@ -7021,7 +7006,6 @@
apps/erpnext/erpnext/accounts/report/share_balance/share_balance.py,Average Rate,Durchschnittsrate
DocType: Appointment,Appointment With,Termin mit
apps/erpnext/erpnext/controllers/accounts_controller.py,Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,Der gesamte Zahlungsbetrag im Zahlungsplan muss gleich Groß / Abgerundet sein
-apps/erpnext/erpnext/hr/doctype/attendance/attendance_list.js,Mark attendance as <b></b>,Anwesenheit als markieren <b></b>
apps/erpnext/erpnext/stock/doctype/item/item.py,"""Customer Provided Item"" cannot have Valuation Rate","""Customer Provided Item"" kann eine Bewertung haben."
DocType: Subscription Plan Detail,Plan,Planen
apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py,Bank Statement balance as per General Ledger,Kontoauszug Bilanz nach Hauptbuch
@@ -7713,7 +7697,6 @@
apps/erpnext/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py,Maximum benefit amount of employee {0} exceeds {1},Der maximale Leistungsbetrag von Mitarbeiter {0} übersteigt {1}
apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py,Total allocated leaves are more than days in the period,Die Gesamtmenge des beantragten Urlaubs übersteigt die Tage in der Periode
DocType: Linked Soil Analysis,Linked Soil Analysis,Verbundene Bodenanalyse
-DocType: Pricing Rule,Percentage,Prozentsatz
apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py,Item {0} must be a stock Item,Artikel {0} muss ein Lagerartikel sein
DocType: Manufacturing Settings,Default Work In Progress Warehouse,Standard-Fertigungslager
apps/erpnext/erpnext/healthcare/doctype/practitioner_schedule/practitioner_schedule.js,"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Schedules für {0} Überlappungen, möchten Sie nach Überlappung überlappender Slots fortfahren?"