Compare commits

..

116 Commits

Author SHA1 Message Date
Frappe PR Bot
3e61e76317 chore(release): Bumped to Version 14.18.3
## [14.18.3](https://github.com/frappe/erpnext/compare/v14.18.2...v14.18.3) (2023-03-14)

### Bug Fixes

* `BOM Stock Report` ([1c00077](1c0007768b))
* `required_qty` get reset to `1` for Alternative Item in WO ([51bcdb3](51bcdb32f2))
* Don't use get_list & get_all interchangeably ([27c524e](27c524e337))
* Error in consolidated financial statement ([#34330](https://github.com/frappe/erpnext/issues/34330)) ([73866f4](73866f4da7))
* exchange rate revaluation errors ([#33947](https://github.com/frappe/erpnext/issues/33947)) ([1a629b6](1a629b6418))
* filters not getting applied on `Web Form` ([6ef7ddf](6ef7ddfbce))
* Linked invoice cancellation issue via timesheet ([#34337](https://github.com/frappe/erpnext/issues/34337)) ([da8cc2b](da8cc2bba9))
* operation time for multi-level BOM in WO ([76e04c8](76e04c8625))
* Set contact filter link in Opportunity ([#34325](https://github.com/frappe/erpnext/issues/34325)) ([c64836d](c64836d3d6))
* set tax category from address before executing `get_regional_address_details` ([#34372](https://github.com/frappe/erpnext/issues/34372)) ([bf0cbe0](bf0cbe09b9))
* **test:** flaky test case in Payment terms report ([69a5411](69a5411f0e))
* Total row in trail balance report ([#34395](https://github.com/frappe/erpnext/issues/34395)) ([c353ba7](c353ba741c))
* Use customer name instead of name(id) in PSOA (backport [#34412](https://github.com/frappe/erpnext/issues/34412)) ([#34425](https://github.com/frappe/erpnext/issues/34425)) ([209adf3](209adf32a5))

### Performance Improvements

* `update_completed_qty()` in `material_request.py` ([b37712c](b37712c038))
* Stock Entry (Material Transfer) ([1b51463](1b514632d2))

### Reverts

* Revert "Update tr.csv (backport #34285)" (#34427) ([b6d059c](b6d059ccb8)), closes [#34285](https://github.com/frappe/erpnext/issues/34285) [#34427](https://github.com/frappe/erpnext/issues/34427) [#34285](https://github.com/frappe/erpnext/issues/34285)
* Revert "fix: Default sales team not getting set" (#34376) ([ed338b1](ed338b1395)), closes [#34376](https://github.com/frappe/erpnext/issues/34376) [#34376](https://github.com/frappe/erpnext/issues/34376) [#34284](https://github.com/frappe/erpnext/issues/34284)
2023-03-14 17:37:03 +00:00
Deepesh Garg
c44579ff52 Merge pull request #34442 from frappe/version-14-hotfix
chore: release v14
2023-03-14 23:05:05 +05:30
Sagar Sharma
3f7e82f8b1 Merge pull request #34448 from frappe/mergify/bp/version-14-hotfix/pr-34415
fix: operation time for multi-level BOM in WO (backport #34415)
2023-03-14 19:55:38 +05:30
Sagar Sharma
6787a1fe91 Merge branch 'version-14-hotfix' into mergify/bp/version-14-hotfix/pr-34415 2023-03-14 18:55:51 +05:30
Sagar Sharma
12fa080c00 Merge pull request #34450 from frappe/mergify/bp/version-14-hotfix/pr-34381
chore: fix french translation (backport #34381)
2023-03-14 18:55:07 +05:30
HENRY Florian
6303d2d8e1 chore: fix french translation (#34381)
chore: update french translation
(cherry picked from commit d267111e13)
2023-03-14 13:20:05 +00:00
s-aga-r
76e04c8625 fix: operation time for multi-level BOM in WO
(cherry picked from commit 442ee3adba)
2023-03-14 13:18:30 +00:00
mergify[bot]
c353ba741c fix: Total row in trail balance report (#34395)
fix: Total row in trail balance report (#34395)

* fix: Total row in trail balance report

* fix: Calculate total after preparing opening and closing

(cherry picked from commit c6999fc687)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-14 15:08:33 +05:30
mergify[bot]
bf0cbe09b9 fix: set tax category from address before executing get_regional_address_details (#34372)
fix: set tax category from address before executing `get_regional_address_details` (#34372)

(cherry picked from commit 5c06620f97)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2023-03-13 21:15:43 +05:30
mergify[bot]
630386fd8c chore: Move source and campaign to additional info section (#34414)
* chore: Move source and campaign to additional info section (#34414)

(cherry picked from commit c8cc3fc65f)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json

* chore: resolve conflicts

---------

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-13 21:11:49 +05:30
mergify[bot]
209adf32a5 fix: Use customer name instead of name(id) in PSOA (backport #34412) (#34425)
fix: Use customer name instead of name(id) in PSOA (#34412)

(cherry picked from commit fa776d2987)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-13 21:11:22 +05:30
Deepesh Garg
b6d059ccb8 Revert "Update tr.csv (backport #34285)" (#34427)
Revert "Update tr.csv (#34285)"

This reverts commit 5266a7e8a7.
2023-03-13 19:43:26 +05:30
mergify[bot]
da8cc2bba9 fix: Linked invoice cancellation issue via timesheet (#34337)
fix: Linked invoice cancellation issue via timesheet (#34337)

(cherry picked from commit 4416ddc4af)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-13 18:58:54 +05:30
mergify[bot]
af629f92f0 test: fix hypothesis tests (backport #34416) (#34418)
test: fix hypothesis tests (#34416)

(cherry picked from commit b8a61be080)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-03-13 15:28:30 +05:30
mergify[bot]
5266a7e8a7 Update tr.csv (#34285)
chore: Improve Turkish language translation

chore: Improve Turkish language translation
(cherry picked from commit fa6d37542b)

Co-authored-by: Mehmet Demirel <unibravo@gmail.com>
2023-03-13 14:03:38 +05:30
mergify[bot]
73866f4da7 fix: Error in consolidated financial statement (#34330)
fix: Error in consolidated financial statement (#34330)

(cherry picked from commit aae53bb910)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-13 14:03:02 +05:30
ruthra kumar
b0c5f5594d Merge pull request #34413 from frappe/mergify/bp/version-14-hotfix/pr-34408
chore: delete remarks migration patch (backport #34408)
2023-03-13 10:24:42 +05:30
ruthra kumar
502a45e54f chore: delete remarks migration patch
Versions higher than V14.18.2, 'remarks' will be moved in 'migrate_gl_to_payment_ledger'

(cherry picked from commit da37573b73)
2023-03-13 03:45:17 +00:00
ruthra kumar
f854316eb2 Merge pull request #34405 from frappe/mergify/bp/version-14-hotfix/pr-34387
refactor(patch): remove inner join to improve SQL performance (backport #34387)
2023-03-12 13:16:01 +05:30
ruthra kumar
0b184667fc chore: remove remarks migrations patch from patches.txt
'Remarks' field is moved in migrate_gl_to_payment_ledger patch itself
from versions highers than v14.18.2. Removing it from patches.txt

(cherry picked from commit 9d0a1149d8)
2023-03-12 11:08:34 +05:30
ruthra kumar
3923044d88 Merge pull request #34400 from frappe/mergify/bp/version-14-hotfix/pr-34370
fix(test): flaky test case in Payment terms report (backport #34370)
2023-03-11 21:29:56 +05:30
ruthra kumar
0ef1d1b2ae refactor: add remarks to column as well
(cherry picked from commit 1744f1d4e4)
2023-03-11 15:31:17 +00:00
ruthra kumar
e6de87a1b7 refactor(patch): remove inner join to improve SQL performance
(cherry picked from commit f9cfabf78e)
2023-03-11 15:31:16 +00:00
mergify[bot]
c64836d3d6 fix: Set contact filter link in Opportunity (#34325)
fix: Set contact filter link in Opportunity (#34325)

Co-authored-by: Nihantra C. Patel <n.patel.serpentcs@gmail.com>
(cherry picked from commit 71de72bdd0)

Co-authored-by: Solufyin <34390782+Solufyin@users.noreply.github.com>
2023-03-11 19:05:26 +05:30
ruthra kumar
69a5411f0e fix(test): flaky test case in Payment terms report
(cherry picked from commit 7fcd74ed03)
2023-03-11 08:49:03 +00:00
Sagar Sharma
29c58b6f75 Merge pull request #34384 from frappe/mergify/bp/version-14-hotfix/pr-34383
fix: filters not getting applied on `Web Form` (backport #34383)
2023-03-10 13:48:38 +05:30
s-aga-r
6ef7ddfbce fix: filters not getting applied on Web Form
(cherry picked from commit 9c1e566394)
2023-03-09 18:55:03 +00:00
gavin
27c524e337 fix: Don't use get_list & get_all interchangeably
fix: Fetch all fields via get_returned_qty_map_for_row
2023-03-09 16:05:37 +05:30
Frappe PR Bot
fcbcbc0aa7 chore(release): Bumped to Version 14.18.2
## [14.18.2](https://github.com/frappe/erpnext/compare/v14.18.1...v14.18.2) (2023-03-09)

### Reverts

* Revert "fix: Default sales team not getting set" (#34376) ([f71d85d](f71d85d7c3)), closes [#34376](https://github.com/frappe/erpnext/issues/34376) [#34376](https://github.com/frappe/erpnext/issues/34376) [#34284](https://github.com/frappe/erpnext/issues/34284)
2023-03-09 10:26:37 +00:00
Deepesh Garg
7ca3130010 Merge pull request #34379 from frappe/mergify/bp/version-14/pr-34377
Revert "fix: Default sales team not getting set" (backport #34376) (backport #34377)
2023-03-09 15:43:17 +05:30
mergify[bot]
f71d85d7c3 Revert "fix: Default sales team not getting set" (#34376)
Revert "fix: Default sales team not getting set" (#34376)

Revert "fix: Default sales team not getting set (#34284)"

This reverts commit 7d0199d743.

(cherry picked from commit 9a8f8e8b7d)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
(cherry picked from commit ed338b1395)
2023-03-09 10:11:18 +00:00
mergify[bot]
ed338b1395 Revert "fix: Default sales team not getting set" (#34376)
Revert "fix: Default sales team not getting set" (#34376)

Revert "fix: Default sales team not getting set (#34284)"

This reverts commit 7d0199d743.

(cherry picked from commit 9a8f8e8b7d)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-03-09 15:39:56 +05:30
Sagar Sharma
9f0dff9e7a Merge pull request #34368 from frappe/mergify/bp/version-14-hotfix/pr-34360
chore: `Alternative Item Code` error msg (backport #34360)
2023-03-09 11:10:13 +05:30
Sagar Sharma
31f9d23b17 Merge branch 'version-14-hotfix' into mergify/bp/version-14-hotfix/pr-34360 2023-03-09 11:09:48 +05:30
Sagar Sharma
ce8e3e92dd Merge pull request #34366 from frappe/mergify/bp/version-14-hotfix/pr-34362
fix: `required_qty` get reset to `1` for Alternative Item in WO (backport #34362)
2023-03-09 11:09:25 +05:30
s-aga-r
c734a78f3c chore: Alternative Item Code error msg
(cherry picked from commit baef5ae1ef)
2023-03-09 04:38:21 +00:00
s-aga-r
51bcdb32f2 fix: required_qty get reset to 1 for Alternative Item in WO
(cherry picked from commit 046834a97a)
2023-03-09 04:35:58 +00:00
Sagar Sharma
68b9581176 Merge pull request #34356 from frappe/mergify/bp/version-14-hotfix/pr-34352
fix: `BOM Stock Report` (backport #34352)
2023-03-08 17:45:52 +05:30
s-aga-r
df98e25312 test: add test cases for BOM Stock Report
(cherry picked from commit b53dcb04ed)
2023-03-08 10:56:44 +00:00
s-aga-r
1c0007768b fix: BOM Stock Report
(cherry picked from commit a65b80911b)
2023-03-08 10:56:44 +00:00
Deepesh Garg
d42af42cec Merge pull request #34331 from frappe/mergify/bp/version-14-hotfix/pr-33947
fix: exchange rate revaluation errors (backport #33947)
2023-03-08 13:07:04 +05:30
Frappe PR Bot
cfe28663bc chore(release): Bumped to Version 14.18.1
## [14.18.1](https://github.com/frappe/erpnext/compare/v14.18.0...v14.18.1) (2023-03-07)

### Performance Improvements

* `update_completed_qty()` in `material_request.py` ([7a5f7d4](7a5f7d4920))
* Stock Entry (Material Transfer) ([59a415e](59a415eaa9))
2023-03-07 17:23:00 +00:00
Sagar Sharma
943599f3ac Merge pull request #34342 from frappe/mergify/bp/version-14/pr-34335
perf: Stock Entry (Material Transfer) (backport #34313) (backport #34335)
2023-03-07 22:51:22 +05:30
s-aga-r
7a5f7d4920 perf: update_completed_qty() in material_request.py
(cherry picked from commit 8ad9e99cea)
(cherry picked from commit b37712c038)
2023-03-07 16:14:55 +00:00
s-aga-r
59a415eaa9 perf: Stock Entry (Material Transfer)
(cherry picked from commit de18f98c5c)
(cherry picked from commit 1b514632d2)
2023-03-07 16:14:55 +00:00
Sagar Sharma
a18c4c839e Merge pull request #34335 from frappe/mergify/bp/version-14-hotfix/pr-34313
perf: Stock Entry (Material Transfer) (backport #34313)
2023-03-07 21:43:05 +05:30
Frappe PR Bot
0696128acc chore(release): Bumped to Version 14.18.0
# [14.18.0](https://github.com/frappe/erpnext/compare/v14.17.4...v14.18.0) (2023-03-07)

### Bug Fixes

* `Inventory Dimension` for `Stock Reconciliation` ([b08cdc0](b08cdc00f2))
* `rejected_serial_no` not getting copied from PR to PR(Return) ([3db8258](3db82587eb))
* `Serial No is mandatory` even if the `qty` is `0` ([aa6b891](aa6b891ef0))
* BOM Update log not completed ([235ecca](235ecca9fa))
* consumed qty validation for subcontracting receipt ([7eccf43](7eccf431fd))
* Default sales team not getting set ([#34284](https://github.com/frappe/erpnext/issues/34284)) ([64c758d](64c758d0c0))
* Do not calculate commission post submit ([#34267](https://github.com/frappe/erpnext/issues/34267)) ([480797e](480797e856))
* labels name ([5e9f1df](5e9f1dfbb3))
* **minor:** Dirty the form after clicking on Get advances button in Invoices ([#34323](https://github.com/frappe/erpnext/issues/34323)) ([0e9f9c3](0e9f9c31a0))
* Payment Request against sales order with disabled rounded total ([#34281](https://github.com/frappe/erpnext/issues/34281)) ([ca59c69](ca59c699cd))
* Performance improvement when adding a new item ([#34195](https://github.com/frappe/erpnext/issues/34195)) ([71a281f](71a281fb11))
* Resolve conflicts ([f6469d8](f6469d8398))
* Stock Reconciliation `actual_qty` ([d97c1bf](d97c1bf0f4))
* update inventory dimensions before returning sle ([ab73742](ab737424c2))
* Wrap unexpectedly long text in remark ([b13bf1e](b13bf1ebc5))

### Features

* adjust purchase receipt valuation rate as per purchase invoice rate ([db033c6](db033c6862))

### Reverts

* Revert "refactor: use renamed timezone utils (#34301)" ([a2e001a](a2e001a2da)), closes [#34301](https://github.com/frappe/erpnext/issues/34301) [#34301](https://github.com/frappe/erpnext/issues/34301)
2023-03-07 14:26:16 +00:00
Deepesh Garg
1cf79f05c5 Merge pull request #34327 from frappe/version-14-hotfix
chore: release v14
2023-03-07 19:54:30 +05:30
s-aga-r
b37712c038 perf: update_completed_qty() in material_request.py
(cherry picked from commit 8ad9e99cea)
2023-03-07 12:33:48 +00:00
s-aga-r
1b514632d2 perf: Stock Entry (Material Transfer)
(cherry picked from commit de18f98c5c)
2023-03-07 12:33:47 +00:00
Deepesh Garg
a2e001a2da Revert "refactor: use renamed timezone utils (#34301)"
Revert "refactor: use renamed timezone utils (#34301)"

This reverts commit 164933aae8.
2023-03-07 17:56:57 +05:30
Devin Slauenwhite
1a629b6418 fix: exchange rate revaluation errors (#33947)
* fix: set new balance for non-positive balances

* fix: don't add debit: 0, credit: 0 entries to journal entry.

* fix: add journal entry difference to unbooked gain/loss of exchange.

* chore: linter

* chore: remove invlaid TODO. [skip-ci]

(cherry picked from commit 6de826b8c4)
2023-03-07 11:46:58 +00:00
Frappe PR Bot
a59c580480 chore(release): Bumped to Version 14.17.4
## [14.17.4](https://github.com/frappe/erpnext/compare/v14.17.3...v14.17.4) (2023-03-02)

### Bug Fixes

* `rejected_serial_no` not getting copied from PR to PR(Return) ([9930adc](9930adcd28))
* `Serial No is mandatory` even if the `qty` is `0` ([7629caa](7629caa647))
2023-03-02 08:08:44 +00:00
Sagar Sharma
ba1cfa992d Merge pull request #34277 from frappe/mergify/bp/version-14/pr-34275
fix: `rejected_serial_no` not getting copied from PR to PR(Return) (backport #34273) (backport #34275)
2023-03-02 13:34:32 +05:30
s-aga-r
7629caa647 fix: Serial No is mandatory even if the qty is 0
(cherry picked from commit cb0b6de4b9)
(cherry picked from commit aa6b891ef0)
2023-03-02 07:35:46 +00:00
s-aga-r
9930adcd28 fix: rejected_serial_no not getting copied from PR to PR(Return)
(cherry picked from commit a9f0a11ce6)
(cherry picked from commit 3db82587eb)
2023-03-02 07:35:45 +00:00
Frappe PR Bot
60a1e10b11 chore(release): Bumped to Version 14.17.3
## [14.17.3](https://github.com/frappe/erpnext/compare/v14.17.2...v14.17.3) (2023-03-01)

### Bug Fixes

* consumed qty validation for subcontracting receipt ([6ba9750](6ba97504ed))
2023-03-01 10:22:45 +00:00
rohitwaghchaure
1b578483f4 Merge pull request #34261 from frappe/mergify/bp/version-14/pr-34260
fix: consumed qty validation for subcontracting receipt (backport #34254) (backport #34260)
2023-03-01 15:41:54 +05:30
Rohit Waghchaure
6ba97504ed fix: consumed qty validation for subcontracting receipt
(cherry picked from commit b38fe24090)
(cherry picked from commit 7eccf431fd)
2023-03-01 10:10:02 +00:00
Frappe PR Bot
cc4448b5d5 chore(release): Bumped to Version 14.17.2
## [14.17.2](https://github.com/frappe/erpnext/compare/v14.17.1...v14.17.2) (2023-02-28)

### Bug Fixes

* conversion factor not set ([089c7d0](089c7d0a37))
* currency in coa import ([#34174](https://github.com/frappe/erpnext/issues/34174)) ([4d92d46](4d92d469e4))
* default date in Subcontracting reports ([5fce8e2](5fce8e2700))
* german translations ([#31732](https://github.com/frappe/erpnext/issues/31732)) ([88a781f](88a781fa43))
* incorrect acc depr amount if multiple FBs with straight line or manual method ([dda6bae](dda6baea3e))
* incorrect color in the BOM Stock Report ([001ed9e](001ed9e9ff))
* manual depr schedule ([971c072](971c0720e5))
* multiple pos conversion issue resolved ([db964e8](db964e8256))
* not able to repost gl entries ([ae0318e](ae0318ef74))
* permission error while calling get_work_order_items ([3ea90ee](3ea90ee5cb))
* pos return throwing amount greater than grand total ([9cd7b27](9cd7b27ce0))
* Remove missing DocField in fetch_from ([dc6ae46](dc6ae46d59))
* set `from_warehouse` and `to_warehouse` while mapping SE ([80e23d0](80e23d035e))
* **test:** use standalone method to fetch work orders from SO ([1719884](17198844c0))
* ui freeze on item selection in sales invoice ([1750ed4](1750ed4fb6))
* user shouldn't able to make item price for item template ([fb8e45d](fb8e45d3d9))
* zero division error while making LCV ([1859be6](1859be6fef))

### Performance Improvements

* fetch SLE's on demand and memoize ([db1f17e](db1f17e5bc))

### Reverts

* Revert "fix: Concurrency issues in Sales and Purchase returns" (#34202) ([9341d3e](9341d3e60e)), closes [#34202](https://github.com/frappe/erpnext/issues/34202) [#34019](https://github.com/frappe/erpnext/issues/34019)
2023-02-28 13:29:26 +00:00
ruthra kumar
60ab0d3981 Merge pull request #34238 from frappe/version-14-hotfix
chore: release v14
2023-02-28 18:57:57 +05:30
Frappe PR Bot
cb266cd1c6 chore(release): Bumped to Version 14.17.1
## [14.17.1](https://github.com/frappe/erpnext/compare/v14.17.0...v14.17.1) (2023-02-24)

### Reverts

* Revert "fix: Concurrency issues in Sales and Purchase returns" (#34202) ([3c2e21e](3c2e21e2ae)), closes [#34202](https://github.com/frappe/erpnext/issues/34202) [#34019](https://github.com/frappe/erpnext/issues/34019)
2023-02-24 10:07:56 +00:00
Deepesh Garg
d6d1238974 Merge pull request #34204 from frappe/mergify/bp/version-14/pr-34203
Revert "fix: Concurrency issues in Sales and Purchase returns" (backport #34202) (backport #34203)
2023-02-24 15:36:02 +05:30
Deepesh Garg
3c2e21e2ae Revert "fix: Concurrency issues in Sales and Purchase returns" (#34202)
Revert "fix: Concurrency issues in Sales and Purchase returns (#34019)"

This reverts commit a67284e96d.

(cherry picked from commit e26c6dc76b)
(cherry picked from commit 9341d3e60e)
2023-02-24 10:03:47 +00:00
Frappe PR Bot
0d986a2ac4 chore(release): Bumped to Version 14.17.0
# [14.17.0](https://github.com/frappe/erpnext/compare/v14.16.1...v14.17.0) (2023-02-21)

### Bug Fixes

* asset repair status after deletion and asset status after manual depr entry ([03f07a2](03f07a20e7))
* asset_depreciation_and_balances report doesn't reflect manual depr entries ([1535c3d](1535c3d856))
* change parameter name for letter head ([4f37ba9](4f37ba9cfe))
* check for duplicate in pos closing and pos merge log entry ([05d6490](05d649087b))
* consider rounded total amount while making payment request ([#34110](https://github.com/frappe/erpnext/issues/34110)) ([7879564](78795643cc))
* create `Delivery Trip` from `Delivery Note` list ([ba5ea88](ba5ea886cf))
* differency entry journal debit/credit missing ([#34104](https://github.com/frappe/erpnext/issues/34104)) ([7556739](75567391a7))
* Filters in item-wise sales history report ([#34145](https://github.com/frappe/erpnext/issues/34145)) ([44c837f](44c837f862))
* fiscal year error for existing assets in fixed asset register ([7074c2b](7074c2b161))
* forced delete linked desktop_icons (backport [#34107](https://github.com/frappe/erpnext/issues/34107)) ([#34130](https://github.com/frappe/erpnext/issues/34130)) ([53ab4d9](53ab4d92e8))
* ignore repost payment ledger on basic documents cancellation ([#34054](https://github.com/frappe/erpnext/issues/34054)) ([9890cce](9890cce680))
* incorrect consumed qty in subcontracting receipt ([d5f6a5d](d5f6a5d193))
* inventory dimension filter not overriding with existing filter for stock ledger report ([6959283](6959283893))
* linters issue ([f65e471](f65e471a75))
* opening_accumulated_depreciation and precision in charts ([47cc8ab](47cc8ab6c6))
* purchase invoice performance issue ([8d98599](8d98599a6c))
* rename duplicate field name with same type into a DocType to avoid import Error ([#34053](https://github.com/frappe/erpnext/issues/34053)) ([d783168](d7831685af))
* show Purchase Order Portal `Pay` button based on configuration ([84da0c6](84da0c6f1e))
* update `reserved_qty` when `Sales Order` marked as `Hold` ([15898cc](15898cc2ec))
* Use normal rounding for Tax Withholding Category ([#34114](https://github.com/frappe/erpnext/issues/34114)) ([65aec3e](65aec3e4ff))
* **ux:** `ReferenceError: me is not defined` Delivery Note ([7bd04c2](7bd04c27c8))

### Features

* allow to make in transit transfer entry from material request ([a7b682e](a7b682e26b))
* Editable Sales Invoice ([#32625](https://github.com/frappe/erpnext/issues/32625)) ([00eb632](00eb6329a7))
* provision to convert transaction based reposting to item warehouse based reposting ([72c0b22](72c0b2208f))
* translate fixtures during runtime, not installation ([#33996](https://github.com/frappe/erpnext/issues/33996)) ([d117de7](d117de7813))
2023-02-21 17:17:32 +00:00
Deepesh Garg
9aa25c4373 Merge pull request #34161 from frappe/version-14-hotfix
chore: release v14
2023-02-21 22:45:54 +05:30
Frappe PR Bot
e82c101b13 chore(release): Bumped to Version 14.16.1
## [14.16.1](https://github.com/frappe/erpnext/compare/v14.16.0...v14.16.1) (2023-02-15)

### Bug Fixes

* asset_depreciation_and_balances report doesn't reflect manual depr entries ([7692db2](7692db27bd))
* opening_accumulated_depreciation and precision in charts ([4a209fc](4a209fcb7c))
2023-02-15 10:33:52 +00:00
Anand Baburajan
a934cf0d92 Merge pull request #34074 from frappe/mergify/bp/version-14/pr-34058
fix: manual depr entries in asset_depreciations_and_balances report and some misc bugs [v14] (backport #34058)
2023-02-15 16:02:16 +05:30
anandbaburajan
7692db27bd fix: asset_depreciation_and_balances report doesn't reflect manual depr entries
(cherry picked from commit 1535c3d856)
2023-02-15 08:36:28 +00:00
anandbaburajan
be2ddd1536 chore: break look if je processed
(cherry picked from commit a220dc0c9c)
2023-02-15 08:36:28 +00:00
anandbaburajan
4a209fcb7c fix: opening_accumulated_depreciation and precision in charts
(cherry picked from commit 47cc8ab6c6)
2023-02-15 08:36:28 +00:00
Frappe PR Bot
26c9782960 chore(release): Bumped to Version 14.16.0
# [14.16.0](https://github.com/frappe/erpnext/compare/v14.15.1...v14.16.0) (2023-02-14)

### Bug Fixes

* `amount` in `Material Request` ([f1dd923](f1dd923a50))
* `get_picked_items_details` ([7afbd92](7afbd9201d))
* `pymysql.err.ProgrammingError` ([aa3dd33](aa3dd33f56))
* Add missing 1 required positional argument: 'bill_date' ([ced9274](ced9274d1b))
* add payment hook to point of sale JS ([#33988](https://github.com/frappe/erpnext/issues/33988)) ([49fd712](49fd712966))
* allow PI cancel if linked asset is cancelled ([c98b2b5](c98b2b5918))
* Amount for debit and credit notes with 0 qty line items ([#33902](https://github.com/frappe/erpnext/issues/33902)) ([87a8c17](87a8c17314))
* Amount validation in Payment Request against Purchase Order ([#34042](https://github.com/frappe/erpnext/issues/34042)) ([c7c6123](c7c61239a3))
* BOM import failed as importer use same label field for Raw MaterialsItem table and Scrap Item table ([47d17f4](47d17f4136))
* Concurrency issues in Sales and Purchase returns ([#34019](https://github.com/frappe/erpnext/issues/34019)) ([087333a](087333abcb))
* consider `stock_qty` if `picked_qty` is zero ([df72e4a](df72e4a221))
* consider existing pick list ([466a791](466a791f68))
* currency formatting in item-wise sales history ([#33903](https://github.com/frappe/erpnext/issues/33903)) ([8e2d7bb](8e2d7bb44a))
* default due_date was wrong calculated on template "_Test Payment Term Template 1" (last day of next month) ([c8c9c50](c8c9c50993))
* **ecommerce:** throw invalid doctype error in shop by category ([#33901](https://github.com/frappe/erpnext/issues/33901)) ([1d0e71b](1d0e71bfe5))
* failed test, convert date time to string ([7228a49](7228a492ef))
* german chart of accounts "SKR03" ([#33909](https://github.com/frappe/erpnext/issues/33909)) ([02c4c55](02c4c55adc))
* Ignore mandatory fields while creating tax templates for new companies ([#34005](https://github.com/frappe/erpnext/issues/34005)) ([b0ed3c8](b0ed3c8aed))
* Ignore Payment Ledger Entry on dunning cancel (backport [#34025](https://github.com/frappe/erpnext/issues/34025)) ([#34028](https://github.com/frappe/erpnext/issues/34028)) ([699e93e](699e93e17f))
* incorrect actual qty in Bin ([01ff6a1](01ff6a1f19))
* IntegrityError while cancelling journals against cr note ([c71d035](c71d03555f))
* list view for Terms and Conditions ([#33925](https://github.com/frappe/erpnext/issues/33925)) ([bb8e232](bb8e232aea))
* negative stock error ([e0cd6c2](e0cd6c20a3))
* set per_billed based on hours when amounts are zero ([#33984](https://github.com/frappe/erpnext/issues/33984)) ([5270fbe](5270fbe01a))
* should never get cutomer price on purchase document ([#34002](https://github.com/frappe/erpnext/issues/34002)) ([6fe7600](6fe7600844)), closes [#33998](https://github.com/frappe/erpnext/issues/33998)
* stock entry from item dashboard (stock levels) ([04a474d](04a474d0a1))
* **test:** `test_pick_list_for_items_with_multiple_UOM()` ([7124c0c](7124c0ca30))
* unwanted difference amount calculation on cr note and invoice with same currency ([#34020](https://github.com/frappe/erpnext/issues/34020)) ([cbafc51](cbafc51e75))

### Features

* Add filters in Loan Interest Report ([#33907](https://github.com/frappe/erpnext/issues/33907)) ([52bfb66](52bfb66729))
* add incoterm named place to RFQ ([68a1615](68a1615eae))
* mandatory and mandatory depends on in inventory dimension ([3aca84c](3aca84c43f))
* Setting to allow Sales Order creation against expired quotation ([#33952](https://github.com/frappe/erpnext/issues/33952)) ([4d0e27e](4d0e27ed2b))

### Performance Improvements

* reduce memory usage by paging through records ([3ce8dc7](3ce8dc70cb))
* reduce memory usage while migrating remarks ([c191a3f](c191a3f7c6))
2023-02-14 10:38:44 +00:00
Deepesh Garg
7dee5207df Merge pull request #34051 from frappe/version-14-hotfix
chore: release v14
2023-02-14 16:06:52 +05:30
Frappe PR Bot
171df32407 chore(release): Bumped to Version 14.15.1
## [14.15.1](https://github.com/frappe/erpnext/compare/v14.15.0...v14.15.1) (2023-02-01)

### Bug Fixes

* incorrect actual qty in Bin ([4c238f1](4c238f1871))
2023-02-01 17:46:44 +00:00
rohitwaghchaure
e927f30654 Merge pull request #33929 from frappe/mergify/bp/version-14/pr-33921
fix: incorrect actual qty in Bin (backport #33918) (backport #33921)
2023-02-01 23:15:02 +05:30
Rohit Waghchaure
4c238f1871 fix: incorrect actual qty in Bin
(cherry picked from commit f8c852c54c)
(cherry picked from commit 01ff6a1f19)
2023-02-01 16:53:09 +00:00
Frappe PR Bot
c8226ff642 chore(release): Bumped to Version 14.15.0
# [14.15.0](https://github.com/frappe/erpnext/compare/v14.14.0...v14.15.0) (2023-01-31)

### Bug Fixes

* Amount validation in Payment Request against Purchase Order ([#33855](https://github.com/frappe/erpnext/issues/33855)) ([5605f1e](5605f1e3ef))
* Currency symbol for tax withholding net total field ([#33850](https://github.com/frappe/erpnext/issues/33850)) ([f54e862](f54e8625f6))
* disfuctional cost center filter on Journal Entries ([#33815](https://github.com/frappe/erpnext/issues/33815)) ([58c3e16](58c3e16fec))
* disposal_was_made_on_original_schedule_date ([4586806](4586806ed1))
* double salutation on quotation print ([#33834](https://github.com/frappe/erpnext/issues/33834)) ([0fcf364](0fcf364aaa))
* Fetch commission rate from sales partner ([#33851](https://github.com/frappe/erpnext/issues/33851)) ([868c8d6](868c8d65ae))
* **gp:** fetch buying amount from dn related to so ([f5bde9c](f5bde9cf6d))
* GST Category validation broken for pos unregistered customer who dont have address. ([#33800](https://github.com/frappe/erpnext/issues/33800)) ([f124dd3](f124dd3112))
* Ignore linked JE on JE cancellation ([#33852](https://github.com/frappe/erpnext/issues/33852)) ([a0e1ee0](a0e1ee0450))
* item rate not fetching ([b98d351](b98d3514ab))
* Lead to customer creation ([#33859](https://github.com/frappe/erpnext/issues/33859)) ([44692e9](44692e9b57))
* manual depr entry not updating asset value [v14] ([#33788](https://github.com/frappe/erpnext/issues/33788)) ([f487eae](f487eae28e))
* **patch:** validation error on cost center allocation migration ([#33835](https://github.com/frappe/erpnext/issues/33835)) ([5d4967c](5d4967ceee))
* use correct filter name in `item_query` (backport [#33814](https://github.com/frappe/erpnext/issues/33814)) ([#33816](https://github.com/frappe/erpnext/issues/33816)) ([f7eabca](f7eabcafde))

### Features

* **gp:** test for inv and dn related via so ([7a793ea](7a793ea588))

### Performance Improvements

* show update items dialog ([ac2ebfb](ac2ebfbf59))
2023-01-31 06:20:11 +00:00
Deepesh Garg
cdfda06d63 Merge pull request #33873 from frappe/version-14-hotfix
chore: release v14
2023-01-31 11:48:25 +05:30
Frappe PR Bot
9fe9d7de6b chore(release): Bumped to Version 14.14.0
# [14.14.0](https://github.com/frappe/erpnext/compare/v14.13.0...v14.14.0) (2023-01-25)

### Bug Fixes

* Better budget exceeding validation messages ([#33713](https://github.com/frappe/erpnext/issues/33713)) ([4be8375](4be8375e36))
* bom.json updated ([9469488](9469488254))
* calculate correct amount for qty == 0 ([#33739](https://github.com/frappe/erpnext/issues/33739)) ([1c1c903](1c1c903fee))
* don't add template item in sales/purchase transaction ([8c12f7f](8c12f7f2f2))
* **ecommerce:** breadcrumb: fallback to `/all-products` ([#33718](https://github.com/frappe/erpnext/issues/33718)) ([1a33324](1a33324b4a))
* fb issue in asset chart, asset split and reverse_depreciation_entry_made_after_disposal ([dffdc67](dffdc67455))
* hide with_operation on selection on fg_based and vice versa ([8ee6db3](8ee6db3b7b))
* incorrect `rate` and `amount` in MR Item ([#33547](https://github.com/frappe/erpnext/issues/33547)) ([ff731ea](ff731ea70a))
* incorrect actual qty for the packed item ([bcd1fca](bcd1fca37b))
* incorrect row order and accumulated_depreciation when schedule with multiple FBs is scrapped ([96f9b34](96f9b34b19))
* linting ([dedc9ec](dedc9ecc7c))
* local variable 'stock_rbnb' referenced before assignment ([21cf929](21cf929c7a))
* minor change in bom.js added ([19aa237](19aa23765a))
* minor changes added ([7fd8cef](7fd8cef4d3))
* **minor:** Label updates in Statement of Accounts ([#33639](https://github.com/frappe/erpnext/issues/33639)) ([8af9a2f](8af9a2fad1))
* missing constant definition ([219aa81](219aa81eb6))
* not able to change default BOM in the Subcontracting Order ([ed1aed2](ed1aed22c0))
* Patch to update reference_due_date in Journal Entry ([#33616](https://github.com/frappe/erpnext/issues/33616)) ([0740120](0740120914))
* **pricing rule:** free item duplication ([#33746](https://github.com/frappe/erpnext/issues/33746)) ([5a49884](5a49884636))
* rewrite logic for duplicate check in Item Attribute ([6544cb8](6544cb8822))
* Short closed order, receipt, and delivery note status on cancellation ([#33743](https://github.com/frappe/erpnext/issues/33743)) ([89f1eef](89f1eefe2b))
* TDS deduction in payment entry ([#33747](https://github.com/frappe/erpnext/issues/33747)) ([f9a43e5](f9a43e5470))
* test case added for FG_BASED OPERTING COST ([30af8c3](30af8c3acb))
* the frappe throw message is corrected in the group task validation ([cf43930](cf439301f6))
* use hash based naming for tax withheld vouchers child table (backport [#33643](https://github.com/frappe/erpnext/issues/33643)) ([#33748](https://github.com/frappe/erpnext/issues/33748)) ([cf6d454](cf6d454606))
* web supplier quotation ([ceef2d6](ceef2d6553))

### Features

* Add operating cost based on bom quanity without creating job card ([0035ee2](0035ee2a74))
* get items from Transit Stock Entry ([31fd6f3](31fd6f300f))
2023-01-25 04:00:05 +00:00
Deepesh Garg
891b96e85c Merge pull request #33802 from frappe/version-14-hotfix
chore: release v14
2023-01-25 09:28:32 +05:30
Frappe PR Bot
e910c949f7 chore(release): Bumped to Version 14.13.0
# [14.13.0](https://github.com/frappe/erpnext/compare/v14.12.1...v14.13.0) (2023-01-17)

### Bug Fixes

* allow to create sales order from expired quotation ([#33582](https://github.com/frappe/erpnext/issues/33582)) ([fe51343](fe513433b2))
* asset repair link ([bc55f44](bc55f44de6))
* asset value in fixed asset register ([#33608](https://github.com/frappe/erpnext/issues/33608)) ([4d2497f](4d2497faf1))
* attribute error while submitting Repost PLE ([0431a57](0431a57ff0))
* better comparision of difference value between stock and account ([5869fcb](5869fcbd86))
* minor filter issue while reconciliation tool from bench console ([bddf330](bddf330754))
* Missing constructor args in Bank Reco Tool ([#33705](https://github.com/frappe/erpnext/issues/33705)) ([f88c8c4](f88c8c48c9))
* only group similar items in print format if group_same_items is checked in pick list (backport [#33627](https://github.com/frappe/erpnext/issues/33627)) ([#33630](https://github.com/frappe/erpnext/issues/33630)) ([28f2d35](28f2d357ab))
* patch item_reposting_for_incorrect_sl_and_gl ([1928195](1928195167))
* Rate from LDC in TDS reports (backport [#33699](https://github.com/frappe/erpnext/issues/33699)) ([#33700](https://github.com/frappe/erpnext/issues/33700)) ([9fa4c1a](9fa4c1a3bd))
* Return against internal purchase invoice (backport [#33635](https://github.com/frappe/erpnext/issues/33635)) ([#33658](https://github.com/frappe/erpnext/issues/33658)) ([35fbd67](35fbd67a93))
* Sales ORder Connections on Material Request ([8a04031](8a0403119f))
* Updating SO throws ordered_qty not allowed to change after submission ([f915c18](f915c18137))
* zero rm-cost in SCR ([2dfbc6e](2dfbc6e4eb))

### Features

* Date filters on bank reconciliation tool ([#33271](https://github.com/frappe/erpnext/issues/33271)) ([91b08f1](91b08f179a))
* provision to select date type based on filter ([4d65d6f](4d65d6f9bd))

### Performance Improvements

* improve reconciliation speed on JE's with 1000's of rows ([8a498ed](8a498ed029))

### Reverts

* Reverting changes done on 33495 ([#33662](https://github.com/frappe/erpnext/issues/33662)) ([23b9f66](23b9f661b6))
2023-01-17 16:02:54 +00:00
Deepesh Garg
7a5ec088df Merge pull request #33701 from frappe/version-14-hotfix
chore: release v14
2023-01-17 21:31:17 +05:30
Frappe PR Bot
1b3df094af chore(release): Bumped to Version 14.12.1
## [14.12.1](https://github.com/frappe/erpnext/compare/v14.12.0...v14.12.1) (2023-01-10)

### Bug Fixes

* **accounts:** currency fields no longer read as strings by validation function in Payment Entry ([#33535](https://github.com/frappe/erpnext/issues/33535)) ([44a95da](44a95da8ab))
* better handling of duplicate bundle items ([b96a97f](b96a97f6b4))
* customer/supplier quick entry dialog ([#33496](https://github.com/frappe/erpnext/issues/33496)) ([914e2fd](914e2fdded))
* don't check other warehouse ledgers to calculate valuation rate ([ab0a2b4](ab0a2b4272))
* Exchange gain and loss booking on multi-currency invoice reconciliation ([#32900](https://github.com/frappe/erpnext/issues/32900)) ([fe82ebc](fe82ebcc38))
* Exchange gain and loss booking on multi-currency invoice reconciliation ([#32900](https://github.com/frappe/erpnext/issues/32900)) ([259639a](259639a456))
* Incorrect exchange rate in payment entries ([#33481](https://github.com/frappe/erpnext/issues/33481)) ([e995e95](e995e952b5))
* incorrect status in the work order ([2658fc9](2658fc9f9b))
* incorrect warehouse and selling amount on bundled products ([#33549](https://github.com/frappe/erpnext/issues/33549)) ([c6c3ac3](c6c3ac3e55))
* RFQ emails not sent with pdf attachment ([#33604](https://github.com/frappe/erpnext/issues/33604)) ([34df9ab](34df9ab7d5))
* **stock entry:** wrong valuation rate in repack ([#33579](https://github.com/frappe/erpnext/issues/33579)) ([a92b4e7](a92b4e7255))
* Timeout error while saving the purchase invoice ([#33577](https://github.com/frappe/erpnext/issues/33577)) ([d2e3701](d2e3701b1a))

### Performance Improvements

* Drop `name` part from posting sort index ([#33551](https://github.com/frappe/erpnext/issues/33551)) ([f501575](f5015750e4))
2023-01-10 17:48:26 +00:00
Deepesh Garg
e6b9931552 Merge pull request #33601 from frappe/version-14-hotfix
chore: release v14
2023-01-10 23:16:52 +05:30
Deepesh Garg
7574fc8bcc Merge pull request #33567 from frappe/mergify/bp/version-14/pr-32900
fix: Exchange gain and loss booking on multi-currency invoice reconciliation (backport #32900)
2023-01-07 14:01:20 +05:30
Deepesh Garg
259639a456 fix: Exchange gain and loss booking on multi-currency invoice reconciliation (#32900)
* fix: Exchange gain and loss booking on multi-curreny invoice reconciliation

* test: Update test cases

* chore: Ignore SQL linting rule

* chore: Joural Entry for exchange gainand loss booking

* chore: Journal entry for exchange gain loss booking

* test: Update test case

* chore: Default exchange gain and loss account

(cherry picked from commit 9a3d947e89)
2023-01-07 08:11:15 +00:00
Frappe PR Bot
aab856ceb1 chore(release): Bumped to Version 14.12.0
# [14.12.0](https://github.com/frappe/erpnext/compare/v14.11.1...v14.12.0) (2023-01-04)

### Bug Fixes

* [concurrency issue] incorrect picked qty in sales order ([e7254fd](e7254fd161))
* `fg_item_qty` in non-subcontracted PO ([6e15331](6e15331fd4))
* `shipping_address` for non-drop shipping item ([a7a3654](a7a3654541))
* `shipping_address` in PO ([448fbe5](448fbe5582))
* add missing 'ordered_qty' to get_bin_details ([55e8e45](55e8e45d52))
* consider child nodes while getting bin details ([e296408](e2964088b7))
* Conversion factor error for invoices without item code (petty expenses) ([#32714](https://github.com/frappe/erpnext/issues/32714)) ([ba5a149](ba5a149a6b))
* Customer Primary Contact (backport [#33424](https://github.com/frappe/erpnext/issues/33424)) ([#33440](https://github.com/frappe/erpnext/issues/33440)) ([73c9820](73c9820e82))
* Default dimensions on fetching items from BOM (backport [#33439](https://github.com/frappe/erpnext/issues/33439)) ([#33459](https://github.com/frappe/erpnext/issues/33459)) ([a332b22](a332b229cf))
* Deferred revenue date comparison ([#33515](https://github.com/frappe/erpnext/issues/33515)) ([027510b](027510b629))
* ERR journals reported in AR/AP ([823b352](823b352c57))
* Get payment entry button not visible in Bank Clearance doc (backport [#33518](https://github.com/frappe/erpnext/issues/33518)) ([#33525](https://github.com/frappe/erpnext/issues/33525)) ([fcf052d](fcf052d3c4))
* Missing opening entry in general ledger (backport [#33519](https://github.com/frappe/erpnext/issues/33519)) ([#33526](https://github.com/frappe/erpnext/issues/33526)) ([8e375db](8e375db0b2))
* Multi-currency issues in Bank Reconciliation Tool ([#33488](https://github.com/frappe/erpnext/issues/33488)) ([d030852](d03085259d))
* Multiple rows for same warehouse and batches in pick list (backport [#33456](https://github.com/frappe/erpnext/issues/33456)) ([#33458](https://github.com/frappe/erpnext/issues/33458)) ([a166a76](a166a76768))
* payment terms and sales partner filter issue in AR/AP report ([0f6790b](0f6790be11))
* **pricing rule:** consider child tables in condition (backport [#33469](https://github.com/frappe/erpnext/issues/33469)) ([#33470](https://github.com/frappe/erpnext/issues/33470)) ([3bceb47](3bceb47542))
* Random behaviour while picking items using picklist (backport [#33449](https://github.com/frappe/erpnext/issues/33449)) ([#33450](https://github.com/frappe/erpnext/issues/33450)) ([1edde9c](1edde9c9e0))
* set `supplier` details while mapping SE(Send to Subcontractor) ([06e13b6](06e13b64a4))
* timeout error while submitting stock entry ([f30f77c](f30f77cde6))
* typerror on multi warehouse in Packed Items ([9b24940](9b24940059))
* use base_net_amount in case of missing stock qty ([#33457](https://github.com/frappe/erpnext/issues/33457)) ([88ca780](88ca7806af))

### Features

* Accounting Dimension updation in Payment Request and Entry ([#33411](https://github.com/frappe/erpnext/issues/33411)) ([e7704b2](e7704b2321))
2023-01-04 02:54:39 +00:00
Deepesh Garg
6a76153e54 Merge pull request #33511 from frappe/version-14-hotfix
chore: release v14
2023-01-04 08:23:11 +05:30
Frappe PR Bot
24d161d670 chore: release v14 (#33452)
* fix: typerror on multi warehouse in Packed Items

DN(with bundled item with varying warehouses)-> Sales Invoice.

(cherry picked from commit e684eb32d0)

* test: type error on bundled products with different warehouses

(cherry picked from commit 5918bb03f7)

* fix: payment terms and sales partner filter issue in AR/AP report

(cherry picked from commit 13c4420f42)

* fix: timeout error while submitting stock entry

Co-authored-by: Ankush Menat <ankush@frappe.io>
(cherry picked from commit a05c47e499)

* fix: `shipping_address` in PO

(cherry picked from commit 7e1b6b3c2a)

* refactor: Customer and Supplier Ledger summary will have hidden fields for better handling of user permission (#33433)

* feat: Accounting Dimension updation in Payment Request and Entry (#33411)

* fix: `shipping_address` for non-drop shipping item

(cherry picked from commit 67a7ccf3ce)

* fix: Random behaviour while picking items using picklist (backport #33449) (#33450)

fix: Random behaviour while picking items using picklist (#33449)

(cherry picked from commit 8263bf9a9a)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>

* fix: Multiple rows for same warehouse and batches in pick list (backport #33456) (#33458)

fix: Multiple rows for same warehouse and batches in pick list (#33456)

(cherry picked from commit d2686ce75b)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>

* fix: Default dimensions on fetching items from BOM (backport #33439) (#33459)

fix: Default dimensions on fetching items from BOM (#33439)

(cherry picked from commit 0b75aa5390)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-12-27 18:26:24 +05:30
Frappe PR Bot
0dbac5b689 chore(release): Bumped to Version 14.11.1
## [14.11.1](https://github.com/frappe/erpnext/compare/v14.11.0...v14.11.1) (2022-12-27)

### Bug Fixes

* Random behaviour while picking items using picklist (backport [#33449](https://github.com/frappe/erpnext/issues/33449)) ([#33451](https://github.com/frappe/erpnext/issues/33451)) ([abfb3bf](abfb3bf1c6))
2022-12-27 09:35:01 +00:00
mergify[bot]
abfb3bf1c6 fix: Random behaviour while picking items using picklist (backport #33449) (#33451)
fix: Random behaviour while picking items using picklist (#33449)

(cherry picked from commit 8263bf9a9a)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-12-27 15:01:44 +05:30
Frappe PR Bot
29bb873347 chore(release): Bumped to Version 14.11.0
# [14.11.0](https://github.com/frappe/erpnext/compare/v14.10.1...v14.11.0) (2022-12-20)

### Bug Fixes

* Consolidated financial report ([16ce411](16ce411b8f))
* Cost center filter not working in cash flow report ([ce5065b](ce5065b132))
* Cost Center for tax withholding invoices ([728643a](728643aa4a))
* cost_center filter fix for 'Get Outstanding Invoice' in PE ([ff61997](ff61997d25))
* cost_center filter gives incorrect output ([9b2b281](9b2b2812ca))
* daily scheduler to identify and fix stock transfer entries having incorrect valuation ([deb3efd](deb3efdd9a))
* disabled items showing in the report 'Itemwise Recommended Reorder Level ([493509e](493509e42d))
* get_serial_nos_for_fg() missing 1 required positional argument: 'args' ([bddb5b8](bddb5b8d25))
* incorrect type hints (backport [#33381](https://github.com/frappe/erpnext/issues/33381)) ([#33384](https://github.com/frappe/erpnext/issues/33384)) ([fa77259](fa77259f8d))
* Payment Request flow fixes from Order to Payment Entry ([a01db8f](a01db8fc38))
* remove unnecessary permissions from Appointment and Appointment Booking Settings ([#33358](https://github.com/frappe/erpnext/issues/33358)) ([#33395](https://github.com/frappe/erpnext/issues/33395)) ([6ef7eaf](6ef7eaf82e))
* translation for warning on Overbilling/-receipt/-delivery ([ba51d50](ba51d50fef))
* Unable to import COA through importer ([f8c09ee](f8c09ee720))
* unsupported operand type(s) for +: 'int' and 'NoneType' ([7bdfb3d](7bdfb3d181))
* unsupported operand type(s) for +=: 'int' and 'NoneType' ([88dc81b](88dc81b7d4))
* use highest precision for exchange rate. ([4a8a84d](4a8a84d6f0))

### Features

* Ignore company related doctype for other apps via hooks ([cd5a2af](cd5a2af272))
* improve visibility of default values ([7ff50b9](7ff50b9446))
* incoterm named place ([bfe57ac](bfe57acdbf))
* more control when printing RFQ ([07cda0a](07cda0aeb5))
2022-12-20 14:01:35 +00:00
Deepesh Garg
c9156635a7 Merge pull request #33404 from frappe/version-14-hotfix
chore: release v14
2022-12-20 19:30:05 +05:30
Frappe PR Bot
ac1af3bce9 chore(release): Bumped to Version 14.10.1
## [14.10.1](https://github.com/frappe/erpnext/compare/v14.10.0...v14.10.1) (2022-12-13)

### Bug Fixes

* `Enough Parts to Build` in `BOM Stock Report` ([3b9e9d2](3b9e9d2c6e))
* `Material Request` reference in internal `Sales Order` ([416d178](416d178209))
* add translation variable order ([ef933a8](ef933a8231))
* Buying and selling check in pricing rule ([f5205a5](f5205a5b5d))
* **ecommerce:** remove query parameters from referer ([40621b9](40621b99c8))
* handle_post_depr_entries_fail, show error alert and send email ([b661f57](b661f5758a))
* incorrect balance on parent company due to key mismatch ([436e93c](436e93c129))
* index error on customer master ([02cc618](02cc618a1f))
* Maintain Same Rate Throughout Sales Cycle doesn't work ([5398cf8](5398cf8f22)), closes [#32923](https://github.com/frappe/erpnext/issues/32923)
* order status in `Production Planning Report` ([a657db6](a657db66b4))
* Permission issue in Tax Detail report ([7a5b80d](7a5b80dfbc))
* **pos:** variable typo: `s_pos` -> `is_pos` ([afbd48f](afbd48f26e))
* Reapply pricing rule on qty change ([c726c16](c726c16702))
* Remove free items ([5e5937d](5e5937d6d0))
* total value in Warehouse Wise Stock Balance ([c5a54d7](c5a54d7912))

### Performance Improvements

* add indexes on payment entry reference (backport [#33288](https://github.com/frappe/erpnext/issues/33288)) ([#33289](https://github.com/frappe/erpnext/issues/33289)) ([ce63086](ce63086813))
2022-12-13 12:30:55 +00:00
Ankush Menat
983cc345f2 Merge pull request #33318 from frappe/version-14-hotfix
chore: release v14
2022-12-13 17:59:30 +05:30
Frappe PR Bot
1e351a9e0b chore(release): Bumped to Version 14.10.0
# [14.10.0](https://github.com/frappe/erpnext/compare/v14.9.0...v14.10.0) (2022-12-06)

### Bug Fixes

* add company filter in RFQ Items ([7c1595e](7c1595e2c2))
* Allow item rate udpates for non-stock invoices ([0307656](030765618b))
* Bundle item rates ([82cdf49](82cdf49d32))
* data import mandatory account_head, charge_type ([653cb9f](653cb9fc3b))
* default clear repost logs ([e039a14](e039a14f6f))
* Due date for month end payment term ([9b40b7f](9b40b7f240))
* Error on making stock entry from material request ([701ccc3](701ccc36c8))
* key error on p/l and balance sheet reports on foreign currency ([23a0a53](23a0a5337e))
* key error while filtering on date range and different currency ([08bca7d](08bca7d252))
* **lint:** trailing whitespace ([fae941c](fae941c4e3))
* non empty FG batch picked while completing work order ([e5e6b5d](e5e6b5d81c))
* **pos:** partial return amount update ([91920f4](91920f4d84))
* reload currency exchange settings ([5b5a85e](5b5a85ee3b))
* replace sql code with fields list in get_cached_value ([e18d0ec](e18d0eca3c))
* Tax withholding net total for PI in reports ([f87c3c6](f87c3c6157))
* test case ([39680ed](39680ed28b))
* type error on Sales Pipeline Analytics ([3af2b9b](3af2b9b423))
* use is_last_day_of_the_month in test_scrap_asset ([fc175e2](fc175e2b1f))
* **UX:** Alert on change of item rate in Stock Entry ([b2da76f](b2da76f02c))

### Features

* warehouse wise stock balance ([7027fda](7027fdae39))
2022-12-06 14:37:42 +00:00
Deepesh Garg
8f97b07463 Merge pull request #33233 from frappe/version-14-hotfix
chore: release v14
2022-12-06 20:06:17 +05:30
Frappe PR Bot
7d63bcbeb6 chore(release): Bumped to Version 14.9.0
# [14.9.0](https://github.com/frappe/erpnext/compare/v14.8.0...v14.9.0) (2022-11-29)

### Bug Fixes

* `production_item` filter in `Job Card Summary Report` ([c9f4f60](c9f4f60425))
* `Work Order` filter typo in `Job Card Summary Report` ([b157193](b1571932d0))
* Auto repeat date validations ([2aada1a](2aada1a0d9))
* check for session user rather than owner ([c9c7222](c9c7222ded))
* company name with `,` in `Job Card Summary Report` ([9c6d020](9c6d020e49))
* company name with `,` in `Work Order Summary Report` ([bc649b3](bc649b371f))
* create rounding gl entry for PCV during gle post processing ([fd4bcd9](fd4bcd9f7f))
* Debit and Credit not equal while submitting PI containing asset item ([c11a31b](c11a31b390))
* disbursable amount on currrent security price ([5edaf83](5edaf83733))
* Dispatch address display ([ef687e2](ef687e22b8))
* incorrect balance qty ([f92b501](f92b5011da))
* job card for quantity UX ([59e2ab7](59e2ab702f))
* MR Item `description` and `item_name` gets reset on `qty` change ([85d108b](85d108b810))
* only show serial no batch selector only once ([8d0f715](8d0f715087))
* opportunity list doesn't show assigned user (backport [#33110](https://github.com/frappe/erpnext/issues/33110)) ([#33131](https://github.com/frappe/erpnext/issues/33131)) ([0ba2a4d](0ba2a4d084))
* **pos:** filter on customer groups ([c1ae5b0](c1ae5b0af5))
* **pos:** warehouse should be in company ([c03ec80](c03ec80d1a))
* precision in asset test_scrap_asset ([0fe5e9a](0fe5e9a9d1))
* production plan UX ([4607590](46075901ba))
* remove duplicate schema ([cdd13cd](cdd13cd95f))
* remove obsolete comment ([978924a](978924a7e4))
* reposting error `AttributeError: 'datetime.timedelta' object has no attribute 'replace'` ([4b0c9b6](4b0c9b6115))
* reset `voucher_type` and `voucher_no` if `based_on` is set to `Item and Warehouse` ([e530f0b](e530f0b2fb))
* UX for inventory dimension ([f1dd4d0](f1dd4d0449))
* **ux:** Action buttons in Bank Reconciliation ([93b8cc3](93b8cc3042))
* validation msg in stock entry ([65ac84e](65ac84e020))
* Valuation Rate column UX in stock ledger report ([5c065e8](5c065e8a64))

### Features

* add connections to Incoterm doctype ([89b9a06](89b9a06204))
* add doctype Incoterm ([b711931](b7119318a6))
* add german translations for incoterm titles ([f7988de](f7988dea1b))
* add incoterm to purchasing transactions ([88346b1](88346b17e9))
* add incoterm to sales transactions ([fcfe0cb](fcfe0cb9e9))
* create Incoterm records after install ([93e029d](93e029df91))
* create incoterms and migrate shipments ([014896a](014896a595))
* german tax templates ([5652af0](5652af04ba))
* item wise tds calculation for purchase order ([5f8f574](5f8f574e20))
* item wise tds calculation for purchase order. ([2bd8bd2](2bd8bd224b))
* item wise tds in purchase order ([ba36435](ba3643514e))
* make Material Request for sub-assembly items ([5fc4dfa](5fc4dfaad6))
* **pos:** invoice: fitler warehouse by company ([c379baf](c379baf7a2))
* validate repost item valuation against accounts freeze date ([04f50ea](04f50ea76a))
2022-11-29 13:19:34 +00:00
Deepesh Garg
9fc8acf707 Merge pull request #33163 from frappe/version-14-hotfix
chore: release v14
2022-11-29 18:48:14 +05:30
Frappe PR Bot
df743aec29 chore(release): Bumped to Version 14.8.0
# [14.8.0](https://github.com/frappe/erpnext/compare/v14.7.0...v14.8.0) (2022-11-22)

### Bug Fixes

* Accounting Dimension filtering for Sales and Purchase Report ([b782209](b78220957b))
* add missing commas and brackets ([ecd4eab](ecd4eab2da))
* always send account currency in response ([f2fde83](f2fde8327d))
* Bulk payment generation against invoices ([57b00e3](57b00e3b16))
* cast POS query inputs to integers  (backport [#32975](https://github.com/frappe/erpnext/issues/32975)) ([#32977](https://github.com/frappe/erpnext/issues/32977)) ([55e1592](55e1592b70))
* don't set `rejected-qty` in return SCR ([4de02dc](4de02dc258))
* Don't show payment button for invoices on hold ([7487acd](7487acdeb6))
* hide reject-fields in return SCR ([71d6f2a](71d6f2a490))
* incorrect currency in Exchange rate revaluation ([a26470a](a26470a65f))
* Internal Transfer Material Request cycle and tracking fixed till purchase receipt ([eaf0950](eaf09503a9))
* link to brand doctype. ([b428307](b428307e9f))
* linters failing ([24aafb3](24aafb3866))
* make `is_internal_supplier` read-only ([caef140](caef140a9b))
* minor change ([ac3120b](ac3120b6f9))
* minor issue fixed ([c356d2c](c356d2cabd))
* naming ([a198a55](a198a55d2d))
* Opening journal entry templates ([6aada76](6aada76297))
* **pos:** item selector image border radius ([aaed4ab](aaed4ab958))
* precision in asset tests ([444f241](444f241263))
* **realtime:** Restrict updates to only last modified or current user ([#33034](https://github.com/frappe/erpnext/issues/33034)) ([9e8a835](9e8a8356e9))
* Remove unnecessary filters from Journal Entry ([387665d](387665d221))
* test case added for MR internal Transfer ([2a892f5](2a892f5c52))
* test case updated for mr ([6ddf273](6ddf27380f))
* Timesheet timer button ([53cf6b8](53cf6b8c89))
* update advace paid in SO/PO in account currency ([14235f2](14235f24b2))
* use `list()` on self mutating iteration ([eb968d7](eb968d7f02))
* Viewing account ledger from party master ([da2dfcc](da2dfcc10b))

### Features

* Workstation Type for BOM ([8323775](8323775282))
2022-11-22 16:00:31 +00:00
Deepesh Garg
9bb079d238 Merge pull request #33076 from frappe/version-14-hotfix
chore: release v14
2022-11-22 21:28:58 +05:30
Frappe PR Bot
964abce057 chore(release): Bumped to Version 14.7.0
# [14.7.0](https://github.com/frappe/erpnext/compare/v14.6.0...v14.7.0) (2022-11-15)

### Bug Fixes

* add translate function to valitate company msg in chart of accounts importer ([8de4430](8de4430662))
* check type for reference name ([a305793](a30579393e))
* don't set WIP Warehouse if  is checked in WO ([f923183](f923183b64))
* GP incorrect buying amount if no upd on SI and Delivery Note ([2d8f00a](2d8f00afad))
* incorrect fix of conversion factor in PP ([c48d00a](c48d00ad77))
* Label for applicable dimension table ([eb4f8e4](eb4f8e4bd8))
* Maintain same rate between Quotation and Sales Order ([6c155d2](6c155d2825))
* Project filter in timesheet ([37bed12](37bed12df4))
* Purchase Receipt timeout error ([0d5b726](0d5b7269d4))
* repayment schedule regeneration ([2f5033b](2f5033b70f))
* set `WIP Warehouse` in Job Card ([c294652](c294652dab))
* set stock UOM in args to ensure item price is fetched ([a4187b9](a4187b9d8f))
* test cases ([071ee5d](071ee5d81c))
* **ux:** Tab break in Customer and Supplier form ([eeaa932](eeaa9329f6))
* Write Off section visibility for non POS Invoices ([07badbc](07badbc0f2))

### Features

* Repost Payment Ledger entries for vouchers ([de59b50](de59b50407))

### Reverts

* Revert "fix: get `consumed_qty` based on `received_qty` in SCR" ([7fd6c43](7fd6c43752))
* Revert "fix: set `received_qty` before_validate SCR" ([0ecb44d](0ecb44d40c))
2022-11-15 12:59:04 +00:00
Deepesh Garg
c310c8a4b0 Merge pull request #32972 from frappe/version-14-hotfix
chore: release v14
2022-11-15 18:17:10 +05:30
Frappe PR Bot
e917212849 chore(release): Bumped to Version 14.6.0
# [14.6.0](https://github.com/frappe/erpnext/compare/v14.5.1...v14.6.0) (2022-11-08)

### Bug Fixes

* `Material Consumption` option in case of `Skip Transfer to WIP` in WO ([8c856cd](8c856cd5fc))
* add translate function to name of chart labels in budget_variance_report.py ([16f364d](16f364da37))
* add translate function to name of chart labels in deferred_revenue_and_expense.py ([b8caa58](b8caa587d2))
* add translate function to period in  stock_analytics.py ([b0c06d5](b0c06d5a04))
* add translate function to period in sales_analytics.py ([e681f06](e681f06883))
* add translate function to string on budget_variance_report.js to match the variance  word translated ([595aaad](595aaad99d))
* Auto advance allocation against partial invoices ([b7763d9](b7763d953a))
* auto increment qty if item table has no items ([d8e403b](d8e403bf5d))
* conflicts ([ab87a95](ab87a950e5))
* correct linters ([8f6f9a4](8f6f9a429a))
* correct linters ([440e208](440e20859f))
* correct linters ([5acc9be](5acc9be5c9))
* Create POS Opening Entry POS Profile filter. ([60af9c0](60af9c0516))
* Disable tax included prices for internal transfers ([#32794](https://github.com/frappe/erpnext/issues/32794)) ([6838e5e](6838e5ea3b))
* for asset's purchase_date, if bill_date is set, use that instead of posting_date ([01a1c96](01a1c96314))
* get `consumed_qty` based on `received_qty` in SCR ([ea9a502](ea9a50278d))
* Increase columns width in Warehouse wise Item Balance Age and Value ([0b09c31](0b09c31cb0))
* linter ([af60c8f](af60c8f759))
* make `BOM` required in SCR Item ([3f79a05](3f79a057e4))
* make `consumed_qty` editable when backflush based on Material Transfer ([2c5a8c4](2c5a8c43f6))
* make `consumed_qty` read-only in SCR Supplied Items ([68229f0](68229f06d1))
* map `BOM` while mapping the return SCR ([e629cba](e629cba2b7))
* mysql syntax issue ([4d9bbd4](4d9bbd4c9c))
* not able to select customer / supplier ([6989cdf](6989cdf4f2))
* refactor code for better translatable string ([2dc24f2](2dc24f22ea))
* refactor code for better translatable string in stock_ageing.py ([0ead516](0ead51642f))
* rename test method ([97445d9](97445d9516))
* Scan Barcode UX ([1944f4d](1944f4df4d))
* set `received_qty` before_validate SCR ([e316558](e316558286))
* test cases ([0feec4c](0feec4ca8a))
* trailing whitespace ([31bada9](31bada9205))
* update advance paid in SO/PO from Payment Ledger ([a561432](a561432908))
* use `flt` instead of `cint` in `get_batch_no` ([6510464](6510464482))

### Features

* Item Wise TDS Calculation ([b9fb104](b9fb1045d7))

### Performance Improvements

* use `get_cached_value` instead of `db.get_value` in controllers ([#32776](https://github.com/frappe/erpnext/issues/32776)) ([34ca17a](34ca17ab11))
2022-11-08 12:15:30 +00:00
Deepesh Garg
4657f8e9ed Merge pull request #32893 from frappe/version-14-hotfix
chore: release v14
2022-11-08 17:43:43 +05:30
Frappe PR Bot
3967773fbe chore(release): Bumped to Version 14.5.1
## [14.5.1](https://github.com/frappe/erpnext/compare/v14.5.0...v14.5.1) (2022-11-03)

### Bug Fixes

* not able to select customer / supplier ([dd4dbd4](dd4dbd4b00))
2022-11-03 08:07:36 +00:00
Deepesh Garg
074c75252a Merge pull request #32835 from frappe/mergify/bp/version-14/pr-32833
fix: not able to select customer / supplier (backport #32832) (backport #32833)
2022-11-03 13:35:52 +05:30
Rohit Waghchaure
dd4dbd4b00 fix: not able to select customer / supplier
(cherry picked from commit b0fc568c80)
(cherry picked from commit 6989cdf4f2)
2022-11-03 06:53:41 +00:00
Frappe PR Bot
ce5dbf891a chore(release): Bumped to Version 14.5.0
# [14.5.0](https://github.com/frappe/erpnext/compare/v14.4.0...v14.5.0) (2022-11-01)

### Bug Fixes

* add `Sales Order` reference in Material Request Dashboard ([fc63892](fc6389280c))
* Add condition for discount section collapse ([953f78d](953f78d6a9))
* Budget validation for main cost center ([89a1c83](89a1c83431))
* Clear invoice table post importing invoices ([6eafff8](6eafff8694))
* Company bank account filter in Bank Clearance ([797512c](797512ca13))
* Curreny in SOA print for multi-currency party ([195500c](195500cb32))
* duplicate custom fields for inventory dimension ([1152ac3](1152ac3ff1))
* Filter fixes in Accounts Payable report ([29197dc](29197dcd7f))
* Issues while cancel/amending Purchase Invoice with TDS enabled ([74a6479](74a6479f70))
* key error in filter access ([6114241](6114241ff2))
* Mode of payment for returns in POS Sales Invoice ([a260426](a260426dd4))
* Pass project to stock entry items ([4035873](4035873295))
* pro_rata_amount calculation in assets tests ([d1b2786](d1b2786f24))
* Reference due date field type in Journal Entry Accounts table ([faf25c0](faf25c0b95))
* Reset advance paid amount on Oreder cancel and amend ([34bd783](34bd7837e2))
* Total Sales amount update in project via Sales Order ([d742e6d](d742e6d56b))

### Features

* additional filters on Payment terms report ([a03ec0a](a03ec0afb3))
* **pricing rule:** free qty rounding and recursion qty ([#32577](https://github.com/frappe/erpnext/issues/32577)) ([9b66020](9b66020fc7))
2022-11-01 17:19:41 +00:00
Deepesh Garg
fd36ee0fda Merge pull request #32793 from frappe/version-14-hotfix
chore: release v14
2022-11-01 22:48:17 +05:30
Frappe PR Bot
123d720616 chore(release): Bumped to Version 14.4.0
# [14.4.0](https://github.com/frappe/erpnext/compare/v14.3.1...v14.4.0) (2022-10-26)

### Bug Fixes

* Advance paid amount in orders (backport [#32642](https://github.com/frappe/erpnext/issues/32642)) ([#32648](https://github.com/frappe/erpnext/issues/32648)) ([8a88105](8a88105aed))
* allow to create Sales Order from expired Quotation ([#32641](https://github.com/frappe/erpnext/issues/32641)) ([ccc58f4](ccc58f48e3))
* Billing Address for inter-company purchase docs ([f8934fa](f8934faa73))
* BOM cost update message ([e539579](e539579fb4))
* dont update item info twice ([8876904](887690449d))
* incorrect qty in material request ([da538a3](da538a37ad))
* number of months subscription plan ([fff9e76](fff9e76718))
* overlap error not raised for job card in case of workstation with production capacity ([ed2a093](ed2a093e49))
* party type and party mandatory on updating outstanding ([9a5e238](9a5e238702))
* searchfield not working for cuctsomer, supplier as per customize form ([fb1c307](fb1c30718b))
* unset contact details ([d7a65b1](d7a65b1d41))

### Features

* Basic Payment Ledger report ([5cb9f7b](5cb9f7b3a4))
* Repayment schedule types for term loans ([6ce32fd](6ce32fd5a9))

### Performance Improvements

* cache barcode scan result (backport [#32629](https://github.com/frappe/erpnext/issues/32629)) ([#32672](https://github.com/frappe/erpnext/issues/32672)) ([3300856](3300856fb4))
2022-10-26 05:09:19 +00:00
Deepesh Garg
1c95c67f58 Merge pull request #32707 from frappe/version-14-hotfix
chore: release v14
2022-10-26 10:37:46 +05:30
Frappe PR Bot
9703771b75 chore(release): Bumped to Version 14.3.1
## [14.3.1](https://github.com/frappe/erpnext/compare/v14.3.0...v14.3.1) (2022-10-18)

### Bug Fixes

* `Brand Defaults` filters ([cb0c4b5](cb0c4b5664))
* add project settings to projects workspace (backport [#32568](https://github.com/frappe/erpnext/issues/32568)) ([#32600](https://github.com/frappe/erpnext/issues/32600)) ([af4dafd](af4dafdc64))
* delete old ple's on item value repost ([62cabdf](62cabdf792))
* don't try to update youtube data if disabled in settings (backport [#32588](https://github.com/frappe/erpnext/issues/32588)) ([#32589](https://github.com/frappe/erpnext/issues/32589)) ([ed85683](ed85683fea))
* group warehouse filter not working for Batchwise Balance history report ([faedd85](faedd85b66))
* Ignore linked purchase invoice on cancel ([cc938fb](cc938fb028))
* linter ([831f60f](831f60f439))
* Party account for multi-order invoices ([eaea846](eaea8469fc))
* pricing rule item code UOM apply & conversions (backport [#32566](https://github.com/frappe/erpnext/issues/32566)) ([#32637](https://github.com/frappe/erpnext/issues/32637)) ([ffd82f3](ffd82f3302))
* Renamed Dashboard tab label to Connections ([dac5989](dac5989d72))
* Renamed Notes section to Comments ([9e94dd9](9e94dd9203))
* type-cast while saving an item (backport [#32549](https://github.com/frappe/erpnext/issues/32549)) ([#32578](https://github.com/frappe/erpnext/issues/32578)) ([829a0ff](829a0ff827))
2022-10-18 18:03:17 +00:00
Deepesh Garg
bd62a1d2d3 Merge pull request #32633 from frappe/version-14-hotfix
chore: release v14
2022-10-18 23:31:52 +05:30
Frappe PR Bot
36b9926527 chore(release): Bumped to Version 14.3.0
# [14.3.0](https://github.com/frappe/erpnext/compare/v14.2.3...v14.3.0) (2022-10-12)

### Bug Fixes

* consider outgoingrate while valuation rate calculate ([423c019](423c0190e2))
* consider sales rate as incoming rate for transit warehouse in purchase flow ([948b231](948b231e92))
* Do not add tax withheld vouchers post tax withheding in one document ([bd8e61b](bd8e61b2dc))
* Explicitly update modified (backport [#32519](https://github.com/frappe/erpnext/issues/32519)) ([#32575](https://github.com/frappe/erpnext/issues/32575)) ([154904e](154904e960))
* Hanlde rounding loss for internal transfer ([8eda2db](8eda2dbdf8))
* Incoming rate precision fixes for intra company transfer ([b653f43](b653f43b70))
* make readings status mandatory in Quality Inspection ([50d790c](50d790c919))
* minor cleanup ([236a5f3](236a5f37c7))
* more fields reordering related to Tab Break ([db4fbc9](db4fbc9e58))
* PO cancel post advance payment cancel against PO ([bda25c4](bda25c4d5d))
* removed unnecessary imports ([31782d6](31782d6f71))
* set Quality Inspection status based on readings status ([e25db8b](e25db8b1b5))
* single column indexes (backport [#32425](https://github.com/frappe/erpnext/issues/32425)) ([#32513](https://github.com/frappe/erpnext/issues/32513)) ([2f1b8af](2f1b8af13c))
* Tax withholding related fixes ([d5f6938](d5f693806b))
* test case ([0b26131](0b26131b65))
* **test:** `test_rejected_qi_validation` ([943e619](943e6192cc))
* TooManyWritesError during reposting of stock ([73742ff](73742ff565))
* unlink payment on invoice cancellation ([8ba503b](8ba503bf0e))
* use naming_series in budget ([0a24859](0a24859c9c))
* value error on pos submit ([4b65dd7](4b65dd7f2a))

### Features

* **JE:** trigger account field when fetched from template ([17dd1ab](17dd1abb34)), closes [#32409](https://github.com/frappe/erpnext/issues/32409)
* provision to return non consumed components against the work order ([d0f3818](d0f3818060))
* Tab Break in Material Request ([79151be](79151be8ce))
* Tab Break in Purchase Invoice ([89314d4](89314d4171))
* Tab Break in Purchase Order ([5a8329a](5a8329add1))
* Tab Break in Purchase Receipt ([b092791](b092791ac8))
* Tab Break in Quotation ([b0a9f79](b0a9f79e18))
* Tab Break in Sales Order, Delivery Note, Sales Invoice and Purchase Order ([31cd96b](31cd96bc89))
* Tab Break in Supplier Quotation ([22ad3ad](22ad3ad6f3))
2022-10-12 12:21:48 +00:00
Deepesh Garg
d38071eb20 Merge pull request #32560 from frappe/version-14-hotfix
chore: release v14
2022-10-12 17:50:12 +05:30
28 changed files with 397 additions and 312 deletions

View File

@@ -2,7 +2,7 @@ import inspect
import frappe
__version__ = "14.2.3"
__version__ = "14.18.3"
def get_default_company(user=None):

View File

@@ -211,8 +211,7 @@ class ExchangeRateRevaluation(Document):
# Handle Accounts with '0' balance in Account/Base Currency
for d in [x for x in account_details if x.zero_balance]:
# TODO: Set new balance in Base/Account currency
if d.balance > 0:
if d.balance != 0:
current_exchange_rate = new_exchange_rate = 0
new_balance_in_account_currency = 0 # this will be '0'
@@ -399,6 +398,9 @@ class ExchangeRateRevaluation(Document):
journal_entry_accounts = []
for d in accounts:
if not flt(d.get("balance_in_account_currency"), d.precision("balance_in_account_currency")):
continue
dr_or_cr = (
"debit_in_account_currency"
if d.get("balance_in_account_currency") > 0
@@ -448,7 +450,13 @@ class ExchangeRateRevaluation(Document):
}
)
journal_entry_accounts.append(
journal_entry.set("accounts", journal_entry_accounts)
journal_entry.set_amounts_in_company_currency()
journal_entry.set_total_debit_credit()
self.gain_loss_unbooked += journal_entry.difference - self.gain_loss_unbooked
journal_entry.append(
"accounts",
{
"account": unrealized_exchange_gain_loss_account,
"balance": get_balance_on(unrealized_exchange_gain_loss_account),
@@ -460,10 +468,9 @@ class ExchangeRateRevaluation(Document):
"exchange_rate": 1,
"reference_type": "Exchange Rate Revaluation",
"reference_name": self.name,
}
},
)
journal_entry.set("accounts", journal_entry_accounts)
journal_entry.set_amounts_in_company_currency()
journal_entry.set_total_debit_credit()
journal_entry.save()

View File

@@ -15,7 +15,7 @@
</div>
<h2 class="text-center">{{ _("STATEMENTS OF ACCOUNTS") }}</h2>
<div>
<h5 style="float: left;">{{ _("Customer: ") }} <b>{{filters.party[0] }}</b></h5>
<h5 style="float: left;">{{ _("Customer: ") }} <b>{{filters.party_name[0] }}</b></h5>
<h5 style="float: right;">
{{ _("Date: ") }}
<b>{{ frappe.format(filters.from_date, 'Date')}}

View File

@@ -23,7 +23,7 @@ from erpnext.accounts.report.general_ledger.general_ledger import execute as get
class ProcessStatementOfAccounts(Document):
def validate(self):
if not self.subject:
self.subject = "Statement Of Accounts for {{ customer.name }}"
self.subject = "Statement Of Accounts for {{ customer.customer_name }}"
if not self.body:
self.body = "Hello {{ customer.name }},<br>PFA your Statement Of Accounts from {{ doc.from_date }} to {{ doc.to_date }}."
@@ -86,6 +86,7 @@ def get_report_pdf(doc, consolidated=True):
"account": [doc.account] if doc.account else None,
"party_type": "Customer",
"party": [entry.customer],
"party_name": [entry.customer_name] if entry.customer_name else None,
"presentation_currency": presentation_currency,
"group_by": doc.group_by,
"currency": doc.currency,
@@ -153,7 +154,7 @@ def get_customers_based_on_territory_or_customer_group(customer_collection, coll
]
return frappe.get_list(
"Customer",
fields=["name", "email_id"],
fields=["name", "customer_name", "email_id"],
filters=[[fields_dict[customer_collection], "IN", selected]],
)
@@ -176,7 +177,7 @@ def get_customers_based_on_sales_person(sales_person):
if sales_person_records.get("Customer"):
return frappe.get_list(
"Customer",
fields=["name", "email_id"],
fields=["name", "customer_name", "email_id"],
filters=[["name", "in", list(sales_person_records["Customer"])]],
)
else:
@@ -225,7 +226,7 @@ def fetch_customers(customer_collection, collection_name, primary_mandatory):
if customer_collection == "Sales Partner":
customers = frappe.get_list(
"Customer",
fields=["name", "email_id"],
fields=["name", "customer_name", "email_id"],
filters=[["default_sales_partner", "=", collection_name]],
)
else:
@@ -244,7 +245,12 @@ def fetch_customers(customer_collection, collection_name, primary_mandatory):
continue
customer_list.append(
{"name": customer.name, "primary_email": primary_email, "billing_email": billing_email}
{
"name": customer.name,
"customer_name": customer.customer_name,
"primary_email": primary_email,
"billing_email": billing_email,
}
)
return customer_list

View File

@@ -1,12 +1,12 @@
{
"actions": [],
"allow_workflow": 1,
"creation": "2020-08-03 16:35:21.852178",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"customer",
"customer_name",
"billing_email",
"primary_email"
],
@@ -30,11 +30,18 @@
"fieldtype": "Read Only",
"in_list_view": 1,
"label": "Billing Email"
},
{
"fetch_from": "customer.customer_name",
"fieldname": "customer_name",
"fieldtype": "Data",
"label": "Customer Name",
"read_only": 1
}
],
"istable": 1,
"links": [],
"modified": "2020-08-03 22:55:38.875601",
"modified": "2023-03-13 00:12:34.508086",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Process Statement Of Accounts Customer",
@@ -43,5 +50,6 @@
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -32,9 +32,6 @@
"cost_center",
"dimension_col_break",
"project",
"column_break_27",
"campaign",
"source",
"currency_and_price_list",
"currency",
"conversion_rate",
@@ -203,7 +200,9 @@
"more_information",
"status",
"inter_company_invoice_reference",
"campaign",
"represents_company",
"source",
"customer_group",
"col_break23",
"is_internal_customer",
@@ -2083,10 +2082,6 @@
"fieldname": "company_addr_col_break",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_27",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_52",
"fieldtype": "Column Break"
@@ -2143,11 +2138,10 @@
"link_fieldname": "consolidated_invoice"
}
],
"modified": "2022-11-07 16:02:07.972258",
"modified": "2023-03-13 11:43:15.883055",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
"name_case": "Title Case",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [

View File

@@ -32,6 +32,16 @@ from erpnext import get_company_currency
from erpnext.accounts.utils import get_fiscal_year
from erpnext.exceptions import InvalidAccountCurrency, PartyDisabled, PartyFrozen
PURCHASE_TRANSACTION_TYPES = {"Purchase Order", "Purchase Receipt", "Purchase Invoice"}
SALES_TRANSACTION_TYPES = {
"Quotation",
"Sales Order",
"Delivery Note",
"Sales Invoice",
"POS Invoice",
}
TRANSACTION_TYPES = PURCHASE_TRANSACTION_TYPES | SALES_TRANSACTION_TYPES
class DuplicatePartyAccountError(frappe.ValidationError):
pass
@@ -124,12 +134,6 @@ def _get_party_details(
set_other_values(party_details, party, party_type)
set_price_list(party_details, party, party_type, price_list, pos_profile)
party_details["tax_category"] = get_address_tax_category(
party.get("tax_category"),
party_address,
shipping_address if party_type != "Supplier" else party_address,
)
tax_template = set_taxes(
party.name,
party_type,
@@ -211,20 +215,10 @@ def set_address_details(
else:
party_details.update(get_company_address(company))
if doctype and doctype in [
"Delivery Note",
"Sales Invoice",
"Sales Order",
"Quotation",
"POS Invoice",
]:
if party_details.company_address:
party_details.update(
get_fetch_values(doctype, "company_address", party_details.company_address)
)
get_regional_address_details(party_details, doctype, company)
if doctype in SALES_TRANSACTION_TYPES and party_details.company_address:
party_details.update(get_fetch_values(doctype, "company_address", party_details.company_address))
elif doctype and doctype in ["Purchase Invoice", "Purchase Order", "Purchase Receipt"]:
if doctype in PURCHASE_TRANSACTION_TYPES:
if shipping_address:
party_details.update(
shipping_address=shipping_address,
@@ -250,9 +244,21 @@ def set_address_details(
**get_fetch_values(doctype, "shipping_address", party_details.billing_address)
)
party_address, shipping_address = (
party_details.get(billing_address_field),
party_details.shipping_address_name,
)
party_details["tax_category"] = get_address_tax_category(
party.get("tax_category"),
party_address,
shipping_address if party_type != "Supplier" else party_address,
)
if doctype in TRANSACTION_TYPES:
get_regional_address_details(party_details, doctype, company)
return party_details.get(billing_address_field), party_details.shipping_address_name
return party_address, shipping_address
@erpnext.allow_regional

View File

@@ -138,7 +138,8 @@ def prepare_companywise_opening_balance(asset_data, liability_data, equity_data,
for data in [asset_data, liability_data, equity_data]:
if data:
account_name = get_root_account_name(data[0].root_type, company)
opening_value += get_opening_balance(account_name, data, company) or 0.0
if account_name:
opening_value += get_opening_balance(account_name, data, company) or 0.0
opening_balance[company] = opening_value
@@ -155,7 +156,7 @@ def get_opening_balance(account_name, data, company):
def get_root_account_name(root_type, company):
return frappe.get_all(
root_account = frappe.get_all(
"Account",
fields=["account_name"],
filters={
@@ -165,7 +166,10 @@ def get_root_account_name(root_type, company):
"parent_account": ("is", "not set"),
},
as_list=1,
)[0][0]
)
if root_account:
return root_account[0][0]
def get_profit_loss_data(fiscal_year, companies, columns, filters):

View File

@@ -78,7 +78,6 @@ def validate_filters(filters):
def get_data(filters):
accounts = frappe.db.sql(
"""select name, account_number, parent_account, account_name, root_type, report_type, lft, rgt
@@ -118,12 +117,10 @@ def get_data(filters):
ignore_closing_entries=not flt(filters.with_period_closing_entry),
)
total_row = calculate_values(
accounts, gl_entries_by_account, opening_balances, filters, company_currency
)
calculate_values(accounts, gl_entries_by_account, opening_balances)
accumulate_values_into_parents(accounts, accounts_by_name)
data = prepare_data(accounts, filters, total_row, parent_children_map, company_currency)
data = prepare_data(accounts, filters, parent_children_map, company_currency)
data = filter_out_zero_value_rows(
data, parent_children_map, show_zero_values=filters.get("show_zero_values")
)
@@ -218,7 +215,7 @@ def get_rootwise_opening_balances(filters, report_type):
return opening
def calculate_values(accounts, gl_entries_by_account, opening_balances, filters, company_currency):
def calculate_values(accounts, gl_entries_by_account, opening_balances):
init = {
"opening_debit": 0.0,
"opening_credit": 0.0,
@@ -228,22 +225,6 @@ def calculate_values(accounts, gl_entries_by_account, opening_balances, filters,
"closing_credit": 0.0,
}
total_row = {
"account": "'" + _("Total") + "'",
"account_name": "'" + _("Total") + "'",
"warn_if_negative": True,
"opening_debit": 0.0,
"opening_credit": 0.0,
"debit": 0.0,
"credit": 0.0,
"closing_debit": 0.0,
"closing_credit": 0.0,
"parent_account": None,
"indent": 0,
"has_value": True,
"currency": company_currency,
}
for d in accounts:
d.update(init.copy())
@@ -261,8 +242,28 @@ def calculate_values(accounts, gl_entries_by_account, opening_balances, filters,
prepare_opening_closing(d)
for field in value_fields:
total_row[field] += d[field]
def calculate_total_row(accounts, company_currency):
total_row = {
"account": "'" + _("Total") + "'",
"account_name": "'" + _("Total") + "'",
"warn_if_negative": True,
"opening_debit": 0.0,
"opening_credit": 0.0,
"debit": 0.0,
"credit": 0.0,
"closing_debit": 0.0,
"closing_credit": 0.0,
"parent_account": None,
"indent": 0,
"has_value": True,
"currency": company_currency,
}
for d in accounts:
if not d.parent_account:
for field in value_fields:
total_row[field] += d[field]
return total_row
@@ -274,7 +275,7 @@ def accumulate_values_into_parents(accounts, accounts_by_name):
accounts_by_name[d.parent_account][key] += d[key]
def prepare_data(accounts, filters, total_row, parent_children_map, company_currency):
def prepare_data(accounts, filters, parent_children_map, company_currency):
data = []
for d in accounts:
@@ -305,6 +306,7 @@ def prepare_data(accounts, filters, total_row, parent_children_map, company_curr
row["has_value"] = has_value
data.append(row)
total_row = calculate_total_row(accounts, company_currency)
data.extend([{}, total_row])
return data

View File

@@ -305,7 +305,7 @@ def get_returned_qty_map_for_row(return_against, party, row_name, doctype):
fields += ["sum(abs(`tab{0}`.received_stock_qty)) as received_stock_qty".format(child_doctype)]
# Used retrun against and supplier and is_retrun because there is an index added for it
data = frappe.db.get_list(
data = frappe.get_all(
doctype,
fields=fields,
filters=[

View File

@@ -87,9 +87,6 @@ class SellingController(StockController):
)
if not self.meta.get_field("sales_team"):
party_details.pop("sales_team")
else:
self.set("sales_team", party_details.get("sales_team"))
self.update_if_missing(party_details)
elif lead:

View File

@@ -76,12 +76,9 @@ def get_transaction_list(
ignore_permissions = False
if not filters:
filters = []
filters = {}
if doctype in ["Supplier Quotation", "Purchase Invoice"]:
filters.append((doctype, "docstatus", "<", 2))
else:
filters.append((doctype, "docstatus", "=", 1))
filters["docstatus"] = ["<", "2"] if doctype in ["Supplier Quotation", "Purchase Invoice"] else 1
if (user != "Guest" and is_website_user()) or doctype == "Request for Quotation":
parties_doctype = (
@@ -92,12 +89,12 @@ def get_transaction_list(
if customers:
if doctype == "Quotation":
filters.append(("quotation_to", "=", "Customer"))
filters.append(("party_name", "in", customers))
filters["quotation_to"] = "Customer"
filters["party_name"] = ["in", customers]
else:
filters.append(("customer", "in", customers))
filters["customer"] = ["in", customers]
elif suppliers:
filters.append(("supplier", "in", suppliers))
filters["supplier"] = ["in", suppliers]
elif not custom:
return []
@@ -110,7 +107,7 @@ def get_transaction_list(
if not customers and not suppliers and custom:
ignore_permissions = False
filters = []
filters = {}
transactions = get_list_for_transactions(
doctype,

View File

@@ -19,10 +19,6 @@ frappe.ui.form.on("Opportunity", {
}
}
});
if (frm.doc.opportunity_from && frm.doc.party_name){
frm.trigger('set_contact_link');
}
},
validate: function(frm) {
@@ -130,6 +126,10 @@ frappe.ui.form.on("Opportunity", {
} else {
frappe.contacts.clear_address_and_contact(frm);
}
if (frm.doc.opportunity_from && frm.doc.party_name) {
frm.trigger('set_contact_link');
}
},
set_contact_link: function(frm) {
@@ -137,6 +137,8 @@ frappe.ui.form.on("Opportunity", {
frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Customer'}
} else if(frm.doc.opportunity_from == "Lead" && frm.doc.party_name) {
frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Lead'}
} else if (frm.doc.opportunity_from == "Prospect" && frm.doc.party_name) {
frappe.dynamic_link = {doc: frm.doc, fieldname: 'party_name', doctype: 'Prospect'}
}
},

View File

@@ -31,7 +31,7 @@ class BOMTree:
# specifying the attributes to save resources
# ref: https://docs.python.org/3/reference/datamodel.html#slots
__slots__ = ["name", "child_items", "is_bom", "item_code", "exploded_qty", "qty"]
__slots__ = ["name", "child_items", "is_bom", "item_code", "qty", "exploded_qty", "bom_qty"]
def __init__(
self, name: str, is_bom: bool = True, exploded_qty: float = 1.0, qty: float = 1
@@ -50,9 +50,10 @@ class BOMTree:
def __create_tree(self):
bom = frappe.get_cached_doc("BOM", self.name)
self.item_code = bom.item
self.bom_qty = bom.quantity
for item in bom.get("items", []):
qty = item.qty / bom.quantity # quantity per unit
qty = item.stock_qty / bom.quantity # quantity per unit
exploded_qty = self.exploded_qty * qty
if item.bom_no:
child = BOMTree(item.bom_no, exploded_qty=exploded_qty, qty=qty)

View File

@@ -561,7 +561,34 @@ class JobCard(Document):
)
def set_transferred_qty_in_job_card_item(self, ste_doc):
from frappe.query_builder.functions import Sum
def _get_job_card_items_transferred_qty(ste_doc):
from frappe.query_builder.functions import Sum
job_card_items_transferred_qty = {}
job_card_items = [
x.get("job_card_item") for x in ste_doc.get("items") if x.get("job_card_item")
]
if job_card_items:
se = frappe.qb.DocType("Stock Entry")
sed = frappe.qb.DocType("Stock Entry Detail")
query = (
frappe.qb.from_(sed)
.join(se)
.on(sed.parent == se.name)
.select(sed.job_card_item, Sum(sed.qty))
.where(
(sed.job_card_item.isin(job_card_items))
& (se.docstatus == 1)
& (se.purpose == "Material Transfer for Manufacture")
)
.groupby(sed.job_card_item)
)
job_card_items_transferred_qty = frappe._dict(query.run(as_list=True))
return job_card_items_transferred_qty
def _validate_over_transfer(row, transferred_qty):
"Block over transfer of items if not allowed in settings."
@@ -578,29 +605,23 @@ class JobCard(Document):
exc=JobCardOverTransferError,
)
for row in ste_doc.items:
if not row.job_card_item:
continue
sed = frappe.qb.DocType("Stock Entry Detail")
se = frappe.qb.DocType("Stock Entry")
transferred_qty = (
frappe.qb.from_(sed)
.join(se)
.on(sed.parent == se.name)
.select(Sum(sed.qty))
.where(
(sed.job_card_item == row.job_card_item)
& (se.docstatus == 1)
& (se.purpose == "Material Transfer for Manufacture")
)
).run()[0][0]
job_card_items_transferred_qty = _get_job_card_items_transferred_qty(ste_doc)
if job_card_items_transferred_qty:
allow_excess = frappe.db.get_single_value("Manufacturing Settings", "job_card_excess_transfer")
if not allow_excess:
_validate_over_transfer(row, transferred_qty)
frappe.db.set_value("Job Card Item", row.job_card_item, "transferred_qty", flt(transferred_qty))
for row in ste_doc.items:
if not row.job_card_item:
continue
transferred_qty = flt(job_card_items_transferred_qty.get(row.job_card_item))
if not allow_excess:
_validate_over_transfer(row, transferred_qty)
frappe.db.set_value(
"Job Card Item", row.job_card_item, "transferred_qty", flt(transferred_qty)
)
def set_transferred_qty(self, update_status=False):
"Set total FG Qty in Job Card for which RM was transferred."

View File

@@ -506,7 +506,7 @@ frappe.ui.form.on("Work Order Item", {
callback: function(r) {
if (r.message) {
frappe.model.set_value(cdt, cdn, {
"required_qty": 1,
"required_qty": row.required_qty || 1,
"item_name": r.message.item_name,
"description": r.message.description,
"source_warehouse": r.message.default_warehouse,

View File

@@ -682,7 +682,7 @@ class WorkOrder(Document):
for node in bom_traversal:
if node.is_bom:
operations.extend(_get_operations(node.name, qty=node.exploded_qty))
operations.extend(_get_operations(node.name, qty=node.exploded_qty / node.bom_qty))
bom_qty = frappe.get_cached_value("BOM", self.bom_no, "quantity")
operations.extend(_get_operations(self.bom_no, qty=1.0 / bom_qty))

View File

@@ -4,7 +4,8 @@
import frappe
from frappe import _
from frappe.query_builder.functions import Sum
from frappe.query_builder.functions import Floor, Sum
from frappe.utils import cint
from pypika.terms import ExistsCriterion
@@ -34,57 +35,55 @@ def get_columns():
def get_bom_stock(filters):
qty_to_produce = filters.get("qty_to_produce") or 1
if int(qty_to_produce) < 0:
frappe.throw(_("Quantity to Produce can not be less than Zero"))
qty_to_produce = filters.get("qty_to_produce")
if cint(qty_to_produce) <= 0:
frappe.throw(_("Quantity to Produce should be greater than zero."))
if filters.get("show_exploded_view"):
bom_item_table = "BOM Explosion Item"
else:
bom_item_table = "BOM Item"
bin = frappe.qb.DocType("Bin")
bom = frappe.qb.DocType("BOM")
bom_item = frappe.qb.DocType(bom_item_table)
query = (
frappe.qb.from_(bom)
.inner_join(bom_item)
.on(bom.name == bom_item.parent)
.left_join(bin)
.on(bom_item.item_code == bin.item_code)
.select(
bom_item.item_code,
bom_item.description,
bom_item.stock_qty,
bom_item.stock_uom,
(bom_item.stock_qty / bom.quantity) * qty_to_produce,
Sum(bin.actual_qty),
Sum(bin.actual_qty) / (bom_item.stock_qty / bom.quantity),
)
.where((bom_item.parent == filters.get("bom")) & (bom_item.parenttype == "BOM"))
.groupby(bom_item.item_code)
warehouse_details = frappe.db.get_value(
"Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1
)
if filters.get("warehouse"):
warehouse_details = frappe.db.get_value(
"Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1
)
BOM = frappe.qb.DocType("BOM")
BOM_ITEM = frappe.qb.DocType(bom_item_table)
BIN = frappe.qb.DocType("Bin")
WH = frappe.qb.DocType("Warehouse")
CONDITIONS = ()
if warehouse_details:
wh = frappe.qb.DocType("Warehouse")
query = query.where(
ExistsCriterion(
frappe.qb.from_(wh)
.select(wh.name)
.where(
(wh.lft >= warehouse_details.lft)
& (wh.rgt <= warehouse_details.rgt)
& (bin.warehouse == wh.name)
)
)
if warehouse_details:
CONDITIONS = ExistsCriterion(
frappe.qb.from_(WH)
.select(WH.name)
.where(
(WH.lft >= warehouse_details.lft)
& (WH.rgt <= warehouse_details.rgt)
& (BIN.warehouse == WH.name)
)
else:
query = query.where(bin.warehouse == filters.get("warehouse"))
)
else:
CONDITIONS = BIN.warehouse == filters.get("warehouse")
return query.run()
QUERY = (
frappe.qb.from_(BOM)
.inner_join(BOM_ITEM)
.on(BOM.name == BOM_ITEM.parent)
.left_join(BIN)
.on((BOM_ITEM.item_code == BIN.item_code) & (CONDITIONS))
.select(
BOM_ITEM.item_code,
BOM_ITEM.description,
BOM_ITEM.stock_qty,
BOM_ITEM.stock_uom,
BOM_ITEM.stock_qty * qty_to_produce / BOM.quantity,
Sum(BIN.actual_qty).as_("actual_qty"),
Sum(Floor(BIN.actual_qty / (BOM_ITEM.stock_qty * qty_to_produce / BOM.quantity))),
)
.where((BOM_ITEM.parent == filters.get("bom")) & (BOM_ITEM.parenttype == "BOM"))
.groupby(BOM_ITEM.item_code)
)
return QUERY.run()

View File

@@ -0,0 +1,108 @@
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
import frappe
from frappe.exceptions import ValidationError
from frappe.tests.utils import FrappeTestCase
from frappe.utils import floor
from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
from erpnext.manufacturing.report.bom_stock_report.bom_stock_report import (
get_bom_stock as bom_stock_report,
)
from erpnext.stock.doctype.item.test_item import make_item
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
class TestBomStockReport(FrappeTestCase):
def setUp(self):
self.warehouse = "_Test Warehouse - _TC"
self.fg_item, self.rm_items = create_items()
make_stock_entry(target=self.warehouse, item_code=self.rm_items[0], qty=20, basic_rate=100)
make_stock_entry(target=self.warehouse, item_code=self.rm_items[1], qty=40, basic_rate=200)
self.bom = make_bom(item=self.fg_item, quantity=1, raw_materials=self.rm_items, rm_qty=10)
def test_bom_stock_report(self):
# Test 1: When `qty_to_produce` is 0.
filters = frappe._dict(
{
"bom": self.bom.name,
"warehouse": "Stores - _TC",
"qty_to_produce": 0,
}
)
self.assertRaises(ValidationError, bom_stock_report, filters)
# Test 2: When stock is not available.
data = bom_stock_report(
frappe._dict(
{
"bom": self.bom.name,
"warehouse": "Stores - _TC",
"qty_to_produce": 1,
}
)
)
expected_data = get_expected_data(self.bom, "Stores - _TC", 1)
self.assertSetEqual(set(tuple(x) for x in data), set(tuple(x) for x in expected_data))
# Test 3: When stock is available.
data = bom_stock_report(
frappe._dict(
{
"bom": self.bom.name,
"warehouse": self.warehouse,
"qty_to_produce": 1,
}
)
)
expected_data = get_expected_data(self.bom, self.warehouse, 1)
self.assertSetEqual(set(tuple(x) for x in data), set(tuple(x) for x in expected_data))
def create_items():
fg_item = make_item(properties={"is_stock_item": 1}).name
rm_item1 = make_item(
properties={
"is_stock_item": 1,
"standard_rate": 100,
"opening_stock": 100,
"last_purchase_rate": 100,
}
).name
rm_item2 = make_item(
properties={
"is_stock_item": 1,
"standard_rate": 200,
"opening_stock": 200,
"last_purchase_rate": 200,
}
).name
return fg_item, [rm_item1, rm_item2]
def get_expected_data(bom, warehouse, qty_to_produce, show_exploded_view=False):
expected_data = []
for item in bom.get("exploded_items") if show_exploded_view else bom.get("items"):
in_stock_qty = frappe.get_cached_value(
"Bin", {"item_code": item.item_code, "warehouse": warehouse}, "actual_qty"
)
expected_data.append(
[
item.item_code,
item.description,
item.stock_qty,
item.stock_uom,
item.stock_qty * qty_to_produce / bom.quantity,
in_stock_qty,
floor(in_stock_qty / (item.stock_qty * qty_to_produce / bom.quantity))
if in_stock_qty
else None,
]
)
return expected_data

View File

@@ -325,6 +325,5 @@ erpnext.patches.v14_0.update_entry_type_for_journal_entry
erpnext.patches.v14_0.change_autoname_for_tax_withheld_vouchers
erpnext.patches.v14_0.update_asset_value_for_manual_depr_entries
erpnext.patches.v14_0.set_pick_list_status
# below 2 migration patches should always run last
# below migration patches should always run last
erpnext.patches.v14_0.migrate_gl_to_payment_ledger
erpnext.patches.v14_0.migrate_remarks_from_gl_to_payment_ledger

View File

@@ -1,6 +1,6 @@
import frappe
from frappe import qb
from frappe.query_builder import Case, CustomFunction
from frappe.query_builder import CustomFunction
from frappe.query_builder.custom import ConstantColumn
from frappe.query_builder.functions import Count, IfNull
from frappe.utils import flt
@@ -18,9 +18,21 @@ def create_accounting_dimension_fields():
make_dimension_in_accounting_doctypes(dimension, ["Payment Ledger Entry"])
def generate_name_for_payment_ledger_entries(gl_entries, start):
def generate_name_and_calculate_amount(gl_entries, start, receivable_accounts):
for index, entry in enumerate(gl_entries, 0):
entry.name = start + index
if entry.account in receivable_accounts:
entry.account_type = "Receivable"
entry.amount = entry.debit - entry.credit
entry.amount_in_account_currency = (
entry.debit_in_account_currency - entry.credit_in_account_currency
)
else:
entry.account_type = "Payable"
entry.amount = entry.credit - entry.debit
entry.amount_in_account_currency = (
entry.credit_in_account_currency - entry.debit_in_account_currency
)
def get_columns():
@@ -49,6 +61,9 @@ def get_columns():
"finance_book",
]
if frappe.db.has_column("Payment Ledger Entry", "remarks"):
columns.append("remarks")
dimensions_and_defaults = get_dimensions()
if dimensions_and_defaults:
for dimension in dimensions_and_defaults[0]:
@@ -99,12 +114,17 @@ def execute():
ifelse = CustomFunction("IF", ["condition", "then", "else"])
# Get Records Count
accounts = (
relavant_accounts = (
qb.from_(account)
.select(account.name)
.select(account.name, account.account_type)
.where((account.account_type == "Receivable") | (account.account_type == "Payable"))
.orderby(account.name)
.run(as_dict=True)
)
receivable_accounts = [x.name for x in relavant_accounts if x.account_type == "Receivable"]
accounts = [x.name for x in relavant_accounts]
un_processed = (
qb.from_(gl)
.select(Count(gl.name))
@@ -122,37 +142,21 @@ def execute():
while True:
if last_name:
where_clause = gl.name.gt(last_name) & (gl.is_cancelled == 0)
where_clause = gl.name.gt(last_name) & gl.account.isin(accounts) & gl.is_cancelled == 0
else:
where_clause = gl.is_cancelled == 0
where_clause = gl.account.isin(accounts) & gl.is_cancelled == 0
gl_entries = (
qb.from_(gl)
.inner_join(account)
.on((gl.account == account.name) & (account.account_type.isin(["Receivable", "Payable"])))
.select(
gl.star,
ConstantColumn(1).as_("docstatus"),
account.account_type.as_("account_type"),
IfNull(
ifelse(gl.against_voucher_type == "", None, gl.against_voucher_type), gl.voucher_type
).as_("against_voucher_type"),
IfNull(ifelse(gl.against_voucher == "", None, gl.against_voucher), gl.voucher_no).as_(
"against_voucher_no"
),
# convert debit/credit to amount
Case()
.when(account.account_type == "Receivable", gl.debit - gl.credit)
.else_(gl.credit - gl.debit)
.as_("amount"),
# convert debit/credit in account currency to amount in account currency
Case()
.when(
account.account_type == "Receivable",
gl.debit_in_account_currency - gl.credit_in_account_currency,
)
.else_(gl.credit_in_account_currency - gl.debit_in_account_currency)
.as_("amount_in_account_currency"),
)
.where(where_clause)
.orderby(gl.name)
@@ -163,8 +167,8 @@ def execute():
if gl_entries:
last_name = gl_entries[-1].name
# primary key(name) for payment ledger records
generate_name_for_payment_ledger_entries(gl_entries, processed)
# add primary key(name) and calculate based on debit and credit
generate_name_and_calculate_amount(gl_entries, processed, receivable_accounts)
try:
insert_query = build_insert_query()

View File

@@ -1,98 +0,0 @@
import frappe
from frappe import qb
from frappe.query_builder import CustomFunction
from frappe.query_builder.functions import Count, IfNull
from frappe.utils import flt
def execute():
"""
Migrate 'remarks' field from 'tabGL Entry' to 'tabPayment Ledger Entry'
"""
if frappe.reload_doc("accounts", "doctype", "payment_ledger_entry"):
gle = qb.DocType("GL Entry")
ple = qb.DocType("Payment Ledger Entry")
# Get empty PLE records
un_processed = (
qb.from_(ple).select(Count(ple.name)).where((ple.remarks.isnull()) & (ple.delinked == 0)).run()
)[0][0]
if un_processed:
print(f"Remarks for {un_processed} Payment Ledger records will be updated from GL Entry")
ifelse = CustomFunction("IF", ["condition", "then", "else"])
processed = 0
last_percent_update = 0
batch_size = 1000
last_name = None
while True:
if last_name:
where_clause = (ple.name.gt(last_name)) & (ple.remarks.isnull()) & (ple.delinked == 0)
else:
where_clause = (ple.remarks.isnull()) & (ple.delinked == 0)
# results are deterministic
names = (
qb.from_(ple).select(ple.name).where(where_clause).orderby(ple.name).limit(batch_size).run()
)
if names:
last_name = names[-1][0]
pl_entries = (
qb.from_(ple)
.left_join(gle)
.on(
(ple.account == gle.account)
& (ple.party_type == gle.party_type)
& (ple.party == gle.party)
& (ple.voucher_type == gle.voucher_type)
& (ple.voucher_no == gle.voucher_no)
& (
ple.against_voucher_type
== IfNull(
ifelse(gle.against_voucher_type == "", None, gle.against_voucher_type), gle.voucher_type
)
)
& (
ple.against_voucher_no
== IfNull(ifelse(gle.against_voucher == "", None, gle.against_voucher), gle.voucher_no)
)
& (ple.company == gle.company)
& (
((ple.account_type == "Receivable") & (ple.amount == (gle.debit - gle.credit)))
| (ple.account_type == "Payable") & (ple.amount == (gle.credit - gle.debit))
)
& (gle.remarks.notnull())
& (gle.is_cancelled == 0)
)
.select(ple.name)
.distinct()
.select(
gle.remarks.as_("gle_remarks"),
)
.where(ple.name.isin(names))
.run(as_dict=True)
)
if pl_entries:
for entry in pl_entries:
query = qb.update(ple).set(ple.remarks, entry.gle_remarks).where((ple.name == entry.name))
query.run()
frappe.db.commit()
processed += len(pl_entries)
percentage = flt((processed / un_processed) * 100, 2)
if percentage - last_percent_update > 1:
print(f"{percentage}% ({processed}) PLE records updated")
last_percent_update = percentage
else:
break
print("Remarks succesfully migrated")

View File

@@ -5,6 +5,8 @@ frappe.ui.form.on("Timesheet", {
setup: function(frm) {
frappe.require("/assets/erpnext/js/projects/timer.js");
frm.ignore_doctypes_on_cancel_all = ['Sales Invoice'];
frm.fields_dict.employee.get_query = function() {
return {
filters:{

View File

@@ -2,7 +2,7 @@ import datetime
import frappe
from frappe.tests.utils import FrappeTestCase
from frappe.utils import add_days, nowdate
from frappe.utils import add_days, add_months, nowdate
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
@@ -15,9 +15,16 @@ test_dependencies = ["Sales Order", "Item", "Sales Invoice", "Payment Terms Temp
class TestPaymentTermsStatusForSalesOrder(FrappeTestCase):
def setUp(self):
self.cleanup_old_entries()
def tearDown(self):
frappe.db.rollback()
def cleanup_old_entries(self):
frappe.db.delete("Sales Invoice", filters={"company": "_Test Company"})
frappe.db.delete("Sales Order", filters={"company": "_Test Company"})
def create_payment_terms_template(self):
# create template for 50-50 payments
template = None
@@ -348,7 +355,7 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase):
item = create_item(item_code="_Test Excavator 1", is_stock_item=0)
transaction_date = nowdate()
so = make_sales_order(
transaction_date=add_days(transaction_date, -30),
transaction_date=add_months(transaction_date, -1),
delivery_date=add_days(transaction_date, -15),
item=item.item_code,
qty=10,
@@ -369,13 +376,15 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase):
sinv.items[0].qty = 6
sinv.insert()
sinv.submit()
first_due_date = add_days(add_months(transaction_date, -1), 15)
columns, data, message, chart = execute(
frappe._dict(
{
"company": "_Test Company",
"item": item.item_code,
"from_due_date": add_days(transaction_date, -30),
"to_due_date": add_days(transaction_date, -15),
"from_due_date": add_months(transaction_date, -1),
"to_due_date": first_due_date,
}
)
)
@@ -384,11 +393,11 @@ class TestPaymentTermsStatusForSalesOrder(FrappeTestCase):
{
"name": so.name,
"customer": so.customer,
"submitted": datetime.date.fromisoformat(add_days(transaction_date, -30)),
"submitted": datetime.date.fromisoformat(add_months(transaction_date, -1)),
"status": "Completed",
"payment_term": None,
"description": "_Test 50-50",
"due_date": datetime.date.fromisoformat(add_days(transaction_date, -15)),
"due_date": datetime.date.fromisoformat(first_due_date),
"invoice_portion": 50.0,
"currency": "INR",
"base_payment_amount": 500000.0,

View File

@@ -54,7 +54,7 @@ class ItemAlternative(Document):
if not item_data.allow_alternative_item:
frappe.throw(alternate_item_check_msg.format(self.item_code))
if self.two_way and not alternative_item_data.allow_alternative_item:
frappe.throw(alternate_item_check_msg.format(self.item_code))
frappe.throw(alternate_item_check_msg.format(self.alternative_item_code))
def validate_duplicate(self):
if frappe.db.get_value(

View File

@@ -10,6 +10,7 @@ import json
import frappe
from frappe import _, msgprint
from frappe.model.mapper import get_mapped_doc
from frappe.query_builder.functions import Sum
from frappe.utils import cint, cstr, flt, get_link_to_form, getdate, new_line_sep, nowdate
from erpnext.buying.utils import check_on_hold_or_closed_status, validate_for_items
@@ -183,6 +184,34 @@ class MaterialRequest(BuyingController):
self.update_requested_qty()
self.update_requested_qty_in_production_plan()
def get_mr_items_ordered_qty(self, mr_items):
mr_items_ordered_qty = {}
mr_items = [d.name for d in self.get("items") if d.name in mr_items]
doctype = qty_field = None
if self.material_request_type in ("Material Issue", "Material Transfer", "Customer Provided"):
doctype = frappe.qb.DocType("Stock Entry Detail")
qty_field = doctype.transfer_qty
elif self.material_request_type == "Manufacture":
doctype = frappe.qb.DocType("Work Order")
qty_field = doctype.qty
if doctype and qty_field:
query = (
frappe.qb.from_(doctype)
.select(doctype.material_request_item, Sum(qty_field))
.where(
(doctype.material_request == self.name)
& (doctype.material_request_item.isin(mr_items))
& (doctype.docstatus == 1)
)
.groupby(doctype.material_request_item)
)
mr_items_ordered_qty = frappe._dict(query.run())
return mr_items_ordered_qty
def update_completed_qty(self, mr_items=None, update_modified=True):
if self.material_request_type == "Purchase":
return
@@ -190,18 +219,13 @@ class MaterialRequest(BuyingController):
if not mr_items:
mr_items = [d.name for d in self.get("items")]
mr_items_ordered_qty = self.get_mr_items_ordered_qty(mr_items)
mr_qty_allowance = frappe.db.get_single_value("Stock Settings", "mr_qty_allowance")
for d in self.get("items"):
if d.name in mr_items:
if self.material_request_type in ("Material Issue", "Material Transfer", "Customer Provided"):
d.ordered_qty = flt(
frappe.db.sql(
"""select sum(transfer_qty)
from `tabStock Entry Detail` where material_request = %s
and material_request_item = %s and docstatus = 1""",
(self.name, d.name),
)[0][0]
)
mr_qty_allowance = frappe.db.get_single_value("Stock Settings", "mr_qty_allowance")
d.ordered_qty = flt(mr_items_ordered_qty.get(d.name))
if mr_qty_allowance:
allowed_qty = d.qty + (d.qty * (mr_qty_allowance / 100))
@@ -220,14 +244,7 @@ class MaterialRequest(BuyingController):
)
elif self.material_request_type == "Manufacture":
d.ordered_qty = flt(
frappe.db.sql(
"""select sum(qty)
from `tabWork Order` where material_request = %s
and material_request_item = %s and docstatus = 1""",
(self.name, d.name),
)[0][0]
)
d.ordered_qty = flt(mr_items_ordered_qty.get(d.name))
frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)

View File

@@ -132,7 +132,7 @@ class TestFIFOValuation(unittest.TestCase):
total_qty = 0
for qty, rate in stock_queue:
if qty == 0:
if round_off_if_near_zero(qty) == 0:
continue
if qty > 0:
self.queue.add_stock(qty, rate)
@@ -154,7 +154,7 @@ class TestFIFOValuation(unittest.TestCase):
for qty, rate in stock_queue:
# don't allow negative stock
if qty == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
if round_off_if_near_zero(qty) == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
continue
if qty > 0:
self.queue.add_stock(qty, rate)
@@ -179,7 +179,7 @@ class TestFIFOValuation(unittest.TestCase):
for qty, rate in stock_queue:
# don't allow negative stock
if qty == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
if round_off_if_near_zero(qty) == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
continue
if qty > 0:
self.queue.add_stock(qty, rate)
@@ -282,7 +282,7 @@ class TestLIFOValuation(unittest.TestCase):
total_qty = 0
for qty, rate in stock_stack:
if qty == 0:
if round_off_if_near_zero(qty) == 0:
continue
if qty > 0:
self.stack.add_stock(qty, rate)
@@ -304,7 +304,7 @@ class TestLIFOValuation(unittest.TestCase):
for qty, rate in stock_stack:
# don't allow negative stock
if qty == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
if round_off_if_near_zero(qty) == 0 or total_qty + qty < 0 or abs(qty) < 0.1:
continue
if qty > 0:
self.stack.add_stock(qty, rate)

View File

@@ -2801,7 +2801,7 @@ Stock Ledger Entries and GL Entries are reposted for the selected Purchase Recei
Stock Levels,Niveaux du Stocks,
Stock Liabilities,Passif du Stock,
Stock Options,Options du Stock,
Stock Qty,Qté en Stock,
Stock Qty,Qté en unité de stock,
Stock Received But Not Billed,Stock Reçus Mais Non Facturés,
Stock Reports,Rapports de stock,
Stock Summary,Résumé du Stock,
Can't render this file because it is too large.