Merge branch 'develop' into dependabot/npm_and_yarn/lodash-4.17.19

This commit is contained in:
gavin 2020-07-17 17:55:43 +05:30 committed by GitHub
commit 320cde956b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 49 additions and 17 deletions

View File

@ -17,7 +17,8 @@ def get_columns():
{
"fieldname": "lead_owner",
"label": _("Lead Owner"),
"fieldtype": "Data",
"fieldtype": "Link",
"options": "User",
"width": "130"
},
{
@ -68,4 +69,4 @@ def get_columns():
"fieldtype": "Float",
"width": "100"
}
]
]

View File

@ -41,8 +41,7 @@
"fieldtype": "Select",
"in_list_view": 1,
"label": "Log Type",
"options": "\nIN\nOUT",
"reqd": 1
"options": "\nIN\nOUT"
},
{
"fieldname": "shift",
@ -108,7 +107,7 @@
}
],
"links": [],
"modified": "2020-01-23 04:57:42.551355",
"modified": "2020-07-08 11:02:32.660986",
"modified_by": "Administrator",
"module": "HR",
"name": "Employee Checkin",

View File

@ -701,7 +701,7 @@
"columns": 0,
"default": "Draft",
"fieldname": "status",
"fieldtype": "Data",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@ -1001,7 +1001,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 14:44:44.911402",
"modified": "2020-07-15 14:44:44.911402",
"modified_by": "Administrator",
"module": "Maintenance",
"name": "Maintenance Visit",

View File

@ -143,7 +143,7 @@ class Batch(Document):
@frappe.whitelist()
def get_batch_qty(batch_no=None, warehouse=None, item_code=None):
def get_batch_qty(batch_no=None, warehouse=None, item_code=None, posting_date=None, posting_time=None):
"""Returns batch actual qty if warehouse is passed,
or returns dict of qty by warehouse if warehouse is None
@ -155,9 +155,14 @@ def get_batch_qty(batch_no=None, warehouse=None, item_code=None):
out = 0
if batch_no and warehouse:
cond = ""
if posting_date and posting_time:
cond = " and timestamp(posting_date, posting_time) <= timestamp('{0}', '{1}')".format(posting_date,
posting_time)
out = float(frappe.db.sql("""select sum(actual_qty)
from `tabStock Ledger Entry`
where warehouse=%s and batch_no=%s""",
where warehouse=%s and batch_no=%s {0}""".format(cond),
(warehouse, batch_no))[0][0] or 0)
if batch_no and not warehouse:

View File

