divisional loss adjustment while doing gl entry for purchase receipt
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index e04abbb..abc0859 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -138,10 +138,11 @@
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 @@
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 @@
"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)