refactor: POS workflow (#20789)
* refactor: add pos invoice doctype replacing sales invoice in POS
* refactor: move pos.py to pos invoice
* feat: add pos invoice merge log doctype
* feat: ability to merge pos invoices into a sales invoice
* feat: [wip] new ui for point of sale
* fix: pos.py moved to pos_invoice
* feat: loyalty points for POS Invoice
* fix: loyalty points on merging
* feat: return against pos invoices
* Merge 'fork/serial-no-selector' into refactor-pos-invoice
* chore: status fix and set warehouse from pos profile
* fix: naming series
* feat: merge pos returns into credit notes
* feat: add pos list action for merging into sales invoices
* feat[UX]: add shortcuts & focus on search after customer selection
* feat: stock validation from previous pos transactions
* Merge 'fork/serial-no-selector' into refactor-pos-invoice
* chore: fix df not found for base_amount precision
* feat: serial no validation from previous pos transactions
* chore: move pos.py into pos page
* feat: pos opening voucher
* feat: link pos closing voucher with opening voucher
* chore: use map_doc instead of get_mapped_doc for better perf
* feat: enforce opening voucher on pos page
* feat: [ui] [wip] point of sale beta ui refactor
* fix: auto fetching serial nos with batch no
* feat: [ui] item details section for new pos ui
* feat: remove item from cart
* refactor: [ui] [wip] split point_of_sale into components
* new payment component
* new numberpad
* fix pos opening status
* move from flex to grids
* fix: search from item selector
* feat: loyalty points as payment method
* feat: pos invoice status
* fix a bug with invalid JSON
* fix: loyalty program ui fixes
* feat: past order list and past order summary
* feat: (minor) setting discount from item details
* fix: adding item before customer selection
* feat: post order submission summary
* save and open draft orders
* fix: item group filter
* fix: item_det not defined while submitting sle
* fix: minor bugs
* fix: minor ux fixes
* feat: show opening time in pos ui
* feat: item and customer images
* feat: emailing and printing an invoice
* fix: item details field edit shows empty alert
* fix: (minor) ux fixes
* chore: rename pos opening voucher to pos opening entry
* chore: (minor) rename pos closing voucher and sub doctypes
* chore: add patch for renaming pos closing doctypes
* fix: negative stock not allowed in pos invoices* default is_pos in pos invoices* fix: transalation
* fix: invoices not getting fetched on pos closing
* fix: indentation
* feat: view / edit customer info
* fix: minor bugs
* fix: minor bug
* fix: patch
* fix: minor ux issues
* fix: remove uppercase status
* refactor: pos closing payment reconciliation
* fix: move pos invoice print formats to pos invoice doctype
* fix: ui issues
* feat: new child doctype to store pos payment mode details
* fix: add to patches.txt
* feat: search by serial no
* chore: [wip] code cleanup
* fix: item not selectable from cart
* chore: [wip] code cleanup
* fix: minor issues
* loyalty points transactions
* default payment mode
* fix: minor fixes
* set correct mop amount with loaylty points
* editing draft invoices from UI
* chore: pos invoice merge log tests
* fix: batch / serial validation in pos ui and on submission
* feat: use onscan js for barcode scan events
* fix: cart header with amount column
* fix: validate batch no and qty in pos transactions
* chore: do not fetch closing balances as opening balance
* feat: show available qty in item selector
* feat: shortcuts
* fix: onscan.js not found
* fix: onscan.js not found
* fix: cannot return partial items
* fix: neagtive stock indicator
* feat: invoice discount
* fix: change available stock on warehouse change
* chore: cleanup code
* fix: pos profile payment method table
* feat: adding same item with different uom
* fix: loyalty points deleted after consolidation
* fix: enter loyalty amount instead of loyalty points
* chore: return print format
* feat: custom fields in pos view
* chore: pos invoice test
* chore: remove offline pos
* fix: cyclic dependency
* fix: cyclic dependency
* patch: remove pos page and order fixes
* chore: little fixes
* fix: patch perf and plural naming
* chore: tidy up pos invoice validation
* chore: move pos closing to accounts
* fix: move pos doctypes to accounts
* fix: move pos doctypes to accounts
* fix: item description in cart
* fix: item description in cart
* chore: loyalty tests
* minor fixes
* chore: rename point of sale beta to point of sale
* chore: reset past order summary on filter change
* chore: add point of sale to accounting desk
* fix: payment reconciliation table in pos closing
* fix: travis
* Update accounting.json
* fix: test cases
* fix: tests
* patch loyalty point entries
* fix: remove test
* default mode of payment is mandatory for pos transaction
* chore: remove unused checks from pos profile
* fix: loyalty point entry patch
* fix: numpad reset and patches
* fix: minor bugs
* fix: travis
* fix: travis
* fix: travis
* fix: travis
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index b8554c8..1a7c15e 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -401,13 +401,30 @@
return warehouse
def update_barcode_value(out):
- from erpnext.accounts.doctype.sales_invoice.pos import get_barcode_data
barcode_data = get_barcode_data([out])
# If item has one barcode then update the value of the barcode field
if barcode_data and len(barcode_data.get(out.item_code)) == 1:
out['barcode'] = barcode_data.get(out.item_code)[0]
+def get_barcode_data(items_list):
+ # get itemwise batch no data
+ # exmaple: {'LED-GRE': [Batch001, Batch002]}
+ # where LED-GRE is item code, SN0001 is serial no and Pune is warehouse
+
+ itemwise_barcode = {}
+ for item in items_list:
+ barcodes = frappe.db.sql("""
+ select barcode from `tabItem Barcode` where parent = %s
+ """, item.item_code, as_dict=1)
+
+ for barcode in barcodes:
+ if item.item_code not in itemwise_barcode:
+ itemwise_barcode.setdefault(item.item_code, [])
+ itemwise_barcode[item.item_code].append(barcode.get("barcode"))
+
+ return itemwise_barcode
+
@frappe.whitelist()
def get_item_tax_info(company, tax_category, item_codes):
out = {}