From cfd1b10980be7fa37a5b665e748b755794c8447c Mon Sep 17 00:00:00 2001 From: nabinhait Date: Fri, 25 Jul 2014 12:02:36 +0530 Subject: [PATCH] Purchase receipt gl entries if there is warehouse without account --- .../sales_invoice/test_sales_invoice.py | 3 +- .../purchase_receipt/purchase_receipt.py | 58 ++++++++++++------- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 1d22e0930a..ab361d83ad 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -502,7 +502,8 @@ class TestSalesInvoice(unittest.TestCase): "warehouse": "_Test Warehouse - _TC" }) - pos_setting.insert() + if not frappe.db.exists("POS Setting", "_Test POS Setting"): + pos_setting.insert() def test_si_gl_entry_with_aii_and_update_stock_with_warehouse_but_no_account(self): self.clear_stock_account_balance() diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index cb24c8e211..206d407890 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -292,11 +292,12 @@ class PurchaseReceipt(BuyingController): gl_entries = [] warehouse_with_no_account = [] + negative_expense_to_be_booked = 0.0 stock_items = self.get_stock_items() for d in self.get("purchase_receipt_details"): if d.item_code in stock_items and flt(d.valuation_rate): if warehouse_account.get(d.warehouse) and flt(d.qty) and flt(d.valuation_rate): - + # warehouse account gl_entries.append(self.get_gl_dict({ "account": warehouse_account[d.warehouse], @@ -315,6 +316,8 @@ class PurchaseReceipt(BuyingController): "credit": flt(d.base_amount, self.precision("base_amount", d)) })) + negative_expense_to_be_booked += flt(d.item_tax_amount) + # Amount added through landed-cost-voucher if flt(d.landed_cost_voucher_amount): gl_entries.append(self.get_gl_dict({ @@ -349,29 +352,42 @@ class PurchaseReceipt(BuyingController): valuation_tax[tax.cost_center] += \ (tax.add_deduct_tax == "Add" and 1 or -1) * flt(tax.tax_amount) - # Backward compatibility: - # If expenses_included_in_valuation account has been credited in against PI - # and charges added via Landed Cost Voucher, - # post valuation related charges on "Stock Received But Not Billed" + if negative_expense_to_be_booked and valuation_tax: + # Backward compatibility: + # If expenses_included_in_valuation account has been credited in against PI + # and charges added via Landed Cost Voucher, + # post valuation related charges on "Stock Received But Not Billed" - stock_rbnb_booked_in_pi = frappe.db.sql("""select name from `tabPurchase Invoice Item` pi - where docstatus = 1 and purchase_receipt=%s - and exists(select name from `tabGL Entry` where voucher_type='Purchase Invoice' - and voucher_no=pi.parent and account=%s)""", (self.name, stock_rbnb)) + stock_rbnb_booked_in_pi = frappe.db.sql("""select name from `tabPurchase Invoice Item` pi + where docstatus = 1 and purchase_receipt=%s + and exists(select name from `tabGL Entry` where voucher_type='Purchase Invoice' + and voucher_no=pi.parent and account=%s)""", (self.name, stock_rbnb)) - if stock_rbnb_booked_in_pi: - expenses_included_in_valuation = stock_rbnb + if stock_rbnb_booked_in_pi: + expenses_included_in_valuation = stock_rbnb - # Expense included in valuation - for cost_center, amount in valuation_tax.items(): - gl_entries.append( - self.get_gl_dict({ - "account": expenses_included_in_valuation, - "cost_center": cost_center, - "credit": amount, - "remarks": self.remarks or "Accounting Entry for Stock" - }) - ) + against_account = ", ".join([d.account for d in gl_entries if flt(d.debit) > 0]) + total_valuation_amount = sum(valuation_tax.values()) + amount_including_divisional_loss = negative_expense_to_be_booked + i = 1 + for cost_center, amount in valuation_tax.items(): + if i == len(valuation_tax): + applicable_amount = amount_including_divisional_loss + else: + applicable_amount = negative_expense_to_be_booked * (amount / total_valuation_amount) + amount_including_divisional_loss -= applicable_amount + + gl_entries.append( + self.get_gl_dict({ + "account": expenses_included_in_valuation, + "cost_center": cost_center, + "credit": applicable_amount, + "remarks": self.remarks or "Accounting Entry for Stock", + "against": against_account + }) + ) + + i += 1 if warehouse_with_no_account: frappe.msgprint(_("No accounting entries for the following warehouses") + ": \n" +