fix: Quantity while creating pick list from work order
- Fix get_mapped_doc config to filter items - Fix erroneous condition in get_mapped_doc used for creation of pick_list in sales order Co-authored-by: Nabin Hait <nabinhait@gmail.com>
This commit is contained in:
parent
6450be5e58
commit
1a090432d9
@ -711,6 +711,14 @@ def get_work_order_operation_data(work_order, operation, workstation):
|
||||
|
||||
@frappe.whitelist()
|
||||
def make_pick_list(source_name, target_doc=None):
|
||||
def update_item_quantity(source, target, source_parent):
|
||||
qty = source.required_qty - source.transferred_qty
|
||||
target.qty = qty
|
||||
target.stock_qty = qty
|
||||
target.uom = frappe.get_value('Item', source.item_code, 'stock_uom')
|
||||
target.stock_uom = target.uom
|
||||
target.conversion_factor = 1
|
||||
|
||||
doc = get_mapped_doc("Work Order", source_name, {
|
||||
"Work Order": {
|
||||
"doctype": "Pick List",
|
||||
@ -720,13 +728,8 @@ def make_pick_list(source_name, target_doc=None):
|
||||
},
|
||||
"Work Order Item": {
|
||||
"doctype": "Pick List Reference Item",
|
||||
"field_map": {
|
||||
"item_code": "item",
|
||||
"required_qty": "qty",
|
||||
"parenttype": "reference_doctype",
|
||||
"parent": "reference_name",
|
||||
"name": "reference_document_item"
|
||||
},
|
||||
"postprocess": update_item_quantity,
|
||||
"condition": lambda doc: abs(doc.transferred_qty) < abs(doc.required_qty)
|
||||
},
|
||||
}, target_doc)
|
||||
|
||||
|
@ -1024,7 +1024,7 @@ def make_pick_list(source_name, target_doc=None):
|
||||
"name": "sales_order_item"
|
||||
},
|
||||
"postprocess": update_item_quantity,
|
||||
"conditions": lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1
|
||||
"condition": lambda doc: abs(doc.delivered_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1
|
||||
},
|
||||
}, target_doc)
|
||||
|
||||
|
@ -28,17 +28,35 @@ frappe.ui.form.on('Pick List', {
|
||||
},
|
||||
make_delivery_note(frm) {
|
||||
frappe.model.open_mapped_doc({
|
||||
method: "erpnext.stock.doctype.pick_list.pick_list.make_delivery_note",
|
||||
method: 'erpnext.stock.doctype.pick_list.pick_list.make_delivery_note',
|
||||
frm: frm
|
||||
});
|
||||
},
|
||||
add_get_items_button(frm) {
|
||||
frm.remove_custom_button(__("Get items"));
|
||||
let source_doctype = frm.doc.items_based_on;
|
||||
let date_field = 'transaction_date';
|
||||
let get_query_method = null;
|
||||
let get_query_filters = {
|
||||
docstatus: 1,
|
||||
per_delivered: ['<', 100],
|
||||
status: ['!=', '']
|
||||
};
|
||||
let method = 'erpnext.selling.doctype.sales_order.sales_order.make_pick_list';
|
||||
if (source_doctype === 'Work Order') {
|
||||
method = 'erpnext.manufacturing.doctype.work_order.work_order.make_pick_list';
|
||||
date_field = 'planned_start_date';
|
||||
get_query_method = 'erpnext.stock.doctype.pick_list.pick_list.get_pending_work_orders';
|
||||
get_query_filters = null;
|
||||
}
|
||||
|
||||
let get_query = () => {
|
||||
return {
|
||||
'query': get_query_method,
|
||||
'filters': get_query_filters
|
||||
};
|
||||
};
|
||||
|
||||
frm.add_custom_button(__("Get items"), () => {
|
||||
erpnext.utils.map_current_doc({
|
||||
method: method,
|
||||
@ -47,10 +65,8 @@ frappe.ui.form.on('Pick List', {
|
||||
setters: {
|
||||
company: frm.doc.company,
|
||||
},
|
||||
date_field: 'creation',
|
||||
get_query_filters: {
|
||||
docstatus: 1,
|
||||
}
|
||||
date_field: date_field,
|
||||
get_query: get_query
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -57,10 +57,10 @@
|
||||
"fieldname": "items_based_on",
|
||||
"fieldtype": "Select",
|
||||
"label": "Items Based On",
|
||||
"options": "\nSales Order\nWork Order"
|
||||
"options": "Sales Order\nWork Order"
|
||||
}
|
||||
],
|
||||
"modified": "2019-08-13 19:30:01.151720",
|
||||
"modified": "2019-08-19 12:31:54.023456",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Pick List",
|
||||
|
@ -10,6 +10,8 @@ from frappe.model.mapper import get_mapped_doc, map_child_doc
|
||||
from frappe.utils import floor, flt, today
|
||||
from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note as make_delivery_note_from_sales_order
|
||||
|
||||
# TODO: Prioritize SO or WO group warehouse
|
||||
|
||||
class PickList(Document):
|
||||
def set_item_locations(self):
|
||||
reference_items = self.reference_items
|
||||
@ -154,36 +156,6 @@ def get_item_locations_based_on_batch_nos(item_doc):
|
||||
if required_qty <= 0:
|
||||
break
|
||||
|
||||
# required_qty = item_doc.qty
|
||||
# while required_qty > 0 and batches:
|
||||
# batch = batches.pop()
|
||||
# batch_expiry = frappe.get_value('Batch', batch.batch_no, 'expiry_date')
|
||||
# if batch_expiry and batch_expiry <= frappe.utils.getdate():
|
||||
# frappe.msgprint('Skipping expired Batch {}'.format(batch.batch_no))
|
||||
# continue
|
||||
# item_doc.batch_no = batch.batch_no
|
||||
# if batch.qty >= item_doc.qty:
|
||||
# required_qty = 0
|
||||
# break
|
||||
# else:
|
||||
# # split item_code if quantity of item_code in batch is less that required
|
||||
# # Look for another batch
|
||||
|
||||
# required_qty -= batch.qty
|
||||
# # set quantity of current item_code equal to batch quantity
|
||||
# item_doc.set('qty', batch.qty)
|
||||
# item_doc = parent_doc.append('items', {
|
||||
# 'item_code': item_doc.item_code,
|
||||
# 'qty': required_qty,
|
||||
# 'warehouse': item_doc.warehouse,
|
||||
# 'sales_order': item_doc.sales_order,
|
||||
# 'sales_order_item': item_doc.sales_order_item,
|
||||
# 'uom': item_doc.uom,
|
||||
# 'stock_uom': item_doc.stock_uom,
|
||||
# 'conversion_factor': item_doc.conversion_factor,
|
||||
# 'stock_qty': qty * item_doc.conversion_factor,
|
||||
# })
|
||||
|
||||
if required_qty:
|
||||
frappe.msgprint('No batches found for {} qty of {}.'.format(required_qty, item_doc.item_code))
|
||||
|
||||
@ -250,4 +222,27 @@ def update_delivery_note_item(source, target, delivery_note):
|
||||
'company': delivery_note.company
|
||||
})
|
||||
|
||||
target.cost_center = cost_center
|
||||
target.cost_center = cost_center
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_pending_work_orders(doctype, txt, searchfield, start, page_length, filters, as_dict):
|
||||
return frappe.db.sql("""
|
||||
SELECT
|
||||
`name`, `company`, `planned_start_date`
|
||||
FROM
|
||||
`tabWork Order`
|
||||
WHERE
|
||||
`qty` > `produced_qty`
|
||||
AND `status` not in ('Completed', 'Stopped')
|
||||
AND name like %(txt)s
|
||||
AND docstatus = 1
|
||||
ORDER BY
|
||||
if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), name
|
||||
LIMIT
|
||||
%(start)s, %(page_length)s""",
|
||||
{
|
||||
'txt': "%%%s%%" % txt,
|
||||
'_txt': txt.replace('%', ''),
|
||||
'start': start,
|
||||
'page_length': frappe.utils.cint(page_length),
|
||||
}, as_dict=as_dict)
|
||||
|
Loading…
Reference in New Issue
Block a user