feat: Serial and Batch reservation (#35946)

* feat: add `Has Serial No` and `Has Batch No` fields in SRE

* chore: set `Has Serial No` and `Has Batch No` while creating SRE

* feat: add field `Reserved Serial and Batch` in SRE

* fix(ux): hide `Amend` button on cancelled SRE

* fix: add validation for SRE amended doc

* fix(ux): hide `Reserved Serial and Batch` Table for non-serial/batch item

* fix(ux): set `Display Depends On` for `Has Serial No` and `Has Batch No` in SRE

* fix(ux): make `serial_no` and `batch_no` fields read-only based on `has_serial_no` and `has_batch_no`

* chore: remove table `Serial and Batch Entry` fieldlabel

* fix(ux): set warehouse for new row

* fix(ux): make qty field read-only for serial item

* fix(ux): set rows qty to `1` before making the field read-only

* chore: add filters for serial no

* chore: add filters for batch no

* chore: don't show Serial NO if already selected

* chore: hide rate related fields

* feat: add field `Reservation Based On` in SRE

* chore: make `Reserved Qty` field editable in SCR

* chore: add method to get total reserved qty against a voucher

* fix: add validation for `Reserved Qty`

* fix: update SRE status and Voucher's Reserved Qty

* chore: enable `Track Changes` in SRE

* fix: add validation to prevent delivered SRE to get updated

* fix(ux): make fields `Reserved Qty` and `Reservation Based On` read-only for delivered SRE

* fix: consider voucher's delivered qty while calculating max reserved qty

* fix: add UOM validation for SRE Reserved Qty

* fix: SRE warehouse mismatch error in DN

* fix: auto cancel SRE on update if item is fully delivered for the SO

* fix: skip SRE creation for group warehouse

* feat: add `Set Warehouse` field in SO stock reservation dialog

* fix(ux): hide `Add Row` button in SO stock reservation dialog

* fix: group warehouse validation in SO

* fix(ux): don't show Batch No if already selected

* feat: add field `Auto Reserve Serial and Batch Nos` in `Stock Settings`

* refactor: SRE reserved qty validation

* feat: auto serial and batch reservation

* chore: add section for `Serial and Batch Reservation` in `Stock Settings`

* fix: make SRE sb_entries warehouse mandatory

* fix(ux): unreserved qty calculation

* fix: add validation for `Reserved Qty` against `Batch`

* refactor: combine `get_available_qty_to_reserve()` and `get_available_qty_to_reserve_batch()`

* fix: validate disabled batch

* fix: add validation to validate serial nos availability

* fix: update row qty if `Partial Reservation` is enabled

* fix: ignore reserved serial nos while getting available serial nos

* fix: add validation to prevent repeat batches

* fix(ux): add validation for duplicate Serial No

* fix: don't allow to update SRE with delivered stock

* fix: ignore reserved serial and batch if reservation based on is not Serial and Batch

* fix(ux): stock un-reservation confirmation before `Update Items`

* chore: return list instead os set

* feat: add field `Delivered Qty` in `Serial and Batch Entry`

* feat: option to get SO reserved stock in Delivery Note

* fix: ignore reserved batches while getting available batches

* chore: `conflicts`

* fix: incorrect available qty

* fix: 'str' object has no attribute 'nodes_'

* fix: `linter`

* fix(ux): hide `Get Items From > Stock Reservation` if Stock Reservation is disabled

* fix(ux): add `depends_on` for `Auto Reserve Serial and Batch Nos`

* fix(ux): hide Stock Reservation field description in submitted SO

* fix(ux): confirm before unreserve stock

* feat: option to create DN for reserved stock from SO

* fix: update delivered qty in SRE sb_entries

* fix: Delivery Note (Reserved Stock) based on Delivery Date

* fix(ux): SO `Update Items` confirmation on `Update` button click

* feat: add dialog box to select SRE to unreserve

* fix: `ZeroDivisionError` while saving the DN (Reserved Stock)

* fix: don't allow to create Pick List if stock is reserved against SO

* fix(ux): hide Create > Pick List button for SO with reserved stock

* refactor: map reserved stock by default in DN

* refactor: code cleanup and comments

* fix: don't allow Stock Reservation against SO having Pick List

* refactor: `create_stock_reservation_entries()`

* feat: add fields to hold Pick List ref in SRE

* feat: add field `Stock Reserved Qty` in Pick List Item

* feat: provision to reserve stock from Pick List against Sales Order

* fix: don't allow to update SRE if created against a Pick List

* fix(ux): confirm before unreserve stock in Pick List

* fix: don't allow to update Pick List having reserved stock

* fix: circular dependency while cancelling the DN created from Pick List with Reserved Stock

* chore: update `Max Reserve Qty` err msg to be more descriptive

* refactor: rename field `Reserve Stock on Sales Order Submission`

* fix: msg on partial reservation if disabled in stock settings

* chore: add field description for `Enable Stock Reservation`

* fix(test): `test_stock_reservation_against_sales_order`

* fix(test): `test_stock_reservation_against_sales_order`

* test: add test cases for serial and batch reservation

* fix: batch stock levels qty

* refactor: method `get_sre_reserved_qty_for_item_and_warehouse`

* feat: show `Reserved Stock` in item master stock levels

* feat: Reserved Stock Report

* fix(ux): SO stock reservation dialogs width

* refactor: get previous values from `_doc_before_save` instead of db

* fix(ux): make `Reservation Based On` read-only if created against Pick List

* feat: option to open `Reserved Stock` report from Sales Order

* fix(ux): Sales Order - Reserve and Unreserve dialog box

* fix: decrease SRE Delivered Qty on DN cancel

* fix(ux): hide `Unreserve` button once reserved stock is delivered

* chore: `linter`

* fix(test): `test_reserved_stock_report`

* test: add test case for DN cancellation

* chore: rename field `Auto Reserve Stock on Sales Order Submission`

* fix: `Insufficient Stock` error msg
32 files changed
tree: e2272e7c9e69b3a3f4c0c375d6dd8aec5860bcfa
  1. .github/
  2. erpnext/
  3. .editorconfig
  4. .eslintrc
  5. .flake8
  6. .git-blame-ignore-revs
  7. .gitignore
  8. .mergify.yml
  9. .pre-commit-config.yaml
  10. .releaserc
  11. .semgrepignore
  12. attributions.md
  13. CODE_OF_CONDUCT.md
  14. codecov.yml
  15. CODEOWNERS
  16. commitlint.config.js
  17. license.txt
  18. package.json
  19. pyproject.toml
  20. README.md
  21. SECURITY.md
  22. sider.yml
  23. sponsors.md
  24. TRADEMARK_POLICY.md
  25. yarn.lock
README.md

CI UI Open Source Helpers codecov docker pulls

https://erpnext.com

ERPNext as a monolith includes the following areas for managing businesses:

  1. Accounting
  2. Warehouse Management
  3. CRM
  4. Sales
  5. Purchase
  6. HRMS
  7. Project Management
  8. Support
  9. Asset Management
  10. Quality Management
  11. Manufacturing
  12. Website Management
  13. Customize ERPNext
  14. And More

ERPNext is built on the Frappe Framework, a full-stack web app framework built with Python & JavaScript.

Installation

Login for the PWD site: (username: Administrator, password: admin)

Containerized Installation

Use docker to deploy ERPNext in production or for development of Frappe apps. See https://github.com/frappe/frappe_docker for more details.

Manual Install

The Easy Way: our install script for bench will install all dependencies (e.g. MariaDB). See https://github.com/frappe/bench for more details.

New passwords will be created for the ERPNext "Administrator" user, the MariaDB root user, and the frappe user (the script displays the passwords and saves them to ~/frappe_passwords.txt).

Learning and community

  1. Frappe School - Learn Frappe Framework and ERPNext from the various courses by the maintainers or from the community.
  2. Official documentation - Extensive documentation for ERPNext.
  3. Discussion Forum - Engage with community of ERPNext users and service providers.
  4. Telegram Group - Get instant help from huge community of users.

Contributing

  1. Issue Guidelines
  2. Report Security Vulnerabilities
  3. Pull Request Requirements
  4. Translations

License

GNU/General Public License (see license.txt)

The ERPNext code is licensed as GNU General Public License (v3) and the Documentation is licensed as Creative Commons (CC-BY-SA-3.0) and the copyright is owned by Frappe Technologies Pvt Ltd (Frappe) and Contributors.

By contributing to ERPNext, you agree that your contributions will be licensed under its GNU General Public License (v3).

Logo and Trademark Policy

Please read our Logo and Trademark Policy.