Auto fetch batches based on quantity on POS (#11004) (#11767)

* prevent premature escape when item has serial no and batch no

* fetch actual_batch_qty for item

* add available_qty to dialog

* remove expired batches from drop-down

* Update queries.py
This commit is contained in:
tundebabzy 2017-11-29 06:23:09 +01:00 committed by Nabin Hait
parent d7216b559f
commit 2a4fefc6ff
3 changed files with 21 additions and 3 deletions

View File

@ -410,3 +410,14 @@ def get_doctype_wise_filters(filters):
for row in filters: for row in filters:
filter_dict[row[0]].append(row) filter_dict[row[0]].append(row)
return filter_dict return filter_dict
@frappe.whitelist()
def get_batch_numbers(doctype, txt, searchfield, start, page_len, filters):
query = 'select batch_id from `tabBatch` ' \
'where (`tabBatch`.expiry_date >= CURDATE() or `tabBatch`.expiry_date IS NULL)'
if filters and filters.get('item_code'):
query += 'where item = %(item_code)s' % filters
return frappe.db.sql(query)

View File

@ -98,11 +98,14 @@ erpnext.SerialNoBatchSelector = Class.extend({
let d = this.item; let d = this.item;
if (d.has_serial_no && d.serial_no) { if (d.has_serial_no && d.serial_no) {
this.dialog.set_value('serial_no', d.serial_no); this.dialog.set_value('serial_no', d.serial_no);
} else if (d.batch_no) { }
if (d.batch_no) {
this.dialog.fields_dict.batches.df.data.push({ this.dialog.fields_dict.batches.df.data.push({
'batch_no': d.batch_no, 'batch_no': d.batch_no,
'actual_qty': d.actual_qty, 'actual_qty': d.actual_qty,
'selected_qty': d.qty 'selected_qty': d.qty,
'available_qty': d.actual_batch_qty
}); });
this.dialog.fields_dict.batches.grid.refresh(); this.dialog.fields_dict.batches.grid.refresh();
@ -204,7 +207,10 @@ erpnext.SerialNoBatchSelector = Class.extend({
label: __('Select Batch'), label: __('Select Batch'),
in_list_view:1, in_list_view:1,
get_query: function() { get_query: function() {
return {filters: {item: me.item_code }}; return {
filters: {item: me.item_code },
query: 'erpnext.controllers.queries.get_batch_numbers'
};
}, },
onchange: function(e) { onchange: function(e) {
let val = this.get_value(); let val = this.get_value();

View File

@ -84,6 +84,7 @@ def get_item_details(args):
if out.has_batch_no and not args.get("batch_no"): if out.has_batch_no and not args.get("batch_no"):
out.batch_no = get_batch_no(out.item_code, out.warehouse, out.qty) out.batch_no = get_batch_no(out.item_code, out.warehouse, out.qty)
out.update(get_batch_qty(out.batch_no, out.warehouse, out.item_code))
if args.transaction_date and item.lead_time_days: if args.transaction_date and item.lead_time_days:
out.schedule_date = out.lead_time_date = add_days(args.transaction_date, out.schedule_date = out.lead_time_date = add_days(args.transaction_date,