From 7ee45b4af2d26f19c2b3bb929d467dfd33f673c9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 18 Jun 2015 15:29:04 +0530 Subject: [PATCH 1/5] [fix] Batch-wise balance history: show records only with batch-id --- .../batch_wise_balance_history/batch_wise_balance_history.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py index d91197519ae..69e13212fd7 100644 --- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py @@ -54,7 +54,7 @@ def get_stock_ledger_entries(filters): return frappe.db.sql("""select item_code, batch_no, warehouse, posting_date, actual_qty from `tabStock Ledger Entry` - where docstatus < 2 %s order by item_code, warehouse""" % + where docstatus < 2 and ifnull(batch_no, '') != '' %s order by item_code, warehouse""" % conditions, as_dict=1) def get_item_warehouse_batch_map(filters, float_precision): From e7f479b26a9ccee071a8184f8ee725a57d3b4529 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Jun 2015 07:31:49 +0530 Subject: [PATCH 2/5] Validate accounting entry agaist Stock account if perpetual inventory enabled --- erpnext/accounts/general_ledger.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 8fc785c88b1..7276d4163ab 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -82,14 +82,15 @@ def make_entry(args, adv_adj, update_outstanding): gle.submit() def validate_account_for_auto_accounting_for_stock(gl_map): - if gl_map[0].voucher_type=="Journal Entry": - aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount - where account_type = 'Warehouse' and ifnull(warehouse, '')!=''""")] + if cint(frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock")) \ + and gl_map[0].voucher_type=="Journal Entry": + aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount + where account_type = 'Warehouse' and ifnull(warehouse, '')!=''""")] - for entry in gl_map: - if entry.account in aii_accounts: - frappe.throw(_("Account: {0} can only be updated via Stock Transactions") - .format(entry.account), StockAccountInvalidTransaction) + for entry in gl_map: + if entry.account in aii_accounts: + frappe.throw(_("Account: {0} can only be updated via Stock Transactions") + .format(entry.account), StockAccountInvalidTransaction) def round_off_debit_credit(gl_map): precision = get_field_precision(frappe.get_meta("GL Entry").get_field("debit"), From 9d0dd5066a0730a9e1e802965a8720cfe13d5374 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Jun 2015 07:32:46 +0530 Subject: [PATCH 3/5] Removed 'Root Type' validation for receivable/payable account in sales/purchase invoice --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py | 4 +--- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 4 +--- .../patches/v5_0/update_frozen_accounts_permission_role.py | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 8820c87b40f..3f34020d122 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -88,9 +88,7 @@ class PurchaseInvoice(BuyingController): throw(_("Conversion rate cannot be 0 or 1")) def validate_credit_to_acc(self): - root_type, account_type = frappe.db.get_value("Account", self.credit_to, ["root_type", "account_type"]) - if root_type != "Liability": - frappe.throw(_("Credit To account must be a liability account")) + account_type = frappe.db.get_value("Account", self.credit_to, "account_type") if account_type != "Payable": frappe.throw(_("Credit To account must be a Payable account")) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index fe5954e0e07..abe58cea85d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -235,9 +235,7 @@ class SalesInvoice(SellingController): reconcile_against_document(lst) def validate_debit_to_acc(self): - root_type, account_type = frappe.db.get_value("Account", self.debit_to, ["root_type", "account_type"]) - if root_type != "Asset": - frappe.throw(_("Debit To account must be a liability account")) + account_type = frappe.db.get_value("Account", self.debit_to, "account_type") if account_type != "Receivable": frappe.throw(_("Debit To account must be a Receivable account")) diff --git a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py index 2f855135583..14426f5e809 100644 --- a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py +++ b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py @@ -7,6 +7,6 @@ def execute(): account_settings = frappe.get_doc("Accounts Settings") if not account_settings.frozen_accounts_modifier and account_settings.bde_auth_role: - frappe.db.set_value("Account Settings", None, + frappe.db.set_value("Accounts Settings", None, "frozen_accounts_modifier", account_settings.bde_auth_role) From c3b492b237968b9feb538667a6ffe6febfe1a5ad Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Jun 2015 07:52:38 +0530 Subject: [PATCH 4/5] [fix] Auto remarks in Journal Entry based on company currency --- .../doctype/journal_entry/journal_entry.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 753fcc36ddc..7bf6c56dc52 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -274,30 +274,28 @@ class JournalEntry(AccountsController): r.append(_('Reference #{0} dated {1}').format(self.cheque_no, formatdate(self.cheque_date))) else: msgprint(_("Please enter Reference date"), raise_exception=frappe.MandatoryError) - + + company_currency = get_company_currency(self.company) + for d in self.get('accounts'): if d.against_invoice and d.credit: - currency = frappe.db.get_value("Sales Invoice", d.against_invoice, "currency") - - r.append(_("{0} against Sales Invoice {1}").format(fmt_money(flt(d.credit), currency = currency), \ + r.append(_("{0} against Sales Invoice {1}").format(fmt_money(flt(d.credit), currency = company_currency), \ d.against_invoice)) if d.against_sales_order and d.credit: - currency = frappe.db.get_value("Sales Order", d.against_sales_order, "currency") - r.append(_("{0} against Sales Order {1}").format(fmt_money(flt(d.credit), currency = currency), \ + r.append(_("{0} against Sales Order {1}").format(fmt_money(flt(d.credit), currency = company_currency), \ d.against_sales_order)) if d.against_voucher and d.debit: - bill_no = frappe.db.sql("""select bill_no, bill_date, currency + bill_no = frappe.db.sql("""select bill_no, bill_date from `tabPurchase Invoice` where name=%s""", d.against_voucher) if bill_no and bill_no[0][0] and bill_no[0][0].lower().strip() \ not in ['na', 'not applicable', 'none']: - r.append(_('{0} against Bill {1} dated {2}').format(fmt_money(flt(d.debit), currency=bill_no[0][2]), bill_no[0][0], + r.append(_('{0} against Bill {1} dated {2}').format(fmt_money(flt(d.debit), currency=company_currency), bill_no[0][0], bill_no[0][1] and formatdate(bill_no[0][1].strftime('%Y-%m-%d')))) if d.against_purchase_order and d.debit: - currency = frappe.db.get_value("Purchase Order", d.against_purchase_order, "currency") - r.append(_("{0} against Purchase Order {1}").format(fmt_money(flt(d.credit), currency = currency), \ + r.append(_("{0} against Purchase Order {1}").format(fmt_money(flt(d.credit), currency = company_currency), \ d.against_purchase_order)) if self.user_remark: From 818d9674d9e77e0241a4e12fe9625d463c584522 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Jun 2015 18:21:38 +0530 Subject: [PATCH 5/5] [fix] Update outstanding amount function fixed if party not mentioned --- erpnext/accounts/doctype/gl_entry/gl_entry.py | 9 +++++---- erpnext/accounts/general_ledger.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 4e7928d081c..138cf23d381 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt, fmt_money, getdate, formatdate +from frappe.utils import flt, fmt_money, getdate, formatdate, cstr from frappe import _ from frappe.model.document import Document @@ -118,7 +118,7 @@ def update_outstanding_amt(account, party_type, party, against_voucher_type, aga bal = flt(frappe.db.sql("""select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) from `tabGL Entry` where against_voucher_type=%s and against_voucher=%s - and account = %s and party_type=%s and party=%s""", + and account = %s and ifnull(party_type, '')=%s and ifnull(party, '')=%s""", (against_voucher_type, against_voucher, account, party_type, party))[0][0] or 0.0) if against_voucher_type == 'Purchase Invoice': @@ -127,8 +127,9 @@ def update_outstanding_amt(account, party_type, party, against_voucher_type, aga against_voucher_amount = flt(frappe.db.sql(""" select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) from `tabGL Entry` where voucher_type = 'Journal Entry' and voucher_no = %s - and account = %s and party_type=%s and party=%s and ifnull(against_voucher, '') = ''""", - (against_voucher, account, party_type, party))[0][0]) + and account = %s and ifnull(party_type, '')=%s and ifnull(party, '')=%s + and ifnull(against_voucher, '') = ''""", + (against_voucher, account, cstr(party_type), cstr(party)))[0][0]) if not against_voucher_amount: frappe.throw(_("Against Journal Entry {0} is already adjusted against some other voucher") diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 7276d4163ab..17fe922a1c2 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import flt, cstr +from frappe.utils import flt, cstr, cint from frappe import _ from frappe.model.meta import get_field_precision from erpnext.accounts.utils import validate_expense_against_budget