From 784c3333d749f8ee3a7e606af421713f07f5a706 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Tue, 13 Aug 2019 17:02:59 +0530 Subject: [PATCH 1/6] fix(quality-inspection): fetch all items for inspection type in process --- .../stock/doctype/quality_inspection/quality_inspection.js | 7 ++++--- .../stock/doctype/quality_inspection/quality_inspection.py | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.js b/erpnext/stock/doctype/quality_inspection/quality_inspection.js index aa9854aee19..22f29e05b49 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.js +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.js @@ -39,11 +39,12 @@ cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) { query: "erpnext.stock.doctype.quality_inspection.quality_inspection.item_query", filters: { "from": doctype, - "parent": doc.reference_name + "parent": doc.reference_name, + "inspection_type": doc.inspection_type } - } + }; } -} +}, // Serial No based on item_code cur_frm.fields_dict['item_serial_no'].get_query = function(doc, cdt, cdn) { diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py index e0b738202cc..738c63ca358 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py @@ -63,10 +63,12 @@ def item_query(doctype, txt, searchfield, start, page_len, filters): mcond = get_match_cond(filters["from"]) cond, qi_condition = "", "and (quality_inspection is null or quality_inspection = '')" - if filters.get('from') in ['Purchase Invoice Item', 'Purchase Receipt Item']: + if filters.get('from') in ['Purchase Invoice Item', 'Purchase Receipt Item']\ + and filters.get("inspection_type") != "In Process": cond = """and item_code in (select name from `tabItem` where inspection_required_before_purchase = 1)""" - elif filters.get('from') in ['Sales Invoice Item', 'Delivery Note Item']: + elif filters.get('from') in ['Sales Invoice Item', 'Delivery Note Item']\ + and filters.get("inspection_type") != "In Process": cond = """and item_code in (select name from `tabItem` where inspection_required_before_delivery = 1)""" elif filters.get('from') == 'Stock Entry Detail': From 8d84ffb276eddf16c2af0017ae091a9fbdf88e93 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Tue, 13 Aug 2019 19:47:20 +0530 Subject: [PATCH 2/6] fix: removed hard coded string --- erpnext/setup/doctype/company/company.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 930ecd33514..05485e4a1e0 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -254,7 +254,7 @@ class Company(NestedSet): def set_mode_of_payment_account(self): cash = frappe.db.get_value('Mode of Payment', {'type': 'Cash'}, 'name') if cash and self.default_cash_account \ - and not frappe.db.get_value('Mode of Payment Account', {'company': self.name}): + and not frappe.db.get_value('Mode of Payment Account', {'company': self.name, 'parent': cash}): mode_of_payment = frappe.get_doc('Mode of Payment', cash) mode_of_payment.append('accounts', { 'company': self.name, From 60b7acc9b005f313bdc7c370c0decbae574fd9e0 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Wed, 14 Aug 2019 14:39:33 +0530 Subject: [PATCH 3/6] fix(payroll-entry): commit submitted salary slip check onchange (#18695) * fix(payroll-entry): commit submitted salary slip check onchange * fix: track submitted ss via flags --- erpnext/hr/doctype/payroll_entry/payroll_entry.js | 2 +- erpnext/hr/doctype/payroll_entry/payroll_entry.py | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.js b/erpnext/hr/doctype/payroll_entry/payroll_entry.js index e4ab68068c4..adc06712ef0 100644 --- a/erpnext/hr/doctype/payroll_entry/payroll_entry.js +++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.js @@ -69,7 +69,7 @@ frappe.ui.form.on('Payroll Entry', { }, add_context_buttons: function(frm) { - if(frm.doc.salary_slips_submitted) { + if(frm.doc.salary_slips_submitted || (frm.doc.__onload && frm.doc.__onload.submitted_ss)) { frm.events.add_bank_entry_button(frm); } else if(frm.doc.salary_slips_created) { frm.add_custom_button(__("Submit Salary Slip"), function() { diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py index dab63c4c46a..5b9c71dec20 100644 --- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py +++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py @@ -13,14 +13,13 @@ from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee class PayrollEntry(Document): def onload(self): - if not self.docstatus==1: + if not self.docstatus==1 or self.salary_slips_submitted: return # check if salary slips were manually submitted entries = frappe.db.count("Salary Slip", {'payroll_entry': self.name, 'docstatus': 1}, ['name']) - if cint(entries) == len(self.employees) and not self.salary_slips_submitted: - self.db_set("salary_slips_submitted", 1) - self.reload() + if cint(entries) == len(self.employees): + self.set_onload("submitted_ss", True) def on_submit(self): self.create_salary_slips() @@ -423,7 +422,6 @@ def get_start_end_dates(payroll_frequency, start_date=None, company=None): 'start_date': start_date, 'end_date': end_date }) - def get_frequency_kwargs(frequency_name): frequency_dict = { 'monthly': {'months': 1}, From e62fba062e5164361308d9669914cdb6067e708a Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Wed, 14 Aug 2019 14:47:24 +0530 Subject: [PATCH 4/6] fix: Check if account passed is accessible under Payment Entry (#18706) * fix: Check if account passed is accessible under Payment Entry * fix: Comment description * fix: Ignore account permission check * fix: Re-organise code --- .../doctype/payment_entry/payment_entry.py | 16 +++++++++++++++- erpnext/accounts/utils.py | 6 ++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 440529ab760..d57f2c59052 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -719,9 +719,23 @@ def get_party_details(company, party_type, party, date, cost_center=None): @frappe.whitelist() def get_account_details(account, date, cost_center=None): frappe.has_permission('Payment Entry', throw=True) + + # to check if the passed account is accessible if the reference doctype is Payment Entry + account_list = frappe.get_list('Account', { + 'name': account + }, reference_doctype='Payment Entry', limit=1) + + # There might be some user permissions which will allow account under certain doctypes + # except for Payment Entry, only in such case we should throw permission error + if not account_list: + frappe.throw(_('Account: {0} is not permitted under Payment Entry').format(account)) + + account_balance = get_balance_on(account, date, cost_center=cost_center, + ignore_account_permission=True) + return frappe._dict({ "account_currency": get_account_currency(account), - "account_balance": get_balance_on(account, date, cost_center=cost_center), + "account_balance": account_balance, "account_type": frappe.db.get_value("Account", account, "account_type") }) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index b731f049653..e7d7ed6ab63 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -84,7 +84,8 @@ def validate_fiscal_year(date, fiscal_year, company, label="Date", doc=None): throw(_("{0} '{1}' not in Fiscal Year {2}").format(label, formatdate(date), fiscal_year)) @frappe.whitelist() -def get_balance_on(account=None, date=None, party_type=None, party=None, company=None, in_account_currency=True, cost_center=None): +def get_balance_on(account=None, date=None, party_type=None, party=None, company=None, + in_account_currency=True, cost_center=None, ignore_account_permission=False): if not account and frappe.form_dict.get("account"): account = frappe.form_dict.get("account") if not date and frappe.form_dict.get("date"): @@ -140,7 +141,8 @@ def get_balance_on(account=None, date=None, party_type=None, party=None, company if account: - if not frappe.flags.ignore_account_permission: + if not (frappe.flags.ignore_account_permission + or ignore_account_permission): acc.check_permission("read") if report_type == 'Profit and Loss': From a7a810a25f5cd8cf6cbb2a73ad1780dd0312f0e8 Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Fri, 16 Aug 2019 12:58:24 +0530 Subject: [PATCH 5/6] fix: Remove extra space --- erpnext/accounts/doctype/account/account_tree.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js index 0fd21f81332..1b4a9bf43bf 100644 --- a/erpnext/accounts/doctype/account/account_tree.js +++ b/erpnext/accounts/doctype/account/account_tree.js @@ -123,7 +123,8 @@ frappe.treeview_settings["Account"] = { if(frappe.boot.user.can_read.indexOf("GL Entry") !== -1){ // show Dr if positive since balance is calculated as debit - credit else show Cr - let dr_or_cr = node.data.balance_in_account_currency > 0 ? "Dr": "Cr"; + let balance = node.data.balance_in_account_currency || node.data.balance; + let dr_or_cr = balance > 0 ? "Dr": "Cr"; if (node.data && node.data.balance!==undefined) { $('' From 8d72aa99aa77c863618dcb243d49be216227f655 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Fri, 16 Aug 2019 17:52:19 +0550 Subject: [PATCH 6/6] bumped to version 11.1.55 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 2f29a025b29..beae706ff7d 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '11.1.54' +__version__ = '11.1.55' def get_default_company(user=None): '''Get default company for user'''