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)