@ -74,6 +74,20 @@ frappe.ui.form.on("Stock Reconciliation", {
, __("Get Items"), __("Update"));
},
posting_date: function(frm) {
frm.trigger("set_valuation_rate_and_qty_for_all_items");
},
posting_time: function(frm) {
frm.trigger("set_valuation_rate_and_qty_for_all_items");
},
set_valuation_rate_and_qty_for_all_items: function(frm) {
frm.doc.items.forEach(row => {
frm.events.set_valuation_rate_and_qty(frm, row.doctype, row.name);
});
},
set_valuation_rate_and_qty: function(frm, cdt, cdn) {
var d = frappe.model.get_doc(cdt, cdn);

View File

@ -184,8 +184,12 @@ class StockReconciliation(StockController):
sl_entries = []
has_serial_no = False
has_batch_no = False
for row in self.items:
item = frappe.get_doc("Item", row.item_code)
if item.has_batch_no:
has_batch_no = True
if item.has_serial_no or item.has_batch_no:
has_serial_no = True
self.get_sle_for_serialized_items(row, sl_entries)
@ -222,7 +226,11 @@ class StockReconciliation(StockController):
if has_serial_no:
sl_entries = self.merge_similar_item_serial_nos(sl_entries)
self.make_sl_entries(sl_entries)
allow_negative_stock = False
if has_batch_no:
allow_negative_stock = True
self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock)
if has_serial_no and sl_entries:
self.update_valuation_rate_for_serial_no()
@ -493,7 +501,7 @@ def get_stock_balance_for(item_code, warehouse,
qty, rate = data
if item_dict.get("has_batch_no"):
qty = get_batch_qty(batch_no, warehouse) or 0
qty = get_batch_qty(batch_no, warehouse, posting_date=posting_date, posting_time=posting_time) or 0
return {
'qty': qty,

View File

@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
from frappe import _
from frappe.utils import flt, cint, getdate, now, date_diff
from erpnext.stock.utils import add_additional_uom_columns
@ -20,6 +20,11 @@ def execute(filters=None):
from_date = filters.get('from_date')
to_date = filters.get('to_date')
if filters.get("company"):
company_currency = erpnext.get_company_currency(filters.get("company"))
else:
company_currency = frappe.db.get_single_value("Global Defaults", "default_currency")
include_uom = filters.get("include_uom")
columns = get_columns(filters)
items = get_items(filters)
@ -52,6 +57,7 @@ def execute(filters=None):
item_reorder_qty = item_reorder_detail_map[item + warehouse]["warehouse_reorder_qty"]
report_data = {
'currency': company_currency,
'item_code': item,
'warehouse': warehouse,
'company': company,
@ -89,7 +95,6 @@ def execute(filters=None):
def get_columns(filters):
"""return columns"""
columns = [
{"label": _("Item"), "fieldname": "item_code", "fieldtype": "Link", "options": "Item", "width": 100},
{"label": _("Item Name"), "fieldname": "item_name", "width": 150},
@ -97,14 +102,14 @@ def get_columns(filters):
{"label": _("Warehouse"), "fieldname": "warehouse", "fieldtype": "Link", "options": "Warehouse", "width": 100},
{"label": _("Stock UOM"), "fieldname": "stock_uom", "fieldtype": "Link", "options": "UOM", "width": 90},
{"label": _("Balance Qty"), "fieldname": "bal_qty", "fieldtype": "Float", "width": 100, "convertible": "qty"},
{"label": _("Balance Value"), "fieldname": "bal_val", "fieldtype": "Currency", "width": 100},
{"label": _("Balance Value"), "fieldname": "bal_val", "fieldtype": "Currency", "width": 100, "options": "currency"},
{"label": _("Opening Qty"), "fieldname": "opening_qty", "fieldtype": "Float", "width": 100, "convertible": "qty"},
{"label": _("Opening Value"), "fieldname": "opening_val", "fieldtype": "Float", "width": 110},
{"label": _("Opening Value"), "fieldname": "opening_val", "fieldtype": "Currency", "width": 110, "options": "currency"},
{"label": _("In Qty"), "fieldname": "in_qty", "fieldtype": "Float", "width": 80, "convertible": "qty"},
{"label": _("In Value"), "fieldname": "in_val", "fieldtype": "Float", "width": 80},
{"label": _("Out Qty"), "fieldname": "out_qty", "fieldtype": "Float", "width": 80, "convertible": "qty"},
{"label": _("Out Value"), "fieldname": "out_val", "fieldtype": "Float", "width": 80},
{"label": _("Valuation Rate"), "fieldname": "val_rate", "fieldtype": "Currency", "width": 90, "convertible": "rate"},
{"label": _("Valuation Rate"), "fieldname": "val_rate", "fieldtype": "Currency", "width": 90, "convertible": "rate", "options": "currency"},
{"label": _("Reorder Level"), "fieldname": "reorder_level", "fieldtype": "Float", "width": 80, "convertible": "qty"},
{"label": _("Reorder Qty"), "fieldname": "reorder_qty", "fieldtype": "Float", "width": 80, "convertible": "qty"},
{"label": _("Company"), "fieldname": "company", "fieldtype": "Link", "options": "Company", "width": 100}

View File

@ -33,7 +33,7 @@ def execute(filters=None):
actual_qty += flt(sle.actual_qty, precision)
stock_value += sle.stock_value_difference
if sle.voucher_type == 'Stock Reconciliation':
if sle.voucher_type == 'Stock Reconciliation' and not sle.actual_qty:
actual_qty = sle.qty_after_transaction
stock_value = sle.stock_value