From e0ce9407cb51cda9f16e53ab26d010403a34c19a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 5 Feb 2015 15:11:50 +0530 Subject: [PATCH] divisional loss adjustment while doing gl entry for purchase receipt --- .../purchase_receipt/purchase_receipt.py | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index e04abbb2bc..abc0859829 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -138,10 +138,11 @@ class PurchaseReceipt(BuyingController): pr_qty = flt(d.qty) * flt(d.conversion_factor) if pr_qty: + val_rate_db_precision = 6 if cint(self.precision("valuation_rate")) <= 6 else 9 sl_entries.append(self.get_sl_entries(d, { "actual_qty": flt(pr_qty), "serial_no": cstr(d.serial_no).strip(), - "incoming_rate": d.valuation_rate + "incoming_rate": flt(d.valuation_rate, val_rate_db_precision) })) if flt(d.rejected_qty) > 0: @@ -288,14 +289,16 @@ class PurchaseReceipt(BuyingController): if d.item_code in stock_items and flt(d.valuation_rate) and flt(d.qty): if warehouse_account.get(d.warehouse): + val_rate_db_precision = 6 if cint(self.precision("valuation_rate")) <= 6 else 9 + # warehouse account gl_entries.append(self.get_gl_dict({ "account": warehouse_account[d.warehouse], "against": stock_rbnb, "cost_center": d.cost_center, "remarks": self.get("remarks") or _("Accounting Entry for Stock"), - "debit": flt(flt(d.valuation_rate) * flt(d.qty) * flt(d.conversion_factor), - self.precision("valuation_rate", d)) + "debit": flt(flt(d.valuation_rate, val_rate_db_precision) * flt(d.qty) * flt(d.conversion_factor), + self.precision("base_amount", d)) })) # stock received but not billed @@ -329,6 +332,24 @@ class PurchaseReceipt(BuyingController): "credit": flt(d.rm_supp_cost) })) + # divisional loss adjustment + if not self.get("other_charges"): + sle_valuation_amount = flt(flt(d.valuation_rate, val_rate_db_precision) * flt(d.qty) * flt(d.conversion_factor), + self.precision("base_amount", d)) + + distributed_amount = flt(flt(d.base_amount, self.precision("base_amount", d))) + \ + flt(d.landed_cost_voucher_amount) + flt(d.rm_supp_cost) + + divisional_loss = flt(distributed_amount - sle_valuation_amount, self.precision("base_amount", d)) + if divisional_loss: + gl_entries.append(self.get_gl_dict({ + "account": stock_rbnb, + "against": warehouse_account[d.warehouse], + "cost_center": d.cost_center, + "remarks": self.get("remarks") or _("Accounting Entry for Stock"), + "debit": divisional_loss + })) + elif d.warehouse not in warehouse_with_no_account or \ d.rejected_warehouse not in warehouse_with_no_account: warehouse_with_no_account.append(d.warehouse)