Compare commits

..

664 Commits

Author SHA1 Message Date
Frappe PR Bot
ff85f2a940 chore(release): Bumped to Version 15.6.1
## [15.6.1](https://github.com/frappe/erpnext/compare/v15.6.0...v15.6.1) (2023-12-13)

### Bug Fixes

* supplier removed on selection of item (backport [#38712](https://github.com/frappe/erpnext/issues/38712)) (backport [#38713](https://github.com/frappe/erpnext/issues/38713)) ([#38731](https://github.com/frappe/erpnext/issues/38731)) ([04c605d](04c605d76b))
2023-12-13 18:49:38 +00:00
mergify[bot]
04c605d76b fix: supplier removed on selection of item (backport #38712) (backport #38713) (#38731)
fix: supplier removed on selection of item (backport #38712) (#38713)

fix: supplier removed on selection of item (#38712)

(cherry picked from commit db24e24882)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit feb452b740)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2023-12-14 00:17:57 +05:30
Frappe PR Bot
86b276a3ec chore(release): Bumped to Version 15.6.0
# [15.6.0](https://github.com/frappe/erpnext/compare/v15.5.0...v15.6.0) (2023-12-12)

### Bug Fixes

* `split_invoices_based_on_payment_terms` (backport [#37859](https://github.com/frappe/erpnext/issues/37859)) ([#38488](https://github.com/frappe/erpnext/issues/38488)) ([4b76cc4](4b76cc46a1))
* 1st row depr. sch. value of asset put to less than 180 days acc. to I.T. S. 32 (backport [#38696](https://github.com/frappe/erpnext/issues/38696)) ([#38703](https://github.com/frappe/erpnext/issues/38703)) ([2bd9671](2bd96713db))
* auto delete draft serial and batch bundle (backport [#38637](https://github.com/frappe/erpnext/issues/38637)) ([#38654](https://github.com/frappe/erpnext/issues/38654)) ([b0675f6](b0675f6490))
* close PO on SCO close (backport [#38667](https://github.com/frappe/erpnext/issues/38667)) ([#38681](https://github.com/frappe/erpnext/issues/38681)) ([4055543](4055543f5d))
* format only if searched text contain link value text ([d79e6e3](d79e6e353e))
* get customers for leaderboard ([9d5c79d](9d5c79d6b2))
* get items for leaderboard ([7cb38a8](7cb38a8f22))
* get sales partner for leaderboard ([3845d42](3845d4294c))
* get sales person for leaderboard ([2fcfebe](2fcfebe1d3))
* get suppliers for leaderboard ([e205772](e205772482))
* ignore non-existing regional customizations (backport [#38621](https://github.com/frappe/erpnext/issues/38621)) ([#38624](https://github.com/frappe/erpnext/issues/38624)) ([c70e6f2](c70e6f23df))
* limit end date to current date ([dbdb971](dbdb971e10))
* negative batch issue (backport [#38688](https://github.com/frappe/erpnext/issues/38688)) ([#38694](https://github.com/frappe/erpnext/issues/38694)) ([a75081b](a75081b8c0))
* not able to make serial and batch using csv import (backport [#38659](https://github.com/frappe/erpnext/issues/38659)) ([#38662](https://github.com/frappe/erpnext/issues/38662)) ([dd07eca](dd07ecad45))
* only highest eligible coupon applied ([#38416](https://github.com/frappe/erpnext/issues/38416)) ([aa66ee6](aa66ee64ec))
* serial and batch bundle permission (backport [#38618](https://github.com/frappe/erpnext/issues/38618)) ([#38619](https://github.com/frappe/erpnext/issues/38619)) ([ce2bd15](ce2bd15872))
* serial no filter in the Serial No Ledger report (backport [#38669](https://github.com/frappe/erpnext/issues/38669)) ([#38682](https://github.com/frappe/erpnext/issues/38682)) ([d188c8e](d188c8ec0e))
* Shipping Address Link Showing in Buying (backport [#38634](https://github.com/frappe/erpnext/issues/38634)) ([#38646](https://github.com/frappe/erpnext/issues/38646)) ([4150ed9](4150ed9b3b))
* show stock qty in popup (backport [#38698](https://github.com/frappe/erpnext/issues/38698)) ([#38699](https://github.com/frappe/erpnext/issues/38699)) ([6e2cde4](6e2cde4a21))
* typeerror on new sites ([#38692](https://github.com/frappe/erpnext/issues/38692)) ([9239e73](9239e735ad))
* typo in unittest ([#38673](https://github.com/frappe/erpnext/issues/38673)) ([14ee13c](14ee13c77e))
* **ux:** don't update qty blindly (backport [#38608](https://github.com/frappe/erpnext/issues/38608)) ([#38639](https://github.com/frappe/erpnext/issues/38639)) ([0b2e2a2](0b2e2a2ab5))

### Features

* add employee number to client user bootinfo (backport [#38477](https://github.com/frappe/erpnext/issues/38477)) ([#38603](https://github.com/frappe/erpnext/issues/38603)) ([c7dbcbc](c7dbcbcd17))
2023-12-12 16:11:51 +00:00
Deepesh Garg
0d8a52f63b Merge pull request #38690 from frappe/version-15-hotfix
chore: release v15
2023-12-12 21:40:42 +05:30
mergify[bot]
2bd96713db fix: 1st row depr. sch. value of asset put to less than 180 days acc. to I.T. S. 32 (backport #38696) (#38703)
fix: 1st row depr. sch. value of asset put to less than 180 days acc. to I.T. S. 32 (#38696)

fix: 1st row value of asset put to less than 180 days acc. to IT S. 32
(cherry picked from commit e7984b3ef9)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-12-12 21:09:38 +05:30
Raffael Meyer
1d2edec550 Merge pull request #38675 from frappe/mergify/bp/version-15-hotfix/pr-38672
fix: get data for leaderboard (backport #38672)
2023-12-12 13:44:04 +01:00
ruthra kumar
965126df83 Merge pull request #38678 from frappe/mergify/bp/version-15-hotfix/pr-38673
fix: typo in unittest (backport #38673)
2023-12-12 17:35:22 +05:30
mergify[bot]
6e2cde4a21 fix: show stock qty in popup (backport #38698) (#38699)
fix: show stock qty in popup (#38698)

(cherry picked from commit b562b4cf99)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-12 17:04:57 +05:30
mergify[bot]
a75081b8c0 fix: negative batch issue (backport #38688) (#38694)
fix: negative batch issue (#38688)

(cherry picked from commit 69d7a640ee)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-12 16:41:26 +05:30
ruthra kumar
b68e1f6ea6 Merge pull request #38693 from frappe/mergify/bp/version-15-hotfix/pr-38692
fix: typeerror on new sites (backport #38692)
2023-12-12 16:03:08 +05:30
ruthra kumar
9239e735ad fix: typeerror on new sites (#38692)
(cherry picked from commit fa2d33cb50)
2023-12-12 10:14:39 +00:00
ruthra kumar
576ff49943 Merge pull request #38687 from frappe/mergify/bp/version-15-hotfix/pr-38685
refactor: add `get_list` for virtual child doctypes (backport #38685)
2023-12-12 15:24:37 +05:30
ruthra kumar
92b5c80a4a refactor: add get_list for virtual child doctypes
(cherry picked from commit 15c90551b6)
2023-12-12 09:12:39 +00:00
mergify[bot]
d188c8ec0e fix: serial no filter in the Serial No Ledger report (backport #38669) (#38682)
fix: serial no filter in the Serial No Ledger report (#38669)

(cherry picked from commit 780c4278e6)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-12 14:33:11 +05:30
mergify[bot]
4055543f5d fix: close PO on SCO close (backport #38667) (#38681)
fix: close PO on SCO close

(cherry picked from commit b023e5d6b3)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-12 13:40:30 +05:30
ruthra kumar
fc79c6bf54 Merge pull request #38684 from frappe/mergify/bp/version-15-hotfix/pr-38679
refactor(test): repost utility deletion flag test (backport #38679)
2023-12-12 13:33:24 +05:30
ruthra kumar
522113ba98 refactor(test): update repost settings before test case
(cherry picked from commit acb6e8e120)
2023-12-12 07:16:51 +00:00
ruthra kumar
6469526c26 refactor: increase limit and remove explicit call to start_repost
(cherry picked from commit ccff588563)
2023-12-12 07:16:50 +00:00
ruthra kumar
122e6902ed refactor: remove explicit commit on repost
(cherry picked from commit a97b3db749)
2023-12-12 07:16:50 +00:00
ruthra kumar
64d93cec66 refactor(test): repost utility deletion flag test
(cherry picked from commit cc15f695b4)
2023-12-12 07:16:50 +00:00
Raffael Meyer
14ee13c77e fix: typo in unittest (#38673)
(cherry picked from commit 6ad298adfc)
2023-12-12 04:26:54 +00:00
barredterra
b17178bba9 chore: deprecate unused method
(cherry picked from commit 956c3c50a0)
2023-12-12 04:24:39 +00:00
barredterra
3845d4294c fix: get sales partner for leaderboard
(cherry picked from commit 40c1acc961)
2023-12-12 04:24:39 +00:00
barredterra
2fcfebe1d3 fix: get sales person for leaderboard
(cherry picked from commit 7babfd4ac4)
2023-12-12 04:24:39 +00:00
barredterra
e205772482 fix: get suppliers for leaderboard
(cherry picked from commit 65df4b6aa8)
2023-12-12 04:24:39 +00:00
barredterra
7cb38a8f22 fix: get items for leaderboard
(cherry picked from commit 2721ee3a8d)
2023-12-12 04:24:38 +00:00
barredterra
9d5c79d6b2 fix: get customers for leaderboard
(cherry picked from commit 137b5a6108)
2023-12-12 04:24:38 +00:00
mergify[bot]
dd07ecad45 fix: not able to make serial and batch using csv import (backport #38659) (#38662)
fix: not able to make serial and batch using csv import (#38659)

(cherry picked from commit 89a0e9c245)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-11 11:29:25 +05:30
mergify[bot]
b0675f6490 fix: auto delete draft serial and batch bundle (backport #38637) (#38654)
fix: auto delete draft serial and batch bundle (#38637)

(cherry picked from commit 89326bd657)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-10 16:45:03 +05:30
mergify[bot]
4150ed9b3b fix: Shipping Address Link Showing in Buying (backport #38634) (#38646)
fix(ux): `Shipping Address Link`

(cherry picked from commit ca0c3eb184)

Co-authored-by: creative-paramu <pparameshwari@thirvusoft.in>
2023-12-08 19:04:24 +05:30
mergify[bot]
0b2e2a2ab5 fix(ux): don't update qty blindly (backport #38608) (#38639)
fix(ux): don't update qty blindly

(cherry picked from commit 0156339f34)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-08 17:59:32 +05:30
mergify[bot]
c70e6f23df fix: ignore non-existing regional customizations (backport #38621) (#38624)
fix: ignore non-existing regional customizations (#38621)

(cherry picked from commit 9611e9bd7f)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-12-07 21:43:46 +05:30
Shariq Ansari
5cf0c896bb Merge pull request #38627 from frappe/mergify/bp/version-15-hotfix/pr-38623
fix: format only if searched text contain link value text (backport #38623)
2023-12-07 20:51:03 +05:30
Shariq Ansari
d79e6e353e fix: format only if searched text contain link value text
(cherry picked from commit 08ed3cd313)
2023-12-07 15:18:52 +00:00
mergify[bot]
ce2bd15872 fix: serial and batch bundle permission (backport #38618) (#38619)
fix: serial and batch bundle permission (#38618)

(cherry picked from commit 231ab83562)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-07 18:36:31 +05:30
mergify[bot]
deef6ea66a chore: minor code cleanup (backport #38615) (#38616)
chore: minor code cleanup (#38615)

(cherry picked from commit f45dd740c5)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-07 15:36:21 +05:30
mergify[bot]
aa66ee64ec fix: only highest eligible coupon applied (#38416)
fix: only highest eligible coupon applied (#38416)

* fix: application of pricing rule when coupon is used

(cherry picked from commit d34787cf6d)

Co-authored-by: sandratridz <102575830+sandratridz@users.noreply.github.com>
2023-12-07 10:34:11 +05:30
Ankush Menat
eeb0567a73 chore: remove unused cache=True
(cherry picked from commit 6a47a2ceaf)
2023-12-06 20:54:43 +05:30
mergify[bot]
c7dbcbcd17 feat: add employee number to client user bootinfo (backport #38477) (#38603)
feat: add employee number to client user bootinfo (#38477)

(cherry picked from commit 525f656cc1)

Co-authored-by: Richard Case <110036763+casesolved-co-uk@users.noreply.github.com>
2023-12-06 20:52:50 +05:30
mergify[bot]
4b76cc46a1 fix: split_invoices_based_on_payment_terms (backport #37859) (#38488)
* refactor: `split_invoices_based_on_payment_terms`

- Invoices were in the wrong order due to the logic. The invoices with payment terms were added first and the rest after.
- Overly long function with unnecessary loops (reduced to one main loop) and complexity
- The split row as per payment terms was not ordered. So the second installment was allocated first

(cherry picked from commit 6bd56d2d5f)

* test: `get_outstanding_reference_documents` (triggered via UI)

(cherry picked from commit 162c0497d1)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry/test_payment_entry.py

* fix: Alert message and make sure invoice due dates are different for effective test

- Make invoice due dates are different so that the invoice with the earliest due date is allocated first in the test
- Translate voucher type, simplify alert message. The invoice could be "split" into 1 row, no. of rows in the message seems unnecessary.

(cherry picked from commit 56ac3424d2)

* style: Remove spaces introduced via merge conflict

(cherry picked from commit 4b4b176fcf)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry/test_payment_entry.py

* fix: Re-add no.of rows split in alert message

(cherry picked from commit 1fc5844025)

* fix: Merge conflicts in tests

---------

Co-authored-by: marination <maricadsouza221197@gmail.com>
2023-12-06 18:01:42 +05:30
Gursheen Kaur Anand
bfe2b923e1 Merge pull request #38572 from frappe/mergify/bp/version-15-hotfix/pr-38556
fix(minor): financial statements period end date (backport #38556)
2023-12-05 22:02:27 +05:30
Frappe PR Bot
6826a1e976 chore(release): Bumped to Version 15.5.0
# [15.5.0](https://github.com/frappe/erpnext/compare/v15.4.0...v15.5.0) (2023-12-05)

### Bug Fixes

* `AttributeError` while saving Purchase Invoice (backport [#38482](https://github.com/frappe/erpnext/issues/38482)) ([#38490](https://github.com/frappe/erpnext/issues/38490)) ([f6c48e8](f6c48e8ecf))
* `OperationalError` while selecting Serial No in `Warranty Claim` (backport [#38394](https://github.com/frappe/erpnext/issues/38394)) ([#38414](https://github.com/frappe/erpnext/issues/38414)) ([80afeca](80afeca229))
* Add missing french translations ([#38368](https://github.com/frappe/erpnext/issues/38368)) ([b5c89ec](b5c89ec3b4))
* better overlap logic for job card (backport [#38432](https://github.com/frappe/erpnext/issues/38432)) ([#38522](https://github.com/frappe/erpnext/issues/38522)) ([2a9e843](2a9e843610))
* consider the `Valuation Method` while picking incorrect SLE (backport [#38592](https://github.com/frappe/erpnext/issues/38592)) ([#38595](https://github.com/frappe/erpnext/issues/38595)) ([9d45bbd](9d45bbd051))
* debit credit mismatch in multi-currecy asset purchase receipt ([#38342](https://github.com/frappe/erpnext/issues/38342)) ([b9f26ae](b9f26ae849))
* don't consider cancelled entries ([#38401](https://github.com/frappe/erpnext/issues/38401)) ([0a29dbe](0a29dbe09e))
* don't show non-stock items in Stock Analytics report (backport [#38543](https://github.com/frappe/erpnext/issues/38543)) ([#38545](https://github.com/frappe/erpnext/issues/38545)) ([282a5b2](282a5b27ad))
* don't update previous doc on rate change (backport [#38493](https://github.com/frappe/erpnext/issues/38493)) ([#38524](https://github.com/frappe/erpnext/issues/38524)) ([0aa96f7](0aa96f783d))
* exclude `invoice_doctypes` from party advance ([927538f](927538f776))
* exploded items in Subcontracting Receipt (backport [#38441](https://github.com/frappe/erpnext/issues/38441)) ([#38445](https://github.com/frappe/erpnext/issues/38445)) ([e066698](e06669847d))
* german translations for Lost Quotations (backport [#38435](https://github.com/frappe/erpnext/issues/38435)) ([#38516](https://github.com/frappe/erpnext/issues/38516)) ([33c59a2](33c59a2bb1))
* get dynamic link with parenttype contact ([cb9589b](cb9589b8ef))
* incorrect customer outstanding amount ([#38475](https://github.com/frappe/erpnext/issues/38475)) ([98fe89a](98fe89a24d))
* incorrect material request quantity in Production Plan (backport [#38566](https://github.com/frappe/erpnext/issues/38566)) ([#38579](https://github.com/frappe/erpnext/issues/38579)) ([145ed3a](145ed3a3b1))
* incorrect ordered qty for Subcontracting Order ([#38415](https://github.com/frappe/erpnext/issues/38415)) ([71fe2bc](71fe2bcc28))
* incorrect requested quantity for the subcontracting order ([abe3e41](abe3e41a17))
* incorrectly treating normal payment as advance ([#38437](https://github.com/frappe/erpnext/issues/38437)) ([246dd74](246dd74ba4))
* item group filter in sales person wise report ([602f6ca](602f6ca545))
* make create button translatable ([#38165](https://github.com/frappe/erpnext/issues/38165)) ([95f9cc9](95f9cc99b9))
* **regional:** use net figures for sales calc ([#38260](https://github.com/frappe/erpnext/issues/38260)) ([4a243ce](4a243ce5b7))
* remove hardcoded, implicit rounding loss allowance ([4baf796](4baf7960dd))
* scan for serial or batch in bundle (backport [#38534](https://github.com/frappe/erpnext/issues/38534)) ([#38552](https://github.com/frappe/erpnext/issues/38552)) ([88d2a8d](88d2a8d668))
* set cwip account before asset tests ([de7e1ab](de7e1ab237))
* show item name as title instead of item group in BOM (backport [#38478](https://github.com/frappe/erpnext/issues/38478)) ([#38481](https://github.com/frappe/erpnext/issues/38481)) ([8e57862](8e57862a1c))
* show party instead of party name where naming series not set ([f120dc5](f120dc56c2))
* sql error while filtering on finance book in GL ([3779943](3779943221))
* **test:** use correct account type for testing ([8b6eb35](8b6eb3599c))
* unset discount amount based on coupon code ([0e50e77](0e50e77d8e))
* use `docstatus` instead of `status` (backport [#38439](https://github.com/frappe/erpnext/issues/38439)) ([#38443](https://github.com/frappe/erpnext/issues/38443)) ([a50e872](a50e872820))
* use predefined onload property `load_after_mapping` ([#38209](https://github.com/frappe/erpnext/issues/38209)) ([4a558b7](4a558b7efb))
* **ux:** make valuation field read only when it can't be modified (backport [#38450](https://github.com/frappe/erpnext/issues/38450)) ([#38464](https://github.com/frappe/erpnext/issues/38464)) ([2d9ba88](2d9ba88870))
* validation error has not throw for the batch (backport [#38494](https://github.com/frappe/erpnext/issues/38494)) ([#38502](https://github.com/frappe/erpnext/issues/38502)) ([c797c53](c797c533ed))

### Features

* `Company` filter in `Stock Ledger Variance` report (backport [#38553](https://github.com/frappe/erpnext/issues/38553)) ([#38574](https://github.com/frappe/erpnext/issues/38574)) ([02d7dd8](02d7dd8b15))
* add customer group filter in sales register ([#38365](https://github.com/frappe/erpnext/issues/38365)) ([185b715](185b715d43))
* auto create PR on SCR submission (backport [#38290](https://github.com/frappe/erpnext/issues/38290)) ([#38428](https://github.com/frappe/erpnext/issues/38428)) ([7005d51](7005d51af3))
* enable automatic type annotations (backport [#38452](https://github.com/frappe/erpnext/issues/38452)) ([#38454](https://github.com/frappe/erpnext/issues/38454)) ([5e6a4d2](5e6a4d257e))
* shift depreciation for assets (backport [#38327](https://github.com/frappe/erpnext/issues/38327)) ([#38417](https://github.com/frappe/erpnext/issues/38417)) ([12ad1ec](12ad1ec71a))
2023-12-05 13:51:15 +00:00
Deepesh Garg
8a9ed0d04f Merge pull request #38590 from frappe/version-15-hotfix
chore: release v15
2023-12-05 19:19:52 +05:30
mergify[bot]
9d45bbd051 fix: consider the Valuation Method while picking incorrect SLE (backport #38592) (#38595)
* fix: incorrect SLE for `Moving Average` valuation method

(cherry picked from commit 8beec58670)

* feat: add `Valuation Method` column in `Stock Ledger Variance` report

(cherry picked from commit 16c297c2ec)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-05 18:13:43 +05:30
ruthra kumar
acf94dd4ad Merge pull request #38586 from frappe/mergify/bp/version-15-hotfix/pr-38580
fix: sql error while filtering on finance book in GL (backport #38580)
2023-12-05 15:06:42 +05:30
ruthra kumar
3779943221 fix: sql error while filtering on finance book in GL
(cherry picked from commit b1d9f3132d)
2023-12-05 09:11:40 +00:00
mergify[bot]
145ed3a3b1 fix: incorrect material request quantity in Production Plan (backport #38566) (#38579)
fix: incorrect material request quantity in Production Plan (#38566)

(cherry picked from commit aaa9036eca)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-05 14:24:26 +05:30
ruthra kumar
7076f3d778 Merge pull request #38577 from frappe/mergify/bp/version-15-hotfix/pr-38570
refactor: ignore unreconcile doc on PI cancel/delete (backport #38570)
2023-12-05 13:13:29 +05:30
mergify[bot]
02d7dd8b15 feat: Company filter in Stock Ledger Variance report (backport #38553) (#38574)
feat: `Company` filter in `Stock Ledger Variance` report

(cherry picked from commit fb3421fcce)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-05 12:33:06 +05:30
ruthra kumar
ee87c2a211 refactor: ingore on JE cancel as well
(cherry picked from commit 1a5d56977e)
2023-12-05 06:34:14 +00:00
ruthra kumar
c83c97f466 refactor: ignore unreconcile doc on PI cancel/delete
(cherry picked from commit 4ca84eadb6)
2023-12-05 06:34:14 +00:00
Gursheen Anand
dbdb971e10 fix: limit end date to current date
(cherry picked from commit ab6e92aae1)
2023-12-05 05:54:49 +00:00
Shariq Ansari
39e04b119a Merge pull request #38564 from frappe/mergify/bp/version-15-hotfix/pr-38562
fix: get dynamic link with parenttype contact (backport #38562)
2023-12-04 19:22:37 +05:30
Shariq Ansari
cb9589b8ef fix: get dynamic link with parenttype contact
(cherry picked from commit 3d7ad71b22)
2023-12-04 13:51:36 +00:00
mergify[bot]
88d2a8d668 fix: scan for serial or batch in bundle (backport #38534) (#38552)
fix: scan for serial or batch in bundle (#38534)

(cherry picked from commit c8693cdf37)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-04 15:24:28 +05:30
ruthra kumar
92c8eb17ca Merge pull request #38550 from frappe/mergify/bp/version-15-hotfix/pr-38475
fix: incorrect customer outstanding amount (backport #38475)
2023-12-04 13:57:00 +05:30
NIYAZ RAZAK
98fe89a24d fix: incorrect customer outstanding amount (#38475)
* fix: incorrect customer outstanding amount

* chore: resolve linting error

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
(cherry picked from commit 3df1d75bdd)
2023-12-04 08:11:06 +00:00
ruthra kumar
66e3dc7358 Merge pull request #38547 from frappe/mergify/bp/version-15-hotfix/pr-38283
chore: move reconciliation cleanup patch to pre-model sync (backport #38283)
2023-12-04 13:40:48 +05:30
ruthra kumar
e405695838 chore: move reconciliation cleanup patch to pre-model
(cherry picked from commit f258ab5e98)
2023-12-04 07:34:09 +00:00
ruthra kumar
d8f9e3a8b1 Merge pull request #38542 from frappe/mergify/bp/version-15-hotfix/pr-38148
refactor: convert Payment Reconciliation to virtual doctype (backport #38148)
2023-12-04 12:37:06 +05:30
mergify[bot]
282a5b27ad fix: don't show non-stock items in Stock Analytics report (backport #38543) (#38545)
* fix(ux): stock-item filter for Item Code field

(cherry picked from commit ccdcb7dfcc)

* fix: don't show non-stock items in Stock Analytics report

(cherry picked from commit 01aadbef85)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-04 12:18:58 +05:30
ruthra kumar
b8b8c02bf9 chore: resolve conflict 2023-12-04 12:16:41 +05:30
ruthra kumar
192343dec2 chore: clear singles table and reconciliation related tables
(cherry picked from commit f31002636b)
2023-12-04 06:31:08 +00:00
ruthra kumar
4123f4b0bd chore: remove reconciliation defaults from patch
(cherry picked from commit b5dd0c8630)
2023-12-04 06:31:08 +00:00
ruthra kumar
bcbf5da905 refactor: virtual doctype methods
(cherry picked from commit 9c7b19e0b7)
2023-12-04 06:31:08 +00:00
ruthra kumar
f6d481de89 refactor: convert payment reconciliation tool to virtual doctype
(cherry picked from commit 3a51a3f37e)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation_allocation/payment_reconciliation_allocation.json
2023-12-04 06:31:07 +00:00
ruthra kumar
0b64daf497 Merge pull request #38540 from frappe/mergify/bp/version-15-hotfix/pr-38220
fix: exclude `invoice_doctypes` from party advance (backport #38220)
2023-12-04 11:19:03 +05:30
ruthra kumar
0a05154698 Merge pull request #38538 from frappe/mergify/bp/version-15-hotfix/pr-38437
fix: incorrectly treating normal payment as advance (backport #38437)
2023-12-04 11:08:46 +05:30
Dany Robert
927538f776 fix: exclude invoice_doctypes from party advance
(cherry picked from commit f34ffc2062)
2023-12-04 05:31:50 +00:00
ruthra kumar
246dd74ba4 fix: incorrectly treating normal payment as advance (#38437)
fix: treating normal payment as advance
(cherry picked from commit dd39da0b77)
2023-12-04 04:39:16 +00:00
mergify[bot]
b5c89ec3b4 fix: Add missing french translations (#38368)
fix: Add missing french translations (#38368)

fix: Add missing french translation

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
(cherry picked from commit a1e0197a8b)

Co-authored-by: noec764 <58433943+noec764@users.noreply.github.com>
2023-12-04 09:37:46 +05:30
mergify[bot]
4a558b7efb fix: use predefined onload property load_after_mapping (#38209)
fix: use predefined onload property `load_after_mapping` (#38209)

(cherry picked from commit b6a7549407)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2023-12-04 09:36:52 +05:30
mergify[bot]
0aa96f783d fix: don't update previous doc on rate change (backport #38493) (#38524)
* fix: don't update previous doc on rate change

(cherry picked from commit 68f5dd3e7b)

* fix: `linter`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-03 23:20:53 +05:30
mergify[bot]
33c59a2bb1 fix: german translations for Lost Quotations (backport #38435) (#38516)
fix: german translations for Lost Quotations (#38435)

(cherry picked from commit 5952cfa673)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-12-03 23:19:32 +05:30
ruthra kumar
5b1e7666c2 Merge pull request #38528 from frappe/mergify/bp/version-15-hotfix/pr-38525
fix: multiple minor fixes in report and Exchange Rate Revaluation (backport #38525)
2023-12-03 17:04:29 +05:30
ruthra kumar
4baf7960dd fix: remove hardcoded, implicit rounding loss allowance
(cherry picked from commit 64266c4d38)
2023-12-03 11:14:26 +00:00
ruthra kumar
602f6ca545 fix: item group filter in sales person wise report
(cherry picked from commit f4d418ea6d)
2023-12-03 11:14:26 +00:00
mergify[bot]
2a9e843610 fix: better overlap logic for job card (backport #38432) (#38522)
fix: better overlap logic for job card (#38432)

(cherry picked from commit 74eab91042)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-03 09:49:48 +05:30
mergify[bot]
0a29dbe09e fix: don't consider cancelled entries (#38401)
* fix: don't consider cancelled entries

(cherry picked from commit adfcdb3b65)

* refactor: get outstanding journal entry using query builder

(cherry picked from commit ff27cccff4)

---------

Co-authored-by: Devin Slauenwhite <devin.slauenwhite@gmail.com>
2023-12-02 20:07:26 +05:30
mergify[bot]
185b715d43 feat: add customer group filter in sales register (#38365)
feat: add customer group filter in sales register

(cherry picked from commit 5a97fa6336)

Co-authored-by: Nandhinidevi123 <nandhini.devi@thirvusoft.in>
2023-12-02 19:50:35 +05:30
mergify[bot]
c797c533ed fix: validation error has not throw for the batch (backport #38494) (#38502)
fix: validation error has not throw for the batch (#38494)

* fix: validation error has not throw for the batch

* chore: fix test cases

(cherry picked from commit 5e9016ffab)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-12-01 21:46:35 +05:30
mergify[bot]
7b363db582 chore: changed sort_order to DESC for customer (backport #38498) (#38501)
chore: changed sort_order to DESC for customer (#38498)

(cherry picked from commit 6bc40373f2)

Co-authored-by: Sherin KR <sherinkrply@gmail.com>
2023-12-01 19:09:31 +05:30
Gursheen Kaur Anand
afa6255eee Merge pull request #38497 from frappe/mergify/bp/version-15-hotfix/pr-38144
fix(minor): show party instead of party name where naming series not set (backport #38144)
2023-12-01 18:20:11 +05:30
Gursheen Anand
f120dc56c2 fix: show party instead of party name where naming series not set
(cherry picked from commit b27af6b5c8)
2023-12-01 12:35:00 +00:00
mergify[bot]
f6c48e8ecf fix: AttributeError while saving Purchase Invoice (backport #38482) (#38490)
fix: `AttributeError` while saving Purchase Invoice

(cherry picked from commit 60a81a563e)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-12-01 14:10:31 +05:30
ruthra kumar
bf44e9ed64 Merge pull request #38484 from frappe/mergify/bp/version-15-hotfix/pr-38393
refactor: GL entries build logic for `Advance in Separate Party Account` option. (backport #38393)
2023-12-01 13:26:11 +05:30
mergify[bot]
9cdbd33e40 chore: add translate function to email subject in digest frecuency (backport #38474) (#38487)
chore: add translate function to email subject in digest frecuency (#38474)

chore: add translate function to email subject in digest frecuency
(cherry picked from commit b24e28953b)

Co-authored-by: Ernesto Ruiz <eruiz@wbapps.com>
2023-12-01 12:43:37 +05:30
ruthra kumar
4a4f4ad323 refactor: handle forex payment advance entries
(cherry picked from commit 961bdf0d24)
2023-12-01 07:07:56 +00:00
ruthra kumar
5d9f71af95 refactor(test): filter on document names
(cherry picked from commit 080aa30407)
2023-12-01 07:07:56 +00:00
ruthra kumar
8b6eb3599c fix(test): use correct account type for testing
(cherry picked from commit eecf9cd1d8)
2023-12-01 07:07:56 +00:00
ruthra kumar
25b49ef0de test: ledger pre and post reconciliation on advance as liability
(cherry picked from commit 0255e09285)
2023-12-01 07:07:56 +00:00
ruthra kumar
c67d0eb718 refactor(test): advance allocation on purchase invoice
(cherry picked from commit 2add802d0d)
2023-12-01 07:07:56 +00:00
ruthra kumar
86b2de4013 refactor: redefine dr_or_cr for unallocated amount
(cherry picked from commit 3e6306348a)
2023-12-01 07:07:55 +00:00
ruthra kumar
8ed2ea29ac refactor: 'partial' flag to only cancel unlinked ledger entries
(cherry picked from commit 2633d7dca3)
2023-12-01 07:07:55 +00:00
ruthra kumar
65b4dbab2a refactor: return the newly added reference upon reconciliation
(cherry picked from commit ecb533c4d1)
2023-12-01 07:07:55 +00:00
ruthra kumar
a1bdd69ffd refactor: 'make_advance_gl_entries' method
make_advance_gl_entries -> add_advance_gl_entries -> add_advance_gl_for_reference

'make_advance_gl_entries' - main method thats builds and post GL
entries for all or one specific reference based on parameters

'add_advance_gl_entries' - build GL map for all or one specific
reference. Return an array of dict.

'add_advance_gl_for_reference' - utility function to build gl
entries. returns dict.

(cherry picked from commit 5fc19dab54)
2023-12-01 07:07:55 +00:00
ruthra kumar
58d04e1f42 refactor: use different GL build logic for advance as liability
(cherry picked from commit 58114e7b24)
2023-12-01 07:07:55 +00:00
ruthra kumar
aaef9d68c0 refactor: post to GL and Payment Ledger on advance as liability
(cherry picked from commit 78ab11f991)
2023-12-01 07:07:54 +00:00
ruthra kumar
bb8ac94adc test: assert ledger entries on partial reconciliation
with `Advance as Liability`, partial reconciliation should not post
duplicate ledger entries for same reference

(cherry picked from commit 3263f2023c)
2023-12-01 07:07:54 +00:00
mergify[bot]
8819d6c173 add supplier group filter in purchase register (backport #38421) (#38483)
add supplier group filter in purchase register (#38421)

* add supplier group field in purchase register

* Update purchase_register.js

(cherry picked from commit e2a519464b)

Co-authored-by: NandhiniDevi <95607404+Nandhinidevi123@users.noreply.github.com>
2023-12-01 11:51:09 +05:30
mergify[bot]
8e57862a1c fix: show item name as title instead of item group in BOM (backport #38478) (#38481)
fix: show item name as title instead of item group in BOM (#38478)

Item fields in BOM used to show Item Group when Items were set to show title as link fields. Now they show Item Name instead

(cherry picked from commit 3a66aefd2c)

Co-authored-by: Gughan Ravikumar <gughanrk@gmail.com>
2023-12-01 11:32:28 +05:30
rohitwaghchaure
b9a42a3b1b Merge pull request #38472 from frappe/mergify/bp/version-15-hotfix/pr-38455
fix: incorrect requested quantity for the subcontracting order (backport #38455)
2023-11-30 19:25:14 +05:30
Rohit Waghchaure
abe3e41a17 fix: incorrect requested quantity for the subcontracting order
(cherry picked from commit 691e3bb24f)
2023-11-30 13:39:06 +00:00
mergify[bot]
2d9ba88870 fix(ux): make valuation field read only when it can't be modified (backport #38450) (#38464)
* fix(ux): make `basic_rate` field read-only based on purpose

(cherry picked from commit abc7d30024)

* fix(ux): make PR `rate` field read-only having PO ref

(cherry picked from commit ae294ee470)

* fix(ux): make PI `rate` field read-only having PR ref

(cherry picked from commit 3d4156cc7d)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-30 17:30:35 +05:30
ruthra kumar
03013a8433 Merge pull request #38461 from frappe/mergify/bp/version-15-hotfix/pr-38457
refactor: use flt on outstanding on AR/AP summary report (backport #38457)
2023-11-30 16:42:58 +05:30
ruthra kumar
f44bb0df50 refactor: use flt on outstanding on AR/AP summary report
(cherry picked from commit e4bdd3a28d)
2023-11-30 10:55:51 +00:00
mergify[bot]
5e6a4d257e feat: enable automatic type annotations (backport #38452) (#38454)
feat: enable automatic type annotations (#38452)

(cherry picked from commit 63313eef6f)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-11-30 14:43:16 +05:30
mergify[bot]
7f4d2b707a refactor: Simpler log settings setup (backport #38449) (#38451)
refactor: Simpler log settings setup (#38449)

Depends on https://github.com/frappe/frappe/pull/23507

(cherry picked from commit 1da9087cc4)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-11-30 13:30:15 +05:30
ruthra kumar
05da5bfc9a Merge pull request #38448 from frappe/mergify/bp/version-15-hotfix/pr-38446
refactor: pass on filter to up front outstanding query as well (backport #38446)
2023-11-30 13:18:52 +05:30
ruthra kumar
7a1744691f refactor: pass on filter to upfront outstanding query as well
(cherry picked from commit cfd3230c75)
2023-11-30 07:26:32 +00:00
mergify[bot]
e06669847d fix: exploded items in Subcontracting Receipt (backport #38441) (#38445)
fix: exploded items in Subcontracting Receipt

(cherry picked from commit 62b4a263f8)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-30 12:16:07 +05:30
mergify[bot]
a50e872820 fix: use docstatus instead of status (backport #38439) (#38443)
fix: use `docstatus` instead of `status`

(cherry picked from commit 1423b38d50)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-30 12:12:02 +05:30
mergify[bot]
7005d51af3 feat: auto create PR on SCR submission (backport #38290) (#38428)
* feat: add field `Action on Purchase Order Submission`

(cherry picked from commit 628ea42b63)

# Conflicts:
#	erpnext/buying/doctype/buying_settings/buying_settings.json

* feat: auto create SCO on PO submission

(cherry picked from commit 9ec6f1e1d6)

# Conflicts:
#	erpnext/buying/doctype/buying_settings/buying_settings.json

* feat: add field `Action on Subcontracting Receipt Submission`

(cherry picked from commit 762906f240)

# Conflicts:
#	erpnext/buying/doctype/buying_settings/buying_settings.json

* chore: notify user on SCO creation

(cherry picked from commit 745e3bfb73)

* feat: add field `Purchase Order Item` in SCO Service Item

(cherry picked from commit 45d5cff47d)

* fix: hold PO item ref in SCO Service Item

(cherry picked from commit 7e4dd33ab0)

* feat: add field `Purchase Order Item` in SCO Item

(cherry picked from commit a2ede7d6d5)

* fix: maintain PO and PO Item ref in SCR Item

(cherry picked from commit e1cea25781)

* feat: auto create PR on SCR submission

(cherry picked from commit 040cc8d22f)

* feat: add `Purchase Order` link in SCR connections

(cherry picked from commit ca8a5b45ba)

* feat: add `Subcontracting Receipt` link in PO connections

(cherry picked from commit 98cba5ed30)

* fix: dont show `View` button on cancelled SCR

(cherry picked from commit dd80d3b9b9)

* fix: use checkbox instead of select field

(cherry picked from commit d366a91d9e)

# Conflicts:
#	erpnext/buying/doctype/buying_settings/buying_settings.json

* feat: Subcontracting Receipt ref in Purchase Receipt

(cherry picked from commit d891bd7fac)

* feat: SCR Item ref in PR Item

(cherry picked from commit 37b3ac7952)

* feat: provision to create PR from SCR

(cherry picked from commit 8052103197)

* chore: PR ref in SCR connections

(cherry picked from commit 096a2c8cd0)

* fix: map warehouses in return SCR

(cherry picked from commit 874766a82f)

* fix(ux): hide `Create Purchase Receipt` button for Subcontract Return

(cherry picked from commit 7145b040f1)

* chore: `linter`

(cherry picked from commit 857f2b5a01)

* test: auto create SCO on PO submit

(cherry picked from commit 68585f6f2b)

* test: auto create PR on SCR submit

(cherry picked from commit 7b0cd03f88)

* fix(test): `test_auto_create_purchase_receipt`

(cherry picked from commit 3da0aa6a0b)

* chore: `conflicts`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-30 12:11:05 +05:30
Deepesh Garg
277e81c68e Merge pull request #38431 from frappe/mergify/bp/version-15-hotfix/pr-38429
fix(minor): set capital WIP account before asset tests (#38429)
2023-11-30 08:15:11 +05:30
Gursheen Anand
de7e1ab237 fix: set cwip account before asset tests
(cherry picked from commit ef8e4191cd)
2023-11-29 13:24:56 +00:00
Deepesh Garg
f1456d072c Merge pull request #38423 from frappe/mergify/bp/version-15-hotfix/pr-38250
fix: unset discount amount based on coupon code (#38250)
2023-11-29 18:21:30 +05:30
Gursheen Anand
0e50e77d8e fix: unset discount amount based on coupon code
(cherry picked from commit 6518582ed3)
2023-11-29 10:25:19 +00:00
rohitwaghchaure
d0f1dec573 Merge pull request #38411 from frappe/mergify/bp/version-15-hotfix/pr-38165
fix: make create button translatable (backport #38165)
2023-11-29 13:05:03 +05:30
rohitwaghchaure
4bb1cb50ba Merge pull request #38419 from frappe/mergify/bp/version-15-hotfix/pr-38415
fix: incorrect ordered qty for Subcontracting Order (backport #38415)
2023-11-29 13:02:53 +05:30
rohitwaghchaure
71fe2bcc28 fix: incorrect ordered qty for Subcontracting Order (#38415)
(cherry picked from commit fddf341f44)
2023-11-29 06:52:36 +00:00
mergify[bot]
12ad1ec71a feat: shift depreciation for assets (backport #38327) (#38417)
feat: shift depreciation for assets (#38327)

* feat: shift depreciation for assets

* chore: create new asset depr schedule on shift change

* refactor: move create_depr_schedule to after_insert

* fix: args in get_depreciation_amount test

* refactor: rename shift adjustment to shift allocation

* chore: asset shift factor doctype and auto allocate shift diff

* chore: use check instead of depr type, and add tests

* chore: make linter happy

* chore: give permissions to accounts users

(cherry picked from commit fe5fc5bd3a)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-29 12:15:53 +05:30
mergify[bot]
80afeca229 fix: OperationalError while selecting Serial No in Warranty Claim (backport #38394) (#38414)
* refactor: use arrow function

(cherry picked from commit 1763824e5f)

* refactor: use DocType `Fetch From` instead of `frm.add_fetch`

(cherry picked from commit 01044ca8e9)

* refactor: use `frm.set_query` to add filters

(cherry picked from commit 640dfab827)

* refactor: don't use `cur_frm`

(cherry picked from commit 9fadf5f426)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-29 10:40:41 +05:30
Patrick Eissler
95f9cc99b9 fix: make create button translatable (#38165)
* fix: make all create buttons translatable

* style: use double quotes

---------

Co-authored-by: PatrickDenis-stack <77415730+PatrickDenis-stack@users.noreply.github.com>
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
(cherry picked from commit 8e4b591ea2)
2023-11-29 04:54:25 +00:00
mergify[bot]
4a243ce5b7 fix(regional): use net figures for sales calc (#38260)
fix(regional): use net figures for sales calc (#38260)

(cherry picked from commit 663bb8726c)

Co-authored-by: Dany Robert <danyrt@wahni.com>
2023-11-29 09:08:50 +05:30
mergify[bot]
b9f26ae849 fix: debit credit mismatch in multi-currecy asset purchase receipt (#38342)
fix: debit credit mismatch in multi-currecy asset purchase receipt (#38342)

* fix: Debit credit mimatch in multicurrecy asset purchase receipt

* test: multi currency purchase receipt

* chore: update init files

* test: roolback

(cherry picked from commit add238c892)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-11-29 09:06:34 +05:30
Frappe PR Bot
d4a3d6bbe0 chore(release): Bumped to Version 15.4.0
# [15.4.0](https://github.com/frappe/erpnext/compare/v15.3.0...v15.4.0) (2023-11-28)

### Bug Fixes

* allow on submit for child table fields ([ac7615a](ac7615ac01))
* annual income and expenses in digest ([ca2ad17](ca2ad175d3))
* check reposting settings before allowing editable si ([25bf475](25bf475d5a))
* condition in other bundle utils ([e4d9ef1](e4d9ef1293))
* create contact if existing customer doesn't have contact ([b1b065d](b1b065daf1))
* display all item rate stop messages (backport [#38289](https://github.com/frappe/erpnext/issues/38289)) ([#38307](https://github.com/frappe/erpnext/issues/38307)) ([99c1fbf](99c1fbf9fc))
* do not set repost flag without validating voucher ([6a3c3b4](6a3c3b4cac))
* don't depreciate assets with no schedule on scrapping (backport [#38276](https://github.com/frappe/erpnext/issues/38276)) ([#38293](https://github.com/frappe/erpnext/issues/38293)) ([18613c5](18613c595f))
* filter bundle items based on disabled check ([fb517e8](fb517e823f))
* fiscal year using future date ([b9a1fac](b9a1fac7d8))
* has_product_bundle util to only check for enabled bundles ([5c12872](5c12872f70))
* job card overlap validation (backport [#38345](https://github.com/frappe/erpnext/issues/38345)) ([#38348](https://github.com/frappe/erpnext/issues/38348)) ([d6fe7eb](d6fe7eb10c))
* make parameters of `create_subscription_process` optional (and other minor fixes) ([#38360](https://github.com/frappe/erpnext/issues/38360)) ([721b429](721b429d93))
* Negative Qty and Rates in SO/PO (backport [#38252](https://github.com/frappe/erpnext/issues/38252)) ([#38357](https://github.com/frappe/erpnext/issues/38357)) ([14174df](14174df862))
* no fstring in translation (backport [#38381](https://github.com/frappe/erpnext/issues/38381)) ([#38387](https://github.com/frappe/erpnext/issues/38387)) ([c101855](c1018555a0))
* patch - Duplicate entry quality inspection parameter (backport [#38262](https://github.com/frappe/erpnext/issues/38262)) ([#38264](https://github.com/frappe/erpnext/issues/38264)) ([4c9890a](4c9890a24e))
* Payment Reco Issue and chart of account importer ([4699887](4699887f1c))
* serial no status (backport [#38391](https://github.com/frappe/erpnext/issues/38391)) ([#38397](https://github.com/frappe/erpnext/issues/38397)) ([b65c225](b65c22579d))
* Server Error while creating Product Bundle (backport [#38377](https://github.com/frappe/erpnext/issues/38377)) ([#38380](https://github.com/frappe/erpnext/issues/38380)) ([922aef6](922aef665b))
* skip disabled bundles for non-report utils ([3d46b32](3d46b323b3))
* skip fixed assets in parent ([314a91a](314a91ac4d))
* Supplier `Primary Contact` (backport [#38268](https://github.com/frappe/erpnext/issues/38268)) ([#38286](https://github.com/frappe/erpnext/issues/38286)) ([37d1f1a](37d1f1ac67))
* **ux:** Sales Order Stock Reservation Dialog (backport [#38261](https://github.com/frappe/erpnext/issues/38261)) ([#38344](https://github.com/frappe/erpnext/issues/38344)) ([3cbe599](3cbe59902a))
* validation for existing bundles ([c0de9c0](c0de9c0cef))

### Features

* add Bank Transaction to connections in Journal and Payment Entry (backport [#38297](https://github.com/frappe/erpnext/issues/38297)) ([#38301](https://github.com/frappe/erpnext/issues/38301)) ([72647b8](72647b8624))
* add disabled field in product bundle ([fcd53be](fcd53be188))
* new Report "Lost Quotations" ([#38309](https://github.com/frappe/erpnext/issues/38309)) ([ea2c348](ea2c3487a3))

### Performance Improvements

* optimize total_purchase_cost update ([deed9f5](deed9f5840))
2023-11-28 16:24:28 +00:00
rohitwaghchaure
4bfdab93ad Merge pull request #38383 from frappe/version-15-hotfix
chore: release v15
2023-11-28 21:53:16 +05:30
mergify[bot]
c1018555a0 fix: no fstring in translation (backport #38381) (#38387)
fix: no fstring in translation (#38381)

(cherry picked from commit 8f00481c5f)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-11-28 21:36:05 +05:30
Shariq Ansari
9f873749e2 Merge pull request #38400 from frappe/mergify/bp/version-15-hotfix/pr-38398
fix(CRM): create contact if existing customer doesn't have contact (backport #38398)
2023-11-28 20:45:34 +05:30
Shariq Ansari
b1b065daf1 fix: create contact if existing customer doesn't have contact
(cherry picked from commit 23b0b8ba36)
2023-11-28 14:20:10 +00:00
Gursheen Kaur Anand
33b3355cb3 Merge pull request #38396 from frappe/mergify/bp/version-15-hotfix/pr-38392
fix: imports for renamed report (backport #38392)
2023-11-28 19:21:37 +05:30
mergify[bot]
b65c22579d fix: serial no status (backport #38391) (#38397)
fix: serial no status (#38391)

(cherry picked from commit 592fc81260)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-28 18:31:23 +05:30
Gursheen Anand
573c4d2bfc chore: fix imports for renamed report
(cherry picked from commit aee2e12f39)
2023-11-28 12:53:53 +00:00
mergify[bot]
922aef665b fix: Server Error while creating Product Bundle (backport #38377) (#38380)
* fix: product bundle search input

(cherry picked from commit 729fc738af)

* fix: don't select all fields

(cherry picked from commit 8c3713b649)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-28 14:54:05 +05:30
mergify[bot]
a6f3a103db chore: fix flaky test case (backport #38369) (#38373)
chore: fix flaky test case (#38369)

(cherry picked from commit ad3634be7c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-28 08:36:06 +05:30
Sagar Vora
8c906b422f Merge pull request #38366 from frappe/mergify/bp/version-15-hotfix/pr-38360
fix: make parameters of `create_subscription_process` optional (and other minor fixes) (backport #38360)
2023-11-27 21:06:36 +05:30
Sagar Vora
721b429d93 fix: make parameters of create_subscription_process optional (and other minor fixes) (#38360)
(cherry picked from commit 5a53a4b044)
2023-11-27 14:53:39 +00:00
ruthra kumar
7385db0cce Merge pull request #38359 from frappe/mergify/bp/version-15-hotfix/pr-38354
refactor: handle rounding loss on AR/AP reports (backport #38354)
2023-11-27 12:16:13 +05:30
ruthra kumar
8564d58afe refactor: handle rounding loss on AR/AP reports
(cherry picked from commit 592ce45da7)
2023-11-27 06:22:52 +00:00
mergify[bot]
4699887f1c fix: Payment Reco Issue and chart of account importer
fix: Payment Reco Issue and chart of account importer
2023-11-27 10:31:12 +05:30
mergify[bot]
14174df862 fix: Negative Qty and Rates in SO/PO (backport #38252) (#38357)
fix: Negative Qty and Rates in SO/PO (#38252)

* fix: Don't allow negative qty in SO/PO

* fix: Type casting for safe comparisons

* fix: Grammar in error message

* fix: Negative rates should be allowed via Update Items in SO/PO

* fix: Use `non_negative` property in docfield & emove code validation

(cherry picked from commit b9f5a1c85d)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2023-11-27 09:30:16 +05:30
ruthra kumar
5d993d4bc7 Merge pull request #38356 from frappe/mergify/bp/version-15-hotfix/pr-38081
fix: check reposting ledger settings before setting repost flag (backport #38081)
2023-11-27 09:29:22 +05:30
ruthra kumar
378dc50aa4 chore: resolve conflict 2023-11-27 09:09:04 +05:30
Gursheen Anand
25bf475d5a fix: check reposting settings before allowing editable si
(cherry picked from commit 894ae1fe0f)
2023-11-27 03:35:39 +00:00
Gursheen Anand
ac7615ac01 fix: allow on submit for child table fields
(cherry picked from commit 5fae2f6d57)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
2023-11-27 03:35:39 +00:00
Gursheen Anand
6a3c3b4cac fix: do not set repost flag without validating voucher
(cherry picked from commit ad5edbb1de)
2023-11-27 03:35:38 +00:00
Gursheen Anand
85bd649c64 refactor: validate reposting settings for editables inv
(cherry picked from commit 780b827adc)
2023-11-27 03:35:38 +00:00
mergify[bot]
3cbe59902a fix(ux): Sales Order Stock Reservation Dialog (backport #38261) (#38344)
* fix(ux): no need to select rows to reserve the stock

(cherry picked from commit 9c889b37fb)

* fix: use field `sales_order_item` instead `name`

(cherry picked from commit 73586fd9b2)

* fix(ux): no need to select rows to unreserve the stock

(cherry picked from commit 2a41da94d4)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-26 22:25:51 +05:30
mergify[bot]
cda5ff40f1 refactor: bank transaction (#38182)
refactor: bank transaction (#38182)

(cherry picked from commit 5426b93387)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-11-26 18:57:01 +05:30
mergify[bot]
d6fe7eb10c fix: job card overlap validation (backport #38345) (#38348)
fix: job card overlap validation (#38345)

(cherry picked from commit d8245cef72)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-26 16:28:51 +05:30
Deepesh Garg
e0f9c64290 Merge pull request #38332 from frappe/mergify/bp/version-15-hotfix/pr-38309
feat: new Report "Lost Quotations" (#38309)
2023-11-25 17:36:50 +05:30
Raffael Meyer
ea2c3487a3 feat: new Report "Lost Quotations" (#38309)
(cherry picked from commit 477d9fa87e)
2023-11-24 21:28:38 +00:00
Deepesh Garg
64d9c5d61c Merge pull request #38316 from frappe/mergify/bp/version-15-hotfix/pr-38269
fix: skip fixed assets in product bundle (backport #38269)
2023-11-24 16:30:29 +05:30
Deepesh Garg
18f9650188 Merge pull request #38325 from frappe/mergify/bp/version-15-hotfix/pr-38273
fix: annual income and expenses in email digest (#38273)
2023-11-24 16:29:43 +05:30
Gursheen Anand
b9a1fac7d8 fix: fiscal year using future date
(cherry picked from commit 728cc9f725)
2023-11-24 09:51:31 +00:00
Gursheen Anand
ca2ad175d3 fix: annual income and expenses in digest
(cherry picked from commit 52305e3000)
2023-11-24 09:51:30 +00:00
ruthra kumar
2d6b2f7ae3 Merge pull request #38319 from frappe/mergify/bp/version-15-hotfix/pr-38298
perf: optimize update_purchase_cost method  (backport #38298)
2023-11-24 12:21:26 +05:30
ruthra kumar
7fc4e211bc refactor: update project costing based on frequency
(cherry picked from commit dd016e6ced)
2023-11-24 06:20:11 +00:00
ruthra kumar
c06388fe48 refactor: make update_project_cost optional through Buying Settings
(cherry picked from commit 0fe6dcd742)
2023-11-24 06:20:11 +00:00
ruthra kumar
28e695baf8 refactor: provide UI button to recalculate when needed
(cherry picked from commit bcbe6c4a53)
2023-11-24 06:20:10 +00:00
ruthra kumar
deed9f5840 perf: optimize total_purchase_cost update
(cherry picked from commit aa17110bde)
2023-11-24 06:20:10 +00:00
ruthra kumar
220a0f4b11 Merge pull request #38312 from frappe/mergify/bp/version-15-hotfix/pr-38296
chore: index to speed up basic submit/cancel functions on purchase invoice (backport #38296)
2023-11-24 10:04:43 +05:30
Gursheen Anand
d076aca998 chore: linting issues
(cherry picked from commit 1657337887)
2023-11-24 04:30:39 +00:00
Gursheen Anand
3d46b323b3 fix: skip disabled bundles for non-report utils
(cherry picked from commit 362f377f61)
2023-11-24 04:30:38 +00:00
Gursheen Anand
e4d9ef1293 fix: condition in other bundle utils
(cherry picked from commit 8bdb61cb87)
2023-11-24 04:30:38 +00:00
Gursheen Anand
c0de9c0cef fix: validation for existing bundles
(cherry picked from commit 67f43d37df)
2023-11-24 04:30:38 +00:00
Gursheen Anand
5c12872f70 fix: has_product_bundle util to only check for enabled bundles
(cherry picked from commit 3543f86c63)
2023-11-24 04:30:38 +00:00
Gursheen Anand
fb517e823f fix: filter bundle items based on disabled check
(cherry picked from commit 874774fe6c)
2023-11-24 04:30:38 +00:00
Gursheen Anand
fcd53be188 feat: add disabled field in product bundle
(cherry picked from commit ee76af7681)
2023-11-24 04:30:38 +00:00
Gursheen Anand
314a91ac4d fix: skip fixed assets in parent
(cherry picked from commit f9713eeb56)
2023-11-24 04:30:37 +00:00
ruthra kumar
7282dd1a85 chore: speed up Purchase Invoice cancellation
(cherry picked from commit 1efff268b0)
2023-11-24 04:16:22 +00:00
ruthra kumar
3720b7171b chore: index to speed up queries on JE child table reference
(cherry picked from commit 24fcd67f8b)
2023-11-24 04:16:22 +00:00
mergify[bot]
99c1fbf9fc fix: display all item rate stop messages (backport #38289) (#38307)
fix: display all item rate stop messages (#38289)

(cherry picked from commit 3f6d805033)

Co-authored-by: Devin Slauenwhite <devin.slauenwhite@gmail.com>
2023-11-23 23:39:53 +05:30
mergify[bot]
30c349b010 add flt() for None type error (backport #38299) (#38306)
add flt() for None type error (#38299)

(cherry picked from commit 64b44a360a)

Co-authored-by: NandhiniDevi <95607404+Nandhinidevi123@users.noreply.github.com>
2023-11-23 22:42:37 +05:30
mergify[bot]
4c9890a24e fix: patch - Duplicate entry quality inspection parameter (backport #38262) (#38264)
fix: patch - Duplicate entry quality inspection parameter (#38262)

(cherry picked from commit 0ca7527f7a)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-23 22:39:26 +05:30
mergify[bot]
72647b8624 feat: add Bank Transaction to connections in Journal and Payment Entry (backport #38297) (#38301)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-11-23 15:09:23 +01:00
mergify[bot]
18613c595f fix: don't depreciate assets with no schedule on scrapping (backport #38276) (#38293)
fix: don't depreciate assets with no schedule on scrapping (#38276)

fix: don't depreciate non-depreciable assets on scrapping
(cherry picked from commit 816b1b6bd5)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-23 14:05:08 +05:30
mergify[bot]
37d1f1ac67 fix: Supplier Primary Contact (backport #38268) (#38286)
fix: Supplier `Primary Contact`

(cherry picked from commit 627165dc7c)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-23 11:13:32 +05:30
ruthra kumar
fb4235c528 Merge pull request #38282 from frappe/mergify/bp/version-15-hotfix/pr-38258
refactor: rename 'Unreconcile Payments' doctype to singular 'Unreconcile Payment' (backport #38258)
2023-11-23 11:09:33 +05:30
ruthra kumar
100ce27a60 chore: update new unreconcile doctype name in JS and PY files
(cherry picked from commit 74f9e34182)
2023-11-23 05:09:24 +00:00
ruthra kumar
df70e048cf chore: rename 'unreconcile payments' to 'unreconcile payment'
(cherry picked from commit 9006c9b747)
2023-11-23 05:09:23 +00:00
ruthra kumar
0c3c36f658 Merge pull request #38280 from frappe/mergify/bp/version-15-hotfix/pr-38257
refactor: optmize outstanding amount query (backport #38257)
2023-11-23 10:36:53 +05:30
ruthra kumar
d01a480149 refactor: optimize outstanding vouchers query
(cherry picked from commit 8b04c1d4f6)
2023-11-23 10:14:25 +05:30
Frappe PR Bot
33869a231c chore(release): Bumped to Version 15.3.0
# [15.3.0](https://github.com/frappe/erpnext/compare/v15.2.0...v15.3.0) (2023-11-21)

### Bug Fixes

* attributes were mandatory for manufacturers ([00b9c23](00b9c2326c))
* issue occured when creating supplier with contact details ([aaccfeb](aaccfeb918))
* overallocation on Payment with PO/SO ([337707b](337707b9cc))
* pass check permission in render_address ([a420e13](a420e13765))
* payment entry rounding error ([384d6b5](384d6b516c))
* set asset's valuation_rate according to asset quantity (backport [#38254](https://github.com/frappe/erpnext/issues/38254)) ([#38256](https://github.com/frappe/erpnext/issues/38256)) ([c60aaa7](c60aaa799a))
* set default asset quantity as 1 [dev] (backport [#38223](https://github.com/frappe/erpnext/issues/38223)) ([#38226](https://github.com/frappe/erpnext/issues/38226)) ([99bf63e](99bf63ec0f))
* Suppier name was not taken when creating address from supplier ([2b94489](2b9448962f))
* Supplier Quotation fields ([#37963](https://github.com/frappe/erpnext/issues/37963)) ([aef955c](aef955c920))
* test case for rounded total with cash disc ([eab18e6](eab18e6f71))
* **Timesheet:** reset billing hours equal to hours if they exceed actual hours (backport [#38134](https://github.com/frappe/erpnext/issues/38134)) ([#38153](https://github.com/frappe/erpnext/issues/38153)) ([5b7b431](5b7b431dc9))
* **Timesheet:** warn user if billing hours > actual hours instead of resetting  (backport [#38239](https://github.com/frappe/erpnext/issues/38239)) ([#38241](https://github.com/frappe/erpnext/issues/38241)) ([1f2f5d8](1f2f5d8cf6))
* TypeError in Subcontracting Receipt (backport [#38200](https://github.com/frappe/erpnext/issues/38200)) ([#38208](https://github.com/frappe/erpnext/issues/38208)) ([3f57a7e](3f57a7e9f0))
* update modified timestamp ([a492e57](a492e574de))
* **ux:** `Task` creation from `Timesheet` (backport [#38207](https://github.com/frappe/erpnext/issues/38207)) ([#38211](https://github.com/frappe/erpnext/issues/38211)) ([e272041](e272041872))
* valuation rate for FG item for subcontracting receipt (backport [#38244](https://github.com/frappe/erpnext/issues/38244)) ([#38245](https://github.com/frappe/erpnext/issues/38245)) ([ed7b845](ed7b845a55))
* valuation rate in report Item Prices ([#38161](https://github.com/frappe/erpnext/issues/38161)) ([f71234e](f71234e3af))
* wrong round off and rounded total ([70eccf7](70eccf7da0))

### Features

* add `Supplier Delivery Note` field in SCR (backport [#38127](https://github.com/frappe/erpnext/issues/38127)) ([#38156](https://github.com/frappe/erpnext/issues/38156)) ([b89a4a7](b89a4a7218))
* Add accounting dimensions to Supplier Quotation ([7d4ac7e](7d4ac7e7ff))
2023-11-21 18:57:56 +00:00
Deepesh Garg
de783da2b6 Merge pull request #38248 from frappe/version-15-hotfix
chore: release v15
2023-11-22 00:26:18 +05:30
mergify[bot]
c60aaa799a fix: set asset's valuation_rate according to asset quantity (backport #38254) (#38256)
fix: set asset's valuation_rate according to asset quantity (#38254)

(cherry picked from commit e2bb4e2baa)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-21 22:57:34 +05:30
ruthra kumar
07c0ed127a Merge pull request #38236 from frappe/mergify/bp/version-15-hotfix/pr-38234
test: prevent rounding loss based validation error (backport #38234)
2023-11-21 15:00:40 +05:30
mergify[bot]
ed7b845a55 fix: valuation rate for FG item for subcontracting receipt (backport #38244) (#38245)
fix: valuation rate for FG item for subcontracting receipt (#38244)

(cherry picked from commit 5c308a4f9a)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-21 14:53:03 +05:30
ruthra kumar
c84c97577f Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-38234 2023-11-21 13:43:58 +05:30
mergify[bot]
1f2f5d8cf6 fix(Timesheet): warn user if billing hours > actual hours instead of resetting (backport #38239) (#38241)
fix(Timesheet): warn user if billing hours > actual hours instead of resetting  (#38239)

* revert: "fix(Timesheet): reset billing hours equal to hours if they exceed actual hours"

This reverts commit 0ec8034507.

* fix: warn user if billing hours > actual hours

(cherry picked from commit ac91030b31)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2023-11-21 13:41:50 +05:30
ruthra kumar
bb77546849 Merge pull request #38237 from frappe/mergify/bp/version-15-hotfix/pr-37586
fix: overallocation on purchase order to multiple invoices (backport #37586)
2023-11-21 13:26:39 +05:30
ruthra kumar
2bec89a5bf chore: fix flakiness test_sales_order_partial_advance_payment
(cherry picked from commit 4dff2c7a0d)
2023-11-21 07:03:07 +00:00
ruthra kumar
034375b4f5 refactor(test): make use of utility methods
(cherry picked from commit 547993f801)
2023-11-21 07:03:06 +00:00
ruthra kumar
9600a2cdb7 test: overalloction on reconciliation when PO is involved
(cherry picked from commit 946228d783)
2023-11-21 07:03:06 +00:00
ruthra kumar
337707b9cc fix: overallocation on Payment with PO/SO
(cherry picked from commit 23df4205f8)
2023-11-21 07:03:05 +00:00
ruthra kumar
15f40a7af6 test: prevent rounding loss based validation error
(cherry picked from commit 56e991b7f4)
2023-11-21 12:16:36 +05:30
mergify[bot]
99bf63ec0f fix: set default asset quantity as 1 [dev] (backport #38223) (#38226)
fix: set default asset quantity as 1 [dev] (#38223)

* fix: make default asset quantity as 1

* fix: get rate_of_depreciation from asset category for asset auto-creation

* chore: create asset depr schedules on PR submit, not asset submit

* fix: set default asset quantity as 1

* chore: move patch from v15 to v14

(cherry picked from commit 9903049c7a)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-20 22:49:38 +05:30
ruthra kumar
491e9b4fd5 Merge pull request #38214 from frappe/mergify/bp/version-15-hotfix/pr-38210
refactor: extend billed amount update flag to POS Invoice as well (backport #38210)
2023-11-20 15:02:24 +05:30
ruthra kumar
f88ec533e6 Merge pull request #38216 from frappe/mergify/bp/version-15-hotfix/pr-38212
refactor: update scheduled job for bulk transaction (backport #38212)
2023-11-20 14:49:33 +05:30
ruthra kumar
afaf6afd27 refactor: update scheduled job for bulk transaction
(cherry picked from commit fb06ad7330)
2023-11-20 08:51:31 +00:00
ruthra kumar
1ed65524e5 refactor: add flag to POS Invoice
(cherry picked from commit 83a13e22b7)
2023-11-20 08:36:51 +00:00
ruthra kumar
5da9a22e4c refactor: set default for 'update_billed_amount_in_delivery_note'
(cherry picked from commit ee0c64215d)
2023-11-20 08:36:50 +00:00
mergify[bot]
e272041872 fix(ux): Task creation from Timesheet (backport #38207) (#38211)
* fix(ux): enable `Quick Entry` for `Task`

(cherry picked from commit 331ad62f3c)

* fix: add route options for new `Task`

(cherry picked from commit 2f3fc12c08)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-20 12:44:26 +05:30
mergify[bot]
3f57a7e9f0 fix: TypeError in Subcontracting Receipt (backport #38200) (#38208)
fix: TypeError in Subcontracting Receipt

(cherry picked from commit f6e93f084a)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-20 12:40:41 +05:30
ruthra kumar
2186e1cce4 Merge pull request #38197 from frappe/mergify/bp/version-15-hotfix/pr-38159
refactor: provision to truncate `remarks` in General Ledger and Accounts Receivable/Payable reports (backport #38159)
2023-11-20 12:31:44 +05:30
Sagar Vora
7622a2791e Merge pull request #38199 from frappe/mergify/bp/version-15-hotfix/pr-37963
fix: Supplier Quotation fields (backport #37963)
2023-11-20 11:47:01 +05:30
Sagar Vora
88b62a0a61 chore: resolve conflicts 2023-11-20 11:42:57 +05:30
Vishakh Desai
aef955c920 fix: Supplier Quotation fields (#37963)
(cherry picked from commit c2bda2c705)

# Conflicts:
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
2023-11-20 04:42:48 +00:00
ruthra kumar
c2cb86b40a refactor: add substring logic in ar/ap report
(cherry picked from commit a9bf906545)
2023-11-20 04:38:26 +00:00
ruthra kumar
9ee8a78083 refactor: provision to set remarks length in accounts settings
(cherry picked from commit 97090ff367)
2023-11-20 04:38:26 +00:00
Deepesh Garg
0f227aa883 Merge pull request #38191 from frappe/mergify/bp/version-15-hotfix/pr-38171
fix: wrong round off and rounded total (#38171)
2023-11-19 19:44:23 +05:30
Deepesh Garg
fc1ee1b3ed Merge pull request #38174 from frappe/mergify/bp/version-15-hotfix/pr-38147
fix: issue occured when creating supplier with contact details (#38147)
2023-11-19 19:21:36 +05:30
Deepesh Garg
cf7d0ab8a5 Merge pull request #38176 from frappe/mergify/bp/version-15-hotfix/pr-38163
fix: attributes were mandatory for manufacturers (#38163)
2023-11-19 19:20:56 +05:30
Deepesh Garg
c29bc8c97f chore: linting issues 2023-11-19 19:20:06 +05:30
Dany Robert
eab18e6f71 fix: test case for rounded total with cash disc
(cherry picked from commit cc60c328fe)
2023-11-19 13:49:19 +00:00
Dany Robert
70eccf7da0 fix: wrong round off and rounded total
(cherry picked from commit 3a487bd33a)
2023-11-19 13:49:19 +00:00
Deepesh Garg
d0ae566e38 Merge pull request #38189 from frappe/mergify/bp/version-15-hotfix/pr-38177
fix: payment entry rounding error (#38177)
2023-11-19 19:10:59 +05:30
Devin Slauenwhite
384d6b516c fix: payment entry rounding error
(cherry picked from commit 3d1e3a9cde)
2023-11-19 13:17:51 +00:00
Deepesh Garg
13d965276f Merge pull request #38180 from frappe/mergify/bp/version-15-hotfix/pr-38161
fix: valuation rate in report Item Prices (#38161)
2023-11-19 18:44:50 +05:30
Deepesh Garg
7be7c6a479 Merge pull request #38173 from frappe/mergify/bp/version-15-hotfix/pr-38142
feat: Add accounting dimensions to Supplier Quotation (#38142)
2023-11-19 17:08:04 +05:30
Patrick Eissler
f71234e3af fix: valuation rate in report Item Prices (#38161)
Co-authored-by: PatrickDenis-stack <77415730+PatrickDenis-stack@users.noreply.github.com>
(cherry picked from commit 32f622ef80)
2023-11-18 14:55:16 +00:00
barredterra
a492e574de fix: update modified timestamp
Was missing in 434c2a1815
2023-11-18 15:44:59 +01:00
PatrickDenis-stack
00b9c2326c fix: attributes were mandatory for manufacturers
(cherry picked from commit 434c2a1815)
2023-11-18 14:39:01 +00:00
Deepesh Garg
3172448c31 chore: Resolve conflicts 2023-11-18 19:58:10 +05:30
Kunhi
2b9448962f fix: Suppier name was not taken when creating address from supplier
(cherry picked from commit 545ef3c234)
2023-11-18 14:18:32 +00:00
kunhi
aaccfeb918 fix: issue occured when creating supplier with contact details
(cherry picked from commit 7842c9fba8)
2023-11-18 14:18:31 +00:00
Deepesh Garg
7d4ac7e7ff feat: Add accounting dimensions to Supplier Quotation
(cherry picked from commit 089da459f7)

# Conflicts:
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
2023-11-18 14:11:38 +00:00
Sagar Vora
d89a9a5bfd Merge pull request #38169 from frappe/mergify/bp/version-15-hotfix/pr-38167
fix: pass check permission in `render_address` (backport #38167)
2023-11-18 17:39:49 +05:30
Vishakh Desai
a420e13765 fix: pass check permission in render_address
(cherry picked from commit 45299fe4b3)
2023-11-18 12:08:58 +00:00
mergify[bot]
b89a4a7218 feat: add Supplier Delivery Note field in SCR (backport #38127) (#38156)
feat: add `Supplier Delivery Note` field in SCR

(cherry picked from commit da80e4dbce)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-17 22:07:53 +05:30
mergify[bot]
5b7b431dc9 fix(Timesheet): reset billing hours equal to hours if they exceed actual hours (backport #38134) (#38153)
fix(Timesheet): reset billing hours equal to hours if they exceed actual hours (#38134)

(cherry picked from commit 20c6e9fca2)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2023-11-17 18:25:37 +05:30
Frappe PR Bot
5336cf08fa chore(release): Bumped to Version 15.2.0
# [15.2.0](https://github.com/frappe/erpnext/compare/v15.1.0...v15.2.0) (2023-11-17)

### Bug Fixes

* add revaluation journal filter in Payable report ([c967468](c9674683d1))
* allow regional gl in payment entry for gl preview ([#38136](https://github.com/frappe/erpnext/issues/38136)) ([20e15eb](20e15ebd22))
* bom creator not able to amend / duplicate  (backport [#38128](https://github.com/frappe/erpnext/issues/38128)) ([#38129](https://github.com/frappe/erpnext/issues/38129)) ([ed9cd7c](ed9cd7c92b))
* **dn:** regression from bulk transaction fix ([ea43862](ea43862fcd))
* GL Entries for receiving non CWIP assets using Purchase Receipt ([#38123](https://github.com/frappe/erpnext/issues/38123)) ([d512371](d51237195a))
* handle partial return against invoices ([ac61abb](ac61abb2e4))
* remove ESS role when not mapped to employee (backport [#37867](https://github.com/frappe/erpnext/issues/37867)) ([#38133](https://github.com/frappe/erpnext/issues/38133)) ([8276614](8276614c14))
* reset dr_or_cr for every reference ([22b39ac](22b39ac4b4))
* test total unallocated amount in payment ([cb4bb5b](cb4bb5b4ee))
* valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (backport [#38094](https://github.com/frappe/erpnext/issues/38094)) ([#38097](https://github.com/frappe/erpnext/issues/38097)) ([28e6e5d](28e6e5d910))

### Features

* virtual parent doctype ([e68d2e1](e68d2e138a))
2023-11-17 07:43:26 +00:00
Deepesh Garg
cb725dcf9f Merge pull request #38145 from frappe/version-15-hotfix
chore: v15 Release
2023-11-17 13:12:09 +05:30
mergify[bot]
20e15ebd22 fix: allow regional gl in payment entry for gl preview (#38136)
fix: allow regional gl in payment entry for gl preview (#38136)

(cherry picked from commit 7e43d7b131)

Co-authored-by: Smit Vora <smitvora203@gmail.com>
2023-11-17 12:40:18 +05:30
ruthra kumar
a699f8b9de Merge pull request #38139 from frappe/mergify/bp/version-15-hotfix/pr-38119
fix: add revaluation journal filter in Payable report (backport #38119)
2023-11-17 10:04:23 +05:30
ruthra kumar
c9674683d1 fix: add revaluation journal filter in Payable report
(cherry picked from commit 134201794a)
2023-11-17 10:01:35 +05:30
mergify[bot]
8276614c14 fix: remove ESS role when not mapped to employee (backport #37867) (#38133)
fix: remove ESS role when not mapped to employee (#37867)

* fix: remove ESS role when not mapped to employee

* fix: emp role removal on unlinking

* fix: test case for user employee role mapping

* fix: mapped employee and user on creation

(cherry picked from commit 56b8d1b927)

Co-authored-by: Dany Robert <danyrt@wahni.com>
2023-11-16 20:27:35 +05:30
mergify[bot]
ed9cd7c92b fix: bom creator not able to amend / duplicate (backport #38128) (#38129)
fix: bom creator not able to amend / duplicate  (#38128)

fix: bom creator not able to amend
(cherry picked from commit 2df767f596)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-16 18:53:08 +05:30
Deepesh Garg
d51237195a fix: GL Entries for receiving non CWIP assets using Purchase Receipt (#38123)
* fix: GL Entries for receiving non CWIP assets using Purchase Receipt

* test: Update tests
2023-11-16 13:38:10 +05:30
Deepesh Garg
32039d4de1 Merge pull request #38126 from frappe/mergify/bp/version-15-hotfix/pr-38090
fix(dn): regression from bulk transaction fix (#38090)
2023-11-16 13:00:44 +05:30
David Arnold
ea43862fcd fix(dn): regression from bulk transaction fix
(cherry picked from commit 426c245032)
2023-11-16 07:13:47 +00:00
Frappe PR Bot
54a6fbaeba chore(release): Bumped to Version 15.1.0
# [15.1.0](https://github.com/frappe/erpnext/compare/v15.0.0...v15.1.0) (2023-11-16)

### Bug Fixes

* `PermissionError` while creating DN from SO (backport [#37758](https://github.com/frappe/erpnext/issues/37758)) ([#37768](https://github.com/frappe/erpnext/issues/37768)) ([e742310](e7423109b6))
* `TypeError` in PR for non-stock item (backport [#37819](https://github.com/frappe/erpnext/issues/37819)) ([#37842](https://github.com/frappe/erpnext/issues/37842)) ([847dd9e](847dd9e671))
* add translation wrapper (backport [#37911](https://github.com/frappe/erpnext/issues/37911)) ([#37947](https://github.com/frappe/erpnext/issues/37947)) ([915ca47](915ca47515))
* asset depreciation ledger (backport [#37991](https://github.com/frappe/erpnext/issues/37991)) ([#37993](https://github.com/frappe/erpnext/issues/37993)) ([b3562bd](b3562bdb87))
* avoid name clash in delivery stop (backport [#37306](https://github.com/frappe/erpnext/issues/37306)) ([#37702](https://github.com/frappe/erpnext/issues/37702)) ([bfd240a](bfd240a19d))
* close `Credit Limit Crossed` dialog (backport [#38052](https://github.com/frappe/erpnext/issues/38052)) ([#38059](https://github.com/frappe/erpnext/issues/38059)) ([cff56d4](cff56d4e50))
* COA Importer app related issues ([#37238](https://github.com/frappe/erpnext/issues/37238)) ([d5bf7a0](d5bf7a039d))
* consider reserved stock while cancelling a stock transaction (backport [#37754](https://github.com/frappe/erpnext/issues/37754)) ([#37906](https://github.com/frappe/erpnext/issues/37906)) ([e0b0b6b](e0b0b6bb7d))
* credit note receive payment entry ([9781f9b](9781f9b7b1))
* **customer:** contact creation for companies ([#38055](https://github.com/frappe/erpnext/issues/38055)) ([fc09d75](fc09d757f0))
* **customer:** quick form and integration fixes ([#37386](https://github.com/frappe/erpnext/issues/37386)) ([02e2258](02e225845e))
* **defaults:** apply discount and provisonal defaults from item group and brand if available (backport [#37466](https://github.com/frappe/erpnext/issues/37466)) ([#37704](https://github.com/frappe/erpnext/issues/37704)) ([f382b1c](f382b1cf61))
* deprecate unused create_contact ([6f2b34e](6f2b34e7d5))
* don't reset rate if greater than zero in standalone debit note (backport [#37935](https://github.com/frappe/erpnext/issues/37935)) ([#37941](https://github.com/frappe/erpnext/issues/37941)) ([e156564](e156564ea4))
* force delete removed report (backport [#37668](https://github.com/frappe/erpnext/issues/37668)) ([#37670](https://github.com/frappe/erpnext/issues/37670)) ([a871d95](a871d955d4))
* handle gle for standalone credit and debit notes ([6e463b1](6e463b1953))
* Identical items are added line by line instead of grouped together in POS ([#37986](https://github.com/frappe/erpnext/issues/37986)) ([011cf3d](011cf3d73e))
* ignore Stock Reservation for future dated PR (backport [#37979](https://github.com/frappe/erpnext/issues/37979)) ([#37990](https://github.com/frappe/erpnext/issues/37990)) ([d74f0ef](d74f0ef586))
* In-Transit Warehouse company filter (backport [#37796](https://github.com/frappe/erpnext/issues/37796)) ([#37798](https://github.com/frappe/erpnext/issues/37798)) ([254ec2c](254ec2cfd1))
* incorrect material request quantity in production plan (backport [#37785](https://github.com/frappe/erpnext/issues/37785)) ([#37790](https://github.com/frappe/erpnext/issues/37790)) ([8b3c4a9](8b3c4a948c))
* indentation issue in the Production Plan Summary report (backport [#38019](https://github.com/frappe/erpnext/issues/38019)) ([#38069](https://github.com/frappe/erpnext/issues/38069)) ([6d325a4](6d325a40a1))
* indexing on Delivery Note Item (backport [#37766](https://github.com/frappe/erpnext/issues/37766)) ([#37778](https://github.com/frappe/erpnext/issues/37778)) ([98a7c17](98a7c170a0))
* link between parent and child procedure (backport [#37903](https://github.com/frappe/erpnext/issues/37903)) ([#37944](https://github.com/frappe/erpnext/issues/37944)) ([a065f22](a065f22a4c))
* list index out of range (backport [#37890](https://github.com/frappe/erpnext/issues/37890)) ([#37920](https://github.com/frappe/erpnext/issues/37920)) ([e71ef10](e71ef10ca9))
* make `Material Request Item` required if `Material Request` is set in PO (backport [#37928](https://github.com/frappe/erpnext/issues/37928)) ([#37937](https://github.com/frappe/erpnext/issues/37937)) ([7ad0817](7ad08179f2))
* make adjustment entry using stock reconciliation (backport [#37995](https://github.com/frappe/erpnext/issues/37995)) ([#38009](https://github.com/frappe/erpnext/issues/38009)) ([b23fa1f](b23fa1f5dd))
* make changes that enable gantt view for job cards (backport [#37661](https://github.com/frappe/erpnext/issues/37661)) ([#37757](https://github.com/frappe/erpnext/issues/37757)) ([f132552](f132552968))
* make item field read-only in batch (backport [#38010](https://github.com/frappe/erpnext/issues/38010)) ([#38034](https://github.com/frappe/erpnext/issues/38034)) ([99b7cdb](99b7cdb5be))
* make project page translatable (backport [#37743](https://github.com/frappe/erpnext/issues/37743)) ([#37801](https://github.com/frappe/erpnext/issues/37801)) ([59e67cd](59e67cd384))
* Mark Status field in Payment Entry 'no_copy'. ([#38000](https://github.com/frappe/erpnext/issues/38000)) ([3c0f8b1](3c0f8b15a0))
* minor change added to test_case ([b1714ec](b1714ec21d))
* minor issue ([24be044](24be04427c))
* **minor:** set tax values for item variants (backport [#37674](https://github.com/frappe/erpnext/issues/37674)) ([#37739](https://github.com/frappe/erpnext/issues/37739)) ([5c46d74](5c46d7452e))
* new logic for handling revaluation journals ([fb71a6e](fb71a6e787))
* Not able to save subcontracting receipt ([#38085](https://github.com/frappe/erpnext/issues/38085)) ([a874997](a8749977e1))
* **packed_item:** ensure proper names for ref integrity (backport [#37597](https://github.com/frappe/erpnext/issues/37597)) ([#37794](https://github.com/frappe/erpnext/issues/37794)) ([9aa29f5](9aa29f55d9))
* permission error while creating Supplier Quotation from Portal (backport [#37864](https://github.com/frappe/erpnext/issues/37864)) ([#37871](https://github.com/frappe/erpnext/issues/37871)) ([be8399f](be8399f52e))
* **plaid:** Do not sync pending transactions ([2149de4](2149de44b1))
* POS change amount gl entry with no amount ([#37799](https://github.com/frappe/erpnext/issues/37799)) ([fd7a768](fd7a768535))
* Quality Inspection Parameter migration - DuplicateEntryError due to case sensitivity (backport [#37499](https://github.com/frappe/erpnext/issues/37499)) ([#37917](https://github.com/frappe/erpnext/issues/37917)) ([7d0f1f4](7d0f1f4235))
* remove from or target warehouse for non internal transfer entries (backport [#37612](https://github.com/frappe/erpnext/issues/37612)) ([#37627](https://github.com/frappe/erpnext/issues/37627)) ([3155790](31557902b8))
* remove validation for negative outstanding invoices ([8602a3e](8602a3eab1))
* remove voucher type and no for Item and Warehouse based reposting ([b96be67](b96be67a1f))
* sales order not assigned to territory orders (backport [#37905](https://github.com/frappe/erpnext/issues/37905)) ([#38025](https://github.com/frappe/erpnext/issues/38025)) ([40cc3a7](40cc3a7610))
* skip check for removed validation ([22e58e0](22e58e0ee0))
* sort by section code ([06bb1a3](06bb1a3208))
* standard submit perm in repost ledger for editable invoices (backport [#37826](https://github.com/frappe/erpnext/issues/37826)) ([#37855](https://github.com/frappe/erpnext/issues/37855)) ([71361f7](71361f7673))
* status for over delivery or billing ([95d6742](95d6742587))
* test for invoice returns ([a89af58](a89af589e8))
* type error on new payment entry ([5937135](59371358ae))
* typo in AR report ([fc3d303](fc3d303b82))
* typo in function name and msg (backport [#37722](https://github.com/frappe/erpnext/issues/37722)) ([#37741](https://github.com/frappe/erpnext/issues/37741)) ([4819fde](4819fde8c5))
* unsupported operand type(s) for serial and batch bundle in POS Invoice (backport [#37721](https://github.com/frappe/erpnext/issues/37721)) ([#37731](https://github.com/frappe/erpnext/issues/37731)) ([b03c65f](b03c65f21d))
* use get_all instead of get_list ([2a5b3bd](2a5b3bdfd9))
* validate so item with qtn ([71538cf](71538cfab1))
* valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (backport [#38094](https://github.com/frappe/erpnext/issues/38094)) (backport [#38097](https://github.com/frappe/erpnext/issues/38097)) ([#38101](https://github.com/frappe/erpnext/issues/38101)) ([880cea5](880cea5b36))

### Features

* **accounts_receivable:** test_case added for multi-select customer group ([848efe8](848efe8047))
* add cols for supplier inv details ([e51e5b3](e51e5b36e2))
* allow return of components for SCO that don't have SCR created (backport [#37686](https://github.com/frappe/erpnext/issues/37686)) ([#37693](https://github.com/frappe/erpnext/issues/37693)) ([4044325](40443258cf))
* auto reserve stock for Sales Order on purchase (backport [#37603](https://github.com/frappe/erpnext/issues/37603)) ([#37648](https://github.com/frappe/erpnext/issues/37648)) ([da5bf50](da5bf501eb))
* **delivery:** link to delivery notes list view from delivery trip (backport [#37604](https://github.com/frappe/erpnext/issues/37604)) ([#37696](https://github.com/frappe/erpnext/issues/37696)) ([08ea62f](08ea62f4e4))
* multi-select customer group in AR Report ([fff294f](fff294fb37))
* proprietorship & partnership options in entity type ([6df125a](6df125a05f))
* reserved production plan sub assembly items (backport [#37884](https://github.com/frappe/erpnext/issues/37884)) ([#37927](https://github.com/frappe/erpnext/issues/37927)) ([df90fd7](df90fd7b35))
* settings page for repost ([c047fd7](c047fd7ac5))
* **Stock Balance:** add filters from route (backport [#37836](https://github.com/frappe/erpnext/issues/37836)) ([#37840](https://github.com/frappe/erpnext/issues/37840)) ([fad8228](fad8228a67))

### Performance Improvements

* Add index to supplier invoice field (backport [#37861](https://github.com/frappe/erpnext/issues/37861)) ([#37863](https://github.com/frappe/erpnext/issues/37863)) ([b1982a6](b1982a6961))
* index return against for purchase invoice (backport [#37881](https://github.com/frappe/erpnext/issues/37881)) ([#37883](https://github.com/frappe/erpnext/issues/37883)) ([febd20a](febd20acbc))
2023-11-16 06:51:17 +00:00
Ankush Menat
3ce734e372 ci: change release branch
(cherry picked from commit d0a74419b3)
2023-11-16 12:19:39 +05:30
Ankush Menat
d0a74419b3 ci: change release branch 2023-11-16 12:18:47 +05:30
Deepesh Garg
57dea69185 Merge pull request #38120 from frappe/mergify/bp/version-15-hotfix/pr-38071
fix: handle partial return against invoices in payment entries (#38071)
2023-11-16 10:53:56 +05:30
Gursheen Anand
cb4bb5b4ee fix: test total unallocated amount in payment
(cherry picked from commit 2499675ad1)
2023-11-16 05:07:00 +00:00
Gursheen Anand
376e09680c test: payment against partial return invoices
(cherry picked from commit 09f9764bbd)
2023-11-16 05:07:00 +00:00
Gursheen Anand
22b39ac4b4 fix: reset dr_or_cr for every reference
(cherry picked from commit a59c942cd4)
2023-11-16 05:06:59 +00:00
Gursheen Anand
ac61abb2e4 fix: handle partial return against invoices
(cherry picked from commit 5b446d4575)
2023-11-16 05:06:59 +00:00
ruthra kumar
d18fd87650 Merge pull request #38118 from frappe/mergify/bp/version-15-hotfix/pr-38038
refactor: supercharge Bulk actions (backport #38038)
2023-11-16 10:22:20 +05:30
ruthra kumar
00a62692dc Merge pull request #38117 from frappe/mergify/bp/version-15-hotfix/pr-38082
refactor: use 'boolean' parameter while fetching FY year (backport #38082)
2023-11-16 10:07:33 +05:30
ruthra kumar
0134be4915 refactor: raise exception on invalid date
(cherry picked from commit a393a6b76c)
2023-11-16 04:22:47 +00:00
ruthra kumar
f28d718732 refactor: update traceback on retry
(cherry picked from commit a52a1b49af)
2023-11-16 04:22:47 +00:00
ruthra kumar
df5fcbee71 refactor: support list view filters
(cherry picked from commit 93295bf25b)
2023-11-16 04:22:47 +00:00
ruthra kumar
76f3d4a31c chore: resolve linting issue
(cherry picked from commit 73639db910)
2023-11-16 04:22:47 +00:00
ruthra kumar
0ec2978ea0 refactor: rollback for retries and UI alerts
(cherry picked from commit c320288690)
2023-11-16 04:22:47 +00:00
ruthra kumar
db60e147e0 refactor: barebones retry functionality
(cherry picked from commit 0aa1636d04)
2023-11-16 04:22:47 +00:00
ruthra kumar
33f1e709f1 chore: show retried in list view
(cherry picked from commit 194d70f8a0)
2023-11-16 04:22:46 +00:00
ruthra kumar
696f8b0ae0 refactor: add basic functionalities
(cherry picked from commit af35590549)
2023-11-16 04:22:46 +00:00
ruthra kumar
e68d2e138a feat: virtual parent doctype
(cherry picked from commit a248b13cc3)
2023-11-16 04:22:46 +00:00
ruthra kumar
461f7a1a1c chore: make from_doctype readonly
(cherry picked from commit b0dfc936a1)
2023-11-16 04:22:46 +00:00
ruthra kumar
6eaf67e700 chore: add indexes
(cherry picked from commit 73090fa130)
2023-11-16 04:22:46 +00:00
ruthra kumar
f0a8c83fa8 chore: add list view filters
(cherry picked from commit ade09bc709)
2023-11-16 04:22:46 +00:00
ruthra kumar
feb49f23ed refactor: simplify logging logic bulk_transaction
(cherry picked from commit ebd74a4e5b)
2023-11-16 04:22:45 +00:00
ruthra kumar
3be8bfe9d8 chore: rearrange fields
(cherry picked from commit c4f8f3613f)
2023-11-16 04:22:45 +00:00
ruthra kumar
bf0d8c16ac chore: convert child to normal table
(cherry picked from commit e5a8ad54e2)
2023-11-16 04:22:45 +00:00
ruthra kumar
9a9d5775e8 chore: remove 'Bulk Transaction Log' doctype
(cherry picked from commit 815c616f18)
2023-11-16 04:22:45 +00:00
ruthra kumar
e2dd414793 refactor: use 'boolean' parameter while fetching FY year
(cherry picked from commit c31ee8ea33)
2023-11-16 04:18:34 +00:00
mergify[bot]
8bc871a842 chore: change read only condition of asset quantity field (backport #38111) (#38113)
chore: change read only condition of asset quantity field (#38111)

chore: change read only condition of asset quantity
(cherry picked from commit 6e0362dee8)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-15 18:01:33 +05:30
mergify[bot]
880cea5b36 fix: valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (backport #38094) (backport #38097) (#38101)
fix: valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (backport #38094) (#38097)

fix: valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (#38094)

fix: valuation rate for the subcontracting receipt supplied items with batch
(cherry picked from commit 3e77c0b564)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 28e6e5d910)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2023-11-14 22:18:56 +05:30
mergify[bot]
28e6e5d910 fix: valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (backport #38094) (#38097)
fix: valuation rate for the subcontracting receipt supplied items with Serial and Batch Bundle (#38094)

fix: valuation rate for the subcontracting receipt supplied items with batch
(cherry picked from commit 3e77c0b564)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-14 21:15:44 +05:30
mergify[bot]
77b1eedcf4 chore: refetch item images on transaction save (backport #38095) (#38099)
chore: refetch item images on transaction save (#38095)

chore: re fetch item images on transaction save
(cherry picked from commit e93a19ffb5)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-14 20:11:19 +05:30
Deepesh Garg
9f9a4a9eab Merge pull request #38088 from frappe/version-15-hotfix
chore: release v15
2023-11-14 18:52:01 +05:30
mergify[bot]
a8749977e1 fix: Not able to save subcontracting receipt (#38085)
fix: Not able to save subcontracting receipt (#38085)

(cherry picked from commit e769e750ec)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-14 15:57:36 +05:30
mergify[bot]
4fdd1ec498 chore: delete comments and unlink attachments on company transactions deletion (backport #38077) (#38079)
* chore: delete comments and unlink attachments on company transactions deletion

(cherry picked from commit 2f9e96e324)

* fix: unrelated transation date typo

(cherry picked from commit b097bb20d9)

---------

Co-authored-by: anandbaburajan <anandbaburajan@gmail.com>
2023-11-13 19:17:00 +05:30
mergify[bot]
6d325a40a1 fix: indentation issue in the Production Plan Summary report (backport #38019) (#38069)
fix: indentation issue in the Production Plan Summary report (#38019)

fix: Production Plan Summary report
(cherry picked from commit 4a111f7362)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-13 14:03:29 +05:30
bVisible
011cf3d73e fix: Identical items are added line by line instead of grouped together in POS (#37986)
fix: Identical items are added line by line instead of grouped together in POS (#37986)
2023-11-13 14:01:42 +05:30
ruthra kumar
f6b56f225b Merge pull request #38067 from frappe/mergify/bp/version-15-hotfix/pr-38064
refactor: add revaluation journal checkbox in AR/AP summary reports (backport #38064)
2023-11-13 13:39:24 +05:30
ruthra kumar
d71d5a2981 refactor: add revaluation journal checkbox in AR/AP summary reports
(cherry picked from commit 95edd82638)
2023-11-13 07:52:12 +00:00
Raffael Meyer
6ab2f83a61 Merge pull request #38061 from frappe/mergify/bp/version-15-hotfix/pr-38055
fix(customer): contact creation for companies (backport #38055, #38060)
2023-11-12 20:27:20 +01:00
barredterra
6f2b34e7d5 fix: deprecate unused create_contact 2023-11-12 20:01:10 +01:00
barredterra
d3d10231b9 test: parse full name 2023-11-12 19:44:01 +01:00
barredterra
f61b476be1 refactor: parse full name 2023-11-12 19:43:51 +01:00
barredterra
0142a9308b chore: resolve conflicts 2023-11-12 19:43:01 +01:00
David Arnold
fc09d757f0 fix(customer): contact creation for companies (#38055)
(cherry picked from commit 9fde782403)

# Conflicts:
#	erpnext/selling/doctype/customer/customer.py
2023-11-12 18:06:57 +00:00
mergify[bot]
cff56d4e50 fix: close Credit Limit Crossed dialog (backport #38052) (#38059)
fix: close `Credit Limit Crossed` dialog (#38052)

(cherry picked from commit 94faa44697)

Co-authored-by: Arjun <arjun99c@gmail.com>
2023-11-12 18:07:16 +05:30
mergify[bot]
d5bf7a039d fix: COA Importer app related issues (#37238)
fix: COA Importer app related issues (#37238)

* fix: COA Importer app related issues

* fix: Clear all account links fields befor import

* fix: Attribute error

(cherry picked from commit 8634abc021)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-11-12 17:41:18 +05:30
mergify[bot]
02e225845e fix(customer): quick form and integration fixes (#37386)
fix(customer): quick form and integration fixes (#37386)

(cherry picked from commit ae508144cd)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-11-11 20:19:22 +05:30
mergify[bot]
99b7cdb5be fix: make item field read-only in batch (backport #38010) (#38034)
fix: make item field read-only in batch

(cherry picked from commit 779260fb49)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-11 10:48:09 +05:30
ruthra kumar
ddb1a7643a Merge pull request #38036 from frappe/mergify/bp/version-15-hotfix/pr-38004
fix: handling of exchange rate journals in AR/AP (backport #38004)
2023-11-10 11:59:06 +05:30
ruthra kumar
fb71a6e787 fix: new logic for handling revaluation journals
(cherry picked from commit 1d8fcd66e6)
2023-11-10 11:18:59 +05:30
mergify[bot]
40cc3a7610 fix: sales order not assigned to territory orders (backport #37905) (#38025)
fix: sales order not assigned to territory orders (#37905)

filtered sales order are not assigned to 'territory_orders' which results in 0 order amount and 0 billing amount in the output

(cherry picked from commit 45b4bfc947)

Co-authored-by: jabir-elat <44110258+jabir-elat@users.noreply.github.com>
2023-11-09 21:52:27 +05:30
mergify[bot]
3c0f8b15a0 fix: Mark Status field in Payment Entry 'no_copy'. (#38000)
fix: Mark Status field in Payment Entry 'no_copy'.

(cherry picked from commit a89afb65d7)

Co-authored-by: Bernd Oliver Sünderhauf <46800703+bosue@users.noreply.github.com>
2023-11-09 14:06:46 +05:30
Deepesh Garg
1b103faf05 Merge pull request #38007 from frappe/mergify/bp/version-15-hotfix/pr-37828
fix: payments irrespective of party types (backport #37828)
2023-11-09 14:06:14 +05:30
ruthra kumar
54bed25056 Merge pull request #38013 from frappe/mergify/bp/version-15-hotfix/pr-37716
feat: multi-select customer group in AR Report (backport #37716)
2023-11-09 13:23:38 +05:30
mergify[bot]
b23fa1f5dd fix: make adjustment entry using stock reconciliation (backport #37995) (#38009)
fix: make adjustment entry using stock reconciliation (#37995)

fix: do adjustment entry using stock reconciliation
(cherry picked from commit a8216b9727)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-09 13:14:32 +05:30
vishal
b1714ec21d fix: minor change added to test_case
(cherry picked from commit 30402033bc)
2023-11-09 07:35:38 +00:00
vishal
848efe8047 feat(accounts_receivable): test_case added for multi-select customer group
(cherry picked from commit de445b32f5)
2023-11-09 07:35:38 +00:00
vishal
24be04427c fix: minor issue
(cherry picked from commit b60c57a97d)
2023-11-09 07:35:38 +00:00
vishal
fff294fb37 feat: multi-select customer group in AR Report
(cherry picked from commit 8903c1bc6f)
2023-11-09 07:35:38 +00:00
Gursheen Anand
2a5b3bdfd9 fix: use get_all instead of get_list
(cherry picked from commit 2984a86f37)
2023-11-09 06:46:33 +00:00
Gursheen Anand
74983910bc chore: linting issues
(cherry picked from commit 84f0d1ff1f)
2023-11-09 06:46:32 +00:00
Gursheen Anand
6e463b1953 fix: handle gle for standalone credit and debit notes
(cherry picked from commit 98a8288da2)
2023-11-09 06:46:32 +00:00
Gursheen Anand
22e58e0ee0 fix: skip check for removed validation
(cherry picked from commit 0e100cd451)
2023-11-09 06:46:32 +00:00
Gursheen Anand
ced6d004fb refactor: move common util for fetching party types using account type
(cherry picked from commit 4867ca353c)
2023-11-09 06:46:32 +00:00
Gursheen Anand
9781f9b7b1 fix: credit note receive payment entry
(cherry picked from commit 4015723591)
2023-11-09 06:46:31 +00:00
Gursheen Anand
46c86de093 test: receive payments from payable party
(cherry picked from commit cd1e016163)
2023-11-09 06:46:31 +00:00
Gursheen Anand
a89af589e8 fix: test for invoice returns
(cherry picked from commit 1f4b381748)
2023-11-09 06:46:31 +00:00
Gursheen Anand
8602a3eab1 fix: remove validation for negative outstanding invoices
(cherry picked from commit 3d9938221a)
2023-11-09 06:46:31 +00:00
ruthra kumar
4eb80ea804 Merge pull request #38002 from frappe/mergify/bp/version-15-hotfix/pr-37860
refactor: ignore disabled account while selecting Income Accounts (backport #37860)
2023-11-09 10:41:20 +05:30
ruthra kumar
ef9e8406eb refactor: ignore disabled account while selecting Income Accounts
(cherry picked from commit 6e3e094c95)
2023-11-09 04:45:59 +00:00
mergify[bot]
b3562bdb87 fix: asset depreciation ledger (backport #37991) (#37993)
fix: asset depreciation ledger (#37991)

* fix: include opening acc depr while calculating asset depr ledger report

* chore: include opening acc depr properly in acc depr amt

* chore: add cost_center in asset depr ledger report

* fix: handle finance books properly in asset depr ledger report

* chore: rename 'include default book entries' to 'include default FB entries'

(cherry picked from commit 9a171db97f)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-08 22:52:16 +05:30
mergify[bot]
d74f0ef586 fix: ignore Stock Reservation for future dated PR (backport #37979) (#37990)
fix: ignore Stock Reservation for future dated PR

(cherry picked from commit 33eedb97dc)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-08 22:20:51 +05:30
Deepesh Garg
44bad3bd4a Merge pull request #37964 from frappe/version-15-hotfix
chore: release v15
2023-11-08 11:48:14 +05:30
ruthra kumar
0e979b6c5b Merge pull request #37902 from frappe/mergify/bp/version-15-hotfix/pr-37887
chore: performance optimization on payment ledger entry doctype (backport #37887)
2023-11-08 10:13:55 +05:30
ruthra kumar
cbf8a1405a Merge pull request #37976 from frappe/mergify/bp/version-15-hotfix/pr-37971
refactor: optimize bulk transaction for speed (backport #37971)
2023-11-08 07:08:58 +05:30
ruthra kumar
3d97a98fd7 refactor: optimize for speed
(cherry picked from commit 416bd400bb)
2023-11-08 01:04:08 +00:00
mergify[bot]
3c843c7261 chore: typo in Stock Entry enqueue msg (backport #37970) (#37973)
chore: typo in `Stock Entry` enqueue msg

(cherry picked from commit ee60fa940c)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-07 21:18:01 +05:30
ruthra kumar
3f25614e54 Merge pull request #37968 from frappe/mergify/bp/version-15-hotfix/pr-37954
refactor: expand repost to `Expense Claim` and make it configurable (backport #37954)
2023-11-07 16:09:10 +05:30
ruthra kumar
463e71664c refactor: update permissions for repost settings
(cherry picked from commit 10b9570429)
2023-11-07 10:15:24 +00:00
ruthra kumar
b48b858752 refactor(test): repost test case for purchase invoice
(cherry picked from commit 11c8d9fcf1)
2023-11-07 10:15:13 +00:00
ruthra kumar
85d255c8a2 refactor: select distinct types
(cherry picked from commit 61705047b0)
2023-11-07 10:15:11 +00:00
ruthra kumar
3abee937f9 refactor(test): update repost settings for test cases
(cherry picked from commit ac79b8483f)
2023-11-07 10:15:09 +00:00
ruthra kumar
37dbb4d3f9 refactor: support for expense claim repost
(cherry picked from commit b651b36fff)
2023-11-07 10:15:08 +00:00
ruthra kumar
1b83a91246 refactor: configurable repost settings
(cherry picked from commit 5a068410c6)
2023-11-07 10:15:07 +00:00
ruthra kumar
156d995ad8 chore: patch to update default repost settings value
(cherry picked from commit ebb186c8df)
2023-11-07 10:15:06 +00:00
ruthra kumar
c047fd7ac5 feat: settings page for repost
(cherry picked from commit d582a73795)
2023-11-07 10:15:05 +00:00
ruthra kumar
dc10a721ab Merge pull request #37958 from frappe/mergify/bp/version-15-hotfix/pr-37956
fix: type error on new payment entry (backport #37956)
2023-11-07 12:38:15 +05:30
ruthra kumar
59371358ae fix: type error on new payment entry
(cherry picked from commit adff287160)
2023-11-07 06:53:27 +00:00
ruthra kumar
442c484258 Merge pull request #37950 from frappe/mergify/bp/version-15-hotfix/pr-37948
fix: typo in AR report (backport #37948)
2023-11-06 20:47:54 +05:30
ruthra kumar
fc3d303b82 fix: typo in AR report
(cherry picked from commit 67e74d03ed)
2023-11-06 14:57:21 +00:00
mergify[bot]
915ca47515 fix: add translation wrapper (backport #37911) (#37947)
fix: add translation wrapper

(cherry picked from commit 8722318081)

Co-authored-by: hyaray <hyaray@vip.qq.com>
2023-11-06 19:52:04 +05:30
mergify[bot]
a065f22a4c fix: link between parent and child procedure (backport #37903) (#37944)
* fix: link between parent and child procedure

(cherry picked from commit 05f24ede96)

* chore: add missing filters for `Parent Procedure`

(cherry picked from commit 8fbd4cea5b)

* test: add test case for Quality Procedure`

(cherry picked from commit 30c6b83a10)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-06 19:28:42 +05:30
mergify[bot]
e156564ea4 fix: don't reset rate if greater than zero in standalone debit note (backport #37935) (#37941)
* fix: don't reset rate if greater than zero in standalone debit note

(cherry picked from commit 5cce522ecd)

* fix(test): `test_gl_entries_for_standalone_debit_note`

(cherry picked from commit f9fc6c9c9d)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-06 19:27:42 +05:30
mergify[bot]
7ad08179f2 fix: make Material Request Item required if Material Request is set in PO (backport #37928) (#37937)
fix: make `Material Request Item` required if `Material Request` is set in PO

(cherry picked from commit a9d91189b0)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-06 17:26:18 +05:30
mergify[bot]
df90fd7b35 feat: reserved production plan sub assembly items (backport #37884) (#37927)
feat: reserved production plan sub assembly items (#37884)

(cherry picked from commit 34d3eb88b3)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-11-06 11:33:12 +05:30
ruthra kumar
21195343d5 Merge pull request #37925 from frappe/mergify/bp/version-15-hotfix/pr-37879
refactor: flag to toggle billed amy update in DN for Credit Note (backport #37879)
2023-11-06 11:24:26 +05:30
ruthra kumar
61573f2645 refactor(test): enable billed amt update on Sales Return(Cr Note)
(cherry picked from commit 0c5bdbdcf3)
2023-11-06 03:11:52 +00:00
ruthra kumar
463accbf04 refactor: flag to toggle billed amy update in DN for Credit Note
(cherry picked from commit a3191f1c8c)
2023-11-06 03:11:52 +00:00
mergify[bot]
fd7a768535 fix: POS change amount gl entry with no amount (#37799)
fix: POS change amount gl entry with no amount (#37799)

(cherry picked from commit 2b02ef0066)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-11-05 17:56:45 +05:30
mergify[bot]
e71ef10ca9 fix: list index out of range (backport #37890) (#37920)
fix: list index out of range (#37890)

* fix: list index out of range

* fix: solve linter test failing

(cherry picked from commit e5bc8fccb1)

Co-authored-by: viralkansodiya15 <98073516+viralpatel15@users.noreply.github.com>
2023-11-05 12:33:58 +05:30
mergify[bot]
7d0f1f4235 fix: Quality Inspection Parameter migration - DuplicateEntryError due to case sensitivity (backport #37499) (#37917)
fix: Quality Inspection Parameter migration - DuplicateEntryError due to case sensitivity (#37499)

* fix: account for case-insensitive database primary key for parameter names

* chore: linting

(cherry picked from commit b099590b2c)

Co-authored-by: Richard Case <110036763+casesolved-co-uk@users.noreply.github.com>
2023-11-05 11:29:38 +05:30
mergify[bot]
e0b0b6bb7d fix: consider reserved stock while cancelling a stock transaction (backport #37754) (#37906)
* fix: consider reserved serial nos while cancelling a stock transaction

(cherry picked from commit d9e284366d)

* fix: consider reserved batches while cancelling a stock transaction

(cherry picked from commit e1a87a802d)

* feat: add field `reserved_stock` in Bin

(cherry picked from commit 98d6cdd53c)

* feat: maintain `Reserved Stock` in Bin

(cherry picked from commit f52916a2c3)

* fix: consider reserved stock while cancelling a stock transaction

(cherry picked from commit 73b65ac82e)

* fix(test): `test_stock_reservation_against_sales_order`

(cherry picked from commit 10242235bc)

* chore: patch to set reserved stock in Bin

(cherry picked from commit 1f88b1ef84)

* fix: qty based check for stock reservation of serial-batch items based on qty

(cherry picked from commit 9231706227)

* test: add test case for stock stock reservation

(cherry picked from commit 54b323e557)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-04 17:02:43 +05:30
ruthra kumar
65f23485d3 chore: performance optimization on payment ledger entry doctype
(cherry picked from commit f14d1eb871)
2023-11-04 03:27:51 +00:00
mergify[bot]
5171e3238d chore: rename depreciation_amount_based_on_num_days_in_month to daily_prorata_based [dev] (copy #37897) (#37899)
chore: rename depreciation_amount_based_on_num_days_in_month to daily_prorata_based

(cherry picked from commit 7c49b277ef)

Co-authored-by: anandbaburajan <anandbaburajan@gmail.com>
2023-11-04 02:02:25 +05:30
mergify[bot]
fc4bcc0965 chore: rename daily_depreciation in asset to depreciation_amount_based_on_num_days_in_month [dev] (backport #37893) (#37896)
chore: rename daily_depreciation in asset to depreciation_amount_based_on_num_days_in_month [dev] (#37893)

* chore: rename daily_depreciation to depreciation_based_on_num_days_in_month

* chore: add patch

* chore: remove unnecessary files

* chore: add amount in field name

* chore: add amount in label

(cherry picked from commit 568d5bfbe8)

Co-authored-by: Anand Baburajan <anandbaburajan@gmail.com>
2023-11-03 23:26:32 +05:30
mergify[bot]
febd20acbc perf: index return against for purchase invoice (backport #37881) (#37883)
perf: index return against for purchase invoice (#37881)

(cherry picked from commit 469ae2c7f1)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-11-03 21:59:49 +05:30
mergify[bot]
be8399f52e fix: permission error while creating Supplier Quotation from Portal (backport #37864) (#37871)
fix: permission error while creating Supplier Quotation from Portal

(cherry picked from commit e019d43d0b)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-03 16:21:20 +05:30
ruthra kumar
c29e22b3d1 Merge pull request #37876 from frappe/mergify/bp/version-15-hotfix/pr-37852
refactor: better ledger comparision report (backport #37852)
2023-11-03 13:25:12 +05:30
ruthra kumar
796b1aa694 refactor(test): for ledger comparision report
(cherry picked from commit 639f427d6d)
2023-11-03 07:23:25 +00:00
ruthra kumar
8d66848f9d refactor: better output on gl and pl comparison report
(cherry picked from commit 539f0251d9)
2023-11-03 07:23:25 +00:00
ruthra kumar
9dae84feba Merge pull request #37874 from frappe/mergify/bp/version-15-hotfix/pr-37869
refactor: 'group only by voucher' flag in AR/AP report (backport #37869)
2023-11-03 12:51:07 +05:30
ruthra kumar
1e218c12a0 refactor: group only by voucher flag in AR/AP report
(cherry picked from commit 23beb46d15)
2023-11-03 07:00:57 +00:00
mergify[bot]
847dd9e671 fix: TypeError in PR for non-stock item (backport #37819) (#37842)
* fix: `TypeError` in PR for non-stock item

(cherry picked from commit 028b3e2fbf)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/purchase_receipt.py

* chore: `conflicts`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-03 11:56:12 +05:30
mergify[bot]
b1982a6961 perf: Add index to supplier invoice field (backport #37861) (#37863)
fix: Add index to supplier invoice field (#37861)

* fix: Add index to supplier invoice field

* chore: remove unintetional changes

(cherry picked from commit c37e374fdd)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-11-03 11:52:32 +05:30
rohitwaghchaure
e52291506e Merge pull request #37851 from frappe/mergify/bp/version-15-hotfix/pr-37849
fix: remove voucher type and no for Item and Warehouse based reposting (backport #37849)
2023-11-02 15:14:50 +05:30
Rohit Waghchaure
618a9ee49b chore: fix test cases 2023-11-02 14:45:28 +05:30
mergify[bot]
71361f7673 fix: standard submit perm in repost ledger for editable invoices (backport #37826) (#37855)
fix: standard submit perm in repost ledger for editable invoices (#37826)

* fix: ignore perm while reposting ledger

* fix: use flag in save

* fix: remove unnecessary save

(cherry picked from commit 1b808e1d7c)

Co-authored-by: Gursheen Kaur Anand <40693548+GursheenK@users.noreply.github.com>
2023-11-02 14:33:47 +05:30
Rohit Waghchaure
b96be67a1f fix: remove voucher type and no for Item and Warehouse based reposting
(cherry picked from commit 0104897d69)
2023-11-02 07:57:52 +00:00
ruthra kumar
7bc02c49ba Merge pull request #37847 from frappe/mergify/copy/version-15-hotfix/pr-37845
chore: add std permissions for Process Payment Reconciilation log (copy #37845)
2023-11-02 12:10:36 +05:30
ruthra kumar
7524e425da chore: std permissions for Process Payment Reconciilation log
(cherry picked from commit a9fceeb00f)
2023-11-02 06:16:07 +00:00
ruthra kumar
39a178d27a Merge pull request #37844 from frappe/mergify/bp/version-15-hotfix/pr-37838
refactor: pass limits to JE and PE queries in reconciliation tool (backport #37838)
2023-11-02 11:08:36 +05:30
mergify[bot]
fad8228a67 feat(Stock Balance): add filters from route (backport #37836) (#37840)
feat(Stock Balance): add filters from route

(cherry picked from commit 38e5e4a893)

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2023-11-02 10:46:28 +05:30
ruthra kumar
8ef48bc6b7 refactor: pass limits to JE and PE queries in reconciliation tool
(cherry picked from commit 54e8ce1ac5)
2023-11-02 05:13:38 +00:00
ruthra kumar
0ab63f91f8 Merge pull request #37834 from frappe/mergify/bp/version-15-hotfix/pr-37832
refactor: checkbox to toggle remarks in General Ledger (backport #37832)
2023-11-02 07:27:07 +05:30
ruthra kumar
e9bf48df9c refactor: checkbox to toggle remarks in General Ledger
(cherry picked from commit 8fa677b8e8)
2023-11-01 15:50:12 +00:00
mergify[bot]
c8791108de refactor: update fields label and remove unused fields from BIN (backport #37827) (#37830)
* refactor: rearrange fields and update label

(cherry picked from commit ec1a7869f8)

* refactor: remove unused fields `fcfs_rate` and `ma_rate` from Bin

(cherry picked from commit f0a1f4ac7c)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-11-01 16:41:16 +05:30
Deepesh Garg
964a7a3dbd Merge pull request #37824 from frappe/mergify/bp/version-15-hotfix/pr-37590
fix: gov compliance for tax withholding report (#37590)
2023-11-01 15:22:10 +05:30
Deepesh Garg
c8c8c6533b Merge pull request #37822 from frappe/mergify/bp/version-15-hotfix/pr-37635
fix: validate sales order item with quotation (#37635)
2023-11-01 15:14:03 +05:30
Gursheen Anand
e51e5b36e2 feat: add cols for supplier inv details
(cherry picked from commit 6d5ccde864)
2023-11-01 08:40:20 +00:00
Gursheen Anand
80dddb40ae chore: linting issues
(cherry picked from commit 75441017c6)
2023-11-01 08:40:20 +00:00
Gursheen Anand
6df125a05f feat: proprietorship & partnership options in entity type
(cherry picked from commit ed2457bddf)
2023-11-01 08:40:20 +00:00
Gursheen Anand
06bb1a3208 fix: sort by section code
(cherry picked from commit 4471ad581e)
2023-11-01 08:40:19 +00:00
Gursheen Anand
aa19055899 chore: change column order
(cherry picked from commit 7ecc0d5a04)
2023-11-01 08:40:19 +00:00
Gursheen Anand
7abe5d9905 refactor: avoid relying only on against in tds docs query
(cherry picked from commit 705dadae8e)
2023-11-01 08:40:18 +00:00
Deepesh Garg
2ba5bb8abc Merge pull request #37718 from frappe/mergify/bp/version-15-hotfix/pr-37690
fix(plaid): Do not sync pending transactions (#37690)
2023-11-01 14:10:17 +05:30
Gursheen Anand
71538cfab1 fix: validate so item with qtn
(cherry picked from commit 17ebc1ea80)
2023-11-01 08:34:49 +00:00
Deepesh Garg
9675da6f38 Merge pull request #37816 from frappe/mergify/bp/version-15-hotfix/pr-37680
fix: status when over delivery or billing in SO (#37680)
2023-11-01 14:04:19 +05:30
Gursheen Anand
95d6742587 fix: status for over delivery or billing
(cherry picked from commit d69b0d76dd)
2023-11-01 07:00:27 +00:00
Deepesh Garg
98a8267c38 Merge pull request #37787 from frappe/version-15-hotfix
chore: release v15
2023-11-01 12:10:26 +05:30
ruthra kumar
7a5bfe0009 Merge pull request #37805 from frappe/mergify/bp/version-15-hotfix/pr-37793
refactor: pull remarks only if needed on AR/AP report (backport #37793)
2023-10-31 20:37:53 +05:30
ruthra kumar
c8243ec8e5 Merge pull request #37807 from frappe/mergify/bp/version-15-hotfix/pr-37795
chore: update default limit values in reconciliation tool (backport #37795)
2023-10-31 20:37:26 +05:30
ruthra kumar
a72988a514 chore: update default limit values in reconciliation tool
(cherry picked from commit 1fd888175f)
2023-10-31 14:23:08 +00:00
ruthra kumar
0589232d3b refactor: pull remarks only if needed on AR/AP report
(cherry picked from commit eb73017798)
2023-10-31 14:22:06 +00:00
mergify[bot]
59e67cd384 fix: make project page translatable (backport #37743) (#37801)
fix: make project page translatable

(cherry picked from commit e72afd0bd6)

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2023-10-31 19:49:45 +05:30
mergify[bot]
254ec2cfd1 fix: In-Transit Warehouse company filter (backport #37796) (#37798)
fix: In-Transit Warehouse company filter (#37796)

(cherry picked from commit daf2ec063c)

Co-authored-by: hyaray <hyaray@vip.qq.com>
2023-10-31 18:53:08 +05:30
mergify[bot]
9aa29f55d9 fix(packed_item): ensure proper names for ref integrity (backport #37597) (#37794)
fix(packed_item): ensure proper names for ref integrity (#37597)

(cherry picked from commit fb0ec74d08)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-10-31 18:06:40 +05:30
mergify[bot]
8b3c4a948c fix: incorrect material request quantity in production plan (backport #37785) (#37790)
fix: incorrect material request quantity in production plan (#37785)

(cherry picked from commit 25718d9f1b)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-31 15:41:53 +05:30
mergify[bot]
98a7c170a0 fix: indexing on Delivery Note Item (backport #37766) (#37778)
fix: indexing on Delivery Note Item (#37766)

fix: added indexing on Delivery Note Item
(cherry picked from commit 056b74b162)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-31 14:31:29 +05:30
mergify[bot]
e7423109b6 fix: PermissionError while creating DN from SO (backport #37758) (#37768)
fix: ignore permissions while mapping DN Item

(cherry picked from commit afc64ed9ee)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-10-30 18:39:57 +05:30
ruthra kumar
4f9210541e Merge pull request #37763 from frappe/mergify/bp/version-15-hotfix/pr-37761
chore: add index to posting_date in PLE (backport #37761)
2023-10-30 17:16:54 +05:30
ruthra kumar
11dd1f14ff Merge pull request #37764 from frappe/mergify/bp/version-15-hotfix/pr-37720
refactor: ignore cancelled GLE's while looking for currency of existing entries (backport #37720)
2023-10-30 17:16:39 +05:30
ruthra kumar
9ce123d0b9 refactor: ignore cancelled GLE's while looking for currency
(cherry picked from commit 8d9b90f3f5)
2023-10-30 11:23:35 +00:00
ruthra kumar
f64fdb6870 chore: add index to posting_date in PLE
(cherry picked from commit ca69845238)
2023-10-30 11:20:03 +00:00
mergify[bot]
f132552968 fix: make changes that enable gantt view for job cards (backport #37661) (#37757)
fix: make changes that enable gantt view for job cards (#37661)

* fix: make changes that enable gantt view for job cards

* fix: add fields on listview and remove from json file

* fix: undo modified date

---------

Co-authored-by: Dietmar Fischer <fischer@kk-software.de>
(cherry picked from commit 500435b856)

Co-authored-by: Didiman1998 <118364772+Didiman1998@users.noreply.github.com>
2023-10-30 15:20:40 +05:30
mergify[bot]
18e40dd032 refactor: remove extraneous disabled filters (backport #37732) (#37749)
refactor: remove extraneous disabled filters

(cherry picked from commit f276fbba4f)

Co-authored-by: Bernd Oliver Sünderhauf <46800703+bosue@users.noreply.github.com>
2023-10-30 09:57:32 +05:30
mergify[bot]
4819fde8c5 fix: typo in function name and msg (backport #37722) (#37741)
fix: typo in function name and msg

(cherry picked from commit 48c66b68ab)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-10-29 12:28:42 +05:30
mergify[bot]
5c46d7452e fix(minor): set tax values for item variants (backport #37674) (#37739)
* fix: copy all child fields to item variant

(cherry picked from commit 5deba1b6f9)

* fix: only update if variant table empty

(cherry picked from commit d436a40739)

---------

Co-authored-by: Gursheen Anand <gursheen@frappe.io>
2023-10-29 12:16:05 +05:30
mergify[bot]
4034c16cde chore: fixed test cases related to Internal Transfer (backport #37659) (#37733)
* chore: fixed test cases related to Internal Transfer (#37659)

(cherry picked from commit 72d32a4901)

* chore: fix test cases

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-28 13:31:29 +05:30
mergify[bot]
b03c65f21d fix: unsupported operand type(s) for serial and batch bundle in POS Invoice (backport #37721) (#37731)
fix: unsupported operand type(s) for serial and batch bundle in POS Invoice (#37721)

(cherry picked from commit fd78f868e1)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-28 11:10:46 +05:30
mergify[bot]
a3d3c0024e chore: allow wip_composite_asset in the MR PO PR PI flow (copy #37723) (#37724)
* chore: allow wip_composite_asset in the MR PO PR PI flow

(cherry picked from commit 0e5bea33a3)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.py

* chore: resolve conflict

---------

Co-authored-by: anandbaburajan <anandbaburajan@gmail.com>
2023-10-27 18:54:43 +05:30
Deepesh Garg
2149de44b1 fix(plaid): Do not sync pending transactions
(cherry picked from commit 46ea868559)
2023-10-27 06:09:09 +00:00
mergify[bot]
f382b1cf61 fix(defaults): apply discount and provisonal defaults from item group and brand if available (backport #37466) (#37704)
fix(defaults): apply discount and provisonal defaults from item group and brand if available (#37466)

(cherry picked from commit 1612d7ba3f)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-10-26 18:14:57 +05:30
mergify[bot]
bfd240a19d fix: avoid name clash in delivery stop (backport #37306) (#37702)
fix: avoid name clash in delivery stop (#37306)

* fix(stock): avoid name clash in delivery stop with Document.lock()

* chore(stock): format delivery stop json according to doctype builder

(cherry picked from commit 681782121c)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-10-26 18:13:23 +05:30
mergify[bot]
08ea62f4e4 feat(delivery): link to delivery notes list view from delivery trip (backport #37604) (#37696)
feat(delivery): link to delivery notes list view from delivery trip

(cherry picked from commit 85488cd0dc)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-10-26 13:12:55 +05:30
mergify[bot]
40443258cf feat: allow return of components for SCO that don't have SCR created (backport #37686) (#37693)
* feat: allow return of components for SCO that don't have SCR created

(cherry picked from commit 8e3b9ec879)

* fix: consider returned qty while calculating unsupplied qty

(cherry picked from commit 3290df5593)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-10-26 11:56:27 +05:30
mergify[bot]
2f5d991225 refactor: rename field Over Order Allowance to Blanket Order Allowance (backport #37669) (#37682)
* refactor: rename field `Over Order Allowance` to `Blanket Order Allowance`

(cherry picked from commit 8ffa2bfe25)

* chore: patch to rename field `over_order_allowance`

(cherry picked from commit fcfcf6957e)

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-10-25 14:58:01 +05:30
mergify[bot]
a871d955d4 fix: force delete removed report (backport #37668) (#37670)
fix: force delete removed report (#37668)

(cherry picked from commit 7be578485e)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2023-10-25 14:08:10 +05:30
mergify[bot]
882bd8e93a chore: fixed test case non_internal_transfer_delivery_note (backport #37671) (#37676)
chore: fixed test case non_internal_transfer_delivery_note (#37671)

(cherry picked from commit 2bcff4c7f2)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-25 13:49:38 +05:30
mergify[bot]
da5bf501eb feat: auto reserve stock for Sales Order on purchase (backport #37603) (#37648)
* chore: make `Reserve Stock` checkbox visible in SO

(cherry picked from commit 36a996d704)

* refactor: rename field `Auto Reserve Stock for Sales Order`

(cherry picked from commit 2b4fa98941)

* feat: add fields to hold SO and SO Item ref in PR Item

(cherry picked from commit 188175be84)

* feat: reserve stock for SO on PR submission

(cherry picked from commit 64497c9228)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/purchase_receipt.py

* feat: add field `From Voucher Type` in SRE

(cherry picked from commit 5ae9c2f62b)

* refactor: rename field `against_pick_list_item`

(cherry picked from commit 78fe567419)

* refactor: rename field `against_pick_list`

(cherry picked from commit 961d2d9926)

* fix: incorrect serial and batch get reserved

(cherry picked from commit 45395027d3)

* fix: partial reservation against SBB

(cherry picked from commit 4f363f5bf3)

* fix: ignore qty msg if From Voucher is set

(cherry picked from commit a432290a82)

* test: add test case for auto-reservation from PR

(cherry picked from commit adf313a6d3)

* chore: add SRE link in PR Connections

(cherry picked from commit 24788ddcc0)

* chore: patch to update `From Voucher` details

(cherry picked from commit 6942ab1012)

* chore: `conflicts`

* fix(patch): `update_sre_from_voucher_details`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2023-10-24 12:39:05 +05:30
mergify[bot]
31557902b8 fix: remove from or target warehouse for non internal transfer entries (backport #37612) (#37627)
fix: remove from or target warehouse for non internal transfer entries (#37612)

(cherry picked from commit 5136fe196b)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-23 12:27:16 +05:30
mergify[bot]
bdb369e2b4 refactor: use gzip library's compress() and decompress() methods directly (backport #37611) (#37621)
refactor: use gzip library's compress() and decompress() methods directly (#37611)

The util methods in framework were added for python2.7 compat, so can be removed

Signed-off-by: Akhil Narang <me@akhilnarang.dev>

[skip ci]

(cherry picked from commit 21c3d9c371)

Co-authored-by: Akhil Narang <me@akhilnarang.dev>
2023-10-21 11:20:49 +05:30
Ankush Menat
0925cb28c7 Merge branch 'version-15-hotfix' into version-15 2023-10-20 18:16:32 +05:30
Ankush Menat
9863ba5fd8 Merge pull request #37616 from frappe/mergify/bp/version-15-hotfix/pr-37614
chore: new erpnext logo as per espresso (backport #37614)
2023-10-20 17:58:13 +05:30
Maharshi Patel
889f84bcb7 chore: new erpnext logo as per espresso
(cherry picked from commit fff97b1cd2)
2023-10-20 12:25:04 +00:00
Ankush Menat
b9e4719045 chore: enable automatic releases 2023-10-20 17:33:49 +05:30
Ankush Menat
5cca001a58 fix: Correctly extract last message (#37602)
frappe.message_log now contains plain dictionary and not JSON strings,
so no need to load them.
2023-10-20 17:28:55 +05:30
Smit Vora
e76860fae1 fix: update existing doc if possible 2023-10-20 17:28:49 +05:30
Smit Vora
844e6f47df fix: add regional support to extend purchase gl entries 2023-10-20 17:28:42 +05:30
mergify[bot]
62d9de4848 fix: incorrect cost center in the purchase invoice (backport #37591) (#37608)
fix: incorrect cost center in the purchase invoice (#37591)

(cherry picked from commit 14b009b093)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-20 17:03:51 +05:30
mergify[bot]
fa5c75fd0a fix(delivery): rename dt fetch stop action (backport #37605) (#37607)
fix(delivery): rename dt fetch stop action

(cherry picked from commit 79d51a0a0b)

Co-authored-by: David Arnold <dgx.arnold@gmail.com>
2023-10-20 16:52:15 +05:30
Ankush Menat
777c1dd1ea chore: add containers back 2023-10-20 11:53:49 +05:30
Ankush Menat
fca812448e chore: v15 release 2023-10-19 16:04:06 +05:30
rohitwaghchaure
d09618bf05 chore: remove debugger (#37584) 2023-10-19 12:35:36 +05:30
Deepesh Garg
6750af90f7 Merge pull request #37562 from GursheenK/subscription-tax-filters
fix(minor): filter tax template based on company in subscription
2023-10-18 17:49:09 +05:30
rohitwaghchaure
10311ff114 fix: payment entry count on supplier dashboard (#37571) 2023-10-18 17:42:35 +05:30
rohitwaghchaure
2851a41310 fix: Issues related to RFQ and Supplier Quotation on Portal (#37565)
fix: RFQ and Supplier Quotation for Portal
2023-10-18 16:31:35 +05:30
Gursheen Anand
1a2f659de2 fix: filter tax template based on company 2023-10-18 11:42:19 +05:30
Ankush Menat
1d186efaab Merge pull request #37554 from frappe/e_com_perms
fix: e-commerce permissions for address
2023-10-18 11:08:16 +05:30
s-aga-r
fbd8660403 Merge pull request #37539 from HarryPaulo/fix-purchase-order-analyse-invoiced-qty
fix: billed_qty to show a sum of all invoiced qty from the purchase order item.
2023-10-18 11:07:34 +05:30
ruthra kumar
2bcda494b2 Merge pull request #37549 from ruthra-kumar/use_account_in_key_for_ar_ap_reports
refactor: use account in key while grouping voucher in ar/ap report
2023-10-18 09:09:16 +05:30
Deepesh Garg
14760d9aea Merge pull request #37550 from deepeshgarg007/sales_order_item_dimensions
chore: Add accounting dimensions to Sales Order Item table
2023-10-17 22:54:04 +05:30
Ankush Menat
c197d37404 Merge branch 'develop' into e_com_perms 2023-10-17 22:29:44 +05:30
Ankush Menat
f4d74990fe fix: E-commerce permissions 2023-10-17 22:28:04 +05:30
ruthra kumar
244cec64b2 test: report output if party is missing 2023-10-17 20:40:50 +05:30
Ankush Menat
0931e93b4c Merge pull request #37552 from frappe/addr_fetch
fix: Ignore addr permission in internal code
2023-10-17 20:00:44 +05:30
Ankush Menat
7b9cedebf6 fix: Ignore addr permission in internal code 2023-10-17 19:00:52 +05:30
Deepesh Garg
88be7ada33 Merge branch 'develop' of https://github.com/frappe/erpnext into sales_order_item_dimensions 2023-10-17 18:30:49 +05:30
Deepesh Garg
e31db18912 chore: Add accounting dimensions to Sales Order Item table 2023-10-17 18:19:47 +05:30
ruthra kumar
601ab4567e refactor: use account in key while grouping voucher in ar/ap report 2023-10-17 17:48:04 +05:30
Sabu Siyad
f900a78995 refactor!: drop ecommerce in favor of webshop (#33265)
* refactor!: remove ecommerce item group field check

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove `e_commerce` directory

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove `get_context` from `item_group`

https://frappeframework.com/docs/v14/user/en/guides/portal-development/context

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove related `./templates`

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(navbar): remove wishlist (ecommerce)

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(js): remove js from scripts

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove `www/all-products`

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove pages and js

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove js/customer_reviews

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(portal utils): remove shopping cart debtor account

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove e_commerce events from hooks

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(web): remove e_commerce js from bundle

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(setup): remove shopping cart setup

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove pages

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor(item): remove website item button

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(payment request): remove `on_payment_authorized`

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: @staticmethod `get_gateway_details`

to avoid monkey patching, in custom apps
https://discuss.erpnext.com/t/how-to-override-method-in-frappe/28786/36

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(pages): remove product page

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(homepage): do not setup website items

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor(workspace): remove link to ecommerce settings

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(www): remove shop-by-category

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(homepage): remove featured product

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor: remove products in homepage

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor(homepage): remove explore button

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor: remove products fields from homepage

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* Revert "refactor!: @staticmethod `get_gateway_details`"

This reverts commit 561bcd96680a930bb92627869502d9346b10611b.

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: remove payment gateway e_commerce import

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* chore: pre-commit

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!: pass `party` into `get_price`

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor: move `get_item_codes_by_attributes` to `utilities/product`

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* refactor!(quotation): input customer group

Signed-off-by: Sabu Siyad <hello@ssiyad.com>

* chore: pre-commit

* refactor: remove custom `navbar_items.html`

* refactor!(item): remove `published_in_website`

* refactor: move `validate_duplicate_website_item` before rename

* test: remove `test_shopping_cart_without_website_item`

* chore: add doctype drop patch

* refactor: removed website item related code

* refactor: removed shopping_cart code

* refactor: removed e-commerce related patches

* refactor: removed website related fields from item group

* fix: patch create_asset_depreciation_schedules_from_assets, KeyError: '0K BU64 AUY'

---------

Signed-off-by: Sabu Siyad <hello@ssiyad.com>
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2023-10-17 17:05:44 +05:30
s-aga-r
9d687ca6e9 Merge pull request #37541 from s-aga-r/FIX-PROJECT-TEST
fix(test): project test case
2023-10-17 14:13:38 +05:30
s-aga-r
fd6aee15e6 fix(test): project test case 2023-10-17 12:48:07 +05:30
ruthra kumar
5bb3e290d2 Merge pull request #37330 from ruthra-kumar/provision_to_pick_exc_rate_on_transaction_date
refactor: checkbox to toggle exchange rate inheritence in PO->PI
2023-10-17 09:45:33 +05:30
HarryPaulo
8a72f4f58a fix: billed_qty to show a sum of all invoiced qty from the purchase order item. 2023-10-16 18:12:10 -03:00
mergify[bot]
27a1e3bf83 feat: validate negative stock for inventory dimension (backport #37373) (#37383)
* feat: validate negative stock for inventory dimension (#37373)

* feat: validate negative stock for inventory dimension

* test: test case for validate negative stock for inv dimension

(cherry picked from commit 1480acabb0)

# Conflicts:
#	erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
#	erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
#	erpnext/stock/stock_ledger.py

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fix linter issue

* chore: fix linter issue

* chore: fix linter issue

* chore: fix linter issue

* chore: fix linter issue

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-16 19:15:18 +05:30
Ankush Menat
6e3e4c8ade Merge pull request #37532 from frappe/cust_role
fix: keep customer/supplier website role by default
2023-10-16 17:29:54 +05:30
Ankush Menat
d2096cfdb7 fix: keep customer/supplier website role by default 2023-10-16 16:55:09 +05:30
s-aga-r
f59066c185 Merge pull request #37528 from s-aga-r/FIX-4360
perf: index `dn_detail` in `Delivery Note Item`
2023-10-16 16:42:32 +05:30
s-aga-r
5b4528e614 perf: index dn_detail in Delivery Note Item 2023-10-16 16:26:03 +05:30
ruthra kumar
08315522bb refactor: checkbox to toggle exchange rate inheritence in PO->PI 2023-10-16 16:25:19 +05:30
Ankush Menat
2790ae0744 fix: Update frappe.link_search usage
refer https://github.com/frappe/frappe/pull/22745
2023-10-16 15:43:14 +05:30
s-aga-r
08aec7f6d7 Merge pull request #37517 from s-aga-r/FIX-4388-1
fix(test): purchase return test case
2023-10-16 01:12:15 +05:30
s-aga-r
240b161e81 fix: purchase return test case 2023-10-16 01:08:42 +05:30
s-aga-r
0f6d67d8d4 Merge pull request #37513 from s-aga-r/FIX-4388
fix: GL Entries not getting created for PR Return
2023-10-16 00:33:21 +05:30
s-aga-r
253d4782c6 test: add test case for PR return with zero rate 2023-10-15 23:34:58 +05:30
Deepesh Garg
bd2d04e222 Merge pull request #37312 from blaggacao/feat/add-delivery-roles
fix(stock): add delivery user and manager role
2023-10-15 20:28:42 +05:30
Deepesh Garg
10a9a7c52a Merge pull request #36780 from rtdany10/rounded-row-wise-tax
feat: item(row) wise tax amount rounding
2023-10-15 20:01:34 +05:30
s-aga-r
795020dddc Merge pull request #37414 from s-aga-r/FIX-4347
fix: consider received qty while creating SO -> MR
2023-10-15 19:11:14 +05:30
Deepesh Garg
15df4924e8 Merge pull request #36797 from rtdany10/uae-item-tax
fix(regional): item wise tax calc issue
2023-10-15 18:17:40 +05:30
Deepesh Garg
621da178e1 Merge branch 'develop' of https://github.com/frappe/erpnext into rounded-row-wise-tax 2023-10-15 18:10:27 +05:30
s-aga-r
46add06a29 fix: GL Entries not getting created for PR Return 2023-10-15 15:46:29 +05:30
ruthra kumar
dd099be690 Merge pull request #37478 from ruthra-kumar/tds_from_journals
refactor: back calculate total amt for TDS
2023-10-15 10:51:42 +05:30
ruthra kumar
dfd40ca7b3 Merge pull request #37319 from ruthra-kumar/test_fixtures_for_sales_purchase_invoice
test: use fixtures for sales and purchase invoice
2023-10-15 10:16:22 +05:30
ruthra kumar
fbabf4ac2e refactor(test): make sure TDS Payable is available for testing 2023-10-15 08:57:38 +05:30
ruthra kumar
0207d6e7c9 refactor(test): make use of @change_settings in PI test cases 2023-10-15 08:57:38 +05:30
ruthra kumar
a2e064d214 refactor(test): use test fixture in purchase invoice 2023-10-15 08:57:38 +05:30
ruthra kumar
3bdf4f628c refactor(test): use test fixture in subscription 2023-10-15 08:57:38 +05:30
ruthra kumar
de9baef84a refactor(test): use @change_settings to fix failing test cases 2023-10-15 08:57:38 +05:30
ruthra kumar
8ebe5733ac refactor(test): fix broken test cases in Sales Invoice 2023-10-15 08:57:38 +05:30
ruthra kumar
58065f31b1 refactor(test): use @change_settings in sales invoice 2023-10-15 08:57:38 +05:30
ruthra kumar
fc50b174eb refactor(test): unset accounts frozen date 2023-10-15 08:57:38 +05:30
ruthra kumar
c322e5f381 test: use fixtures for sales and purchase invoice 2023-10-15 08:57:38 +05:30
s-aga-r
b2cee396ac fix: consider received qty while creating SO -> MR 2023-10-14 20:43:32 +05:30
s-aga-r
afef9dc8df Merge pull request #37182 from s-aga-r/MOVE-PAYMENTS-GATEWAYS
refactor!: move payment gateways to the payments app
2023-10-14 16:48:11 +05:30
ruthra kumar
f4a294c5ce Merge pull request #37495 from ruthra-kumar/keyerror_on_comparison_report
fix: keyerror on gl and pl comparision report
2023-10-14 12:15:19 +05:30
ruthra kumar
8ca0e4eacc Merge pull request #37435 from rtdany10/sp-gp-fix
fix(gp): wrong `allocated_amount` when grouped by Sales Person
2023-10-14 12:12:14 +05:30
ruthra kumar
ad00df0af6 fix: keyerror on gl and pl comparision report 2023-10-13 15:39:54 +05:30
Ankush Menat
5167fb2bae Merge pull request #37475 from iamrishiksahu/fix/#37231-doc-is-not-defined
fix: fixed the doc not defined issue.
2023-10-13 15:30:39 +05:30
ruthra kumar
479fe915af Merge pull request #37484 from ruthra-kumar/ignore_links_on_closing_balance_patch
refactor(patch): ignore links on closing balance patch
2023-10-13 09:18:41 +05:30
ruthra kumar
17ca8756a7 refactor(patch): ignore links on closing balance patch 2023-10-12 20:43:15 +05:30
Anand Baburajan
18e3a8907a fix: don't set finance books if gross_purchase_amount is not set (#37480) 2023-10-12 19:41:11 +05:30
ruthra kumar
2c56ee97c7 refactor: back calculate total amt for TDS 2023-10-12 16:03:26 +05:30
Rishik Sahu
5ebf7c8c29 fixed-#37231-changed-doc-to-d/closes-the-isse 2023-10-12 14:03:49 +05:30
Deepesh Garg
ff7c77e9fd Merge pull request #37418 from barredterra/de-is-return
fix: german tranlations of "Is Return"
2023-10-12 07:49:52 +05:30
ruthra kumar
510f12a1e8 Merge pull request #37436 from ruthra-kumar/validate_for_repost_only_for_critical_fields
refactor: for non-repost fields, don't validate
2023-10-11 20:03:16 +05:30
ruthra kumar
30adfa9844 Merge pull request #37459 from ruthra-kumar/validate_advances
refactor: add validation for Advances in SI/PI
2023-10-11 20:02:36 +05:30
ruthra kumar
0cdd6435a5 refactor: add validation for Advances in SI/PI 2023-10-11 14:42:23 +05:30
rohitwaghchaure
f3238f9105 fix: production plan reserved qty incorrect calculation (#37400) 2023-10-11 14:08:11 +05:30
s-aga-r
847f774c8b Merge pull request #37452 from s-aga-r/FIX-4407
fix(ux): allow MR to Stop until fully received
2023-10-11 13:50:20 +05:30
ruthra kumar
c1782c5015 refactor: for non-repost fields, don't validate 2023-10-11 13:30:21 +05:30
Dany Robert
6a27cbd61d Merge branch 'frappe:develop' into rounded-row-wise-tax 2023-10-11 12:31:13 +05:30
Ankush Menat
cea0d65fbd chore: disable beta release 2023-10-11 12:22:06 +05:30
Ankush Menat
99d3d317fe Merge pull request #37453 from akhilnarang/fix-ci
fix: use mariadb instead of mysql
2023-10-11 11:53:47 +05:30
Akhil Narang
4a6108e912 fix: use mariadb instead of mysql
Drop mysql-client in favour of mariadb-client

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2023-10-11 11:17:47 +05:30
s-aga-r
0d7a0f393d fix(ux): allow MR to Stop until fully received 2023-10-11 10:51:40 +05:30
Dany Robert
bda82bf1e9 fix(gp): wrong allocated_amount on multi sales person invoice 2023-10-10 10:30:09 +00:00
ruthra kumar
b495e5a5a1 Merge pull request #37393 from ruthra-kumar/import_financial_statements_in_bundle
refactor: import 'financial_statements.js' in erpnext bundle
2023-10-10 11:58:40 +05:30
s-aga-r
78eaf5d035 fix: fetch dependent task subject and project (#37401) 2023-10-10 11:05:24 +05:30
ruthra kumar
db317d67d5 Merge pull request #37204 from GursheenK/pe-allocation-for-term-inv
fix: allocate payment amount for split invoices in PE
2023-10-10 10:11:24 +05:30
ruthra kumar
3d99e5757e Merge pull request #37123 from blaggacao/fix/payment-request-rounding
fix: payment request rounding in multi-currency and on status update
2023-10-10 10:07:25 +05:30
David Arnold
fb7c5f6d91 fix(sales): add sales user to read stock settings for js refresh code path (#37317) 2023-10-10 07:56:54 +05:30
Bernd Oliver Sünderhauf
2d6f1f8598 fix(UX): Un-require description fields on items (#37354)
fix(UX): Un-require description fields on items.
2023-10-10 07:26:37 +05:30
barredterra
38ca164662 fix: german tranlations of "Is Return" 2023-10-09 23:45:58 +02:00
Anand Baburajan
6959c928c6 test: add product_code in create_loan_product (#37416) 2023-10-09 20:58:56 +05:30
RitvikSardana
2c899dd13a fix: customer group and territory not mandatory (#37050)
* fix: customer group and territory not mandatory

* fix: supplier group not required

* test: added test case for customer and supplier without group

* test: Customer without customer group and territory

* chore: remove unwanted changes

* test: Supplier without supplier group

* test: code cleanup

---------

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-10-09 20:21:25 +05:30
Deepesh Garg
c9dfb909a5 Merge pull request #37310 from deepeshgarg007/lead_details_qb
chore: rewrite query using query builder
2023-10-09 20:07:58 +05:30
Deepesh Garg
8f9dd5407b Merge pull request #37324 from blaggacao/fix/portal-tx-row-total-display
fix(portal): used rounded total in transaction rows, if enabled
2023-10-09 19:37:26 +05:30
Deepesh Garg
6d43f90dc2 Merge branch 'develop' of https://github.com/frappe/erpnext into lead_details_qb 2023-10-09 19:23:16 +05:30
Rucha Mahabal
788df14ae8 Merge pull request #37376 from barredterra/hrms-translations 2023-10-09 13:18:55 +05:30
ruthra kumar
411be583a3 Merge pull request #37395 from ruthra-kumar/exception_on_exporting_errored_rows_in_bank_statement_import
fix: exception on exporting errored rows
2023-10-08 18:20:30 +05:30
ruthra kumar
d3c6000904 fix: exception on exporting errored rows 2023-10-08 13:16:28 +05:30
ruthra kumar
40e7c43ce3 refactor: import financial_statement in erpnext bundle 2023-10-07 21:03:31 +05:30
ruthra kumar
7d11fe1633 Merge pull request #37289 from GursheenK/ar-ageing-summary
fix: ageing summary in SOA AR
2023-10-07 15:09:21 +05:30
mergify[bot]
10c666bf69 fix: incorrect status of the returned purchase receipt (backport #37300) (#37380)
fix: incorrect status of the returned purchase receipt (#37300)

(cherry picked from commit 63f45739e0)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-06 14:43:13 +05:30
barredterra
4b8dc8a35c refactor: migrate translations from HRMS 2023-10-05 16:58:26 +02:00
barredterra
4b4efbc7a6 refactor: migrate translations to HRMS 2023-10-05 16:55:29 +02:00
mergify[bot]
d2aa4d5d6b fix: validation message for valuation rate (backport #37301) (#37351)
fix: validation message for valuation rate (#37301)

(cherry picked from commit 643bb0511c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-05 18:13:23 +05:30
ruthra kumar
27bb0b1130 Merge pull request #37370 from ruthra-kumar/fetch_company_address_for_lead_based_quotation
fix: fetch company details for Lead based quotation
2023-10-05 13:50:03 +05:30
ruthra kumar
f388864fd5 fix: fetch company details for Lead based quotation 2023-10-05 13:13:11 +05:30
ruthra kumar
c006c14aaa Merge pull request #37359 from ruthra-kumar/change_request_response_strucutre_on_exchangerate
refactor: add `access_key` field to facilitate use of exchangerate.host provider
2023-10-05 09:18:56 +05:30
ruthra kumar
9396fb77f4 Merge pull request #37294 from ruthra-kumar/restrict_payment_as_ref_in_je_from_ui
refactor: block Payment Entry as ref in Journals from UI
2023-10-05 08:53:35 +05:30
ruthra kumar
c8e3dc6c4c chore: refactor test case for exchangerate.host provider 2023-10-05 08:43:08 +05:30
ruthra kumar
81591a34c2 refactor: introduce access_key field 2023-10-05 08:43:08 +05:30
ruthra kumar
aad77b133b Merge pull request #37362 from anandbaburajan/asset_cap_wip_1
test: fixing test_capitalization_with_wip_composite_asset
2023-10-05 08:37:31 +05:30
anandbaburajan
9468513d7c test: fixing test_capitalization_with_wip_composite_asset 2023-10-04 22:11:15 +05:30
Jignesh (GreyCube Technologies)
9f33cc5cf3 fix(Employee): enable no_copy for relieving_date (#37344)
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2023-10-04 13:10:27 +05:30
mergify[bot]
f4f40cc776 feat: composite WIP asset (copy #37352) (#37353)
* feat: wip composite asset

(cherry picked from commit 4907e7acd4)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
#	erpnext/assets/doctype/asset/asset.json
#	erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json

* chore: resolving conflicts

---------

Co-authored-by: anandbaburajan <anandbaburajan@gmail.com>
2023-10-04 10:29:18 +05:30
mergify[bot]
9be554a147 chore: fix linter issue (backport #37349) (#37350)
chore: fix linter issue (#37349)

(cherry picked from commit e975a10a75)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-03 22:11:10 +05:30
mergify[bot]
7729c1a413 fix: do not consider submitted Work Orders in the Production Plan Res… (backport #37343) (#37347)
fix: do not consider submitted Work Orders in the Production Plan Res… (#37343)

fix: do not consider submitted Work Orders in the Production Plan Reserve qty
(cherry picked from commit c3aeb2dec5)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-03 22:05:01 +05:30
mergify[bot]
8d99f9a12a fix: currency symbol in the Supplier Quotation Comparison report (backport #37337) (#37342)
fix: currency symbol in the Supplier Quotation Comparison report (#37337)

fix: currency in the Supplier Quotation Comparison report
(cherry picked from commit 82e8606b3c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-10-03 20:32:34 +05:30
ruthra kumar
ab378196bd Merge pull request #37304 from GursheenK/party-totals-payable-report
fix: only float row values for total in AP summary
2023-10-03 19:45:03 +05:30
ruthra kumar
67440c38ae refactor: use isinstance over type 2023-10-03 17:38:43 +05:30
Anand Baburajan
fed94845ce feat: asset salvage_value_percentage (#37302)
* feat: asset salvage_value_percentage

* chore: add missing parameter in get_item_details

* chore: change asset depr table colors
2023-10-03 12:21:17 +05:30
Anand Baburajan
087f378a4f refactor: rename loan type to loan product in lending (#37325)
refactor: rename loan type to loan product
2023-10-03 00:15:30 +05:30
David Arnold
fa8483fe8c fix(portal): used rounded total in transaction rows, if enabled 2023-10-02 17:46:39 +02:00
Deepesh Garg
fb51cae88b chore: fix shopping cart tests 2023-10-02 16:16:31 +05:30
Deepesh Garg
3c1f93215a Merge pull request #37297 from frappe/mergify/bp/develop/pr-37293
fix: Description field for the 'Ignore Available Stock' (backport #37293)
2023-10-02 10:56:33 +05:30
Deepesh Garg
964cd75f6e Merge pull request #37235 from niyazrazak/patch-13
fix: set route options to cost center
2023-10-02 10:54:02 +05:30
Deepesh Garg
559466e1ef Merge pull request #37229 from FHenry/dev_remove_regional_france
refactor!: Remove Regionalisation of France as now there is an App ERPNext France to manage it
2023-10-02 10:51:25 +05:30
s-aga-r
e7f4b7b190 fix: ignore user permissions for Source Warehouse (#37313) 2023-10-01 21:25:01 +05:30
David Arnold
d3f94a03fc fix(stock): add delivery user and manager role 2023-10-01 15:13:54 +02:00
Deepesh Garg
25718f5cc7 chore: rewrite query using query builder 2023-10-01 13:27:44 +05:30
Gursheen Anand
1dab195560 fix: add only float row values for total 2023-09-29 18:20:02 +05:30
s-aga-r
361e555118 fix: Not unique table/alias: 'tabTask' (#37285) 2023-09-29 15:05:02 +05:30
rohitwaghchaure
36364c235e fix: Description field for the 'Ignore Available Stock' (#37293)
(cherry picked from commit 7f1483ad70)
2023-09-29 09:06:47 +00:00
Gursheen Anand
644e25e587 test: process soa for gl and ar 2023-09-29 14:35:43 +05:30
Gursheen Anand
67f878ff8c refactor: separate function for statement dict 2023-09-29 14:34:43 +05:30
ruthra kumar
d391e81505 refactor: block Payment Entry as ref in JE from UI 2023-09-29 13:40:59 +05:30
Gursheen Anand
d9eb44e62d fix: ageing summary in AR 2023-09-29 11:12:19 +05:30
ruthra kumar
f160e49483 Merge pull request #37268 from GursheenK/ar-summary-party-filter
fix: AP AR filters from Party link
2023-09-28 11:54:34 +05:30
ruthra kumar
2c7d6aec89 test: multi select party filter in AR report 2023-09-28 11:17:38 +05:30
mergify[bot]
f375c8cc7f fix: incorrect qty for material request in Production Plan (backport #37270) (#37275)
fix: incorrect qty for material request in Production Plan (#37270)

(cherry picked from commit 8fe4a4d3aa)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-09-27 23:35:53 +05:30
Marica
d6e4f80187 fix: Set serial_and_batch_bundle in right field for Asset Repair Stock Entry (#37273)
fix: Set `serial_and_batch_bundle` in same field for Asset Repair SE
- `serial_and_batch_bundle` was earlier set in `serial_no` field
2023-09-27 23:34:57 +05:30
s-aga-r
296b233659 chore: patch to delete Payment Gateways 2023-09-27 15:27:29 +05:30
Gursheen Anand
59e8abfd57 fix: party format in test 2023-09-27 13:57:49 +05:30
Gursheen Anand
4b28154f5e fix: process soa filter for multiselect 2023-09-27 13:04:13 +05:30
Gursheen Anand
f7cb68a45f fix: summary report filters 2023-09-27 13:03:37 +05:30
Gursheen Anand
e7239e02d4 fix: query for multiselect filter 2023-09-27 13:02:52 +05:30
Gursheen Anand
9d15124a6a fix: set route filter values for AR 2023-09-27 13:01:48 +05:30
Gursheen Anand
888ed36eed fix: set route filter values for AP 2023-09-27 13:01:18 +05:30
Ankush Menat
2dc95e5d59 fix: trial balance report freezes when adding filters (#37264)
fix: Only add onclick if correct data is returned

workaround for https://github.com/frappe/datatable/issues/177
2023-09-27 12:34:40 +05:30
vr-greycube
4ada5a488e fix: Use default Cost Center of the Company for additional discount (#37234)
fix: Set cost center as default company cost center 

When Discount Accounting in enabled in Selling Settings, use Company default Cost Center while making GL entries for additional_discount_account
2023-09-27 10:38:32 +05:30
Deepesh Garg
8c5fcb8257 fix: PCV posting issues (#37029)
* fix: PCV posting issues

* fix: process closing entries separately in a background job

* test: Update tests

* chore: fix broken ci
2023-09-27 10:22:09 +05:30
ruthra kumar
a223935f14 Merge pull request #37248 from GursheenK/ar-summary-party-filter
fix: AP & AR summary filters to match AR
2023-09-27 09:41:01 +05:30
Ankush Menat
4555543920 Merge pull request #37249 from akhilnarang/drop-redundant-check
Drop redundant check
2023-09-26 21:54:36 +05:30
HENRY Florian
8051c2d3cb refactor: In Quotation Item, discount_and_margin section should have same collapsible_depends_on as other similar DocType (Sales Order Item,Sales Invoice Item,...) (#37252) 2023-09-26 18:59:27 +05:30
mergify[bot]
2cca37ad7d fix: reserved qty for production plan (backport #37251) (#37253)
fix: reserved qty for production plan (#37251)

(cherry picked from commit 0a0d5b3e66)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-09-26 18:29:54 +05:30
mergify[bot]
d558ba29fa fix: serial number decimal issue (backport #37242) (#37250)
fix: serial number decimal issue (#37242)

(cherry picked from commit 78ab2013e5)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-09-26 17:55:16 +05:30
ruthra kumar
796cc0915a Merge pull request #37194 from GursheenK/editable-purchase-invoice
feat: editable purchase invoice
2023-09-26 16:46:11 +05:30
Gursheen Anand
76a5d94f37 fix: set new AP summary filters 2023-09-26 15:11:54 +05:30
s-aga-r
b1770b3f86 refactor: remove test test_default_bank_account 2023-09-26 15:10:20 +05:30
Gursheen Anand
7d96044d8e fix: change filters for AR summary 2023-09-26 15:10:16 +05:30
Gursheen Anand
832d7e7d7b fix: set AR filters after rename 2023-09-26 15:08:40 +05:30
ruthra kumar
ed7f67b1a8 refactor: remove references in repost doctypes upon parent doc delet 2023-09-26 14:35:31 +05:30
Deepesh Garg
656c758263 chore: Add missing comma 2023-09-26 14:20:41 +05:30
Akhil Narang
dd911aa521 chore(stock_ledger): drop redundant check
Commit c2d7461d3c dropped a usage of
`last_valuation_rate` around this code block. After that, it was always checked
although the value would be None as it was being explicitly set above.

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2023-09-26 14:07:01 +05:30
s-aga-r
73fc974950 fix: incorrect Parent Task getting set for 2nd to nth child Task (#37230) 2023-09-26 10:54:23 +05:30
Abraham Kalungi
0f6b530032 feat: Added ledger for Botswana VAT (#37212)
feat: Added ledger for Botswana VAT (#37212)
2023-09-26 08:57:50 +05:30
NIYAZ RAZAK
5e4b73918d fix: set route to cost center
cost center mapping is not correct
2023-09-25 22:15:08 +03:00
Deepesh Garg
a444906093 Merge pull request #37191 from FHenry/dev_fr_translation
fix: missing french translation on Lead and Prospect
2023-09-25 18:24:16 +05:30
Florian HENRY
7657b721bc Merge branch 'develop' of https://github.com/frappe/erpnext into dev_remove_regional_france 2023-09-25 10:27:22 +02:00
Anand Baburajan
ee178ff2ce chore: add disabled field for bank account (#37226) 2023-09-25 12:12:11 +05:30
s-aga-r
38aebf65e2 refactor!: remove stripe_integration.py 2023-09-25 11:08:24 +05:30
Deepesh Garg
c7969b428d Merge pull request #37116 from blaggacao/fix/payment-url
fix: payment url display as link
2023-09-24 21:50:53 +05:30
Deepesh Garg
12e16aa95f Merge pull request #37190 from FHenry/dev_feat_adress_contact_postion
feat: Customer and Supplier - Primary Address and Contact on the same column as new address and contact
2023-09-24 21:39:05 +05:30
Raffael Meyer
7c4ebe2733 fix(Material Request): consider project for item details (#37215)
fix(Material Request): project in item details
2023-09-24 21:10:53 +05:30
Deepesh Garg
b8ff9e8166 Merge pull request #37214 from barredterra/german-purchase-receipt
fix!: german translation of Purchase Receipt
2023-09-24 20:20:11 +05:30
Deepesh Garg
08566204dc Merge pull request #37219 from frappe/mergify/bp/develop/pr-37167
fix: set customer currency in pos_invoice if exists (#37167)
2023-09-24 20:18:27 +05:30
milanpethani
62ea097b14 fix: set customer currency in pos_invoice if exists
if currency exists in the profile and customer currency doesn't exists still it will update currency to None, so update customer currency only if exists

(cherry picked from commit 041d52e828)
2023-09-24 12:23:58 +00:00
Deepesh Garg
9dbb9e7515 Merge pull request #37211 from deepeshgarg007/trial_balance_net_values
feat: Toggle net values in Trial Balance report
2023-09-24 17:45:11 +05:30
Deepesh Garg
b578317f03 Merge pull request #37213 from GursheenK/process-soa-gl-filters
fix: filter gl entries in process soa
2023-09-24 17:44:21 +05:30
barredterra
7f98100040 fix: german translation of Purchase Receipt 2023-09-23 20:54:13 +02:00
Gursheen Anand
61c6ebbb95 fix: validation for si 2023-09-23 20:30:50 +05:30
Gursheen Anand
8ef0d88708 fix: call validate before setting repost flag 2023-09-23 20:29:38 +05:30
Gursheen Anand
1856050ef9 fix: do not run bg job for single doc 2023-09-23 19:30:42 +05:30
Gursheen Anand
a856091ff4 refactor: remove repeated validation for voucher 2023-09-23 19:18:06 +05:30
Gursheen Anand
7ebf083683 refactor: use repost accounting legder 2023-09-23 19:13:33 +05:30
Gursheen Anand
ba7212c98b refactor: remove unused method 2023-09-23 19:11:46 +05:30
Gursheen Anand
5346c67b02 fix: apply gl report filters 2023-09-23 17:50:45 +05:30
Gursheen Anand
545f2ccdf1 chore: remove unused variable 2023-09-23 14:59:12 +05:30
Gursheen Anand
b3aa201eb5 fix: split inv allocated amt on server side 2023-09-23 14:57:53 +05:30
Deepesh Garg
06a45897de feat: Toggle net values in Trial Balance report 2023-09-23 14:34:11 +05:30
Florian HENRY
f15603017c refactor: missing translation 2023-09-22 16:56:12 +02:00
Florian HENRY
b2d520647f refactor: missing translation 2023-09-22 16:55:58 +02:00
Florian HENRY
d1c69aa229 Merge branch 'develop' of https://github.com/frappe/erpnext into dev_fr_translation 2023-09-22 16:53:13 +02:00
Florian HENRY
dc1294ec54 refactor: missing translation 2023-09-22 16:53:06 +02:00
s-aga-r
9554f6ea3c refactor!: remove GoCardless Templates 2023-09-22 19:04:51 +05:30
s-aga-r
543a76863f refactor!: remove GoCardless Mandate 2023-09-22 19:04:51 +05:30
s-aga-r
eb419e8e59 refactor!: remove Mpesa Settings 2023-09-22 19:04:49 +05:30
s-aga-r
eded7871f3 refactor!: remove GoCardless Settings 2023-09-22 18:59:28 +05:30
ruthra kumar
c5e4e01747 Merge pull request #37202 from ruthra-kumar/ignore_ple_on_pcv_cancellation
refactor: ignore PLE's on PCV cancellation
2023-09-22 13:28:40 +05:30
Gursheen Anand
ac28a5b372 fix: allocate amt for payment term invoices 2023-09-22 12:41:17 +05:30
ruthra kumar
301092dad1 refactor: ignore PLE's on PCV cancellation 2023-09-22 12:40:51 +05:30
ruthra kumar
5353f190ee Merge pull request #37200 from ruthra-kumar/ui_element_to_filter_on_payment_entry_exc_gain_loss
refactor: button in Payment Entry to filter associated Journals
2023-09-22 11:54:02 +05:30
ruthra kumar
150728deaa refactor: button on PE to filter associated Journals 2023-09-22 11:30:47 +05:30
Gursheen Anand
c66c438575 test: reposted acc entries for pi 2023-09-22 11:22:25 +05:30
ruthra kumar
d4773872aa Merge pull request #37069 from marination/advance-unlink-impact
fix: Recalculate `advance_paid` in SO/PO after unlinking from advance entry
2023-09-22 08:35:27 +05:30
s-aga-r
c679d54852 Merge pull request #37185 from s-aga-r/REFACTOR-SRE
refactor(minor): Stock Reservation Entry
2023-09-21 21:46:09 +05:30
s-aga-r
b6437e387f fix: Item Dashboard 2023-09-21 18:23:20 +05:30
s-aga-r
8b6430c886 refactor(minor): Stock Reservation Entry 2023-09-21 18:23:18 +05:30
Gursheen Anand
c88f6d1fa7 fix: linting issues 2023-09-21 17:41:59 +05:30
Gursheen Anand
23470bf52d feat: allow repost for pi 2023-09-21 17:30:53 +05:30
Gursheen Anand
e77814fbc0 feat: add repost btn in invoice 2023-09-21 17:29:14 +05:30
Gursheen Anand
68effd93bd refactor: move reposting logic to common controller 2023-09-21 17:28:07 +05:30
Gursheen Anand
e922ec60eb feat: allow on submit fields 2023-09-21 17:26:20 +05:30
Florian HENRY
c5667a6cc1 fix: missing french translation on Lead and Prospect 2023-09-21 12:53:30 +02:00
Florian HENRY
fb844920af feat: Customer and Supplier - Primary Address and Contact on the same column as new adress and contact 2023-09-21 12:28:09 +02:00
ruthra kumar
f31a527505 Merge pull request #37120 from vorasmit/fix-dup-advance
fix: handle multiple references with same name
2023-09-21 14:20:04 +05:30
s-aga-r
acda72d616 feat: Stock Ledger Variance report (#37165)
* feat: `Stock Ledger Variance` report

* refactor: `get_data()`
2023-09-21 12:51:28 +05:30
s-aga-r
f0859ecc60 fix: labels for Stock Ledger Invariant Check report (#37150)
refactor: `Stock Ledger Invariant Check` report
2023-09-20 18:36:24 +05:30
rohitwaghchaure
dd4769ecf1 feat: allow to edit Stock Quantity in the Sales and Purchase Transactions (#36600)
feat: allow to edit Stock Quantity in the Sales and Purchase transactions
2023-09-20 18:09:03 +05:30
rohitwaghchaure
e6199dc802 fix: allow to select parent warehouse in the website item (#37047) 2023-09-20 17:27:35 +05:30
Ankush Menat
bf01f3227f chore: remove import script
Unused
2023-09-20 16:22:49 +05:30
Smit Vora
3e282bfbce chore: add regional support for getting payment entries (#37119)
chore: add regional support for get payment entries
2023-09-19 20:47:21 +05:30
RJPvT
c35dea7177 chore: translations dutch (#37042)
update: translations dutch
2023-09-19 20:26:42 +05:30
Raffael Meyer
57d5c8a837 fix: update help links (#37098) 2023-09-19 19:59:16 +05:30
Raffael Meyer
84a9000db2 fix: german translation of Sales and Purchase Invoice (#37122)
* fix: german translation of Purchase Invoice

* fix: german translation of Sales Invoice
2023-09-19 19:57:43 +05:30
NandhiniDevi
6be567dbf6 fix: add item group filter added in item-wise purchase register (#36937)
fix: add item group filter added in item-wise purchase register (#36937)
2023-09-19 19:25:46 +05:30
NIYAZ RAZAK
141ba255e0 feat: validate duplicate date in holiday list (#37022)
* feat: validate duplicate date in table

* chore: cleanup

* chore: linting issues

* chore: linting issues

---------

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2023-09-19 18:50:47 +05:30
Deepesh Garg
e19e04b050 feat: Add a process document for Subscription (#37126)
* feat: Add a process document for Subscription

* chore: Remove print statements

* feat: Input for generating invoice before currenc invoice date

* chore: patch for backward compatability

* refactor: Unit tests for subscription

* chore: set status on insert
2023-09-19 18:39:44 +05:30
RitvikSardana
03f0abf6de fix: after applying coupon code, field in_words not updated (#37133)
* fix: after applying coupon code, field in_words not updated

* fix: changed the order of the function set_total_in_words
2023-09-19 13:08:17 +05:30
s-aga-r
9c9d0ecb73 feat: provision to create RIV from Stock Ledger Invariant Check report (#37115)
* feat: provision to create RIV from `Stock Ledger Invariant Check` report

* fix: `linter`
2023-09-19 13:00:44 +05:30
David Arnold
c99c486716 Merge branch 'develop' into fix/payment-url 2023-09-18 20:33:30 +02:00
David Arnold
7bc8ff21d4 fix: payment url display as link 2023-09-18 20:33:21 +02:00
David Arnold
6e1ad4c5bd fix: payment request rounding in multi-currency and on status update 2023-09-18 20:29:27 +02:00
mergify[bot]
195de14810 fix: don't set from warehouse for purchase material request (backport #37132) (#37134)
fix: don't set from warehouse for purchase material request (#37132)

(cherry picked from commit e62b783f34)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2023-09-18 22:31:22 +05:30
Ankush Menat
dd24a1b36e chore: remove obsolete welcome page (#37143) 2023-09-18 16:43:13 +00:00
Ankush Menat
d0eac47483 fix: stock summary page 2023-09-18 21:49:52 +05:30
Smit Vora
a9c85e4179 fix: handle multiple references with same name 2023-09-17 16:14:21 +05:30
Florian HENRY
0932f1c9d4 Merge branch 'develop' of https://github.com/frappe/erpnext into dev_remove_regional_france 2023-09-13 17:19:14 +02:00
Florian HENRY
a3ebef7a29 fix: fix CI 2023-09-13 17:18:13 +02:00
marination
8a4954d713 test: Impact on SO of advance PE submit and unlinking/replacement by SI 2023-09-13 19:09:03 +05:30
marination
426350eee6 fix: Update advance_paid in SO/PO after unlinking from advance entry 2023-09-13 14:24:56 +05:30
Florian HENRY
bb8153173a Merge branch 'develop' of https://github.com/frappe/erpnext into dev_remove_regional_france 2023-09-07 13:14:45 +02:00
Florian HENRY
f447177f8d refactor: Remove Regionalisation From France as now there is an App ERPNext France to manage it 2023-09-06 17:41:27 +02:00
Florian HENRY
662e9547da refactor: Remove Regionalisation From France as now there is an App ERPNext France to manage it 2023-09-06 17:40:19 +02:00
Dany Robert
159be1d40f fix: revert ignore_account_closing_balance field 2023-08-27 18:43:42 +00:00
Dany Robert
89ddf3272e fix(regional): item wise tax calc issue 2023-08-24 05:56:56 +00:00
Dany Robert
9e1b2c9f57 fix: item wise split up rounding 2023-08-24 05:02:14 +00:00
Dany Robert
0ebcc2cf2c fix: round item_wise_tax_detail in taxes 2023-08-23 04:51:09 +00:00
Dany Robert
dfb5b88abb chore: linters 2023-08-23 04:01:00 +00:00
Dany Robert
c20258d2a3 fix: tax calc changes in js 2023-08-23 03:59:08 +00:00
Dany Robert
3ead28906c feat: item(row) wise tax amount rounding 2023-08-22 14:41:07 +00:00
1069 changed files with 26618 additions and 25130 deletions

View File

@@ -4,7 +4,9 @@ set -e
cd ~ || exit
sudo apt update && sudo apt install redis-server libcups2-dev
sudo apt update
sudo apt remove mysql-server mysql-client
sudo apt install libcups2-dev redis-server mariadb-client-10.6
pip install frappe-bench
@@ -25,14 +27,14 @@ fi
if [ "$DB" == "mariadb" ];then
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
fi
if [ "$DB" == "postgres" ];then

View File

@@ -1,60 +0,0 @@
import re
import sys
errors_encounter = 0
pattern = re.compile(r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,(\s*?.*?\n*?)*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)")
words_pattern = re.compile(r"_{1,2}\([\"'`]{1,3}.*?[a-zA-Z]")
start_pattern = re.compile(r"_{1,2}\([f\"'`]{1,3}")
f_string_pattern = re.compile(r"_\(f[\"']")
starts_with_f_pattern = re.compile(r"_\(f")
# skip first argument
files = sys.argv[1:]
files_to_scan = [_file for _file in files if _file.endswith(('.py', '.js'))]
for _file in files_to_scan:
with open(_file, 'r') as f:
print(f'Checking: {_file}')
file_lines = f.readlines()
for line_number, line in enumerate(file_lines, 1):
if 'frappe-lint: disable-translate' in line:
continue
start_matches = start_pattern.search(line)
if start_matches:
starts_with_f = starts_with_f_pattern.search(line)
if starts_with_f:
has_f_string = f_string_pattern.search(line)
if has_f_string:
errors_encounter += 1
print(f'\nF-strings are not supported for translations at line number {line_number}\n{line.strip()[:100]}')
continue
else:
continue
match = pattern.search(line)
error_found = False
if not match and line.endswith((',\n', '[\n')):
# concat remaining text to validate multiline pattern
line = "".join(file_lines[line_number - 1:])
line = line[start_matches.start() + 1:]
match = pattern.match(line)
if not match:
error_found = True
print(f'\nTranslation syntax error at line number {line_number}\n{line.strip()[:100]}')
if not error_found and not words_pattern.search(line):
error_found = True
print(f'\nTranslation is useless because it has no words at line number {line_number}\n{line.strip()[:100]}')
if error_found:
errors_encounter += 1
if errors_encounter > 0:
print('\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.')
sys.exit(1)
else:
print('\nGood To Go!')

View File

@@ -1,26 +0,0 @@
name: Backport
on:
pull_request_target:
types:
- closed
- labeled
jobs:
main:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout Actions
uses: actions/checkout@v2
with:
repository: "frappe/backport"
path: ./actions
ref: develop
- name: Install Actions
run: npm install --production --prefix ./actions
- name: Run backport
uses: ./actions/backport
with:
token: ${{secrets.BACKPORT_BOT_TOKEN}}
labelsToAdd: "backport"
title: "{{originalTitle}}"

View File

@@ -1,52 +0,0 @@
# This workflow is agnostic to branches. Only maintain on develop branch.
# To add/remove versions just modify the matrix.
name: Create weekly release pull requests
on:
schedule:
# 9:30 UTC => 3 PM IST Tuesday
- cron: "30 9 * * 2"
workflow_dispatch:
jobs:
stable-release:
name: Release
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: ["13", "14"]
steps:
- uses: octokit/request-action@v2.x
with:
route: POST /repos/{owner}/{repo}/pulls
owner: frappe
repo: erpnext
title: |-
"chore: release v${{ matrix.version }}"
body: "Automated weekly release."
base: version-${{ matrix.version }}
head: version-${{ matrix.version }}-hotfix
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
beta-release:
name: Release
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: octokit/request-action@v2.x
with:
route: POST /repos/{owner}/{repo}/pulls
owner: frappe
repo: erpnext
title: |-
"chore: release v15 beta"
body: "Automated beta release."
base: version-15-beta
head: develop
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}

View File

@@ -28,7 +28,7 @@ jobs:
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone

View File

@@ -2,21 +2,23 @@ name: Generate Semantic Release
on:
push:
branches:
- version-13
- version-15
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout Entire Repository
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 18
- name: Setup dependencies
run: |
npm install @semantic-release/git @semantic-release/exec --no-save

View File

@@ -47,7 +47,7 @@ jobs:
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone
@@ -117,7 +117,7 @@ jobs:
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
- name: Run Tests
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --with-coverage --total-builds 4 --build-number ${{ matrix.container }}'
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --total-builds 4 --build-number ${{ matrix.container }}'
env:
TYPE: server
CI_BUILD_ID: ${{ github.run_id }}
@@ -126,27 +126,3 @@ jobs:
- name: Show bench output
if: ${{ always() }}
run: cat ~/frappe-bench/bench_start.log || true
- name: Upload coverage data
uses: actions/upload-artifact@v3
with:
name: coverage-${{ matrix.container }}
path: /home/runner/frappe-bench/sites/coverage.xml
coverage:
name: Coverage Wrap Up
needs: test
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v2
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Upload coverage data
uses: codecov/codecov-action@v2
with:
name: MariaDB
fail_ci_if_error: true
verbose: true

View File

@@ -1,5 +1,5 @@
{
"branches": ["version-13"],
"branches": ["version-15"],
"plugins": [
"@semantic-release/commit-analyzer", {
"preset": "angular",
@@ -21,4 +21,4 @@
],
"@semantic-release/github"
]
}
}

View File

@@ -3,7 +3,7 @@ import inspect
import frappe
__version__ = "15.0.0-dev"
__version__ = "15.6.1"
def get_default_company(user=None):

View File

@@ -23,6 +23,65 @@ class InvalidAccountMergeError(frappe.ValidationError):
class Account(NestedSet):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_currency: DF.Link | None
account_name: DF.Data
account_number: DF.Data | None
account_type: DF.Literal[
"",
"Accumulated Depreciation",
"Asset Received But Not Billed",
"Bank",
"Cash",
"Chargeable",
"Capital Work in Progress",
"Cost of Goods Sold",
"Current Asset",
"Current Liability",
"Depreciation",
"Direct Expense",
"Direct Income",
"Equity",
"Expense Account",
"Expenses Included In Asset Valuation",
"Expenses Included In Valuation",
"Fixed Asset",
"Income Account",
"Indirect Expense",
"Indirect Income",
"Liability",
"Payable",
"Receivable",
"Round Off",
"Stock",
"Stock Adjustment",
"Stock Received But Not Billed",
"Service Received But Not Billed",
"Tax",
"Temporary",
]
balance_must_be: DF.Literal["", "Debit", "Credit"]
company: DF.Link
disabled: DF.Check
freeze_account: DF.Literal["No", "Yes"]
include_in_gross: DF.Check
is_group: DF.Check
lft: DF.Int
old_parent: DF.Data | None
parent_account: DF.Link
report_type: DF.Literal["", "Balance Sheet", "Profit and Loss"]
rgt: DF.Int
root_type: DF.Literal["", "Asset", "Liability", "Income", "Expense", "Equity"]
tax_rate: DF.Float
# end: auto-generated types
nsm_parent_field = "parent_account"
def on_update(self):

View File

@@ -1,289 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
"""
Import chart of accounts from OpenERP sources
"""
import ast
import json
import os
from xml.etree import ElementTree as ET
import frappe
from frappe.utils.csvutils import read_csv_content
path = "/Users/nabinhait/projects/odoo/addons"
accounts = {}
charts = {}
all_account_types = []
all_roots = {}
def go():
global accounts, charts
default_account_types = get_default_account_types()
country_dirs = []
for basepath, folders, files in os.walk(path):
basename = os.path.basename(basepath)
if basename.startswith("l10n_"):
country_dirs.append(basename)
for country_dir in country_dirs:
accounts, charts = {}, {}
country_path = os.path.join(path, country_dir)
manifest = ast.literal_eval(open(os.path.join(country_path, "__openerp__.py")).read())
data_files = (
manifest.get("data", []) + manifest.get("init_xml", []) + manifest.get("update_xml", [])
)
files_path = [os.path.join(country_path, d) for d in data_files]
xml_roots = get_xml_roots(files_path)
csv_content = get_csv_contents(files_path)
prefix = country_dir if csv_content else None
account_types = get_account_types(
xml_roots.get("account.account.type", []), csv_content.get("account.account.type", []), prefix
)
account_types.update(default_account_types)
if xml_roots:
make_maps_for_xml(xml_roots, account_types, country_dir)
if csv_content:
make_maps_for_csv(csv_content, account_types, country_dir)
make_account_trees()
make_charts()
create_all_roots_file()
def get_default_account_types():
default_types_root = []
default_types_root.append(
ET.parse(os.path.join(path, "account", "data", "data_account_type.xml")).getroot()
)
return get_account_types(default_types_root, None, prefix="account")
def get_xml_roots(files_path):
xml_roots = frappe._dict()
for filepath in files_path:
fname = os.path.basename(filepath)
if fname.endswith(".xml"):
tree = ET.parse(filepath)
root = tree.getroot()
for node in root[0].findall("record"):
if node.get("model") in [
"account.account.template",
"account.chart.template",
"account.account.type",
]:
xml_roots.setdefault(node.get("model"), []).append(root)
break
return xml_roots
def get_csv_contents(files_path):
csv_content = {}
for filepath in files_path:
fname = os.path.basename(filepath)
for file_type in ["account.account.template", "account.account.type", "account.chart.template"]:
if fname.startswith(file_type) and fname.endswith(".csv"):
with open(filepath, "r") as csvfile:
try:
csv_content.setdefault(file_type, []).append(read_csv_content(csvfile.read()))
except Exception as e:
continue
return csv_content
def get_account_types(root_list, csv_content, prefix=None):
types = {}
account_type_map = {
"cash": "Cash",
"bank": "Bank",
"tr_cash": "Cash",
"tr_bank": "Bank",
"receivable": "Receivable",
"tr_receivable": "Receivable",
"account rec": "Receivable",
"payable": "Payable",
"tr_payable": "Payable",
"equity": "Equity",
"stocks": "Stock",
"stock": "Stock",
"tax": "Tax",
"tr_tax": "Tax",
"tax-out": "Tax",
"tax-in": "Tax",
"charges_personnel": "Chargeable",
"fixed asset": "Fixed Asset",
"cogs": "Cost of Goods Sold",
}
for root in root_list:
for node in root[0].findall("record"):
if node.get("model") == "account.account.type":
data = {}
for field in node.findall("field"):
if (
field.get("name") == "code"
and field.text.lower() != "none"
and account_type_map.get(field.text)
):
data["account_type"] = account_type_map[field.text]
node_id = prefix + "." + node.get("id") if prefix else node.get("id")
types[node_id] = data
if csv_content and csv_content[0][0] == "id":
for row in csv_content[1:]:
row_dict = dict(zip(csv_content[0], row))
data = {}
if row_dict.get("code") and account_type_map.get(row_dict["code"]):
data["account_type"] = account_type_map[row_dict["code"]]
if data and data.get("id"):
node_id = prefix + "." + data.get("id") if prefix else data.get("id")
types[node_id] = data
return types
def make_maps_for_xml(xml_roots, account_types, country_dir):
"""make maps for `charts` and `accounts`"""
for model, root_list in xml_roots.items():
for root in root_list:
for node in root[0].findall("record"):
if node.get("model") == "account.account.template":
data = {}
for field in node.findall("field"):
if field.get("name") == "name":
data["name"] = field.text
if field.get("name") == "parent_id":
parent_id = field.get("ref") or field.get("eval")
data["parent_id"] = parent_id
if field.get("name") == "user_type":
value = field.get("ref")
if account_types.get(value, {}).get("account_type"):
data["account_type"] = account_types[value]["account_type"]
if data["account_type"] not in all_account_types:
all_account_types.append(data["account_type"])
data["children"] = []
accounts[node.get("id")] = data
if node.get("model") == "account.chart.template":
data = {}
for field in node.findall("field"):
if field.get("name") == "name":
data["name"] = field.text
if field.get("name") == "account_root_id":
data["account_root_id"] = field.get("ref")
data["id"] = country_dir
charts.setdefault(node.get("id"), {}).update(data)
def make_maps_for_csv(csv_content, account_types, country_dir):
for content in csv_content.get("account.account.template", []):
for row in content[1:]:
data = dict(zip(content[0], row))
account = {
"name": data.get("name"),
"parent_id": data.get("parent_id:id") or data.get("parent_id/id"),
"children": [],
}
user_type = data.get("user_type/id") or data.get("user_type:id")
if account_types.get(user_type, {}).get("account_type"):
account["account_type"] = account_types[user_type]["account_type"]
if account["account_type"] not in all_account_types:
all_account_types.append(account["account_type"])
accounts[data.get("id")] = account
if not account.get("parent_id") and data.get("chart_template_id:id"):
chart_id = data.get("chart_template_id:id")
charts.setdefault(chart_id, {}).update({"account_root_id": data.get("id")})
for content in csv_content.get("account.chart.template", []):
for row in content[1:]:
if row:
data = dict(zip(content[0], row))
charts.setdefault(data.get("id"), {}).update(
{
"account_root_id": data.get("account_root_id:id") or data.get("account_root_id/id"),
"name": data.get("name"),
"id": country_dir,
}
)
def make_account_trees():
"""build tree hierarchy"""
for id in accounts.keys():
account = accounts[id]
if account.get("parent_id"):
if accounts.get(account["parent_id"]):
# accounts[account["parent_id"]]["children"].append(account)
accounts[account["parent_id"]][account["name"]] = account
del account["parent_id"]
del account["name"]
# remove empty children
for id in accounts.keys():
if "children" in accounts[id] and not accounts[id].get("children"):
del accounts[id]["children"]
def make_charts():
"""write chart files in app/setup/doctype/company/charts"""
for chart_id in charts:
src = charts[chart_id]
if not src.get("name") or not src.get("account_root_id"):
continue
if not src["account_root_id"] in accounts:
continue
filename = src["id"][5:] + "_" + chart_id
print("building " + filename)
chart = {}
chart["name"] = src["name"]
chart["country_code"] = src["id"][5:]
chart["tree"] = accounts[src["account_root_id"]]
for key, val in chart["tree"].items():
if key in ["name", "parent_id"]:
chart["tree"].pop(key)
if type(val) == dict:
val["root_type"] = ""
if chart:
fpath = os.path.join(
"erpnext", "erpnext", "accounts", "doctype", "account", "chart_of_accounts", filename + ".json"
)
with open(fpath, "r") as chartfile:
old_content = chartfile.read()
if not old_content or (
json.loads(old_content).get("is_active", "No") == "No"
and json.loads(old_content).get("disabled", "No") == "No"
):
with open(fpath, "w") as chartfile:
chartfile.write(json.dumps(chart, indent=4, sort_keys=True))
all_roots.setdefault(filename, chart["tree"].keys())
def create_all_roots_file():
with open("all_roots.txt", "w") as f:
for filename, roots in sorted(all_roots.items()):
f.write(filename)
f.write("\n----------------------\n")
for r in sorted(roots):
f.write(r.encode("utf-8"))
f.write("\n")
f.write("\n\n\n")
if __name__ == "__main__":
go()

View File

@@ -11,6 +11,29 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
class AccountClosingBalance(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link | None
account_currency: DF.Link | None
closing_date: DF.Date | None
company: DF.Link | None
cost_center: DF.Link | None
credit: DF.Currency
credit_in_account_currency: DF.Currency
debit: DF.Currency
debit_in_account_currency: DF.Currency
finance_book: DF.Link | None
is_period_closing_voucher_entry: DF.Check
period_closing_voucher: DF.Link | None
project: DF.Link | None
# end: auto-generated types
pass
@@ -37,6 +60,7 @@ def make_closing_entries(closing_entries, voucher_name, company, closing_date):
}
)
cle.flags.ignore_permissions = True
cle.flags.ignore_links = True
cle.submit()

View File

@@ -13,6 +13,25 @@ from frappe.utils import cstr
class AccountingDimension(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.accounting_dimension_detail.accounting_dimension_detail import (
AccountingDimensionDetail,
)
dimension_defaults: DF.Table[AccountingDimensionDetail]
disabled: DF.Check
document_type: DF.Link
fieldname: DF.Data | None
label: DF.Data | None
# end: auto-generated types
def before_insert(self):
self.set_fieldname_and_label()
@@ -302,3 +321,30 @@ def get_dimensions(with_cost_center_and_project=False):
default_dimensions_map[dimension.company][dimension.fieldname] = dimension.default_dimension
return dimension_filters, default_dimensions_map
def create_accounting_dimensions_for_doctype(doctype):
accounting_dimensions = frappe.db.get_all(
"Accounting Dimension", fields=["fieldname", "label", "document_type", "disabled"]
)
if not accounting_dimensions:
return
for d in accounting_dimensions:
field = frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": d.fieldname})
if field:
continue
df = {
"fieldname": d.fieldname,
"label": d.label,
"fieldtype": "Link",
"options": d.document_type,
"insert_after": "accounting_dimensions_section",
}
create_custom_field(doctype, df, ignore_validate=True)
frappe.clear_cache(doctype=doctype)

View File

@@ -7,4 +7,24 @@ from frappe.model.document import Document
class AccountingDimensionDetail(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
automatically_post_balancing_accounting_entry: DF.Check
company: DF.Link | None
default_dimension: DF.DynamicLink | None
mandatory_for_bs: DF.Check
mandatory_for_pl: DF.Check
offsetting_account: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
reference_document: DF.Link | None
# end: auto-generated types
pass

View File

@@ -8,6 +8,28 @@ from frappe.model.document import Document
class AccountingDimensionFilter(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.allowed_dimension.allowed_dimension import AllowedDimension
from erpnext.accounts.doctype.applicable_on_account.applicable_on_account import (
ApplicableOnAccount,
)
accounting_dimension: DF.Literal
accounts: DF.Table[ApplicableOnAccount]
allow_or_restrict: DF.Literal["Allow", "Restrict"]
apply_restriction_on_values: DF.Check
company: DF.Link
dimensions: DF.Table[AllowedDimension]
disabled: DF.Check
# end: auto-generated types
def before_save(self):
# If restriction is not applied on values, then remove all the dimensions and set allow_or_restrict to Restrict
if not self.apply_restriction_on_values:

View File

@@ -16,6 +16,23 @@ class ClosedAccountingPeriod(frappe.ValidationError):
class AccountingPeriod(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.closed_document.closed_document import ClosedDocument
closed_documents: DF.Table[ClosedDocument]
company: DF.Link
end_date: DF.Date
period_name: DF.Data
start_date: DF.Date
# end: auto-generated types
def validate(self):
self.validate_overlap()

View File

@@ -32,6 +32,7 @@
"column_break_19",
"add_taxes_from_item_tax_template",
"book_tax_discount_loss",
"round_row_wise_tax",
"print_settings",
"show_inclusive_tax_in_print",
"show_taxes_as_table_in_print",
@@ -65,7 +66,12 @@
"show_balance_in_coa",
"banking_tab",
"enable_party_matching",
"enable_fuzzy_matching"
"enable_fuzzy_matching",
"reports_tab",
"remarks_section",
"general_ledger_remarks_length",
"column_break_lvjk",
"receivable_payable_remarks_length"
],
"fields": [
{
@@ -414,6 +420,41 @@
"fieldname": "ignore_account_closing_balance",
"fieldtype": "Check",
"label": "Ignore Account Closing Balance"
},
{
"default": "0",
"description": "Tax Amount will be rounded on a row(items) level",
"fieldname": "round_row_wise_tax",
"fieldtype": "Check",
"label": "Round Tax Amount Row-wise"
},
{
"fieldname": "reports_tab",
"fieldtype": "Tab Break",
"label": "Reports"
},
{
"default": "0",
"description": "Truncates 'Remarks' column to set character length",
"fieldname": "general_ledger_remarks_length",
"fieldtype": "Int",
"label": "General Ledger"
},
{
"default": "0",
"description": "Truncates 'Remarks' column to set character length",
"fieldname": "receivable_payable_remarks_length",
"fieldtype": "Int",
"label": "Accounts Receivable/Payable"
},
{
"fieldname": "column_break_lvjk",
"fieldtype": "Column Break"
},
{
"fieldname": "remarks_section",
"fieldtype": "Section Break",
"label": "Remarks Column Length"
}
],
"icon": "icon-cog",
@@ -421,7 +462,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-07-27 15:05:34.000264",
"modified": "2023-11-20 09:37:47.650347",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",

View File

@@ -14,6 +14,52 @@ from erpnext.stock.utils import check_pending_reposting
class AccountsSettings(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
acc_frozen_upto: DF.Date | None
add_taxes_from_item_tax_template: DF.Check
allow_multi_currency_invoices_against_single_party_account: DF.Check
allow_stale: DF.Check
auto_reconcile_payments: DF.Check
automatically_fetch_payment_terms: DF.Check
automatically_process_deferred_accounting_entry: DF.Check
book_asset_depreciation_entry_automatically: DF.Check
book_deferred_entries_based_on: DF.Literal["Days", "Months"]
book_deferred_entries_via_journal_entry: DF.Check
book_tax_discount_loss: DF.Check
check_supplier_invoice_uniqueness: DF.Check
credit_controller: DF.Link | None
delete_linked_ledger_entries: DF.Check
determine_address_tax_category_from: DF.Literal["Billing Address", "Shipping Address"]
enable_common_party_accounting: DF.Check
enable_fuzzy_matching: DF.Check
enable_party_matching: DF.Check
frozen_accounts_modifier: DF.Link | None
general_ledger_remarks_length: DF.Int
ignore_account_closing_balance: DF.Check
make_payment_via_journal_entry: DF.Check
merge_similar_account_heads: DF.Check
over_billing_allowance: DF.Currency
post_change_gl_entries: DF.Check
receivable_payable_remarks_length: DF.Int
role_allowed_to_over_bill: DF.Link | None
round_row_wise_tax: DF.Check
show_balance_in_coa: DF.Check
show_inclusive_tax_in_print: DF.Check
show_payment_schedule_in_print: DF.Check
show_taxes_as_table_in_print: DF.Check
stale_days: DF.Int
submit_journal_entries: DF.Check
unlink_advance_payment_on_cancelation_of_order: DF.Check
unlink_payment_on_cancellation_of_invoice: DF.Check
# end: auto-generated types
def validate(self):
old_doc = self.get_doc_before_save()
clear_cache = False

View File

@@ -6,4 +6,22 @@ from frappe.model.document import Document
class AdvanceTax(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_head: DF.Link | None
allocated_amount: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
reference_detail: DF.Data | None
reference_name: DF.DynamicLink | None
reference_type: DF.Link | None
# end: auto-generated types
pass

View File

@@ -7,4 +7,33 @@ from frappe.model.document import Document
class AdvanceTaxesandCharges(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_head: DF.Link
add_deduct_tax: DF.Literal["Add", "Deduct"]
allocated_amount: DF.Currency
base_tax_amount: DF.Currency
base_total: DF.Currency
charge_type: DF.Literal[
"", "Actual", "On Paid Amount", "On Previous Row Amount", "On Previous Row Total"
]
cost_center: DF.Link | None
currency: DF.Link | None
description: DF.SmallText
included_in_paid_amount: DF.Check
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
rate: DF.Float
row_id: DF.Data | None
tax_amount: DF.Currency
total: DF.Currency
# end: auto-generated types
pass

View File

@@ -7,4 +7,19 @@ from frappe.model.document import Document
class AllowedDimension(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
accounting_dimension: DF.Link | None
dimension_value: DF.DynamicLink | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class AllowedToTransactWith(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -7,4 +7,19 @@ from frappe.model.document import Document
class ApplicableOnAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
applicable_on_account: DF.Link
is_mandatory: DF.Check
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -10,6 +10,25 @@ from frappe.model.document import Document
class Bank(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.bank_transaction_mapping.bank_transaction_mapping import (
BankTransactionMapping,
)
bank_name: DF.Data
bank_transaction_mapping: DF.Table[BankTransactionMapping]
plaid_access_token: DF.Data | None
swift_number: DF.Data | None
website: DF.Data | None
# end: auto-generated types
def onload(self):
"""Load address and contacts in `__onload`"""
load_address_and_contact(self)

View File

@@ -13,6 +13,7 @@
"account_type",
"account_subtype",
"column_break_7",
"disabled",
"is_default",
"is_company_account",
"company",
@@ -199,10 +200,16 @@
"fieldtype": "Data",
"in_global_search": 1,
"label": "Branch Code"
},
{
"default": "0",
"fieldname": "disabled",
"fieldtype": "Check",
"label": "Disabled"
}
],
"links": [],
"modified": "2022-05-04 15:49:42.620630",
"modified": "2023-09-22 21:31:34.763977",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account",

View File

@@ -12,6 +12,33 @@ from frappe.model.document import Document
class BankAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link | None
account_name: DF.Data
account_subtype: DF.Link | None
account_type: DF.Link | None
bank: DF.Link
bank_account_no: DF.Data | None
branch_code: DF.Data | None
company: DF.Link | None
disabled: DF.Check
iban: DF.Data | None
integration_id: DF.Data | None
is_company_account: DF.Check
is_default: DF.Check
last_integration_date: DF.Date | None
mask: DF.Data | None
party: DF.DynamicLink | None
party_type: DF.Link | None
# end: auto-generated types
def onload(self):
"""Load address and contacts in `__onload`"""
load_address_and_contact(self)

View File

@@ -6,4 +6,15 @@ from frappe.model.document import Document
class BankAccountSubtype(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_subtype: DF.Data | None
# end: auto-generated types
pass

View File

@@ -7,4 +7,15 @@ from frappe.model.document import Document
class BankAccountType(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_type: DF.Data | None
# end: auto-generated types
pass

View File

@@ -13,6 +13,28 @@ form_grid_templates = {"journal_entries": "templates/form_grid/bank_reconciliati
class BankClearance(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.bank_clearance_detail.bank_clearance_detail import (
BankClearanceDetail,
)
account: DF.Link
account_currency: DF.Link | None
bank_account: DF.Link | None
from_date: DF.Date
include_pos_transactions: DF.Check
include_reconciled_entries: DF.Check
payment_entries: DF.Table[BankClearanceDetail]
to_date: DF.Date
# end: auto-generated types
@frappe.whitelist()
def get_payment_entries(self):
if not (self.from_date and self.to_date):

View File

@@ -35,13 +35,14 @@ class TestBankClearance(unittest.TestCase):
from lending.loan_management.doctype.loan.test_loan import (
create_loan,
create_loan_accounts,
create_loan_type,
create_loan_product,
create_repayment_entry,
make_loan_disbursement_entry,
)
def create_loan_masters():
create_loan_type(
create_loan_product(
"Clearance Loan",
"Clearance Loan",
2000000,
13.5,

View File

@@ -6,4 +6,25 @@ from frappe.model.document import Document
class BankClearanceDetail(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
against_account: DF.Data | None
amount: DF.Data | None
cheque_date: DF.Date | None
cheque_number: DF.Data | None
clearance_date: DF.Date | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
payment_document: DF.Link | None
payment_entry: DF.DynamicLink | None
posting_date: DF.Date | None
# end: auto-generated types
pass

View File

@@ -8,6 +8,40 @@ from frappe.model.document import Document
class BankGuarantee(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link | None
amended_from: DF.Link | None
amount: DF.Currency
bank: DF.Link | None
bank_account: DF.Link | None
bank_account_no: DF.Data | None
bank_guarantee_number: DF.Data | None
bg_type: DF.Literal["", "Receiving", "Providing"]
branch_code: DF.Data | None
charges: DF.Currency
customer: DF.Link | None
end_date: DF.Date | None
fixed_deposit_number: DF.Data | None
iban: DF.Data | None
margin_money: DF.Currency
more_information: DF.TextEditor | None
name_of_beneficiary: DF.Data | None
project: DF.Link | None
reference_docname: DF.DynamicLink | None
reference_doctype: DF.Link | None
start_date: DF.Date
supplier: DF.Link | None
swift_number: DF.Data | None
validity: DF.Int
# end: auto-generated types
def validate(self):
if not (self.customer or self.supplier):
frappe.throw(_("Select the customer or supplier."))

View File

@@ -21,6 +21,26 @@ from erpnext.accounts.utils import get_account_currency, get_balance_on
class BankReconciliationTool(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_currency: DF.Link | None
account_opening_balance: DF.Currency
bank_account: DF.Link | None
bank_statement_closing_balance: DF.Currency
bank_statement_from_date: DF.Date | None
bank_statement_to_date: DF.Date | None
company: DF.Link | None
filter_by_reference_date: DF.Check
from_reference_date: DF.Date | None
to_reference_date: DF.Date | None
# end: auto-generated types
pass
@@ -355,7 +375,9 @@ def reconcile_vouchers(bank_transaction_name, vouchers):
vouchers = json.loads(vouchers)
transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
transaction.add_payment_entries(vouchers)
return frappe.get_doc("Bank Transaction", bank_transaction_name)
transaction.save()
return transaction
@frappe.whitelist()

View File

@@ -352,10 +352,11 @@ frappe.ui.form.on("Bank Statement Import", {
export_errored_rows(frm) {
open_url_post(
"/api/method/frappe.core.doctype.data_import.data_import.download_errored_template",
"/api/method/erpnext.accounts.doctype.bank_statement_import.bank_statement_import.download_errored_template",
{
data_import_name: frm.doc.name,
}
},
true
);
},

View File

@@ -20,6 +20,30 @@ INVALID_VALUES = ("", None)
class BankStatementImport(DataImport):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
bank: DF.Link | None
bank_account: DF.Link
company: DF.Link
google_sheets_url: DF.Data | None
import_file: DF.Attach | None
import_type: DF.Literal["", "Insert New Records", "Update Existing Records"]
mute_emails: DF.Check
reference_doctype: DF.Link
show_failed_logs: DF.Check
statement_import_log: DF.Code | None
status: DF.Literal["Pending", "Success", "Partial Success", "Error"]
submit_after_import: DF.Check
template_options: DF.Code | None
template_warnings: DF.Code | None
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(BankStatementImport, self).__init__(*args, **kwargs)

View File

@@ -13,6 +13,7 @@
"status",
"bank_account",
"company",
"amended_from",
"section_break_4",
"deposit",
"withdrawal",
@@ -25,10 +26,10 @@
"transaction_id",
"transaction_type",
"section_break_14",
"column_break_oufv",
"payment_entries",
"section_break_18",
"allocated_amount",
"amended_from",
"column_break_17",
"unallocated_amount",
"party_section",
@@ -138,10 +139,12 @@
"fieldtype": "Section Break"
},
{
"allow_on_submit": 1,
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"label": "Allocated Amount",
"options": "currency"
"options": "currency",
"read_only": 1
},
{
"fieldname": "amended_from",
@@ -157,10 +160,12 @@
"fieldtype": "Column Break"
},
{
"allow_on_submit": 1,
"fieldname": "unallocated_amount",
"fieldtype": "Currency",
"label": "Unallocated Amount",
"options": "currency"
"options": "currency",
"read_only": 1
},
{
"fieldname": "party_section",
@@ -225,11 +230,15 @@
"fieldname": "bank_party_account_number",
"fieldtype": "Data",
"label": "Party Account No. (Bank Statement)"
},
{
"fieldname": "column_break_oufv",
"fieldtype": "Column Break"
}
],
"is_submittable": 1,
"links": [],
"modified": "2023-06-06 13:58:12.821411",
"modified": "2023-11-18 18:32:47.203694",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Transaction",

View File

@@ -2,78 +2,108 @@
# For license information, please see license.txt
import frappe
from frappe import _
from frappe.utils import flt
from erpnext.controllers.status_updater import StatusUpdater
class BankTransaction(StatusUpdater):
def after_insert(self):
self.unallocated_amount = abs(flt(self.withdrawal) - flt(self.deposit))
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
def on_submit(self):
self.clear_linked_payment_entries()
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.bank_transaction_payments.bank_transaction_payments import (
BankTransactionPayments,
)
allocated_amount: DF.Currency
amended_from: DF.Link | None
bank_account: DF.Link | None
bank_party_account_number: DF.Data | None
bank_party_iban: DF.Data | None
bank_party_name: DF.Data | None
company: DF.Link | None
currency: DF.Link | None
date: DF.Date | None
deposit: DF.Currency
description: DF.SmallText | None
naming_series: DF.Literal["ACC-BTN-.YYYY.-"]
party: DF.DynamicLink | None
party_type: DF.Link | None
payment_entries: DF.Table[BankTransactionPayments]
reference_number: DF.Data | None
status: DF.Literal["", "Pending", "Settled", "Unreconciled", "Reconciled", "Cancelled"]
transaction_id: DF.Data | None
transaction_type: DF.Data | None
unallocated_amount: DF.Currency
withdrawal: DF.Currency
# end: auto-generated types
def before_validate(self):
self.update_allocated_amount()
def validate(self):
self.validate_duplicate_references()
def validate_duplicate_references(self):
"""Make sure the same voucher is not allocated twice within the same Bank Transaction"""
if not self.payment_entries:
return
pe = []
for row in self.payment_entries:
reference = (row.payment_document, row.payment_entry)
if reference in pe:
frappe.throw(
_("{0} {1} is allocated twice in this Bank Transaction").format(
row.payment_document, row.payment_entry
)
)
pe.append(reference)
def update_allocated_amount(self):
self.allocated_amount = (
sum(p.allocated_amount for p in self.payment_entries) if self.payment_entries else 0.0
)
self.unallocated_amount = abs(flt(self.withdrawal) - flt(self.deposit)) - self.allocated_amount
def before_submit(self):
self.allocate_payment_entries()
self.set_status()
if frappe.db.get_single_value("Accounts Settings", "enable_party_matching"):
self.auto_set_party()
_saving_flag = False
# nosemgrep: frappe-semgrep-rules.rules.frappe-modifying-but-not-comitting
def on_update_after_submit(self):
"Run on save(). Avoid recursion caused by multiple saves"
if not self._saving_flag:
self._saving_flag = True
self.clear_linked_payment_entries()
self.update_allocations()
self._saving_flag = False
def before_update_after_submit(self):
self.validate_duplicate_references()
self.allocate_payment_entries()
self.update_allocated_amount()
def on_cancel(self):
self.clear_linked_payment_entries(for_cancel=True)
self.set_status(update=True)
for payment_entry in self.payment_entries:
self.clear_linked_payment_entry(payment_entry, for_cancel=True)
def update_allocations(self):
"The doctype does not allow modifications after submission, so write to the db direct"
if self.payment_entries:
allocated_amount = sum(p.allocated_amount for p in self.payment_entries)
else:
allocated_amount = 0.0
amount = abs(flt(self.withdrawal) - flt(self.deposit))
self.db_set("allocated_amount", flt(allocated_amount))
self.db_set("unallocated_amount", amount - flt(allocated_amount))
self.reload()
self.set_status(update=True)
def add_payment_entries(self, vouchers):
"Add the vouchers with zero allocation. Save() will perform the allocations and clearance"
if 0.0 >= self.unallocated_amount:
frappe.throw(frappe._("Bank Transaction {0} is already fully reconciled").format(self.name))
frappe.throw(_("Bank Transaction {0} is already fully reconciled").format(self.name))
added = False
for voucher in vouchers:
# Can't add same voucher twice
found = False
for pe in self.payment_entries:
if (
pe.payment_document == voucher["payment_doctype"]
and pe.payment_entry == voucher["payment_name"]
):
found = True
if not found:
pe = {
self.append(
"payment_entries",
{
"payment_document": voucher["payment_doctype"],
"payment_entry": voucher["payment_name"],
"allocated_amount": 0.0, # Temporary
}
child = self.append("payment_entries", pe)
added = True
# runs on_update_after_submit
if added:
self.save()
},
)
def allocate_payment_entries(self):
"""Refactored from bank reconciliation tool.
@@ -89,8 +119,8 @@ class BankTransaction(StatusUpdater):
- 0 > a: Error: already over-allocated
- clear means: set the latest transaction date as clearance date
"""
gl_bank_account = frappe.db.get_value("Bank Account", self.bank_account, "account")
remaining_amount = self.unallocated_amount
to_remove = []
for payment_entry in self.payment_entries:
if payment_entry.allocated_amount == 0.0:
unallocated_amount, should_clear, latest_transaction = get_clearance_details(
@@ -100,49 +130,39 @@ class BankTransaction(StatusUpdater):
if 0.0 == unallocated_amount:
if should_clear:
latest_transaction.clear_linked_payment_entry(payment_entry)
self.db_delete_payment_entry(payment_entry)
to_remove.append(payment_entry)
elif remaining_amount <= 0.0:
self.db_delete_payment_entry(payment_entry)
to_remove.append(payment_entry)
elif 0.0 < unallocated_amount and unallocated_amount <= remaining_amount:
payment_entry.db_set("allocated_amount", unallocated_amount)
elif 0.0 < unallocated_amount <= remaining_amount:
payment_entry.allocated_amount = unallocated_amount
remaining_amount -= unallocated_amount
if should_clear:
latest_transaction.clear_linked_payment_entry(payment_entry)
elif 0.0 < unallocated_amount and unallocated_amount > remaining_amount:
payment_entry.db_set("allocated_amount", remaining_amount)
elif 0.0 < unallocated_amount:
payment_entry.allocated_amount = remaining_amount
remaining_amount = 0.0
elif 0.0 > unallocated_amount:
self.db_delete_payment_entry(payment_entry)
frappe.throw(frappe._("Voucher {0} is over-allocated by {1}").format(unallocated_amount))
frappe.throw(_("Voucher {0} is over-allocated by {1}").format(unallocated_amount))
self.reload()
def db_delete_payment_entry(self, payment_entry):
frappe.db.delete("Bank Transaction Payments", {"name": payment_entry.name})
for payment_entry in to_remove:
self.remove(to_remove)
@frappe.whitelist()
def remove_payment_entries(self):
for payment_entry in self.payment_entries:
self.remove_payment_entry(payment_entry)
# runs on_update_after_submit
self.save()
self.save() # runs before_update_after_submit
def remove_payment_entry(self, payment_entry):
"Clear payment entry and clearance"
self.clear_linked_payment_entry(payment_entry, for_cancel=True)
self.remove(payment_entry)
def clear_linked_payment_entries(self, for_cancel=False):
if for_cancel:
for payment_entry in self.payment_entries:
self.clear_linked_payment_entry(payment_entry, for_cancel)
else:
self.allocate_payment_entries()
def clear_linked_payment_entry(self, payment_entry, for_cancel=False):
clearance_date = None if for_cancel else self.date
set_voucher_clearance(
@@ -163,11 +183,10 @@ class BankTransaction(StatusUpdater):
deposit=self.deposit,
).match()
if result:
party_type, party = result
frappe.db.set_value(
"Bank Transaction", self.name, field={"party_type": party_type, "party": party}
)
if not result:
return
self.party_type, self.party = result
@frappe.whitelist()
@@ -199,9 +218,7 @@ def get_clearance_details(transaction, payment_entry):
if gle["gl_account"] == gl_bank_account:
if gle["amount"] <= 0.0:
frappe.throw(
frappe._("Voucher {0} value is broken: {1}").format(
payment_entry.payment_entry, gle["amount"]
)
_("Voucher {0} value is broken: {1}").format(payment_entry.payment_entry, gle["amount"])
)
unmatched_gles -= 1
@@ -222,7 +239,7 @@ def get_clearance_details(transaction, payment_entry):
def get_related_bank_gl_entries(doctype, docname):
# nosemgrep: frappe-semgrep-rules.rules.frappe-using-db-sql
result = frappe.db.sql(
return frappe.db.sql(
"""
SELECT
ABS(gle.credit_in_account_currency - gle.debit_in_account_currency) AS amount,
@@ -240,7 +257,6 @@ def get_related_bank_gl_entries(doctype, docname):
dict(doctype=doctype, docname=docname),
as_dict=True,
)
return result
def get_total_allocated_amount(doctype, docname):
@@ -366,6 +382,7 @@ def set_voucher_clearance(doctype, docname, clearance_date, self):
if clearance_date:
vouchers = [{"payment_doctype": "Bank Transaction", "payment_name": self.name}]
bt.add_payment_entries(vouchers)
bt.save()
else:
for pe in bt.payment_entries:
if pe.payment_document == self.doctype and pe.payment_entry == self.name:

View File

@@ -410,7 +410,7 @@ def add_vouchers():
def create_loan_and_repayment():
from lending.loan_management.doctype.loan.test_loan import (
create_loan,
create_loan_type,
create_loan_product,
create_repayment_entry,
make_loan_disbursement_entry,
)
@@ -420,7 +420,8 @@ def create_loan_and_repayment():
from erpnext.setup.doctype.employee.test_employee import make_employee
create_loan_type(
create_loan_product(
"Personal Loan",
"Personal Loan",
500000,
8.4,
@@ -441,7 +442,7 @@ def create_loan_and_repayment():
"applicant_type": "Employee",
"company": "_Test Company",
"applicant": applicant,
"loan_type": "Personal Loan",
"loan_product": "Personal Loan",
"loan_amount": 5000,
"repayment_method": "Repay Fixed Amount per Period",
"monthly_repayment_amount": 500,

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class BankTransactionMapping(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
bank_transaction_field: DF.Literal
file_field: DF.Data
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,21 @@ from frappe.model.document import Document
class BankTransactionPayments(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
allocated_amount: DF.Currency
clearance_date: DF.Date | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
payment_document: DF.Link
payment_entry: DF.DynamicLink
# end: auto-generated types
pass

View File

@@ -22,6 +22,36 @@ class DuplicateBudgetError(frappe.ValidationError):
class Budget(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.budget_account.budget_account import BudgetAccount
accounts: DF.Table[BudgetAccount]
action_if_accumulated_monthly_budget_exceeded: DF.Literal["", "Stop", "Warn", "Ignore"]
action_if_accumulated_monthly_budget_exceeded_on_mr: DF.Literal["", "Stop", "Warn", "Ignore"]
action_if_accumulated_monthly_budget_exceeded_on_po: DF.Literal["", "Stop", "Warn", "Ignore"]
action_if_annual_budget_exceeded: DF.Literal["", "Stop", "Warn", "Ignore"]
action_if_annual_budget_exceeded_on_mr: DF.Literal["", "Stop", "Warn", "Ignore"]
action_if_annual_budget_exceeded_on_po: DF.Literal["", "Stop", "Warn", "Ignore"]
amended_from: DF.Link | None
applicable_on_booking_actual_expenses: DF.Check
applicable_on_material_request: DF.Check
applicable_on_purchase_order: DF.Check
budget_against: DF.Literal["", "Cost Center", "Project"]
company: DF.Link
cost_center: DF.Link | None
fiscal_year: DF.Link
monthly_distribution: DF.Link | None
naming_series: DF.Data | None
project: DF.Link | None
# end: auto-generated types
def validate(self):
if not self.get(frappe.scrub(self.budget_against)):
frappe.throw(_("{0} is mandatory").format(self.budget_against))

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class BudgetAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link
budget_amount: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class CampaignItem(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
campaign: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -9,6 +9,32 @@ from frappe.utils import flt
class CashierClosing(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.cashier_closing_payments.cashier_closing_payments import (
CashierClosingPayments,
)
amended_from: DF.Link | None
custody: DF.Float
date: DF.Date | None
expense: DF.Float
from_time: DF.Time
naming_series: DF.Literal["POS-CLO-"]
net_amount: DF.Float
outstanding_amount: DF.Float
payments: DF.Table[CashierClosingPayments]
returns: DF.Float
time: DF.Time
user: DF.Link
# end: auto-generated types
def validate(self):
self.validate_time()

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class CashierClosingPayments(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
amount: DF.Float
mode_of_payment: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -53,10 +53,18 @@ frappe.ui.form.on('Chart of Accounts Importer', {
of Accounts. Please enter the account names and add more rows as per your requirement.`);
}
}
}
},
{
label : "Company",
fieldname: "company",
fieldtype: "Link",
reqd: 1,
hidden: 1,
default: frm.doc.company,
},
],
primary_action: function() {
var data = d.get_values();
let data = d.get_values();
if (!data.template_type) {
frappe.throw(__('Please select <b>Template Type</b> to download template'));
@@ -66,7 +74,8 @@ frappe.ui.form.on('Chart of Accounts Importer', {
'/api/method/erpnext.accounts.doctype.chart_of_accounts_importer.chart_of_accounts_importer.download_template',
{
file_type: data.file_type,
template_type: data.template_type
template_type: data.template_type,
company: data.company
}
);

View File

@@ -8,6 +8,7 @@ from functools import reduce
import frappe
from frappe import _
from frappe.desk.form.linked_with import get_linked_fields
from frappe.model.document import Document
from frappe.utils import cint, cstr
from frappe.utils.csvutils import UnicodeWriter
@@ -23,6 +24,18 @@ from erpnext.accounts.doctype.account.chart_of_accounts.chart_of_accounts import
class ChartofAccountsImporter(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link | None
import_file: DF.Attach | None
# end: auto-generated types
def validate(self):
if self.import_file:
get_coa(
@@ -112,7 +125,7 @@ def generate_data_from_csv(file_doc, as_dict=False):
if as_dict:
data.append({frappe.scrub(header): row[index] for index, header in enumerate(headers)})
else:
if not row[1]:
if not row[1] and len(row) > 1:
row[1] = row[0]
row[3] = row[2]
data.append(row)
@@ -294,10 +307,8 @@ def build_response_as_excel(writer):
@frappe.whitelist()
def download_template(file_type, template_type):
data = frappe._dict(frappe.local.form_dict)
writer = get_template(template_type)
def download_template(file_type, template_type, company):
writer = get_template(template_type, company)
if file_type == "CSV":
# download csv file
@@ -308,8 +319,7 @@ def download_template(file_type, template_type):
build_response_as_excel(writer)
def get_template(template_type):
def get_template(template_type, company):
fields = [
"Account Name",
"Parent Account",
@@ -335,34 +345,17 @@ def get_template(template_type):
["", "", "", "", 0, account_type.get("account_type"), account_type.get("root_type")]
)
else:
writer = get_sample_template(writer)
writer = get_sample_template(writer, company)
return writer
def get_sample_template(writer):
template = [
["Application Of Funds(Assets)", "", "", "", 1, "", "Asset"],
["Sources Of Funds(Liabilities)", "", "", "", 1, "", "Liability"],
["Equity", "", "", "", 1, "", "Equity"],
["Expenses", "", "", "", 1, "", "Expense"],
["Income", "", "", "", 1, "", "Income"],
["Bank Accounts", "Application Of Funds(Assets)", "", "", 1, "Bank", "Asset"],
["Cash In Hand", "Application Of Funds(Assets)", "", "", 1, "Cash", "Asset"],
["Stock Assets", "Application Of Funds(Assets)", "", "", 1, "Stock", "Asset"],
["Cost Of Goods Sold", "Expenses", "", "", 0, "Cost of Goods Sold", "Expense"],
["Asset Depreciation", "Expenses", "", "", 0, "Depreciation", "Expense"],
["Fixed Assets", "Application Of Funds(Assets)", "", "", 0, "Fixed Asset", "Asset"],
["Accounts Payable", "Sources Of Funds(Liabilities)", "", "", 0, "Payable", "Liability"],
["Accounts Receivable", "Application Of Funds(Assets)", "", "", 1, "Receivable", "Asset"],
["Stock Expenses", "Expenses", "", "", 0, "Stock Adjustment", "Expense"],
["Sample Bank", "Bank Accounts", "", "", 0, "Bank", "Asset"],
["Cash", "Cash In Hand", "", "", 0, "Cash", "Asset"],
["Stores", "Stock Assets", "", "", 0, "Stock", "Asset"],
]
for row in template:
writer.writerow(row)
def get_sample_template(writer, company):
currency = frappe.db.get_value("Company", company, "default_currency")
with open(os.path.join(os.path.dirname(__file__), "coa_sample_template.csv"), "r") as f:
for row in f:
row = row.strip().split(",") + [currency]
writer.writerow(row)
return writer
@@ -453,14 +446,11 @@ def get_mandatory_account_types():
def unset_existing_data(company):
linked = frappe.db.sql(
'''select fieldname from tabDocField
where fieldtype="Link" and options="Account" and parent="Company"''',
as_dict=True,
)
# remove accounts data from company
update_values = {d.fieldname: "" for d in linked}
fieldnames = get_linked_fields("Account").get("Company", {}).get("fieldname", [])
linked = [{"fieldname": name} for name in fieldnames]
update_values = {d.get("fieldname"): "" for d in linked}
frappe.db.set_value("Company", company, update_values, update_values)
# remove accounts data from various doctypes

View File

@@ -0,0 +1,17 @@
Application Of Funds(Assets),,,,1,,Asset
Sources Of Funds(Liabilities),,,,1,,Liability
Equity,,,,1,,Equity
Expenses,,,,1,Expense Account,Expense
Income,,,,1,Income Account,Income
Bank Accounts,Application Of Funds(Assets),,,1,Bank,Asset
Cash In Hand,Application Of Funds(Assets),,,1,Cash,Asset
Stock Assets,Application Of Funds(Assets),,,1,Stock,Asset
Cost Of Goods Sold,Expenses,,,0,Cost of Goods Sold,Expense
Asset Depreciation,Expenses,,,0,Depreciation,Expense
Fixed Assets,Application Of Funds(Assets),,,0,Fixed Asset,Asset
Accounts Payable,Sources Of Funds(Liabilities),,,0,Payable,Liability
Accounts Receivable,Application Of Funds(Assets),,,1,Receivable,Asset
Stock Expenses,Expenses,,,0,Stock Adjustment,Expense
Sample Bank,Bank Accounts,,,0,Bank,Asset
Cash,Cash In Hand,,,0,Cash,Asset
Stores,Stock Assets,,,0,Stock,Asset
1 Application Of Funds(Assets) 1 Asset
2 Sources Of Funds(Liabilities) 1 Liability
3 Equity 1 Equity
4 Expenses 1 Expense Account Expense
5 Income 1 Income Account Income
6 Bank Accounts Application Of Funds(Assets) 1 Bank Asset
7 Cash In Hand Application Of Funds(Assets) 1 Cash Asset
8 Stock Assets Application Of Funds(Assets) 1 Stock Asset
9 Cost Of Goods Sold Expenses 0 Cost of Goods Sold Expense
10 Asset Depreciation Expenses 0 Depreciation Expense
11 Fixed Assets Application Of Funds(Assets) 0 Fixed Asset Asset
12 Accounts Payable Sources Of Funds(Liabilities) 0 Payable Liability
13 Accounts Receivable Application Of Funds(Assets) 1 Receivable Asset
14 Stock Expenses Expenses 0 Stock Adjustment Expense
15 Sample Bank Bank Accounts 0 Bank Asset
16 Cash Cash In Hand 0 Cash Asset
17 Stores Stock Assets 0 Stock Asset

View File

@@ -8,6 +8,41 @@ from frappe.model.document import Document
class ChequePrintTemplate(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
acc_no_dist_from_left_edge: DF.Float
acc_no_dist_from_top_edge: DF.Float
acc_pay_dist_from_left_edge: DF.Float
acc_pay_dist_from_top_edge: DF.Float
amt_in_figures_from_left_edge: DF.Float
amt_in_figures_from_top_edge: DF.Float
amt_in_word_width: DF.Float
amt_in_words_from_left_edge: DF.Float
amt_in_words_from_top_edge: DF.Float
amt_in_words_line_spacing: DF.Float
bank_name: DF.Data
cheque_height: DF.Float
cheque_size: DF.Literal["", "Regular", "A4"]
cheque_width: DF.Float
date_dist_from_left_edge: DF.Float
date_dist_from_top_edge: DF.Float
has_print_format: DF.Check
is_account_payable: DF.Check
message_to_show: DF.Data | None
payer_name_from_left_edge: DF.Float
payer_name_from_top_edge: DF.Float
scanned_cheque: DF.Attach | None
signatory_from_left_edge: DF.Float
signatory_from_top_edge: DF.Float
starting_position_from_top_edge: DF.Float
# end: auto-generated types
pass

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class ClosedDocument(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
closed: DF.Check
document_type: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -10,6 +10,25 @@ from erpnext.accounts.utils import validate_field_number
class CostCenter(NestedSet):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link
cost_center_name: DF.Data
cost_center_number: DF.Data | None
disabled: DF.Check
is_group: DF.Check
lft: DF.Int
old_parent: DF.Link | None
parent_cost_center: DF.Link
rgt: DF.Int
# end: auto-generated types
nsm_parent_field = "parent_cost_center"
def autoname(self):

View File

@@ -28,6 +28,25 @@ class InvalidDateError(frappe.ValidationError):
class CostCenterAllocation(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.cost_center_allocation_percentage.cost_center_allocation_percentage import (
CostCenterAllocationPercentage,
)
allocation_percentages: DF.Table[CostCenterAllocationPercentage]
amended_from: DF.Link | None
company: DF.Link
main_cost_center: DF.Link
valid_from: DF.Date
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(CostCenterAllocation, self).__init__(*args, **kwargs)
self._skip_from_date_validation = False

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class CostCenterAllocationPercentage(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
cost_center: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
percentage: DF.Percent
# end: auto-generated types
pass

View File

@@ -9,6 +9,27 @@ from frappe.utils import strip
class CouponCode(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
amended_from: DF.Link | None
coupon_code: DF.Data | None
coupon_name: DF.Data
coupon_type: DF.Literal["Promotional", "Gift Card"]
customer: DF.Link | None
description: DF.TextEditor | None
maximum_use: DF.Int
pricing_rule: DF.Link
used: DF.Int
valid_from: DF.Date | None
valid_upto: DF.Date | None
# end: auto-generated types
def autoname(self):
self.coupon_name = strip(self.coupon_name)
self.name = self.coupon_name

View File

@@ -9,6 +9,7 @@
"disabled",
"service_provider",
"api_endpoint",
"access_key",
"url",
"column_break_3",
"help",
@@ -84,12 +85,18 @@
"fieldname": "disabled",
"fieldtype": "Check",
"label": "Disabled"
},
{
"depends_on": "eval:doc.service_provider == 'exchangerate.host';",
"fieldname": "access_key",
"fieldtype": "Data",
"label": "Access Key"
}
],
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-01-09 12:19:03.955906",
"modified": "2023-10-04 15:30:25.333860",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings",

View File

@@ -9,6 +9,30 @@ from frappe.utils import nowdate
class CurrencyExchangeSettings(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.currency_exchange_settings_details.currency_exchange_settings_details import (
CurrencyExchangeSettingsDetails,
)
from erpnext.accounts.doctype.currency_exchange_settings_result.currency_exchange_settings_result import (
CurrencyExchangeSettingsResult,
)
access_key: DF.Data | None
api_endpoint: DF.Data
disabled: DF.Check
req_params: DF.Table[CurrencyExchangeSettingsDetails]
result_key: DF.Table[CurrencyExchangeSettingsResult]
service_provider: DF.Literal["frankfurter.app", "exchangerate.host", "Custom"]
url: DF.Data | None
# end: auto-generated types
def validate(self):
self.set_parameters_and_result()
if frappe.flags.in_test or frappe.flags.in_install or frappe.flags.in_setup_wizard:
@@ -18,11 +42,21 @@ class CurrencyExchangeSettings(Document):
def set_parameters_and_result(self):
if self.service_provider == "exchangerate.host":
if not self.access_key:
frappe.throw(
_("Access Key is required for Service Provider: {0}").format(
frappe.bold(self.service_provider)
)
)
self.set("result_key", [])
self.set("req_params", [])
self.api_endpoint = "https://api.exchangerate.host/convert"
self.append("result_key", {"key": "result"})
self.append("req_params", {"key": "access_key", "value": self.access_key})
self.append("req_params", {"key": "amount", "value": "1"})
self.append("req_params", {"key": "date", "value": "{transaction_date}"})
self.append("req_params", {"key": "from", "value": "{from_currency}"})
self.append("req_params", {"key": "to", "value": "{to_currency}"})

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class CurrencyExchangeSettingsDetails(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
key: DF.Data
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
value: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class CurrencyExchangeSettingsResult(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
key: DF.Data
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class CustomerGroupItem(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
customer_group: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class CustomerItem(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
customer: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -7,4 +7,22 @@ from frappe.model.document import Document
class DiscountedInvoice(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
customer: DF.Link | None
debit_to: DF.Link | None
outstanding_amount: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
posting_date: DF.Date | None
sales_invoice: DF.Link
# end: auto-generated types
pass

View File

@@ -22,6 +22,52 @@ from erpnext.controllers.accounts_controller import AccountsController
class Dunning(AccountsController):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.overdue_payment.overdue_payment import OverduePayment
address_display: DF.SmallText | None
amended_from: DF.Link | None
base_dunning_amount: DF.Currency
body_text: DF.TextEditor | None
closing_text: DF.TextEditor | None
company: DF.Link
company_address: DF.Link | None
company_address_display: DF.SmallText | None
contact_display: DF.SmallText | None
contact_email: DF.Data | None
contact_mobile: DF.SmallText | None
contact_person: DF.Link | None
conversion_rate: DF.Float
cost_center: DF.Link | None
currency: DF.Link | None
customer: DF.Link
customer_address: DF.Link | None
customer_name: DF.Data | None
dunning_amount: DF.Currency
dunning_fee: DF.Currency
dunning_type: DF.Link | None
grand_total: DF.Currency
income_account: DF.Link | None
language: DF.Link | None
letter_head: DF.Link | None
naming_series: DF.Literal["DUNN-.MM.-.YY.-"]
overdue_payments: DF.Table[OverduePayment]
posting_date: DF.Date
posting_time: DF.Time | None
rate_of_interest: DF.Float
spacer: DF.Data | None
status: DF.Literal["Draft", "Resolved", "Unresolved", "Cancelled"]
total_interest: DF.Currency
total_outstanding: DF.Currency
# end: auto-generated types
def validate(self):
self.validate_same_currency()
self.validate_overdue_payments()

View File

@@ -7,4 +7,21 @@ from frappe.model.document import Document
class DunningLetterText(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
body_text: DF.TextEditor | None
closing_text: DF.TextEditor | None
is_default_language: DF.Check
language: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -7,6 +7,26 @@ from frappe.model.document import Document
class DunningType(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.dunning_letter_text.dunning_letter_text import DunningLetterText
company: DF.Link
cost_center: DF.Link | None
dunning_fee: DF.Currency
dunning_letter_text: DF.Table[DunningLetterText]
dunning_type: DF.Data
income_account: DF.Link | None
is_default: DF.Check
rate_of_interest: DF.Float
# end: auto-generated types
def autoname(self):
company_abbr = frappe.get_value("Company", self.company, "abbr")
self.name = f"{self.dunning_type} - {company_abbr}"

View File

@@ -17,6 +17,28 @@ from erpnext.setup.utils import get_exchange_rate
class ExchangeRateRevaluation(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.exchange_rate_revaluation_account.exchange_rate_revaluation_account import (
ExchangeRateRevaluationAccount,
)
accounts: DF.Table[ExchangeRateRevaluationAccount]
amended_from: DF.Link | None
company: DF.Link
gain_loss_booked: DF.Currency
gain_loss_unbooked: DF.Currency
posting_date: DF.Date
rounding_loss_allowance: DF.Float
total_gain_loss: DF.Currency
# end: auto-generated types
def validate(self):
self.validate_rounding_loss_allowance()
self.set_total_gain_loss()
@@ -192,7 +214,7 @@ class ExchangeRateRevaluation(Document):
# round off balance based on currency precision
# and consider debit-credit difference allowance
currency_precision = get_currency_precision()
rounding_loss_allowance = float(rounding_loss_allowance) or 0.05
rounding_loss_allowance = float(rounding_loss_allowance)
for acc in account_details:
acc.balance_in_account_currency = flt(acc.balance_in_account_currency, currency_precision)
if abs(acc.balance_in_account_currency) <= rounding_loss_allowance:

View File

@@ -6,4 +6,29 @@ from frappe.model.document import Document
class ExchangeRateRevaluationAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link
account_currency: DF.Link | None
balance_in_account_currency: DF.Currency
balance_in_base_currency: DF.Currency
current_exchange_rate: DF.Float
gain_loss: DF.Currency
new_balance_in_account_currency: DF.Currency
new_balance_in_base_currency: DF.Currency
new_exchange_rate: DF.Float
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
party: DF.DynamicLink | None
party_type: DF.Link | None
zero_balance: DF.Check
# end: auto-generated types
pass

View File

@@ -6,4 +6,15 @@ from frappe.model.document import Document
class FinanceBook(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
finance_book_name: DF.Data | None
# end: auto-generated types
pass

View File

@@ -10,6 +10,25 @@ from frappe.utils import add_days, add_years, cstr, getdate
class FiscalYear(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.fiscal_year_company.fiscal_year_company import FiscalYearCompany
auto_created: DF.Check
companies: DF.Table[FiscalYearCompany]
disabled: DF.Check
is_short_year: DF.Check
year: DF.Data
year_end_date: DF.Date
year_start_date: DF.Date
# end: auto-generated types
def validate(self):
self.validate_dates()
self.validate_overlap()

View File

@@ -6,4 +6,18 @@ from frappe.model.document import Document
class FiscalYearCompany(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -28,6 +28,47 @@ exclude_from_linked_with = True
class GLEntry(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link | None
account_currency: DF.Link | None
against: DF.Text | None
against_voucher: DF.DynamicLink | None
against_voucher_type: DF.Link | None
company: DF.Link | None
cost_center: DF.Link | None
credit: DF.Currency
credit_in_account_currency: DF.Currency
credit_in_transaction_currency: DF.Currency
debit: DF.Currency
debit_in_account_currency: DF.Currency
debit_in_transaction_currency: DF.Currency
due_date: DF.Date | None
finance_book: DF.Link | None
fiscal_year: DF.Link | None
is_advance: DF.Literal["No", "Yes"]
is_cancelled: DF.Check
is_opening: DF.Literal["No", "Yes"]
party: DF.DynamicLink | None
party_type: DF.Link | None
posting_date: DF.Date | None
project: DF.Link | None
remarks: DF.Text | None
to_rename: DF.Check
transaction_currency: DF.Link | None
transaction_date: DF.Date | None
transaction_exchange_rate: DF.Float
voucher_detail_no: DF.Data | None
voucher_no: DF.DynamicLink | None
voucher_type: DF.Link | None
# end: auto-generated types
def autoname(self):
"""
Temporarily name doc for fast insertion

View File

@@ -17,6 +17,34 @@ from erpnext.controllers.accounts_controller import AccountsController
class InvoiceDiscounting(AccountsController):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.discounted_invoice.discounted_invoice import DiscountedInvoice
accounts_receivable_credit: DF.Link
accounts_receivable_discounted: DF.Link
accounts_receivable_unpaid: DF.Link
amended_from: DF.Link | None
bank_account: DF.Link
bank_charges: DF.Currency
bank_charges_account: DF.Link
company: DF.Link
invoices: DF.Table[DiscountedInvoice]
loan_end_date: DF.Date | None
loan_period: DF.Int
loan_start_date: DF.Date | None
posting_date: DF.Date
short_term_loan: DF.Link
status: DF.Literal["Draft", "Sanctioned", "Disbursed", "Settled", "Cancelled"]
total_amount: DF.Currency
# end: auto-generated types
def validate(self):
self.validate_mandatory()
self.validate_invoices()

View File

@@ -8,6 +8,24 @@ from frappe.model.document import Document
class ItemTaxTemplate(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.item_tax_template_detail.item_tax_template_detail import (
ItemTaxTemplateDetail,
)
company: DF.Link
disabled: DF.Check
taxes: DF.Table[ItemTaxTemplateDetail]
title: DF.Data
# end: auto-generated types
def validate(self):
self.validate_tax_accounts()

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class ItemTaxTemplateDetail(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
tax_rate: DF.Float
tax_type: DF.Link
# end: auto-generated types
pass

View File

@@ -8,7 +8,7 @@ frappe.provide("erpnext.journal_entry");
frappe.ui.form.on("Journal Entry", {
setup: function(frm) {
frm.add_fetch("bank_account", "account", "account");
frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', "Repost Payment Ledger", 'Asset', 'Asset Movement', 'Asset Depreciation Schedule', "Repost Accounting Ledger"];
frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', "Repost Payment Ledger", 'Asset', 'Asset Movement', 'Asset Depreciation Schedule', "Repost Accounting Ledger", "Unreconcile Payment", "Unreconcile Payment Entries"];
},
refresh: function(frm) {
@@ -51,9 +51,17 @@ frappe.ui.form.on("Journal Entry", {
}, __('Make'));
}
erpnext.accounts.unreconcile_payments.add_unreconcile_btn(frm);
erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
},
before_save: function(frm) {
if ((frm.doc.docstatus == 0) && (!frm.doc.is_system_generated)) {
let payment_entry_references = frm.doc.accounts.filter(elem => (elem.reference_type == "Payment Entry"));
if (payment_entry_references.length > 0) {
let rows = payment_entry_references.map(x => "#"+x.idx);
frappe.throw(__("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [frappe.utils.comma_and(rows)]));
}
}
},
make_inter_company_journal_entry: function(frm) {
var d = new frappe.ui.Dialog({
title: __("Select Company"),

View File

@@ -548,8 +548,16 @@
"icon": "fa fa-file-text",
"idx": 176,
"is_submittable": 1,
"links": [],
"modified": "2023-08-10 14:32:22.366895",
"links": [
{
"is_child_table": 1,
"link_doctype": "Bank Transaction Payments",
"link_fieldname": "payment_entry",
"parent_doctype": "Bank Transaction",
"table_fieldname": "payment_entries"
}
],
"modified": "2023-11-23 12:11:04.128015",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",

View File

@@ -35,6 +35,78 @@ class StockAccountInvalidTransaction(frappe.ValidationError):
class JournalEntry(AccountsController):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.journal_entry_account.journal_entry_account import (
JournalEntryAccount,
)
accounts: DF.Table[JournalEntryAccount]
amended_from: DF.Link | None
apply_tds: DF.Check
auto_repeat: DF.Link | None
bill_date: DF.Date | None
bill_no: DF.Data | None
cheque_date: DF.Date | None
cheque_no: DF.Data | None
clearance_date: DF.Date | None
company: DF.Link
difference: DF.Currency
due_date: DF.Date | None
finance_book: DF.Link | None
from_template: DF.Link | None
inter_company_journal_entry_reference: DF.Link | None
is_opening: DF.Literal["No", "Yes"]
is_system_generated: DF.Check
letter_head: DF.Link | None
mode_of_payment: DF.Link | None
multi_currency: DF.Check
naming_series: DF.Literal["ACC-JV-.YYYY.-"]
paid_loan: DF.Data | None
pay_to_recd_from: DF.Data | None
payment_order: DF.Link | None
posting_date: DF.Date
process_deferred_accounting: DF.Link | None
remark: DF.SmallText | None
reversal_of: DF.Link | None
select_print_heading: DF.Link | None
stock_entry: DF.Link | None
tax_withholding_category: DF.Link | None
title: DF.Data | None
total_amount: DF.Currency
total_amount_currency: DF.Link | None
total_amount_in_words: DF.Data | None
total_credit: DF.Currency
total_debit: DF.Currency
user_remark: DF.SmallText | None
voucher_type: DF.Literal[
"Journal Entry",
"Inter Company Journal Entry",
"Bank Entry",
"Cash Entry",
"Credit Card Entry",
"Debit Note",
"Credit Note",
"Contra Entry",
"Excise Entry",
"Write Off Entry",
"Opening Entry",
"Depreciation Entry",
"Exchange Rate Revaluation",
"Exchange Gain Or Loss",
"Deferred Revenue",
"Deferred Expense",
]
write_off_amount: DF.Currency
write_off_based_on: DF.Literal["Accounts Receivable", "Accounts Payable"]
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(JournalEntry, self).__init__(*args, **kwargs)
@@ -98,6 +170,8 @@ class JournalEntry(AccountsController):
"Repost Payment Ledger Items",
"Repost Accounting Ledger",
"Repost Accounting Ledger Items",
"Unreconcile Payment",
"Unreconcile Payment Entries",
)
self.make_gl_entries(1)
self.update_advance_paid()
@@ -508,7 +582,7 @@ class JournalEntry(AccountsController):
).format(d.reference_name, d.account)
)
else:
dr_or_cr = "debit" if d.credit > 0 else "credit"
dr_or_cr = "debit" if flt(d.credit) > 0 else "credit"
valid = False
for jvd in against_entries:
if flt(jvd[dr_or_cr]) > 0:
@@ -868,7 +942,7 @@ class JournalEntry(AccountsController):
party_account_currency = d.account_currency
elif frappe.get_cached_value("Account", d.account, "account_type") in ["Bank", "Cash"]:
bank_amount += d.debit_in_account_currency or d.credit_in_account_currency
bank_amount += flt(d.debit_in_account_currency) or flt(d.credit_in_account_currency)
bank_account_currency = d.account_currency
if party_type and pay_to_recd_from:

View File

@@ -203,7 +203,8 @@
"fieldtype": "Select",
"label": "Reference Type",
"no_copy": 1,
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation\nInvoice Discounting\nFees\nFull and Final Statement\nPayment Entry"
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation\nInvoice Discounting\nFees\nFull and Final Statement\nPayment Entry",
"search_index": 1
},
{
"fieldname": "reference_name",
@@ -211,7 +212,8 @@
"in_list_view": 1,
"label": "Reference Name",
"no_copy": 1,
"options": "reference_type"
"options": "reference_type",
"search_index": 1
},
{
"depends_on": "eval:doc.reference_type&&!in_list(doc.reference_type, ['Expense Claim', 'Asset', 'Employee Loan', 'Employee Advance'])",
@@ -278,13 +280,14 @@
"fieldtype": "Data",
"hidden": 1,
"label": "Reference Detail No",
"no_copy": 1
"no_copy": 1,
"search_index": 1
}
],
"idx": 1,
"istable": 1,
"links": [],
"modified": "2023-06-16 14:11:13.507807",
"modified": "2023-11-23 11:44:25.841187",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",

View File

@@ -6,4 +6,56 @@ from frappe.model.document import Document
class JournalEntryAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link
account_currency: DF.Link | None
account_type: DF.Data | None
against_account: DF.Text | None
balance: DF.Currency
bank_account: DF.Link | None
cost_center: DF.Link | None
credit: DF.Currency
credit_in_account_currency: DF.Currency
debit: DF.Currency
debit_in_account_currency: DF.Currency
exchange_rate: DF.Float
is_advance: DF.Literal["No", "Yes"]
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
party: DF.DynamicLink | None
party_balance: DF.Currency
party_type: DF.Link | None
project: DF.Link | None
reference_detail_no: DF.Data | None
reference_due_date: DF.Date | None
reference_name: DF.DynamicLink | None
reference_type: DF.Literal[
"",
"Sales Invoice",
"Purchase Invoice",
"Journal Entry",
"Sales Order",
"Purchase Order",
"Expense Claim",
"Asset",
"Loan",
"Payroll Entry",
"Employee Advance",
"Exchange Rate Revaluation",
"Invoice Discounting",
"Fees",
"Full and Final Statement",
"Payment Entry",
]
user_remark: DF.SmallText | None
# end: auto-generated types
pass

View File

@@ -7,6 +7,41 @@ from frappe.model.document import Document
class JournalEntryTemplate(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.journal_entry_template_account.journal_entry_template_account import (
JournalEntryTemplateAccount,
)
accounts: DF.Table[JournalEntryTemplateAccount]
company: DF.Link
is_opening: DF.Literal["No", "Yes"]
multi_currency: DF.Check
naming_series: DF.Literal
template_title: DF.Data
voucher_type: DF.Literal[
"Journal Entry",
"Inter Company Journal Entry",
"Bank Entry",
"Cash Entry",
"Credit Card Entry",
"Debit Note",
"Credit Note",
"Contra Entry",
"Excise Entry",
"Write Off Entry",
"Opening Entry",
"Depreciation Entry",
"Exchange Rate Revaluation",
]
# end: auto-generated types
pass

View File

@@ -7,4 +7,18 @@ from frappe.model.document import Document
class JournalEntryTemplateAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -10,6 +10,27 @@ from erpnext.accounts.doctype.account.account import merge_account
class LedgerMerge(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.ledger_merge_accounts.ledger_merge_accounts import (
LedgerMergeAccounts,
)
account: DF.Link
account_name: DF.Data
company: DF.Link
is_group: DF.Check
merge_accounts: DF.Table[LedgerMergeAccounts]
root_type: DF.Literal["", "Asset", "Liability", "Income", "Expense", "Equity"]
status: DF.Literal["Pending", "Success", "Partial Success", "Error"]
# end: auto-generated types
def start_merge(self):
from frappe.utils.background_jobs import enqueue
from frappe.utils.scheduler import is_scheduler_inactive

View File

@@ -6,4 +6,20 @@ from frappe.model.document import Document
class LedgerMergeAccounts(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link
account_name: DF.Data
merged: DF.Check
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -10,6 +10,27 @@ exclude_from_linked_with = True
class LoyaltyPointEntry(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link | None
customer: DF.Link | None
expiry_date: DF.Date | None
invoice: DF.DynamicLink | None
invoice_type: DF.Link | None
loyalty_points: DF.Int
loyalty_program: DF.Link | None
loyalty_program_tier: DF.Data | None
posting_date: DF.Date | None
purchase_amount: DF.Currency
redeem_against: DF.Link | None
# end: auto-generated types
pass

View File

@@ -6,4 +6,20 @@ from frappe.model.document import Document
class LoyaltyPointEntryRedemption(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
redeemed_points: DF.Int
redemption_date: DF.Date | None
sales_invoice: DF.Data | None
# end: auto-generated types
pass

View File

@@ -9,6 +9,33 @@ from frappe.utils import flt, today
class LoyaltyProgram(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.loyalty_program_collection.loyalty_program_collection import (
LoyaltyProgramCollection,
)
auto_opt_in: DF.Check
collection_rules: DF.Table[LoyaltyProgramCollection]
company: DF.Link | None
conversion_factor: DF.Float
cost_center: DF.Link | None
customer_group: DF.Link | None
customer_territory: DF.Link | None
expense_account: DF.Link | None
expiry_duration: DF.Int
from_date: DF.Date
loyalty_program_name: DF.Data
loyalty_program_type: DF.Literal["Single Tier Program", "Multiple Tier Program"]
to_date: DF.Date | None
# end: auto-generated types
pass

View File

@@ -6,4 +6,20 @@ from frappe.model.document import Document
class LoyaltyProgramCollection(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
collection_factor: DF.Currency
min_spent: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
tier_name: DF.Data
# end: auto-generated types
pass

View File

@@ -8,6 +8,24 @@ from frappe.model.document import Document
class ModeofPayment(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.mode_of_payment_account.mode_of_payment_account import (
ModeofPaymentAccount,
)
accounts: DF.Table[ModeofPaymentAccount]
enabled: DF.Check
mode_of_payment: DF.Data
type: DF.Literal["Cash", "Bank", "General", "Phone"]
# end: auto-generated types
def validate(self):
self.validate_accounts()
self.validate_repeating_companies()

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class ModeofPaymentAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link | None
default_account: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -9,6 +9,23 @@ from frappe.utils import add_months, flt
class MonthlyDistribution(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.monthly_distribution_percentage.monthly_distribution_percentage import (
MonthlyDistributionPercentage,
)
distribution_id: DF.Data
fiscal_year: DF.Link | None
percentages: DF.Table[MonthlyDistributionPercentage]
# end: auto-generated types
@frappe.whitelist()
def get_months(self):
month_list = [

View File

@@ -6,4 +6,19 @@ from frappe.model.document import Document
class MonthlyDistributionPercentage(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
month: DF.Data
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
percentage_allocation: DF.Float
# end: auto-generated types
pass

View File

@@ -14,6 +14,25 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
class OpeningInvoiceCreationTool(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.opening_invoice_creation_tool_item.opening_invoice_creation_tool_item import (
OpeningInvoiceCreationToolItem,
)
company: DF.Link
cost_center: DF.Link | None
create_missing_party: DF.Check
invoice_type: DF.Literal["Sales", "Purchase"]
invoices: DF.Table[OpeningInvoiceCreationToolItem]
# end: auto-generated types
def onload(self):
"""Load the Opening Invoice summary"""
summary, max_count = self.get_opening_invoice_summary()

View File

@@ -218,6 +218,7 @@ def make_customer(customer=None):
"territory": "All Territories",
}
)
if not frappe.db.exists("Customer", customer_name):
customer.insert(ignore_permissions=True)
return customer.name

View File

@@ -6,4 +6,27 @@ from frappe.model.document import Document
class OpeningInvoiceCreationToolItem(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
cost_center: DF.Link | None
due_date: DF.Date | None
invoice_number: DF.Data | None
item_name: DF.Data | None
outstanding_amount: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
party: DF.DynamicLink
party_type: DF.Link | None
posting_date: DF.Date | None
qty: DF.Data | None
temporary_opening_account: DF.Link | None
# end: auto-generated types
pass

View File

@@ -6,4 +6,31 @@ from frappe.model.document import Document
class OverduePayment(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
description: DF.SmallText | None
discounted_amount: DF.Currency
due_date: DF.Date | None
dunning_level: DF.Int
interest: DF.Currency
invoice_portion: DF.Percent
mode_of_payment: DF.Link | None
outstanding: DF.Currency
overdue_days: DF.Data | None
paid_amount: DF.Currency
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
payment_amount: DF.Currency
payment_schedule: DF.Data | None
payment_term: DF.Link | None
sales_invoice: DF.Link
# end: auto-generated types
pass

View File

@@ -6,4 +6,20 @@ from frappe.model.document import Document
class PartyAccount(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account: DF.Link | None
advance_account: DF.Link | None
company: DF.Link
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -7,6 +7,20 @@ from frappe.model.document import Document
class PartyLink(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
primary_party: DF.DynamicLink | None
primary_role: DF.Link
secondary_party: DF.DynamicLink | None
secondary_role: DF.Link | None
# end: auto-generated types
def validate(self):
if self.primary_role not in ["Customer", "Supplier"]:
frappe.throw(

View File

@@ -9,7 +9,7 @@ erpnext.accounts.taxes.setup_tax_filters("Advance Taxes and Charges");
frappe.ui.form.on('Payment Entry', {
onload: function(frm) {
frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', 'Repost Payment Ledger','Repost Accounting Ledger', 'Unreconcile Payments', 'Unreconcile Payment Entries'];
frm.ignore_doctypes_on_cancel_all = ['Sales Invoice', 'Purchase Invoice', 'Journal Entry', 'Repost Payment Ledger','Repost Accounting Ledger', 'Unreconcile Payment', 'Unreconcile Payment Entries'];
if(frm.doc.__islocal) {
if (!frm.doc.paid_from) frm.set_value("paid_from_account_currency", null);
@@ -154,7 +154,13 @@ frappe.ui.form.on('Payment Entry', {
frm.events.set_dynamic_labels(frm);
frm.events.show_general_ledger(frm);
erpnext.accounts.ledger_preview.show_accounting_ledger_preview(frm);
erpnext.accounts.unreconcile_payments.add_unreconcile_btn(frm);
if((frm.doc.references) && (frm.doc.references.find((elem) => {return elem.exchange_gain_loss != 0}))) {
frm.add_custom_button(__("View Exchange Gain/Loss Journals"), function() {
frappe.set_route("List", "Journal Entry", {"voucher_type": "Exchange Gain Or Loss", "reference_name": frm.doc.name});
}, __('Actions'));
}
erpnext.accounts.unreconcile_payment.add_unreconcile_btn(frm);
},
validate_company: (frm) => {
@@ -847,6 +853,7 @@ frappe.ui.form.on('Payment Entry', {
var allocated_positive_outstanding = paid_amount + allocated_negative_outstanding;
} else if (in_list(["Customer", "Supplier"], frm.doc.party_type)) {
total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"))
if(paid_amount > total_negative_outstanding) {
if(total_negative_outstanding == 0) {
frappe.msgprint(

View File

@@ -595,6 +595,7 @@
"fieldname": "status",
"fieldtype": "Select",
"label": "Status",
"no_copy": 1,
"options": "\nDraft\nSubmitted\nCancelled",
"read_only": 1
},
@@ -749,8 +750,16 @@
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2023-06-23 18:07:38.023010",
"links": [
{
"is_child_table": 1,
"link_doctype": "Bank Transaction Payments",
"link_fieldname": "payment_entry",
"parent_doctype": "Bank Transaction",
"table_fieldname": "payment_entries"
}
],
"modified": "2023-11-23 12:07:20.887885",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry",

View File

@@ -9,6 +9,8 @@ import frappe
from frappe import ValidationError, _, qb, scrub, throw
from frappe.utils import cint, comma_or, flt, getdate, nowdate
from frappe.utils.data import comma_and, fmt_money
from pypika import Case
from pypika.functions import Coalesce, Sum
import erpnext
from erpnext.accounts.doctype.bank_account.bank_account import (
@@ -33,6 +35,7 @@ from erpnext.accounts.utils import (
get_account_currency,
get_balance_on,
get_outstanding_invoices,
get_party_types_from_account_type,
)
from erpnext.controllers.accounts_controller import (
AccountsController,
@@ -83,7 +86,6 @@ class PaymentEntry(AccountsController):
self.apply_taxes()
self.set_amounts_after_tax()
self.clear_unallocated_reference_document_rows()
self.validate_payment_against_negative_invoice()
self.validate_transaction_reference()
self.set_title()
self.set_remarks()
@@ -104,9 +106,17 @@ class PaymentEntry(AccountsController):
self.set_status()
def set_liability_account(self):
if not self.book_advance_payments_in_separate_party_account:
# Auto setting liability account should only be done during 'draft' status
if self.docstatus > 0:
return
if not frappe.db.get_value(
"Company", self.company, "book_advance_payments_in_separate_party_account"
):
return
# Important to set this flag for the gl building logic to work properly
self.book_advance_payments_in_separate_party_account = True
account_type = frappe.get_value(
"Account", {"name": self.party_account, "company": self.company}, "account_type"
)
@@ -116,11 +126,13 @@ class PaymentEntry(AccountsController):
):
return
if self.unallocated_amount == 0:
for d in self.references:
if d.reference_doctype in ["Sales Order", "Purchase Order"]:
break
else:
if self.references:
allowed_types = frozenset(["Sales Order", "Purchase Order"])
reference_types = set([x.reference_doctype for x in self.references])
# If there are referencers other than `allowed_types`, treat this as a normal payment entry
if reference_types - allowed_types:
self.book_advance_payments_in_separate_party_account = False
return
liability_account = get_party_account(
@@ -148,7 +160,7 @@ class PaymentEntry(AccountsController):
"Repost Payment Ledger Items",
"Repost Accounting Ledger",
"Repost Accounting Ledger Items",
"Unreconcile Payments",
"Unreconcile Payment",
"Unreconcile Payment Entries",
)
super(PaymentEntry, self).on_cancel()
@@ -271,16 +283,18 @@ class PaymentEntry(AccountsController):
# if no payment template is used by invoice and has a custom term(no `payment_term`), then invoice outstanding will be in 'None' key
latest = latest.get(d.payment_term) or latest.get(None)
# The reference has already been fully paid
if not latest:
frappe.throw(
_("{0} {1} has already been fully paid.").format(_(d.reference_doctype), d.reference_name)
)
# The reference has already been partly paid
elif latest.outstanding_amount < latest.invoice_amount and flt(
d.outstanding_amount, d.precision("outstanding_amount")
) != flt(latest.outstanding_amount, d.precision("outstanding_amount")):
elif (
latest.outstanding_amount < latest.invoice_amount
and flt(d.outstanding_amount, d.precision("outstanding_amount"))
!= flt(latest.outstanding_amount, d.precision("outstanding_amount"))
and d.payment_term == ""
):
frappe.throw(
_(
"{0} {1} has already been partly paid. Please use the 'Get Outstanding Invoice' or the 'Get Outstanding Orders' button to get the latest outstanding amounts."
@@ -950,35 +964,6 @@ class PaymentEntry(AccountsController):
self.name,
)
def validate_payment_against_negative_invoice(self):
if (self.payment_type != "Pay" or self.party_type != "Customer") and (
self.payment_type != "Receive" or self.party_type != "Supplier"
):
return
total_negative_outstanding = sum(
abs(flt(d.outstanding_amount)) for d in self.get("references") if flt(d.outstanding_amount) < 0
)
paid_amount = self.paid_amount if self.payment_type == "Receive" else self.received_amount
additional_charges = sum(flt(d.amount) for d in self.deductions)
if not total_negative_outstanding:
if self.party_type == "Customer":
msg = _("Cannot pay to Customer without any negative outstanding invoice")
else:
msg = _("Cannot receive from Supplier without any negative outstanding invoice")
frappe.throw(msg, InvalidPaymentEntry)
elif paid_amount - additional_charges > total_negative_outstanding:
frappe.throw(
_("Paid Amount cannot be greater than total negative outstanding amount {0}").format(
fmt_money(total_negative_outstanding)
),
InvalidPaymentEntry,
)
def set_title(self):
if frappe.flags.in_import and self.title:
# do not set title dynamically if title exists during data import.
@@ -1049,6 +1034,7 @@ class PaymentEntry(AccountsController):
self.add_bank_gl_entries(gl_entries)
self.add_deductions_gl_entries(gl_entries)
self.add_tax_gl_entries(gl_entries)
add_regional_gl_entries(gl_entries, self)
return gl_entries
def make_gl_entries(self, cancel=0, adv_adj=0):
@@ -1081,81 +1067,105 @@ class PaymentEntry(AccountsController):
item=self,
)
dr_or_cr = (
"credit" if erpnext.get_party_account_type(self.party_type) == "Receivable" else "debit"
)
for d in self.get("references"):
cost_center = self.cost_center
if d.reference_doctype == "Sales Invoice" and not cost_center:
cost_center = frappe.db.get_value(d.reference_doctype, d.reference_name, "cost_center")
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
if self.book_advance_payments_in_separate_party_account:
gle = party_gl_dict.copy()
allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference(d)
if self.book_advance_payments_in_separate_party_account:
against_voucher_type = "Payment Entry"
against_voucher = self.name
if self.payment_type == "Receive":
amount = self.base_paid_amount
else:
against_voucher_type = d.reference_doctype
against_voucher = d.reference_name
amount = self.base_received_amount
gle.update(
{
dr_or_cr: allocated_amount_in_company_currency,
dr_or_cr + "_in_account_currency": d.allocated_amount,
"against_voucher_type": against_voucher_type,
"against_voucher": against_voucher,
"cost_center": cost_center,
}
)
gl_entries.append(gle)
if self.unallocated_amount:
exchange_rate = self.get_exchange_rate()
base_unallocated_amount = self.unallocated_amount * exchange_rate
gle = party_gl_dict.copy()
amount_in_account_currency = amount * exchange_rate
gle.update(
{
dr_or_cr + "_in_account_currency": self.unallocated_amount,
dr_or_cr: base_unallocated_amount,
dr_or_cr: amount,
dr_or_cr + "_in_account_currency": amount_in_account_currency,
"against_voucher_type": "Payment Entry",
"against_voucher": self.name,
"cost_center": self.cost_center,
}
)
gl_entries.append(gle)
else:
for d in self.get("references"):
# re-defining dr_or_cr for every reference in order to avoid the last value affecting calculation of reverse
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
cost_center = self.cost_center
if d.reference_doctype == "Sales Invoice" and not cost_center:
cost_center = frappe.db.get_value(d.reference_doctype, d.reference_name, "cost_center")
def make_advance_gl_entries(self, against_voucher_type=None, against_voucher=None, cancel=0):
if self.book_advance_payments_in_separate_party_account:
gl_entries = []
for d in self.get("references"):
if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Journal Entry"):
if not (against_voucher_type and against_voucher) or (
d.reference_doctype == against_voucher_type and d.reference_name == against_voucher
):
self.make_invoice_liability_entry(gl_entries, d)
gle = party_gl_dict.copy()
if cancel:
for entry in gl_entries:
frappe.db.set_value(
"GL Entry",
allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference(d)
reverse_dr_or_cr = 0
if d.reference_doctype in ["Sales Invoice", "Purchase Invoice"]:
is_return = frappe.db.get_value(d.reference_doctype, d.reference_name, "is_return")
payable_party_types = get_party_types_from_account_type("Payable")
receivable_party_types = get_party_types_from_account_type("Receivable")
if is_return and self.party_type in receivable_party_types and (self.payment_type == "Pay"):
reverse_dr_or_cr = 1
elif (
is_return and self.party_type in payable_party_types and (self.payment_type == "Receive")
):
reverse_dr_or_cr = 1
if is_return and not reverse_dr_or_cr:
dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
gle.update(
{
"voucher_no": self.name,
"voucher_type": self.doctype,
"voucher_detail_no": entry.voucher_detail_no,
"against_voucher_type": entry.against_voucher_type,
"against_voucher": entry.against_voucher,
},
"is_cancelled",
1,
dr_or_cr: abs(allocated_amount_in_company_currency),
dr_or_cr + "_in_account_currency": abs(d.allocated_amount),
"against_voucher_type": d.reference_doctype,
"against_voucher": d.reference_name,
"cost_center": cost_center,
}
)
gl_entries.append(gle)
if self.unallocated_amount:
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
exchange_rate = self.get_exchange_rate()
base_unallocated_amount = self.unallocated_amount * exchange_rate
gle = party_gl_dict.copy()
gle.update(
{
dr_or_cr + "_in_account_currency": self.unallocated_amount,
dr_or_cr: base_unallocated_amount,
}
)
make_reverse_gl_entries(gl_entries=gl_entries, partial_cancel=True)
else:
make_gl_entries(gl_entries)
gl_entries.append(gle)
def make_invoice_liability_entry(self, gl_entries, invoice):
def make_advance_gl_entries(
self, entry: object | dict = None, cancel: bool = 0, update_outstanding: str = "Yes"
):
gl_entries = []
self.add_advance_gl_entries(gl_entries, entry)
if cancel:
make_reverse_gl_entries(gl_entries, partial_cancel=True)
else:
make_gl_entries(gl_entries, update_outstanding=update_outstanding)
def add_advance_gl_entries(self, gl_entries: list, entry: object | dict | None):
"""
If 'entry' is passed, GL enties only for that reference is added.
"""
if self.book_advance_payments_in_separate_party_account:
references = [x for x in self.get("references")]
if entry:
references = [x for x in self.get("references") if x.name == entry.name]
for ref in references:
if ref.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Journal Entry"):
self.add_advance_gl_for_reference(gl_entries, ref)
def add_advance_gl_for_reference(self, gl_entries, invoice):
args_dict = {
"party_type": self.party_type,
"party": self.party,
@@ -1679,13 +1689,42 @@ def get_outstanding_reference_documents(args, validate=False):
return data
def split_invoices_based_on_payment_terms(outstanding_invoices, company):
invoice_ref_based_on_payment_terms = {}
def split_invoices_based_on_payment_terms(outstanding_invoices, company) -> list:
"""Split a list of invoices based on their payment terms."""
exc_rates = get_currency_data(outstanding_invoices, company)
outstanding_invoices_after_split = []
for entry in outstanding_invoices:
if entry.voucher_type in ["Sales Invoice", "Purchase Invoice"]:
if payment_term_template := frappe.db.get_value(
entry.voucher_type, entry.voucher_no, "payment_terms_template"
):
split_rows = get_split_invoice_rows(entry, payment_term_template, exc_rates)
if not split_rows:
continue
frappe.msgprint(
_("Splitting {0} {1} into {2} rows as per Payment Terms").format(
_(entry.voucher_type), frappe.bold(entry.voucher_no), len(split_rows)
),
alert=True,
)
outstanding_invoices_after_split += split_rows
continue
# If not an invoice or no payment terms template, add as it is
outstanding_invoices_after_split.append(entry)
return outstanding_invoices_after_split
def get_currency_data(outstanding_invoices: list, company: str = None) -> dict:
"""Get currency and conversion data for a list of invoices."""
exc_rates = frappe._dict()
company_currency = (
frappe.db.get_value("Company", company, "default_currency") if company else None
)
exc_rates = frappe._dict()
for doctype in ["Sales Invoice", "Purchase Invoice"]:
invoices = [x.voucher_no for x in outstanding_invoices if x.voucher_type == doctype]
for x in frappe.db.get_all(
@@ -1700,73 +1739,54 @@ def split_invoices_based_on_payment_terms(outstanding_invoices, company):
company_currency=company_currency,
)
for idx, d in enumerate(outstanding_invoices):
if d.voucher_type in ["Sales Invoice", "Purchase Invoice"]:
payment_term_template = frappe.db.get_value(
d.voucher_type, d.voucher_no, "payment_terms_template"
return exc_rates
def get_split_invoice_rows(invoice: dict, payment_term_template: str, exc_rates: dict) -> list:
"""Split invoice based on its payment schedule table."""
split_rows = []
allocate_payment_based_on_payment_terms = frappe.db.get_value(
"Payment Terms Template", payment_term_template, "allocate_payment_based_on_payment_terms"
)
if not allocate_payment_based_on_payment_terms:
return [invoice]
payment_schedule = frappe.get_all(
"Payment Schedule", filters={"parent": invoice.voucher_no}, fields=["*"], order_by="due_date"
)
for payment_term in payment_schedule:
if not payment_term.outstanding > 0.1:
continue
doc_details = exc_rates.get(payment_term.parent, None)
is_multi_currency_acc = (doc_details.currency != doc_details.company_currency) and (
doc_details.party_account_currency != doc_details.company_currency
)
payment_term_outstanding = flt(payment_term.outstanding)
if not is_multi_currency_acc:
payment_term_outstanding = doc_details.conversion_rate * flt(payment_term.outstanding)
split_rows.append(
frappe._dict(
{
"due_date": invoice.due_date,
"currency": invoice.currency,
"voucher_no": invoice.voucher_no,
"voucher_type": invoice.voucher_type,
"posting_date": invoice.posting_date,
"invoice_amount": flt(invoice.invoice_amount),
"outstanding_amount": payment_term_outstanding
if payment_term_outstanding
else invoice.outstanding_amount,
"payment_term_outstanding": payment_term_outstanding,
"payment_amount": payment_term.payment_amount,
"payment_term": payment_term.payment_term,
}
)
if payment_term_template:
allocate_payment_based_on_payment_terms = frappe.get_cached_value(
"Payment Terms Template", payment_term_template, "allocate_payment_based_on_payment_terms"
)
if allocate_payment_based_on_payment_terms:
payment_schedule = frappe.get_all(
"Payment Schedule", filters={"parent": d.voucher_no}, fields=["*"]
)
)
for payment_term in payment_schedule:
if payment_term.outstanding > 0.1:
doc_details = exc_rates.get(payment_term.parent, None)
is_multi_currency_acc = (doc_details.currency != doc_details.company_currency) and (
doc_details.party_account_currency != doc_details.company_currency
)
payment_term_outstanding = flt(payment_term.outstanding)
if not is_multi_currency_acc:
payment_term_outstanding = doc_details.conversion_rate * flt(payment_term.outstanding)
invoice_ref_based_on_payment_terms.setdefault(idx, [])
invoice_ref_based_on_payment_terms[idx].append(
frappe._dict(
{
"due_date": d.due_date,
"currency": d.currency,
"voucher_no": d.voucher_no,
"voucher_type": d.voucher_type,
"posting_date": d.posting_date,
"invoice_amount": flt(d.invoice_amount),
"outstanding_amount": flt(d.outstanding_amount),
"payment_term_outstanding": payment_term_outstanding,
"allocated_amount": payment_term_outstanding
if payment_term_outstanding
else d.outstanding_amount,
"payment_amount": payment_term.payment_amount,
"payment_term": payment_term.payment_term,
"account": d.account,
}
)
)
outstanding_invoices_after_split = []
if invoice_ref_based_on_payment_terms:
for idx, ref in invoice_ref_based_on_payment_terms.items():
voucher_no = ref[0]["voucher_no"]
voucher_type = ref[0]["voucher_type"]
frappe.msgprint(
_("Spliting {} {} into {} row(s) as per Payment Terms").format(
voucher_type, voucher_no, len(ref)
),
alert=True,
)
outstanding_invoices_after_split += invoice_ref_based_on_payment_terms[idx]
existing_row = list(filter(lambda x: x.get("voucher_no") == voucher_no, outstanding_invoices))
index = outstanding_invoices.index(existing_row[0])
outstanding_invoices.pop(index)
outstanding_invoices_after_split += outstanding_invoices
return outstanding_invoices_after_split
return split_rows
def get_orders_to_be_billed(
@@ -1971,18 +1991,24 @@ def get_company_defaults(company):
def get_outstanding_on_journal_entry(name):
res = frappe.db.sql(
"SELECT "
'CASE WHEN party_type IN ("Customer") '
"THEN ifnull(sum(debit_in_account_currency - credit_in_account_currency), 0) "
"ELSE ifnull(sum(credit_in_account_currency - debit_in_account_currency), 0) "
"END as outstanding_amount "
"FROM `tabGL Entry` WHERE (voucher_no=%s OR against_voucher=%s) "
"AND party_type IS NOT NULL "
'AND party_type != ""',
(name, name),
as_dict=1,
)
gl = frappe.qb.DocType("GL Entry")
res = (
frappe.qb.from_(gl)
.select(
Case()
.when(
gl.party_type == "Customer",
Coalesce(Sum(gl.debit_in_account_currency - gl.credit_in_account_currency), 0),
)
.else_(Coalesce(Sum(gl.credit_in_account_currency - gl.debit_in_account_currency), 0))
.as_("outstanding_amount")
)
.where(
(Coalesce(gl.party_type, "") != "")
& (gl.is_cancelled == 0)
& ((gl.voucher_no == name) | (gl.against_voucher == name))
)
).run(as_dict=True)
outstanding_amount = res[0].get("outstanding_amount", 0) if res else 0
@@ -2607,3 +2633,8 @@ def make_payment_order(source_name, target_doc=None):
)
return doclist
@erpnext.allow_regional
def add_regional_gl_entries(gl_entries, doc):
return

View File

@@ -6,10 +6,12 @@ import unittest
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import flt, nowdate
from frappe.utils import add_days, flt, nowdate
from erpnext.accounts.doctype.account.test_account import create_account
from erpnext.accounts.doctype.payment_entry.payment_entry import (
InvalidPaymentEntry,
get_outstanding_reference_documents,
get_payment_entry,
get_reference_details,
)
@@ -683,17 +685,6 @@ class TestPaymentEntry(FrappeTestCase):
self.validate_gl_entries(pe.name, expected_gle)
def test_payment_against_negative_sales_invoice(self):
pe1 = frappe.new_doc("Payment Entry")
pe1.payment_type = "Pay"
pe1.company = "_Test Company"
pe1.party_type = "Customer"
pe1.party = "_Test Customer"
pe1.paid_from = "_Test Cash - _TC"
pe1.paid_amount = 100
pe1.received_amount = 100
self.assertRaises(InvalidPaymentEntry, pe1.validate)
si1 = create_sales_invoice()
# create full payment entry against si1
@@ -751,8 +742,6 @@ class TestPaymentEntry(FrappeTestCase):
# pay more than outstanding against si1
pe3 = get_payment_entry("Sales Invoice", si1.name, bank_account="_Test Cash - _TC")
pe3.paid_amount = pe3.received_amount = 300
self.assertRaises(InvalidPaymentEntry, pe3.validate)
# pay negative outstanding against si1
pe3.paid_to = "Debtors - _TC"
@@ -1262,6 +1251,266 @@ class TestPaymentEntry(FrappeTestCase):
so.reload()
self.assertEqual(so.advance_paid, so.rounded_total)
def test_receive_payment_from_payable_party_type(self):
"""
Checks GL entries generated while receiving payments from a Payable Party Type.
"""
pe = create_payment_entry(
party_type="Supplier",
party="_Test Supplier",
payment_type="Receive",
paid_from="Creditors - _TC",
paid_to="_Test Cash - _TC",
save=True,
submit=True,
)
self.voucher_no = pe.name
self.expected_gle = [
{"account": "Creditors - _TC", "debit": 0.0, "credit": 1000.0},
{"account": "_Test Cash - _TC", "debit": 1000.0, "credit": 0.0},
]
self.check_gl_entries()
def test_payment_against_partial_return_invoice(self):
"""
Checks GL entries generated for partial return invoice payments.
"""
si = create_sales_invoice(qty=10, rate=10, customer="_Test Customer")
credit_note = create_sales_invoice(
qty=-4, rate=10, customer="_Test Customer", is_return=1, return_against=si.name
)
pe = create_payment_entry(
party_type="Customer",
party="_Test Customer",
payment_type="Receive",
paid_from="Debtors - _TC",
paid_to="_Test Cash - _TC",
)
pe.set(
"references",
[
{
"reference_doctype": "Sales Invoice",
"reference_name": si.name,
"due_date": si.get("due_date"),
"total_amount": si.grand_total,
"outstanding_amount": si.outstanding_amount,
"allocated_amount": si.outstanding_amount,
},
{
"reference_doctype": "Sales Invoice",
"reference_name": credit_note.name,
"due_date": credit_note.get("due_date"),
"total_amount": credit_note.grand_total,
"outstanding_amount": credit_note.outstanding_amount,
"allocated_amount": credit_note.outstanding_amount,
},
],
)
pe.save()
pe.submit()
self.assertEqual(pe.total_allocated_amount, 60)
self.assertEqual(pe.unallocated_amount, 940)
self.voucher_no = pe.name
self.expected_gle = [
{"account": "Debtors - _TC", "debit": 40.0, "credit": 0.0},
{"account": "Debtors - _TC", "debit": 0.0, "credit": 940.0},
{"account": "Debtors - _TC", "debit": 0.0, "credit": 100.0},
{"account": "_Test Cash - _TC", "debit": 1000.0, "credit": 0.0},
]
self.check_gl_entries()
def test_ledger_entries_for_advance_as_liability(self):
from erpnext.accounts.doctype.account.test_account import create_account
company = "_Test Company"
advance_account = create_account(
parent_account="Current Assets - _TC",
account_name="Advances Received",
company=company,
account_type="Receivable",
)
frappe.db.set_value(
"Company",
company,
{
"book_advance_payments_in_separate_party_account": 1,
"default_advance_received_account": advance_account,
},
)
# Advance Payment
pe = create_payment_entry(
party_type="Customer",
party="_Test Customer",
payment_type="Receive",
paid_from="Debtors - _TC",
paid_to="_Test Cash - _TC",
)
pe.save() # use save() to trigger set_liability_account()
pe.submit()
# Normal Invoice
si = create_sales_invoice(qty=10, rate=100, customer="_Test Customer")
pre_reconciliation_gle = [
{"account": advance_account, "debit": 0.0, "credit": 1000.0},
{"account": "_Test Cash - _TC", "debit": 1000.0, "credit": 0.0},
]
pre_reconciliation_ple = [
{
"account": advance_account,
"voucher_no": pe.name,
"against_voucher_no": pe.name,
"amount": -1000.0,
}
]
self.voucher_no = pe.name
self.expected_gle = pre_reconciliation_gle
self.expected_ple = pre_reconciliation_ple
self.check_gl_entries()
self.check_pl_entries()
# Partially reconcile advance against invoice
pr = frappe.get_doc("Payment Reconciliation")
pr.company = company
pr.party_type = "Customer"
pr.party = "_Test Customer"
pr.receivable_payable_account = si.debit_to
pr.default_advance_account = advance_account
pr.payment_name = pe.name
pr.invoice_name = si.name
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 1)
self.assertEqual(len(pr.payments), 1)
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.allocation[0].allocated_amount = 400
pr.reconcile()
# assert General and Payment Ledger entries post partial reconciliation
self.expected_gle = [
{"account": si.debit_to, "debit": 0.0, "credit": 400.0},
{"account": advance_account, "debit": 400.0, "credit": 0.0},
{"account": advance_account, "debit": 0.0, "credit": 1000.0},
{"account": "_Test Cash - _TC", "debit": 1000.0, "credit": 0.0},
]
self.expected_ple = [
{
"account": advance_account,
"voucher_no": pe.name,
"against_voucher_no": pe.name,
"amount": -1000.0,
},
{
"account": si.debit_to,
"voucher_no": pe.name,
"against_voucher_no": si.name,
"amount": -400.0,
},
{
"account": advance_account,
"voucher_no": pe.name,
"against_voucher_no": pe.name,
"amount": 400.0,
},
]
self.check_gl_entries()
self.check_pl_entries()
# Unreconcile
unrecon = (
frappe.get_doc(
{
"doctype": "Unreconcile Payment",
"company": company,
"voucher_type": pe.doctype,
"voucher_no": pe.name,
"allocations": [{"reference_doctype": si.doctype, "reference_name": si.name}],
}
)
.save()
.submit()
)
self.voucher_no = pe.name
self.expected_gle = pre_reconciliation_gle
self.expected_ple = pre_reconciliation_ple
self.check_gl_entries()
self.check_pl_entries()
def check_pl_entries(self):
ple = frappe.qb.DocType("Payment Ledger Entry")
pl_entries = (
frappe.qb.from_(ple)
.select(ple.account, ple.voucher_no, ple.against_voucher_no, ple.amount)
.where((ple.voucher_no == self.voucher_no) & (ple.delinked == 0))
.orderby(ple.creation)
).run(as_dict=True)
for row in range(len(self.expected_ple)):
for field in ["account", "voucher_no", "against_voucher_no", "amount"]:
self.assertEqual(self.expected_ple[row][field], pl_entries[row][field])
def check_gl_entries(self):
gle = frappe.qb.DocType("GL Entry")
gl_entries = (
frappe.qb.from_(gle)
.select(
gle.account,
gle.debit,
gle.credit,
)
.where((gle.voucher_no == self.voucher_no) & (gle.is_cancelled == 0))
.orderby(gle.account, gle.debit, gle.credit, order=frappe.qb.desc)
).run(as_dict=True)
for row in range(len(self.expected_gle)):
for field in ["account", "debit", "credit"]:
self.assertEqual(self.expected_gle[row][field], gl_entries[row][field])
def test_outstanding_invoices_api(self):
"""
Test if `get_outstanding_reference_documents` fetches invoices in the right order.
"""
customer = create_customer("Max Mustermann", "INR")
create_payment_terms_template()
# SI has an earlier due date and SI2 has a later due date
si = create_sales_invoice(
qty=1, rate=100, customer=customer, posting_date=add_days(nowdate(), -4)
)
si2 = create_sales_invoice(do_not_save=1, qty=1, rate=100, customer=customer)
si2.payment_terms_template = "Test Receivable Template"
si2.submit()
args = {
"posting_date": nowdate(),
"company": "_Test Company",
"party_type": "Customer",
"payment_type": "Pay",
"party": customer,
"party_account": "Debtors - _TC",
}
args.update(
{
"get_outstanding_invoices": True,
"from_posting_date": add_days(nowdate(), -4),
"to_posting_date": add_days(nowdate(), 2),
}
)
references = get_outstanding_reference_documents(args)
self.assertEqual(len(references), 3)
self.assertEqual(references[0].voucher_no, si.name)
self.assertEqual(references[1].voucher_no, si2.name)
self.assertEqual(references[2].voucher_no, si2.name)
self.assertEqual(references[1].payment_term, "Basic Amount Receivable")
self.assertEqual(references[2].payment_term, "Tax Receivable")
def create_payment_entry(**args):
payment_entry = frappe.new_doc("Payment Entry")
@@ -1322,6 +1571,9 @@ def create_payment_terms_template():
def create_payment_terms_template_with_discount(
name=None, discount_type=None, discount=None, template_name=None
):
"""
Create a Payment Terms Template with % or amount discount.
"""
create_payment_term(name or "30 Credit Days with 10% Discount")
template_name = template_name or "Test Discount Template"

Some files were not shown because too many files have changed in this diff Show More