From 3b318005333472449fdab8eff6cf34d4bc2d8252 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Thu, 25 Jul 2019 11:22:45 +0530 Subject: [PATCH] fix: Add logic to set batch no [WIP] - Add pick ticket reference item --- .../doctype/pick_ticket/pick_ticket.json | 21 +++++++-- .../stock/doctype/pick_ticket/pick_ticket.py | 46 ++++++++++++------- .../pick_ticket_item/pick_ticket_item.json | 24 ++++++---- .../pick_ticket_reference_item.js | 8 ++++ .../pick_ticket_reference_item.json | 27 +++++++++++ .../pick_ticket_reference_item.py | 10 ++++ 6 files changed, 107 insertions(+), 29 deletions(-) create mode 100644 erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.js create mode 100644 erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.json create mode 100644 erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.py diff --git a/erpnext/stock/doctype/pick_ticket/pick_ticket.json b/erpnext/stock/doctype/pick_ticket/pick_ticket.json index 392786f030..fe331ac3c4 100644 --- a/erpnext/stock/doctype/pick_ticket/pick_ticket.json +++ b/erpnext/stock/doctype/pick_ticket/pick_ticket.json @@ -8,6 +8,8 @@ "company", "column_break_4", "group_warehouse", + "section_break_4", + "reference_document_items", "section_break_6", "items" ], @@ -15,8 +17,9 @@ { "fieldname": "items", "fieldtype": "Table", - "label": "Items", - "options": "Pick Ticket Item" + "label": "Items Locations", + "options": "Pick Ticket Item", + "read_only": 1 }, { "description": "Items under this warehouse will be suggested", @@ -38,9 +41,21 @@ { "fieldname": "section_break_6", "fieldtype": "Section Break" + }, + { + "collapsible": 1, + "fieldname": "section_break_4", + "fieldtype": "Section Break", + "label": "Reference Items" + }, + { + "fieldname": "reference_document_items", + "fieldtype": "Table", + "label": "Reference Document Items", + "options": "Pick Ticket Reference Item" } ], - "modified": "2019-07-24 14:59:44.542987", + "modified": "2019-07-24 16:13:51.668880", "modified_by": "Administrator", "module": "Stock", "name": "Pick Ticket", diff --git a/erpnext/stock/doctype/pick_ticket/pick_ticket.py b/erpnext/stock/doctype/pick_ticket/pick_ticket.py index 8982688451..4c5fdb8297 100644 --- a/erpnext/stock/doctype/pick_ticket/pick_ticket.py +++ b/erpnext/stock/doctype/pick_ticket/pick_ticket.py @@ -14,11 +14,8 @@ def get_pick_list(reference_doctype, reference_name, items_field): reference_doc = frappe.get_doc(reference_doctype, reference_name) doc.company = reference_doc.company items = reference_doc.get(items_field) - add_picklist_items(items, doc, reference_doc) - - doc.insert() - + doc.save() return doc def get_available_items(item): @@ -34,10 +31,12 @@ def get_available_items(item): def get_items_with_warehouse_and_quantity(item_doc, reference_doc): items = [] item_locations = get_available_items(item_doc.item_code) - if not item_locations: return items - remaining_qty = item_doc.qty + if not item_locations: + print('{} qty of {} is out of stock. Skipping...'.format(remaining_qty, item_doc.item)) + return items + while remaining_qty > 0 and item_locations: item_location = item_locations.pop(0) qty = remaining_qty if item_location.qty >= remaining_qty else item_location.qty @@ -59,17 +58,30 @@ def add_picklist_items(reference_items, doc, reference_doc): for item_info in data: doc.append('items', item_info) + doc.insert() + for item in doc.get('items'): if item.has_serial_no: - serial_nos = frappe.get_all('Serial No', { - 'item_code': item.item, - 'warehouse': item.warehouse - }, limit=item.qty, order_by='purchase_date') - item.serial_no = '\n'.join([serial_no.name for serial_no in serial_nos]) + set_serial_nos(item) + elif item.has_batch_no: + set_batch_no(item, doc) - # if item.has_batch_no: - # serial_nos = frappe.get_all('Batch', { - # 'item_code': item.item, - # 'warehouse': item.warehouse - # }, limit=item.qty, order_by='purchase_date') - # item.serial_no = '\n'.join([serial_no.name for serial_no in serial_nos]) \ No newline at end of file +def set_serial_nos(item): + serial_nos = frappe.get_all('Serial No', { + 'item_code': item.item, + 'warehouse': item.warehouse + }, limit=item.qty, order_by='purchase_date') + item.serial_no = '\n'.join([serial_no.name for serial_no in serial_nos]) + +def set_batch_no(item, doc): + batches = frappe.get_all('Stock Ledger Entry', + fields=['batch_no', 'sum(actual_qty) as qty'], + filters={ + 'item_code': item.item, + 'warehouse': item.warehouse + }, + group_by='warehouse, batch_no, item_code') + + if batches: + # TODO: check expiry and split item if batch is more than 1 + item.batch_no = batches[0].batch_no \ No newline at end of file diff --git a/erpnext/stock/doctype/pick_ticket_item/pick_ticket_item.json b/erpnext/stock/doctype/pick_ticket_item/pick_ticket_item.json index 33a42737b1..6db32845e7 100644 --- a/erpnext/stock/doctype/pick_ticket_item/pick_ticket_item.json +++ b/erpnext/stock/doctype/pick_ticket_item/pick_ticket_item.json @@ -33,7 +33,8 @@ "fieldname": "qty", "fieldtype": "Float", "in_list_view": 1, - "label": "Qty" + "label": "Qty", + "read_only": 1 }, { "fieldname": "picked_qty", @@ -46,7 +47,8 @@ "fieldtype": "Link", "in_list_view": 1, "label": "Warehouse", - "options": "Warehouse" + "options": "Warehouse", + "read_only": 1 }, { "fetch_from": "item.item_name", @@ -66,20 +68,22 @@ "fieldname": "reference_document_item", "fieldtype": "Data", "hidden": 1, - "label": "Reference Document Item" + "label": "Reference Document Item", + "read_only": 1 }, { "depends_on": "has_serial_no", "fieldname": "serial_no", "fieldtype": "Small Text", - "label": "Serial No" + "label": "Serial No", + "read_only": 1 }, { - "depends_on": "has_batch_no", "fieldname": "batch_no", "fieldtype": "Link", "label": "Batch No", - "options": "Batch" + "options": "Batch", + "read_only": 1 }, { "default": "0", @@ -106,13 +110,15 @@ "fieldname": "reference_doctype", "fieldtype": "Select", "label": "Reference Document Type", - "options": "Sales Order\nWork Order" + "options": "Sales Order\nWork Order", + "read_only": 1 }, { "fieldname": "reference_name", "fieldtype": "Dynamic Link", "label": "Reference Document", - "options": "reference_doctype" + "options": "reference_doctype", + "read_only": 1 }, { "fieldname": "column_break_2", @@ -124,7 +130,7 @@ } ], "istable": 1, - "modified": "2019-07-24 15:09:35.712289", + "modified": "2019-07-25 11:18:58.478250", "modified_by": "Administrator", "module": "Stock", "name": "Pick Ticket Item", diff --git a/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.js b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.js new file mode 100644 index 0000000000..a3f909659b --- /dev/null +++ b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.js @@ -0,0 +1,8 @@ +// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Pick Ticket Reference Item', { + // refresh: function(frm) { + + // } +}); diff --git a/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.json b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.json new file mode 100644 index 0000000000..446e075686 --- /dev/null +++ b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.json @@ -0,0 +1,27 @@ +{ + "creation": "2019-07-24 16:11:07.415562", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item" + ], + "fields": [ + { + "fieldname": "item", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item", + "options": "Item" + } + ], + "istable": 1, + "modified": "2019-07-24 16:12:58.000378", + "modified_by": "Administrator", + "module": "Stock", + "name": "Pick Ticket Reference Item", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.py b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.py new file mode 100644 index 0000000000..412be75f88 --- /dev/null +++ b/erpnext/stock/doctype/pick_ticket_reference_item/pick_ticket_reference_item.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +# import frappe +from frappe.model.document import Document + +class PickTicketReferenceItem(Document): + pass