fix: removed values out of sync validation from stock transactions

This commit is contained in:
Rohit Waghchaure 2021-06-22 15:23:04 +05:30
parent 6588a936d5
commit 5d5dc56f94
5 changed files with 207 additions and 4 deletions

View File

@ -11,7 +11,7 @@ from frappe.utils import cint, cstr, flt, get_link_to_form, getdate
import erpnext
from erpnext.accounts.general_ledger import make_gl_entries, make_reverse_gl_entries, process_gl_map
from erpnext.accounts.utils import check_if_stock_and_account_balance_synced, get_fiscal_year
from erpnext.accounts.utils import get_fiscal_year
from erpnext.controllers.accounts_controller import AccountsController
from erpnext.stock import get_warehouse_account_map
from erpnext.stock.stock_ledger import get_valuation_rate
@ -497,9 +497,6 @@ class StockController(AccountsController):
})
if future_sle_exists(args):
create_repost_item_valuation_entry(args)
elif not is_reposting_pending():
check_if_stock_and_account_balance_synced(self.posting_date,
self.company, self.doctype, self.name)
@frappe.whitelist()
def make_quality_inspections(doctype, docname, items):

View File

@ -0,0 +1,36 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
/* eslint-disable */
frappe.query_reports["Incorrect Stock Value Report"] = {
"filters": [
{
"label": __("Company"),
"fieldname": "company",
"fieldtype": "Link",
"options": "Company",
"reqd": 1,
"default": frappe.defaults.get_user_default("Company")
},
{
"label": __("Account"),
"fieldname": "account",
"fieldtype": "Link",
"options": "Account",
get_query: function() {
var company = frappe.query_report.get_filter_value('company');
return {
filters: {
"account_type": "Stock",
"company": company
}
}
}
},
{
"label": __("From Date"),
"fieldname": "from_date",
"fieldtype": "Date"
}
]
};

View File

@ -0,0 +1,29 @@
{
"add_total_row": 0,
"columns": [],
"creation": "2021-06-22 15:35:05.148177",
"disable_prepared_report": 0,
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [],
"idx": 0,
"is_standard": "Yes",
"modified": "2021-06-22 15:35:05.148177",
"modified_by": "Administrator",
"module": "Stock",
"name": "Incorrect Stock Value Report",
"owner": "Administrator",
"prepared_report": 0,
"ref_doctype": "Stock Ledger Entry",
"report_name": "Incorrect Stock Value Report",
"report_type": "Script Report",
"roles": [
{
"role": "Stock User"
},
{
"role": "Accounts Manager"
}
]
}

View File

@ -0,0 +1,141 @@
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
import erpnext
from frappe import _
from six import iteritems
from frappe.utils import add_days, today, getdate
from erpnext.stock.utils import get_stock_value_on
from erpnext.accounts.utils import get_stock_and_account_balance
def execute(filters=None):
if not erpnext.is_perpetual_inventory_enabled(filters.company):
frappe.throw(_("Perpetual inventory required for the company {0} to view this report.")
.format(filters.company))
data = get_data(filters)
columns = get_columns(filters)
return columns, data
def get_unsync_date(filters):
date = filters.from_date
if not date:
date = frappe.db.sql(""" SELECT min(posting_date) from `tabStock Ledger Entry`""")
date = date[0][0]
if not date:
return
while getdate(date) < getdate(today()):
account_bal, stock_bal, warehouse_list = get_stock_and_account_balance(posting_date=date,
company=filters.company, account = filters.account)
if abs(account_bal - stock_bal) > 0.1:
return date
date = add_days(date, 1)
def get_data(report_filters):
from_date = get_unsync_date(report_filters)
if not from_date:
return []
result = []
voucher_wise_dict = {}
data = frappe.db.sql('''
SELECT
name, posting_date, posting_time, voucher_type, voucher_no,
stock_value_difference, stock_value, warehouse, item_code
FROM
`tabStock Ledger Entry`
WHERE
posting_date
= %s and company = %s
and is_cancelled = 0
ORDER BY timestamp(posting_date, posting_time) asc, creation asc
''', (from_date, report_filters.company), as_dict=1)
for d in data:
voucher_wise_dict.setdefault((d.item_code, d.warehouse), []).append(d)
closing_date = add_days(from_date, -1)
for key, stock_data in iteritems(voucher_wise_dict):
prev_stock_value = get_stock_value_on(posting_date = closing_date, item_code=key[0], warehouse =key[1])
for data in stock_data:
expected_stock_value = prev_stock_value + data.stock_value_difference
if abs(data.stock_value - expected_stock_value) > 0.1:
data.difference_value = abs(data.stock_value - expected_stock_value)
data.expected_stock_value = expected_stock_value
result.append(data)
return result
def get_columns(filters):
return [
{
"label": _("Stock Ledger ID"),
"fieldname": "name",
"fieldtype": "Link",
"options": "Stock Ledger Entry",
"width": "80"
},
{
"label": _("Posting Date"),
"fieldname": "posting_date",
"fieldtype": "Date"
},
{
"label": _("Posting Time"),
"fieldname": "posting_time",
"fieldtype": "Time"
},
{
"label": _("Voucher Type"),
"fieldname": "voucher_type",
"width": "110"
},
{
"label": _("Voucher No"),
"fieldname": "voucher_no",
"fieldtype": "Dynamic Link",
"options": "voucher_type",
"width": "110"
},
{
"label": _("Item Code"),
"fieldname": "item_code",
"fieldtype": "Link",
"options": "Item",
"width": "110"
},
{
"label": _("Warehouse"),
"fieldname": "warehouse",
"fieldtype": "Link",
"options": "Warehouse",
"width": "110"
},
{
"label": _("Expected Stock Value"),
"fieldname": "expected_stock_value",
"fieldtype": "Currency",
"width": "150"
},
{
"label": _("Stock Value"),
"fieldname": "stock_value",
"fieldtype": "Currency",
"width": "120"
},
{
"label": _("Difference Value"),
"fieldname": "difference_value",
"fieldtype": "Currency",
"width": "150"
}
]