fix: Commonify item not available alert
- Reorganise code - UX fixes
This commit is contained in:
parent
0eed0a9abe
commit
744b92d233
@ -39,7 +39,11 @@ frappe.ui.form.on('Pick List', {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
get_item_locations: (frm) => {
|
get_item_locations: (frm) => {
|
||||||
frm.call('set_item_locations');
|
if (!frm.doc.locations || !frm.doc.locations.length) {
|
||||||
|
frappe.msgprint(__('First add items in the Item Locations table'));
|
||||||
|
} else {
|
||||||
|
frm.call('set_item_locations');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
refresh: (frm) => {
|
refresh: (frm) => {
|
||||||
frm.trigger('add_get_items_button');
|
frm.trigger('add_get_items_button');
|
||||||
|
|||||||
@ -130,12 +130,24 @@ def get_items_with_location_and_quantity(item_doc, item_location_map):
|
|||||||
return locations
|
return locations
|
||||||
|
|
||||||
def get_available_item_locations(item_code, from_warehouses, required_qty):
|
def get_available_item_locations(item_code, from_warehouses, required_qty):
|
||||||
|
locations = []
|
||||||
if frappe.get_cached_value('Item', item_code, 'has_serial_no'):
|
if frappe.get_cached_value('Item', item_code, 'has_serial_no'):
|
||||||
return get_available_item_locations_for_serialized_item(item_code, from_warehouses, required_qty)
|
locations = get_available_item_locations_for_serialized_item(item_code, from_warehouses, required_qty)
|
||||||
elif frappe.get_cached_value('Item', item_code, 'has_batch_no'):
|
elif frappe.get_cached_value('Item', item_code, 'has_batch_no'):
|
||||||
return get_available_item_locations_for_batched_item(item_code, from_warehouses, required_qty)
|
locations = get_available_item_locations_for_batched_item(item_code, from_warehouses, required_qty)
|
||||||
else:
|
else:
|
||||||
return get_available_item_locations_for_other_item(item_code, from_warehouses, required_qty)
|
locations = get_available_item_locations_for_other_item(item_code, from_warehouses, required_qty)
|
||||||
|
|
||||||
|
total_qty_available = sum(location.get('qty') for location in locations)
|
||||||
|
|
||||||
|
remaining_qty = required_qty - total_qty_available
|
||||||
|
|
||||||
|
if remaining_qty > 0:
|
||||||
|
frappe.msgprint(_('{0} units of {1} is not available.')
|
||||||
|
.format(remaining_qty, frappe.get_desk_link('Item', item_code)))
|
||||||
|
|
||||||
|
return locations
|
||||||
|
|
||||||
|
|
||||||
def get_available_item_locations_for_serialized_item(item_code, from_warehouses, required_qty):
|
def get_available_item_locations_for_serialized_item(item_code, from_warehouses, required_qty):
|
||||||
filters = frappe._dict({
|
filters = frappe._dict({
|
||||||
@ -153,11 +165,6 @@ def get_available_item_locations_for_serialized_item(item_code, from_warehouses,
|
|||||||
order_by='purchase_date',
|
order_by='purchase_date',
|
||||||
as_list=1)
|
as_list=1)
|
||||||
|
|
||||||
remaining_stock_qty = required_qty - len(serial_nos)
|
|
||||||
if remaining_stock_qty:
|
|
||||||
frappe.msgprint('{0} qty of {1} is not available.'
|
|
||||||
.format(remaining_stock_qty, item_code))
|
|
||||||
|
|
||||||
warehouse_serial_nos_map = frappe._dict()
|
warehouse_serial_nos_map = frappe._dict()
|
||||||
for serial_no, warehouse in serial_nos:
|
for serial_no, warehouse in serial_nos:
|
||||||
warehouse_serial_nos_map.setdefault(warehouse, []).append(serial_no)
|
warehouse_serial_nos_map.setdefault(warehouse, []).append(serial_no)
|
||||||
@ -198,13 +205,6 @@ def get_available_item_locations_for_batched_item(item_code, from_warehouses, re
|
|||||||
'warehouses': from_warehouses
|
'warehouses': from_warehouses
|
||||||
}, as_dict=1)
|
}, as_dict=1)
|
||||||
|
|
||||||
total_qty_available = sum(location.get('qty') for location in batch_locations)
|
|
||||||
|
|
||||||
remaining_qty = required_qty - total_qty_available
|
|
||||||
|
|
||||||
if remaining_qty > 0:
|
|
||||||
frappe.msgprint('No batches found for {} qty of {}.'.format(remaining_qty, item_code))
|
|
||||||
|
|
||||||
return batch_locations
|
return batch_locations
|
||||||
|
|
||||||
def get_available_item_locations_for_other_item(item_code, from_warehouses, required_qty):
|
def get_available_item_locations_for_other_item(item_code, from_warehouses, required_qty):
|
||||||
@ -225,6 +225,7 @@ def get_available_item_locations_for_other_item(item_code, from_warehouses, requ
|
|||||||
|
|
||||||
return item_locations
|
return item_locations
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def create_delivery_note(source_name, target_doc=None):
|
def create_delivery_note(source_name, target_doc=None):
|
||||||
pick_list = frappe.get_doc('Pick List', source_name)
|
pick_list = frappe.get_doc('Pick List', source_name)
|
||||||
@ -323,6 +324,15 @@ def target_document_exists(pick_list_name, purpose):
|
|||||||
|
|
||||||
return stock_entry_exists(pick_list_name)
|
return stock_entry_exists(pick_list_name)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def get_item_details(item_code, uom=None):
|
||||||
|
details = frappe.db.get_value('Item', item_code, ['stock_uom', 'name'], as_dict=1)
|
||||||
|
details.uom = uom or details.stock_uom
|
||||||
|
if uom:
|
||||||
|
details.update(get_conversion_factor(item_code, uom))
|
||||||
|
|
||||||
|
return details
|
||||||
|
|
||||||
|
|
||||||
def update_delivery_note_item(source, target, delivery_note):
|
def update_delivery_note_item(source, target, delivery_note):
|
||||||
cost_center = frappe.db.get_value('Project', delivery_note.project, 'cost_center')
|
cost_center = frappe.db.get_value('Project', delivery_note.project, 'cost_center')
|
||||||
@ -354,16 +364,6 @@ def stock_entry_exists(pick_list_name):
|
|||||||
'pick_list': pick_list_name
|
'pick_list': pick_list_name
|
||||||
})
|
})
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_item_details(item_code, uom=None):
|
|
||||||
details = frappe.db.get_value('Item', item_code, ['stock_uom', 'name'], as_dict=1)
|
|
||||||
details.uom = uom or details.stock_uom
|
|
||||||
if uom:
|
|
||||||
details.update(get_conversion_factor(item_code, uom))
|
|
||||||
|
|
||||||
return details
|
|
||||||
|
|
||||||
|
|
||||||
def update_stock_entry_based_on_work_order(pick_list, stock_entry):
|
def update_stock_entry_based_on_work_order(pick_list, stock_entry):
|
||||||
work_order = frappe.get_doc("Work Order", pick_list.get('work_order'))
|
work_order = frappe.get_doc("Work Order", pick_list.get('work_order'))
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user