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()
|
@frappe.whitelist()
|
||||||
def make_pick_list(source_name, target_doc=None):
|
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, {
|
doc = get_mapped_doc("Work Order", source_name, {
|
||||||
"Work Order": {
|
"Work Order": {
|
||||||
"doctype": "Pick List",
|
"doctype": "Pick List",
|
||||||
@ -720,13 +728,8 @@ def make_pick_list(source_name, target_doc=None):
|
|||||||
},
|
},
|
||||||
"Work Order Item": {
|
"Work Order Item": {
|
||||||
"doctype": "Pick List Reference Item",
|
"doctype": "Pick List Reference Item",
|
||||||
"field_map": {
|
"postprocess": update_item_quantity,
|
||||||
"item_code": "item",
|
"condition": lambda doc: abs(doc.transferred_qty) < abs(doc.required_qty)
|
||||||
"required_qty": "qty",
|
|
||||||
"parenttype": "reference_doctype",
|
|
||||||
"parent": "reference_name",
|
|
||||||
"name": "reference_document_item"
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}, target_doc)
|
}, target_doc)
|
||||||
|
|
||||||
|
@ -1024,7 +1024,7 @@ def make_pick_list(source_name, target_doc=None):
|
|||||||
"name": "sales_order_item"
|
"name": "sales_order_item"
|
||||||
},
|
},
|
||||||
"postprocess": update_item_quantity,
|
"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)
|
}, target_doc)
|
||||||
|
|
||||||
|
@ -28,17 +28,35 @@ frappe.ui.form.on('Pick List', {
|
|||||||
},
|
},
|
||||||
make_delivery_note(frm) {
|
make_delivery_note(frm) {
|
||||||
frappe.model.open_mapped_doc({
|
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
|
frm: frm
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
add_get_items_button(frm) {
|
add_get_items_button(frm) {
|
||||||
frm.remove_custom_button(__("Get items"));
|
frm.remove_custom_button(__("Get items"));
|
||||||
let source_doctype = frm.doc.items_based_on;
|
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';
|
let method = 'erpnext.selling.doctype.sales_order.sales_order.make_pick_list';
|
||||||
if (source_doctype === 'Work Order') {
|
if (source_doctype === 'Work Order') {
|
||||||
method = 'erpnext.manufacturing.doctype.work_order.work_order.make_pick_list';
|
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"), () => {
|
frm.add_custom_button(__("Get items"), () => {
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: method,
|
method: method,
|
||||||
@ -47,10 +65,8 @@ frappe.ui.form.on('Pick List', {
|
|||||||
setters: {
|
setters: {
|
||||||
company: frm.doc.company,
|
company: frm.doc.company,
|
||||||
},
|
},
|
||||||
date_field: 'creation',
|
date_field: date_field,
|
||||||
get_query_filters: {
|
get_query: get_query
|
||||||
docstatus: 1,
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -57,10 +57,10 @@
|
|||||||
"fieldname": "items_based_on",
|
"fieldname": "items_based_on",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Items Based On",
|
"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",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Pick List",
|
"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 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
|
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):
|
class PickList(Document):
|
||||||
def set_item_locations(self):
|
def set_item_locations(self):
|
||||||
reference_items = self.reference_items
|
reference_items = self.reference_items
|
||||||
@ -154,36 +156,6 @@ def get_item_locations_based_on_batch_nos(item_doc):
|
|||||||
if required_qty <= 0:
|
if required_qty <= 0:
|
||||||
break
|
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:
|
if required_qty:
|
||||||
frappe.msgprint('No batches found for {} qty of {}.'.format(required_qty, item_doc.item_code))
|
frappe.msgprint('No batches found for {} qty of {}.'.format(required_qty, item_doc.item_code))
|
||||||
|
|
||||||
@ -251,3 +223,26 @@ def update_delivery_note_item(source, target, delivery_note):
|
|||||||
})
|
})
|
||||||
|
|
||||||
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…
x
Reference in New Issue
Block a user