feat: provision to create RIV from Stock Ledger Invariant Check
report (#37115)
* feat: provision to create RIV from `Stock Ledger Invariant Check` report * fix: `linter`
This commit is contained in:
parent
195de14810
commit
9c9d0ecb73
@ -3,23 +3,23 @@
|
||||
|
||||
|
||||
const DIFFERNCE_FIELD_NAMES = [
|
||||
"difference_in_qty",
|
||||
"fifo_qty_diff",
|
||||
"fifo_value_diff",
|
||||
"fifo_valuation_diff",
|
||||
"valuation_diff",
|
||||
"fifo_difference_diff",
|
||||
"diff_value_diff"
|
||||
'difference_in_qty',
|
||||
'fifo_qty_diff',
|
||||
'fifo_value_diff',
|
||||
'fifo_valuation_diff',
|
||||
'valuation_diff',
|
||||
'fifo_difference_diff',
|
||||
'diff_value_diff'
|
||||
];
|
||||
|
||||
frappe.query_reports["Stock Ledger Invariant Check"] = {
|
||||
"filters": [
|
||||
frappe.query_reports['Stock Ledger Invariant Check'] = {
|
||||
'filters': [
|
||||
{
|
||||
"fieldname": "item_code",
|
||||
"fieldtype": "Link",
|
||||
"label": "Item",
|
||||
"mandatory": 1,
|
||||
"options": "Item",
|
||||
'fieldname': 'item_code',
|
||||
'fieldtype': 'Link',
|
||||
'label': 'Item',
|
||||
'mandatory': 1,
|
||||
'options': 'Item',
|
||||
get_query: function() {
|
||||
return {
|
||||
filters: {is_stock_item: 1, has_serial_no: 0}
|
||||
@ -27,18 +27,61 @@ frappe.query_reports["Stock Ledger Invariant Check"] = {
|
||||
}
|
||||
},
|
||||
{
|
||||
"fieldname": "warehouse",
|
||||
"fieldtype": "Link",
|
||||
"label": "Warehouse",
|
||||
"mandatory": 1,
|
||||
"options": "Warehouse",
|
||||
'fieldname': 'warehouse',
|
||||
'fieldtype': 'Link',
|
||||
'label': 'Warehouse',
|
||||
'mandatory': 1,
|
||||
'options': 'Warehouse',
|
||||
}
|
||||
],
|
||||
|
||||
formatter (value, row, column, data, default_formatter) {
|
||||
value = default_formatter(value, row, column, data);
|
||||
if (DIFFERNCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) {
|
||||
value = "<span style='color:red'>" + value + "</span>";
|
||||
value = '<span style="color:red">' + value + '</span>';
|
||||
}
|
||||
return value;
|
||||
},
|
||||
|
||||
get_datatable_options(options) {
|
||||
return Object.assign(options, {
|
||||
checkboxColumn: true,
|
||||
});
|
||||
},
|
||||
|
||||
onload(report) {
|
||||
report.page.add_inner_button(__('Create Reposting Entry'), () => {
|
||||
let message = `
|
||||
<div>
|
||||
<p>
|
||||
Reposting Entry will change the value of
|
||||
accounts Stock In Hand, and Stock Expenses
|
||||
in the Trial Balance report and will also change
|
||||
the Balance Value in the Stock Balance report.
|
||||
</p>
|
||||
<p>Are you sure you want to create a Reposting Entry?</p>
|
||||
</div>`;
|
||||
let indexes = frappe.query_report.datatable.rowmanager.getCheckedRows();
|
||||
let selected_rows = indexes.map(i => frappe.query_report.data[i]);
|
||||
|
||||
if (!selected_rows.length) {
|
||||
frappe.throw(__('Please select a row to create a Reposting Entry'));
|
||||
}
|
||||
else if (selected_rows.length > 1) {
|
||||
frappe.throw(__('Please select only one row to create a Reposting Entry'));
|
||||
}
|
||||
else {
|
||||
frappe.confirm(__(message), () => {
|
||||
frappe.call({
|
||||
method: 'erpnext.stock.report.stock_ledger_invariant_check.stock_ledger_invariant_check.create_reposting_entries',
|
||||
args: {
|
||||
rows: selected_rows,
|
||||
item_code: frappe.query_report.get_filter_values().item_code,
|
||||
warehouse: frappe.query_report.get_filter_values().warehouse,
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
@ -5,6 +5,7 @@ import json
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils import get_link_to_form, parse_json
|
||||
|
||||
SLE_FIELDS = (
|
||||
"name",
|
||||
@ -258,3 +259,35 @@ def get_columns():
|
||||
"label": _("H - J"),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def create_reposting_entries(rows, item_code=None, warehouse=None):
|
||||
if isinstance(rows, str):
|
||||
rows = parse_json(rows)
|
||||
|
||||
entries = []
|
||||
for row in rows:
|
||||
row = frappe._dict(row)
|
||||
|
||||
try:
|
||||
doc = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Repost Item Valuation",
|
||||
"based_on": "Item and Warehouse",
|
||||
"status": "Queued",
|
||||
"item_code": item_code or row.item_code,
|
||||
"warehouse": warehouse or row.warehouse,
|
||||
"posting_date": row.posting_date,
|
||||
"posting_time": row.posting_time,
|
||||
"allow_nagative_stock": 1,
|
||||
}
|
||||
).submit()
|
||||
|
||||
entries.append(get_link_to_form("Repost Item Valuation", doc.name))
|
||||
except frappe.DuplicateEntryError:
|
||||
continue
|
||||
|
||||
if entries:
|
||||
entries = ", ".join(entries)
|
||||
frappe.msgprint(_("Reposting entries created: {0}").format(entries))
|
||||
|
Loading…
Reference in New Issue
Block a user